static void InitWinFile (void) { StringHandle sh; long len; short ref = 0; if (winFileInit) { return; } /* We trust the glue. If there's an error, store in game dir. */ if (FindFolder (kOnSystemDisk, kPreferencesFolderType, kCreateFolder , &winFileVol, &winFileDir)) { winFileVol = 0; winFileDir = 0; } sh = GetString (128); if (sh && *sh) { BlockMove (*sh, winFileName, **sh + 1); ReleaseResource ((Handle) sh); } if (HOpen (winFileVol, winFileDir, winFileName, fsRdPerm, &ref)) { return; } len = sizeof (savePos); if (!FSRead (ref, &len, savePos)) { winFileInit = 1; } FSClose (ref); }
OSErr HOpenPath( short vRefNum, long dirID, ConstStr255Param fileName, char permission, short *refNum, short resource_number) { OSErr error= HOpen(vRefNum, dirID, fileName, permission, refNum); short path_count= countstr(resource_number); Str255 new_filename; short i; for (i= 0; i<path_count && error!=noErr; ++i) { getpstr((char *)new_filename, resource_number, i); pstrcat(new_filename, (unsigned char *) fileName); error= HOpen(0, 0, new_filename, permission, refNum); if (error==noErr) pstrcpy((char *) fileName, (const char *)new_filename); } return error; }
static void FlushWinFile (void) { short ref; long len; if (!winFileInit) { if (!winFileName [0]) { return; } HCreate (winFileVol, winFileDir, winFileName, MAC_CREATOR, PREF_TYPE); HCreateResFile (winFileVol, winFileDir, winFileName); } if (HOpen (winFileVol, winFileDir, winFileName, fsWrPerm, &ref)) { return; } winFileInit = 1; len = sizeof (savePos); (void) FSWrite (ref, &len, savePos); /* Don't care about error */ FSClose (ref); }