home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-05-01 | 9.7 KB | 446 lines | [TEXT/MPS ] |
- // UCPlusTool.cp
- // Copyright © 1988-1991 by Apple Computer Inc. All rights reserved.
-
- #ifndef __TEXTEDIT__
- #include <TextEdit.h>
- #endif
-
- #ifndef __OSUTILS__
- #include <OSUtils.h>
- #endif
-
- #ifndef __EVENTS__
- #include <Events.h>
- #endif
-
- #ifndef __CURSORCTL__
- #include <CursorCtl.h>
- #endif
-
- #ifndef __SIGNAL__
- #include <Signal.h>
- #endif
-
- #ifndef __ERRMGR__
- #include <ErrMgr.h>
- #endif
-
- #ifndef __PACKAGES__
- #include <Packages.h>
- #endif
-
- #ifndef __SCRIPT__
- #include <Script.h>
- #endif
-
- #ifndef __RESOURCES__
- #include <Resources.h>
- #endif
-
- #ifndef __FONTS__
- #include <Fonts.h>
- #endif
-
- // For fprintf
- #ifndef __STDIO__
- #include <StdIO.h>
- #endif
-
- // For exit
- #ifndef __STDLIB__
- #include <StdLib.h>
- #endif
-
- #ifndef __ULIST__
- #include <UList.h>
- #endif
-
- #ifndef __UASSOCIATION__
- #include <UAssociation.h>
- #endif
-
- #ifndef __UFAILURE__
- #include <UFailure.h>
- #endif
-
- #ifndef __UMACAPPUNIVERSAL__
- #include <UMacAppUniversal.h>
- #endif
-
- #ifndef __UMACAPPUTILITIES__
- #include <UMacAppUtilities.h>
- #endif
-
- #ifndef __UPATCH__
- #include <UPatch.h>
- #endif
-
- #ifndef __UCPLUSTOOL__
- #include <UCPlusTool.h>
- #endif
-
- // Global variables defined so that storage is allocated:
- const char* Version = "1.0";
- TCPlusTool* gCPlusTool = NULL;
-
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void InitUCPlusTool()
- {
- // Do Tool related initialization
- InitGraf(&qd.thePort);
- SetFScaleDisable(TRUE); // per chapter in MPW guide on tools
-
- InitCursorCtl(NULL);
- RotateCursor(0);
-
- InitErrMgr("", "", FALSE);
-
- #if qDebug
- gPreCondition = TRUE;
- gPostCondition = TRUE;
- #endif
-
- // -1 == 0xFFFFFFFF, the largest 32 bit address. Our routine StripLong uses a
- // pre-stripped address gStrippedAddress to avoid the yucky MPW glue. (NOTE: need
- // gStrippedAddress in DefineConfiguration.) gStrippedAddress = StripAddress(Ptr( -
- // 1));
-
- // Find out just what kind of environment we're dealing with here
- DefineConfiguration(gConfiguration);
-
- // Init the stuff that MATextBox uses
- gMATextBoxTE = NULL;
- gTEDefaultWordBreak = NULL;
-
- // Init all the primary colors
- SetRGBColor(gRGBBlack, 0, 0, 0);
- SetRGBColor(gRGBWhite, 0xFFFF, 0xFFFF, 0xFFFF);
- SetRGBColor(gRGBRed, 0xFFFF, 0, 0);
- SetRGBColor(gRGBGreen, 0, 0xFFFF, 0);
- SetRGBColor(gRGBBlue, 0, 0, 0xFFFF);
-
- // setup the zeroed points and rects
- gZeroPt = Point(0, 0);
- gZeroRect = Rect(0, 0, 0, 0);
-
- #if qDebug || qInspector
- gFieldToStrRtn = (ProcPtr)&StdFieldToString;
- gFieldToCountRtn = (ProcPtr)&StdFieldToCount;
- #endif
-
- gBoolString[0][0] = (char)5; // = "\pFALSE";
- gBoolString[0][1] = 'F';
- gBoolString[0][2] = 'A';
- gBoolString[0][3] = 'L';
- gBoolString[0][4] = 'S';
- gBoolString[0][5] = 'E';
- gBoolString[1][0] = (char)4; // = "\pTRUE";
- gBoolString[1][1] = 'T';
- gBoolString[1][2] = 'R';
- gBoolString[1][3] = 'U';
- gBoolString[1][4] = 'E';
-
- gDeadStripSuppression = FALSE;
-
- // The refnum where the application's resources should be found
- gApplicationRefNum = CurResFile();
-
- #if qDebug
- gExperimenting = FALSE;
- gDebugPrinting = FALSE;
- gReportMenuChoices = FALSE;
- gIntenseDebugging = FALSE;
- gReportEvt = FALSE;
- #endif
-
- gToolBoxInitialized = TRUE;
-
- // Do Object related initialization
- InitUObject();
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TRes
-
- void Intr(int)
- {
- gCPlusTool->fInterrupted = TRUE; // we test this switch periodically
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TRes
-
- pascal void TCPlusTool::Stop(const Str255& msg)
- {
- if (msg.Length() > 0)
- fprintf(stderr, "\n%s\n", (char*)msg);
-
- if (fInterrupted)
- exit(-9);
-
- // don't worry about closing the files we opened. The Shell will do so if appropriate.
- exit((short)fRetCode); // exit, returning the appropriate status code
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::SyntaxError(const Str255& suffix)
- {
- Str255 aStr = fProgName;
-
- fprintf(stderr, "%ld Bad Parameter: %s\n", kErrorMarker, (char*) suffix);
- fprintf(stderr, "%ld%s<invalid option>\n", kErrorMarker, (char*) aStr);
- Stop("");
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::DoShowUsage(void)
- {
- Str255 aStr = fProgName;
-
- fprintf(stderr, "# Usage: %s [-p]\n", (char*) aStr);
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::GetNextArg(Str255& nextArg)
- {
- if (++fArgvIndex > fArgc)
- Stop(" Not enough arguments ");
- nextArg = Str255(fArgv[fArgvIndex]);
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::InstallKeyWords(void)
- {
- InstallKeyWord(" P ", kwP);
- InstallKeyWord(" NoP ", kwNoP);
- InstallKeyWord(" T ", kwT);
- InstallKeyWord(" NoT ", kwNoT);
- InstallKeyWord(" Help ", kwHelp);
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::InstallKeyWord(const Str255& keyword,
- short kw)
- {
- Str255 value;
- Str255 upperKeyWord = keyword;
-
- UprStr255(upperKeyWord);
- value[0] = (char)2;
- value[1] = (char)((kw & 0xFF00) >> 8);
- value[2] = (char)(kw & 0x00FF);
- fKeyWordList->InsertEntry(upperKeyWord, value);
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal Boolean TCPlusTool::LookupKeyword(const Str255& keyword,
- short& kw)
- {
- Str255 value;
- Str255 upperKeyWord = keyword;
-
- UprStr255(upperKeyWord);
- if (fKeyWordList->ValueAt(keyword, value))
- {
- kw = (((short)value[1] << 8) | (short)value[2]);
- return TRUE;
- }
- else
- return FALSE;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::ProcessArg(const Str255& arg)
- {
- if (arg[1] != '-')
- DoProcessFileArg(arg);
- else
- {
- short akw;
- Str255 realArg = arg;
-
- realArg.Delete(1,1); // delete the '-'
- if (LookupKeyword(realArg, akw))
- DoProcessOptionArg(akw);
- else
- SyntaxError(arg + " < invalid option > ");
- }
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::DoProcessFileArg(const Str255& arg)
- {
- SyntaxError(arg + " < invalid option > ");
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::DoProcessOptionArg(short kw)
- {
- switch (kw)
- {
- case kwP:
- fProgress = TRUE;
- break;
- case kwNoP:
- fProgress = FALSE;
- break;
- case kwT:
- fTime = TRUE;
- break;
- case kwNoT:
- fTime = FALSE;
- break;
- case kwHelp:
- DoShowUsage();
- fRetCode = RC_Normal;
- Stop(" ");
- break;
- default:
- SyntaxError(Str255(fArgv[fArgvIndex]) + Str255(" < invalid option > "));
- }
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::DoStartProgress(void)
- {
- Str255 aStr = fProgName;
-
- fprintf(stderr, "\n%s (Ver %d) \n\n\n", (char*) aStr, Version);
- }
-
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::Initialize(void) // override
- {
- inherited::Initialize();
-
- fArgc = 0;
- fArgv = NULL;
- fArgvIndex = 0;
- fCursorCount = 0; // prepare to spin that cursor
- fInterrupted = FALSE; // becomes TRUE when interrupted
- fKeyWordList = NULL; // keywords to this command
- fProgName = ""; // Program's file name
- fProgress = FALSE;
- fRetCode = RC_Normal;
- fStartDateTime = 0; // Date/Time at start of tool
- fStartTicks = 0; // tickcount at start of tool
- fTime = FALSE;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TInit
-
- pascal void TCPlusTool::ICPlusTool(short argc, char** argv)
- {
- Str255 arg;
- unsigned long theDateTime;
-
- IObject();
-
- gCPlusTool = this;
-
- fArgc = argc;
- fArgv = argv;
-
- fStartTicks = TickCount();
-
- GetDateTime(theDateTime);
- fStartDateTime = theDateTime;
-
- SpinCursor(1);
- signal(SIGINT, &Intr);
-
- fProgName = Str255(argv[fArgvIndex]);
- fRetCode = RC_ParmErrs;
-
- if (fInterrupted)
- Stop("");
-
- fKeyWordList = new TAssociation;
- fKeyWordList->IAssociation();
-
- InstallKeyWords();
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TRes
-
- pascal void TCPlusTool::Run(void)
- {
- FailInfo fi;
-
- if (fi.Try())
- {
- while (++fArgvIndex < fArgc) // fArgc is the number of args plus one
- {
- RotateCursor(++fCursorCount);
- ProcessArg(fArgv[fArgvIndex]);
- }
-
- UnloadSeg(&InitUCPlusTool);
- fRetCode = RC_Normal;
-
- if (fProgress)
- DoStartProgress();
-
- DoToolAction();
-
- if (fTime)
- fprintf(stderr, "Elapsed time: %-1.2f seconds\n", (TickCount() - fStartTicks) / 60);
-
- fi.Success();
- }
- else
- {
- OSErr theErr = fi.error;
- Str255 theText;
- Str255 progName = fProgName;
-
- if (theErr != noErr)
- {
- GetSysErrText(theErr, (char*)theText);
- fprintf(stderr, "%ld%s: %s\n", kErrorMarker, (char*) progName, (char*) theText);
- fRetCode = RC_Abort;
- }
- }
-
- exit((short)fRetCode);
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment TRes
-
- pascal void TCPlusTool::DoToolAction(void)
- {
- Str255 aStr = fProgName;
-
- fprintf(stderr, "%ld%s: Forgot to override the default tool action\n", kErrorMarker, (char*) aStr);
- }
-
-