]> git.saurik.com Git - wxWidgets.git/blob - src/mac/classic/morefile/MoreFilesExtras.h
use popen() instead of wxExecute(), it works inside wxYield() unlike the latter
[wxWidgets.git] / src / mac / classic / morefile / MoreFilesExtras.h
1 /*
2 File: MoreFilesExtras.h
3
4 Contains: A collection of useful high-level File Manager routines.
5
6 Version: Technology: MoreFiles
7 Release: 1.5.2
8
9 Copyright: © 1992-2001 by Apple Computer, Inc., all rights reserved.
10
11 Bugs?: For bug reports, consult the following page on
12 the World Wide Web:
13
14 http://developer.apple.com/bugreporter/
15
16 */
17
18 /*
19 You may incorporate this sample code into your applications without
20 restriction, though the sample code has been provided "AS IS" and the
21 responsibility for its operation is 100% yours. However, what you are
22 not permitted to do is to redistribute the source as "DSC Sample Code"
23 after having made changes. If you're going to re-distribute the source,
24 we require that you make it clear in the source that the code was
25 descended from Apple Sample Code, but that you've made changes.
26 */
27
28 #ifndef __MOREFILESEXTRAS__
29 #define __MOREFILESEXTRAS__
30
31 #ifndef __MACTYPES__
32 #include <MacTypes.h>
33 #endif
34
35 #ifndef __FILES__
36 #include <Files.h>
37 #endif
38
39 #include "Optimization.h"
40
41
42 #if PRAGMA_ONCE
43 #pragma once
44 #endif
45
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49
50 #if PRAGMA_IMPORT
51 #pragma import on
52 #endif
53
54 #if PRAGMA_STRUCT_ALIGN
55 #pragma options align=mac68k
56 #elif PRAGMA_STRUCT_PACKPUSH
57 #pragma pack(push, 2)
58 #elif PRAGMA_STRUCT_PACK
59 #pragma pack(2)
60 #endif
61
62 /*****************************************************************************/
63
64 /*
65 ** Bit masks and macros to get common information out of ioACUser returned
66 ** by PBGetCatInfo (remember to clear ioACUser before calling PBGetCatInfo
67 ** since some file systems don't bother to set this field).
68 **
69 ** Use the GetDirAccessRestrictions or FSpGetDirAccessRestrictions
70 ** functions to retrieve the ioACUser access restrictions byte for
71 ** a folder.
72 **
73 ** Note: The access restriction byte returned by PBGetCatInfo is the
74 ** 2's complement of the user's privileges byte returned in
75 ** ioACAccess by PBHGetDirAccess.
76 */
77
78 enum {
79 /* mask for just the access restriction bits */
80 acUserAccessMask = (kioACUserNoSeeFolderMask + kioACUserNoSeeFilesMask + kioACUserNoMakeChangesMask), /* common access privilege settings */
81 acUserFull = 0x00, /* no access restiction bits on */
82 acUserNone = acUserAccessMask, /* all access restiction bits on */
83 acUserDropBox = kioACUserNoSeeFolderMask + kioACUserNoSeeFilesMask, /* make changes, but not see files or folders */
84 acUserBulletinBoard = kioACUserNoMakeChangesMask /* see files and folders, but not make changes */
85 };
86
87
88 /*****************************************************************************/
89
90 /*
91 ** Deny mode permissions for use with the HOpenAware, HOpenRFAware,
92 ** FSpOpenAware, and FSpOpenRFAware functions.
93 ** Note: Common settings are the ones with comments.
94 */
95
96 enum {
97 dmNone = 0x0000,
98 dmNoneDenyRd = fsRdDenyPerm,
99 dmNoneDenyWr = fsWrDenyPerm,
100 dmNoneDenyRdWr = (fsRdDenyPerm + fsWrDenyPerm),
101 dmRd = fsRdPerm, /* Single writer, multiple readers; the readers */
102 dmRdDenyRd = (fsRdPerm + fsRdDenyPerm),
103 dmRdDenyWr = (fsRdPerm + fsWrDenyPerm), /* Browsing - equivalent to fsRdPerm */
104 dmRdDenyRdWr = (fsRdPerm + fsRdDenyPerm + fsWrDenyPerm),
105 dmWr = fsWrPerm,
106 dmWrDenyRd = (fsWrPerm + fsRdDenyPerm),
107 dmWrDenyWr = (fsWrPerm + fsWrDenyPerm),
108 dmWrDenyRdWr = (fsWrPerm + fsRdDenyPerm + fsWrDenyPerm),
109 dmRdWr = fsRdWrPerm, /* Shared access - equivalent to fsRdWrShPerm */
110 dmRdWrDenyRd = (fsRdWrPerm + fsRdDenyPerm),
111 dmRdWrDenyWr = (fsRdWrPerm + fsWrDenyPerm), /* Single writer, multiple readers; the writer */
112 dmRdWrDenyRdWr = (fsRdWrPerm + fsRdDenyPerm + fsWrDenyPerm) /* Exclusive access - equivalent to fsRdWrPerm */
113 };
114
115
116 /*****************************************************************************/
117
118 /*
119 ** For those times where you need to use more than one kind of File Manager parameter
120 ** block but don't feel like wasting stack space, here's a parameter block you can reuse.
121 */
122
123
124 union UniversalFMPB {
125 ParamBlockRec PB;
126 CInfoPBRec ciPB;
127 DTPBRec dtPB;
128 HParamBlockRec hPB;
129 CMovePBRec cmPB;
130 WDPBRec wdPB;
131 FCBPBRec fcbPB;
132 XVolumeParam xPB;
133 };
134 typedef union UniversalFMPB UniversalFMPB;
135 typedef UniversalFMPB * UniversalFMPBPtr;
136 typedef UniversalFMPBPtr * UniversalFMPBHandle;
137
138 /*
139 ** Used by GetUGEntries to return user or group lists
140 */
141
142 struct UGEntry {
143 short objType; /* object type: -1 = group; 0 = user */
144 long objID; /* the user or group ID */
145 Str31 name; /* the user or group name */
146 };
147 typedef struct UGEntry UGEntry;
148 typedef UGEntry * UGEntryPtr;
149 typedef UGEntryPtr * UGEntryHandle;
150
151 /*
152 ** I use the following records instead of the AFPVolMountInfo and AFPXVolMountInfo structures in Files.h
153 */
154 typedef unsigned char Str8[9];
155
156 struct MyAFPVolMountInfo {
157 short length; /* length of this record */
158 VolumeType media; /* type of media, always AppleShareMediaType */
159 short flags; /* 0 = normal mount; set bit 0 to inhibit greeting messages */
160 char nbpInterval; /* NBP interval parameter; 7 is a good choice */
161 char nbpCount; /* NBP count parameter; 5 is a good choice */
162 short uamType; /* User Authentication Method */
163 short zoneNameOffset; /* offset from start of record to zoneName */
164 short serverNameOffset; /* offset from start of record to serverName */
165 short volNameOffset; /* offset from start of record to volName */
166 short userNameOffset; /* offset from start of record to userName */
167 short userPasswordOffset; /* offset from start of record to userPassword */
168 short volPasswordOffset; /* offset from start of record to volPassword */
169 Str32 zoneName; /* server's AppleTalk zone name */
170 char filler1; /* to word align volPassword */
171 Str32 serverName; /* server name */
172 char filler2; /* to word align volPassword */
173 Str27 volName; /* volume name */
174 Str31 userName; /* user name (zero length Pascal string for guest) */
175 Str8 userPassword; /* user password (zero length Pascal string if no user password) */
176 char filler3; /* to word align volPassword */
177 Str8 volPassword; /* volume password (zero length Pascal string if no volume password) */
178 char filler4; /* to end record on word boundry */
179 };
180 typedef struct MyAFPVolMountInfo MyAFPVolMountInfo;
181 typedef MyAFPVolMountInfo * MyAFPVolMountInfoPtr;
182 typedef MyAFPVolMountInfoPtr * MyAFPVolMountInfoHandle;
183
184 struct MyAFPXVolMountInfo {
185 short length; /* length of this record */
186 VolumeType media; /* type of media, always AppleShareMediaType */
187 short flags; /* bits for no messages, no reconnect, etc */
188 char nbpInterval; /* NBP interval parameter; 7 is a good choice */
189 char nbpCount; /* NBP count parameter; 5 is a good choice */
190 short uamType; /* User Authentication Method */
191 short zoneNameOffset; /* offset from start of record to zoneName */
192 short serverNameOffset; /* offset from start of record to serverName */
193 short volNameOffset; /* offset from start of record to volName */
194 short userNameOffset; /* offset from start of record to userName */
195 short userPasswordOffset; /* offset from start of record to userPassword */
196 short volPasswordOffset; /* offset from start of record to volPassword */
197 short extendedFlags; /* extended flags word */
198 short uamNameOffset; /* offset to a pascal UAM name string */
199 short alternateAddressOffset; /* offset to Alternate Addresses in tagged format */
200 Str32 zoneName; /* server's AppleTalk zone name */
201 char filler1; /* to word align volPassword */
202 Str32 serverName; /* server name */
203 char filler2; /* to word align volPassword */
204 Str27 volName; /* volume name */
205 Str31 userName; /* user name (zero length Pascal string for guest) */
206 Str8 userPassword; /* user password (zero length Pascal string if no user password) */
207 char filler3; /* to word align volPassword */
208 Str8 volPassword; /* volume password (zero length Pascal string if no volume password) */
209 char filler4; /* to word align uamNameOffset */
210 Str32 uamName; /* UAM name */
211 char filler5; /* to word align alternateAddress */
212 char alternateAddress[1]; /* AFPAlternateAddress */
213 };
214 typedef struct MyAFPXVolMountInfo MyAFPXVolMountInfo;
215 typedef MyAFPXVolMountInfo * MyAFPXVolMountInfoPtr;
216 typedef MyAFPXVolMountInfoPtr * MyAFPXVolMountInfoHandle;
217
218 /*****************************************************************************/
219
220 /* Functions to get information out of GetVolParmsInfoBuffer. */
221
222 /* version 1 field getters */
223
224 EXTERN_API( short )
225 GetVolParmsInfoVersion(const GetVolParmsInfoBuffer * volParms);
226
227
228 EXTERN_API( long )
229 GetVolParmsInfoAttrib(const GetVolParmsInfoBuffer * volParms);
230
231
232 EXTERN_API( Handle )
233 GetVolParmsInfoLocalHand(const GetVolParmsInfoBuffer * volParms);
234
235
236 EXTERN_API( long )
237 GetVolParmsInfoServerAdr(const GetVolParmsInfoBuffer * volParms);
238
239
240
241 /* version 2 field getters (assume zero result if version < 2) */
242
243 EXTERN_API( long )
244 GetVolParmsInfoVolumeGrade(const GetVolParmsInfoBuffer * volParms);
245
246
247 EXTERN_API( long )
248 GetVolParmsInfoForeignPrivID(const GetVolParmsInfoBuffer * volParms);
249
250
251
252 /* version 3 field getters (assume zero result if version < 3) */
253
254 EXTERN_API( long )
255 GetVolParmsInfoExtendedAttributes(const GetVolParmsInfoBuffer * volParms);
256
257
258
259 /* attribute bits supported by all versions of GetVolParmsInfoBuffer */
260
261 EXTERN_API( Boolean )
262 isNetworkVolume(const GetVolParmsInfoBuffer * volParms);
263
264
265 EXTERN_API( Boolean )
266 hasLimitFCBs(const GetVolParmsInfoBuffer * volParms);
267
268
269 EXTERN_API( Boolean )
270 hasLocalWList(const GetVolParmsInfoBuffer * volParms);
271
272
273 EXTERN_API( Boolean )
274 hasNoMiniFndr(const GetVolParmsInfoBuffer * volParms);
275
276
277 EXTERN_API( Boolean )
278 hasNoVNEdit(const GetVolParmsInfoBuffer * volParms);
279
280
281 EXTERN_API( Boolean )
282 hasNoLclSync(const GetVolParmsInfoBuffer * volParms);
283
284
285 EXTERN_API( Boolean )
286 hasTrshOffLine(const GetVolParmsInfoBuffer * volParms);
287
288
289 EXTERN_API( Boolean )
290 hasNoSwitchTo(const GetVolParmsInfoBuffer * volParms);
291
292
293 EXTERN_API( Boolean )
294 hasNoDeskItems(const GetVolParmsInfoBuffer * volParms);
295
296
297 EXTERN_API( Boolean )
298 hasNoBootBlks(const GetVolParmsInfoBuffer * volParms);
299
300
301 EXTERN_API( Boolean )
302 hasAccessCntl(const GetVolParmsInfoBuffer * volParms);
303
304
305 EXTERN_API( Boolean )
306 hasNoSysDir(const GetVolParmsInfoBuffer * volParms);
307
308
309 EXTERN_API( Boolean )
310 hasExtFSVol(const GetVolParmsInfoBuffer * volParms);
311
312
313 EXTERN_API( Boolean )
314 hasOpenDeny(const GetVolParmsInfoBuffer * volParms);
315
316
317 EXTERN_API( Boolean )
318 hasCopyFile(const GetVolParmsInfoBuffer * volParms);
319
320
321 EXTERN_API( Boolean )
322 hasMoveRename(const GetVolParmsInfoBuffer * volParms);
323
324
325 EXTERN_API( Boolean )
326 hasDesktopMgr(const GetVolParmsInfoBuffer * volParms);
327
328
329 EXTERN_API( Boolean )
330 hasShortName(const GetVolParmsInfoBuffer * volParms);
331
332
333 EXTERN_API( Boolean )
334 hasFolderLock(const GetVolParmsInfoBuffer * volParms);
335
336
337 EXTERN_API( Boolean )
338 hasPersonalAccessPrivileges(const GetVolParmsInfoBuffer * volParms);
339
340
341 EXTERN_API( Boolean )
342 hasUserGroupList(const GetVolParmsInfoBuffer * volParms);
343
344
345 EXTERN_API( Boolean )
346 hasCatSearch(const GetVolParmsInfoBuffer * volParms);
347
348
349 EXTERN_API( Boolean )
350 hasFileIDs(const GetVolParmsInfoBuffer * volParms);
351
352
353 EXTERN_API( Boolean )
354 hasBTreeMgr(const GetVolParmsInfoBuffer * volParms);
355
356
357 EXTERN_API( Boolean )
358 hasBlankAccessPrivileges(const GetVolParmsInfoBuffer * volParms);
359
360
361 EXTERN_API( Boolean )
362 supportsAsyncRequests(const GetVolParmsInfoBuffer * volParms);
363
364
365 EXTERN_API( Boolean )
366 supportsTrashVolumeCache(const GetVolParmsInfoBuffer * volParms);
367
368
369
370 /* attribute bits supported by version 3 and greater versions of GetVolParmsInfoBuffer */
371
372 EXTERN_API( Boolean )
373 volIsEjectable(const GetVolParmsInfoBuffer * volParms);
374
375
376 EXTERN_API( Boolean )
377 volSupportsHFSPlusAPIs(const GetVolParmsInfoBuffer * volParms);
378
379
380 EXTERN_API( Boolean )
381 volSupportsFSCatalogSearch(const GetVolParmsInfoBuffer * volParms);
382
383
384 EXTERN_API( Boolean )
385 volSupportsFSExchangeObjects(const GetVolParmsInfoBuffer * volParms);
386
387
388 EXTERN_API( Boolean )
389 volSupports2TBFiles(const GetVolParmsInfoBuffer * volParms);
390
391
392 EXTERN_API( Boolean )
393 volSupportsLongNames(const GetVolParmsInfoBuffer * volParms);
394
395
396 EXTERN_API( Boolean )
397 volSupportsMultiScriptNames(const GetVolParmsInfoBuffer * volParms);
398
399
400 EXTERN_API( Boolean )
401 volSupportsNamedForks(const GetVolParmsInfoBuffer * volParms);
402
403
404 EXTERN_API( Boolean )
405 volSupportsSubtreeIterators(const GetVolParmsInfoBuffer * volParms);
406
407
408 EXTERN_API( Boolean )
409 volL2PCanMapFileBlocks(const GetVolParmsInfoBuffer * volParms);
410
411
412
413 /*****************************************************************************/
414
415 /* Functions for testing ioACUser bits. */
416
417 EXTERN_API( Boolean )
418 userIsOwner(SInt8 ioACUser);
419
420
421 EXTERN_API( Boolean )
422 userHasFullAccess(SInt8 ioACUser);
423
424
425 EXTERN_API( Boolean )
426 userHasDropBoxAccess(SInt8 ioACUser);
427
428
429 EXTERN_API( Boolean )
430 userHasBulletinBoard(SInt8 ioACUser);
431
432
433 EXTERN_API( Boolean )
434 userHasNoAccess(SInt8 ioACUser);
435
436
437
438 /*****************************************************************************/
439
440 EXTERN_API( void )
441 TruncPString(
442 StringPtr destination,
443 ConstStr255Param source,
444 short maxLength);
445
446
447 /*
448 The TruncPString function copies up to maxLength characters from
449 the source Pascal string to the destination Pascal string. TruncPString
450 ensures that the truncated string ends on a single-byte character, or on
451 the last byte of a multi-byte character.
452
453 destination output: destination Pascal string.
454 source input: source Pascal string.
455 maxLength output: The maximum allowable length of the destination
456 string.
457 */
458
459 /*****************************************************************************/
460
461 EXTERN_API( Ptr )
462 GetTempBuffer(
463 long buffReqSize,
464 long * buffActSize);
465
466
467 /*
468 The GetTempBuffer function allocates a temporary buffer for file system
469 operations which is at least 1024 bytes (1K) and a multiple of
470 1024 bytes.
471
472 buffReqSize input: Size you'd like the buffer to be.
473 buffActSize output: Size of buffer allocated.
474 function result output: Pointer to memory allocated or nil if no memory
475 was available. The caller is responsible for
476 disposing of this buffer with DisposePtr.
477 */
478
479 /*****************************************************************************/
480
481 EXTERN_API( OSErr )
482 GetVolumeInfoNoName(
483 ConstStr255Param pathname,
484 short vRefNum,
485 HParmBlkPtr pb);
486
487
488 /*
489 GetVolumeInfoNoName uses pathname and vRefNum to call PBHGetVInfoSync
490 in cases where the returned volume name is not needed by the caller.
491 The pathname and vRefNum parameters are not touched, and the pb
492 parameter is initialized by PBHGetVInfoSync except that ioNamePtr in
493 the parameter block is always returned as NULL (since it might point
494 to GetVolumeInfoNoName's local variable tempPathname).
495
496 I noticed using this code in several places, so here it is once.
497 This reduces the code size of MoreFiles.
498
499 pathName input: Pointer to a full pathname or nil. If you pass in a
500 partial pathname, it is ignored. A full pathname to a
501 volume must end with a colon character (:).
502 vRefNum input: Volume specification (volume reference number, working
503 directory number, drive number, or 0).
504 pb input: A pointer to HParamBlockRec.
505 output: The parameter block as filled in by PBHGetVInfoSync
506 except that ioNamePtr will always be NULL.
507
508 Result Codes
509 noErr 0 No error
510 nsvErr -35 No such volume
511 paramErr -50 No default volume, or pb was NULL
512 */
513
514 /*****************************************************************************/
515
516 EXTERN_API( OSErr )
517 XGetVolumeInfoNoName(
518 ConstStr255Param pathname,
519 short vRefNum,
520 XVolumeParamPtr pb);
521
522
523 /*
524 XGetVolumeInfoNoName uses pathname and vRefNum to call PBXGetVolInfoSync
525 in cases where the returned volume name is not needed by the caller.
526 The pathname and vRefNum parameters are not touched, and the pb
527 parameter is initialized by PBXGetVolInfoSync except that ioNamePtr in
528 the parameter block is always returned as NULL (since it might point
529 to XGetVolumeInfoNoName's local variable tempPathname).
530
531 pathName input: Pointer to a full pathname or nil. If you pass in a
532 partial pathname, it is ignored. A full pathname to a
533 volume must end with a colon character (:).
534 vRefNum input: Volume specification (volume reference number, working
535 directory number, drive number, or 0).
536 pb input: A pointer to HParamBlockRec.
537 output: The parameter block as filled in by PBXGetVolInfoSync
538 except that ioNamePtr will always be NULL.
539
540 Result Codes
541 noErr 0 No error
542 nsvErr -35 No such volume
543 paramErr -50 No default volume, or pb was NULL
544 */
545
546 /*****************************************************************************/
547
548 EXTERN_API( OSErr )
549 GetCatInfoNoName(
550 short vRefNum,
551 long dirID,
552 ConstStr255Param name,
553 CInfoPBPtr pb);
554
555
556 /*
557 GetCatInfoNoName uses vRefNum, dirID and name to call PBGetCatInfoSync
558 in cases where the returned object is not needed by the caller.
559 The vRefNum, dirID and name parameters are not touched, and the pb
560 parameter is initialized by PBGetCatInfoSync except that ioNamePtr in
561 the parameter block is always returned as NULL (since it might point
562 to GetCatInfoNoName's local variable tempName).
563
564 I noticed using this code in several places, so here it is once.
565 This reduces the code size of MoreFiles.
566
567 vRefNum input: Volume specification.
568 dirID input: Directory ID.
569 name input: Pointer to object name, or nil when dirID
570 specifies a directory that's the object.
571 pb input: A pointer to CInfoPBRec.
572 output: The parameter block as filled in by
573 PBGetCatInfoSync except that ioNamePtr will
574 always be NULL.
575
576 Result Codes
577 noErr 0 No error
578 nsvErr -35 No such volume
579 ioErr -36 I/O error
580 bdNamErr -37 Bad filename
581 fnfErr -43 File not found
582 paramErr -50 No default volume
583 dirNFErr -120 Directory not found or incomplete pathname
584 afpAccessDenied -5000 User does not have the correct access
585 afpObjectTypeErr -5025 Directory not found or incomplete pathname
586
587 */
588
589 /*****************************************************************************/
590
591 EXTERN_API( OSErr )
592 DetermineVRefNum(
593 ConstStr255Param pathname,
594 short vRefNum,
595 short * realVRefNum);
596
597
598 /*
599 The DetermineVRefNum function determines the volume reference number of
600 a volume from a pathname, a volume specification, or a combination
601 of the two.
602 WARNING: Volume names on the Macintosh are *not* unique -- Multiple
603 mounted volumes can have the same name. For this reason, the use of a
604 volume name or full pathname to identify a specific volume may not
605 produce the results you expect. If more than one volume has the same
606 name and a volume name or full pathname is used, the File Manager
607 currently uses the first volume it finds with a matching name in the
608 volume queue.
609
610 pathName input: Pointer to a full pathname or nil. If you pass in a
611 partial pathname, it is ignored. A full pathname to a
612 volume must end with a colon character (:).
613 vRefNum input: Volume specification (volume reference number, working
614 directory number, drive number, or 0).
615 realVRefNum output: The real volume reference number.
616
617 Result Codes
618 noErr 0 No error
619 nsvErr -35 No such volume
620 paramErr -50 No default volume
621 */
622
623 /*****************************************************************************/
624
625 EXTERN_API( OSErr )
626 HGetVInfo(
627 short volReference,
628 StringPtr volName,
629 short * vRefNum,
630 unsigned long * freeBytes,
631 unsigned long * totalBytes);
632
633
634 /*
635 The HGetVInfo function returns the name, volume reference number,
636 available space (in bytes), and total space (in bytes) for the
637 specified volume. You can specify the volume by providing its drive
638 number, volume reference number, or 0 for the default volume.
639 This routine is compatible with volumes up to 4 gigabytes.
640
641 volReference input: The drive number, volume reference number,
642 or 0 for the default volume.
643 volName input: A pointer to a buffer (minimum Str27) where
644 the volume name is to be returned or must
645 be nil.
646 output: The volume name.
647 vRefNum output: The volume reference number.
648 freeBytes output: The number of free bytes on the volume.
649 freeBytes is an unsigned long value.
650 totalBytes output: The total number of bytes on the volume.
651 totalBytes is an unsigned long value.
652
653 Result Codes
654 noErr 0 No error
655 nsvErr -35 No such volume
656 paramErr -50 No default volume
657
658 __________
659
660 Also see: XGetVInfo
661 */
662
663 /*****************************************************************************/
664
665 EXTERN_API( OSErr )
666 XGetVInfo(
667 short volReference,
668 StringPtr volName,
669 short * vRefNum,
670 UInt64 * freeBytes,
671 UInt64 * totalBytes);
672
673
674 /*
675 The XGetVInfo function returns the name, volume reference number,
676 available space (in bytes), and total space (in bytes) for the
677 specified volume. You can specify the volume by providing its drive
678 number, volume reference number, or 0 for the default volume.
679 This routine is compatible with volumes up to 2 terabytes.
680
681 volReference input: The drive number, volume reference number,
682 or 0 for the default volume.
683 volName input: A pointer to a buffer (minimum Str27) where
684 the volume name is to be returned or must
685 be nil.
686 output: The volume name.
687 vRefNum output: The volume reference number.
688 freeBytes output: The number of free bytes on the volume.
689 freeBytes is an UnsignedWide value.
690 totalBytes output: The total number of bytes on the volume.
691 totalBytes is an UnsignedWide value.
692
693 Result Codes
694 noErr 0 No error
695 nsvErr -35 No such volume
696 paramErr -50 No default volume
697
698 __________
699
700 Also see: HGetVInfo
701 */
702
703 /*****************************************************************************/
704
705 EXTERN_API( OSErr )
706 CheckVolLock(
707 ConstStr255Param pathname,
708 short vRefNum);
709
710
711 /*
712 The CheckVolLock function determines if a volume is locked - either by
713 hardware or by software. If CheckVolLock returns noErr, then the volume
714 is not locked.
715
716 pathName input: Pointer to a full pathname or nil. If you pass in a
717 partial pathname, it is ignored. A full pathname to a
718 volume must end with a colon character (:).
719 vRefNum input: Volume specification (volume reference number, working
720 directory number, drive number, or 0).
721
722 Result Codes
723 noErr 0 No error - volume not locked
724 nsvErr -35 No such volume
725 wPrErr -44 Volume locked by hardware
726 vLckdErr -46 Volume locked by software
727 paramErr -50 No default volume
728 */
729
730 /*****************************************************************************/
731 /*
732 ** The following routines call Mac OS routines that are not supported by
733 ** Carbon:
734 **
735 ** GetDriverName
736 ** FindDrive
737 ** GetDiskBlocks
738 ** GetVolState
739 */
740
741 #if !TARGET_API_MAC_CARBON // {
742
743 /*****************************************************************************/
744
745 EXTERN_API( OSErr )
746 GetDriverName(
747 short driverRefNum,
748 Str255 driverName);
749
750
751 /*
752 The GetDriverName function returns a device driver's name.
753
754 driverRefNum input: The driver reference number.
755 driverName output: The driver's name.
756
757 Result Codes
758 noErr 0 No error
759 badUnitErr -21 Bad driver reference number
760 */
761
762 /*****************************************************************************/
763
764 EXTERN_API( OSErr )
765 FindDrive(
766 ConstStr255Param pathname,
767 short vRefNum,
768 DrvQElPtr * driveQElementPtr);
769
770
771 /*
772 The FindDrive function returns a pointer to a mounted volume's
773 drive queue element.
774
775 pathName input: Pointer to a full pathname or nil. If you
776 pass in a partial pathname, it is ignored.
777 A full pathname to a volume must end with
778 a colon character (:).
779 vRefNum input: Volume specification (volume reference
780 number, working directory number, drive
781 number, or 0).
782 driveQElementPtr output: Pointer to a volume's drive queue element
783 in the drive queue. DO NOT change the
784 DrvQEl.
785
786 Result Codes
787 noErr 0 No error
788 nsvErr -35 No such volume
789 paramErr -50 No default volume
790 nsDrvErr -56 No such drive
791 */
792
793 /*****************************************************************************/
794
795 EXTERN_API( OSErr )
796 GetDiskBlocks(
797 ConstStr255Param pathname,
798 short vRefNum,
799 unsigned long * numBlocks);
800
801
802 /*
803 The GetDiskBlocks function returns the number of physical disk
804 blocks on a disk drive. NOTE: This is not the same as volume
805 allocation blocks!
806
807 pathName input: Pointer to a full pathname or nil. If you
808 pass in a partial pathname, it is ignored.
809 A full pathname to a volume must end with
810 a colon character (:).
811 vRefNum input: Volume specification (volume reference
812 number, working directory number, drive
813 number, or 0).
814 numBlocks output: The number of physical disk blocks on the disk drive.
815
816 Result Codes
817 noErr 0 No error
818 nsvErr -35 No such volume
819 paramErr -50 No default volume, driver reference
820 number is zero, ReturnFormatList
821 returned zero blocks, DriveStatus
822 returned an unknown value, or
823 driveQElementPtr->qType is unknown
824 nsDrvErr -56 No such drive
825 statusErr Ð18 Driver does not respond to this
826 status request
827 badUnitErr Ð21 Driver reference number does not
828 match unit table
829 unitEmptyErr Ð22 Driver reference number specifies
830 a nil handle in unit table
831 abortErr Ð27 Request aborted by KillIO
832 notOpenErr Ð28 Driver not open
833 */
834
835 /*****************************************************************************/
836
837 EXTERN_API( OSErr )
838 GetVolState(
839 ConstStr255Param pathname,
840 short vRefNum,
841 Boolean * volumeOnline,
842 Boolean * volumeEjected,
843 Boolean * driveEjectable,
844 Boolean * driverWantsEject);
845
846
847 /*
848 The GetVolState function determines if a volume is online or offline,
849 if an offline volume is ejected, and if the volume's driver is
850 ejectable or wants eject calls.
851
852 pathName input: Pointer to a full pathname or nil.
853 vRefNum input: Volume specification (volume reference number,
854 working directory number, drive number, or 0).
855 volumeOnline output: True if the volume is online;
856 False if the volume is offline.
857 volumeEjected output: True if the volume is ejected (ejected
858 volumes are always offline); False if the
859 volume is not ejected.
860 driveEjectable output: True if the volume's drive is ejectable;
861 False if the volume's drive is not ejectable.
862 driverWantsEject output: True if the volume's driver wants an Eject
863 request after unmount (even if the drive
864 is not ejectable); False if the volume's
865 driver does not need an eject request.
866
867 Result Codes
868 noErr 0 No error
869 nsvErr -35 No such volume
870 paramErr -50 No default volume, or pb was NULL
871 */
872
873 /*****************************************************************************/
874
875 #endif // } !TARGET_API_MAC_CARBON
876
877 /*****************************************************************************/
878
879 EXTERN_API( OSErr )
880 GetVolFileSystemID(
881 ConstStr255Param pathname,
882 short vRefNum,
883 short * fileSystemID);
884
885
886 /*
887 The GetVolFileSystemID function returned the file system ID of
888 a mounted volume. The file system ID identifies the file system
889 that handles requests to a particular volume. Here's a partial list
890 of file system ID numbers (only Apple's file systems are listed):
891 FSID File System
892 ----- -----------------------------------------------------
893 $0000 Macintosh HFS or MFS
894 $0100 ProDOS File System
895 $0101 PowerTalk Mail Enclosures
896 $4147 ISO 9660 File Access (through Foreign File Access)
897 $4242 High Sierra File Access (through Foreign File Access)
898 $464D QuickTake File System (through Foreign File Access)
899 $4953 Macintosh PC Exchange (MS-DOS)
900 $4A48 Audio CD Access (through Foreign File Access)
901 $4D4B Apple Photo Access (through Foreign File Access)
902
903 See the Technical Note "FL 35 - Determining Which File System
904 Is Active" and the "Guide to the File System Manager" for more
905 information.
906
907 pathName input: Pointer to a full pathname or nil. If you pass
908 in a partial pathname, it is ignored. A full
909 pathname to a volume must contain at least
910 one colon character (:) and must not start with
911 a colon character.
912 vRefNum input: Volume specification (volume reference number,
913 working directory number, drive number, or 0).
914 fileSystemID output: The volume's file system ID.
915
916 Result Codes
917 noErr 0 No error
918 nsvErr -35 No such volume
919 paramErr -50 No default volume, or pb was NULL
920 */
921
922 /*****************************************************************************/
923
924 EXTERN_API( OSErr )
925 UnmountAndEject(
926 ConstStr255Param pathname,
927 short vRefNum);
928
929
930 /*
931 The UnmountAndEject function unmounts and ejects a volume. The volume
932 is ejected only if it is ejectable and not already ejected.
933
934 pathName input: Pointer to a full pathname or nil. If you pass in a
935 partial pathname, it is ignored. A full pathname to a
936 volume must end with a colon character (:).
937 vRefNum input: Volume specification (volume reference number, working
938 directory number, drive number, or 0).
939
940 Result Codes
941 noErr 0 No error
942 nsvErr -35 No such volume
943 ioErr -36 I/O error
944 bdNamErr -37 Bad volume name
945 fBsyErr -47 One or more files are open
946 paramErr -50 No default volume
947 nsDrvErr -56 No such drive
948 extFSErr -58 External file system error - no file
949 system claimed this call.
950 */
951
952 /*****************************************************************************/
953
954 EXTERN_API( OSErr )
955 OnLine(
956 FSSpecPtr volumes,
957 short reqVolCount,
958 short * actVolCount,
959 short * volIndex);
960
961
962 /*
963 The OnLine function returns the list of volumes currently mounted in
964 an array of FSSpec records.
965
966 A noErr result indicates that the volumes array was filled
967 (actVolCount == reqVolCount) and there may be additional volumes
968 mounted. A nsvErr result indicates that the end of the volume list
969 was found and actVolCount volumes were actually found this time.
970
971 volumes input: Pointer to array of FSSpec where the volume list
972 is returned.
973 reqVolCount input: Maximum number of volumes to return (the number of
974 elements in the volumes array).
975 actVolCount output: The number of volumes actually returned.
976 volIndex input: The current volume index position. Set to 1 to
977 start with the first volume.
978 output: The volume index position to get the next volume.
979 Pass this value the next time you call OnLine to
980 start where you left off.
981
982 Result Codes
983 noErr 0 No error, but there are more volumes
984 to list
985 nsvErr -35 No more volumes to be listed
986 paramErr -50 volIndex was <= 0
987 */
988
989 /*****************************************************************************/
990
991 EXTERN_API( OSErr )
992 SetDefault(
993 short newVRefNum,
994 long newDirID,
995 short * oldVRefNum,
996 long * oldDirID);
997
998
999 /*
1000 The SetDefault function sets the default volume and directory to the
1001 volume specified by newVRefNum and the directory specified by newDirID.
1002 The current default volume reference number and directory ID are
1003 returned in oldVRefNum and oldDir and must be used to restore the
1004 default volume and directory to their previous state *as soon as
1005 possible* with the RestoreDefault function. These two functions are
1006 designed to be used as a wrapper around Standard I/O routines where
1007 the location of the file is implied to be the default volume and
1008 directory. In other words, this is how you should use these functions:
1009
1010 error = SetDefault(newVRefNum, newDirID, &oldVRefNum, &oldDirID);
1011 if ( error == noErr )
1012 {
1013 // call the Stdio functions like remove, rename, tmpfile,
1014 // fopen, freopen, etc. or non-ANSI extensions like
1015 // fdopen,fsetfileinfo, -- create, open, unlink, etc. here!
1016
1017 error = RestoreDefault(oldVRefNum, oldDirID);
1018 }
1019
1020 By using these functions as a wrapper, you won't need to open a working
1021 directory (because SetDefault and RestoreDefault use HSetVol) and you
1022 won't have to worry about the effects of using HSetVol (documented in
1023 Technical Note "FL 11 - PBHSetVol is Dangerous" and in the
1024 Inside Macintosh: Files book in the description of the HSetVol and
1025 PBHSetVol functions) because the default volume/directory is restored
1026 before giving up control to code that might be affected by HSetVol.
1027
1028 newVRefNum input: Volume specification (volume reference number,
1029 working directory number, drive number, or 0) of
1030 the new default volume.
1031 newDirID input: Directory ID of the new default directory.
1032 oldVRefNum output: The volume specification to save for use with
1033 RestoreDefault.
1034 oldDirID output: The directory ID to save for use with
1035 RestoreDefault.
1036
1037 Result Codes
1038 noErr 0 No error
1039 nsvErr -35 No such volume
1040 bdNamErr -37 Bad volume name
1041 fnfErr -43 Directory not found
1042 paramErr -50 No default volume
1043 afpAccessDenied -5000 User does not have access to the directory
1044
1045 __________
1046
1047 Also see: RestoreDefault
1048 */
1049
1050 /*****************************************************************************/
1051
1052 EXTERN_API( OSErr )
1053 RestoreDefault(
1054 short oldVRefNum,
1055 long oldDirID);
1056
1057
1058 /*
1059 The RestoreDefault function restores the default volume and directory
1060 to the volume specified by oldVRefNum and the directory specified by
1061 oldDirID. The oldVRefNum and oldDirID parameters were previously
1062 obtained from the SetDefault function. These two functions are designed
1063 to be used as a wrapper around Standard C I/O routines where the
1064 location of the file is implied to be the default volume and directory.
1065 In other words, this is how you should use these functions:
1066
1067 error = SetDefault(newVRefNum, newDirID, &oldVRefNum, &oldDirID);
1068 if ( error == noErr )
1069 {
1070 // call the Stdio functions like remove, rename, tmpfile,
1071 // fopen, freopen, etc. or non-ANSI extensions like
1072 // fdopen,fsetfileinfo, -- create, open, unlink, etc. here!
1073
1074 error = RestoreDefault(oldVRefNum, oldDirID);
1075 }
1076
1077 By using these functions as a wrapper, you won't need to open a working
1078 directory (because SetDefault and RestoreDefault use HSetVol) and you
1079 won't have to worry about the effects of using HSetVol (documented in
1080 Technical Note "FL 11 - PBHSetVol is Dangerous" and in the
1081 Inside Macintosh: Files book in the description of the HSetVol and
1082 PBHSetVol functions) because the default volume/directory is restored
1083 before giving up control to code that might be affected by HSetVol.
1084
1085 oldVRefNum input: The volume specification to restore.
1086 oldDirID input: The directory ID to restore.
1087
1088 Result Codes
1089 noErr 0 No error
1090 nsvErr -35 No such volume
1091 bdNamErr -37 Bad volume name
1092 fnfErr -43 Directory not found
1093 paramErr -50 No default volume
1094 rfNumErr -51 Bad working directory reference number
1095 afpAccessDenied -5000 User does not have access to the directory
1096
1097 __________
1098
1099 Also see: SetDefault
1100 */
1101
1102 /*****************************************************************************/
1103
1104 EXTERN_API( OSErr )
1105 GetDInfo(
1106 short vRefNum,
1107 long dirID,
1108 ConstStr255Param name,
1109 DInfo * fndrInfo);
1110
1111
1112 /*
1113 The GetDInfo function gets the finder information for a directory.
1114
1115 vRefNum input: Volume specification.
1116 dirID input: Directory ID.
1117 name input: Pointer to object name, or nil when dirID
1118 specifies a directory that's the object.
1119 fndrInfo output: If the object is a directory, then its DInfo.
1120
1121 Result Codes
1122 noErr 0 No error
1123 nsvErr -35 No such volume
1124 ioErr -36 I/O error
1125 bdNamErr -37 Bad filename
1126 fnfErr -43 File not found
1127 paramErr -50 No default volume
1128 dirNFErr -120 Directory not found or incomplete pathname
1129 afpAccessDenied -5000 User does not have the correct access
1130 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1131
1132 __________
1133
1134 Also see: FSpGetDInfo, FSpGetFInfoCompat
1135 */
1136
1137 /*****************************************************************************/
1138
1139 EXTERN_API( OSErr )
1140 FSpGetDInfo(
1141 const FSSpec * spec,
1142 DInfo * fndrInfo);
1143
1144
1145 /*
1146 The FSpGetDInfo function gets the finder information for a directory.
1147
1148 spec input: An FSSpec record specifying the directory.
1149 fndrInfo output: If the object is a directory, then its DInfo.
1150
1151 Result Codes
1152 noErr 0 No error
1153 nsvErr -35 No such volume
1154 ioErr -36 I/O error
1155 bdNamErr -37 Bad filename
1156 fnfErr -43 File not found
1157 paramErr -50 No default volume
1158 dirNFErr -120 Directory not found or incomplete pathname
1159 afpAccessDenied -5000 User does not have the correct access
1160 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1161
1162 __________
1163
1164 Also see: FSpGetFInfoCompat, GetDInfo
1165 */
1166
1167 /*****************************************************************************/
1168
1169 EXTERN_API( OSErr )
1170 SetDInfo(
1171 short vRefNum,
1172 long dirID,
1173 ConstStr255Param name,
1174 const DInfo * fndrInfo);
1175
1176
1177 /*
1178 The SetDInfo function sets the finder information for a directory.
1179
1180 vRefNum input: Volume specification.
1181 dirID input: Directory ID.
1182 name input: Pointer to object name, or nil when dirID
1183 specifies a directory that's the object.
1184 fndrInfo input: The DInfo.
1185
1186 Result Codes
1187 noErr 0 No error
1188 nsvErr -35 No such volume
1189 ioErr -36 I/O error
1190 bdNamErr -37 Bad filename
1191 fnfErr -43 File not found
1192 fLckdErr -45 File is locked
1193 vLckdErr -46 Volume is locked or read-only
1194 paramErr -50 No default volume
1195 dirNFErr -120 Directory not found or incomplete pathname
1196 afpAccessDenied -5000 User does not have the correct access
1197 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1198
1199 __________
1200
1201 Also see: FSpSetDInfo, FSpSetFInfoCompat
1202 */
1203
1204 /*****************************************************************************/
1205
1206 EXTERN_API( OSErr )
1207 FSpSetDInfo(
1208 const FSSpec * spec,
1209 const DInfo * fndrInfo);
1210
1211
1212 /*
1213 The FSpSetDInfo function sets the finder information for a directory.
1214
1215 spec input: An FSSpec record specifying the directory.
1216 fndrInfo input: The DInfo.
1217
1218 Result Codes
1219 noErr 0 No error
1220 nsvErr -35 No such volume
1221 ioErr -36 I/O error
1222 bdNamErr -37 Bad filename
1223 fnfErr -43 File not found
1224 fLckdErr -45 File is locked
1225 vLckdErr -46 Volume is locked or read-only
1226 paramErr -50 No default volume
1227 dirNFErr -120 Directory not found or incomplete pathname
1228 afpAccessDenied -5000 User does not have the correct access
1229 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1230
1231 __________
1232
1233 Also see: FSpSetFInfoCompat, SetDInfo
1234 */
1235
1236 /*****************************************************************************/
1237
1238 #if OLDROUTINENAMES
1239 #define GetDirID(vRefNum, dirID, name, theDirID, isDirectory) GetDirectoryID(vRefNum, dirID, name, theDirID, isDirectory)
1240 #endif
1241 EXTERN_API( OSErr )
1242 GetDirectoryID(
1243 short vRefNum,
1244 long dirID,
1245 ConstStr255Param name,
1246 long * theDirID,
1247 Boolean * isDirectory);
1248
1249
1250 /*
1251 The GetDirectoryID function gets the directory ID number of the
1252 directory specified. If a file is specified, then the parent
1253 directory of the file is returned and isDirectory is false. If
1254 a directory is specified, then that directory's ID number is
1255 returned and isDirectory is true.
1256 WARNING: Volume names on the Macintosh are *not* unique -- Multiple
1257 mounted volumes can have the same name. For this reason, the use of a
1258 volume name or full pathname to identify a specific volume may not
1259 produce the results you expect. If more than one volume has the same
1260 name and a volume name or full pathname is used, the File Manager
1261 currently uses the first volume it finds with a matching name in the
1262 volume queue.
1263
1264 vRefNum input: Volume specification.
1265 dirID input: Directory ID.
1266 name input: Pointer to object name, or nil when dirID
1267 specifies a directory that's the object.
1268 theDirID output: If the object is a file, then its parent directory
1269 ID. If the object is a directory, then its ID.
1270 isDirectory output: True if object is a directory; false if
1271 object is a file.
1272
1273 Result Codes
1274 noErr 0 No error
1275 nsvErr -35 No such volume
1276 ioErr -36 I/O error
1277 bdNamErr -37 Bad filename
1278 fnfErr -43 File not found
1279 paramErr -50 No default volume
1280 dirNFErr -120 Directory not found or incomplete pathname
1281 afpAccessDenied -5000 User does not have the correct access
1282 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1283 */
1284
1285 /*****************************************************************************/
1286
1287 #if OLDROUTINENAMES
1288 #define DirIDFromFSSpec(spec, theDirID, isDirectory) FSpGetDirectoryID(spec, theDirID, isDirectory)
1289 #endif
1290 EXTERN_API( OSErr )
1291 FSpGetDirectoryID(
1292 const FSSpec * spec,
1293 long * theDirID,
1294 Boolean * isDirectory);
1295
1296
1297 /*
1298 The FSpGetDirectoryID function gets the directory ID number of the
1299 directory specified by spec. If spec is to a file, then the parent
1300 directory of the file is returned and isDirectory is false. If
1301 spec is to a directory, then that directory's ID number is
1302 returned and isDirectory is true.
1303
1304 spec input: An FSSpec record specifying the directory.
1305 theDirID output: The directory ID.
1306 isDirectory output: True if object is a directory; false if
1307 object is a file.
1308
1309 Result Codes
1310 noErr 0 No error
1311 nsvErr -35 No such volume
1312 ioErr -36 I/O error
1313 bdNamErr -37 Bad filename
1314 fnfErr -43 File not found
1315 paramErr -50 No default volume
1316 dirNFErr -120 Directory not found or incomplete pathname
1317 afpAccessDenied -5000 User does not have the correct access
1318 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1319 */
1320
1321 /*****************************************************************************/
1322
1323 EXTERN_API( OSErr )
1324 GetDirName(
1325 short vRefNum,
1326 long dirID,
1327 Str31 name);
1328
1329
1330 /*
1331 The GetDirName function gets the name of a directory from its
1332 directory ID.
1333
1334 vRefNum input: Volume specification.
1335 dirID input: Directory ID.
1336 name output: Points to a Str31 where the directory name is to be
1337 returned.
1338
1339 Result Codes
1340 noErr 0 No error
1341 nsvErr -35 No such volume
1342 ioErr -36 I/O error
1343 bdNamErr -37 Bad filename
1344 fnfErr -43 File not found
1345 paramErr -50 No default volume or
1346 name parameter was NULL
1347 dirNFErr -120 Directory not found or incomplete pathname
1348 afpAccessDenied -5000 User does not have the correct access
1349 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1350 */
1351
1352 /*****************************************************************************/
1353
1354 EXTERN_API( OSErr )
1355 GetIOACUser(
1356 short vRefNum,
1357 long dirID,
1358 ConstStr255Param name,
1359 SInt8 * ioACUser);
1360
1361
1362 /*
1363 GetIOACUser returns a directory's access restrictions byte.
1364 Use the masks and macro defined in MoreFilesExtras to check for
1365 specific access priviledges.
1366
1367 vRefNum input: Volume specification.
1368 dirID input: Directory ID.
1369 name input: Pointer to object name, or nil when dirID
1370 specifies a directory that's the object.
1371 ioACUser output: The access restriction byte
1372
1373 Result Codes
1374 noErr 0 No error
1375 nsvErr -35 No such volume
1376 ioErr -36 I/O error
1377 bdNamErr -37 Bad filename
1378 fnfErr -43 File not found
1379 paramErr -50 No default volume
1380 dirNFErr -120 Directory not found or incomplete pathname
1381 afpAccessDenied -5000 User does not have the correct access
1382 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1383 */
1384
1385 /*****************************************************************************/
1386
1387 EXTERN_API( OSErr )
1388 FSpGetIOACUser(
1389 const FSSpec * spec,
1390 SInt8 * ioACUser);
1391
1392
1393 /*
1394 FSpGetIOACUser returns a directory's access restrictions byte.
1395 Use the masks and macro defined in MoreFilesExtras to check for
1396 specific access priviledges.
1397
1398 spec input: An FSSpec record specifying the directory.
1399 ioACUser output: The access restriction byte
1400
1401 Result Codes
1402 noErr 0 No error
1403 nsvErr -35 No such volume
1404 ioErr -36 I/O error
1405 bdNamErr -37 Bad filename
1406 fnfErr -43 File not found
1407 paramErr -50 No default volume
1408 dirNFErr -120 Directory not found or incomplete pathname
1409 afpAccessDenied -5000 User does not have the correct access
1410 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1411 */
1412
1413 /*****************************************************************************/
1414
1415 EXTERN_API( OSErr )
1416 GetParentID(
1417 short vRefNum,
1418 long dirID,
1419 ConstStr255Param name,
1420 long * parID);
1421
1422
1423 /*
1424 The GetParentID function gets the parent directory ID number of the
1425 specified object.
1426
1427 vRefNum input: Volume specification.
1428 dirID input: Directory ID.
1429 name input: Pointer to object name, or nil when dirID specifies
1430 a directory that's the object.
1431 parID output: The parent directory ID of the specified object.
1432
1433 Result Codes
1434 noErr 0 No error
1435 nsvErr -35 No such volume
1436 ioErr -36 I/O error
1437 bdNamErr -37 Bad filename
1438 fnfErr -43 File not found
1439 paramErr -50 No default volume
1440 dirNFErr -120 Directory not found or incomplete pathname
1441 afpAccessDenied -5000 User does not have the correct access
1442 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1443 */
1444
1445 /*****************************************************************************/
1446
1447 EXTERN_API( OSErr )
1448 GetFilenameFromPathname(
1449 ConstStr255Param pathname,
1450 Str255 filename);
1451
1452
1453 /*
1454 The GetFilenameFromPathname function gets the file (or directory) name
1455 from the end of a full or partial pathname. Returns notAFileErr if the
1456 pathname is nil, the pathname is empty, or the pathname cannot refer to
1457 a filename (with a noErr result, the pathname could still refer to a
1458 directory).
1459
1460 pathname input: A full or partial pathname.
1461 filename output: The file (or directory) name.
1462
1463 Result Codes
1464 noErr 0 No error
1465 notAFileErr -1302 The pathname is nil, the pathname
1466 is empty, or the pathname cannot refer
1467 to a filename
1468
1469 __________
1470
1471 See also: GetObjectLocation.
1472 */
1473
1474 /*****************************************************************************/
1475
1476 EXTERN_API( OSErr )
1477 GetObjectLocation(
1478 short vRefNum,
1479 long dirID,
1480 ConstStr255Param pathname,
1481 short * realVRefNum,
1482 long * realParID,
1483 Str255 realName,
1484 Boolean * isDirectory);
1485
1486
1487 /*
1488 The GetObjectLocation function gets a file system object's location -
1489 that is, its real volume reference number, real parent directory ID,
1490 and name. While we're at it, determine if the object is a file or directory.
1491 If GetObjectLocation returns fnfErr, then the location information
1492 returned is valid, but it describes an object that doesn't exist.
1493 You can use the location information for another operation, such as
1494 creating a file or directory.
1495
1496 vRefNum input: Volume specification.
1497 dirID input: Directory ID.
1498 pathname input: Pointer to object name, or nil when dirID specifies
1499 a directory that's the object.
1500 realVRefNum output: The real volume reference number.
1501 realParID output: The parent directory ID of the specified object.
1502 realName output: The name of the specified object (the case of the
1503 object name may not be the same as the object's
1504 catalog entry on disk - since the Macintosh file
1505 system is not case sensitive, it shouldn't matter).
1506 isDirectory output: True if object is a directory; false if object
1507 is a file.
1508
1509 Result Codes
1510 noErr 0 No error
1511 nsvErr -35 No such volume
1512 ioErr -36 I/O error
1513 bdNamErr -37 Bad filename
1514 fnfErr -43 File not found
1515 paramErr -50 No default volume
1516 dirNFErr -120 Directory not found or incomplete pathname
1517 notAFileErr -1302 The pathname is nil, the pathname
1518 is empty, or the pathname cannot refer
1519 to a filename
1520 afpAccessDenied -5000 User does not have the correct access
1521 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1522
1523 __________
1524
1525 See also: FSMakeFSSpecCompat
1526 */
1527
1528 /*****************************************************************************/
1529
1530 EXTERN_API( OSErr )
1531 GetDirItems(
1532 short vRefNum,
1533 long dirID,
1534 ConstStr255Param name,
1535 Boolean getFiles,
1536 Boolean getDirectories,
1537 FSSpecPtr items,
1538 short reqItemCount,
1539 short * actItemCount,
1540 short * itemIndex);
1541
1542
1543 /*
1544 The GetDirItems function returns a list of items in the specified
1545 directory in an array of FSSpec records. File, subdirectories, or
1546 both can be returned in the list.
1547
1548 A noErr result indicates that the items array was filled
1549 (actItemCount == reqItemCount) and there may be additional items
1550 left in the directory. A fnfErr result indicates that the end of
1551 the directory list was found and actItemCount items were actually
1552 found this time.
1553
1554 vRefNum input: Volume specification.
1555 dirID input: Directory ID.
1556 name input: Pointer to object name, or nil when dirID
1557 specifies a directory that's the object.
1558 getFiles input: Pass true to have files added to the items list.
1559 getDirectories input: Pass true to have directories added to the
1560 items list.
1561 items input: Pointer to array of FSSpec where the item list
1562 is returned.
1563 reqItemCount input: Maximum number of items to return (the number
1564 of elements in the items array).
1565 actItemCount output: The number of items actually returned.
1566 itemIndex input: The current item index position. Set to 1 to
1567 start with the first item in the directory.
1568 output: The item index position to get the next item.
1569 Pass this value the next time you call
1570 GetDirItems to start where you left off.
1571
1572 Result Codes
1573 noErr 0 No error, but there are more items
1574 to list
1575 nsvErr -35 No such volume
1576 ioErr -36 I/O error
1577 bdNamErr -37 Bad filename
1578 fnfErr -43 File not found, there are no more items
1579 to be listed.
1580 paramErr -50 No default volume or itemIndex was <= 0
1581 dirNFErr -120 Directory not found or incomplete pathname
1582 afpAccessDenied -5000 User does not have the correct access
1583 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1584 */
1585
1586 /*****************************************************************************/
1587
1588 EXTERN_API( OSErr )
1589 DeleteDirectoryContents(
1590 short vRefNum,
1591 long dirID,
1592 ConstStr255Param name);
1593
1594
1595 /*
1596 The DeleteDirectoryContents function deletes the contents of a directory.
1597 All files and subdirectories in the specified directory are deleted.
1598 If a locked file or directory is encountered, it is unlocked and then
1599 deleted. If any unexpected errors are encountered,
1600 DeleteDirectoryContents quits and returns to the caller.
1601
1602 vRefNum input: Volume specification.
1603 dirID input: Directory ID.
1604 name input: Pointer to directory name, or nil when dirID specifies
1605 a directory that's the object.
1606
1607 Result Codes
1608 noErr 0 No error
1609 nsvErr -35 No such volume
1610 ioErr -36 I/O error
1611 bdNamErr -37 Bad filename
1612 fnfErr -43 File not found
1613 wPrErr -44 Hardware volume lock
1614 fLckdErr -45 File is locked
1615 vLckdErr -46 Software volume lock
1616 fBsyErr -47 File busy, directory not empty, or working directory control block open
1617 paramErr -50 No default volume
1618 dirNFErr -120 Directory not found or incomplete pathname
1619 afpAccessDenied -5000 User does not have the correct access
1620 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1621
1622 __________
1623
1624 Also see: DeleteDirectory
1625 */
1626
1627 /*****************************************************************************/
1628
1629 EXTERN_API( OSErr )
1630 DeleteDirectory(
1631 short vRefNum,
1632 long dirID,
1633 ConstStr255Param name);
1634
1635
1636 /*
1637 The DeleteDirectory function deletes a directory and its contents.
1638 All files and subdirectories in the specified directory are deleted.
1639 If a locked file or directory is encountered, it is unlocked and then
1640 deleted. After deleting the directories contents, the directory is
1641 deleted. If any unexpected errors are encountered, DeleteDirectory
1642 quits and returns to the caller.
1643
1644 vRefNum input: Volume specification.
1645 dirID input: Directory ID.
1646 name input: Pointer to directory name, or nil when dirID specifies
1647 a directory that's the object.
1648
1649 Result Codes
1650 noErr 0 No error
1651 nsvErr -35 No such volume
1652 ioErr -36 I/O error
1653 bdNamErr -37 Bad filename
1654 fnfErr -43 File not found
1655 wPrErr -44 Hardware volume lock
1656 fLckdErr -45 File is locked
1657 vLckdErr -46 Software volume lock
1658 fBsyErr -47 File busy, directory not empty, or working directory control block open
1659 paramErr -50 No default volume
1660 dirNFErr -120 Directory not found or incomplete pathname
1661 afpAccessDenied -5000 User does not have the correct access
1662 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1663
1664 __________
1665
1666 Also see: DeleteDirectoryContents
1667 */
1668
1669 /*****************************************************************************/
1670
1671 EXTERN_API( OSErr )
1672 CheckObjectLock(
1673 short vRefNum,
1674 long dirID,
1675 ConstStr255Param name);
1676
1677
1678 /*
1679 The CheckObjectLock function determines if a file or directory is locked.
1680 If CheckObjectLock returns noErr, then the file or directory
1681 is not locked. If CheckObjectLock returns fLckdErr, the it is locked.
1682
1683 vRefNum input: Volume specification.
1684 dirID input: Directory ID.
1685 name input: Pointer to object name, or nil when dirID specifies
1686 a directory that's the object.
1687
1688 Result Codes
1689 noErr 0 No error
1690 nsvErr -35 No such volume
1691 ioErr -36 I/O error
1692 bdNamErr -37 Bad filename
1693 fnfErr -43 File not found
1694 fLckdErr -45 File is locked
1695 paramErr -50 No default volume
1696 dirNFErr -120 Directory not found or incomplete pathname
1697 afpAccessDenied -5000 User does not have the correct access
1698 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1699
1700 __________
1701
1702 Also see: FSpCheckObjectLock
1703 */
1704
1705 /*****************************************************************************/
1706
1707 EXTERN_API( OSErr )
1708 FSpCheckObjectLock(const FSSpec * spec);
1709
1710
1711 /*
1712 The FSpCheckObjectLock function determines if a file or directory is locked.
1713 If FSpCheckObjectLock returns noErr, then the file or directory
1714 is not locked.
1715
1716 spec input: An FSSpec record specifying the object.
1717
1718 Result Codes
1719 noErr 0 No error
1720 nsvErr -35 No such volume
1721 ioErr -36 I/O error
1722 bdNamErr -37 Bad filename
1723 fnfErr -43 File not found
1724 fLckdErr -45 File is locked
1725 paramErr -50 No default volume
1726 dirNFErr -120 Directory not found or incomplete pathname
1727 afpAccessDenied -5000 User does not have the correct access
1728 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1729
1730 __________
1731
1732 Also see: CheckObjectLock
1733 */
1734
1735 /*****************************************************************************/
1736
1737 EXTERN_API( OSErr )
1738 GetFileSize(
1739 short vRefNum,
1740 long dirID,
1741 ConstStr255Param fileName,
1742 long * dataSize,
1743 long * rsrcSize);
1744
1745
1746 /*
1747 The GetFileSize function returns the logical size of a file's
1748 data and resource fork.
1749
1750 vRefNum input: Volume specification.
1751 dirID input: Directory ID.
1752 name input: The name of the file.
1753 dataSize output: The number of bytes in the file's data fork.
1754 rsrcSize output: The number of bytes in the file's resource fork.
1755
1756 Result Codes
1757 noErr 0 No error
1758 nsvErr -35 No such volume
1759 ioErr -36 I/O error
1760 bdNamErr -37 Bad filename
1761 fnfErr -43 File not found
1762 paramErr -50 No default volume
1763 dirNFErrdirNFErr -120 Directory not found or incomplete pathname
1764 afpAccessDenied -5000 User does not have the correct access
1765 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1766
1767 __________
1768
1769 See also: FSpGetFileSize
1770 */
1771
1772 /*****************************************************************************/
1773
1774 EXTERN_API( OSErr )
1775 FSpGetFileSize(
1776 const FSSpec * spec,
1777 long * dataSize,
1778 long * rsrcSize);
1779
1780
1781 /*
1782 The FSpGetFileSize function returns the logical size of a file's
1783 data and resource fork.
1784
1785 spec input: An FSSpec record specifying the file.
1786 dataSize output: The number of bytes in the file's data fork.
1787 rsrcSize output: The number of bytes in the file's resource fork.
1788
1789 Result Codes
1790 noErr 0 No error
1791 nsvErr -35 No such volume
1792 ioErr -36 I/O error
1793 bdNamErr -37 Bad filename
1794 fnfErr -43 File not found
1795 paramErr -50 No default volume
1796 dirNFErrdirNFErr -120 Directory not found or incomplete pathname
1797 afpAccessDenied -5000 User does not have the correct access
1798 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1799
1800 __________
1801
1802 See also: GetFileSize
1803 */
1804
1805 /*****************************************************************************/
1806
1807 EXTERN_API( OSErr )
1808 BumpDate(
1809 short vRefNum,
1810 long dirID,
1811 ConstStr255Param name);
1812
1813
1814 /*
1815 The BumpDate function changes the modification date of a file or
1816 directory to the current date/time. If the modification date is already
1817 equal to the current date/time, then add one second to the
1818 modification date.
1819
1820 vRefNum input: Volume specification.
1821 dirID input: Directory ID.
1822 name input: Pointer to object name, or nil when dirID specifies
1823 a directory that's the object.
1824
1825 Result Codes
1826 noErr 0 No error
1827 nsvErr -35 No such volume
1828 ioErr -36 I/O error
1829 bdNamErr -37 Bad filename
1830 fnfErr -43 File not found
1831 fLckdErr -45 File is locked
1832 vLckdErr -46 Volume is locked or read-only
1833 paramErr -50 No default volume
1834 dirNFErr -120 Directory not found or incomplete pathname
1835 afpAccessDenied -5000 User does not have the correct access
1836 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1837
1838 __________
1839
1840 See also: FSpBumpDate
1841 */
1842
1843 /*****************************************************************************/
1844
1845 EXTERN_API( OSErr )
1846 FSpBumpDate(const FSSpec * spec);
1847
1848
1849 /*
1850 The FSpBumpDate function changes the modification date of a file or
1851 directory to the current date/time. If the modification date is already
1852 equal to the current date/time, then add one second to the
1853 modification date.
1854
1855 spec input: An FSSpec record specifying the object.
1856
1857 Result Codes
1858 noErr 0 No error
1859 nsvErr -35 No such volume
1860 ioErr -36 I/O error
1861 bdNamErr -37 Bad filename
1862 fnfErr -43 File not found
1863 fLckdErr -45 File is locked
1864 vLckdErr -46 Volume is locked or read-only
1865 paramErr -50 No default volume
1866 dirNFErr -120 Directory not found or incomplete pathname
1867 afpAccessDenied -5000 User does not have the correct access
1868 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1869
1870 __________
1871
1872 See also: BumpDate
1873 */
1874
1875 /*****************************************************************************/
1876
1877 EXTERN_API( OSErr )
1878 ChangeCreatorType(
1879 short vRefNum,
1880 long dirID,
1881 ConstStr255Param name,
1882 OSType creator,
1883 OSType fileType);
1884
1885
1886 /*
1887 The ChangeCreatorType function changes the creator or file type of a file.
1888
1889 vRefNum input: Volume specification.
1890 dirID input: Directory ID.
1891 name input: The name of the file.
1892 creator input: The new creator type or 0x00000000 to leave
1893 the creator type alone.
1894 fileType input: The new file type or 0x00000000 to leave the
1895 file type alone.
1896
1897 Result Codes
1898 noErr 0 No error
1899 nsvErr -35 No such volume
1900 ioErr -36 I/O error
1901 bdNamErr -37 Bad filename
1902 fnfErr -43 File not found
1903 fLckdErr -45 File is locked
1904 vLckdErr -46 Volume is locked or read-only
1905 paramErr -50 No default volume
1906 dirNFErr -120 Directory not found or incomplete pathname
1907 notAFileErr -1302 Name was not a file
1908 afpAccessDenied -5000 User does not have the correct access
1909 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1910
1911 __________
1912
1913 See also: FSpChangeCreatorType
1914 */
1915
1916 /*****************************************************************************/
1917
1918 EXTERN_API( OSErr )
1919 FSpChangeCreatorType(
1920 const FSSpec * spec,
1921 OSType creator,
1922 OSType fileType);
1923
1924
1925 /*
1926 The FSpChangeCreatorType function changes the creator or file type of a file.
1927
1928 spec input: An FSSpec record specifying the file.
1929 creator input: The new creator type or 0x00000000 to leave
1930 the creator type alone.
1931 fileType input: The new file type or 0x00000000 to leave the
1932 file type alone.
1933
1934 Result Codes
1935 noErr 0 No error
1936 nsvErr -35 No such volume
1937 ioErr -36 I/O error
1938 bdNamErr -37 Bad filename
1939 fnfErr -43 File not found
1940 fLckdErr -45 File is locked
1941 vLckdErr -46 Volume is locked or read-only
1942 paramErr -50 No default volume
1943 dirNFErr -120 Directory not found or incomplete pathname
1944 notAFileErr -1302 Name was not a file
1945 afpAccessDenied -5000 User does not have the correct access
1946 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1947
1948 __________
1949
1950 See also: ChangeCreatorType
1951 */
1952
1953 /*****************************************************************************/
1954
1955 EXTERN_API( OSErr )
1956 ChangeFDFlags(
1957 short vRefNum,
1958 long dirID,
1959 ConstStr255Param name,
1960 Boolean setBits,
1961 unsigned short flagBits);
1962
1963
1964 /*
1965 The ChangeFDFlags function sets or clears Finder Flag bits in the
1966 fdFlags field of a file or directory's FInfo record.
1967
1968 vRefNum input: Volume specification.
1969 dirID input: Directory ID.
1970 name input: Pointer to object name, or nil when dirID specifies
1971 a directory that's the object.
1972 setBits input: If true, then set the bits specified in flagBits.
1973 If false, then clear the bits specified in flagBits.
1974 flagBits input: The flagBits parameter specifies which Finder Flag
1975 bits to set or clear. If a bit in flagBits is set,
1976 then the same bit in fdFlags is either set or
1977 cleared depending on the state of the setBits
1978 parameter.
1979
1980 Result Codes
1981 noErr 0 No error
1982 nsvErr -35 No such volume
1983 ioErr -36 I/O error
1984 bdNamErr -37 Bad filename
1985 fnfErr -43 File not found
1986 fLckdErr -45 File is locked
1987 vLckdErr -46 Volume is locked or read-only
1988 paramErr -50 No default volume
1989 dirNFErr -120 Directory not found or incomplete pathname
1990 afpAccessDenied -5000 User does not have the correct access
1991 afpObjectTypeErr -5025 Directory not found or incomplete pathname
1992
1993 __________
1994
1995 See also: FSpChangeFDFlags
1996 */
1997
1998 /*****************************************************************************/
1999
2000 EXTERN_API( OSErr )
2001 FSpChangeFDFlags(
2002 const FSSpec * spec,
2003 Boolean setBits,
2004 unsigned short flagBits);
2005
2006
2007 /*
2008 The FSpChangeFDFlags function sets or clears Finder Flag bits in the
2009 fdFlags field of a file or directory's FInfo record.
2010
2011 spec input: An FSSpec record specifying the object.
2012 setBits input: If true, then set the bits specified in flagBits.
2013 If false, then clear the bits specified in flagBits.
2014 flagBits input: The flagBits parameter specifies which Finder Flag
2015 bits to set or clear. If a bit in flagBits is set,
2016 then the same bit in fdFlags is either set or
2017 cleared depending on the state of the setBits
2018 parameter.
2019
2020 Result Codes
2021 noErr 0 No error
2022 nsvErr -35 No such volume
2023 ioErr -36 I/O error
2024 bdNamErr -37 Bad filename
2025 fnfErr -43 File not found
2026 fLckdErr -45 File is locked
2027 vLckdErr -46 Volume is locked or read-only
2028 paramErr -50 No default volume
2029 dirNFErr -120 Directory not found or incomplete pathname
2030 afpAccessDenied -5000 User does not have the correct access
2031 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2032
2033 __________
2034
2035 See also: ChangeFDFlags
2036 */
2037
2038 /*****************************************************************************/
2039
2040 EXTERN_API( OSErr )
2041 SetIsInvisible(
2042 short vRefNum,
2043 long dirID,
2044 ConstStr255Param name);
2045
2046
2047 /*
2048 The SetIsInvisible function sets the invisible bit in the fdFlags
2049 word of the specified file or directory's finder information.
2050
2051 vRefNum input: Volume specification.
2052 dirID input: Directory ID.
2053 name input: Pointer to object name, or nil when dirID specifies
2054 a directory that's the object.
2055
2056 Result Codes
2057 noErr 0 No error
2058 nsvErr -35 No such volume
2059 ioErr -36 I/O error
2060 bdNamErr -37 Bad filename
2061 fnfErr -43 File not found
2062 fLckdErr -45 File is locked
2063 vLckdErr -46 Volume is locked or read-only
2064 paramErr -50 No default volume
2065 dirNFErr -120 Directory not found or incomplete pathname
2066 afpAccessDenied -5000 User does not have the correct access
2067 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2068
2069 __________
2070
2071 See also: FSpSetIsInvisible, ClearIsInvisible, FSpClearIsInvisible
2072 */
2073
2074 /*****************************************************************************/
2075
2076 EXTERN_API( OSErr )
2077 FSpSetIsInvisible(const FSSpec * spec);
2078
2079
2080 /*
2081 The FSpSetIsInvisible function sets the invisible bit in the fdFlags
2082 word of the specified file or directory's finder information.
2083
2084 spec input: An FSSpec record specifying the object.
2085
2086 Result Codes
2087 noErr 0 No error
2088 nsvErr -35 No such volume
2089 ioErr -36 I/O error
2090 bdNamErr -37 Bad filename
2091 fnfErr -43 File not found
2092 fLckdErr -45 File is locked
2093 vLckdErr -46 Volume is locked or read-only
2094 paramErr -50 No default volume
2095 dirNFErr -120 Directory not found or incomplete pathname
2096 afpAccessDenied -5000 User does not have the correct access
2097 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2098
2099 __________
2100
2101 See also: SetIsInvisible, ClearIsInvisible, FSpClearIsInvisible
2102 */
2103
2104 /*****************************************************************************/
2105
2106 EXTERN_API( OSErr )
2107 ClearIsInvisible(
2108 short vRefNum,
2109 long dirID,
2110 ConstStr255Param name);
2111
2112
2113 /*
2114 The ClearIsInvisible function clears the invisible bit in the fdFlags
2115 word of the specified file or directory's finder information.
2116
2117 vRefNum input: Volume specification.
2118 dirID input: Directory ID.
2119 name input: Pointer to object name, or nil when dirID specifies
2120 a directory that's the object.
2121
2122 Result Codes
2123 noErr 0 No error
2124 nsvErr -35 No such volume
2125 ioErr -36 I/O error
2126 bdNamErr -37 Bad filename
2127 fnfErr -43 File not found
2128 fLckdErr -45 File is locked
2129 vLckdErr -46 Volume is locked or read-only
2130 paramErr -50 No default volume
2131 dirNFErr -120 Directory not found or incomplete pathname
2132 afpAccessDenied -5000 User does not have the correct access
2133 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2134
2135 __________
2136
2137 See also: SetIsInvisible, FSpSetIsInvisible, FSpClearIsInvisible
2138 */
2139
2140 /*****************************************************************************/
2141
2142 EXTERN_API( OSErr )
2143 FSpClearIsInvisible(const FSSpec * spec);
2144
2145
2146 /*
2147 The FSpClearIsInvisible function clears the invisible bit in the fdFlags
2148 word of the specified file or directory's finder information.
2149
2150 spec input: An FSSpec record specifying the object.
2151
2152 Result Codes
2153 noErr 0 No error
2154 nsvErr -35 No such volume
2155 ioErr -36 I/O error
2156 bdNamErr -37 Bad filename
2157 fnfErr -43 File not found
2158 fLckdErr -45 File is locked
2159 vLckdErr -46 Volume is locked or read-only
2160 paramErr -50 No default volume
2161 dirNFErr -120 Directory not found or incomplete pathname
2162 afpAccessDenied -5000 User does not have the correct access
2163 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2164
2165 __________
2166
2167 See also: SetIsInvisible, FSpSetIsInvisible, ClearIsInvisible
2168 */
2169
2170 /*****************************************************************************/
2171
2172 EXTERN_API( OSErr )
2173 SetNameLocked(
2174 short vRefNum,
2175 long dirID,
2176 ConstStr255Param name);
2177
2178
2179 /*
2180 The SetNameLocked function sets the nameLocked bit in the fdFlags word
2181 of the specified file or directory's finder information.
2182
2183 vRefNum input: Volume specification.
2184 dirID input: Directory ID.
2185 name input: Pointer to object name, or nil when dirID specifies
2186 a directory that's the object.
2187
2188 Result Codes
2189 noErr 0 No error
2190 nsvErr -35 No such volume
2191 ioErr -36 I/O error
2192 bdNamErr -37 Bad filename
2193 fnfErr -43 File not found
2194 fLckdErr -45 File is locked
2195 vLckdErr -46 Volume is locked or read-only
2196 paramErr -50 No default volume
2197 dirNFErr -120 Directory not found or incomplete pathname
2198 afpAccessDenied -5000 User does not have the correct access
2199 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2200
2201 __________
2202
2203 See also: FSpSetNameLocked, ClearNameLocked, FSpClearNameLocked
2204 */
2205
2206 /*****************************************************************************/
2207
2208 EXTERN_API( OSErr )
2209 FSpSetNameLocked(const FSSpec * spec);
2210
2211
2212 /*
2213 The FSpSetNameLocked function sets the nameLocked bit in the fdFlags word
2214 of the specified file or directory's finder information.
2215
2216 spec input: An FSSpec record specifying the object.
2217
2218 Result Codes
2219 noErr 0 No error
2220 nsvErr -35 No such volume
2221 ioErr -36 I/O error
2222 bdNamErr -37 Bad filename
2223 fnfErr -43 File not found
2224 fLckdErr -45 File is locked
2225 vLckdErr -46 Volume is locked or read-only
2226 paramErr -50 No default volume
2227 dirNFErr -120 Directory not found or incomplete pathname
2228 afpAccessDenied -5000 User does not have the correct access
2229 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2230
2231 __________
2232
2233 See also: SetNameLocked, ClearNameLocked, FSpClearNameLocked
2234 */
2235
2236 /*****************************************************************************/
2237
2238 EXTERN_API( OSErr )
2239 ClearNameLocked(
2240 short vRefNum,
2241 long dirID,
2242 ConstStr255Param name);
2243
2244
2245 /*
2246 The ClearNameLocked function clears the nameLocked bit in the fdFlags
2247 word of the specified file or directory's finder information.
2248
2249 vRefNum input: Volume specification.
2250 dirID input: Directory ID.
2251 name input: Pointer to object name, or nil when dirID specifies
2252 a directory that's the object.
2253
2254 Result Codes
2255 noErr 0 No error
2256 nsvErr -35 No such volume
2257 ioErr -36 I/O error
2258 bdNamErr -37 Bad filename
2259 fnfErr -43 File not found
2260 fLckdErr -45 File is locked
2261 vLckdErr -46 Volume is locked or read-only
2262 paramErr -50 No default volume
2263 dirNFErr -120 Directory not found or incomplete pathname
2264 afpAccessDenied -5000 User does not have the correct access
2265 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2266
2267 __________
2268
2269 See also: SetNameLocked, FSpSetNameLocked, FSpClearNameLocked
2270 */
2271
2272 /*****************************************************************************/
2273
2274 EXTERN_API( OSErr )
2275 FSpClearNameLocked(const FSSpec * spec);
2276
2277
2278 /*
2279 The FSpClearNameLocked function clears the nameLocked bit in the fdFlags
2280 word of the specified file or directory's finder information.
2281
2282 spec input: An FSSpec record specifying the object.
2283
2284 Result Codes
2285 noErr 0 No error
2286 nsvErr -35 No such volume
2287 ioErr -36 I/O error
2288 bdNamErr -37 Bad filename
2289 fnfErr -43 File not found
2290 fLckdErr -45 File is locked
2291 vLckdErr -46 Volume is locked or read-only
2292 paramErr -50 No default volume
2293 dirNFErr -120 Directory not found or incomplete pathname
2294 afpAccessDenied -5000 User does not have the correct access
2295 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2296
2297 __________
2298
2299 See also: SetNameLocked, FSpSetNameLocked, ClearNameLocked
2300 */
2301
2302 /*****************************************************************************/
2303
2304 EXTERN_API( OSErr )
2305 SetIsStationery(
2306 short vRefNum,
2307 long dirID,
2308 ConstStr255Param name);
2309
2310
2311 /*
2312 The SetIsStationery function sets the isStationery bit in the
2313 fdFlags word of the specified file or directory's finder information.
2314
2315 vRefNum input: Volume specification.
2316 dirID input: Directory ID.
2317 name input: Pointer to object name, or nil when dirID specifies
2318 a directory that's the object.
2319
2320 Result Codes
2321 noErr 0 No error
2322 nsvErr -35 No such volume
2323 ioErr -36 I/O error
2324 bdNamErr -37 Bad filename
2325 fnfErr -43 File not found
2326 fLckdErr -45 File is locked
2327 vLckdErr -46 Volume is locked or read-only
2328 paramErr -50 No default volume
2329 dirNFErr -120 Directory not found or incomplete pathname
2330 afpAccessDenied -5000 User does not have the correct access
2331 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2332
2333 __________
2334
2335 See also: FSpSetIsStationery, ClearIsStationery, FSpClearIsStationery
2336 */
2337
2338 /*****************************************************************************/
2339
2340 EXTERN_API( OSErr )
2341 FSpSetIsStationery(const FSSpec * spec);
2342
2343
2344 /*
2345 The FSpSetIsStationery function sets the isStationery bit in the
2346 fdFlags word of the specified file or directory's finder information.
2347
2348 spec input: An FSSpec record specifying the object.
2349
2350 Result Codes
2351 noErr 0 No error
2352 nsvErr -35 No such volume
2353 ioErr -36 I/O error
2354 bdNamErr -37 Bad filename
2355 fnfErr -43 File not found
2356 fLckdErr -45 File is locked
2357 vLckdErr -46 Volume is locked or read-only
2358 paramErr -50 No default volume
2359 dirNFErr -120 Directory not found or incomplete pathname
2360 afpAccessDenied -5000 User does not have the correct access
2361 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2362
2363 __________
2364
2365 See also: SetIsStationery, ClearIsStationery, FSpClearIsStationery
2366 */
2367
2368 /*****************************************************************************/
2369
2370 EXTERN_API( OSErr )
2371 ClearIsStationery(
2372 short vRefNum,
2373 long dirID,
2374 ConstStr255Param name);
2375
2376
2377 /*
2378 The ClearIsStationery function clears the isStationery bit in the
2379 fdFlags word of the specified file or directory's finder information.
2380
2381 vRefNum input: Volume specification.
2382 dirID input: Directory ID.
2383 name input: Pointer to object name, or nil when dirID specifies
2384 a directory that's the object.
2385
2386 Result Codes
2387 noErr 0 No error
2388 nsvErr -35 No such volume
2389 ioErr -36 I/O error
2390 bdNamErr -37 Bad filename
2391 fnfErr -43 File not found
2392 fLckdErr -45 File is locked
2393 vLckdErr -46 Volume is locked or read-only
2394 paramErr -50 No default volume
2395 dirNFErr -120 Directory not found or incomplete pathname
2396 afpAccessDenied -5000 User does not have the correct access
2397 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2398
2399 __________
2400
2401 See also: SetIsStationery, FSpSetIsStationery, FSpClearIsStationery
2402 */
2403
2404 /*****************************************************************************/
2405
2406 EXTERN_API( OSErr )
2407 FSpClearIsStationery(const FSSpec * spec);
2408
2409
2410 /*
2411 The FSpClearIsStationery function clears the isStationery bit in the
2412 fdFlags word of the specified file or directory's finder information.
2413
2414 spec input: An FSSpec record specifying the object.
2415
2416 Result Codes
2417 noErr 0 No error
2418 nsvErr -35 No such volume
2419 ioErr -36 I/O error
2420 bdNamErr -37 Bad filename
2421 fnfErr -43 File not found
2422 fLckdErr -45 File is locked
2423 vLckdErr -46 Volume is locked or read-only
2424 paramErr -50 No default volume
2425 dirNFErr -120 Directory not found or incomplete pathname
2426 afpAccessDenied -5000 User does not have the correct access
2427 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2428
2429 __________
2430
2431 See also: SetIsStationery, FSpSetIsStationery, ClearIsStationery
2432 */
2433
2434 /*****************************************************************************/
2435
2436 EXTERN_API( OSErr )
2437 SetHasCustomIcon(
2438 short vRefNum,
2439 long dirID,
2440 ConstStr255Param name);
2441
2442
2443 /*
2444 The SetHasCustomIcon function sets the hasCustomIcon bit in the
2445 fdFlags word of the specified file or directory's finder information.
2446
2447 vRefNum input: Volume specification.
2448 dirID input: Directory ID.
2449 name input: Pointer to object name, or nil when dirID specifies
2450 a directory that's the object.
2451
2452 Result Codes
2453 noErr 0 No error
2454 nsvErr -35 No such volume
2455 ioErr -36 I/O error
2456 bdNamErr -37 Bad filename
2457 fnfErr -43 File not found
2458 fLckdErr -45 File is locked
2459 vLckdErr -46 Volume is locked or read-only
2460 paramErr -50 No default volume
2461 dirNFErr -120 Directory not found or incomplete pathname
2462 afpAccessDenied -5000 User does not have the correct access
2463 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2464
2465 __________
2466
2467 See also: FSpSetHasCustomIcon, ClearHasCustomIcon, FSpClearHasCustomIcon
2468 */
2469
2470 /*****************************************************************************/
2471
2472 EXTERN_API( OSErr )
2473 FSpSetHasCustomIcon(const FSSpec * spec);
2474
2475
2476 /*
2477 The FSpSetHasCustomIcon function sets the hasCustomIcon bit in the
2478 fdFlags word of the specified file or directory's finder information.
2479
2480 spec input: An FSSpec record specifying the object.
2481
2482 Result Codes
2483 noErr 0 No error
2484 nsvErr -35 No such volume
2485 ioErr -36 I/O error
2486 bdNamErr -37 Bad filename
2487 fnfErr -43 File not found
2488 fLckdErr -45 File is locked
2489 vLckdErr -46 Volume is locked or read-only
2490 paramErr -50 No default volume
2491 dirNFErr -120 Directory not found or incomplete pathname
2492 afpAccessDenied -5000 User does not have the correct access
2493 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2494
2495 __________
2496
2497 See also: SetHasCustomIcon, ClearHasCustomIcon, FSpClearHasCustomIcon
2498 */
2499
2500 /*****************************************************************************/
2501
2502 EXTERN_API( OSErr )
2503 ClearHasCustomIcon(
2504 short vRefNum,
2505 long dirID,
2506 ConstStr255Param name);
2507
2508
2509 /*
2510 The ClearHasCustomIcon function clears the hasCustomIcon bit in the
2511 fdFlags word of the specified file or directory's finder information.
2512
2513 vRefNum input: Volume specification.
2514 dirID input: Directory ID.
2515 name input: Pointer to object name, or nil when dirID specifies
2516 a directory that's the object.
2517
2518 Result Codes
2519 noErr 0 No error
2520 nsvErr -35 No such volume
2521 ioErr -36 I/O error
2522 bdNamErr -37 Bad filename
2523 fnfErr -43 File not found
2524 fLckdErr -45 File is locked
2525 vLckdErr -46 Volume is locked or read-only
2526 paramErr -50 No default volume
2527 dirNFErr -120 Directory not found or incomplete pathname
2528 afpAccessDenied -5000 User does not have the correct access
2529 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2530
2531 __________
2532
2533 See also: SetHasCustomIcon, FSpSetHasCustomIcon, FSpClearHasCustomIcon
2534 */
2535
2536 /*****************************************************************************/
2537
2538 EXTERN_API( OSErr )
2539 FSpClearHasCustomIcon(const FSSpec * spec);
2540
2541
2542 /*
2543 The FSpClearHasCustomIcon function clears the hasCustomIcon bit in the
2544 fdFlags word of the specified file or directory's finder information.
2545
2546 spec input: An FSSpec record specifying the object.
2547
2548 Result Codes
2549 noErr 0 No error
2550 nsvErr -35 No such volume
2551 ioErr -36 I/O error
2552 bdNamErr -37 Bad filename
2553 fnfErr -43 File not found
2554 fLckdErr -45 File is locked
2555 vLckdErr -46 Volume is locked or read-only
2556 paramErr -50 No default volume
2557 dirNFErr -120 Directory not found or incomplete pathname
2558 afpAccessDenied -5000 User does not have the correct access
2559 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2560
2561 __________
2562
2563 See also: SetHasCustomIcon, FSpSetHasCustomIcon, ClearHasCustomIcon
2564 */
2565
2566 /*****************************************************************************/
2567
2568 EXTERN_API( OSErr )
2569 ClearHasBeenInited(
2570 short vRefNum,
2571 long dirID,
2572 ConstStr255Param name);
2573
2574
2575 /*
2576 The ClearHasBeenInited function clears the hasBeenInited bit in the
2577 fdFlags word of the specified file or directory's finder information.
2578
2579 vRefNum input: Volume specification.
2580 dirID input: Directory ID.
2581 name input: Pointer to object name, or nil when dirID specifies
2582 a directory that's the object.
2583
2584 Result Codes
2585 noErr 0 No error
2586 nsvErr -35 No such volume
2587 ioErr -36 I/O error
2588 bdNamErr -37 Bad filename
2589 fnfErr -43 File not found
2590 fLckdErr -45 File is locked
2591 vLckdErr -46 Volume is locked or read-only
2592 paramErr -50 No default volume
2593 dirNFErr -120 Directory not found or incomplete pathname
2594 afpAccessDenied -5000 User does not have the correct access
2595 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2596
2597 __________
2598
2599 See also: FSpClearHasBeenInited
2600 */
2601
2602 /*****************************************************************************/
2603
2604 EXTERN_API( OSErr )
2605 FSpClearHasBeenInited(const FSSpec * spec);
2606
2607
2608 /*
2609 The FSpClearHasBeenInited function clears the hasBeenInited bit in the
2610 fdFlags word of the specified file or directory's finder information.
2611
2612 spec input: An FSSpec record specifying the object.
2613
2614 Result Codes
2615 noErr 0 No error
2616 nsvErr -35 No such volume
2617 ioErr -36 I/O error
2618 bdNamErr -37 Bad filename
2619 fnfErr -43 File not found
2620 fLckdErr -45 File is locked
2621 vLckdErr -46 Volume is locked or read-only
2622 paramErr -50 No default volume
2623 dirNFErr -120 Directory not found or incomplete pathname
2624 afpAccessDenied -5000 User does not have the correct access
2625 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2626
2627 __________
2628
2629 See also: ClearHasBeenInited
2630 */
2631
2632 /*****************************************************************************/
2633
2634 EXTERN_API( OSErr )
2635 CopyFileMgrAttributes(
2636 short srcVRefNum,
2637 long srcDirID,
2638 ConstStr255Param srcName,
2639 short dstVRefNum,
2640 long dstDirID,
2641 ConstStr255Param dstName,
2642 Boolean copyLockBit);
2643
2644
2645 /*
2646 The CopyFileMgrAttributes function copies all File Manager attributes
2647 from the source file or directory to the destination file or directory.
2648 If copyLockBit is true, then set the locked state of the destination
2649 to match the source.
2650
2651 srcVRefNum input: Source volume specification.
2652 srcDirID input: Source directory ID.
2653 srcName input: Pointer to source object name, or nil when
2654 srcDirID specifies a directory that's the object.
2655 dstVRefNum input: Destination volume specification.
2656 dstDirID input: Destination directory ID.
2657 dstName input: Pointer to destination object name, or nil when
2658 dstDirID specifies a directory that's the object.
2659 copyLockBit input: If true, set the locked state of the destination
2660 to match the source.
2661
2662 Result Codes
2663 noErr 0 No error
2664 nsvErr -35 No such volume
2665 ioErr -36 I/O error
2666 bdNamErr -37 Bad filename
2667 fnfErr -43 File not found
2668 fLckdErr -45 File is locked
2669 vLckdErr -46 Volume is locked or read-only
2670 paramErr -50 No default volume
2671 dirNFErr -120 Directory not found or incomplete pathname
2672 afpAccessDenied -5000 User does not have the correct access
2673 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2674
2675 __________
2676
2677 See also: FSpCopyFileMgrAttributes
2678 */
2679
2680 /*****************************************************************************/
2681
2682 EXTERN_API( OSErr )
2683 FSpCopyFileMgrAttributes(
2684 const FSSpec * srcSpec,
2685 const FSSpec * dstSpec,
2686 Boolean copyLockBit);
2687
2688
2689 /*
2690 The FSpCopyFileMgrAttributes function copies all File Manager attributes
2691 from the source file or directory to the destination file or directory.
2692 If copyLockBit is true, then set the locked state of the destination
2693 to match the source.
2694
2695 srcSpec input: An FSSpec record specifying the source object.
2696 dstSpec input: An FSSpec record specifying the destination object.
2697 copyLockBit input: If true, set the locked state of the destination
2698 to match the source.
2699
2700 Result Codes
2701 noErr 0 No error
2702 nsvErr -35 No such volume
2703 ioErr -36 I/O error
2704 bdNamErr -37 Bad filename
2705 fnfErr -43 File not found
2706 fLckdErr -45 File is locked
2707 vLckdErr -46 Volume is locked or read-only
2708 paramErr -50 No default volume
2709 dirNFErr -120 Directory not found or incomplete pathname
2710 afpAccessDenied -5000 User does not have the correct access
2711 afpObjectTypeErr -5025 Directory not found or incomplete pathname
2712
2713 __________
2714
2715 See also: CopyFileMgrAttributes
2716 */
2717
2718 /*****************************************************************************/
2719
2720 EXTERN_API( OSErr )
2721 HOpenAware(
2722 short vRefNum,
2723 long dirID,
2724 ConstStr255Param fileName,
2725 short denyModes,
2726 short * refNum);
2727
2728
2729 /*
2730 The HOpenAware function opens the data fork of a file using deny mode
2731 permissions instead the normal File Manager permissions. If OpenDeny
2732 is not available, then HOpenAware translates the deny modes to the
2733 closest File Manager permissions and tries to open the file with
2734 OpenDF first, and then Open if OpenDF isn't available. By using
2735 HOpenAware with deny mode permissions, a program can be "AppleShare
2736 aware" and fall back on the standard File Manager open calls
2737 automatically.
2738
2739 vRefNum input: Volume specification.
2740 dirID input: Directory ID.
2741 fileName input: The name of the file.
2742 denyModes input: The deny modes access under which to open the file.
2743 refNum output: The file reference number of the opened file.
2744
2745 Result Codes
2746 noErr 0 No error
2747 nsvErr -35 No such volume
2748 tmfoErr -42 Too many files open
2749 fnfErr -43 File not found
2750 wPrErr -44 Volume locked by hardware
2751 fLckdErr -45 File is locked
2752 vLckdErr -46 Volume is locked or read-only
2753 opWrErr -49 File already open for writing
2754 paramErr -50 No default volume
2755 permErr -54 File is already open and cannot be opened using specified deny modes
2756 afpAccessDenied -5000 User does not have the correct access to the file
2757 afpDenyConflict -5006 Requested access permission not possible
2758
2759 __________
2760
2761 See also: FSpOpenAware, HOpenRFAware, FSpOpenRFAware
2762 */
2763
2764 /*****************************************************************************/
2765
2766 EXTERN_API( OSErr )
2767 FSpOpenAware(
2768 const FSSpec * spec,
2769 short denyModes,
2770 short * refNum);
2771
2772
2773 /*
2774 The FSpOpenAware function opens the data fork of a file using deny mode
2775 permissions instead the normal File Manager permissions. If OpenDeny
2776 is not available, then FSpOpenAware translates the deny modes to the
2777 closest File Manager permissions and tries to open the file with
2778 OpenDF first, and then Open if OpenDF isn't available. By using
2779 FSpOpenAware with deny mode permissions, a program can be "AppleShare
2780 aware" and fall back on the standard File Manager open calls
2781 automatically.
2782
2783 spec input: An FSSpec record specifying the file.
2784 denyModes input: The deny modes access under which to open the file.
2785 refNum output: The file reference number of the opened file.
2786
2787 Result Codes
2788 noErr 0 No error
2789 nsvErr -35 No such volume
2790 tmfoErr -42 Too many files open
2791 fnfErr -43 File not found
2792 wPrErr -44 Volume locked by hardware
2793 fLckdErr -45 File is locked
2794 vLckdErr -46 Volume is locked or read-only
2795 opWrErr -49 File already open for writing
2796 paramErr -50 No default volume
2797 permErr -54 File is already open and cannot be opened using specified deny modes
2798 afpAccessDenied -5000 User does not have the correct access to the file
2799 afpDenyConflict -5006 Requested access permission not possible
2800
2801 __________
2802
2803 See also: HOpenAware, HOpenRFAware, FSpOpenRFAware
2804 */
2805
2806 /*****************************************************************************/
2807
2808 EXTERN_API( OSErr )
2809 HOpenRFAware(
2810 short vRefNum,
2811 long dirID,
2812 ConstStr255Param fileName,
2813 short denyModes,
2814 short * refNum);
2815
2816
2817 /*
2818 The HOpenRFAware function opens the resource fork of a file using deny
2819 mode permissions instead the normal File Manager permissions. If
2820 OpenRFDeny is not available, then HOpenRFAware translates the deny
2821 modes to the closest File Manager permissions and tries to open the
2822 file with OpenRF. By using HOpenRFAware with deny mode permissions,
2823 a program can be "AppleShare aware" and fall back on the standard
2824 File Manager open calls automatically.
2825
2826 vRefNum input: Volume specification.
2827 dirID input: Directory ID.
2828 fileName input: The name of the file.
2829 denyModes input: The deny modes access under which to open the file.
2830 refNum output: The file reference number of the opened file.
2831
2832 Result Codes
2833 noErr 0 No error
2834 nsvErr -35 No such volume
2835 tmfoErr -42 Too many files open
2836 fnfErr -43 File not found
2837 wPrErr -44 Volume locked by hardware
2838 fLckdErr -45 File is locked
2839 vLckdErr -46 Volume is locked or read-only
2840 opWrErr -49 File already open for writing
2841 paramErr -50 No default volume
2842 permErr -54 File is already open and cannot be opened using specified deny modes
2843 afpAccessDenied -5000 User does not have the correct access to the file
2844 afpDenyConflict -5006 Requested access permission not possible
2845
2846 __________
2847
2848 See also: HOpenAware, FSpOpenAware, FSpOpenRFAware
2849 */
2850
2851 /*****************************************************************************/
2852
2853 EXTERN_API( OSErr )
2854 FSpOpenRFAware(
2855 const FSSpec * spec,
2856 short denyModes,
2857 short * refNum);
2858
2859
2860 /*
2861 The FSpOpenRFAware function opens the resource fork of a file using deny
2862 mode permissions instead the normal File Manager permissions. If
2863 OpenRFDeny is not available, then FSpOpenRFAware translates the deny
2864 modes to the closest File Manager permissions and tries to open the
2865 file with OpenRF. By using FSpOpenRFAware with deny mode permissions,
2866 a program can be "AppleShare aware" and fall back on the standard
2867 File Manager open calls automatically.
2868
2869 spec input: An FSSpec record specifying the file.
2870 denyModes input: The deny modes access under which to open the file.
2871 refNum output: The file reference number of the opened file.
2872
2873 Result Codes
2874 noErr 0 No error
2875 nsvErr -35 No such volume
2876 tmfoErr -42 Too many files open
2877 fnfErr -43 File not found
2878 wPrErr -44 Volume locked by hardware
2879 fLckdErr -45 File is locked
2880 vLckdErr -46 Volume is locked or read-only
2881 opWrErr -49 File already open for writing
2882 paramErr -50 No default volume
2883 permErr -54 File is already open and cannot be opened using specified deny modes
2884 afpAccessDenied -5000 User does not have the correct access to the file
2885 afpDenyConflict -5006 Requested access permission not possible
2886
2887 __________
2888
2889 See also: HOpenAware, FSpOpenAware, HOpenRFAware
2890 */
2891
2892 /*****************************************************************************/
2893
2894 EXTERN_API( OSErr )
2895 FSReadNoCache(
2896 short refNum,
2897 long * count,
2898 void * buffPtr);
2899
2900
2901 /*
2902 The FSReadNoCache function reads any number of bytes from an open file
2903 while asking the file system to bypass its cache mechanism.
2904
2905 refNum input: The file reference number of an open file.
2906 count input: The number of bytes to read.
2907 output: The number of bytes actually read.
2908 buffPtr input: A pointer to the data buffer into which the bytes are
2909 to be read.
2910
2911 Result Codes
2912 noErr 0 No error
2913 readErr Ð19 Driver does not respond to read requests
2914 badUnitErr Ð21 Driver reference number does not
2915 match unit table
2916 unitEmptyErr Ð22 Driver reference number specifies a
2917 nil handle in unit table
2918 abortErr Ð27 Request aborted by KillIO
2919 notOpenErr Ð28 Driver not open
2920 ioErr Ð36 Data does not match in read-verify mode
2921 fnOpnErr -38 File not open
2922 rfNumErr -51 Bad reference number
2923 afpAccessDenied -5000 User does not have the correct access to
2924 the file
2925
2926 __________
2927
2928 See also: FSWriteNoCache
2929 */
2930
2931 /*****************************************************************************/
2932
2933 EXTERN_API( OSErr )
2934 FSWriteNoCache(
2935 short refNum,
2936 long * count,
2937 const void * buffPtr);
2938
2939
2940 /*
2941 The FSReadNoCache function writes any number of bytes to an open file
2942 while asking the file system to bypass its cache mechanism.
2943
2944 refNum input: The file reference number of an open file.
2945 count input: The number of bytes to write to the file.
2946 output: The number of bytes actually written.
2947 buffPtr input: A pointer to the data buffer from which the bytes are
2948 to be written.
2949
2950 Result Codes
2951 noErr 0 No error
2952 writErr Ð20 Driver does not respond to write requests
2953 badUnitErr Ð21 Driver reference number does not
2954 match unit table
2955 unitEmptyErr Ð22 Driver reference number specifies a
2956 nil handle in unit table
2957 abortErr Ð27 Request aborted by KillIO
2958 notOpenErr Ð28 Driver not open
2959 dskFulErr -34 Disk full
2960 ioErr Ð36 Data does not match in read-verify mode
2961 fnOpnErr -38 File not open
2962 wPrErr -44 Hardware volume lock
2963 fLckdErr -45 File is locked
2964 vLckdErr -46 Software volume lock
2965 rfNumErr -51 Bad reference number
2966 wrPermErr -61 Read/write permission doesnÕt
2967 allow writing
2968 afpAccessDenied -5000 User does not have the correct access to
2969 the file
2970
2971 __________
2972
2973 See also: FSReadNoCache
2974 */
2975
2976 /*****************************************************************************/
2977
2978 EXTERN_API( OSErr )
2979 FSWriteVerify(
2980 short refNum,
2981 long * count,
2982 const void * buffPtr);
2983
2984
2985 /*
2986 The FSWriteVerify function writes any number of bytes to an open file
2987 and then verifies that the data was actually written to the device.
2988
2989 refNum input: The file reference number of an open file.
2990 count input: The number of bytes to write to the file.
2991 output: The number of bytes actually written and verified.
2992 buffPtr input: A pointer to the data buffer from which the bytes are
2993 to be written.
2994
2995 Result Codes
2996 noErr 0 No error
2997 readErr Ð19 Driver does not respond to read requests
2998 writErr Ð20 Driver does not respond to write requests
2999 badUnitErr Ð21 Driver reference number does not
3000 match unit table
3001 unitEmptyErr Ð22 Driver reference number specifies a
3002 nil handle in unit table
3003 abortErr Ð27 Request aborted by KillIO
3004 notOpenErr Ð28 Driver not open
3005 dskFulErr -34 Disk full
3006 ioErr Ð36 Data does not match in read-verify mode
3007 fnOpnErr -38 File not open
3008 eofErr -39 Logical end-of-file reached
3009 posErr -40 Attempt to position mark before start
3010 of file
3011 wPrErr -44 Hardware volume lock
3012 fLckdErr -45 File is locked
3013 vLckdErr -46 Software volume lock
3014 rfNumErr -51 Bad reference number
3015 gfpErr -52 Error during GetFPos
3016 wrPermErr -61 Read/write permission doesnÕt
3017 allow writing
3018 memFullErr -108 Not enough room in heap zone to allocate
3019 verify buffer
3020 afpAccessDenied -5000 User does not have the correct access to
3021 the file
3022 */
3023
3024 /*****************************************************************************/
3025
3026 EXTERN_API( OSErr )
3027 CopyFork(
3028 short srcRefNum,
3029 short dstRefNum,
3030 void * copyBufferPtr,
3031 long copyBufferSize);
3032
3033
3034 /*
3035 The CopyFork function copies all data from the source fork to the
3036 destination fork of open file forks and makes sure the destination EOF
3037 is equal to the source EOF.
3038
3039 srcRefNum input: The source file reference number.
3040 dstRefNum input: The destination file reference number.
3041 copyBufferPtr input: Pointer to buffer to use during copy. The
3042 buffer should be at least 512-bytes minimum.
3043 The larger the buffer, the faster the copy.
3044 copyBufferSize input: The size of the copy buffer.
3045
3046 Result Codes
3047 noErr 0 No error
3048 readErr Ð19 Driver does not respond to read requests
3049 writErr Ð20 Driver does not respond to write requests
3050 badUnitErr Ð21 Driver reference number does not
3051 match unit table
3052 unitEmptyErr Ð22 Driver reference number specifies a
3053 nil handle in unit table
3054 abortErr Ð27 Request aborted by KillIO
3055 notOpenErr Ð28 Driver not open
3056 dskFulErr -34 Disk full
3057 ioErr Ð36 Data does not match in read-verify mode
3058 fnOpnErr -38 File not open
3059 wPrErr -44 Hardware volume lock
3060 fLckdErr -45 File is locked
3061 vLckdErr -46 Software volume lock
3062 rfNumErr -51 Bad reference number
3063 wrPermErr -61 Read/write permission doesnÕt
3064 allow writing
3065 afpAccessDenied -5000 User does not have the correct access to
3066 the file
3067 */
3068
3069 /*****************************************************************************/
3070
3071 EXTERN_API( OSErr )
3072 GetFileLocation(
3073 short refNum,
3074 short * vRefNum,
3075 long * dirID,
3076 StringPtr fileName);
3077
3078
3079 /*
3080 The GetFileLocation function gets the location (volume reference number,
3081 directory ID, and fileName) of an open file.
3082
3083 refNum input: The file reference number of an open file.
3084 vRefNum output: The volume reference number.
3085 dirID output: The parent directory ID.
3086 fileName input: Points to a buffer (minimum Str63) where the
3087 filename is to be returned or must be nil.
3088 output: The filename.
3089
3090 Result Codes
3091 noErr 0 No error
3092 nsvErr -35 Specified volume doesnÕt exist
3093 fnOpnErr -38 File not open
3094 rfNumErr -51 Reference number specifies nonexistent
3095 access path
3096
3097 __________
3098
3099 See also: FSpGetFileLocation
3100 */
3101
3102 /*****************************************************************************/
3103
3104 EXTERN_API( OSErr )
3105 FSpGetFileLocation(
3106 short refNum,
3107 FSSpec * spec);
3108
3109
3110 /*
3111 The FSpGetFileLocation function gets the location of an open file in
3112 an FSSpec record.
3113
3114 refNum input: The file reference number of an open file.
3115 spec output: FSSpec record containing the file name and location.
3116
3117 Result Codes
3118 noErr 0 No error
3119 nsvErr -35 Specified volume doesnÕt exist
3120 fnOpnErr -38 File not open
3121 rfNumErr -51 Reference number specifies nonexistent
3122 access path
3123
3124 __________
3125
3126 See also: GetFileLocation
3127 */
3128
3129 /*****************************************************************************/
3130
3131 EXTERN_API( OSErr )
3132 CopyDirectoryAccess(
3133 short srcVRefNum,
3134 long srcDirID,
3135 ConstStr255Param srcName,
3136 short dstVRefNum,
3137 long dstDirID,
3138 ConstStr255Param dstName);
3139
3140
3141 /*
3142 The CopyDirectoryAccess function copies the AFP directory access
3143 privileges from one directory to another. Both directories must be on
3144 the same file server, but not necessarily on the same server volume.
3145
3146 srcVRefNum input: Source volume specification.
3147 srcDirID input: Source directory ID.
3148 srcName input: Pointer to source directory name, or nil when
3149 srcDirID specifies the directory.
3150 dstVRefNum input: Destination volume specification.
3151 dstDirID input: Destination directory ID.
3152 dstName input: Pointer to destination directory name, or nil when
3153 dstDirID specifies the directory.
3154
3155 Result Codes
3156 noErr 0 No error
3157 nsvErr -35 Volume not found
3158 fnfErr -43 Directory not found
3159 vLckdErr -46 Volume is locked or read-only
3160 paramErr -50 Volume doesn't support this function
3161 afpAccessDenied -5000 User does not have the correct access
3162 to the directory
3163 afpObjectTypeErr -5025 Object is a file, not a directory
3164
3165 __________
3166
3167 See also: FSpCopyDirectoryAccess
3168 */
3169
3170 /*****************************************************************************/
3171
3172 EXTERN_API( OSErr )
3173 FSpCopyDirectoryAccess(
3174 const FSSpec * srcSpec,
3175 const FSSpec * dstSpec);
3176
3177
3178 /*
3179 The FSpCopyDirectoryAccess function copies the AFP directory access
3180 privileges from one directory to another. Both directories must be on
3181 the same file server, but not necessarily on the same server volume.
3182
3183 srcSpec input: An FSSpec record specifying the source directory.
3184 dstSpec input: An FSSpec record specifying the destination directory.
3185
3186 Result Codes
3187 noErr 0 No error
3188 nsvErr -35 Volume not found
3189 fnfErr -43 Directory not found
3190 vLckdErr -46 Volume is locked or read-only
3191 paramErr -50 Volume doesn't support this function
3192 afpAccessDenied -5000 User does not have the correct access
3193 to the directory
3194 afpObjectTypeErr -5025 Object is a file, not a directory
3195
3196 __________
3197
3198 See also: CopyDirectoryAccess
3199 */
3200
3201 /*****************************************************************************/
3202
3203 EXTERN_API( OSErr )
3204 HMoveRenameCompat(
3205 short vRefNum,
3206 long srcDirID,
3207 ConstStr255Param srcName,
3208 long dstDirID,
3209 ConstStr255Param dstpathName,
3210 ConstStr255Param copyName);
3211
3212
3213 /*
3214 The HMoveRenameCompat function moves a file or directory and optionally
3215 renames it. The source and destination locations must be on the same
3216 volume. This routine works even if the volume doesn't support MoveRename.
3217
3218 vRefNum input: Volume specification.
3219 srcDirID input: Source directory ID.
3220 srcName input: The source object name.
3221 dstDirID input: Destination directory ID.
3222 dstName input: Pointer to destination directory name, or
3223 nil when dstDirID specifies a directory.
3224 copyName input: Points to the new name if the object is to be
3225 renamed or nil if the object isn't to be renamed.
3226
3227 Result Codes
3228 noErr 0 No error
3229 dirFulErr -33 File directory full
3230 dskFulErr -34 Disk is full
3231 nsvErr -35 Volume not found
3232 ioErr -36 I/O error
3233 bdNamErr -37 Bad filename or attempt to move into
3234 a file
3235 fnfErr -43 Source file or directory not found
3236 wPrErr -44 Hardware volume lock
3237 fLckdErr -45 File is locked
3238 vLckdErr -46 Destination volume is read-only
3239 fBsyErr -47 File busy, directory not empty, or
3240 working directory control block open
3241 dupFNErr -48 Destination already exists
3242 paramErr -50 Volume doesn't support this function,
3243 no default volume, or source and
3244 volOfflinErr -53 Volume is offline
3245 fsRnErr -59 Problem during rename
3246 dirNFErr -120 Directory not found or incomplete pathname
3247 badMovErr -122 Attempted to move directory into
3248 offspring
3249 wrgVolTypErr -123 Not an HFS volume (it's a MFS volume)
3250 notAFileErr -1302 The pathname is nil, the pathname
3251 is empty, or the pathname cannot refer
3252 to a filename
3253 diffVolErr -1303 Files on different volumes
3254 afpAccessDenied -5000 The user does not have the right to
3255 move the file or directory
3256 afpObjectTypeErr -5025 Directory not found or incomplete pathname
3257 afpSameObjectErr -5038 Source and destination files are the same
3258
3259 __________
3260
3261 See also: FSpMoveRenameCompat
3262 */
3263
3264 /*****************************************************************************/
3265
3266 EXTERN_API( OSErr )
3267 FSpMoveRenameCompat(
3268 const FSSpec * srcSpec,
3269 const FSSpec * dstSpec,
3270 ConstStr255Param copyName);
3271
3272
3273 /*
3274 The FSpMoveRenameCompat function moves a file or directory and optionally
3275 renames it. The source and destination locations must be on the same
3276 volume. This routine works even if the volume doesn't support MoveRename.
3277
3278 srcSpec input: An FSSpec record specifying the source object.
3279 dstSpec input: An FSSpec record specifying the destination
3280 directory.
3281 copyName input: Points to the new name if the object is to be
3282 renamed or nil if the object isn't to be renamed.
3283
3284 Result Codes
3285 noErr 0 No error
3286 dirFulErr -33 File directory full
3287 dskFulErr -34 Disk is full
3288 nsvErr -35 Volume not found
3289 ioErr -36 I/O error
3290 bdNamErr -37 Bad filename or attempt to move into
3291 a file
3292 fnfErr -43 Source file or directory not found
3293 wPrErr -44 Hardware volume lock
3294 fLckdErr -45 File is locked
3295 vLckdErr -46 Destination volume is read-only
3296 fBsyErr -47 File busy, directory not empty, or
3297 working directory control block open
3298 dupFNErr -48 Destination already exists
3299 paramErr -50 Volume doesn't support this function,
3300 no default volume, or source and
3301 volOfflinErr -53 Volume is offline
3302 fsRnErr -59 Problem during rename
3303 dirNFErr -120 Directory not found or incomplete pathname
3304 badMovErr -122 Attempted to move directory into
3305 offspring
3306 wrgVolTypErr -123 Not an HFS volume (it's a MFS volume)
3307 notAFileErr -1302 The pathname is nil, the pathname
3308 is empty, or the pathname cannot refer
3309 to a filename
3310 diffVolErr -1303 Files on different volumes
3311 afpAccessDenied -5000 The user does not have the right to
3312 move the file or directory
3313 afpObjectTypeErr -5025 Directory not found or incomplete pathname
3314 afpSameObjectErr -5038 Source and destination files are the same
3315
3316 __________
3317
3318 See also: HMoveRenameCompat
3319 */
3320
3321 /*****************************************************************************/
3322
3323 EXTERN_API( OSErr )
3324 BuildAFPVolMountInfo(
3325 short flags,
3326 char nbpInterval,
3327 char nbpCount,
3328 short uamType,
3329 Str32 zoneName,
3330 Str31 serverName,
3331 Str27 volName,
3332 Str31 userName,
3333 Str8 userPassword,
3334 Str8 volPassword,
3335 AFPVolMountInfoPtr * afpInfoPtr);
3336
3337
3338 /*
3339 The BuildAFPVolMountInfo function allocates and initializes the fields
3340 of an AFPVolMountInfo record before using that record to call
3341 the VolumeMount function.
3342
3343 flags input: The AFP mounting flags. 0 = normal mount;
3344 set bit 0 to inhibit greeting messages.
3345 nbpInterval input: The interval used for VolumeMount's
3346 NBP Lookup call. 7 is a good choice.
3347 nbpCount input: The retry count used for VolumeMount's
3348 NBP Lookup call. 5 is a good choice.
3349 uamType input: The user authentication method to use.
3350 zoneName input: The AppleTalk zone name of the server.
3351 serverName input: The AFP server name.
3352 volName input: The AFP volume name.
3353 userName input: The user name (zero length Pascal string for
3354 guest).
3355 userPassWord input: The user password (zero length Pascal string
3356 if no user password)
3357 volPassWord input: The volume password (zero length Pascal string
3358 if no volume password)
3359 afpInfoPtr output: A pointer to the newly created and initialized
3360 AFPVolMountInfo record. If the function fails to
3361 create an AFPVolMountInfo record, it sets
3362 afpInfoPtr to NULL and the function result is
3363 memFullErr. Your program is responsible
3364 for disposing of this pointer when it is finished
3365 with it.
3366
3367 Result Codes
3368 noErr 0 No error
3369 memFullErr -108 memory full error
3370
3371 __________
3372
3373 Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
3374 RetrieveAFPVolMountInfo, BuildAFPXVolMountInfo,
3375 RetrieveAFPXVolMountInfo
3376 */
3377
3378 /*****************************************************************************/
3379
3380 EXTERN_API( OSErr )
3381 RetrieveAFPVolMountInfo(
3382 AFPVolMountInfoPtr afpInfoPtr,
3383 short * flags,
3384 short * uamType,
3385 StringPtr zoneName,
3386 StringPtr serverName,
3387 StringPtr volName,
3388 StringPtr userName);
3389
3390
3391 /*
3392 The RetrieveAFPVolMountInfo function retrieves the AFP mounting
3393 information returned in an AFPVolMountInfo record by the
3394 GetVolMountInfo function.
3395
3396 afpInfoPtr input: Pointer to AFPVolMountInfo record that contains
3397 the AFP mounting information.
3398 flags output: The AFP mounting flags.
3399 uamType output: The user authentication method used.
3400 zoneName output: The AppleTalk zone name of the server.
3401 serverName output: The AFP server name.
3402 volName output: The AFP volume name.
3403 userName output: The user name (zero length Pascal string for
3404 guest).
3405
3406 Result Codes
3407 noErr 0 No error
3408 paramErr -50 media field in AFP mounting information
3409 was not AppleShareMediaType
3410
3411 __________
3412
3413 Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
3414 BuildAFPVolMountInfo, BuildAFPXVolMountInfo,
3415 RetrieveAFPXVolMountInfo
3416 */
3417
3418 /*****************************************************************************/
3419
3420 EXTERN_API( OSErr )
3421 BuildAFPXVolMountInfo(
3422 short flags,
3423 char nbpInterval,
3424 char nbpCount,
3425 short uamType,
3426 Str32 zoneName,
3427 Str31 serverName,
3428 Str27 volName,
3429 Str31 userName,
3430 Str8 userPassword,
3431 Str8 volPassword,
3432 Str32 uamName,
3433 unsigned long alternateAddressLength,
3434 void * alternateAddress,
3435 AFPXVolMountInfoPtr * afpXInfoPtr);
3436
3437
3438 /*
3439 The BuildAFPXVolMountInfo function allocates and initializes the fields
3440 of an AFPXVolMountInfo record before using that record to call
3441 the VolumeMount function.
3442
3443 flags input: The AFP mounting flags.
3444 nbpInterval input: The interval used for VolumeMount's
3445 NBP Lookup call. 7 is a good choice.
3446 nbpCount input: The retry count used for VolumeMount's
3447 NBP Lookup call. 5 is a good choice.
3448 uamType input: The user authentication method to use.
3449 zoneName input: The AppleTalk zone name of the server.
3450 serverName input: The AFP server name.
3451 volName input: The AFP volume name.
3452 userName input: The user name (zero length Pascal string
3453 for guest).
3454 userPassWord input: The user password (zero length Pascal
3455 string if no user password)
3456 volPassWord input: The volume password (zero length Pascal
3457 string if no volume password)
3458 uamName input: The User Authentication Method name.
3459 alternateAddressLength input: Length of alternateAddress data.
3460 alternateAddress input The AFPAlternateAddress (variable length)
3461 afpXInfoPtr output: A pointer to the newly created and
3462 initialized AFPVolMountInfo record.
3463 If the function fails to create an
3464 AFPVolMountInfo record, it sets
3465 afpInfoPtr to NULL and the function
3466 result is memFullErr. Your program is
3467 responsible for disposing of this pointer
3468 when it is finished with it.
3469
3470 Result Codes
3471 noErr 0 No error
3472 memFullErr -108 memory full error
3473
3474 __________
3475
3476 Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
3477 BuildAFPVolMountInfo, RetrieveAFPVolMountInfo,
3478 RetrieveAFPXVolMountInfo
3479 */
3480
3481 /*****************************************************************************/
3482
3483 EXTERN_API( OSErr )
3484 RetrieveAFPXVolMountInfo(
3485 AFPXVolMountInfoPtr afpXInfoPtr,
3486 short * flags,
3487 short * uamType,
3488 StringPtr zoneName,
3489 StringPtr serverName,
3490 StringPtr volName,
3491 StringPtr userName,
3492 StringPtr uamName,
3493 unsigned long * alternateAddressLength,
3494 AFPAlternateAddress ** alternateAddress);
3495
3496
3497 /*
3498 The RetrieveAFPXVolMountInfo function retrieves the AFP mounting
3499 information returned in an AFPXVolMountInfo record by the
3500 GetVolMountInfo function.
3501
3502 afpXInfoPtr input: Pointer to AFPXVolMountInfo record that
3503 contains the AFP mounting information.
3504 flags output: The AFP mounting flags.
3505 uamType output: The user authentication method used.
3506 zoneName output: The AppleTalk zone name of the server.
3507 serverName output: The AFP server name.
3508 volName output: The AFP volume name.
3509 userName output: The user name (zero length Pascal
3510 string for guest).
3511 uamName output: The User Authentication Method name.
3512 alternateAddressLength output: Length of alternateAddress data returned.
3513 alternateAddress: output: A pointer to the newly created and
3514 AFPAlternateAddress record (a variable
3515 length record). If the function fails to
3516 create an AFPAlternateAddress record,
3517 it sets alternateAddress to NULL and the
3518 function result is memFullErr. Your
3519 program is responsible for disposing of
3520 this pointer when it is finished with it.
3521
3522 Result Codes
3523 noErr 0 No error
3524 paramErr -50 media field in AFP mounting information
3525 was not AppleShareMediaType
3526 memFullErr -108 memory full error
3527
3528 __________
3529
3530 Also see: GetVolMountInfoSize, GetVolMountInfo, VolumeMount,
3531 BuildAFPVolMountInfo, RetrieveAFXVolMountInfo,
3532 BuildAFPXVolMountInfo
3533 */
3534
3535 /*****************************************************************************/
3536
3537 EXTERN_API( OSErr )
3538 GetUGEntries(
3539 short objType,
3540 UGEntryPtr entries,
3541 long reqEntryCount,
3542 long * actEntryCount,
3543 long * objID);
3544
3545
3546 /*
3547 The GetUGEntries functions retrieves a list of user or group entries
3548 from the local file server.
3549
3550 objType input: The object type: -1 = group; 0 = user
3551 UGEntries input: Pointer to array of UGEntry records where the list
3552 is returned.
3553 reqEntryCount input: The number of elements in the UGEntries array.
3554 actEntryCount output: The number of entries returned.
3555 objID input: The current index position. Set to 0 to start with
3556 the first entry.
3557 output: The index position to get the next entry. Pass this
3558 value the next time you call GetUGEntries to start
3559 where you left off.
3560
3561 Result Codes
3562 noErr 0 No error
3563 fnfErr -43 No more users or groups
3564 paramErr -50 Function not supported; or, ioObjID is
3565 negative
3566
3567 __________
3568
3569 Also see: GetUGEntry
3570 */
3571
3572 /*****************************************************************************/
3573
3574
3575
3576 #include "OptimizationEnd.h"
3577
3578 #if PRAGMA_STRUCT_ALIGN
3579 #pragma options align=reset
3580 #elif PRAGMA_STRUCT_PACKPUSH
3581 #pragma pack(pop)
3582 #elif PRAGMA_STRUCT_PACK
3583 #pragma pack()
3584 #endif
3585
3586 #ifdef PRAGMA_IMPORT_OFF
3587 #pragma import off
3588 #elif PRAGMA_IMPORT
3589 #pragma import reset
3590 #endif
3591
3592 #ifdef __cplusplus
3593 }
3594 #endif
3595
3596 #endif /* __MOREFILESEXTRAS__ */
3597