home *** CD-ROM | disk | FTP | other *** search
- /*
- A simple applet to strip DOS/Windoze LF's from text files and to change the type/creator to
- the standard CodeWarrior 'TEXT'/'CWIE' types.
-
- Roy Wood, rrwood@execulink.com
- */
-
-
-
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
-
-
-
- // Useful defines....
-
- #define EQSTR 0
-
- #define errorDLOG 128
- #define progressDLOG 129
- #define kMWCWTEXTType 'TEXT'
- #define kMWCWCreatorType 'CWIE'
-
- #define kTempFileName "MWCW Converter Temp File"
-
- #define kEnterChar 0x03
- #define kEscapeChar 0x1B
- #define kLFChar 0x0A
-
-
-
- // Function declarations
-
- void main(void);
-
-
- static pascal void RestartProc(void);
-
- static OSErr InstallOrRemoveAEHandlers(Boolean installAEHandlers,Boolean removeAEHandlers);
- static OSErr DoAEEvent(EventRecord *AERecord);
-
- static pascal OSErr AEOpenHandler(AppleEvent *messagein, AppleEvent *reply, long refIn);
- static pascal OSErr AEOpenDocHandler(AppleEvent *messagein, AppleEvent *reply, long refIn);
- static pascal OSErr AEPrintHandler(AppleEvent *messagein, AppleEvent *reply, long refIn);
- static pascal OSErr AEQuitHandler(AppleEvent *messagein, AppleEvent *reply, long refIn);
-
- static Boolean ProcessDialogCmdKey(DialogPtr theDPtr,EventRecord *theEvent,short *itemHit);
- static pascal Boolean MyDialogFilter(DialogPtr theDPtr,EventRecord *theEvent,short *itemHit);
- static void CenterWindow(WindowPtr wPtr);
- static pascal void HiliteDefaultButton(DialogPtr theDPtr,short whichItem);
- static void ErrorAlert(char *theErrorMessage);
-
-
-
- // Sort-of globals
-
- static Boolean gAlive = true;
- static char gErrorMessage[512];
- static UserItemUPP gMyHiliteDefaultButtonProc = nil;
- static ModalFilterUPP gMyModalFilterProc = nil;
-
-
-
-
- // Main-- install Apple Event handlers, check for pending Apple Events, then quit
-
- void main(void)
- {
- EventRecord theEvent;
-
-
- InitGraf(&(qd.thePort));
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(RestartProc);
- InitCursor();
-
- SetPort(qd.thePort);
-
-
- if (InstallOrRemoveAEHandlers(true,false) != noErr)
- {
- ErrorAlert(gErrorMessage);
- goto EXITPOINT;
- }
-
-
- while (GetNextEvent(highLevelEventMask,&theEvent))
- {
- if (theEvent.what == kHighLevelEvent)
- {
- if (DoAEEvent(&theEvent) != noErr)
- {
- ErrorAlert(gErrorMessage);
- goto EXITPOINT;
- }
- }
- }
-
-
- while (WaitNextEvent(everyEvent,&theEvent,nil,nil))
- {
- switch (theEvent.what)
- {
- case kHighLevelEvent:
- if (DoAEEvent(&theEvent) != noErr)
- {
- ErrorAlert(gErrorMessage);
- goto EXITPOINT;
- }
-
- break;
- }
- }
-
-
-
- EXITPOINT:
-
- if (InstallOrRemoveAEHandlers(false,true) != noErr)
- {
- ErrorAlert(gErrorMessage);
- }
-
- return;
- }
-
-
-
-
-
-
- // This is always nice to include....
-
- static pascal void RestartProc(void)
- {
- ExitToShell();
- }
-
-
-
-
-
-
-
-
-
-
-
- // Install Apple Event handlers
-
- static OSErr InstallOrRemoveAEHandlers(Boolean installAEHandlers,Boolean removeAEHandlers)
- {
- OSErr errCode = noErr;
- Boolean doAEObjectInit = false;
- long aLong;
- static AEEventHandlerUPP appleEventOpenUPP = nil;
- static AEEventHandlerUPP appleEventOpenDocUPP = nil;
- static AEEventHandlerUPP appleEventPrintUPP = nil;
- static AEEventHandlerUPP appleEventQuitUPP = nil;
-
-
-
- errCode = Gestalt(gestaltAppleEventsAttr,&aLong);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: Apple Events not supported, Gestalt(gestaltAppleEventsAttr) error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- if (installAEHandlers == true)
- {
- if (appleEventOpenUPP == nil)
- {
- doAEObjectInit = true;
-
-
- appleEventOpenUPP = NewAEEventHandlerProc(AEOpenHandler);
-
- if (appleEventOpenUPP == nil)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: NewAEEventHandlerProc(AEOpenHandler) returned nil");
- errCode = -1;
- goto EXITPOINT;
- }
-
- errCode = AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,appleEventOpenUPP, 0, false);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AEInstallEventHandler(kAEOpenApplication) error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
- }
-
-
-
- if (appleEventOpenDocUPP == nil)
- {
- doAEObjectInit = true;
-
-
- appleEventOpenDocUPP = NewAEEventHandlerProc(AEOpenDocHandler);
-
- if (appleEventOpenDocUPP == nil)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: NewAEEventHandlerProc(AEOpenDocHandler) returned nil");
- errCode = -1;
- goto EXITPOINT;
- }
-
- errCode = AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,appleEventOpenDocUPP, 0, false);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AEInstallEventHandler(kAEOpenDocuments) error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
- }
-
-
-
- if (appleEventQuitUPP == nil)
- {
- doAEObjectInit = true;
-
-
- appleEventQuitUPP = NewAEEventHandlerProc(AEQuitHandler);
-
- if (appleEventOpenDocUPP == nil)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: NewAEEventHandlerProc(AEQuitHandler) returned nil");
- errCode = -1;
- goto EXITPOINT;
- }
-
- errCode = AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,appleEventQuitUPP, 0, false);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AEInstallEventHandler(kAEQuitApplication) error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
- }
-
-
-
- if (appleEventPrintUPP == nil)
- {
- doAEObjectInit = true;
-
-
- appleEventPrintUPP = NewAEEventHandlerProc(AEPrintHandler);
-
- if (appleEventOpenDocUPP == nil)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: NewAEEventHandlerProc(AEPrintHandler) returned nil");
- errCode = -1;
- goto EXITPOINT;
- }
-
- errCode = AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,appleEventPrintUPP, 0, false);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AEInstallEventHandler(kAEPrintDocuments) error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
- }
-
-
- if (doAEObjectInit == true)
- {
- errCode = AEObjectInit();
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AEObjectInit() error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
- }
-
-
- errCode = noErr;
- }
-
-
- if (removeAEHandlers == true)
- {
- if (appleEventOpenUPP != nil && AERemoveEventHandler(kCoreEventClass,kAEOpenApplication,appleEventOpenUPP, false) != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AERemoveEventHandler(kAEOpenApplication) error %d",(int) errCode);
- errCode = -1;
- }
-
-
- if (appleEventOpenDocUPP != nil && AERemoveEventHandler(kCoreEventClass,kAEOpenDocuments,appleEventOpenDocUPP, false) != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AERemoveEventHandler(kAEOpenDocuments) error %d",(int) errCode);
- errCode = -1;
- }
-
-
- if (appleEventQuitUPP != nil && AERemoveEventHandler(kCoreEventClass,kAEQuitApplication,appleEventQuitUPP, false) != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AERemoveEventHandler(kAEQuitApplication) error %d",(int) errCode);
- errCode = -1;
- }
-
-
- if (appleEventPrintUPP != nil && AERemoveEventHandler(kCoreEventClass,kAEPrintDocuments,appleEventPrintUPP, false) != noErr)
- {
- sprintf(gErrorMessage,"InstallOrRemoveAEHandlers: AERemoveEventHandler(kAEPrintDocuments) error %d",(int) errCode);
- errCode = -1;
- }
-
-
- errCode = noErr;
- }
-
-
- EXITPOINT:
-
- return(errCode);
- }
-
-
-
-
- // Handle an Apple Event
-
- static OSErr DoAEEvent(EventRecord *AERecord)
- {
- int errCode = noErr;
-
-
- errCode = AEProcessAppleEvent(AERecord);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"DoAEEvent: AEProcessAppleEvent() error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- EXITPOINT:
-
- return(errCode);
- }
-
-
-
-
-
- static pascal OSErr AEOpenHandler(AppleEvent *messagein, AppleEvent *reply, long refIn)
- {
- return(noErr);
- }
-
-
-
- // This is the important one
-
- static pascal OSErr AEOpenDocHandler(AppleEvent *messagein, AppleEvent *reply, long refIn)
- {
- OSErr errCode = noErr;
- AEDescList theDesc;
- Boolean gotDesc = false;
- FSSpec theFSSpec;
- int i;
- long numFilesToOpen;
- AEKeyword ignoredKeyWord;
- DescType ignoredType;
- Size ignoredSize;
- FInfo fileInfo;
- DescType ignoredActualType;
- AEKeyword missedKeyword;
- Size ignoredActualSize;
- Boolean targetIsFolder,wasAliased;
- short theFRefNum = 0;
- long byteCount;
- Handle tempHandle = nil;
- char cFileName[256];
- char cTempFileName[256];
- short tempFolderVRefNum = 0;
- long tempFolderDirID = 0;
- FSSpec tempFSSpec;
- register char *srcCharPtr,*dstCharPtr;
- register long tempByteCount;
- DialogPtr theDPtr = nil;
- short type;
- Handle theItem;
- Rect theRect;
- char tempString[256];
-
-
- // Get the list of dropped files
-
- errCode = AEGetParamDesc(messagein, keyDirectObject, typeAEList, &theDesc);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: AEGetParamDesc() error %d", (int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
- gotDesc = true;
-
-
- errCode = AEGetAttributePtr(messagein, keyMissedKeywordAttr, typeKeyword, &ignoredActualType, (Ptr) &missedKeyword, sizeof(missedKeyword), &ignoredActualSize);
-
- if (errCode == noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: received an Apple Event containing unexpected parameters");
- errCode = -1;
- goto EXITPOINT;
- }
-
-
-
- errCode = AECountItems(&theDesc, &numFilesToOpen);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: AECountItems() error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- // Process all dropped files
-
- for (i = 1;i <= numFilesToOpen;i++)
- {
- errCode = AEGetNthPtr(&theDesc, i, typeFSS, &ignoredKeyWord, &ignoredType, (Ptr) &theFSSpec, sizeof(theFSSpec),&ignoredSize);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: AEGetNthPtr(%d) error %d",(int) i,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- PtoCstr(theFSSpec.name);
- strcpy(cFileName,(char *) theFSSpec.name);
- CtoPstr((char *) theFSSpec.name);
-
-
- // Deal with dropped aliases
-
- errCode = ResolveAliasFile(&theFSSpec,true,&targetIsFolder,&wasAliased);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: ResolveAliasFile(%s) error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- // Make sure it was a file
-
- if (targetIsFolder == false)
- {
- PtoCstr(theFSSpec.name);
- strcpy(cFileName,(char *) theFSSpec.name);
- CtoPstr((char *) theFSSpec.name);
-
-
- // Show progress window
-
- if (theDPtr == nil)
- {
- theDPtr = GetNewDialog(progressDLOG,nil,(WindowPtr) -1L);
-
- if (theDPtr != nil)
- {
- SetPort(theDPtr);
-
- CenterWindow(theDPtr);
- ShowWindow(theDPtr);
- }
- }
-
- if (theDPtr != nil)
- {
- sprintf(tempString,"Processing file '%s'",cFileName);
- CtoPstr(tempString);
-
- GetDialogItem(theDPtr,1,&type,&theItem,&theRect);
-
- SetDialogItemText(theItem,(unsigned char *) tempString);
- }
-
-
- // Read in dropped file
-
- errCode = FSpOpenDF(&theFSSpec,fsRdPerm,&theFRefNum);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSpOpenDF('%s') error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
- errCode = GetEOF(theFRefNum,&byteCount);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: GetEOF('%s') error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- tempHandle = NewHandle(byteCount);
-
- if (tempHandle == nil)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: NewHandle(%ld) error %d",(long) byteCount,(int) MemError());
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- HLock(tempHandle);
-
- errCode = FSRead(theFRefNum,&byteCount,*tempHandle);
-
- HUnlock(tempHandle);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSRead('%s') error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- errCode = FSClose(theFRefNum);
-
- theFRefNum = 0;
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSClose('%s') error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- // Strip out DOS/Windoze LF's
-
- srcCharPtr = *tempHandle;
- dstCharPtr = *tempHandle;
- tempByteCount = byteCount;
-
- while (tempByteCount > 0)
- {
- if (*srcCharPtr != kLFChar)
- {
- *dstCharPtr++ = *srcCharPtr;
- }
-
- srcCharPtr++;
- tempByteCount--;
- }
-
- byteCount = dstCharPtr - *tempHandle;;
-
-
-
- // Create a temporary file in the temp folder
-
- errCode = FindFolder(theFSSpec.vRefNum,kTemporaryFolderType,kCreateFolder,&tempFolderVRefNum,&tempFolderDirID);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FindFolder(kTemporaryFolderType) error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- strcpy(cTempFileName,kTempFileName);
-
-
- // Write out the massaged data to the temp file
-
- CtoPstr(cTempFileName);
-
- errCode = FSMakeFSSpec(tempFolderVRefNum,tempFolderDirID,(unsigned char *) cTempFileName,&tempFSSpec);
-
- PtoCstr((unsigned char *) cTempFileName);
-
- if (errCode != noErr && errCode != fnfErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSMakeFSSpec(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- errCode = FSpOpenDF(&tempFSSpec,fsRdWrPerm,&theFRefNum);
-
- if (errCode == fnfErr)
- {
- errCode = FSpCreate(&tempFSSpec,kMWCWCreatorType,kMWCWTEXTType,0);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSpCreate(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
- errCode = FSpOpenDF(&tempFSSpec,fsRdWrPerm,&theFRefNum);
- }
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSpOpenDF(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- errCode = SetEOF(theFRefNum,0L);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: SetEOF(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- errCode = SetFPos(theFRefNum,fsFromStart,0L);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: SetFPos(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- HLock(tempHandle);
-
- errCode = FSWrite(theFRefNum,&byteCount,*tempHandle);
-
- HUnlock(tempHandle);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSWrite(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- errCode = FSClose(theFRefNum);
-
- theFRefNum = 0;
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSClose(%s) error %d",cTempFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- // Swap data forks of files
-
- errCode = FSpExchangeFiles(&tempFSSpec,&theFSSpec);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSpExchangeFiles() error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- if (tempHandle != nil)
- {
- DisposeHandle(tempHandle);
-
- tempHandle = nil;
- }
-
-
-
- PtoCstr(theFSSpec.name);
- strcpy(cFileName,(char *) theFSSpec.name);
- CtoPstr((char *) theFSSpec.name);
-
-
- // Set the type/creator of the file
-
- errCode = FSpGetFInfo(&theFSSpec,&fileInfo);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSpGetFInfo(%s) error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- fileInfo.fdType = kMWCWTEXTType;
- fileInfo.fdCreator = kMWCWCreatorType;
-
- errCode = FSpSetFInfo(&theFSSpec,&fileInfo);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FSpSetFInfo(%s) error %d",cFileName,(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
-
-
- // Flush the volume to write the changes to disk
-
- errCode = FlushVol("\p",theFSSpec.vRefNum);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: FlushVol() error %d",(int) errCode);
- errCode = -1;
- goto EXITPOINT;
- }
- }
- }
-
-
- errCode = noErr;
-
-
- EXITPOINT:
-
- if (theDPtr != nil)
- {
- DisposeDialog(theDPtr);
-
- theDPtr = nil;
- }
-
- if (tempHandle != nil)
- {
- DisposeHandle(tempHandle);
-
- tempHandle = nil;
- }
-
- if (theFRefNum != 0)
- {
- FSClose(theFRefNum);
-
- theFRefNum = 0;
- }
-
-
-
- if (gotDesc != false)
- {
- errCode = AEDisposeDesc(&theDesc);
-
- if (errCode != noErr)
- {
- sprintf(gErrorMessage,"AEOpenDocHandler: AEDisposeDesc() error %d",(int) errCode);
- errCode = -1;
- }
-
- gotDesc = false;
- }
-
-
- if (errCode != noErr)
- {
- errCode = errAEEventNotHandled;
- }
-
- return(errCode);
- }
-
-
-
-
-
- static pascal OSErr AEPrintHandler(AppleEvent *messagein, AppleEvent *reply, long refIn)
- {
- return(errAEEventNotHandled);
- }
-
-
-
- static pascal OSErr AEQuitHandler( AppleEvent *messagein, AppleEvent *reply, long refIn )
- {
- gAlive = false;
-
- return(noErr);
- }
-
-
-
-
-
-
-
- // A useful kludge for handling keystrokes in dialogs
-
- static Boolean ProcessDialogCmdKey(DialogPtr theDPtr,EventRecord *theEvent,short *itemHit)
- {
- char ch,tempString[256];
- int i,j,length,numItems;
- Handle itemHandle;
- Rect tempRect;
- long theTicks;
- short itemType;
- Boolean theResult;
-
-
- theResult = false;
-
-
- if ((*theEvent).what == keyDown || (*theEvent).what == autoKey)
- {
- ch = (*theEvent).message & charCodeMask;
-
- if (ch >= 'a' && ch <= 'z')
- {
- ch = 'A' + ch - 'a';
- }
-
-
- if ((*((DialogPeek) theDPtr)).aDefItem > 0 && (ch == '\r' || ch == '\n' || ch == kEnterChar))
- {
- GetDialogItem(theDPtr,(*((DialogPeek) theDPtr)).aDefItem,&itemType,&itemHandle,&tempRect);
-
- HiliteControl((ControlHandle) itemHandle,kControlButtonPart);
-
- theTicks = TickCount();
-
- while (TickCount() < theTicks + 15)
- {
-
- }
-
- HiliteControl((ControlHandle) itemHandle,0);
-
- *itemHit = (*((DialogPeek) theDPtr)).aDefItem;
-
- theResult = true;
-
- goto EXITPOINT;
- }
-
-
- if (((*theEvent).modifiers & cmdKey) && (*((DialogPeek) theDPtr)).editField != -1 && (*((DialogPeek) theDPtr)).textH != nil)
- {
- switch (ch)
- {
- case 'C':
- DialogCopy(theDPtr);
- *itemHit = -1;
- theResult = true;
- goto EXITPOINT;
- break;
-
- case 'V':
- DialogPaste(theDPtr);
- *itemHit = -1;
- theResult = true;
- goto EXITPOINT;
- break;
-
- case 'X':
- DialogCut(theDPtr);
- *itemHit = -1;
- theResult = true;
- goto EXITPOINT;
- break;
-
- case 'A':
- SelectDialogItemText(theDPtr, (*((DialogPeek) theDPtr)).editField + 1, 0, 256);
- *itemHit = -1;
- theResult = true;
- goto EXITPOINT;
- break;
- }
- }
-
-
- if (((*theEvent).modifiers & cmdKey) || ((*((DialogPeek) theDPtr)).editField == -1) || ((*((DialogPeek) theDPtr)).textH == nil) || ch == kEscapeChar)
- {
- numItems = CountDITL(theDPtr);
-
- if (numItems >= 1)
- {
- for (i=1;i<=numItems;i++)
- {
- GetDialogItem(theDPtr,i,&itemType,&itemHandle,&tempRect);
-
- if (itemType == ctrlItem + btnCtrl && itemHandle != nil)
- {
- GetControlTitle((ControlHandle) itemHandle,(unsigned char *) tempString);
-
- if (ch == kEscapeChar || ch == '.')
- {
- PtoCstr((unsigned char *) tempString);
-
- if (strcmp(tempString,"Cancel") == EQSTR)
- {
- GetDialogItem(theDPtr,i,&itemType,&itemHandle,&tempRect);
-
- HiliteControl((ControlHandle) itemHandle,kControlButtonPart);
-
- theTicks = TickCount();
-
- while (TickCount() < theTicks + 15)
- {
-
- }
-
- HiliteControl((ControlHandle) itemHandle,0);
-
- *itemHit = i;
-
- theResult = true;
- goto EXITPOINT;
- }
- }
-
- else
- {
- length = tempString[0];
-
- for (j=1;j<=length;j++)
- {
- if (tempString[j] >= 'A' && tempString[j] <= 'Z')
- {
- if (tempString[j] == ch)
- {
- GetDialogItem(theDPtr,i,&itemType,&itemHandle,&tempRect);
-
- HiliteControl((ControlHandle) itemHandle,kControlButtonPart);
-
- theTicks = TickCount();
-
- while (TickCount() < theTicks + 15)
- {
-
- }
-
- HiliteControl((ControlHandle) itemHandle,0);
-
- *itemHit = i;
-
- theResult = true;
- goto EXITPOINT;
- }
-
- else
- {
- j = length + 1;
- }
- }
- }
- }
- }
- }
-
- if (ch != 'X' && ch != 'C' && ch != 'V' && ch != 'A')
- {
- SysBeep(1);
- }
- }
- }
- }
-
-
- EXITPOINT:
-
- return(theResult);
- }
-
-
-
- pascal Boolean MyDialogFilter(DialogPtr theDPtr,EventRecord *theEvent,short *itemHit)
- {
- Boolean theResult;
-
-
- theResult = ProcessDialogCmdKey(theDPtr,theEvent,itemHit);
-
- return(theResult);
- }
-
-
-
- // Also handy....
-
- static void CenterWindow(WindowPtr wPtr)
- {
- int screenWidth,screenHeight,windowWidth,windowHeight,left,top;
-
-
- if (wPtr == nil)
- {
- return;
- }
-
- screenWidth = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
- screenHeight = qd.screenBits.bounds.bottom - qd.screenBits.bounds.top - 20;
-
- windowWidth = wPtr->portRect.right - wPtr->portRect.left;
- windowHeight = wPtr->portRect.bottom - wPtr->portRect.top + 20;
-
-
- left = qd.screenBits.bounds.left + (screenWidth - windowWidth)/2;
-
- top = qd.screenBits.bounds.top + 20 + (screenHeight - windowHeight)/2;
-
- if (left < 0)
- left = 0;
-
- if (top < 40)
- top = 40;
-
- MoveWindow(wPtr,left,top,false);
- }
-
-
-
- // Stupid MacOS didn't use to hilite the default button
-
- static pascal void HiliteDefaultButton(DialogPtr theDPtr,short whichItem)
- {
- short type;
- Handle theItem;
- Rect theRect;
- PenState thePenState;
- GrafPtr oldPort;
-
-
- if (theDPtr != nil && (*((DialogPeek) theDPtr)).aDefItem > 0)
- {
- GetPort(&oldPort);
- SetPort(theDPtr);
-
- GetPenState(&thePenState);
-
- GetDialogItem(theDPtr, (*((DialogPeek) theDPtr)).aDefItem, &type, &theItem, &theRect);
- PenNormal();
- PenSize(3,3);
- InsetRect(&theRect,-4,-4);
- FrameRoundRect(&theRect,16,16);
- PenSize(1,1);
-
- SetPenState(&thePenState);
- SetPort(oldPort);
- }
- }
-
-
-
- // Show an alert with a message
-
- static void ErrorAlert(char *theErrorMessage)
- {
- GrafPtr oldPort;
- DialogPtr theDPtr;
- short itemHit;
- short type;
- Handle theItem;
- Rect theRect;
-
-
- GetPort(&oldPort);
-
- InitCursor();
-
- SysBeep(1);
-
-
- theDPtr = GetNewDialog(errorDLOG, nil,(WindowPtr) -1L);
-
- if (theDPtr != nil)
- {
- SetPort(theDPtr);
-
- CenterWindow(theDPtr);
- ShowWindow(theDPtr);
-
- (*((DialogPeek) theDPtr)).aDefItem = 1;
-
- GetDialogItem(theDPtr, 3, &type, &theItem, &theRect);
- SetDialogItem(theDPtr, 3, type,(Handle) gMyHiliteDefaultButtonProc, &theRect);
-
- GetDialogItem(theDPtr, 2, &type, &theItem, &theRect);
- CtoPstr(theErrorMessage);
- SetDialogItemText(theItem,(unsigned char *) theErrorMessage);
- PtoCstr((unsigned char *) theErrorMessage);
-
- TEFromScrap();
-
- do
- {
- ModalDialog(gMyModalFilterProc,&itemHit);
-
- } while (itemHit!=1);
-
- ZeroScrap();
-
- TEToScrap();
-
- DisposeDialog(theDPtr);
- SetPort(oldPort);
- }
- }
-