home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / CodeWarrior Lite / Metrowerks C⁄C++ Lite / Headers / Universal Headers 2.0.1f / StandardFile.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-12  |  12.3 KB  |  312 lines  |  [TEXT/MMCC]

  1. /*
  2.      File:        StandardFile.h
  3.  
  4.      Contains:    Standard File package Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. */
  19.  
  20. #ifndef __STANDARDFILE__
  21. #define __STANDARDFILE__
  22.  
  23.  
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. /*    #include <ConditionalMacros.h>                                */
  28.  
  29. #ifndef __DIALOGS__
  30. #include <Dialogs.h>
  31. #endif
  32. /*    #include <Errors.h>                                            */
  33. /*    #include <Memory.h>                                            */
  34. /*        #include <MixedMode.h>                                    */
  35. /*    #include <Windows.h>                                        */
  36. /*        #include <Quickdraw.h>                                    */
  37. /*            #include <QuickdrawText.h>                            */
  38. /*        #include <Events.h>                                        */
  39. /*            #include <OSUtils.h>                                */
  40. /*        #include <Controls.h>                                    */
  41. /*            #include <Menus.h>                                    */
  42. /*    #include <TextEdit.h>                                        */
  43.  
  44. #ifndef __FILES__
  45. #include <Files.h>
  46. #endif
  47.  
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51.  
  52. #if PRAGMA_ALIGN_SUPPORTED
  53. #pragma options align=mac68k
  54. #endif
  55.  
  56. #if PRAGMA_IMPORT_SUPPORTED
  57. #pragma import on
  58. #endif
  59.  
  60.  
  61. enum {
  62. /* resource IDs and item offsets of pre-7.0 dialogs */
  63.     putDlgID                    = -3999,
  64.     putSave                        = 1,
  65.     putCancel                    = 2,
  66.     putEject                    = 5,
  67.     putDrive                    = 6,
  68.     putName                        = 7,
  69.     getDlgID                    = -4000,
  70.     getOpen                        = 1,
  71.     getCancel                    = 3,
  72.     getEject                    = 5,
  73.     getDrive                    = 6,
  74.     getNmList                    = 7,
  75.     getScroll                    = 8,
  76. /* resource IDs and item offsets of 7.0 dialogs */
  77.     sfPutDialogID                = -6043,
  78.     sfGetDialogID                = -6042,
  79.     sfItemOpenButton            = 1,
  80.     sfItemCancelButton            = 2,
  81.     sfItemBalloonHelp            = 3,
  82.     sfItemVolumeUser            = 4,
  83.     sfItemEjectButton            = 5
  84. };
  85.  
  86. enum {
  87.     sfItemDesktopButton            = 6,
  88.     sfItemFileListUser            = 7,
  89.     sfItemPopUpMenuUser            = 8,
  90.     sfItemDividerLinePict        = 9,
  91.     sfItemFileNameTextEdit        = 10,
  92.     sfItemPromptStaticText        = 11,
  93.     sfItemNewFolderUser            = 12,
  94. /* pseudo-item hits for use in DlgHook */
  95.     sfHookFirstCall                = -1,
  96.     sfHookCharOffset            = 0x1000,
  97.     sfHookNullEvent                = 100,
  98.     sfHookRebuildList            = 101,
  99.     sfHookFolderPopUp            = 102,
  100.     sfHookOpenFolder            = 103,
  101. /* the following are only in system 7.0+ */
  102.     sfHookOpenAlias                = 104,
  103.     sfHookGoToDesktop            = 105,
  104.     sfHookGoToAliasTarget        = 106,
  105.     sfHookGoToParent            = 107,
  106.     sfHookGoToNextDrive            = 108,
  107.     sfHookGoToPrevDrive            = 109,
  108.     sfHookChangeSelection        = 110
  109. };
  110.  
  111. enum {
  112.     sfHookSetActiveOffset        = 200,
  113.     sfHookLastCall                = -2
  114. };
  115.  
  116. /* the refcon field of the dialog record during a
  117.  modalfilter or dialoghook contains one of the following */
  118. enum {
  119.     sfMainDialogRefCon            = 'stdf',
  120.     sfNewFolderDialogRefCon        = 'nfdr',
  121.     sfReplaceDialogRefCon        = 'rplc',
  122.     sfStatWarnDialogRefCon        = 'stat',
  123.     sfLockWarnDialogRefCon        = 'lock',
  124.     sfErrorDialogRefCon            = 'err '
  125. };
  126.  
  127. struct SFReply {
  128.     Boolean                            good;
  129.     Boolean                            copy;
  130.     OSType                            fType;
  131.     short                            vRefNum;
  132.     short                            version;
  133.     Str63                            fName;
  134. };
  135. typedef struct SFReply SFReply;
  136.  
  137. struct StandardFileReply {
  138.     Boolean                            sfGood;
  139.     Boolean                            sfReplacing;
  140.     OSType                            sfType;
  141.     FSSpec                            sfFile;
  142.     ScriptCode                        sfScript;
  143.     short                            sfFlags;
  144.     Boolean                            sfIsFolder;
  145.     Boolean                            sfIsVolume;
  146.     long                            sfReserved1;
  147.     short                            sfReserved2;
  148. };
  149. typedef struct StandardFileReply StandardFileReply;
  150.  
  151. /* for CustomXXXFile, ActivationOrderListPtr parameter is a pointer to an array of item numbers */
  152. typedef const short *ActivationOrderListPtr;
  153.  
  154. /* the following also include an extra parameter of "your data pointer" */
  155. typedef pascal short (*DlgHookProcPtr)(short item, DialogPtr theDialog);
  156. typedef pascal Boolean (*FileFilterProcPtr)(CInfoPBPtr pb);
  157. typedef pascal short (*DlgHookYDProcPtr)(short item, DialogPtr theDialog, void *yourDataPtr);
  158. typedef pascal Boolean (*ModalFilterYDProcPtr)(DialogPtr theDialog, EventRecord *theEvent, short *itemHit, void *yourDataPtr);
  159. typedef pascal Boolean (*FileFilterYDProcPtr)(CInfoPBPtr pb, void *yourDataPtr);
  160. typedef pascal void (*ActivateYDProcPtr)(DialogPtr theDialog, short itemNo, Boolean activating, void *yourDataPtr);
  161.  
  162. #if GENERATINGCFM
  163. typedef UniversalProcPtr DlgHookUPP;
  164. typedef UniversalProcPtr FileFilterUPP;
  165. typedef UniversalProcPtr DlgHookYDUPP;
  166. typedef UniversalProcPtr ModalFilterYDUPP;
  167. typedef UniversalProcPtr FileFilterYDUPP;
  168. typedef UniversalProcPtr ActivateYDUPP;
  169. #else
  170. typedef DlgHookProcPtr DlgHookUPP;
  171. typedef FileFilterProcPtr FileFilterUPP;
  172. typedef DlgHookYDProcPtr DlgHookYDUPP;
  173. typedef ModalFilterYDProcPtr ModalFilterYDUPP;
  174. typedef FileFilterYDProcPtr FileFilterYDUPP;
  175. typedef ActivateYDProcPtr ActivateYDUPP;
  176. #endif
  177.  
  178. enum {
  179.     uppDlgHookProcInfo = kPascalStackBased
  180.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  181.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  182.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DialogPtr))),
  183.     uppFileFilterProcInfo = kPascalStackBased
  184.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  185.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(CInfoPBPtr))),
  186.     uppDlgHookYDProcInfo = kPascalStackBased
  187.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  188.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  189.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DialogPtr)))
  190.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*))),
  191.     uppModalFilterYDProcInfo = kPascalStackBased
  192.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  193.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  194.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(EventRecord*)))
  195.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short*)))
  196.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void*))),
  197.     uppFileFilterYDProcInfo = kPascalStackBased
  198.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  199.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(CInfoPBPtr)))
  200.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void*))),
  201.     uppActivateYDProcInfo = kPascalStackBased
  202.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(DialogPtr)))
  203.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  204.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Boolean)))
  205.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void*)))
  206. };
  207.  
  208. #if GENERATINGCFM
  209. #define NewDlgHookProc(userRoutine)        \
  210.         (DlgHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDlgHookProcInfo, GetCurrentArchitecture())
  211. #define NewFileFilterProc(userRoutine)        \
  212.         (FileFilterUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileFilterProcInfo, GetCurrentArchitecture())
  213. #define NewDlgHookYDProc(userRoutine)        \
  214.         (DlgHookYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDlgHookYDProcInfo, GetCurrentArchitecture())
  215. #define NewModalFilterYDProc(userRoutine)        \
  216.         (ModalFilterYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppModalFilterYDProcInfo, GetCurrentArchitecture())
  217. #define NewFileFilterYDProc(userRoutine)        \
  218.         (FileFilterYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppFileFilterYDProcInfo, GetCurrentArchitecture())
  219. #define NewActivateYDProc(userRoutine)        \
  220.         (ActivateYDUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppActivateYDProcInfo, GetCurrentArchitecture())
  221. #else
  222. #define NewDlgHookProc(userRoutine)        \
  223.         ((DlgHookUPP) (userRoutine))
  224. #define NewFileFilterProc(userRoutine)        \
  225.         ((FileFilterUPP) (userRoutine))
  226. #define NewDlgHookYDProc(userRoutine)        \
  227.         ((DlgHookYDUPP) (userRoutine))
  228. #define NewModalFilterYDProc(userRoutine)        \
  229.         ((ModalFilterYDUPP) (userRoutine))
  230. #define NewFileFilterYDProc(userRoutine)        \
  231.         ((FileFilterYDUPP) (userRoutine))
  232. #define NewActivateYDProc(userRoutine)        \
  233.         ((ActivateYDUPP) (userRoutine))
  234. #endif
  235.  
  236. #if GENERATINGCFM
  237. #define CallDlgHookProc(userRoutine, item, theDialog)        \
  238.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDlgHookProcInfo, (item), (theDialog))
  239. #define CallFileFilterProc(userRoutine, pb)        \
  240.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppFileFilterProcInfo, (pb))
  241. #define CallDlgHookYDProc(userRoutine, item, theDialog, yourDataPtr)        \
  242.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDlgHookYDProcInfo, (item), (theDialog), (yourDataPtr))
  243. #define CallModalFilterYDProc(userRoutine, theDialog, theEvent, itemHit, yourDataPtr)        \
  244.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppModalFilterYDProcInfo, (theDialog), (theEvent), (itemHit), (yourDataPtr))
  245. #define CallFileFilterYDProc(userRoutine, pb, yourDataPtr)        \
  246.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppFileFilterYDProcInfo, (pb), (yourDataPtr))
  247. #define CallActivateYDProc(userRoutine, theDialog, itemNo, activating, yourDataPtr)        \
  248.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppActivateYDProcInfo, (theDialog), (itemNo), (activating), (yourDataPtr))
  249. #else
  250. #define CallDlgHookProc(userRoutine, item, theDialog)        \
  251.         (*(userRoutine))((item), (theDialog))
  252. #define CallFileFilterProc(userRoutine, pb)        \
  253.         (*(userRoutine))((pb))
  254. #define CallDlgHookYDProc(userRoutine, item, theDialog, yourDataPtr)        \
  255.         (*(userRoutine))((item), (theDialog), (yourDataPtr))
  256. #define CallModalFilterYDProc(userRoutine, theDialog, theEvent, itemHit, yourDataPtr)        \
  257.         (*(userRoutine))((theDialog), (theEvent), (itemHit), (yourDataPtr))
  258. #define CallFileFilterYDProc(userRoutine, pb, yourDataPtr)        \
  259.         (*(userRoutine))((pb), (yourDataPtr))
  260. #define CallActivateYDProc(userRoutine, theDialog, itemNo, activating, yourDataPtr)        \
  261.         (*(userRoutine))((theDialog), (itemNo), (activating), (yourDataPtr))
  262. #endif
  263.  
  264. typedef OSType SFTypeList[4];
  265.  
  266. /*
  267.     The GetFile "typeList" parameter type has changed from "SFTypeList" to "ConstSFTypeListPtr".
  268.     For C, this will add "const" and make it an in-only parameter.
  269.     For Pascal, this will require client code to use the @ operator, but make it easier to specify long lists.
  270.  
  271.     ConstSFTypeListPtr is a pointer to an array of OSTypes.
  272. */
  273. typedef const OSType *ConstSFTypeListPtr;
  274.  
  275. extern pascal void SFPutFile(Point where, ConstStr255Param prompt, ConstStr255Param origName, DlgHookUPP dlgHook, SFReply *reply)
  276.  THREEWORDINLINE(0x3F3C, 0x0001, 0xA9EA);
  277. extern pascal void SFGetFile(Point where, ConstStr255Param prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply)
  278.  THREEWORDINLINE(0x3F3C, 0x0002, 0xA9EA);
  279. extern pascal void SFPPutFile(Point where, ConstStr255Param prompt, ConstStr255Param origName, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc)
  280.  THREEWORDINLINE(0x3F3C, 0x0003, 0xA9EA);
  281. extern pascal void SFPGetFile(Point where, ConstStr255Param prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc)
  282.  THREEWORDINLINE(0x3F3C, 0x0004, 0xA9EA);
  283. extern pascal void StandardPutFile(ConstStr255Param prompt, ConstStr255Param defaultName, StandardFileReply *reply)
  284.  THREEWORDINLINE(0x3F3C, 0x0005, 0xA9EA);
  285. extern pascal void StandardGetFile(FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, StandardFileReply *reply)
  286.  THREEWORDINLINE(0x3F3C, 0x0006, 0xA9EA);
  287. extern pascal void CustomPutFile(ConstStr255Param prompt, ConstStr255Param defaultName, StandardFileReply *reply, short dlgID, Point where, DlgHookYDUPP dlgHook, ModalFilterYDUPP filterProc, ActivationOrderListPtr activeList, ActivateYDUPP activate, void *yourDataPtr)
  288.  THREEWORDINLINE(0x3F3C, 0x0007, 0xA9EA);
  289. extern pascal void CustomGetFile(FileFilterYDUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, StandardFileReply *reply, short dlgID, Point where, DlgHookYDUPP dlgHook, ModalFilterYDUPP filterProc, ActivationOrderListPtr activeList, ActivateYDUPP activate, void *yourDataPtr)
  290.  THREEWORDINLINE(0x3F3C, 0x0008, 0xA9EA);
  291. extern pascal OSErr StandardOpenDialog(StandardFileReply *reply);
  292. #if CGLUESUPPORTED
  293. extern void sfpputfile(Point *where, const char *prompt, const char *origName, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc);
  294. extern void sfgetfile(Point *where, const char *prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply);
  295. extern void sfpgetfile(Point *where, const char *prompt, FileFilterUPP fileFilter, short numTypes, ConstSFTypeListPtr typeList, DlgHookUPP dlgHook, SFReply *reply, short dlgID, ModalFilterUPP filterProc);
  296. extern void sfputfile(Point *where, const char *prompt, const char *origName, DlgHookUPP dlgHook, SFReply *reply);
  297. #endif
  298.  
  299. #if PRAGMA_IMPORT_SUPPORTED
  300. #pragma import off
  301. #endif
  302.  
  303. #if PRAGMA_ALIGN_SUPPORTED
  304. #pragma options align=reset
  305. #endif
  306.  
  307. #ifdef __cplusplus
  308. }
  309. #endif
  310.  
  311. #endif /* __STANDARDFILE__ */
  312.