int __cdecl _getdrive ( void ) { OSErr osErr; WDPBRec wdPB; char st[256]; wdPB.ioNamePtr = &st[0]; osErr = PBHGetVolSync(&wdPB); if (osErr) { return 0; } return wdPB.ioWDVRefNum; }
int __cdecl _chdir ( const char *path ) { WDPBRec wdPB; char st[256]; OSErr osErr; ParamBlockRec parm; if (!*path) { errno = ENOENT; return -1; } strcpy(st, path); wdPB.ioNamePtr = _c2pstr(st); wdPB.ioVRefNum = 0; wdPB.ioWDDirID = 0; osErr = PBHSetVolSync(&wdPB); if (osErr) { /* error occured -- map error code and return */ _dosmaperr(osErr); return -1; } osErr = PBHGetVolSync(&wdPB); if (osErr) { /* error occured -- map error code and return */ _dosmaperr(osErr); return -1; } CurDirStore = wdPB.ioWDDirID; SFSaveDisk = wdPB.ioWDVRefNum; memset(&parm, 0, sizeof(ParamBlockRec)); osErr = PBSetVolSync(&parm); return 0; }
void file_dirscan( const char *dir, scanback func, void *closure ) { PATHNAME f; char filename[ MAXJPATH ]; unsigned char fullPath[ 512 ]; FSSpec spec; WDPBRec vol; Str63 volName; CInfoPBRec lastInfo; int index = 1; /* First enter directory itself */ memset( (char *)&f, '\0', sizeof( f ) ); f.f_dir.ptr = dir; f.f_dir.len = strlen(dir); if( DEBUG_BINDSCAN ) printf( "scan directory %s\n", dir ); /* Special case ":" - enter it */ if( f.f_dir.len == 1 && f.f_dir.ptr[0] == ':' ) (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 ); /* Now enter contents of directory */ vol.ioNamePtr = volName; if( PBHGetVolSync( &vol ) ) return; CopyC2PStr( dir, fullPath ); if( FSMakeFSSpec( vol.ioWDVRefNum, vol.ioWDDirID, fullPath, &spec ) ) return; lastInfo.dirInfo.ioVRefNum = spec.vRefNum; lastInfo.dirInfo.ioDrDirID = spec.parID; lastInfo.dirInfo.ioNamePtr = spec.name; lastInfo.dirInfo.ioFDirIndex = 0; lastInfo.dirInfo.ioACUser = 0; if( PBGetCatInfoSync(&lastInfo) ) return; if (!(lastInfo.dirInfo.ioFlAttrib & 0x10)) return; // ioDrDirID must be reset each time. spec.parID = lastInfo.dirInfo.ioDrDirID; for( ;; ) { lastInfo.dirInfo.ioVRefNum = spec.vRefNum; lastInfo.dirInfo.ioDrDirID = spec.parID; lastInfo.dirInfo.ioNamePtr = fullPath; lastInfo.dirInfo.ioFDirIndex = index++; if( PBGetCatInfoSync(&lastInfo) ) return; f.f_base.ptr = (char *)fullPath + 1; f.f_base.len = *fullPath; path_build( &f, filename, 0 ); (*func)( closure, filename, 0 /* not stat()'ed */, (time_t)0 ); } }