This commit is contained in:
sgehani%netscape.com 1999-10-30 22:21:28 +00:00
Родитель 3715eaa957
Коммит e5a056cfa2
7 изменённых файлов: 158 добавлений и 35 удалений

Двоичный файл не отображается.

Просмотреть файл

@ -49,24 +49,15 @@
on run
set kTargetFile to "HD:genJS:ASEncoder"
set kTargetFolder to "HD:genJS"
tell application "ASEncoder"
activate
-- pre-condition: kTargetFile is set to a local un-encoded (containing a res fork) file
-- encode should succeed
set bSuccess to encode file kTargetFile
SUCCESS_MSG(kTargetFile, "encode", bSuccess)
-- encode should fail
set bSuccess to encode file kTargetFile
SUCCESS_MSG(kTargetFile, "encode", bSuccess)
-- decode should succeed
set bSuccess to decode file kTargetFile
SUCCESS_MSG(kTargetFile, "decode", bSuccess)
--decode should fail
set bSuccess to decode file kTargetFile
SUCCESS_MSG(kTargetFile, "decode", bSuccess)
set bSuccess to encode file kTargetFolder
SUCCESS_MSG(kTargetFolder, "encode", bSuccess)
-- post-condition: kTargetFile is a decoded (containing a res fork) file as it originally was

Просмотреть файл

@ -29,6 +29,7 @@
#include "nsEventHandler.h"
#include "nsAppleSingleEncoder.h"
#include "nsAppleSingleDecoder.h"
#include "MoreFilesExtras.h"
Boolean gDone;
@ -77,8 +78,9 @@ EncodeEvent(AppleEvent *appEvent, AppleEvent *reply, SInt32 handlerRefCon)
{
OSErr err = noErr;
FSSpec param;
Boolean result = false;
Boolean result = false, isDir = false;
AEDesc fileDesc;
long dummy;
// extract FSSpec from params
err = AEGetParamDesc(appEvent, keyDirectObject, typeFSS, &fileDesc);
@ -91,15 +93,26 @@ EncodeEvent(AppleEvent *appEvent, AppleEvent *reply, SInt32 handlerRefCon)
if (err != noErr)
goto reply;
// check if given file has res fork (takes care of existence check)
if (nsAppleSingleEncoder::HasResourceFork(&param))
FSpGetDirectoryID(&param, &dummy, &isDir);
// if folder recursively traverse and encode contents
if (isDir)
{
// encode given file
nsAppleSingleEncoder encoder;
err = encoder.Encode(&param);
err = encoder.EncodeFolder(&param);
}
else
err = -1; // so that result boolean is set to false
{
// it's a file not a folder so proceed as usual
// check if given file has res fork (takes care of existence check)
if (nsAppleSingleEncoder::HasResourceFork(&param))
{
// encode given file
nsAppleSingleEncoder encoder;
err = encoder.Encode(&param);
}
}
// if noErr thus far
if (err == noErr)
@ -112,10 +125,8 @@ reply:
// package reply
AEPutParamPtr(reply, keyDirectObject, typeBoolean, &result, sizeof(result));
// set err to noErr -- boolean takes care of failures
err = noErr;
return err;
// boolean takes care of failures
return noErr;
}
pascal OSErr
@ -123,8 +134,9 @@ DecodeEvent(AppleEvent *appEvent, AppleEvent *reply, SInt32 handlerRefCon)
{
OSErr err = noErr;
FSSpec param, outFile;
Boolean result = false;
Boolean result = false, isDir = false;
AEDesc fileDesc;
long dummy;
// extract FSSpec from params
err = AEGetParamDesc(appEvent, keyDirectObject, typeFSS, &fileDesc);
@ -136,16 +148,27 @@ DecodeEvent(AppleEvent *appEvent, AppleEvent *reply, SInt32 handlerRefCon)
err = nsASEApp::GotRequiredParams(appEvent);
if (err != noErr)
goto reply;
// check if given file is in AS format (takes care of existence check)
if (nsAppleSingleDecoder::IsAppleSingleFile(&param))
FSpGetDirectoryID(&param, &dummy, &isDir);
// if folder recursively traverse and encode contents
if (isDir)
{
// decode given file
nsAppleSingleDecoder decoder;
err = decoder.Decode(&param, &outFile);
err = decoder.DecodeFolder(&param);
}
else
err = -1; // so that result boolean is set to false
{
// it's a file not a folder so proceed as usual
// check if given file is in AS format (takes care of existence check)
if (nsAppleSingleDecoder::IsAppleSingleFile(&param))
{
// decode given file
nsAppleSingleDecoder decoder;
err = decoder.Decode(&param, &outFile);
}
}
// if noErr thus far
if (err == noErr)
@ -158,10 +181,8 @@ reply:
// package reply
AEPutParamPtr(reply, keyDirectObject, typeBoolean, &result, sizeof(result));
// set err to noErr -- boolean takes care of failures
err = noErr;
return err;
// boolean takes care of failures
return noErr;
}
pascal OSErr

Просмотреть файл

@ -72,7 +72,9 @@ extern Boolean gDone;
#define rMenuFile 129
#define rMenuItemASEncode 1
#define rMenuItemASDecode 2
#define rMenuItemQuit 4
#define rMenuItemASEncodeFolder 3
#define rMenuItemASDecodeFolder 4
#define rMenuItemQuit 6
#define rMenuEdit 130
#define rAboutBox 129

Просмотреть файл

@ -28,6 +28,8 @@
#include <Files.h>
#include <OSUtils.h>
#include "nsAppleSingleDecoder.h" /* AppleSingle struct definitions */
#include "MoreFilesExtras.h"
#include "IterateDirectory.h"
nsAppleSingleEncoder::nsAppleSingleEncoder()
{
@ -117,6 +119,79 @@ nsAppleSingleEncoder::Encode(FSSpecPtr aInFile, FSSpecPtr aOutFile)
return err;
}
pascal void
EncodeDirIterateFilter(const CInfoPBRec * const cpbPtr, Boolean *quitFlag, void *yourDataPtr)
{
OSErr err = noErr;
FSSpec currFSp;
nsAppleSingleEncoder* thisObj = NULL;
Boolean isDir = false;
long dummy;
// param check
if (!yourDataPtr || !cpbPtr || !quitFlag)
return;
*quitFlag = false;
// extract 'this' -- an nsAppleSingleEncoder instance
thisObj = (nsAppleSingleEncoder*) yourDataPtr;
thisObj->ReInit();
// make an FSSpec from the CInfoPBRec*
err = FSMakeFSSpec(cpbPtr->hFileInfo.ioVRefNum, cpbPtr->hFileInfo.ioFlParID,
cpbPtr->hFileInfo.ioNamePtr, &currFSp);
if (err == noErr)
{
FSpGetDirectoryID(&currFSp, &dummy, &isDir);
// if current FSSpec is file
if (!isDir)
{
// if file has res fork
if (nsAppleSingleEncoder::HasResourceFork(&currFSp))
{
// encode file
thisObj->Encode(&currFSp);
}
}
else
{
// else if current FSSpec is folder ignore
// XXX never reached?
return;
}
}
}
OSErr
nsAppleSingleEncoder::EncodeFolder(FSSpecPtr aFolder)
{
OSErr err = noErr;
long dummy;
Boolean isDir = false;
// check that FSSpec is folder
if (aFolder)
{
FSpGetDirectoryID(aFolder, &dummy, &isDir);
if (!isDir)
return dirNFErr;
}
// recursively enumerate contents of folder (maxLevels=0 means recurse all)
FSpIterateDirectory(aFolder, 0, EncodeDirIterateFilter, (void*)this);
return err;
}
void
nsAppleSingleEncoder::ReInit()
{
mInFile = NULL;
mOutFile = NULL;
}
OSErr
nsAppleSingleEncoder::WriteHeader()
{

Просмотреть файл

@ -45,6 +45,8 @@ public:
static Boolean HasResourceFork(FSSpecPtr aFile);
OSErr Encode(FSSpecPtr aFile);
OSErr Encode(FSSpecPtr aInFile, FSSpecPtr aOutFile);
OSErr EncodeFolder(FSSpecPtr aFolder);
void ReInit();
static OSErr FSpGetCatInfo(CInfoPBRec *pb, FSSpecPtr aFile);

Просмотреть файл

@ -138,6 +138,20 @@ nsEventHandler::HandleKeyDown()
menuChoice |= rMenuItemASDecode;
break;
case 'F':
case 'f':
menuChoice = rMenuFile;
menuChoice <<= 16;
menuChoice |= rMenuItemASEncodeFolder;
break;
case 'O':
case 'o':
menuChoice = rMenuFile;
menuChoice <<= 16;
menuChoice |= rMenuItemASDecodeFolder;
break;
case 'Q':
case 'q':
menuChoice = rMenuFile;
@ -213,7 +227,25 @@ nsEventHandler::HandleMenuChoice(SInt32 aChoice)
}
}
break;
case rMenuItemASEncodeFolder: /* AS Encode Folder... */
err = selector.SelectFolder(&file);
if (err == noErr)
{
nsAppleSingleEncoder encoder;
err = encoder.EncodeFolder(&file);
}
break;
case rMenuItemASDecodeFolder: /* AS Decode Folder... */
err = selector.SelectFolder(&file);
if (err == noErr)
{
nsAppleSingleDecoder decoder;
err = decoder.DecodeFolder(&file);
}
break;
case rMenuItemQuit: /* Quit */
nsASEApp::SetCompletionStatus(true);
break;