#define INCL_WIN #define INCL_WINERRORS #define INCL_DOS #define INCL_DOSERRORS #include #include #include #include #include #include #include "fm3dll.h" #pragma alloc_text(MISC9,save_dir,save_dir2,switch_to) APIRET save_dir2 (CHAR *curdir) { CHAR *env = getenv("FM3INI"); if(env && *env) { strncpy(curdir,env,CCHMAXPATH); curdir[CCHMAXPATH - 1] = 0; if(IsValidDir(curdir)) return 0; else { env = strrchr(curdir,'\\'); if(env) { *env = 0; if(IsValidDir(curdir)) return 0; } } } return save_dir(curdir); } APIRET save_dir (CHAR *curdir) { APIRET ret; ULONG curdirlen,curdrive,drivemap; *curdir = 0; ret = DosQCurDisk (&curdrive, &drivemap); curdirlen = CCHMAXPATH - 4; /* NOTE!!!!!!!!! */ ret += DosQCurDir (curdrive, &curdir[3], &curdirlen); *curdir = (CHAR)('@' + (INT)curdrive); curdir[1] = ':'; curdir[2] = '\\'; return ret; } APIRET switch_to (CHAR *s) { APIRET ret; FILESTATUS3 fsa; CHAR path[CCHMAXPATH + 1],*p; strcpy(path,s); while(*path) { ret = DosQueryPathInfo(path,FIL_STANDARD,&fsa, (ULONG)sizeof(FILESTATUS3)); if(ret || !(fsa.attrFile & FILE_DIRECTORY)) { p = strrchr(path,'\\'); if(p) *p = 0; else { strcpy(path,s); break; } } else break; } if(isalpha(*path) && path[1] == ':') { ULONG curdrive,drivemap; if(!DosQCurDisk (&curdrive, &drivemap)) { if((CHAR)((CHAR)curdrive + '@') != (CHAR)toupper(*HomePath) && (CHAR)((CHAR)curdrive + '@') != (CHAR)toupper(*path)) DosChDir("\\"); } ret = DosSelectDisk(toupper(*path) - '@'); return (ret) ? ret : DosChDir(path); } return DosChDir(path); }