/* OSGLUMAC.c Copyright (C) 2009 Philip Cummins, Richard F. Bannister, Paul C. Pratt You can redistribute this file and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. You should have received a copy of the license along with this file; see the file COPYING. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.*/ /* Operating System GLUe for MACintosh All operating system dependent code for the Macintosh (pre OS X) platform should go here. This is also the "reference" implementation. General comments about what the platform dependent code does should go here, and not be repeated for each platform. This code is descended from Richard F. Bannister's Macintosh port of vMac, by Philip Cummins. The main entry point 'main' is at the end of this file.*/ #include "CNFGRAPI.h"#include "SYSDEPNS.h"#include "ENDIANAC.h" #include "MYOSGLUE.h" #include "STRCONST.h" #ifndef NavigationAvail#define NavigationAvail 1#endif #ifndef AppearanceAvail#define AppearanceAvail 1#endif #ifndef NewNamesAvail#define NewNamesAvail 1#endif #ifndef CALL_NOT_IN_CARBON#define CALL_NOT_IN_CARBON 1#endif /* !defined(CALL_NOT_IN_CARBON) */ /* --- information about the environment --- */ /* code to determine characteristics of the current run time environment.*/ #define TestBit(i, p) (((uimr)(i) & ((uimr)1 << (p))) != 0) #ifndef HaveCPUfamM68K#define HaveCPUfamM68K 0#endif #if HaveCPUfamM68K /* MACENVRN.i */ #ifndef Support64kROM#define Support64kROM 1#endif #define Have64kROM() (LMGetROM85() < 0) /* -- basic environment checking -- */ #ifndef DebugTrapAvailableChecks#define DebugTrapAvailableChecks 0#endif LOCALFUNC blnr LowToolTrapAvailable(short trap_num){#if DebugTrapAvailableChecks if ((trap_num & 0x0800) == 0) { DebugStr("\pOSTrap in LowToolTrapAvailable"); return falseblnr; } if ((trap_num & 0x07ff) >= 0x200) { DebugStr("\pHiToolTrap in LowToolTrapAvailable"); return falseblnr; }#endif return GetToolTrapAddress(trap_num) != GetToolTrapAddress(_Unimplemented);} LOCALFUNC blnr HiToolTrapAvailable(short trap_num){#if DebugTrapAvailableChecks if ((trap_num & 0x0800) == 0) { DebugStr("\pOSTrap in HiToolTrapAvailable"); return falseblnr; } if (((trap_num & 0x07ff) < 0x200) || ((trap_num & 0x07ff) >= 0x400)) { DebugStr("\pLowToolTrap in HiToolTrapAvailable"); return falseblnr; }#endif if (GetToolTrapAddress(_InitGraf) == GetToolTrapAddress(0xAA6E)) { return falseblnr; } else { return GetToolTrapAddress(trap_num) != GetToolTrapAddress(_Unimplemented); }} LOCALFUNC blnr OSTrapAvailable(short trap_num){#if DebugTrapAvailableChecks if ((trap_num & 0x0800) != 0) { DebugStr("\pToolTrap in ToolTrapAvailable"); return falseblnr; }#endif return GetOSTrapAddress(trap_num) != GetToolTrapAddress(_Unimplemented);} LOCALVAR blnr MyEnvrAttrWaitNextEventAvail;LOCALVAR blnr HaveEnvrAttrWaitNextEventAvail = falseblnr; LOCALFUNC blnr HaveWaitNextEventAvail(void){ if (! HaveEnvrAttrWaitNextEventAvail) { MyEnvrAttrWaitNextEventAvail = LowToolTrapAvailable(_WaitNextEvent); HaveEnvrAttrWaitNextEventAvail = trueblnr; } return MyEnvrAttrWaitNextEventAvail;} LOCALVAR blnr MyEnvrAttrGestaltAvail;LOCALVAR blnr HaveEnvrAttrGestaltAvail = falseblnr; LOCALFUNC blnr HaveGestaltAvail(void){ if (! HaveEnvrAttrGestaltAvail) { MyEnvrAttrGestaltAvail = (! Have64kROM()) && OSTrapAvailable(_Gestalt); /* contrary to all the documentation, TrapAvailable check by itself doesn't work on 64k ROM, because a tool box trap has the same trap number, and both GetOSTrapAddress and GetToolTrapAddress are the same as GetTrapAddress on a 64k ROM. */ HaveEnvrAttrGestaltAvail = trueblnr; } return MyEnvrAttrGestaltAvail;} #else /* for PowerPC, assume always have these routines */ #define HaveWaitNextEventAvail() trueblnr#define HaveGestaltAvail() trueblnr #endif LOCALVAR blnr MyEnvrAttrAliasMgrAvail;LOCALVAR blnr HaveEnvrAttrAliasMgrAvail = falseblnr; LOCALFUNC blnr HaveAliasMgrAvail(void){ if (! HaveEnvrAttrAliasMgrAvail) { long reply; MyEnvrAttrAliasMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltAliasMgrAttr, &reply)) && TestBit(reply, gestaltAliasMgrPresent); HaveEnvrAttrAliasMgrAvail = trueblnr; } return MyEnvrAttrAliasMgrAvail;} LOCALVAR blnr MyEnvrAttrAppleEvtMgrAvail;LOCALVAR blnr HaveEnvrAttrAppleEvtMgrAvail = falseblnr; LOCALFUNC blnr HaveAppleEvtMgrAvail(void){ if (! HaveEnvrAttrAppleEvtMgrAvail) { long reply; MyEnvrAttrAppleEvtMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltAppleEventsAttr, &reply)) && TestBit(reply, gestaltAppleEventsPresent); HaveEnvrAttrAppleEvtMgrAvail = trueblnr; } return MyEnvrAttrAppleEvtMgrAvail;} #if EnableDragDrop LOCALVAR blnr MyEnvrAttrDragMgrAvail;LOCALVAR blnr HaveEnvrAttrDragMgrAvail = falseblnr; LOCALFUNC blnr HaveDragMgrAvail(void){ if (! HaveEnvrAttrDragMgrAvail) { long reply; MyEnvrAttrDragMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltDragMgrAttr, &reply)) && TestBit(reply, gestaltDragMgrPresent); HaveEnvrAttrDragMgrAvail = trueblnr; } return MyEnvrAttrDragMgrAvail;} #endif #ifndef Windows85APIAvail#define Windows85APIAvail 1#endif #if Windows85APIAvailLOCALVAR blnr MyEnvrAttrHideShowMenuAvail;LOCALVAR blnr HaveEnvrAttrHideShowMenuAvail = falseblnr; LOCALFUNC blnr HaveHideShowMenuAvail(void){ if (! HaveEnvrAttrHideShowMenuAvail) { long reply; MyEnvrAttrHideShowMenuAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltMenuMgrAttr, &reply)); HaveEnvrAttrHideShowMenuAvail = trueblnr; } return MyEnvrAttrHideShowMenuAvail;}#endif #if AppearanceAvailLOCALVAR blnr MyEnvrAttrAppearanceAvail;LOCALVAR blnr HaveEnvrAttrAppearanceAvail = falseblnr; LOCALFUNC blnr HaveAppearanceAvail(void){ if (! HaveEnvrAttrAppearanceAvail) { long reply; MyEnvrAttrAppearanceAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltAppearanceAttr, &reply)); HaveEnvrAttrAppearanceAvail = trueblnr; } return MyEnvrAttrAppearanceAvail;}#endif #if HaveCPUfamM68KLOCALVAR blnr MyEnvrAttrSndMngrAvail;LOCALVAR blnr HaveEnvrAttrSndMngrAvail = falseblnr; LOCALFUNC blnr HaveSndMngrAvail(void){ if (! HaveEnvrAttrSndMngrAvail) { MyEnvrAttrSndMngrAvail = LowToolTrapAvailable(_SndNewChannel); HaveEnvrAttrSndMngrAvail = trueblnr; } return MyEnvrAttrSndMngrAvail;}#endif #if NavigationAvailLOCALVAR blnr MyEnvrAttrNavServicesAvail;LOCALVAR blnr HaveEnvrAttrNavServicesAvail = falseblnr; LOCALFUNC blnr HaveNavServicesAvail(void){ if (! HaveEnvrAttrNavServicesAvail) { MyEnvrAttrNavServicesAvail = NavServicesAvailable(); HaveEnvrAttrNavServicesAvail = trueblnr; } return MyEnvrAttrNavServicesAvail;}#endif #if HaveCPUfamM68KLOCALVAR blnr MyEnvrAttrFSSpecCallsAvail;LOCALVAR blnr HaveEnvrAttrFSSpecCallsAvail = falseblnr; LOCALFUNC blnr HaveFSSpecCallsAvail(void){ if (! HaveEnvrAttrFSSpecCallsAvail) { long reply; MyEnvrAttrFSSpecCallsAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltFSAttr, &reply)) && TestBit(reply, gestaltHasFSSpecCalls); HaveEnvrAttrFSSpecCallsAvail = trueblnr; } return MyEnvrAttrFSSpecCallsAvail;}#endif #if Windows85APIAvailLOCALVAR blnr MyEnvrAttrNewWndMgrAvail;LOCALVAR blnr HaveEnvrAttrNewWndMgrAvail = falseblnr; LOCALFUNC blnr HaveNewWndMgrAvail(void){ if (! HaveEnvrAttrNewWndMgrAvail) { long reply; MyEnvrAttrNewWndMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltWindowMgrAttr, &reply)) && TestBit(reply, gestaltWindowMgrPresentBit); HaveEnvrAttrNewWndMgrAvail = trueblnr; } return MyEnvrAttrNewWndMgrAvail;}#endif /* --- initial initialization --- */ #if defined(__SC__) || ((defined(powerc) || defined(__powerc)) \ && ! defined(__MWERKS__)) /* GLOBALVAR */ QDGlobals qd;#endif LOCALFUNC blnr InitMacManagers(void){ MaxApplZone(); { int i; for (i = 7; --i >= 0; ) { MoreMasters(); } } InitGraf(&qd.thePort); InitFonts(); InitWindows(); InitMenus(); TEInit(); InitDialogs(NULL); InitCursor(); return trueblnr;} /* --- mac style errors --- */ #define CheckSavetMacErr(result) (mnvm_noErr == (err = (result))) /* where 'err' is a variable of type tMacErr in the function this is used in */ #define To_tMacErr(result) ((tMacErr)(ui4b)(result)) #define CheckSaveMacErr(result) (CheckSavetMacErr(To_tMacErr(result))) /* define NotAfileRef to some value that is different from any valid open file reference.*/#define NotAfileRef (-1) struct MyDir_R { long DirId; short VRefNum;};typedef struct MyDir_R MyDir_R; LOCALFUNC tMacErr OpenNamedFileInFolder(MyDir_R *d, ps3p fileName, short *refnum){ tMacErr err; #if HaveCPUfamM68K if (! HaveFSSpecCallsAvail()) { err = To_tMacErr(FSOpen(fileName, d->VRefNum, refnum)); } else#endif { Boolean isFolder; Boolean isAlias; FSSpec spec; if (CheckSaveMacErr( FSMakeFSSpec(d->VRefNum, d->DirId, fileName, &spec))) if (CheckSaveMacErr( ResolveAliasFile(&spec, trueblnr, &isFolder, &isAlias))) if (CheckSaveMacErr( FSpOpenDF(&spec, fsRdPerm, refnum))) { } } return err;} /* --- sending debugging info to file --- */ #if dbglog_HAVE #define Support64kROM 0#define tMyErr tMacErr typedef unsigned char * MyPtr; LOCALFUNC tMyErr MyHGetDir_v2(MyDir_R *d){ tMyErr err; WDPBRec r; r.ioCompletion = NULL; r.ioNamePtr = NULL; #if Support64kROM if (Have64kROM()) { err = PBGetVolSync((ParamBlockRec *)&r); d->VRefNum = r.ioVRefNum; d->DirId = 0; } else#endif { err = PBHGetVolSync(&r); d->VRefNum = r.ioWDVRefNum; d->DirId = r.ioWDDirID; } return err;} LOCALFUNC tMyErr MyWriteBytes_v2(short refNum, MyPtr p, uimr L){ ParamBlockRec r; r.ioParam.ioCompletion = NULL; r.ioParam.ioRefNum = refNum; r.ioParam.ioBuffer = (Ptr)p; r.ioParam.ioReqCount = L; r.ioParam.ioPosMode = (short) fsFromMark; r.ioParam.ioPosOffset = 0; return PBWriteSync(&r);} LOCALFUNC tMyErr MyCloseFile_v2(short refNum){ ParamBlockRec r; r.ioParam.ioCompletion = NULL; r.ioParam.ioRefNum = refNum; return PBCloseSync(&r);#if 0 return (tMyErr)FSClose(refNum);#endif} #define NotAfileRef (-1) /* Probably should use PBHOpenDF instead of PBHOpen when it is available. (System 7 according to Technical Note FL515)*/ LOCALFUNC tMyErr MyFileOpen_v2(MyDir_R *d, StringPtr s, char Permssn, short *refnum){Lines 1–500 of 5775. Load more
/* OSGLUMAC.c Copyright (C) 2009 Philip Cummins, Richard F. Bannister, Paul C. Pratt You can redistribute this file and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. You should have received a copy of the license along with this file; see the file COPYING. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ /* Operating System GLUe for MACintosh All operating system dependent code for the Macintosh (pre OS X) platform should go here. This is also the "reference" implementation. General comments about what the platform dependent code does should go here, and not be repeated for each platform. This code is descended from Richard F. Bannister's Macintosh port of vMac, by Philip Cummins. The main entry point 'main' is at the end of this file. */ #include "CNFGRAPI.h" #include "SYSDEPNS.h" #include "ENDIANAC.h" #include "MYOSGLUE.h" #include "STRCONST.h" #ifndef NavigationAvail #define NavigationAvail 1 #endif #ifndef AppearanceAvail #define AppearanceAvail 1 #endif #ifndef NewNamesAvail #define NewNamesAvail 1 #endif #ifndef CALL_NOT_IN_CARBON #define CALL_NOT_IN_CARBON 1 #endif /* !defined(CALL_NOT_IN_CARBON) */ /* --- information about the environment --- */ /* code to determine characteristics of the current run time environment. */ #define TestBit(i, p) (((uimr)(i) & ((uimr)1 << (p))) != 0) #ifndef HaveCPUfamM68K #define HaveCPUfamM68K 0 #endif #if HaveCPUfamM68K /* MACENVRN.i */ #ifndef Support64kROM #define Support64kROM 1 #endif #define Have64kROM() (LMGetROM85() < 0) /* -- basic environment checking -- */ #ifndef DebugTrapAvailableChecks #define DebugTrapAvailableChecks 0 #endif LOCALFUNC blnr LowToolTrapAvailable(short trap_num) { #if DebugTrapAvailableChecks if ((trap_num & 0x0800) == 0) { DebugStr("\pOSTrap in LowToolTrapAvailable"); return falseblnr; } if ((trap_num & 0x07ff) >= 0x200) { DebugStr("\pHiToolTrap in LowToolTrapAvailable"); return falseblnr; } #endif return GetToolTrapAddress(trap_num) != GetToolTrapAddress(_Unimplemented); } LOCALFUNC blnr HiToolTrapAvailable(short trap_num) { #if DebugTrapAvailableChecks if ((trap_num & 0x0800) == 0) { DebugStr("\pOSTrap in HiToolTrapAvailable"); return falseblnr; } if (((trap_num & 0x07ff) < 0x200) || ((trap_num & 0x07ff) >= 0x400)) { DebugStr("\pLowToolTrap in HiToolTrapAvailable"); return falseblnr; } #endif if (GetToolTrapAddress(_InitGraf) == GetToolTrapAddress(0xAA6E)) { return falseblnr; } else { return GetToolTrapAddress(trap_num) != GetToolTrapAddress(_Unimplemented); } } LOCALFUNC blnr OSTrapAvailable(short trap_num) { #if DebugTrapAvailableChecks if ((trap_num & 0x0800) != 0) { DebugStr("\pToolTrap in ToolTrapAvailable"); return falseblnr; } #endif return GetOSTrapAddress(trap_num) != GetToolTrapAddress(_Unimplemented); } LOCALVAR blnr MyEnvrAttrWaitNextEventAvail; LOCALVAR blnr HaveEnvrAttrWaitNextEventAvail = falseblnr; LOCALFUNC blnr HaveWaitNextEventAvail(void) { if (! HaveEnvrAttrWaitNextEventAvail) { MyEnvrAttrWaitNextEventAvail = LowToolTrapAvailable(_WaitNextEvent); HaveEnvrAttrWaitNextEventAvail = trueblnr; } return MyEnvrAttrWaitNextEventAvail; } LOCALVAR blnr MyEnvrAttrGestaltAvail; LOCALVAR blnr HaveEnvrAttrGestaltAvail = falseblnr; LOCALFUNC blnr HaveGestaltAvail(void) { if (! HaveEnvrAttrGestaltAvail) { MyEnvrAttrGestaltAvail = (! Have64kROM()) && OSTrapAvailable(_Gestalt); /* contrary to all the documentation, TrapAvailable check by itself doesn't work on 64k ROM, because a tool box trap has the same trap number, and both GetOSTrapAddress and GetToolTrapAddress are the same as GetTrapAddress on a 64k ROM. */ HaveEnvrAttrGestaltAvail = trueblnr; } return MyEnvrAttrGestaltAvail; } #else /* for PowerPC, assume always have these routines */ #define HaveWaitNextEventAvail() trueblnr #define HaveGestaltAvail() trueblnr #endif LOCALVAR blnr MyEnvrAttrAliasMgrAvail; LOCALVAR blnr HaveEnvrAttrAliasMgrAvail = falseblnr; LOCALFUNC blnr HaveAliasMgrAvail(void) { if (! HaveEnvrAttrAliasMgrAvail) { long reply; MyEnvrAttrAliasMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltAliasMgrAttr, &reply)) && TestBit(reply, gestaltAliasMgrPresent); HaveEnvrAttrAliasMgrAvail = trueblnr; } return MyEnvrAttrAliasMgrAvail; } LOCALVAR blnr MyEnvrAttrAppleEvtMgrAvail; LOCALVAR blnr HaveEnvrAttrAppleEvtMgrAvail = falseblnr; LOCALFUNC blnr HaveAppleEvtMgrAvail(void) { if (! HaveEnvrAttrAppleEvtMgrAvail) { long reply; MyEnvrAttrAppleEvtMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltAppleEventsAttr, &reply)) && TestBit(reply, gestaltAppleEventsPresent); HaveEnvrAttrAppleEvtMgrAvail = trueblnr; } return MyEnvrAttrAppleEvtMgrAvail; } #if EnableDragDrop LOCALVAR blnr MyEnvrAttrDragMgrAvail; LOCALVAR blnr HaveEnvrAttrDragMgrAvail = falseblnr; LOCALFUNC blnr HaveDragMgrAvail(void) { if (! HaveEnvrAttrDragMgrAvail) { long reply; MyEnvrAttrDragMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltDragMgrAttr, &reply)) && TestBit(reply, gestaltDragMgrPresent); HaveEnvrAttrDragMgrAvail = trueblnr; } return MyEnvrAttrDragMgrAvail; } #endif #ifndef Windows85APIAvail #define Windows85APIAvail 1 #endif #if Windows85APIAvail LOCALVAR blnr MyEnvrAttrHideShowMenuAvail; LOCALVAR blnr HaveEnvrAttrHideShowMenuAvail = falseblnr; LOCALFUNC blnr HaveHideShowMenuAvail(void) { if (! HaveEnvrAttrHideShowMenuAvail) { long reply; MyEnvrAttrHideShowMenuAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltMenuMgrAttr, &reply)); HaveEnvrAttrHideShowMenuAvail = trueblnr; } return MyEnvrAttrHideShowMenuAvail; } #endif #if AppearanceAvail LOCALVAR blnr MyEnvrAttrAppearanceAvail; LOCALVAR blnr HaveEnvrAttrAppearanceAvail = falseblnr; LOCALFUNC blnr HaveAppearanceAvail(void) { if (! HaveEnvrAttrAppearanceAvail) { long reply; MyEnvrAttrAppearanceAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltAppearanceAttr, &reply)); HaveEnvrAttrAppearanceAvail = trueblnr; } return MyEnvrAttrAppearanceAvail; } #endif #if HaveCPUfamM68K LOCALVAR blnr MyEnvrAttrSndMngrAvail; LOCALVAR blnr HaveEnvrAttrSndMngrAvail = falseblnr; LOCALFUNC blnr HaveSndMngrAvail(void) { if (! HaveEnvrAttrSndMngrAvail) { MyEnvrAttrSndMngrAvail = LowToolTrapAvailable(_SndNewChannel); HaveEnvrAttrSndMngrAvail = trueblnr; } return MyEnvrAttrSndMngrAvail; } #endif #if NavigationAvail LOCALVAR blnr MyEnvrAttrNavServicesAvail; LOCALVAR blnr HaveEnvrAttrNavServicesAvail = falseblnr; LOCALFUNC blnr HaveNavServicesAvail(void) { if (! HaveEnvrAttrNavServicesAvail) { MyEnvrAttrNavServicesAvail = NavServicesAvailable(); HaveEnvrAttrNavServicesAvail = trueblnr; } return MyEnvrAttrNavServicesAvail; } #endif #if HaveCPUfamM68K LOCALVAR blnr MyEnvrAttrFSSpecCallsAvail; LOCALVAR blnr HaveEnvrAttrFSSpecCallsAvail = falseblnr; LOCALFUNC blnr HaveFSSpecCallsAvail(void) { if (! HaveEnvrAttrFSSpecCallsAvail) { long reply; MyEnvrAttrFSSpecCallsAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltFSAttr, &reply)) && TestBit(reply, gestaltHasFSSpecCalls); HaveEnvrAttrFSSpecCallsAvail = trueblnr; } return MyEnvrAttrFSSpecCallsAvail; } #endif #if Windows85APIAvail LOCALVAR blnr MyEnvrAttrNewWndMgrAvail; LOCALVAR blnr HaveEnvrAttrNewWndMgrAvail = falseblnr; LOCALFUNC blnr HaveNewWndMgrAvail(void) { if (! HaveEnvrAttrNewWndMgrAvail) { long reply; MyEnvrAttrNewWndMgrAvail = HaveGestaltAvail() && (noErr == Gestalt(gestaltWindowMgrAttr, &reply)) && TestBit(reply, gestaltWindowMgrPresentBit); HaveEnvrAttrNewWndMgrAvail = trueblnr; } return MyEnvrAttrNewWndMgrAvail; } #endif /* --- initial initialization --- */ #if defined(__SC__) || ((defined(powerc) || defined(__powerc)) \ && ! defined(__MWERKS__)) /* GLOBALVAR */ QDGlobals qd; #endif LOCALFUNC blnr InitMacManagers(void) { MaxApplZone(); { int i; for (i = 7; --i >= 0; ) { MoreMasters(); } } InitGraf(&qd.thePort); InitFonts(); InitWindows(); InitMenus(); TEInit(); InitDialogs(NULL); InitCursor(); return trueblnr; } /* --- mac style errors --- */ #define CheckSavetMacErr(result) (mnvm_noErr == (err = (result))) /* where 'err' is a variable of type tMacErr in the function this is used in */ #define To_tMacErr(result) ((tMacErr)(ui4b)(result)) #define CheckSaveMacErr(result) (CheckSavetMacErr(To_tMacErr(result))) /* define NotAfileRef to some value that is different from any valid open file reference. */ #define NotAfileRef (-1) struct MyDir_R { long DirId; short VRefNum; }; typedef struct MyDir_R MyDir_R; LOCALFUNC tMacErr OpenNamedFileInFolder(MyDir_R *d, ps3p fileName, short *refnum) { tMacErr err; #if HaveCPUfamM68K if (! HaveFSSpecCallsAvail()) { err = To_tMacErr(FSOpen(fileName, d->VRefNum, refnum)); } else #endif { Boolean isFolder; Boolean isAlias; FSSpec spec; if (CheckSaveMacErr( FSMakeFSSpec(d->VRefNum, d->DirId, fileName, &spec))) if (CheckSaveMacErr( ResolveAliasFile(&spec, trueblnr, &isFolder, &isAlias))) if (CheckSaveMacErr( FSpOpenDF(&spec, fsRdPerm, refnum))) { } } return err; } /* --- sending debugging info to file --- */ #if dbglog_HAVE #define Support64kROM 0 #define tMyErr tMacErr typedef unsigned char * MyPtr; LOCALFUNC tMyErr MyHGetDir_v2(MyDir_R *d) { tMyErr err; WDPBRec r; r.ioCompletion = NULL; r.ioNamePtr = NULL; #if Support64kROM if (Have64kROM()) { err = PBGetVolSync((ParamBlockRec *)&r); d->VRefNum = r.ioVRefNum; d->DirId = 0; } else #endif { err = PBHGetVolSync(&r); d->VRefNum = r.ioWDVRefNum; d->DirId = r.ioWDDirID; } return err; } LOCALFUNC tMyErr MyWriteBytes_v2(short refNum, MyPtr p, uimr L) { ParamBlockRec r; r.ioParam.ioCompletion = NULL; r.ioParam.ioRefNum = refNum; r.ioParam.ioBuffer = (Ptr)p; r.ioParam.ioReqCount = L; r.ioParam.ioPosMode = (short) fsFromMark; r.ioParam.ioPosOffset = 0; return PBWriteSync(&r); } LOCALFUNC tMyErr MyCloseFile_v2(short refNum) { ParamBlockRec r; r.ioParam.ioCompletion = NULL; r.ioParam.ioRefNum = refNum; return PBCloseSync(&r); #if 0 return (tMyErr)FSClose(refNum); #endif } #define NotAfileRef (-1) /* Probably should use PBHOpenDF instead of PBHOpen when it is available. (System 7 according to Technical Note FL515) */ LOCALFUNC tMyErr MyFileOpen_v2(MyDir_R *d, StringPtr s, char Permssn, short *refnum) {