|
From: <cre...@us...> - 2006-06-25 20:06:08
|
Revision: 1418 Author: creecode Date: 2006-06-25 13:06:03 -0700 (Sun, 25 Jun 2006) ViewCVS: http://svn.sourceforge.net/frontierkernel/?rev=1418&view=rev Log Message: ----------- FSRef-ized Modified Paths: -------------- Frontier/branches/FSRef_Migration/Common/source/fileverbs.c Frontier/branches/FSRef_Migration/Common/source/findinfile.c Frontier/branches/FSRef_Migration/Common/source/icon.c Modified: Frontier/branches/FSRef_Migration/Common/source/fileverbs.c =================================================================== --- Frontier/branches/FSRef_Migration/Common/source/fileverbs.c 2006-06-25 19:05:17 UTC (rev 1417) +++ Frontier/branches/FSRef_Migration/Common/source/fileverbs.c 2006-06-25 20:06:03 UTC (rev 1418) @@ -50,7 +50,10 @@ #ifdef MACVERSION + + #include "MoreFilesX.h" #define chpathseparator ':' + #endif #ifdef WIN95VERSION @@ -85,7 +88,7 @@ setfilecreatorfunc, - fileisfolderfunc, + fileisfolderfunc, fileisvolumefunc, @@ -101,11 +104,11 @@ filecopyresourceforkfunc, - filedeletefunc, + filedeletefunc, filerenamefunc, - fileexistsfunc, + fileexistsfunc, filesizefunc, @@ -119,17 +122,13 @@ folderfrompathfunc, - /* - getprogrampathfunc, - */ - getsystempathfunc, getspecialpathfunc, newfunc, - newfolderfunc, + newfolderfunc, newaliasfunc, @@ -363,7 +362,7 @@ #endif -static boolean getpathvalue (hdltreenode hparam1, short pnum, tyfilespec *fspath) { +static boolean getpathvalue (hdltreenode hparam1, short pnum, ptrfilespec fspath) { /* get a path parameter for the parameter list. @@ -413,24 +412,24 @@ } /*getpathvalue*/ -static boolean getvolumevalue (hdltreenode hparam1, short pnum, tyfilespec *fsvol) { +static boolean getvolumevalue (hdltreenode hparam1, short pnum, ptrfilespec fsvol) { - /* - get a volume path parameter for the parameter list. + // + // get a volume path parameter for the parameter list. + // + // make sure that a colon is included so a volume name isn't interpreted as + // a partial path + // + // 2.1b11 dmb: ooops, we were copying bsvol into fsvol.name, potentially + // overflowing the str64. fileparsevolname now returns the vol + // name. note that if the caller needs to distinguish between + // volumes and non-volumes, it can't call us. + // + // 2.1b8 dmb: don't use pathtofilespec to convert the volume name, because + // FSMakeFSSpec will prompt the user to insert the disk if the + // volume has been ejected - make sure that a colon is included so a volume name isn't interpreted - as a partial path - 2.1b8 dmb: don't use pathtofilespec to convert the volume name, - because FSMakeFSSpec will prompt the user to insert the disk if - the volume has been ejected - - 2.1b11 dmb: ooops, we were copying bsvol into fsvol.name, potentially - overflowing the str64. fileparsevolname now returns the vol name. note - that if the caller needs to distinguish between volumes and non-volumes, - it can't call us. - */ - bigstring bsvol; tyvaluerecord v; @@ -439,15 +438,11 @@ switch (v.valuetype) { - case stringvaluetype:/*already a string, easy case*/ + case stringvaluetype: // already a string, easy case pullstringvalue (&v, bsvol); - #ifdef NEWFILESPECTYPE - if (!fileparsevolname (bsvol, &(*fsvol).volumeID, (*fsvol).fullSpecifier)) { - #else - if (!fileparsevolname (bsvol, &(*fsvol).vRefNum, (*fsvol).name)) { - #endif + if ( ! fileparsevolname ( bsvol, fsvol ) ) { setoserrorparam (bsvol); @@ -455,21 +450,18 @@ return (false); } - #ifdef MACVERSION - (*fsvol).parID = fsRtParID; - #endif - - /* old code for string paths, pre-filespecs - if (!stringfindchar (chpathseparator, bsvol)) - pushchar (chpathseparator, bsvol); - if (!pathtofilespec (bsvol, fsvol)) { - setoserrorparam (bsvol); - oserror (errorVolume); - return (false); - } - */ + /* + is this needed any more, FSRef migration? + + #ifdef MACVERSION + + (*fsvol).parID = fsRtParID; + + #endif + */ + break; default: @@ -484,41 +476,51 @@ } return (true); - } /*getvolumevalue*/ + } // getvolumevalue static boolean copyfileverb (boolean fldata, boolean flresources, hdltreenode hparam1, tyvaluerecord *v) { + + // + // 2006-06-18 creedon: for Mac, FSRef-ize + // tyfilespec fs1, fs2; - if (!getpathvalue (hparam1, 1, &fs1)) /*fs1 holds the source path*/ + if (!getpathvalue (hparam1, 1, &fs1)) // fs1 holds the source path return (false); flnextparamislast = true; - if (!getpathvalue (hparam1, 2, &fs2)) /*fs2 holds the dest path*/ + if (!getpathvalue (hparam1, 2, &fs2)) // fs2 holds the dest path return (false); - if (equalfilespecs (&fs1, &fs2)) /*easy case making a copy of itself*/ + if (equalfilespecs (&fs1, &fs2)) // easy case making a copy of itself (*v).data.flvalue = true; - else - (*v).data.flvalue = copyfile (&fs1, &fs2, fldata, flresources); + else { + ( void ) extendfilespec ( &fs1, &fs1 ); + + (*v).data.flvalue = copyfile ( &fs1, &fs2, fldata, flresources ); + + } + return (true); - } /*copyfileverb*/ + + } // copyfileverb static boolean filefrompathverb (hdltreenode hparam1, tyvaluerecord *vreturned) { - /* - 2.1b2 dmb: do string manipulation if given a string, but otherwise - work with filespecs. less critical than with folderfrompath, but might - avoid full path string overflow + // + // 2006-06-19 creedon: for Mac, FSRef-ized + // + // 2.1b3 dmb: be sure to add colon to name of folder even when filespec is being used. + // + // 2.1b2 dmb: do string manipulation if given a string, but otherwise work with filespecs. less critical than with + // folderfrompath, but might avoid full path string overflow + // - 2.1b3 dmb: be sure to add colon to name of folder even when filespec is - being used. - */ - tyvaluerecord v; tyfilespec fs; bigstring bs; @@ -539,43 +541,44 @@ if (flfolder) setstringlength (bs, stringlength (bs) - 1); - filefrompath (bs, bs); /*bs now holds the filename*/ + filefrompath (bs, bs); // bs now holds the filename break; default: - if (!coercetofilespec (&v)) - return (false); - - #if TARGET_API_MAC_CARBON == 1 - - fs.vRefNum = (**v.data.filespecvalue).vRefNum; - fs.parID = (**v.data.filespecvalue).parID; - - copystring ((**v.data.filespecvalue).name, fs.name); - - #else - - fs = **v.data.filespecvalue; + if ( ! coercetofilespec ( &v ) ) + return ( false ); + fs = **v.data.filespecvalue; + + #ifdef MACVERSION + + ( void ) extendfilespec ( &fs, &fs ); + + if ( fs.path == NULL ) + FSRefGetNameStr255 ( &fs.fsref, bs ); + else + CFStringToStr255 ( fs.path, bs ); + #endif - #ifdef NEWFILESPECTYPE - copystring (fs.fullSpecifier, bs); - #else - copystring (fs.name, bs); - #endif - /* - if (!fileexists (&fs, &flfolder) || !fileisfolder (&fs, &flfolder)) - flfolder = false; - */ - fileexists (&fs, &flfolder); /*don't care about return, just flfolder value*/ - #ifdef WIN95VERSION - if (endswithpathsep (bs)) - setstringlength (bs, stringlength (bs) - 1); + #ifdef WIN95VERSION + + copystring (fs.fullSpecifier, bs); + + #endif + + fileexists (&fs, &flfolder); // don't care about return, just flfolder value + + #ifdef WIN95VERSION + + if (endswithpathsep (bs)) + setstringlength (bs, stringlength (bs) - 1); - filefrompath (bs, bs); - #endif + filefrompath (bs, bs); + + #endif + break; } @@ -583,16 +586,17 @@ pushchar (chpathseparator, bs); return (setstringvalue (bs, vreturned)); - } /*filefrompathverb*/ + } // filefrompathverb static boolean folderfrompathverb (hdltreenode hparam1, tyvaluerecord *vreturned) { - /* - 2.1b2 dmb: do string manipulation if given a string, but otherwise - work with filespecs. in addition to avoiding string overflow, this - preserves ability to distinguish between identically-named volumes - */ + // + // 2006-06-18 creedon: for Mac, FSRef-ized + // + // 2.1b2 dmb: do string manipulation if given a string, but otherwise work with filespecs. in addition to avoiding string + // overflow, this preserves ability to distinguish between identically-named volumes + // tyvaluerecord v; @@ -602,13 +606,16 @@ return (false); #ifdef WIN95VERSION - if (!coercetostring (&v)) - return (false); + + if (!coercetostring (&v)) + return (false); + #endif switch (v.valuetype) { case stringvaluetype: { + bigstring bs; pullstringvalue (&v, bs); @@ -621,36 +628,34 @@ } default: { - #ifdef MACVERSION - tyfilespec fs; + + #ifdef MACVERSION - if (!coercetofilespec (&v)) - return (false); - - #if TARGET_API_MAC_CARBON == 1 - - fs.vRefNum = (**v.data.filespecvalue).vRefNum; + tyfilespec fs; - fs.parID = (**v.data.filespecvalue).parID; + if (!coercetofilespec (&v)) + return (false); - copystring ((**v.data.filespecvalue).name, fs.name); + fs = **v.data.filespecvalue; + + ( void ) extendfilespec ( &fs, &fs ); + + if (!getfileparentfolder (&fs, &fs)) + return (false); + + getfilespecparent ( &fs ); + + return (setfilespecvalue (&fs, vreturned)); + + #else - #else + return (false); - fs = **v.data.filespecvalue; - #endif - - if (!getfileparentfolder (&fs, &fs)) - return (false); - - return (setfilespecvalue (&fs, vreturned)); - #else - return (false); - #endif } } - } /*folderfrompathverb*/ + + } // folderfrompathverb static boolean gettypelistvalue (hdltreenode hparam1, short pnum, tysftypelist *filetypes, ptrsftypelist *x) { @@ -717,19 +722,21 @@ static boolean filedialogverb (tysfverb sfverb, hdltreenode hparam1, tyvaluerecord *vreturned) { - /* - put up one of the "standard file" dialogs. if sfverb is sfputfileverb we use the "put" dialog, otherwise the "get" dialog. + // + // put up one of the "standard file" dialogs. if sfverb is sfputfileverb we use the "put" dialog, otherwise the "get" dialog. + // + // we take at least one parameter -- the name of a variable to receive the full path specified by the user. + // + // if it's the getfile dialog, we take a second parameter -- it indicates the type of the file. + // + // 2006-06-24 creedon: FSRef-ized + // + // 1991-12-27 dmb: in all cases, check the current value of the filename variable, and pass it on to sf dialog so it can + // potentially set default directory. + // + // 2005-10-06 creedon: added creator parameter + // - we take at least one parameter -- the name of a variable to receive the full path specified by the user. - - if it's the getfile dialog, we take a second parameter -- it indicates the - type of the file. - - 2005-10-06 creedon: added creator parameter - - 12/27/91 dmb: in all cases, check the current value of the filename variable, and pass it on to sf dialog so it can potentially set default directory. - */ - bigstring bsprompt; bigstring bsvarname; tyfilespec fs; @@ -748,10 +755,10 @@ if (sfverb != sfgetfileverb) flnextparamislast = true; - if (!getvarparam (hparam1, 2, &htable, bsvarname)) /*returned filename holder*/ + if (!getvarparam (hparam1, 2, &htable, bsvarname)) // returned filename holder return (false); - if (sfverb == sfgetfileverb) { /* get extra parameters for get file dialog, indicating file type(s) and file creator */ + if (sfverb == sfgetfileverb) { // get extra parameters for get file dialog, indicating file type(s) and file creator short ctconsumed = 3; short ctpositional = 3; @@ -773,10 +780,10 @@ clearbytes (&fs, sizeof (fs)); - /* - if (idstringvalue (htable, bsvarname, bsfname)) - filecheckdefaultpath (bsfname); - */ + // + // if (idstringvalue (htable, bsvarname, bsfname)) + // filecheckdefaultpath (bsfname); + // if (hashtablelookup (htable, bsvarname, &val, &hnode)) { @@ -792,9 +799,14 @@ } if (sfverb == sfputfileverb) { - lastword (fsname(&fs), '.', bsext); + + bigstring bs; + + getfsfile ( &fs, bs ); + + lastword ( bs, '.', bsext); - if (!((stringlength (fsname(&fs)) == stringlength (bsext)) || (stringlength (bsext) > 4))) { /* extension */ + if ( ! ( ( stringlength ( bs ) == stringlength ( bsext ) ) || ( stringlength ( bsext ) > 4 ) ) ) { // extension stringtoostype (bsext, &ostype); filetypes.cttypes = 1; filetypes.types [0] = ostype; @@ -804,9 +816,11 @@ setbooleanvalue (false, vreturned); - if (!sfdialog (sfverb, bsprompt, typelist, &fs, oscreator)) /*user hit cancel*/ + if (!sfdialog (sfverb, bsprompt, typelist, &fs, oscreator)) // user hit cancel return (true); + getfilespecparent ( &fs ); + if (!setfilespecvalue (&fs, &val)) return (false); @@ -821,10 +835,11 @@ exemptfromtmpstack (&val); - (*vreturned).data.flvalue = true; /*the user did select a file*/ + (*vreturned).data.flvalue = true; // the user did select a file return (true); - } /*filedialogverb*/ + + } // filedialogverb static boolean getstringorintvalue (hdltreenode hfirst, short pnum, boolean flstring, short *intval, bigstring bsval) { @@ -918,9 +933,11 @@ static boolean putresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { - /* - 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile - */ + // + // 2006-06-17 creedon: FSRef-ized + // + // 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + // tyfilespec fs; OSType type, bintype; @@ -951,13 +968,16 @@ if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, BIGSTRING ("\x04""fork"), &val)) return (false); + + ( void ) extendfilespec ( &fs, &fs ); forktype = val.data.intvalue; (*v).data.flvalue = saveresourcehandle (&fs, type, id, bs, hbinary, forktype); return (true); - } /*putresourceverb*/ + + } // putresourceverb static boolean countrestypesverb (hdltreenode hparam1, tyvaluerecord *v) { @@ -1890,6 +1910,10 @@ static boolean getlabelverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; bigstring bslabel; @@ -1898,14 +1922,21 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + if (!getfilelabel (&fs, bslabel)) setemptystring (bslabel); return (setstringvalue (bslabel, v)); - } /*getlabelverb*/ + + } // getlabelverb static boolean setlabelverb (hdltreenode hparam1, tyvaluerecord *v) { + + // + // 2006-06-18 creedon: FSRef-ized + // tyfilespec fs; bigstring bslabel; @@ -1918,15 +1949,20 @@ if (!getstringvalue (hparam1, 2, bslabel)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + return (setbooleanvalue (setfilelabel (&fs, bslabel), v)); - } /*setlabelverb*/ + + } // setlabelverb static boolean getlabelindexverb (hdltreenode hparam1, tyvaluerecord *v) { - /* - 2006-04-24 creedon: created, cribbed from getlabelverb function - */ + // + // 2006-06-18 creedon: FSRef-ized + // + // 2006-04-24 creedon: created, cribbed from getlabelverb function + // tyfilespec fs; short ixlabel; @@ -1936,18 +1972,23 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + if (!getfilelabelindex (&fs, &ixlabel)) return (false); return (setintvalue (ixlabel, v)); - } /* getlabelindexverb */ + + } // getlabelindexverb static boolean setlabelindexverb (hdltreenode hparam1, tyvaluerecord *v) { - /* - 2006-04-24 creedon: created, cribbed from setlabelverb function - */ + // + // 2006-06-18 creedon: FSRef-ized + // + // 2006-04-24 creedon: created, cribbed from setlabelverb function + // tyfilespec fs; short index; @@ -1960,8 +2001,11 @@ if (!getintvalue (hparam1, 2, &index)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + return (setbooleanvalue (setfilelabelindex (&fs, index, true), v)); - } /* setlabelindexverb */ + + } // setlabelindexverb static boolean getlabelnamesverb (hdltreenode hparam1, tyvaluerecord *v) { @@ -2024,193 +2068,193 @@ #ifdef WIN95VERSION -boolean filegetprogramversion (bigstring bsversion) { - - return (getstringlist (defaultlistnumber, programversion, bsversion)); - } /*filegetprogramversion*/ + boolean filegetprogramversion (bigstring bsversion) { + + return (getstringlist (defaultlistnumber, programversion, bsversion)); + } /*filegetprogramversion*/ -static boolean getshortversionverb (hdltreenode hparam1, tyvaluerecord *v) { - - /* - file.getversion (path): string; return the version number as - a string, e.g. "1.0b2". - */ - - tyfilespec fs; - DWORD dummyhandle; - bigstring bs; - DWORD buflen; - char * buf; - VS_FIXEDFILEINFO * ffi; - char * info; - boolean flffi; - - flnextparamislast = true; - - if (!getpathvalue (hparam1, 1, &fs)) - return (false); - - nullterminate (fsname(&fs)); + static boolean getshortversionverb (hdltreenode hparam1, tyvaluerecord *v) { + + /* + file.getversion (path): string; return the version number as + a string, e.g. "1.0b2". + */ + + tyfilespec fs; + DWORD dummyhandle; + bigstring bs; + DWORD buflen; + char * buf; + VS_FIXEDFILEINFO * ffi; + char * info; + boolean flffi; + + flnextparamislast = true; + + if (!getpathvalue (hparam1, 1, &fs)) + return (false); + + nullterminate (fsname(&fs)); - setemptystring (bs); + setemptystring (bs); - buflen = GetFileVersionInfoSize (stringbaseaddress(fsname(&fs)), &dummyhandle); + buflen = GetFileVersionInfoSize (stringbaseaddress(fsname(&fs)), &dummyhandle); - if (buflen > 0) { - buf = (char *) LocalAlloc (LPTR, buflen); - - if (buf != NULL) { - if (GetFileVersionInfo (stringbaseaddress(fsname(&fs)), dummyhandle, buflen, buf)) { - buflen = sizeof(VS_FIXEDFILEINFO); + if (buflen > 0) { + buf = (char *) LocalAlloc (LPTR, buflen); + + if (buf != NULL) { + if (GetFileVersionInfo (stringbaseaddress(fsname(&fs)), dummyhandle, buflen, buf)) { + buflen = sizeof(VS_FIXEDFILEINFO); - flffi = VerQueryValue (buf, "\\", &ffi, &buflen); + flffi = VerQueryValue (buf, "\\", &ffi, &buflen); - if (flffi) - flffi = buflen > 0; + if (flffi) + flffi = buflen > 0; - buflen = 0; + buflen = 0; - VerQueryValue (buf, "\\StringFileInfo\\040904E4\\FileVersion", &info, &buflen); - - if (buflen == 0) { - VerQueryValue (buf, "\\StringFileInfo\\040904B0\\FileVersion", &info, &buflen); + VerQueryValue (buf, "\\StringFileInfo\\040904E4\\FileVersion", &info, &buflen); + + if (buflen == 0) { + VerQueryValue (buf, "\\StringFileInfo\\040904B0\\FileVersion", &info, &buflen); + } + + if (buflen != 0) + copyctopstring (info, bs); + else if (flffi) { + wsprintf (stringbaseaddress (bs), "%d.%d.%d.%d", HIWORD(ffi->dwFileVersionMS), + LOWORD(ffi->dwFileVersionMS), HIWORD(ffi->dwFileVersionLS), LOWORD(ffi->dwFileVersionLS)); + setstringlength (bs, strlen(stringbaseaddress(bs))); + } } - if (buflen != 0) - copyctopstring (info, bs); - else if (flffi) { - wsprintf (stringbaseaddress (bs), "%d.%d.%d.%d", HIWORD(ffi->dwFileVersionMS), - LOWORD(ffi->dwFileVersionMS), HIWORD(ffi->dwFileVersionLS), LOWORD(ffi->dwFileVersionLS)); - setstringlength (bs, strlen(stringbaseaddress(bs))); - } + LocalFree (buf); } - - LocalFree (buf); } - } - return (setstringvalue (bs, v)); - } /*getshortversionverb*/ + return (setstringvalue (bs, v)); + } /*getshortversionverb*/ -static boolean getlongversionverb (hdltreenode hparam1, tyvaluerecord *v) { + static boolean getlongversionverb (hdltreenode hparam1, tyvaluerecord *v) { - /* - file.getfullversion (path): string; return the long version string - "1.0b2 \xA9 Copyright 1991 UserLand Software.". need definitions above, - which don't appear in the Think C headers anywhere - */ - - tyfilespec fs; - DWORD dummyhandle; - bigstring bs, bs2; - DWORD buflen; - char * buf; - VS_FIXEDFILEINFO * ffi; - char * info; - - flnextparamislast = true; - - if (!getpathvalue (hparam1, 1, &fs)) - return (false); - - nullterminate (fsname(&fs)); + /* + file.getfullversion (path): string; return the long version string + "1.0b2 \xA9 Copyright 1991 UserLand Software.". need definitions above, + which don't appear in the Think C headers anywhere + */ + + tyfilespec fs; + DWORD dummyhandle; + bigstring bs, bs2; + DWORD buflen; + char * buf; + VS_FIXEDFILEINFO * ffi; + char * info; + + flnextparamislast = true; + + if (!getpathvalue (hparam1, 1, &fs)) + return (false); + + nullterminate (fsname(&fs)); - setemptystring (bs); - setemptystring (bs2); + setemptystring (bs); + setemptystring (bs2); - buflen = GetFileVersionInfoSize (stringbaseaddress(fsname(&fs)), &dummyhandle); + buflen = GetFileVersionInfoSize (stringbaseaddress(fsname(&fs)), &dummyhandle); - if (buflen > 0) { - buf = (char *) LocalAlloc (LPTR, buflen); - - if (buf != NULL) { - if (GetFileVersionInfo (stringbaseaddress(fsname(&fs)), dummyhandle, buflen, buf)) { - buflen = sizeof(VS_FIXEDFILEINFO); - VerQueryValue (buf, "\\", &ffi, &buflen); + if (buflen > 0) { + buf = (char *) LocalAlloc (LPTR, buflen); + + if (buf != NULL) { + if (GetFileVersionInfo (stringbaseaddress(fsname(&fs)), dummyhandle, buflen, buf)) { + buflen = sizeof(VS_FIXEDFILEINFO); + VerQueryValue (buf, "\\", &ffi, &buflen); - VerQueryValue (buf, "\\StringFileInfo\\040904E4\\FileVersion", &info, &buflen); - - if (buflen == 0) { - VerQueryValue (buf, "\\StringFileInfo\\040904B0\\FileVersion", &info, &buflen); - } + VerQueryValue (buf, "\\StringFileInfo\\040904E4\\FileVersion", &info, &buflen); + + if (buflen == 0) { + VerQueryValue (buf, "\\StringFileInfo\\040904B0\\FileVersion", &info, &buflen); + } - if (buflen != 0) - copyctopstring (info, bs); + if (buflen != 0) + copyctopstring (info, bs); - VerQueryValue (buf, "\\StringFileInfo\\040904E4\\LegalCopyright", &info, &buflen); - - if (buflen == 0) { - VerQueryValue (buf, "\\StringFileInfo\\040904B0\\LegalCopyright", &info, &buflen); - } + VerQueryValue (buf, "\\StringFileInfo\\040904E4\\LegalCopyright", &info, &buflen); + + if (buflen == 0) { + VerQueryValue (buf, "\\StringFileInfo\\040904B0\\LegalCopyright", &info, &buflen); + } - if (buflen != 0) - copyctopstring (info, bs2); + if (buflen != 0) + copyctopstring (info, bs2); - if (stringlength(bs) > 0) - pushspace (bs); + if (stringlength(bs) > 0) + pushspace (bs); - pushstring (bs2, bs); + pushstring (bs2, bs); + } + + LocalFree (buf); } - - LocalFree (buf); } - } - return (setstringvalue (bs, v)); - } /*getlongversionverb*/ + return (setstringvalue (bs, v)); + } /*getlongversionverb*/ -static boolean getcommentverb (hdltreenode hparam1, tyvaluerecord *v) { - - /* - file.getversion (path): string; return the version number as - a string, e.g. "1.0b2". - */ - - tyfilespec fs; - DWORD dummyhandle; - bigstring bs; - DWORD buflen; - char * buf; - VS_FIXEDFILEINFO * ffi; - char * info; - - flnextparamislast = true; - - if (!getpathvalue (hparam1, 1, &fs)) - return (false); - - nullterminate (fsname(&fs)); + static boolean getcommentverb (hdltreenode hparam1, tyvaluerecord *v) { + + /* + file.getversion (path): string; return the version number as + a string, e.g. "1.0b2". + */ + + tyfilespec fs; + DWORD dummyhandle; + bigstring bs; + DWORD buflen; + char * buf; + VS_FIXEDFILEINFO * ffi; + char * info; + + flnextparamislast = true; + + if (!getpathvalue (hparam1, 1, &fs)) + return (false); + + nullterminate (fsname(&fs)); - setemptystring (bs); + setemptystring (bs); - buflen = GetFileVersionInfoSize (stringbaseaddress(fsname(&fs)), &dummyhandle); + buflen = GetFileVersionInfoSize (stringbaseaddress(fsname(&fs)), &dummyhandle); - if (buflen > 0) { - buf = (char *) LocalAlloc (LPTR, buflen); - - if (buf != NULL) { - if (GetFileVersionInfo (stringbaseaddress(fsname(&fs)), dummyhandle, buflen, buf)) { - buflen = sizeof(VS_FIXEDFILEINFO); - VerQueryValue (buf, "\\", &ffi, &buflen); + if (buflen > 0) { + buf = (char *) LocalAlloc (LPTR, buflen); + + if (buf != NULL) { + if (GetFileVersionInfo (stringbaseaddress(fsname(&fs)), dummyhandle, buflen, buf)) { + buflen = sizeof(VS_FIXEDFILEINFO); + VerQueryValue (buf, "\\", &ffi, &buflen); - VerQueryValue (buf, "\\StringFileInfo\\040904E4\\FileDescription", &info, &buflen); - - if (buflen == 0) { - VerQueryValue (buf, "\\StringFileInfo\\040904B0\\FileDescription", &info, &buflen); + VerQueryValue (buf, "\\StringFileInfo\\040904E4\\FileDescription", &info, &buflen); + + if (buflen == 0) { + VerQueryValue (buf, "\\StringFileInfo\\040904B0\\FileDescription", &info, &buflen); + } + + if (buflen != 0) + copyctopstring (info, bs); } - if (buflen != 0) - copyctopstring (info, bs); + LocalFree (buf); } - - LocalFree (buf); } - } - return (setstringvalue (bs, v)); - } /*getcommentverb*/ + return (setstringvalue (bs, v)); + } /*getcommentverb*/ #endif @@ -2266,9 +2310,11 @@ static boolean openfileverb (hdltreenode hparam1, tyvaluerecord *v) { - /* - 5.0.1 dmb: removed incorrect case for W95 - */ + // + // 2006-06-25 creedon: for Mac, FSRef-ized + // + // 5.0.1 dmb: removed incorrect case for W95 + // tyfilespec fs; @@ -2276,45 +2322,65 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); - + + ( void ) extendfilespec ( &fs, &fs ); + (*v).data.flvalue = fifopenfile (&fs, (long) currentprocess); return (true); - } /*openfileverb*/ + } // openfileverb + static boolean closefileverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-17 creedon: for Mac, FSRef-ized + // + tyfilespec fs; flnextparamislast = true; if (!getpathvalue (hparam1, 1, &fs)) return (false); - + + ( void ) extendfilespec ( &fs, &fs ); + (*v).data.flvalue = fifclosefile (&fs); return (true); - } /*closefileverb*/ + + } // closefileverb static boolean endoffileverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; flnextparamislast = true; if (!getpathvalue (hparam1, 1, &fs)) return (false); + + ( void ) extendfilespec ( &fs, &fs ); (*v).data.flvalue = fifendoffile (&fs); return (true); - } /*endoffileverb*/ + } // endoffileverb static boolean setendoffileverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; long eof; @@ -2326,14 +2392,20 @@ if (!getlongvalue (hparam1, 2, &eof)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + (*v).data.flvalue = fifsetendoffile (&fs, eof); return (true); - } /*endoffileverb*/ + } // endoffileverb static boolean getendoffileverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; long eof; @@ -2342,15 +2414,22 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + if (!fifgetendoffile (&fs, &eof)) return (false); return (setlongvalue (eof, v)); - } /*endoffileverb*/ + + } // endoffileverb static boolean setpositionverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; long pos; @@ -2362,14 +2441,21 @@ if (!getlongvalue (hparam1, 2, &pos)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + (*v).data.flvalue = fifsetposition (&fs, pos); return (true); - } /*positionverb*/ + } // positionverb + static boolean getpositionverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; long pos; @@ -2378,15 +2464,22 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + if (!fifgetposition (&fs, &pos)) return (false); return (setlongvalue (pos, v)); - } /*positionverb*/ + } // positionverb + static boolean readlineverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; Handle linestring; @@ -2395,14 +2488,21 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + fifreadline (&fs, &linestring); return (setheapvalue (linestring, stringvaluetype, v)); - } /*readlineverb*/ + } // readlineverb + static boolean writelineverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: for Mac, FSRef-ized + // + tyfilespec fs; Handle linestring; @@ -2414,30 +2514,35 @@ if (!gettextvalue (hparam1, 2, &linestring)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + (*v).data.flvalue = fifwriteline (&fs, linestring); return (true); - } /*writelineverb*/ + + } // writelineverb static boolean readwholefileverb (hdltreenode hparam1, tyvaluerecord *v) { - /* - Read the whole file into memory and return the data to the caller. - - 2006-04-11 aradke: Kernelized file.readWholeFile. Obsolete script code follows: - - on readWholeFile (f) { - \xAB10/31/97 at 1:02:04 PM by DW -- moved from toys.readWholeFile - local (s); - file.open (f); - s = file.read (f, infinity); - file.close (f); - return (s)} - - This kernel implementation is much more efficient than file.read because - it pre-allocates a handle large enough for the whole file. - */ + // + // Read the whole file into memory and return the data to the caller. + // + // 2006-06-18 creedon: FSRef-ized + // + // 2006-04-11 aradke: Kernelized file.readWholeFile. Obsolete script code follows: + // + // on readWholeFile (f) { + // \xAB10/31/97 at 1:02:04 PM by DW -- moved from toys.readWholeFile + // local (s); + // file.open (f); + // s = file.read (f, infinity); + // file.close (f); + // return (s)} + // + // This kernel implementation is much more efficient than file.read because it pre-allocates a handle + // large enough for the whole file. + // tyfilespec fs; Handle x; @@ -2447,7 +2552,9 @@ if (!getpathvalue (hparam1, 1, &fs)) return (false); - + + ( void ) extendfilespec ( &fs, &fs ); + if (!fifopenfile (&fs, (long) currentprocess)) return (false); @@ -2455,16 +2562,21 @@ disablelangerror (); - (void) fifclosefile (&fs); /* ignore return value, we got what we wanted */ + (void) fifclosefile (&fs); // ignore return value, we got what we wanted enablelangerror (); return (fl && setbinaryvalue (x, '\?\?\?\?', v)); - } /*readwholefileverb*/ + + } // readwholefileverb static boolean readverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: FSRef-ized + // + tyfilespec fs; Handle x; long ctbytes; @@ -2477,10 +2589,12 @@ if (!getlongvalue (hparam1, 2, &ctbytes)) return (false); + ( void ) extendfilespec ( &fs, &fs ); + if (!fifreadhandle (&fs, ctbytes, &x)) return (true); - if ((ctbytes < longinfinity) && (ctbytes != gethandlesize (x))) { /*ran out of data*/ + if ((ctbytes < longinfinity) && (ctbytes != gethandlesize (x))) { // ran out of data disposehandle (x); @@ -2488,17 +2602,19 @@ } return (setbinaryvalue (x, '\?\?\?\?', v)); - } /*readverb*/ + + } // readverb static boolean writeverb (hdltreenode hparam1, tyvaluerecord *v) { - /* - 5.0.2b17 dmb: use new getreadonlytextvalue - */ + // + // 2006-06-18 creedon: FSRef-ized + // + // 5.0.2b17 dmb: use new getreadonlytextvalue + // tyfilespec fs; - //tyvaluerecord val; Handle hdata; if (!getpathvalue (hparam1, 1, &fs)) @@ -2506,22 +2622,16 @@ flnextparamislast = true; - /* - if (!getbinaryparam (hparam1, 2, &val)) + if (!getreadonlytextvalue (hparam1, 2, &hdata)) return (false); - if (!coercetostring (&val)) - return (false); + ( void ) extendfilespec ( &fs, &fs ); - (*v).data.flvalue = fifwritehandle (&fs, (Handle) val.data.stringvalue); - */ - if (!getreadonlytextvalue (hparam1, 2, &hdata)) - return (false); - (*v).data.flvalue = fifwritehandle (&fs, hdata); return (true); - } /*writeverb*/ + + } // writeverb #if 0 @@ -2570,6 +2680,10 @@ static boolean comparefilesverb (hdltreenode hparam1, tyvaluerecord *v) { + // + // 2006-06-18 creedon: for Mac, FSRef-ized + // + tyfilespec fs1, fs2; if (!getpathvalue (hparam1, 1, &fs1)) @@ -2580,182 +2694,245 @@ if (!getpathvalue (hparam1, 2, &fs2)) return (false); + ( void ) extendfilespec ( &fs1, &fs1 ); + ( void ) extendfilespec ( &fs2, &fs2 ); + (*v).data.flvalue = fifcomparefiles (&fs1, &fs2); return (true); - } /*comparefilesverb*/ + } // comparefilesverb + /*end of new verbs added by DW, 7/27/91*/ -#ifdef MACVERSION -static boolean newaliasverb (hdltreenode hparam1, tyvaluerecord *vreturned) { - - /* - 6/2/92 dmb: make sure that destination path doesn't end in a colon; - otherwise pathtofilespec will fail - */ - - tyfilespec fs, fsalias; - - if (!langcanusealiases ()) - return (false); - - if (!getpathvalue (hparam1, 1, &fs)) /*bs holds the source file's path*/ - return (false); - - flnextparamislast = true; - - if (!getpathvalue (hparam1, 2, &fsalias)) /*bsalias holds the new alias's path*/ - return (false); - - if (!surefile (&fs)) /*make sure source file exists*/ - return (false); - - setoserrorparam ((ptrstring) fsalias.name); /*assume error will relate to new file*/ - - setbooleanvalue (MakeAliasFile (&fs, &fsalias), vreturned); - - return (true); - } /*newaliasverb*/ +static boolean filedeleteverb ( hdltreenode hp1, tyvaluerecord *vreturned ) { -static boolean followaliasverb (hdltreenode hparam1, tyvaluerecord *vreturned) { + // + // 2006-06-23 creedon: FSRef-ized + // + // created, factored from filefunctionvalue function + // - /* - 1/29/92 dmb: a kernel version of what used to be implemented in glue. - there a difference in the functionality as coded here: ResolveAliasFile - is being asked to follow chains of aliases; it will follow an alias to an alias - to the original. to match the original version & documentation, if the original - file is not an alias, the empty string is returned. - also, we need to Gestalt aliases... - */ + tyfilespec fs, fst; - bigstring bs; - FSSpec fs; - boolean flfolder; - Boolean flaliasfolder, flwasalias; - OSErr errcode; - - if (!langcanusealiases ()) - return (false); - flnextparamislast = true; - if (!getpathvalue (hparam1, 1, &fs)) /*bs holds the file path*/ - return (false); + if ( ! getfilespecvalue ( hp1, 1, &fs ) ) + return ( FALSE ); + + if ( ! extendfilespec ( &fs, &fst ) ) + return ( FALSE ); - if (!fileexists (&fs, &flfolder)) { /*make sure original*/ + if ( ! deletefile ( &fst ) ) + return ( FALSE ); + + return ( setbooleanvalue ( TRUE, vreturned ) ); - setoserrorparam (bs); + } // filedeleteverb + + +#ifdef MACVERSION + + static boolean newaliasverb (hdltreenode hparam1, tyvaluerecord *vreturned) { - oserror (errorFileNotFound); /*file not found*/ + // + // 2006-06-18 creedon: FSRef-ized + // + // 1992-06-02 dmb: make sure that destination path doesn't end in a colon; otherwise pathtofilespec will fail + // - return (false); - } - - errcode = ResolveAliasFile (&fs, true, &flaliasfolder, &flwasalias); - - switch (errcode) { + boolean fl = FALSE; + tyfilespec fs, fsalias; - case errorNone: - if (flwasalias) - return (setfilespecvalue (&fs, vreturned)); - else - setemptystring (bs); + if (!langcanusealiases ()) + return (false); + + if (!getpathvalue (hparam1, 1, &fs)) // bs holds the source file's path + return (false); + + flnextparamislast = true; + + if (!getpathvalue (hparam1, 2, &fsalias)) // bsalias holds the new alias's path + return (false); - break; + ( void ) extendfilespec ( &fs, &fs ); - case errorFileNotFound: - setemptystring (bs); + // make sure source file exists, this may be redundant, could return on extend failure or call FSRefValid + + if (!surefile (&fs)) + return (false); + + setfserrorparam ( &fsalias ); // assume error will relate to new file + + if ( fsalias.path == NULL ) + return ( false ); + + /* coerce fsalias to FSSpec */ { + + FSCatalogInfo catinfo; + FSSpec fst, fsaliast; - break; + FSGetCatalogInfo ( &fs.fsref, kFSCatInfoNone, NULL, NULL, &fst, NULL ); + + FSGetCatalogInfo ( &fsalias.fsref, kFSCatInfoVolume | kFSCatInfoNodeID, &catinfo, NULL, NULL, NULL ); + + fsaliast.vRefNum = catinfo.volume; + fsaliast.parID = catinfo.nodeID; + + CFStringToStr255 ( fsalias.path, fsaliast.name ); + + fl = MakeAliasFile ( &fst, &fsaliast ); + + } - case userCanceledErr: + setbooleanvalue ( fl, vreturned ); + + return (true); + + } // newaliasverb + + + static boolean followaliasverb (hdltreenode hparam1, tyvaluerecord *vreturned) { + + // + // 2006-06-18 creedon: FSRef-ized + // + // 1992-01-29 dmb: a kernel version of what used to be implemented in glue. there a difference in the functionality + // as coded here: ResolveAliasFile is being asked to follow chains of aliases; it will follow an alias to an alias to the + // original. to match the original version & documentation, if the original file is not an alias, the empty string is + // returned. also, we need to Gestalt aliases... + // + + bigstring bs; + tyfilespec fs; + boolean flfolder; + Boolean flaliasfolder, flwasalias; + OSErr errcode; + + if (!langcanusealiases ()) return (false); - default: - oserror (errcode); + flnextparamislast = true; + + if (!getpathvalue (hparam1, 1, &fs)) // fs holds the file path + return (false); + + ( void ) extendfilespec ( &fs, &fs ); + if (!fileexists (&fs, &flfolder)) { // make sure original + + setfserrorparam ( &fs ); + + oserror (errorFileNotFound); // file not found + return (false); - } - - return (setstringvalue (bs, vreturned)); - } /*followaliasverb*/ -#endif + } + + errcode = FSResolveAliasFile ( &fs.fsref, true, &flaliasfolder, &flwasalias ); + + switch (errcode) { + + case errorNone: + if (flwasalias) { + + getfilespecparent ( &fs ); + + return (setfilespecvalue ( &fs, vreturned)); + } + else + setemptystring (bs); + + break; + + case errorFileNotFound: + setemptystring (bs); + + break; + + case userCanceledErr: + return (false); + + default: + oserror (errcode); + + return (false); + } + + return (setstringvalue (bs, vreturned)); + + } // followaliasverb + - -#ifdef MACVERSION -boolean filelaunchanythingverb (hdltreenode hparam1, tyvaluerecord *vreturned) { - - /* - 6/1/92 dmb: generate oserror if System7Open fails - */ - - tyfilespec fs; - - #ifdef flsystem6 - - if (!langcanuseappleevents ()) - return (false); - - #endif - - flnextparamislast = true; - - if (!getpathvalue (hparam1, 1, &fs)) /*bs holds the file's path*/ - return (false); - - setoserrorparam (fs.name); - - if (oserror (System7Open (fs))) - return (false); - - return (setbooleanvalue (true, vreturned)); - } /*filelaunchanythingverb*/ + boolean filelaunchanythingverb (hdltreenode hparam1, tyvaluerecord *vreturned) { + + /* + 6/1/92 dmb: generate oserror if System7Open fails + */ + + tyfilespec fs; + + flnextparamislast = true; + + if (!getpathvalue (hparam1, 1, &fs)) // fs holds the file's path + return (false); + + setfserrorparam ( &fs ); + + if ( oserror ( System7Open ( &fs ) ) ) + return ( false ); + + return (setbooleanvalue (true, vreturned)); + } /*filelaunchanythingverb*/ + #endif static boolean filefunctionvalue (short token, hdltreenode hparam1, tyvaluerecord *vreturned, bigstring bserror) { - /* - bridges file.c with the language. the name of the verb is bs, its first parameter - is hparam1, and we return a value in vreturned. + // + // bridges file.c with the language. the name of the verb is bs, its first + // parameter is hparam1, and we return a value in vreturned. + // + // we use a limited number of support routines from lang.c to get parameters + // and to return values. + // + // return false only if the error is serious enough to halt the running of + // the script that called us, otherwise error values are returned through + // the valuerecord, which is available to the script. + // + // if we return false, we try to provide a descriptive error message in the + // returned string bserror. + // + // 2006-06-25 creedon: FSRef-ized + // + // 2006-04-11 aradke: added readwholefilefunc + // + // 5.0.2b16 dmb: added getpathcharfunc + // + // 2.1b12 dmb: if mountservervolumefunc's volumepath is improperly formed, + // generate informative message instead of failing silently + // + // 2.1b2 dmb: use filespecs everywhere. added volumeblocksize verb + // + // 1992-09-30 dmb: call new langcheckstackspace; most file functions chew + // up a good bit + // + // 1992-09-26 dmb: use one bigstring instead of two for filefrompath and + // folderfrompath. also, dont allow getfullfilepath to + // generate an error in folderfrompath + // + // 1992-08-25 dmb: made newfunc delete existing file, so glue isn't necessary + // + // 1992-06-09 dmb: added file.isvisible, file.setvisible + // + // 1992-06-02 dmb: made filefrompath work as documented so that glue isn't needed + // + // 1992-02-13 dmb: re-hooked up hasbundle verb + // + // 1991-10-15: file.setpath, file.folderfrompath now handle partial paths corectly + // - we use a limited number of support routines from lang.c to get parameters and - to return values. - - return false only if the error is serious enough to halt the running of the script - that called us, otherwise error values are returned through the valuerecord, which - is available to the script. - - if we return false, we try to provide a descriptive error message in the - returned string bserror. - - 10/15/91: file.setpath, file.folderfrompath now handle partial paths corectly - - 2/13/92 dmb: re-hooked up hasbundle verb - - 6/2/92 dmb: made filefrompath work as documented so that glue isn't needed - - 6/9/92 dmb: added file.isvisible, file.setvisible - - 8/25/92 dmb: made newfunc delete existing file, so glue isn't necessary - - 9/26/92 dmb: use one bigstring instead of two for filefrompath and folderfrompath. - also, dont allow getfullfilepath to generate an error in folderfrompath - - 9/30/92 dmb: call new langcheckstackspace; most file functions chew up a good bit - - 2.1b2 dmb: use filespecs everywhere. added volumeblocksize verb - - 2.1b12 dmb: if mountservervolumefunc's volumepath is improperly formed, generate - informative message instead of failing silently - - 5.0.2b16 dmb: added getpathcharfunc - - 2006-04-11 aradke: added readwholefilefunc - */ - register hdltreenode hp1 = hparam1; register tyvaluerecord *v = vreturned; @@ -2767,8 +2944,9 @@ switch (token) { case filecreatedfunc: { + + unsigned long datecreated, datetoss; - unsigned long datecreated, datetoss; boolean fl; tyfilespec fs; @@ -2776,6 +2954,8 @@ if (!getpathvalue (hp1, 1, &fs)) /*fs holds the file path*/ break; + + ( void ) extendfilespec ( &fs, &fs ); if (fileisvolume (&fs)) fl = volumecreated (&fs, &datecreated); @@ -2798,6 +2978,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (!getfiledates (&fs, &datetoss, &datemodified)) break; @@ -2813,7 +2995,9 @@ if (!getpathvalue (hp1, 1, &fs)) break; - + + ( void ) extendfilespec ( &fs, &fs ); + if (!getfiletype (&fs, &type)) break; @@ -2830,6 +3014,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (!getfilecreator (&fs, &creator)) break; @@ -2883,6 +3069,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + + ( void ) extendfilespec ( &fs, &fs ); if (!fileisfolder (&fs, &(*v).data.flvalue)) break; @@ -2898,12 +3086,15 @@ if (!getpathvalue (hp1, 1, &fs)) /*was getvolumevalue*/ break; + ( void ) extendfilespec ( &fs, &fs ); + (*v).data.flvalue = fileisvolume (&fs); return (true); } case fileislockedfunc: { + boolean fl; tyfilespec fs; @@ -2912,6 +3103,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (fileisvolume (&fs)) fl = isvolumelocked (&fs, &(*v).data.flvalue); else @@ -2921,6 +3114,7 @@ break; return (true); + } case fileisbusyfunc: { @@ -2979,6 +3173,7 @@ } case fileisaliasfunc: { + tyfilespec fs; flnextparamislast = true; @@ -2986,6 +3181,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (!fileisalias (&fs, &(*v).data.flvalue)) break; @@ -2999,6 +3196,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + + ( void ) extendfilespec ( &fs, &fs ); if (!fileisvisible (&fs, &(*v).data.flvalue)) break; @@ -3017,6 +3216,8 @@ if (!getbooleanvalue (hp1, 2, &flvisible)) break; + + ( void ) extendfilespec ( &fs, &fs ); if (!filesetvisible (&fs, flvisible)) break; @@ -3035,6 +3236,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (!filesize (&fs, &size)) break; @@ -3042,6 +3245,7 @@ } case filelockfunc: { + tyfilespec fs; boolean fl; @@ -3050,6 +3254,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (fileisvolume (&fs)) fl = lockvolume (&fs, true); else @@ -3061,9 +3267,11 @@ (*v).data.flvalue = true; return (true); + } case fileunlockfunc: { + tyfilespec fs; boolean fl; @@ -3072,6 +3280,8 @@ if (!getpathvalue (hp1, 1, &fs)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (fileisvolume (&fs)) fl = lockvolume (&fs, false); else @@ -3083,6 +3293,7 @@ (*v).data.flvalue = true; return (true); + } case filefullpathfunc: { @@ -3107,21 +3318,8 @@ case filecopyresourceforkfunc: return (copyfileverb (false, true, hp1, v)); - case filedeletefunc: { - tyfilespec fs; - - flnextparamislast = true; - - if (!getpathvalue (hp1, 1, &fs)) - break; - - if (!deletefile (&fs)) - break; - - (*v).data.flvalue = true; - - return (true); - } + case filedeletefunc: + return ( filedeleteverb ( hp1, v ) ); case fileexistsfunc: { boolean fl; @@ -3135,6 +3333,8 @@ fl = getpathvalue (hp1, 1, &fs); + fl = fl && extendfilespec ( &fs, &fs ); + enablelangerror (); (*v).data.flvalue = fl && fileexists (&fs, &flfolder); @@ -3148,7 +3348,7 @@ case filegetpathfunc: { tyfilespec fs; - if (!langcheckparamcount (hp1, 0)) /*no parameters expected*/ + if (!langcheckparamcount (hp1, 0)) // no parameters expected break; if (!filegetdefaultpath (&fs)) @@ -3158,6 +3358,7 @@ } case filesetpathfunc: { + tyfilespec fs; flnextparamislast = true; @@ -3171,29 +3372,49 @@ (*v).data.flvalue = true; return (true); + } case newfunc: { + tyfilespec fs; - boolean flfolder; flnextparamislast = true; - if (!getpathvalue (hp1, 1, &fs)) + if ( ! getfilespecvalue ( hp1, 1, &fs ) ) break; - if (fileexists (&fs, &flfolder)) { /*8/25/92 dmb*/ - - if (!deletefile (&fs)) + #ifdef MACVERSION + + tyfilespec fst; + + if ( extendfilespec ( &fs, &fst ) ) + if ( ! deletefile ( &fst ) ) break; - } - if (!newfile (&fs, '\?\?\?\?', '\?\?\?\?')) + #endif // MACVERSION + + #ifdef WIN95VERSION + + boolean flfolder; + + if (fileexists (&fs, &flfolder)) { // 8/25/92 dmb + + if (!deletefile (&fs)) + break; + } + + #endif // WIN95VERSION + + if ( ! newfile ( &fs, '\?\?\?\?', '\?\?\?\?') ) break; (*v).data.flvalue = true; return (true); + + // return ( filenewverb ( hp1, v ) ); + } case newfolderfunc: { @@ -3584,12 +3805,14 @@ if (!getpathvalue (hp1, 1, &fs)) break; - + flnextparamislast = true; if (!getostypevalue (hp1, 2, &type)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (!setfiletype (&fs, type)) break; @@ -3610,6 +3833,8 @@ if (!getostypevalue (hp1, 2, &creator)) break; + ( void ) extendfilespec ( &fs, &fs ); + if (!setfilecreator (&fs, creator)) break; @@ -3618,13 +3843,13 @@ return (true); } - case getlabelindexfunc: /* 2006-04-24 creedon */ + case getlabelindexfunc: // 2006-04-24 creedon return (getlabelindexverb (hp1, v)); - case setlabelindexfunc: /* 2006-04-24 creedon */ + case setlabelindexfunc: // 2006-04-24 creedon return (setlabelindexverb (hp1, v)); - case getlabelnamesfunc: /* 2006-04-24 creedon */ + case getlabelnamesfunc: // 2006-04-24 creedon return (getlabelnamesverb (hp1, v)); #endif @@ -3633,32 +3858,34 @@ case getsystempathfunc: { - byte bsvol [258]; /*2*/ - byte bsfolder [258]; /*6*/ - tyfilespec fs; + + byte bsvol [258]; // 2 + byte bsfolder [258]; // 6 + tyfilespec fs = { { { 0 } }, 0 }; if (!langcheckparamcount (hp1, 0)) /*no parameters expected*/ break; #ifdef flsystem6 + filegetpath (filegetsystemvnum (), bs); + return (setstringvalue (bs, v)); + #else setemptystring (bsvol); #ifdef MACVERSION - #if TARGET_API_MAC_CARBON == 1 - ostypetostring ('pref', bsfolder); - #else - ostypetostring ('macs', bsfolder); - #endif + ostypetostring ('pref', bsfolder); #endif #ifdef WIN95VERSION + copyctopstring ("SYSTEM", bsfolder); + #endif if (!getspecialfolderpath (bsvol, bsfolder, false, &fs)) @@ -3672,7 +3899,7 @@ case getspecialpathfunc: { bigstring bsvol, bsfolder; - tyfilespec fs; + tyfilespec fs = { { { 0 } }, 0 }; boolean flcreate; if (!getstringvalue (hp1, 1, bsvol)) @@ -3695,7 +3922,7 @@ case getmp3infofunc: { long seconds, bitrate, frequency, offset; - tyfilespec fs; + tyfilespec fs = { { { 0 } }, 0 }; boolean fl, flvariablebitrate; if (!langcheckparamcount (hparam1, 6)) /*preflight before changing values*/ @@ -3733,7 +3960,8 @@ return (true); } - case readwholefilefunc: /* 2006-04-11 aradke */ + case readwholefilefunc: // 2006-04-11 aradke + return (readwholefileverb (hparam1, v)); #ifdef WIN95VERSION @@ -3770,60 +3998,66 @@ setbooleanvalue (false, v); /*by default, rez functions return false*/ switch (token) { -#ifdef MACVERSION - case rezgetresourcefunc: - return (getresourceverb (hp1, false, v)); - - case rezputresourcefunc: - return (putresourceverb (hp1, false, v)); - - case rezgetnamedresourcefunc: - return (getresourceverb (hp1, true, v)); - - case rezputnamedresourcefunc: - return (putresourceverb (hp1, true, v)); - - case rezcountrestypesfunc: - return (countrestypesverb (hp1, v)); - - case rezgetnthrestypefunc: - return (getnthrestypeverb (hp1, v)); - - case rezcountresourcesfunc: - return (countresourcesverb (hp1, v)); - - case rezgetnthresourcefunc: - return (getnthresourceverb (hp1, v)); - - case rezgetnthresinfofunc: - return (getnthresinfoverb (hp1, v)); - - case rezresourceexistsfunc: - return (resourceexistsverb (hp1, false, v)); - - case reznamedresourceexistsfunc: - return (resourceexistsverb (hp1, true, v)); - - case rezdeleteresourcefunc: - return (deleteresourceverb (hp1, false, v)); - - case rezdeletenamedresourcefunc: - return (deleteresourceverb (hp1, true, v)); - - case rezgetresourceattrsfunc: - return (getresourceattrsverb (hp1, false, v)); - - case rezsetresourceattrsfunc: - return (setresourceattrsverb (hp1, false, v)); -#endif + + #ifdef MACVERSION + + case rezgetresourcefunc: + return (getresourceverb (hp1, false, v)); + + case rezputresourcefunc: + return (putresourceverb (hp1, false, v)); + + case rezgetnamedresourcefunc: + return (getresourceverb (hp1, true, v)); + + case rezputnamedresourcefunc: + return (putresourceverb (hp1, true, v)); + + case rezcountrestypesfunc: + return (countrestypesverb (hp1, v)); + + case rezgetnthrestypefunc: + return (getnthrestypeverb (hp1, v)); + + case rezcountresourcesfunc: + return (countresourcesverb (hp1, v)); + + case rezgetnthresourcefunc: + return (getnthresourceverb (hp1, v)); + + case rezgetnthresinfofunc: + return (getnthresinfoverb (hp1, v)); + + case rezresourceexistsfunc: + return (resourceexistsverb (hp1, false, v)); + + case reznamedresourceexistsfunc: + return (resourceexistsverb (hp1, true, v)); + + case rezdeleteresourcefunc: + return (deleteresourceverb (hp1, false, v)); + + case rezdeletenamedresourcefunc: + return (deleteresourceverb (hp1, true, v)); + + case rezgetresourceattrsfunc: + return (getresourceattrsverb (hp1, false, v)); + + case rezsetresourceattrsfunc: + return (setresourceattrsverb (hp1, false, v)); + + #endif + default: getstringlist (langerrorlist, unimplementedverberror, bserror); break; - } /*switch*/ + + } // switch return (false); - } /*rezfunctionvalue*/ + + } // rezfunctionvalue boolean fileinitverbs (void) { Modified: Frontier/branches/FSRef_Migration/Common/source/findinfile.c =================================================================== --- Frontier/branches/FSRef_Migration/Common/source/findinfile.c 2006-06-25 19:05:17 UTC (rev 1417) +++ Frontier/branches/FSRef_Migration/Common/source/findinfile.c 2006-06-25 20:06:03 UTC (rev 1418) @@ -109,7 +109,7 @@ } /*lowercasehandle*/ -static boolean findopenfile (const tyfilespec *fs, hdlopenfile *hfile, hdlopenfile *hprev) { +static boolean findopenfile (const ptrfilespec fs, hdlopenfile *hfile, hdlopenfile *hprev) { register hdlopenfile x = hfirstfile; @@ -136,7 +136,7 @@ } /*findopenfile*/ -static void fifopenfileerror (const tyfilespec *fs) { +static void fifopenfileerror (const ptrfilespec fs) { /* 5.0.1 dmb: new, additional error reporting @@ -151,7 +151,7 @@ #if 0 -static OSErr openforkperm (const tyfilespec *fs, boolean flresource, short perm, hdlfilenum *fnum) { +static OSErr openforkperm (const ptrfilespec fs, boolean flresource, short perm, hdlfilenum *fnum) { OSErr errcode; @@ -164,23 +164,25 @@ } /*openforkperm*/ #endif -static boolean fileopener (const tyfilespec *fs, hdlopenfile *hfile, hdlfilenum *fnum) { +static boolean fileopener (const ptrfilespec fs, hdlopenfile *hfile, hdlfilenum *fnum) { - /* - 2/13/92 dmb: changed fldontclose logic to something that actually works; - we no longer ignore opWrErr errors. instead, we try to open read/write, - but settle for read only. + // + // 2006-06-25 creedon: for Mac, FSRef-ized + // + // 2.1b6 dmb: generate an oserror when a file can't be opened + // + // 1993-01-25 dmb: instead of using fldontclose boolean, we return the hdlopenfile + // if found. the new filecloser uses this to restore things properly + // + // 1992-02-13 dmb: changed fldontclose logic to something that actually works; + // we no longer ignore opWrErr errors. instead, we try to open read/write, + // but settle for read only. + // - 1/25/93 dmb: instead of using fldontclose boolean, we return the hdlopenfile - if found. the new filecloser uses this to restore things properly - - 2.1b6 dmb: generate an oserror when a file can't be opened - */ - boolean fl; hdlopenfile hprev; - if (findopenfile (fs, hfile, &hprev)) { /*file was already opened by us*/ + if (findopenfile (fs, hfile, &hprev)) { // file was already opened by us register hdlopenfile hf = *hfile; long position; @@ -205,14 +207,20 @@ if (!fl) fl = openfile (fs, fnum, true); -#ifdef NEWFILESPECTYPE - setoserrorparam ((ptrstring) (*fs).fullSpecifier); -#else - setoserrorparam ((ptrstring) (*fs).name); -#endif + #ifdef MACVERSION + setfserrorparam ( fs ); + + #endif + + #ifdef WIN95VERSIOBN + + setoserrorparam ((ptrstring) (*fs).fullSpecifier); + + #endif + return (fl); - } /*fileopener*/ + } // fileopener static boolean fileloadbuffer (hdlopenfile hf) { @@ -251,7 +259,7 @@ } /*filecloser*/ -boolean fiffindinfile (const tyfilespec *fs, bigstring pattern, long *idx) { +boolean fiffindinfile (const ptrfilespec fs, bigstring pattern, long *idx) { /* search for the indicated pattern in the file. return the index that the @@ -379,7 +387,7 @@ } /*fiffindinfile*/ -boolean fifcomparefiles (const tyfilespec *fs1, const tyfilespec *fs2) { +boolean fifcomparefiles (const ptrfilespec fs1, const ptrfilespec fs2) { /* compare the two files byte-by-byte and return true if they are exactly @@ -466,7 +474,7 @@ } /*fifcomparefiles*/ -boolean fifcharcounter (const tyfilespec *fs, char chlookfor, long *count) { +boolean fifcharcounter (const ptrfilespec fs, char chlookfor, long *count) { /* searches the indicated file for the character. count returns with the number @@ -539,7 +547,7 @@ } /*fifcharcounter*/ -boolean fifclosefile (const tyfilespec *fs) { +boolean fifclosefile (const ptrfilespec fs) { /* close the file indicated by fs. deallocate the record and buffer. close @@ -597,7 +605,7 @@ } /*fifcloseallfiles*/ -boolean fifopenfile (const tyfilespec *fs, long refcon) { +boolean fifopenfile (const ptrfilespec fs, long refcon) { /* open the indicated file, allocating a record and linking it into the list. @@ -660,7 +668,7 @@ } /*fifopenfile*/ -boolean fifendoffile (const tyfilespec *fs) { +boolean fifendoffile (const ptrfilespec fs) { /* return true if there's no more info in the file to be read. @@ -675,7 +683,7 @@ } /*fifendoffile*/ -static boolean fifread (const tyfilespec *fs, byte eolmarker, long ctmax, Handle *hdata) { +static boolean fifread (const ptrfilespec fs, byte eolmarker, long ctmax, Handle *hdata) { /* read a chunk of data from the indicated file to a maximum of ctmax bytes. @@ -832,7 +840,7 @@ -boolean fifreadline (const tyfilespec *fs, Handle *linestring) { +boolean fifreadline (const ptrfilespec fs, Handle *linestring) { /* read a line of text from the indicated file. @@ -842,7 +850,7 @@ } /*fifreadline*/ -boolean fifreadhandle (const tyfilespec *fs, long ctbytes, Handle *x) { +boolean fifreadhandle (const ptrfilespec fs, long ctbytes, Handle *x) { /* read a chunk of data from the indicated file. @@ -852,7 +860,7 @@ } /*fifreadhandle*/ -boolean fifreadfile (const tyfilespec *fs, Handle *x) { +boolean fifreadfile (const ptrfilespec fs, Handle *x) { /* read the whole file into memory and return the data to the caller. @@ -900,7 +908,7 @@ } /*fifreadfile*/ -boolean fifwritehandle (const tyfilespec *fs, Handle x) { +boolean fifwritehandle (const ptrfilespec fs, Handle x) { /* write some data at the end of the indicated file. it may be slow, but it's @@ -931,7 +939,7 @@ } /*fifwritehandle*/ -boolean fifwriteline (const tyfilespec *fs, Handle linestring) { +boolean fifwriteline (const ptrfilespec fs, Handle linestring) { /* write a line at the end of the indicated file. @@ -951,7 +959,7 @@ } /*fifwriteline*/ -boolean fifsetposition (con... [truncated message content] |