home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-10-15 | 6.9 KB | 341 lines | [TEXT/PJMM] |
- PROGRAM ObjectShell;
- {***********************************}
- USES
- MemTypes, QuickDraw, OSIntf, ToolIntf, PackIntf, MacPrint, ObjIntf, GlobalStuff, StdWindows, StdMenus, MyMenus;
-
- {========================================}
- PROCEDURE Escape;
- BEGIN
- ExitToShell
- END; {Escape}
-
- {========================================}
- PROCEDURE InitToolbox (vMasters: Integer);
- VAR
- i: Integer;
-
- BEGIN
- MaxApplZone;
- FOR i := 1 TO vMasters DO
- MoreMasters;
- InitGraf(@thePort);
- InitFonts;
- InitWindows;
- InitMenus;
- TEInit;
- InitDialogs(@Escape);
- InitCursor;
- FlushEvents(everyEvent, 0);
- END; {InitToolbox}
-
- {----------------------------------------}
- PROCEDURE InitGlobals;
- TYPE
- tShortPointer = ^Integer;
-
- VAR
- vShortPtr: tShortPointer;
-
- BEGIN
- IF BitTst(Ptr(ROM85), 0) THEN
- gMBarHeight := 20
- ELSE
- BEGIN
- vShortPtr := tShortPointer(MBarHeight);
- gMBarHeight := vShortPtr^;
- END;
-
- IF BitTst(Ptr(ROM85), 0) THEN
- gMFEvent := FALSE
- ELSE
- gMFEvent := (NGetTrapAddress($60, ToolTrap) <> NGetTrapAddress($9F, ToolTrap));
- gSleep := 10;
- gMouseRgn := NewRgn;
- gMouseRgn := NIL;
-
- gWatch := GetCursor(watchCursor)^^;
- gCross := GetCursor(crossCursor)^^;
- gIBeam := GetCursor(iBeamCursor)^^;
-
- gWCount := 0;
- gCloseFlag := FALSE;
- gDone := FALSE;
- END; {InitGlobals}
-
- {----------------------------------------}
- PROCEDURE InitRects;
- BEGIN
- gMinWidth := 108;
- gMinHeight := 72;
- WITH ScreenBits.Bounds DO
- BEGIN
- SetRect(gDeskTopRect, left, top + gMBarHeight, right, bottom);
- gDragRect := gDeskTopRect;
- InsetRect(gDragRect, kScreenMargin, kScreenMargin);
- SetRect(gGrowRect, gMinWidth, gMinHeight, right - kScreenMargin, bottom - kScreenMargin);
- END;
- END; {InitRects}
-
- {----------------------------------------}
- PROCEDURE InitPrint;
- BEGIN
- gPrintHdl := THPrint(NewHandle(SizeOf(TPrint)));
- PrOpen;
- IF OSError(PrError) THEN
- gPrintHdl := NIL;
- PrintDefault(gPrintHdl);
- IF OSError(PrError) THEN
- gPrintHdl := NIL;
- PrClose;
- IF OSError(PrError) THEN
- gPrintHdl := NIL;
- END; {InitPrint}
-
- {----------------------------------------}
- PROCEDURE CheckFinder;
- VAR
- vMessage: Integer;
- vDocMax: Integer;
- vIndex: Integer;
- vInfo: AppFile;
-
- BEGIN
- CountAppFiles(vMessage, vDocMax);
- IF vDocMax > 0 THEN
- IF vMessage = appOpen THEN
- FOR vIndex := 1 TO vDocMax DO
- BEGIN
- IF FrontWindow <> NIL THEN
- BEGIN
- gEvent.message := GetWRefCon(oWindow.fWPtr);
- BitClr(@gEvent.modifiers, 15);
- oWindow.Activate;
- END;
- GetAppFiles(vIndex, vInfo);
- WITH vInfo DO
- BEGIN
- DoNew(kWindowKind, fType);
- oWindow.DoOpen(fName, vRefNum);
- END;
- ClrAppFiles(vIndex);
- END;
- END; {CheckFinder}
-
- {========================================}
- PROCEDURE DoApplTasks;
- BEGIN
- IF IsAppWindow(FrontWindow) THEN
- BEGIN
- oWindow := TWindow(GetWRefCon(FrontWindow));
- oWindow.ApplTask;
- END;
- IF gCloseFlag THEN
- BEGIN
- SetMyMenuBar;
- gCloseFlag := FALSE;
- END;
- END; {DoApplTasks}
-
- {========================================}
- PROCEDURE DoMenuClick (vMenuCode: LongInt);
- VAR
- vMenu: Integer;
- vItem: Integer;
-
- BEGIN
- vMenu := HiWord(vMenuCode);
- vItem := LoWord(vMenuCode);
- CASE vMenu OF
- kAppleID..kEditID:
- ClickInStdMenus(vMenu, vItem);
- OTHERWISE
- ClickInMyMenus(vMenu, vItem);
- END;
- HiliteMenu(0);
- END; {DoMenuClick}
-
- {----------------------------------------}
- PROCEDURE DoWindowClick (vPart: Integer;
- vWPtr: WindowPtr);
- BEGIN
- oWindow := TWindow(GetWRefCon(vWPtr));
- oWindow.ClickInWindow(vPart);
- END; {DoWindowClick}
-
- {----------------------------------------}
- PROCEDURE DoMouseDown;
- VAR
- vPart: Integer;
- vWhichWindow: WindowPtr;
-
- BEGIN
- WITH gEvent DO
- BEGIN
- vPart := FindWindow(where, vWhichWindow);
- CASE vPart OF
- inDesk:
- SysBeep(1);
- inMenuBar:
- BEGIN
- SetStdMenuItems;
- SetMyMenuItems;
- DoMenuClick(MenuSelect(where));
- END;
- inSysWindow:
- SystemClick(gEvent, vWhichWindow);
- OTHERWISE
- DoWindowClick(vPart, vWhichWindow);
- END;
- END;
- END; {DoMouseDown}
-
- {========================================}
- PROCEDURE DoKeyPress (vChar: CHAR);
- BEGIN
- oWindow.KeyPress(vChar);
- END; {DoKeyPress}
-
- {----------------------------------------}
- PROCEDURE DoKeyDown;
- VAR
- vCharCode: CHAR;
-
- BEGIN
- WITH gEvent DO
- BEGIN
- vCharCode := CHR(BitAnd(message, charCodeMask));
- IF BitAnd(modifiers, CmdKey) = CmdKey THEN
- BEGIN
- SetStdMenuItems;
- SetMyMenuItems;
- DoMenuClick(MenuKey(vCharCode));
- END
- ELSE
- DoKeyPress(vCharCode);
- END;
- END; {DoKeyDown}
-
- {========================================}
- PROCEDURE DoUpdate;
- VAR
- vWhichWindow: WindowPtr;
-
- BEGIN
- vWhichWindow := WindowPtr(gEvent.message);
- oWindow := TWindow(GetWRefCon(vWhichWindow));
- oWindow.Update;
- END; {DoUpdate}
-
- {========================================}
- PROCEDURE DoActivate;
- VAR
- vWhichWindow: WindowPtr;
-
- BEGIN
- vWhichWindow := WindowPtr(gEvent.message);
- oWindow := TWindow(GetWRefCon(vWhichWindow));
- oWindow.fWPtr := vWhichWindow;
- oWindow.Activate;
-
- SetMyMenuBar;
- END; {DoActivate}
-
- {========================================}
- PROCEDURE DoDiskEvent;
- VAR
- vPt: Point;
- vErr: OSErr;
-
- BEGIN
- IF HiWrd(gEvent.message) <> noErr THEN
- BEGIN
- CenterDialogBox(290, 100, vPt);
- vErr := DIBadMount(vPt, gEvent.message);
- IF vErr IN [1, 2, noErr, ioErr, badMDBErr, noMacDskErr] THEN
- ELSE IF OSError(vErr) THEN
- END;
- END; {DoDiskEvent}
-
- {========================================}
- PROCEDURE DoMFEvent;
- VAR
- vWhichWindow: WindowPtr;
-
- BEGIN
- IF Odd(gEvent.message) THEN
- BitSet(@gEvent.modifiers, 15)
- ELSE
- BitClr(@gEvent.modifiers, 15);
- IF IsAppWindow(FrontWindow) THEN
- BEGIN
- oWindow := TWindow(GetWRefCon(FrontWindow));
- oWindow.fWPtr := FrontWindow;
- oWindow.Activate;
- END;
- END; {DoMFEvent}
-
- {========================================}
- PROCEDURE ShutDown;
- BEGIN
- DisposHandle(Handle(gPrintHdl));
- DisposeRgn(gMouseRgn);
- DisposeStdMenus;
- DisposeMyMenus;
- END; {ShutDown}
-
- {========================================}
- {$I-}
- BEGIN {main}
- InitToolbox(kMasters);
- InitGlobals;
- InitRects;
- InitPrint;
- InitStdMenus;
- InitMyMenus;
- DrawMenuBar;
- CheckFinder;
-
- REPEAT
- DoApplTasks;
- IF gMFEvent THEN
- gNextEvent := WaitNextEvent(everyEvent, gEvent, gSleep, gMouseRgn)
- ELSE
- BEGIN
- SystemTask;
- gNextEvent := GetNextEvent(everyEvent, gEvent);
- END;
- IF gNextEvent THEN
- CASE gEvent.what OF
- NullEvent:
- ;
- MouseDown:
- DoMouseDown;
- KeyDown:
- DoKeyDown;
- AutoKey:
- DoKeyDown;
- UpdateEvt:
- DoUpdate;
- ActivateEvt:
- DoActivate;
- DiskEvt:
- DoDiskEvent;
- NetworkEvt:
- ;
- DriverEvt:
- ;
- App1Evt:
- ;
- App2Evt:
- ;
- App3Evt:
- ;
- App4Evt:
- DoMFEvent;
- OTHERWISE
- END;
- UNTIL gDone;
-
- ShutDown;
- END. {main}
- {***********************************}