Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!linus!philabs!cmcl2!seismo!rochester!bullwinkle!uw-beaver!tikal!bobc From: bobc@tikal.UUCP (Bob Campbell) Newsgroups: net.sources.mac Subject: ETHZ Standalone Implementation Modules (6 of 6) Message-ID: <436@tikal.UUCP> Date: Thu, 15-May-86 13:19:58 EDT Article-I.D.: tikal.436 Posted: Thu May 15 13:19:58 1986 Date-Received: Sun, 18-May-86 12:21:52 EDT Reply-To: bobc@tikal.UUCP (Bob Campbell) Organization: Teltone Corp., Kirkland, WA Lines: 3831 # The rest of this file is a shell script which will extract: # Terminal.MOD TextEdit.MOD Toolbox.MOD WindowManager.MOD echo x - Terminal.MOD cat >Terminal.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE Terminal; (* A.Wespisser, 20-NOV-84 * J.Wyttenbach 11-jan-85 * B.Campbell 29-Dec-85 * * NOTE: - The procedures "KeyPress" and "GotoXY" and "ClearTerminal" are not * contained in module "Terminal" on SMAKY8. * - "BusyRead", "ReadString", "KeyPress" and "GotoXY" and "ClearTerminal" * are not required by the compiler itself. *) FROM SYSTEM IMPORT ADR; FROM MacSYSTEM IMPORT LONGINT; FROM QuickDraw IMPORT Rect,Point,screenBits,thePort,GrafPtr,GrafPort, SetRect,SetPort,GetPort,EraseRect,RgnHandle,DrawChar, ScrollRect,MoveTo,SetOrigin,GetPen; FROM Regions IMPORT NewRgn,DisposeRgn; FROM WindowManager IMPORT WindowRecord,WindowPtr,SelectWindow, BeginUpdate,EndUpdate,FrontWindow,inMenuBar,inSysWindow, inDrag,inContent,NewWindow,noGrowDocProc; FROM FontManager IMPORT FontInfo,GetFontInfo; FROM EventManager IMPORT FlushEvents,everyEvent,GetNextEvent,EventRecord, mouseDown,keyDown,autoKey,activateEvt,updateEvt, activMask,charCodeMask,shiftKey,EventAvail,keyDownMask,autoKeyMask; CONST etx = 03C; bs = 10C; ht = 11C; eoln = 12C; cr = 15C; VAR Font:FontInfo; myWindow:WindowPtr; wRecord:WindowRecord; Width,Height:INTEGER; FontHeight:INTEGER; PROCEDURE DoWriteLn; VAR P:Point; theUpdateRgn:RgnHandle; BEGIN GetPen(P); P.h := 0; P.v := P.v + FontHeight; IF (P.v >= Height) THEN theUpdateRgn := NewRgn(); ScrollRect(myWindow^.portRect,0,-FontHeight,theUpdateRgn); DisposeRgn (theUpdateRgn); P.v := P.v - FontHeight END (*IF*); MoveTo(P.h,P.v); END DoWriteLn; PROCEDURE DoWrite(ch:CHAR); VAR P:Point; BEGIN IF (ch >= ' ') THEN DrawChar(ch); GetPen(P); IF ((P.h + Font.widMax) >= Width) THEN DoWriteLn END ELSIF (ch = eoln) THEN DoWriteLn; ELSIF (ch = cr) THEN MoveTo(0,P.v) ELSIF (ch = ht) THEN (* TAB *) DrawChar(' ') (* oh well this is easy *) END (*IF*) END DoWrite; PROCEDURE Write (ch: CHAR); VAR OldPort : GrafPtr; P : Point; BEGIN GetPort(OldPort); SetPort(myWindow); DoWrite(ch); SetPort(OldPort); END Write; PROCEDURE WriteString(VAR s:ARRAY OF CHAR); VAR I:CARDINAL; OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); I := 0; WHILE ((I <= HIGH(s)) AND (s[I] # 0C)) DO DoWrite(s[I]); INC(I) END (* FOR *); SetPort(OldPort); END WriteString; PROCEDURE WriteLn; (*terminate line*) VAR I:INTEGER; OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); DoWriteLn; SetPort(OldPort); END WriteLn; VAR LastChar : CHAR; RepeatChar : BOOLEAN; PROCEDURE DoRead(VAR ch:CHAR); VAR Event : EventRecord; BEGIN IF (RepeatChar) THEN RepeatChar := FALSE; ELSE WHILE (NOT GetNextEvent(keyDownMask+autoKeyMask,Event)) DO END; LastChar := Event.CharacterCode; END; ch := LastChar END DoRead; PROCEDURE Read(VAR ch:CHAR); BEGIN DoRead(ch); Write(ch) END Read; PROCEDURE ReadString(VAR S : ARRAY OF CHAR); VAR i : CARDINAL; BEGIN i := 0; (* Assert HIGH(S) >= 0 *) LOOP DoRead(S[i]); IF (S[i] < ' ') THEN IF (S[i] = bs) AND (i > 0) THEN Write('\'); Write(S[i]); DEC(i) ELSIF (S[i] # ht) THEN WriteLn; EXIT END ELSE Write(S[i]); IF (i < HIGH(S)) THEN INC(i) END; IF (i = HIGH(S)) THEN WriteLn; EXIT END; END END; IF (i < HIGH(S)) OR (S[i] < ' ') THEN S[i] := 0C (* Null Terminated *) END END ReadString; PROCEDURE ReadLn (VAR S:ARRAY OF CHAR); VAR i : CARDINAL; c : CHAR; BEGIN i := 0; LOOP DoRead(c); IF (c < ' ') THEN IF (c = bs) AND (i > 0) THEN Write('\'); Write(c); DEC(i) ELSIF (c = cr) OR (c = eoln) OR (c = etx) THEN IF (i <= HIGH(S)) THEN S[i] := 0C END; WriteLn; EXIT END ELSE Write(c); IF (i <= HIGH(S)) THEN S[i] := c; INC(i) END; END END; END ReadLn; PROCEDURE BusyRead(VAR ch:CHAR); BEGIN IF KeyPress() THEN DoRead(ch) ELSE ch := 0C END END BusyRead; PROCEDURE ReadAgain; (* causes the last character read to be returned again * upon the next call of Read *) BEGIN RepeatChar := TRUE END ReadAgain; PROCEDURE KeyPress():BOOLEAN; VAR Event : EventRecord; BEGIN RETURN(EventAvail(keyDownMask,Event)) END KeyPress; PROCEDURE GotoXY(C,R:CARDINAL); (* Move to column x, row y *) VAR OldPort:GrafPtr; X,Y:INTEGER; BEGIN WITH Font DO X := INTEGER(C) * widMax; Y := INTEGER(R) * FontHeight END; GetPort(OldPort); SetPort(myWindow); MoveTo(X,Y); SetPort(OldPort); END GotoXY; PROCEDURE ClearTerminal; VAR OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); EraseRect(myWindow^.portRect); MoveTo(0,0); SetPort(OldPort); END ClearTerminal; PROCEDURE InitTerminal; VAR WindowRect : Rect; BEGIN RepeatChar := FALSE; FlushEvents(everyEvent,0); WITH screenBits.bounds DO SetRect(WindowRect,4,40,right-4,bottom-4) END; myWindow := NewWindow(ADR(wRecord),WindowRect,'Terminal', TRUE,noGrowDocProc,WindowPtr(-1),FALSE,4); GetFontInfo(Font); WITH Font DO FontHeight := ascent + descent + leading END; SetPort(myWindow); WITH myWindow^.portRect DO Width := (right - left) - 3; Height:= (bottom - top) - (FontHeight + 3) END; SetOrigin(-2,-(2 + Font.ascent)); END InitTerminal; BEGIN InitTerminal END Terminal. !Funky!Stuff! echo x - TextEdit.MOD cat >TextEdit.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE TextEdit; FROM SYSTEM IMPORT ADDRESS,ADR,CODE; FROM MacSYSTEM IMPORT Handle,LONGINT,OSErr; FROM QuickDraw IMPORT Style,Rect,Point,GrafPtr; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE TENew(VAR destRect,viewRect:Rect):TEHandle; (* VAR is for Modula is really by value *) (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D2H); CODE(RestoreA7); CODE(Return); END TENew; PROCEDURE TEDispose(hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CDH); CODE(RestoreA7); CODE(Return); END TEDispose; (* Accessing the Text of an Edit Record *) PROCEDURE TESetText (text:ADDRESS;length:LONGINT;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CFH); CODE(RestoreA7); CODE(Return); END TESetText; PROCEDURE TEGetText (hTE: TEHandle):CharsHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CBH); CODE(RestoreA7); CODE(Return); END TEGetText; (*Insertion Point and Selection Range*) PROCEDURE TEIdle (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DAH); CODE(RestoreA7); CODE(Return); END TEIdle; PROCEDURE xTEClick (pt:LONGINT;extend:BOOLEAN;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D4H); CODE(RestoreA7); CODE(Return); END xTEClick; PROCEDURE TEClick (pt:Point;extend:BOOLEAN;hTE:TEHandle); (*$P+*)(*$S-*) BEGIN xTEClick(pt.param,extend,hTE); END TEClick; PROCEDURE TESetSelect (selStart,selEnd: LONGINT; hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D1H); CODE(RestoreA7); CODE(Return); END TESetSelect; PROCEDURE TEActivate (hTE: TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D8H); CODE(RestoreA7); CODE(Return); END TEActivate; PROCEDURE TEDeactivate (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D9H); CODE(RestoreA7); CODE(Return); END TEDeactivate; (* Editing *) PROCEDURE xTEKey (key:CARDINAL;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DCH); CODE(RestoreA7); CODE(Return); END xTEKey; PROCEDURE TEKey (key:CHAR;hTE:TEHandle); (*$P+*)(*$S-*) BEGIN xTEKey(ORD(key),hTE); END TEKey; PROCEDURE TECut (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D6H); CODE(RestoreA7); CODE(Return); END TECut; PROCEDURE TECopy (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D5H); CODE(RestoreA7); CODE(Return); END TECopy; PROCEDURE TEPaste (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DBH); CODE(RestoreA7); CODE(Return); END TEPaste; PROCEDURE TEDelete (hTE: TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D7H); CODE(RestoreA7); CODE(Return); END TEDelete; PROCEDURE TEInsert (text:ADDRESS;length:LONGINT;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DEH); CODE(RestoreA7); CODE(Return); END TEInsert; (* Text Display and Scrolling *) PROCEDURE TESetJust (just:INTEGER;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DFH); CODE(RestoreA7); CODE(Return); END TESetJust; PROCEDURE TEUpdate (VAR rUpdate: Rect; hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D3H); CODE(RestoreA7); CODE(Return); END TEUpdate; PROCEDURE TextBox (text:ADDRESS; length:LONGINT; VAR box:Rect; just:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CEH); CODE(RestoreA7); CODE(Return); END TextBox; PROCEDURE TEScroll (dh,dv:INTEGER;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DDH); CODE(RestoreA7); CODE(Return); END TEScroll; (* Scrap Handling *) PROCEDURE TEFromScrap():OSErr; (*$P+*) (* [Not in ROM] * VAR * pss : PScrapStuff; * (*$P+*) * BEGIN * pss := InfoScrap(); * TEScrpLength := pss.scrapSize; * TEScrpHandle := pss.scrapHandle; * END TEFromScrap; *) BEGIN END TEFromScrap; PROCEDURE TEToScrap():OSErr; (*$P+*) BEGIN END TEToScrap; PROCEDURE TEScrapHandle():Handle; (*$P+*) (*$S-*) BEGIN RETURN(TEScrpHandle) END TEScrapHandle; PROCEDURE TEGetScrapLen():LONGINT; (*$P+*) (*$S-*) BEGIN RETURN(TEScrpLength) END TEGetScrapLen; PROCEDURE TESetScrapLen(length:LONGINT); (*$P+*)(*$S-*) BEGIN TEScrpLength := length END TESetScrapLen; (* Advanced Routine *) PROCEDURE SetWordBreak(wBrkProc:ADDRESS; hTE:TEHandle); (*[Not in ROM]*) (*$P+*)(*$S-*) BEGIN END SetWordBreak; PROCEDURE SetClikLoop(clikProc:ADDRESS; hTE:TEHandle); (*$P+*)(*$S-*) BEGIN END SetClikLoop; PROCEDURE TECalText (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D0H); CODE(RestoreA7); CODE(Return); END TECalText; BEGIN CODE(0A9CCH) END TextEdit. !Funky!Stuff! echo x - Toolbox.MOD cat >Toolbox.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE Toolbox; FROM SYSTEM IMPORT ADDRESS,CODE,ADR; FROM MacSYSTEM IMPORT Fixed,Int64Bit,LONGINT,StringHandle,Handle; FROM QuickDraw IMPORT Pattern,Point,Rect; FROM PascalStrings IMPORT MakePascalString; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE FixRatio(numer,denom:INTEGER):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A869H); CODE(RestoreA7); CODE(Return); END FixRatio; PROCEDURE FixMul(a,b:Fixed):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A868H); CODE(RestoreA7); CODE(Return); END FixMul; PROCEDURE FixRound(x:Fixed):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86CH); CODE(RestoreA7); CODE(Return); END FixRound; (*String*) PROCEDURE xNewString(theString:ADDRESS):StringHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A906H); CODE(RestoreA7); CODE(Return); END xNewString; PROCEDURE NewString(VAR theString:ARRAY OF CHAR):StringHandle; (*$P+*)(*$S-*) VAR Str:ARRAY [0..255] OF CHAR; BEGIN MakePascalString(theString,Str); RETURN(xNewString(ADR(Str))) END NewString; PROCEDURE xSetString(h:StringHandle;theString:ADDRESS); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A907H); CODE(RestoreA7); CODE(Return); END xSetString; PROCEDURE SetString(h:StringHandle;VAR theString:ARRAY OF CHAR); (*$P+*)(*$S-*) VAR Str:ARRAY [0..255] OF CHAR; BEGIN MakePascalString(theString,Str); xSetString(h,ADR(Str)) END SetString; PROCEDURE GetString(StringID:INTEGER):StringHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9BAH); CODE(RestoreA7); CODE(Return); END GetString; PROCEDURE GetIndString(VAR theString:ARRAY OF CHAR;strListID:INTEGER; index:INTEGER); (* no trap macro *) (*$P+*)(*$S-*) BEGIN END GetIndString; (*byte manipulation*) PROCEDURE Munger(h:Handle;offset:LONGINT;ptrl:ADDRESS;len1:LONGINT; ptr2:ADDRESS;len2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9E0H); CODE(RestoreA7); CODE(Return); END Munger; PROCEDURE PackBits(VAR srcPtr,dstPtr:ADDRESS; srcBytes:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8CFH); CODE(RestoreA7); CODE(Return); END PackBits; PROCEDURE UnpackBits(VAR srcPtr,dstPtr:ADDRESS; dstBytes:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8D0H); CODE(RestoreA7); CODE(Return); END UnpackBits; (*bit Manipulation*) PROCEDURE BitTst(bytePtr:ADDRESS;bitNum:LONGINT):BOOLEAN; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85DH); CODE(RestoreA7); CODE(Return); END BitTst; PROCEDURE BitSet(bytePtr:ADDRESS;bitNum:LONGINT); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85EH); CODE(RestoreA7); CODE(Return); END BitSet; PROCEDURE BitClr(bytePtr:ADDRESS;bitNum:LONGINT); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85FH); CODE(RestoreA7); CODE(Return); END BitClr; (*Logical Operations*) PROCEDURE BitAnd(val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A858H); CODE(RestoreA7); CODE(Return); END BitAnd; PROCEDURE BitOr (val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85BH); CODE(RestoreA7); CODE(Return); END BitOr; PROCEDURE BitXor(val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A859H); CODE(RestoreA7); CODE(Return); END BitXor; PROCEDURE BitNot(val:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85AH); CODE(RestoreA7); CODE(Return); END BitNot; PROCEDURE BitShift(value:LONGINT;count:INTEGER):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85CH); CODE(RestoreA7); CODE(Return); END BitShift; (*Other Operations on Long Integers*) PROCEDURE HiWord(x:LONGINT):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86AH); CODE(RestoreA7); CODE(Return); END HiWord; PROCEDURE LoWord(x:LONGINT):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86BH); CODE(RestoreA7); CODE(Return); END LoWord; PROCEDURE LongMul(a,b:LONGINT;VAR dest:Int64Bit); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A867H); CODE(RestoreA7); CODE(Return); END LongMul; (* Graphics Utilities *) PROCEDURE ScreenRes(VAR scrnHRes,scrnVRes:INTEGER); (*$P+*)(*$S-*) BEGIN scrnHRes := ScrHRes; scrnVRes := ScrVRes END ScreenRes; PROCEDURE GetIcon(iconID:INTEGER):Handle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9BBH); CODE(RestoreA7); CODE(Return); END GetIcon; PROCEDURE PlotIcon(theRect:Rect;theIcon:Handle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A94BH); CODE(RestoreA7); CODE(Return); END PlotIcon; PROCEDURE GetPattern(patID:INTEGER):PatHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9B8H); CODE(RestoreA7); CODE(Return); END GetPattern; PROCEDURE GetIndPattern(VAR thePattern:Pattern;patListID:INTEGER; index:INTEGER); (* no trap macro *) (*$P+*)(*$S-*) BEGIN END GetIndPattern; (* Miscellaneous Utilities *) PROCEDURE Random():INTEGER; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A861H); CODE(RestoreA7);CODE(Return); END Random; PROCEDURE xStuffHex (thingPtr:ADDRESS;s:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A866H); CODE(RestoreA7);CODE(Return); END xStuffHex; PROCEDURE StuffHex (thingPtr:ADDRESS;VAR s:ARRAY OF CHAR); (*$P+*)(*$S-*) VAR s1:ARRAY[0..255] OF CHAR; BEGIN MakePascalString(s,s1); xStuffHex(thingPtr,ADR(s1)) END StuffHex; PROCEDURE xDeltaPoint(ptA,ptB:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A94FH); CODE(RestoreA7); CODE(Return); END xDeltaPoint; PROCEDURE DeltaPoint(ptA,ptB:Point):LONGINT; (*$P+*)(*$S-*) BEGIN RETURN(xDeltaPoint(ptA.param,ptB.param)) END DeltaPoint; PROCEDURE SlopeFromAngle(angle:INTEGER):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8BCH); CODE(RestoreA7); CODE(Return); END SlopeFromAngle; PROCEDURE AngleFromSlope(slope:Fixed):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8C4H); CODE(RestoreA7); CODE(Return); END AngleFromSlope; END Toolbox. !Funky!Stuff! echo x - WindowManager.MOD cat >WindowManager.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE WindowManager; FROM SYSTEM IMPORT ADDRESS,WORD,CODE,ADR,REGISTER; FROM MacSYSTEM IMPORT LONGINT; FROM FontManager IMPORT FontInfo; (* Init Font Manager *) FROM QuickDraw IMPORT GrafPort,GrafPtr,Point,VHSelect, Rect,RgnHandle; FROM Pictures IMPORT PicHandle; FROM EventManager IMPORT EventRecord; FROM PascalStrings IMPORT MakePascalString,MakeModulaString; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE InitWindows; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A912H); CODE(RestoreA7);CODE(Return); END InitWindows; PROCEDURE xNewWindow(wStorage:ADDRESS;VAR windowRect:Rect; title:ADDRESS;visible:BOOLEAN;windowType:INTEGER; behindWindow:WindowPtr;hasClose:BOOLEAN; refCon:LONGINT):WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A913H); CODE(RestoreA7);CODE(Return); END xNewWindow; PROCEDURE NewWindow(wStorage:ADDRESS;VAR windowRect:Rect; VAR title:ARRAY OF CHAR;visible:BOOLEAN;windowType:INTEGER; behindWindow:WindowPtr;hasClose:BOOLEAN; refCon:LONGINT):WindowPtr; VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN MakePascalString(title,s1); RETURN(xNewWindow(wStorage,windowRect,ADR(s1),visible, windowType,behindWindow,hasClose,refCon)) END NewWindow; PROCEDURE GetNewWindow(templateID:INTEGER; wStorage:ADDRESS;behindWindow:WindowPtr):WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A9BDH); CODE(RestoreA7);CODE(Return); END GetNewWindow; PROCEDURE CloseWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92DH); CODE(RestoreA7);CODE(Return); END CloseWindow; PROCEDURE DisposeWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A914H); CODE(RestoreA7);CODE(Return); END DisposeWindow; PROCEDURE xSetWTitle(theWindow:WindowPtr;newTitle:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91AH); CODE(RestoreA7);CODE(Return); END xSetWTitle; PROCEDURE SetWTitle(theWindow:WindowPtr;VAR newTitle:ARRAY OF CHAR); VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN MakePascalString(newTitle,s1); xSetWTitle(theWindow,ADR(s1)); END SetWTitle; PROCEDURE xGetWTitle(theWindow:WindowPtr;theTitle:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A919H); CODE(RestoreA7);CODE(Return); END xGetWTitle; PROCEDURE GetWTitle(theWindow:WindowPtr;VAR theTitle:ARRAY OF CHAR); VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN xGetWTitle(theWindow,ADR(s1)); MakeModulaString(s1,theTitle); END GetWTitle; PROCEDURE SetWRefCon(theWindow:WindowPtr;newRefCon:LONGINT); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A918H); CODE(RestoreA7);CODE(Return); END SetWRefCon; PROCEDURE GetWRefCon(theWindow:WindowPtr):LONGINT; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A917H); CODE(RestoreA7);CODE(Return); END GetWRefCon; PROCEDURE HideWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A916H); CODE(RestoreA7);CODE(Return); END HideWindow; PROCEDURE ShowWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A915H); CODE(RestoreA7);CODE(Return); END ShowWindow; PROCEDURE ShowHide(theWindow:WindowPtr;showFlag:BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A908H); CODE(RestoreA7);CODE(Return); END ShowHide; PROCEDURE MoveWindow(theWindow: WindowPtr; hGlobal,vGlobal: INTEGER; active: BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91BH); CODE(RestoreA7);CODE(Return); END MoveWindow; PROCEDURE SizeWindow (theWindow: WindowPtr; newWidth,newHeight: INTEGER; update: BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91DH); CODE(RestoreA7);CODE(Return); END SizeWindow; PROCEDURE FrontWindow():WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A924H); CODE(RestoreA7);CODE(Return); END FrontWindow; PROCEDURE BringToFront(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A920H); CODE(RestoreA7);CODE(Return); END BringToFront; PROCEDURE SendBehind(theWindow:WindowPtr;behindWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A921H); CODE(RestoreA7);CODE(Return); END SendBehind; PROCEDURE HiliteWindow(theWindow:WindowPtr;onOrOff:BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91CH); CODE(RestoreA7);CODE(Return); END HiliteWindow; PROCEDURE DrawGrowIcon(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A904H); CODE(RestoreA7);CODE(Return); END DrawGrowIcon; PROCEDURE BeginUpdate(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A922H); CODE(RestoreA7);CODE(Return); END BeginUpdate; PROCEDURE EndUpdate(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A923H); CODE(RestoreA7);CODE(Return); END EndUpdate; PROCEDURE InvalRect(VAR badRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A928H); CODE(RestoreA7);CODE(Return); END InvalRect; PROCEDURE InvalRgn(badRegion:RgnHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A927H); CODE(RestoreA7);CODE(Return); END InvalRgn; PROCEDURE ValidRect(VAR goodRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92AH); CODE(RestoreA7);CODE(Return); END ValidRect; PROCEDURE ValidRgn(goodRegion:RgnHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A929H); CODE(RestoreA7);CODE(Return); END ValidRgn; PROCEDURE SetWindowPic (theWindow:WindowPtr;thePicture:PicHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92EH); CODE(RestoreA7);CODE(Return); END SetWindowPic; PROCEDURE GetWindowPic(theWindow:WindowPtr):PicHandle; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92FH); CODE(RestoreA7);CODE(Return); END GetWindowPic; PROCEDURE xFindWindow(mousePoint:LONGINT;VAR theWindow:WindowPtr):INTEGER; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92CH); CODE(RestoreA7);CODE(Return); END xFindWindow; PROCEDURE FindWindow (mousePoint:Point;VAR theWindow:WindowPtr):INTEGER; (*$P+*)(*$S-*) BEGIN RETURN(xFindWindow(mousePoint.param,theWindow)) END FindWindow; PROCEDURE SelectWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91FH); CODE(RestoreA7);CODE(Return); END SelectWindow; PROCEDURE xDragWindow (theWindow:WindowPtr; startPoint:LONGINT; VAR LimitRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A925H); CODE(RestoreA7);CODE(Return); END xDragWindow; PROCEDURE DragWindow (theWindow:WindowPtr; startPoint:Point; LimitRect:Rect); (*$P+*)(*$S-*) BEGIN xDragWindow(theWindow,startPoint.param,LimitRect) END DragWindow; PROCEDURE xGrowWindow (theWindow: WindowPtr; startPoint: LONGINT; VAR sizeRect: Rect):LONGINT; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92BH); CODE(RestoreA7);CODE(Return); END xGrowWindow; PROCEDURE GrowWindow (theWindow: WindowPtr; startPoint: Point; sizeRect: Rect):LONGINT; (*$P+*)(*$S-*) BEGIN RETURN(xGrowWindow(theWindow,startPoint.param,sizeRect)) END GrowWindow; PROCEDURE xTrackGoAway(wind:WindowPtr;start:LONGINT):BOOLEAN; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91EH); CODE(RestoreA7);CODE(Return); END xTrackGoAway; PROCEDURE TrackGoAway(wind:WindowPtr;start:Point):BOOLEAN; (*$P+*)(*$S-*) BEGIN RETURN(xTrackGoAway(wind,start.param)) END TrackGoAway; PROCEDURE GetWMgrPort(VAR wMgrPort:GrafPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A910H); CODE(RestoreA7);CODE(Return); END GetWMgrPort; BEGIN InitWindows END WindowManager. !Funky!Stuff! # The rest of this file is a shell script which will extract: # Terminal.MOD TextEdit.MOD Toolbox.MOD WindowManager.MOD echo x - Terminal.MOD cat >Terminal.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE Terminal; (* A.Wespisser, 20-NOV-84 * J.Wyttenbach 11-jan-85 * B.Campbell 29-Dec-85 * * NOTE: - The procedures "KeyPress" and "GotoXY" and "ClearTerminal" are not * contained in module "Terminal" on SMAKY8. * - "BusyRead", "ReadString", "KeyPress" and "GotoXY" and "ClearTerminal" * are not required by the compiler itself. *) FROM SYSTEM IMPORT ADR; FROM MacSYSTEM IMPORT LONGINT; FROM QuickDraw IMPORT Rect,Point,screenBits,thePort,GrafPtr,GrafPort, SetRect,SetPort,GetPort,EraseRect,RgnHandle,DrawChar, ScrollRect,MoveTo,SetOrigin,GetPen; FROM Regions IMPORT NewRgn,DisposeRgn; FROM WindowManager IMPORT WindowRecord,WindowPtr,SelectWindow, BeginUpdate,EndUpdate,FrontWindow,inMenuBar,inSysWindow, inDrag,inContent,NewWindow,noGrowDocProc; FROM FontManager IMPORT FontInfo,GetFontInfo; FROM EventManager IMPORT FlushEvents,everyEvent,GetNextEvent,EventRecord, mouseDown,keyDown,autoKey,activateEvt,updateEvt, activMask,charCodeMask,shiftKey,EventAvail,keyDownMask,autoKeyMask; CONST etx = 03C; bs = 10C; ht = 11C; eoln = 12C; cr = 15C; VAR Font:FontInfo; myWindow:WindowPtr; wRecord:WindowRecord; Width,Height:INTEGER; FontHeight:INTEGER; PROCEDURE DoWriteLn; VAR P:Point; theUpdateRgn:RgnHandle; BEGIN GetPen(P); P.h := 0; P.v := P.v + FontHeight; IF (P.v >= Height) THEN theUpdateRgn := NewRgn(); ScrollRect(myWindow^.portRect,0,-FontHeight,theUpdateRgn); DisposeRgn (theUpdateRgn); P.v := P.v - FontHeight END (*IF*); MoveTo(P.h,P.v); END DoWriteLn; PROCEDURE DoWrite(ch:CHAR); VAR P:Point; BEGIN IF (ch >= ' ') THEN DrawChar(ch); GetPen(P); IF ((P.h + Font.widMax) >= Width) THEN DoWriteLn END ELSIF (ch = eoln) THEN DoWriteLn; ELSIF (ch = cr) THEN MoveTo(0,P.v) ELSIF (ch = ht) THEN (* TAB *) DrawChar(' ') (* oh well this is easy *) END (*IF*) END DoWrite; PROCEDURE Write (ch: CHAR); VAR OldPort : GrafPtr; P : Point; BEGIN GetPort(OldPort); SetPort(myWindow); DoWrite(ch); SetPort(OldPort); END Write; PROCEDURE WriteString(VAR s:ARRAY OF CHAR); VAR I:CARDINAL; OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); I := 0; WHILE ((I <= HIGH(s)) AND (s[I] # 0C)) DO DoWrite(s[I]); INC(I) END (* FOR *); SetPort(OldPort); END WriteString; PROCEDURE WriteLn; (*terminate line*) VAR I:INTEGER; OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); DoWriteLn; SetPort(OldPort); END WriteLn; VAR LastChar : CHAR; RepeatChar : BOOLEAN; PROCEDURE DoRead(VAR ch:CHAR); VAR Event : EventRecord; BEGIN IF (RepeatChar) THEN RepeatChar := FALSE; ELSE WHILE (NOT GetNextEvent(keyDownMask+autoKeyMask,Event)) DO END; LastChar := Event.CharacterCode; END; ch := LastChar END DoRead; PROCEDURE Read(VAR ch:CHAR); BEGIN DoRead(ch); Write(ch) END Read; PROCEDURE ReadString(VAR S : ARRAY OF CHAR); VAR i : CARDINAL; BEGIN i := 0; (* Assert HIGH(S) >= 0 *) LOOP DoRead(S[i]); IF (S[i] < ' ') THEN IF (S[i] = bs) AND (i > 0) THEN Write('\'); Write(S[i]); DEC(i) ELSIF (S[i] # ht) THEN WriteLn; EXIT END ELSE Write(S[i]); IF (i < HIGH(S)) THEN INC(i) END; IF (i = HIGH(S)) THEN WriteLn; EXIT END; END END; IF (i < HIGH(S)) OR (S[i] < ' ') THEN S[i] := 0C (* Null Terminated *) END END ReadString; PROCEDURE ReadLn (VAR S:ARRAY OF CHAR); VAR i : CARDINAL; c : CHAR; BEGIN i := 0; LOOP DoRead(c); IF (c < ' ') THEN IF (c = bs) AND (i > 0) THEN Write('\'); Write(c); DEC(i) ELSIF (c = cr) OR (c = eoln) OR (c = etx) THEN IF (i <= HIGH(S)) THEN S[i] := 0C END; WriteLn; EXIT END ELSE Write(c); IF (i <= HIGH(S)) THEN S[i] := c; INC(i) END; END END; END ReadLn; PROCEDURE BusyRead(VAR ch:CHAR); BEGIN IF KeyPress() THEN DoRead(ch) ELSE ch := 0C END END BusyRead; PROCEDURE ReadAgain; (* causes the last character read to be returned again * upon the next call of Read *) BEGIN RepeatChar := TRUE END ReadAgain; PROCEDURE KeyPress():BOOLEAN; VAR Event : EventRecord; BEGIN RETURN(EventAvail(keyDownMask,Event)) END KeyPress; PROCEDURE GotoXY(C,R:CARDINAL); (* Move to column x, row y *) VAR OldPort:GrafPtr; X,Y:INTEGER; BEGIN WITH Font DO X := INTEGER(C) * widMax; Y := INTEGER(R) * FontHeight END; GetPort(OldPort); SetPort(myWindow); MoveTo(X,Y); SetPort(OldPort); END GotoXY; PROCEDURE ClearTerminal; VAR OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); EraseRect(myWindow^.portRect); MoveTo(0,0); SetPort(OldPort); END ClearTerminal; PROCEDURE InitTerminal; VAR WindowRect : Rect; BEGIN RepeatChar := FALSE; FlushEvents(everyEvent,0); WITH screenBits.bounds DO SetRect(WindowRect,4,40,right-4,bottom-4) END; myWindow := NewWindow(ADR(wRecord),WindowRect,'Terminal', TRUE,noGrowDocProc,WindowPtr(-1),FALSE,4); GetFontInfo(Font); WITH Font DO FontHeight := ascent + descent + leading END; SetPort(myWindow); WITH myWindow^.portRect DO Width := (right - left) - 3; Height:= (bottom - top) - (FontHeight + 3) END; SetOrigin(-2,-(2 + Font.ascent)); END InitTerminal; BEGIN InitTerminal END Terminal. !Funky!Stuff! echo x - TextEdit.MOD cat >TextEdit.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE TextEdit; FROM SYSTEM IMPORT ADDRESS,ADR,CODE; FROM MacSYSTEM IMPORT Handle,LONGINT,OSErr; FROM QuickDraw IMPORT Style,Rect,Point,GrafPtr; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE TENew(VAR destRect,viewRect:Rect):TEHandle; (* VAR is for Modula is really by value *) (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D2H); CODE(RestoreA7); CODE(Return); END TENew; PROCEDURE TEDispose(hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CDH); CODE(RestoreA7); CODE(Return); END TEDispose; (* Accessing the Text of an Edit Record *) PROCEDURE TESetText (text:ADDRESS;length:LONGINT;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CFH); CODE(RestoreA7); CODE(Return); END TESetText; PROCEDURE TEGetText (hTE: TEHandle):CharsHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CBH); CODE(RestoreA7); CODE(Return); END TEGetText; (*Insertion Point and Selection Range*) PROCEDURE TEIdle (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DAH); CODE(RestoreA7); CODE(Return); END TEIdle; PROCEDURE xTEClick (pt:LONGINT;extend:BOOLEAN;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D4H); CODE(RestoreA7); CODE(Return); END xTEClick; PROCEDURE TEClick (pt:Point;extend:BOOLEAN;hTE:TEHandle); (*$P+*)(*$S-*) BEGIN xTEClick(pt.param,extend,hTE); END TEClick; PROCEDURE TESetSelect (selStart,selEnd: LONGINT; hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D1H); CODE(RestoreA7); CODE(Return); END TESetSelect; PROCEDURE TEActivate (hTE: TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D8H); CODE(RestoreA7); CODE(Return); END TEActivate; PROCEDURE TEDeactivate (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D9H); CODE(RestoreA7); CODE(Return); END TEDeactivate; (* Editing *) PROCEDURE xTEKey (key:CARDINAL;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DCH); CODE(RestoreA7); CODE(Return); END xTEKey; PROCEDURE TEKey (key:CHAR;hTE:TEHandle); (*$P+*)(*$S-*) BEGIN xTEKey(ORD(key),hTE); END TEKey; PROCEDURE TECut (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D6H); CODE(RestoreA7); CODE(Return); END TECut; PROCEDURE TECopy (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D5H); CODE(RestoreA7); CODE(Return); END TECopy; PROCEDURE TEPaste (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DBH); CODE(RestoreA7); CODE(Return); END TEPaste; PROCEDURE TEDelete (hTE: TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D7H); CODE(RestoreA7); CODE(Return); END TEDelete; PROCEDURE TEInsert (text:ADDRESS;length:LONGINT;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DEH); CODE(RestoreA7); CODE(Return); END TEInsert; (* Text Display and Scrolling *) PROCEDURE TESetJust (just:INTEGER;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DFH); CODE(RestoreA7); CODE(Return); END TESetJust; PROCEDURE TEUpdate (VAR rUpdate: Rect; hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D3H); CODE(RestoreA7); CODE(Return); END TEUpdate; PROCEDURE TextBox (text:ADDRESS; length:LONGINT; VAR box:Rect; just:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CEH); CODE(RestoreA7); CODE(Return); END TextBox; PROCEDURE TEScroll (dh,dv:INTEGER;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DDH); CODE(RestoreA7); CODE(Return); END TEScroll; (* Scrap Handling *) PROCEDURE TEFromScrap():OSErr; (*$P+*) (* [Not in ROM] * VAR * pss : PScrapStuff; * (*$P+*) * BEGIN * pss := InfoScrap(); * TEScrpLength := pss.scrapSize; * TEScrpHandle := pss.scrapHandle; * END TEFromScrap; *) BEGIN END TEFromScrap; PROCEDURE TEToScrap():OSErr; (*$P+*) BEGIN END TEToScrap; PROCEDURE TEScrapHandle():Handle; (*$P+*) (*$S-*) BEGIN RETURN(TEScrpHandle) END TEScrapHandle; PROCEDURE TEGetScrapLen():LONGINT; (*$P+*) (*$S-*) BEGIN RETURN(TEScrpLength) END TEGetScrapLen; PROCEDURE TESetScrapLen(length:LONGINT); (*$P+*)(*$S-*) BEGIN TEScrpLength := length END TESetScrapLen; (* Advanced Routine *) PROCEDURE SetWordBreak(wBrkProc:ADDRESS; hTE:TEHandle); (*[Not in ROM]*) (*$P+*)(*$S-*) BEGIN END SetWordBreak; PROCEDURE SetClikLoop(clikProc:ADDRESS; hTE:TEHandle); (*$P+*)(*$S-*) BEGIN END SetClikLoop; PROCEDURE TECalText (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D0H); CODE(RestoreA7); CODE(Return); END TECalText; BEGIN CODE(0A9CCH) END TextEdit. !Funky!Stuff! echo x - Toolbox.MOD cat >Toolbox.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE Toolbox; FROM SYSTEM IMPORT ADDRESS,CODE,ADR; FROM MacSYSTEM IMPORT Fixed,Int64Bit,LONGINT,StringHandle,Handle; FROM QuickDraw IMPORT Pattern,Point,Rect; FROM PascalStrings IMPORT MakePascalString; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE FixRatio(numer,denom:INTEGER):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A869H); CODE(RestoreA7); CODE(Return); END FixRatio; PROCEDURE FixMul(a,b:Fixed):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A868H); CODE(RestoreA7); CODE(Return); END FixMul; PROCEDURE FixRound(x:Fixed):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86CH); CODE(RestoreA7); CODE(Return); END FixRound; (*String*) PROCEDURE xNewString(theString:ADDRESS):StringHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A906H); CODE(RestoreA7); CODE(Return); END xNewString; PROCEDURE NewString(VAR theString:ARRAY OF CHAR):StringHandle; (*$P+*)(*$S-*) VAR Str:ARRAY [0..255] OF CHAR; BEGIN MakePascalString(theString,Str); RETURN(xNewString(ADR(Str))) END NewString; PROCEDURE xSetString(h:StringHandle;theString:ADDRESS); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A907H); CODE(RestoreA7); CODE(Return); END xSetString; PROCEDURE SetString(h:StringHandle;VAR theString:ARRAY OF CHAR); (*$P+*)(*$S-*) VAR Str:ARRAY [0..255] OF CHAR; BEGIN MakePascalString(theString,Str); xSetString(h,ADR(Str)) END SetString; PROCEDURE GetString(StringID:INTEGER):StringHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9BAH); CODE(RestoreA7); CODE(Return); END GetString; PROCEDURE GetIndString(VAR theString:ARRAY OF CHAR;strListID:INTEGER; index:INTEGER); (* no trap macro *) (*$P+*)(*$S-*) BEGIN END GetIndString; (*byte manipulation*) PROCEDURE Munger(h:Handle;offset:LONGINT;ptrl:ADDRESS;len1:LONGINT; ptr2:ADDRESS;len2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9E0H); CODE(RestoreA7); CODE(Return); END Munger; PROCEDURE PackBits(VAR srcPtr,dstPtr:ADDRESS; srcBytes:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8CFH); CODE(RestoreA7); CODE(Return); END PackBits; PROCEDURE UnpackBits(VAR srcPtr,dstPtr:ADDRESS; dstBytes:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8D0H); CODE(RestoreA7); CODE(Return); END UnpackBits; (*bit Manipulation*) PROCEDURE BitTst(bytePtr:ADDRESS;bitNum:LONGINT):BOOLEAN; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85DH); CODE(RestoreA7); CODE(Return); END BitTst; PROCEDURE BitSet(bytePtr:ADDRESS;bitNum:LONGINT); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85EH); CODE(RestoreA7); CODE(Return); END BitSet; PROCEDURE BitClr(bytePtr:ADDRESS;bitNum:LONGINT); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85FH); CODE(RestoreA7); CODE(Return); END BitClr; (*Logical Operations*) PROCEDURE BitAnd(val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A858H); CODE(RestoreA7); CODE(Return); END BitAnd; PROCEDURE BitOr (val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85BH); CODE(RestoreA7); CODE(Return); END BitOr; PROCEDURE BitXor(val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A859H); CODE(RestoreA7); CODE(Return); END BitXor; PROCEDURE BitNot(val:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85AH); CODE(RestoreA7); CODE(Return); END BitNot; PROCEDURE BitShift(value:LONGINT;count:INTEGER):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85CH); CODE(RestoreA7); CODE(Return); END BitShift; (*Other Operations on Long Integers*) PROCEDURE HiWord(x:LONGINT):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86AH); CODE(RestoreA7); CODE(Return); END HiWord; PROCEDURE LoWord(x:LONGINT):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86BH); CODE(RestoreA7); CODE(Return); END LoWord; PROCEDURE LongMul(a,b:LONGINT;VAR dest:Int64Bit); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A867H); CODE(RestoreA7); CODE(Return); END LongMul; (* Graphics Utilities *) PROCEDURE ScreenRes(VAR scrnHRes,scrnVRes:INTEGER); (*$P+*)(*$S-*) BEGIN scrnHRes := ScrHRes; scrnVRes := ScrVRes END ScreenRes; PROCEDURE GetIcon(iconID:INTEGER):Handle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9BBH); CODE(RestoreA7); CODE(Return); END GetIcon; PROCEDURE PlotIcon(theRect:Rect;theIcon:Handle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A94BH); CODE(RestoreA7); CODE(Return); END PlotIcon; PROCEDURE GetPattern(patID:INTEGER):PatHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9B8H); CODE(RestoreA7); CODE(Return); END GetPattern; PROCEDURE GetIndPattern(VAR thePattern:Pattern;patListID:INTEGER; index:INTEGER); (* no trap macro *) (*$P+*)(*$S-*) BEGIN END GetIndPattern; (* Miscellaneous Utilities *) PROCEDURE Random():INTEGER; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A861H); CODE(RestoreA7);CODE(Return); END Random; PROCEDURE xStuffHex (thingPtr:ADDRESS;s:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A866H); CODE(RestoreA7);CODE(Return); END xStuffHex; PROCEDURE StuffHex (thingPtr:ADDRESS;VAR s:ARRAY OF CHAR); (*$P+*)(*$S-*) VAR s1:ARRAY[0..255] OF CHAR; BEGIN MakePascalString(s,s1); xStuffHex(thingPtr,ADR(s1)) END StuffHex; PROCEDURE xDeltaPoint(ptA,ptB:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A94FH); CODE(RestoreA7); CODE(Return); END xDeltaPoint; PROCEDURE DeltaPoint(ptA,ptB:Point):LONGINT; (*$P+*)(*$S-*) BEGIN RETURN(xDeltaPoint(ptA.param,ptB.param)) END DeltaPoint; PROCEDURE SlopeFromAngle(angle:INTEGER):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8BCH); CODE(RestoreA7); CODE(Return); END SlopeFromAngle; PROCEDURE AngleFromSlope(slope:Fixed):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8C4H); CODE(RestoreA7); CODE(Return); END AngleFromSlope; END Toolbox. !Funky!Stuff! echo x - WindowManager.MOD cat >WindowManager.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE WindowManager; FROM SYSTEM IMPORT ADDRESS,WORD,CODE,ADR,REGISTER; FROM MacSYSTEM IMPORT LONGINT; FROM FontManager IMPORT FontInfo; (* Init Font Manager *) FROM QuickDraw IMPORT GrafPort,GrafPtr,Point,VHSelect, Rect,RgnHandle; FROM Pictures IMPORT PicHandle; FROM EventManager IMPORT EventRecord; FROM PascalStrings IMPORT MakePascalString,MakeModulaString; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE InitWindows; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A912H); CODE(RestoreA7);CODE(Return); END InitWindows; PROCEDURE xNewWindow(wStorage:ADDRESS;VAR windowRect:Rect; title:ADDRESS;visible:BOOLEAN;windowType:INTEGER; behindWindow:WindowPtr;hasClose:BOOLEAN; refCon:LONGINT):WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A913H); CODE(RestoreA7);CODE(Return); END xNewWindow; PROCEDURE NewWindow(wStorage:ADDRESS;VAR windowRect:Rect; VAR title:ARRAY OF CHAR;visible:BOOLEAN;windowType:INTEGER; behindWindow:WindowPtr;hasClose:BOOLEAN; refCon:LONGINT):WindowPtr; VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN MakePascalString(title,s1); RETURN(xNewWindow(wStorage,windowRect,ADR(s1),visible, windowType,behindWindow,hasClose,refCon)) END NewWindow; PROCEDURE GetNewWindow(templateID:INTEGER; wStorage:ADDRESS;behindWindow:WindowPtr):WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A9BDH); CODE(RestoreA7);CODE(Return); END GetNewWindow; PROCEDURE CloseWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92DH); CODE(RestoreA7);CODE(Return); END CloseWindow; PROCEDURE DisposeWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A914H); CODE(RestoreA7);CODE(Return); END DisposeWindow; PROCEDURE xSetWTitle(theWindow:WindowPtr;newTitle:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91AH); CODE(RestoreA7);CODE(Return); END xSetWTitle; PROCEDURE SetWTitle(theWindow:WindowPtr;VAR newTitle:ARRAY OF CHAR); VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN MakePascalString(newTitle,s1); xSetWTitle(theWindow,ADR(s1)); END SetWTitle; PROCEDURE xGetWTitle(theWindow:WindowPtr;theTitle:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A919H); CODE(RestoreA7);CODE(Return); END xGetWTitle; PROCEDURE GetWTitle(theWindow:WindowPtr;VAR theTitle:ARRAY OF CHAR); VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN xGetWTitle(theWindow,ADR(s1)); MakeModulaString(s1,theTitle); END GetWTitle; PROCEDURE SetWRefCon(theWindow:WindowPtr;newRefCon:LONGINT); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A918H); CODE(RestoreA7);CODE(Return); END SetWRefCon; PROCEDURE GetWRefCon(theWindow:WindowPtr):LONGINT; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A917H); CODE(RestoreA7);CODE(Return); END GetWRefCon; PROCEDURE HideWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A916H); CODE(RestoreA7);CODE(Return); END HideWindow; PROCEDURE ShowWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A915H); CODE(RestoreA7);CODE(Return); END ShowWindow; PROCEDURE ShowHide(theWindow:WindowPtr;showFlag:BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A908H); CODE(RestoreA7);CODE(Return); END ShowHide; PROCEDURE MoveWindow(theWindow: WindowPtr; hGlobal,vGlobal: INTEGER; active: BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91BH); CODE(RestoreA7);CODE(Return); END MoveWindow; PROCEDURE SizeWindow (theWindow: WindowPtr; newWidth,newHeight: INTEGER; update: BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91DH); CODE(RestoreA7);CODE(Return); END SizeWindow; PROCEDURE FrontWindow():WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A924H); CODE(RestoreA7);CODE(Return); END FrontWindow; PROCEDURE BringToFront(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A920H); CODE(RestoreA7);CODE(Return); END BringToFront; PROCEDURE SendBehind(theWindow:WindowPtr;behindWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A921H); CODE(RestoreA7);CODE(Return); END SendBehind; PROCEDURE HiliteWindow(theWindow:WindowPtr;onOrOff:BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91CH); CODE(RestoreA7);CODE(Return); END HiliteWindow; PROCEDURE DrawGrowIcon(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A904H); CODE(RestoreA7);CODE(Return); END DrawGrowIcon; PROCEDURE BeginUpdate(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A922H); CODE(RestoreA7);CODE(Return); END BeginUpdate; PROCEDURE EndUpdate(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A923H); CODE(RestoreA7);CODE(Return); END EndUpdate; PROCEDURE InvalRect(VAR badRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A928H); CODE(RestoreA7);CODE(Return); END InvalRect; PROCEDURE InvalRgn(badRegion:RgnHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A927H); CODE(RestoreA7);CODE(Return); END InvalRgn; PROCEDURE ValidRect(VAR goodRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92AH); CODE(RestoreA7);CODE(Return); END ValidRect; PROCEDURE ValidRgn(goodRegion:RgnHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A929H); CODE(RestoreA7);CODE(Return); END ValidRgn; PROCEDURE SetWindowPic (theWindow:WindowPtr;thePicture:PicHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92EH); CODE(RestoreA7);CODE(Return); END SetWindowPic; PROCEDURE GetWindowPic(theWindow:WindowPtr):PicHandle; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92FH); CODE(RestoreA7);CODE(Return); END GetWindowPic; PROCEDURE xFindWindow(mousePoint:LONGINT;VAR theWindow:WindowPtr):INTEGER; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92CH); CODE(RestoreA7);CODE(Return); END xFindWindow; PROCEDURE FindWindow (mousePoint:Point;VAR theWindow:WindowPtr):INTEGER; (*$P+*)(*$S-*) BEGIN RETURN(xFindWindow(mousePoint.param,theWindow)) END FindWindow; PROCEDURE SelectWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91FH); CODE(RestoreA7);CODE(Return); END SelectWindow; PROCEDURE xDragWindow (theWindow:WindowPtr; startPoint:LONGINT; VAR LimitRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A925H); CODE(RestoreA7);CODE(Return); END xDragWindow; PROCEDURE DragWindow (theWindow:WindowPtr; startPoint:Point; LimitRect:Rect); (*$P+*)(*$S-*) BEGIN xDragWindow(theWindow,startPoint.param,LimitRect) END DragWindow; PROCEDURE xGrowWindow (theWindow: WindowPtr; startPoint: LONGINT; VAR sizeRect: Rect):LONGINT; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92BH); CODE(RestoreA7);CODE(Return); END xGrowWindow; PROCEDURE GrowWindow (theWindow: WindowPtr; startPoint: Point; sizeRect: Rect):LONGINT; (*$P+*)(*$S-*) BEGIN RETURN(xGrowWindow(theWindow,startPoint.param,sizeRect)) END GrowWindow; PROCEDURE xTrackGoAway(wind:WindowPtr;start:LONGINT):BOOLEAN; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91EH); CODE(RestoreA7);CODE(Return); END xTrackGoAway; PROCEDURE TrackGoAway(wind:WindowPtr;start:Point):BOOLEAN; (*$P+*)(*$S-*) BEGIN RETURN(xTrackGoAway(wind,start.param)) END TrackGoAway; PROCEDURE GetWMgrPort(VAR wMgrPort:GrafPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A910H); CODE(RestoreA7);CODE(Return); END GetWMgrPort; BEGIN InitWindows END WindowManager. !Funky!Stuff! # The rest of this file is a shell script which will extract: # Terminal.MOD TextEdit.MOD Toolbox.MOD WindowManager.MOD echo x - Terminal.MOD cat >Terminal.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE Terminal; (* A.Wespisser, 20-NOV-84 * J.Wyttenbach 11-jan-85 * B.Campbell 29-Dec-85 * * NOTE: - The procedures "KeyPress" and "GotoXY" and "ClearTerminal" are not * contained in module "Terminal" on SMAKY8. * - "BusyRead", "ReadString", "KeyPress" and "GotoXY" and "ClearTerminal" * are not required by the compiler itself. *) FROM SYSTEM IMPORT ADR; FROM MacSYSTEM IMPORT LONGINT; FROM QuickDraw IMPORT Rect,Point,screenBits,thePort,GrafPtr,GrafPort, SetRect,SetPort,GetPort,EraseRect,RgnHandle,DrawChar, ScrollRect,MoveTo,SetOrigin,GetPen; FROM Regions IMPORT NewRgn,DisposeRgn; FROM WindowManager IMPORT WindowRecord,WindowPtr,SelectWindow, BeginUpdate,EndUpdate,FrontWindow,inMenuBar,inSysWindow, inDrag,inContent,NewWindow,noGrowDocProc; FROM FontManager IMPORT FontInfo,GetFontInfo; FROM EventManager IMPORT FlushEvents,everyEvent,GetNextEvent,EventRecord, mouseDown,keyDown,autoKey,activateEvt,updateEvt, activMask,charCodeMask,shiftKey,EventAvail,keyDownMask,autoKeyMask; CONST etx = 03C; bs = 10C; ht = 11C; eoln = 12C; cr = 15C; VAR Font:FontInfo; myWindow:WindowPtr; wRecord:WindowRecord; Width,Height:INTEGER; FontHeight:INTEGER; PROCEDURE DoWriteLn; VAR P:Point; theUpdateRgn:RgnHandle; BEGIN GetPen(P); P.h := 0; P.v := P.v + FontHeight; IF (P.v >= Height) THEN theUpdateRgn := NewRgn(); ScrollRect(myWindow^.portRect,0,-FontHeight,theUpdateRgn); DisposeRgn (theUpdateRgn); P.v := P.v - FontHeight END (*IF*); MoveTo(P.h,P.v); END DoWriteLn; PROCEDURE DoWrite(ch:CHAR); VAR P:Point; BEGIN IF (ch >= ' ') THEN DrawChar(ch); GetPen(P); IF ((P.h + Font.widMax) >= Width) THEN DoWriteLn END ELSIF (ch = eoln) THEN DoWriteLn; ELSIF (ch = cr) THEN MoveTo(0,P.v) ELSIF (ch = ht) THEN (* TAB *) DrawChar(' ') (* oh well this is easy *) END (*IF*) END DoWrite; PROCEDURE Write (ch: CHAR); VAR OldPort : GrafPtr; P : Point; BEGIN GetPort(OldPort); SetPort(myWindow); DoWrite(ch); SetPort(OldPort); END Write; PROCEDURE WriteString(VAR s:ARRAY OF CHAR); VAR I:CARDINAL; OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); I := 0; WHILE ((I <= HIGH(s)) AND (s[I] # 0C)) DO DoWrite(s[I]); INC(I) END (* FOR *); SetPort(OldPort); END WriteString; PROCEDURE WriteLn; (*terminate line*) VAR I:INTEGER; OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); DoWriteLn; SetPort(OldPort); END WriteLn; VAR LastChar : CHAR; RepeatChar : BOOLEAN; PROCEDURE DoRead(VAR ch:CHAR); VAR Event : EventRecord; BEGIN IF (RepeatChar) THEN RepeatChar := FALSE; ELSE WHILE (NOT GetNextEvent(keyDownMask+autoKeyMask,Event)) DO END; LastChar := Event.CharacterCode; END; ch := LastChar END DoRead; PROCEDURE Read(VAR ch:CHAR); BEGIN DoRead(ch); Write(ch) END Read; PROCEDURE ReadString(VAR S : ARRAY OF CHAR); VAR i : CARDINAL; BEGIN i := 0; (* Assert HIGH(S) >= 0 *) LOOP DoRead(S[i]); IF (S[i] < ' ') THEN IF (S[i] = bs) AND (i > 0) THEN Write('\'); Write(S[i]); DEC(i) ELSIF (S[i] # ht) THEN WriteLn; EXIT END ELSE Write(S[i]); IF (i < HIGH(S)) THEN INC(i) END; IF (i = HIGH(S)) THEN WriteLn; EXIT END; END END; IF (i < HIGH(S)) OR (S[i] < ' ') THEN S[i] := 0C (* Null Terminated *) END END ReadString; PROCEDURE ReadLn (VAR S:ARRAY OF CHAR); VAR i : CARDINAL; c : CHAR; BEGIN i := 0; LOOP DoRead(c); IF (c < ' ') THEN IF (c = bs) AND (i > 0) THEN Write('\'); Write(c); DEC(i) ELSIF (c = cr) OR (c = eoln) OR (c = etx) THEN IF (i <= HIGH(S)) THEN S[i] := 0C END; WriteLn; EXIT END ELSE Write(c); IF (i <= HIGH(S)) THEN S[i] := c; INC(i) END; END END; END ReadLn; PROCEDURE BusyRead(VAR ch:CHAR); BEGIN IF KeyPress() THEN DoRead(ch) ELSE ch := 0C END END BusyRead; PROCEDURE ReadAgain; (* causes the last character read to be returned again * upon the next call of Read *) BEGIN RepeatChar := TRUE END ReadAgain; PROCEDURE KeyPress():BOOLEAN; VAR Event : EventRecord; BEGIN RETURN(EventAvail(keyDownMask,Event)) END KeyPress; PROCEDURE GotoXY(C,R:CARDINAL); (* Move to column x, row y *) VAR OldPort:GrafPtr; X,Y:INTEGER; BEGIN WITH Font DO X := INTEGER(C) * widMax; Y := INTEGER(R) * FontHeight END; GetPort(OldPort); SetPort(myWindow); MoveTo(X,Y); SetPort(OldPort); END GotoXY; PROCEDURE ClearTerminal; VAR OldPort:GrafPtr; BEGIN GetPort(OldPort); SetPort(myWindow); EraseRect(myWindow^.portRect); MoveTo(0,0); SetPort(OldPort); END ClearTerminal; PROCEDURE InitTerminal; VAR WindowRect : Rect; BEGIN RepeatChar := FALSE; FlushEvents(everyEvent,0); WITH screenBits.bounds DO SetRect(WindowRect,4,40,right-4,bottom-4) END; myWindow := NewWindow(ADR(wRecord),WindowRect,'Terminal', TRUE,noGrowDocProc,WindowPtr(-1),FALSE,4); GetFontInfo(Font); WITH Font DO FontHeight := ascent + descent + leading END; SetPort(myWindow); WITH myWindow^.portRect DO Width := (right - left) - 3; Height:= (bottom - top) - (FontHeight + 3) END; SetOrigin(-2,-(2 + Font.ascent)); END InitTerminal; BEGIN InitTerminal END Terminal. !Funky!Stuff! echo x - TextEdit.MOD cat >TextEdit.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE TextEdit; FROM SYSTEM IMPORT ADDRESS,ADR,CODE; FROM MacSYSTEM IMPORT Handle,LONGINT,OSErr; FROM QuickDraw IMPORT Style,Rect,Point,GrafPtr; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE TENew(VAR destRect,viewRect:Rect):TEHandle; (* VAR is for Modula is really by value *) (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D2H); CODE(RestoreA7); CODE(Return); END TENew; PROCEDURE TEDispose(hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CDH); CODE(RestoreA7); CODE(Return); END TEDispose; (* Accessing the Text of an Edit Record *) PROCEDURE TESetText (text:ADDRESS;length:LONGINT;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CFH); CODE(RestoreA7); CODE(Return); END TESetText; PROCEDURE TEGetText (hTE: TEHandle):CharsHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CBH); CODE(RestoreA7); CODE(Return); END TEGetText; (*Insertion Point and Selection Range*) PROCEDURE TEIdle (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DAH); CODE(RestoreA7); CODE(Return); END TEIdle; PROCEDURE xTEClick (pt:LONGINT;extend:BOOLEAN;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D4H); CODE(RestoreA7); CODE(Return); END xTEClick; PROCEDURE TEClick (pt:Point;extend:BOOLEAN;hTE:TEHandle); (*$P+*)(*$S-*) BEGIN xTEClick(pt.param,extend,hTE); END TEClick; PROCEDURE TESetSelect (selStart,selEnd: LONGINT; hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D1H); CODE(RestoreA7); CODE(Return); END TESetSelect; PROCEDURE TEActivate (hTE: TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D8H); CODE(RestoreA7); CODE(Return); END TEActivate; PROCEDURE TEDeactivate (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D9H); CODE(RestoreA7); CODE(Return); END TEDeactivate; (* Editing *) PROCEDURE xTEKey (key:CARDINAL;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DCH); CODE(RestoreA7); CODE(Return); END xTEKey; PROCEDURE TEKey (key:CHAR;hTE:TEHandle); (*$P+*)(*$S-*) BEGIN xTEKey(ORD(key),hTE); END TEKey; PROCEDURE TECut (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D6H); CODE(RestoreA7); CODE(Return); END TECut; PROCEDURE TECopy (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D5H); CODE(RestoreA7); CODE(Return); END TECopy; PROCEDURE TEPaste (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DBH); CODE(RestoreA7); CODE(Return); END TEPaste; PROCEDURE TEDelete (hTE: TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D7H); CODE(RestoreA7); CODE(Return); END TEDelete; PROCEDURE TEInsert (text:ADDRESS;length:LONGINT;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DEH); CODE(RestoreA7); CODE(Return); END TEInsert; (* Text Display and Scrolling *) PROCEDURE TESetJust (just:INTEGER;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DFH); CODE(RestoreA7); CODE(Return); END TESetJust; PROCEDURE TEUpdate (VAR rUpdate: Rect; hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D3H); CODE(RestoreA7); CODE(Return); END TEUpdate; PROCEDURE TextBox (text:ADDRESS; length:LONGINT; VAR box:Rect; just:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9CEH); CODE(RestoreA7); CODE(Return); END TextBox; PROCEDURE TEScroll (dh,dv:INTEGER;hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9DDH); CODE(RestoreA7); CODE(Return); END TEScroll; (* Scrap Handling *) PROCEDURE TEFromScrap():OSErr; (*$P+*) (* [Not in ROM] * VAR * pss : PScrapStuff; * (*$P+*) * BEGIN * pss := InfoScrap(); * TEScrpLength := pss.scrapSize; * TEScrpHandle := pss.scrapHandle; * END TEFromScrap; *) BEGIN END TEFromScrap; PROCEDURE TEToScrap():OSErr; (*$P+*) BEGIN END TEToScrap; PROCEDURE TEScrapHandle():Handle; (*$P+*) (*$S-*) BEGIN RETURN(TEScrpHandle) END TEScrapHandle; PROCEDURE TEGetScrapLen():LONGINT; (*$P+*) (*$S-*) BEGIN RETURN(TEScrpLength) END TEGetScrapLen; PROCEDURE TESetScrapLen(length:LONGINT); (*$P+*)(*$S-*) BEGIN TEScrpLength := length END TESetScrapLen; (* Advanced Routine *) PROCEDURE SetWordBreak(wBrkProc:ADDRESS; hTE:TEHandle); (*[Not in ROM]*) (*$P+*)(*$S-*) BEGIN END SetWordBreak; PROCEDURE SetClikLoop(clikProc:ADDRESS; hTE:TEHandle); (*$P+*)(*$S-*) BEGIN END SetClikLoop; PROCEDURE TECalText (hTE:TEHandle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9D0H); CODE(RestoreA7); CODE(Return); END TECalText; BEGIN CODE(0A9CCH) END TextEdit. !Funky!Stuff! echo x - Toolbox.MOD cat >Toolbox.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE Toolbox; FROM SYSTEM IMPORT ADDRESS,CODE,ADR; FROM MacSYSTEM IMPORT Fixed,Int64Bit,LONGINT,StringHandle,Handle; FROM QuickDraw IMPORT Pattern,Point,Rect; FROM PascalStrings IMPORT MakePascalString; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE FixRatio(numer,denom:INTEGER):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A869H); CODE(RestoreA7); CODE(Return); END FixRatio; PROCEDURE FixMul(a,b:Fixed):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A868H); CODE(RestoreA7); CODE(Return); END FixMul; PROCEDURE FixRound(x:Fixed):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86CH); CODE(RestoreA7); CODE(Return); END FixRound; (*String*) PROCEDURE xNewString(theString:ADDRESS):StringHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A906H); CODE(RestoreA7); CODE(Return); END xNewString; PROCEDURE NewString(VAR theString:ARRAY OF CHAR):StringHandle; (*$P+*)(*$S-*) VAR Str:ARRAY [0..255] OF CHAR; BEGIN MakePascalString(theString,Str); RETURN(xNewString(ADR(Str))) END NewString; PROCEDURE xSetString(h:StringHandle;theString:ADDRESS); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A907H); CODE(RestoreA7); CODE(Return); END xSetString; PROCEDURE SetString(h:StringHandle;VAR theString:ARRAY OF CHAR); (*$P+*)(*$S-*) VAR Str:ARRAY [0..255] OF CHAR; BEGIN MakePascalString(theString,Str); xSetString(h,ADR(Str)) END SetString; PROCEDURE GetString(StringID:INTEGER):StringHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9BAH); CODE(RestoreA7); CODE(Return); END GetString; PROCEDURE GetIndString(VAR theString:ARRAY OF CHAR;strListID:INTEGER; index:INTEGER); (* no trap macro *) (*$P+*)(*$S-*) BEGIN END GetIndString; (*byte manipulation*) PROCEDURE Munger(h:Handle;offset:LONGINT;ptrl:ADDRESS;len1:LONGINT; ptr2:ADDRESS;len2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9E0H); CODE(RestoreA7); CODE(Return); END Munger; PROCEDURE PackBits(VAR srcPtr,dstPtr:ADDRESS; srcBytes:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8CFH); CODE(RestoreA7); CODE(Return); END PackBits; PROCEDURE UnpackBits(VAR srcPtr,dstPtr:ADDRESS; dstBytes:INTEGER); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8D0H); CODE(RestoreA7); CODE(Return); END UnpackBits; (*bit Manipulation*) PROCEDURE BitTst(bytePtr:ADDRESS;bitNum:LONGINT):BOOLEAN; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85DH); CODE(RestoreA7); CODE(Return); END BitTst; PROCEDURE BitSet(bytePtr:ADDRESS;bitNum:LONGINT); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85EH); CODE(RestoreA7); CODE(Return); END BitSet; PROCEDURE BitClr(bytePtr:ADDRESS;bitNum:LONGINT); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85FH); CODE(RestoreA7); CODE(Return); END BitClr; (*Logical Operations*) PROCEDURE BitAnd(val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A858H); CODE(RestoreA7); CODE(Return); END BitAnd; PROCEDURE BitOr (val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85BH); CODE(RestoreA7); CODE(Return); END BitOr; PROCEDURE BitXor(val1,val2:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A859H); CODE(RestoreA7); CODE(Return); END BitXor; PROCEDURE BitNot(val:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85AH); CODE(RestoreA7); CODE(Return); END BitNot; PROCEDURE BitShift(value:LONGINT;count:INTEGER):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A85CH); CODE(RestoreA7); CODE(Return); END BitShift; (*Other Operations on Long Integers*) PROCEDURE HiWord(x:LONGINT):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86AH); CODE(RestoreA7); CODE(Return); END HiWord; PROCEDURE LoWord(x:LONGINT):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A86BH); CODE(RestoreA7); CODE(Return); END LoWord; PROCEDURE LongMul(a,b:LONGINT;VAR dest:Int64Bit); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A867H); CODE(RestoreA7); CODE(Return); END LongMul; (* Graphics Utilities *) PROCEDURE ScreenRes(VAR scrnHRes,scrnVRes:INTEGER); (*$P+*)(*$S-*) BEGIN scrnHRes := ScrHRes; scrnVRes := ScrVRes END ScreenRes; PROCEDURE GetIcon(iconID:INTEGER):Handle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9BBH); CODE(RestoreA7); CODE(Return); END GetIcon; PROCEDURE PlotIcon(theRect:Rect;theIcon:Handle); (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A94BH); CODE(RestoreA7); CODE(Return); END PlotIcon; PROCEDURE GetPattern(patID:INTEGER):PatHandle; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A9B8H); CODE(RestoreA7); CODE(Return); END GetPattern; PROCEDURE GetIndPattern(VAR thePattern:Pattern;patListID:INTEGER; index:INTEGER); (* no trap macro *) (*$P+*)(*$S-*) BEGIN END GetIndPattern; (* Miscellaneous Utilities *) PROCEDURE Random():INTEGER; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A861H); CODE(RestoreA7);CODE(Return); END Random; PROCEDURE xStuffHex (thingPtr:ADDRESS;s:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A866H); CODE(RestoreA7);CODE(Return); END xStuffHex; PROCEDURE StuffHex (thingPtr:ADDRESS;VAR s:ARRAY OF CHAR); (*$P+*)(*$S-*) VAR s1:ARRAY[0..255] OF CHAR; BEGIN MakePascalString(s,s1); xStuffHex(thingPtr,ADR(s1)) END StuffHex; PROCEDURE xDeltaPoint(ptA,ptB:LONGINT):LONGINT; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A94FH); CODE(RestoreA7); CODE(Return); END xDeltaPoint; PROCEDURE DeltaPoint(ptA,ptB:Point):LONGINT; (*$P+*)(*$S-*) BEGIN RETURN(xDeltaPoint(ptA.param,ptB.param)) END DeltaPoint; PROCEDURE SlopeFromAngle(angle:INTEGER):Fixed; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8BCH); CODE(RestoreA7); CODE(Return); END SlopeFromAngle; PROCEDURE AngleFromSlope(slope:Fixed):INTEGER; (*$P-*) BEGIN CODE(GetRet); CODE(SaveA7); CODE(0A8C4H); CODE(RestoreA7); CODE(Return); END AngleFromSlope; END Toolbox. !Funky!Stuff! echo x - WindowManager.MOD cat >WindowManager.MOD <<'!Funky!Stuff!' IMPLEMENTATION MODULE WindowManager; FROM SYSTEM IMPORT ADDRESS,WORD,CODE,ADR,REGISTER; FROM MacSYSTEM IMPORT LONGINT; FROM FontManager IMPORT FontInfo; (* Init Font Manager *) FROM QuickDraw IMPORT GrafPort,GrafPtr,Point,VHSelect, Rect,RgnHandle; FROM Pictures IMPORT PicHandle; FROM EventManager IMPORT EventRecord; FROM PascalStrings IMPORT MakePascalString,MakeModulaString; CONST GetRet = 0285FH; (* MOVEA (A7)+,A4 *) Return = 04ED4H; (* JMP A4 *) SaveA7 = 0264FH; (* MOVEA A7,A3 *) RestoreA7 = 02E4BH; (* MOVEA A3,A7 *) PROCEDURE InitWindows; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A912H); CODE(RestoreA7);CODE(Return); END InitWindows; PROCEDURE xNewWindow(wStorage:ADDRESS;VAR windowRect:Rect; title:ADDRESS;visible:BOOLEAN;windowType:INTEGER; behindWindow:WindowPtr;hasClose:BOOLEAN; refCon:LONGINT):WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A913H); CODE(RestoreA7);CODE(Return); END xNewWindow; PROCEDURE NewWindow(wStorage:ADDRESS;VAR windowRect:Rect; VAR title:ARRAY OF CHAR;visible:BOOLEAN;windowType:INTEGER; behindWindow:WindowPtr;hasClose:BOOLEAN; refCon:LONGINT):WindowPtr; VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN MakePascalString(title,s1); RETURN(xNewWindow(wStorage,windowRect,ADR(s1),visible, windowType,behindWindow,hasClose,refCon)) END NewWindow; PROCEDURE GetNewWindow(templateID:INTEGER; wStorage:ADDRESS;behindWindow:WindowPtr):WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A9BDH); CODE(RestoreA7);CODE(Return); END GetNewWindow; PROCEDURE CloseWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92DH); CODE(RestoreA7);CODE(Return); END CloseWindow; PROCEDURE DisposeWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A914H); CODE(RestoreA7);CODE(Return); END DisposeWindow; PROCEDURE xSetWTitle(theWindow:WindowPtr;newTitle:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91AH); CODE(RestoreA7);CODE(Return); END xSetWTitle; PROCEDURE SetWTitle(theWindow:WindowPtr;VAR newTitle:ARRAY OF CHAR); VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN MakePascalString(newTitle,s1); xSetWTitle(theWindow,ADR(s1)); END SetWTitle; PROCEDURE xGetWTitle(theWindow:WindowPtr;theTitle:ADDRESS); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A919H); CODE(RestoreA7);CODE(Return); END xGetWTitle; PROCEDURE GetWTitle(theWindow:WindowPtr;VAR theTitle:ARRAY OF CHAR); VAR s1:ARRAY [0..255] OF CHAR; (*$P+*)(*$S-*) BEGIN xGetWTitle(theWindow,ADR(s1)); MakeModulaString(s1,theTitle); END GetWTitle; PROCEDURE SetWRefCon(theWindow:WindowPtr;newRefCon:LONGINT); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A918H); CODE(RestoreA7);CODE(Return); END SetWRefCon; PROCEDURE GetWRefCon(theWindow:WindowPtr):LONGINT; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A917H); CODE(RestoreA7);CODE(Return); END GetWRefCon; PROCEDURE HideWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A916H); CODE(RestoreA7);CODE(Return); END HideWindow; PROCEDURE ShowWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A915H); CODE(RestoreA7);CODE(Return); END ShowWindow; PROCEDURE ShowHide(theWindow:WindowPtr;showFlag:BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A908H); CODE(RestoreA7);CODE(Return); END ShowHide; PROCEDURE MoveWindow(theWindow: WindowPtr; hGlobal,vGlobal: INTEGER; active: BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91BH); CODE(RestoreA7);CODE(Return); END MoveWindow; PROCEDURE SizeWindow (theWindow: WindowPtr; newWidth,newHeight: INTEGER; update: BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91DH); CODE(RestoreA7);CODE(Return); END SizeWindow; PROCEDURE FrontWindow():WindowPtr; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A924H); CODE(RestoreA7);CODE(Return); END FrontWindow; PROCEDURE BringToFront(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A920H); CODE(RestoreA7);CODE(Return); END BringToFront; PROCEDURE SendBehind(theWindow:WindowPtr;behindWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A921H); CODE(RestoreA7);CODE(Return); END SendBehind; PROCEDURE HiliteWindow(theWindow:WindowPtr;onOrOff:BOOLEAN); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91CH); CODE(RestoreA7);CODE(Return); END HiliteWindow; PROCEDURE DrawGrowIcon(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A904H); CODE(RestoreA7);CODE(Return); END DrawGrowIcon; PROCEDURE BeginUpdate(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A922H); CODE(RestoreA7);CODE(Return); END BeginUpdate; PROCEDURE EndUpdate(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A923H); CODE(RestoreA7);CODE(Return); END EndUpdate; PROCEDURE InvalRect(VAR badRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A928H); CODE(RestoreA7);CODE(Return); END InvalRect; PROCEDURE InvalRgn(badRegion:RgnHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A927H); CODE(RestoreA7);CODE(Return); END InvalRgn; PROCEDURE ValidRect(VAR goodRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92AH); CODE(RestoreA7);CODE(Return); END ValidRect; PROCEDURE ValidRgn(goodRegion:RgnHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A929H); CODE(RestoreA7);CODE(Return); END ValidRgn; PROCEDURE SetWindowPic (theWindow:WindowPtr;thePicture:PicHandle); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92EH); CODE(RestoreA7);CODE(Return); END SetWindowPic; PROCEDURE GetWindowPic(theWindow:WindowPtr):PicHandle; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92FH); CODE(RestoreA7);CODE(Return); END GetWindowPic; PROCEDURE xFindWindow(mousePoint:LONGINT;VAR theWindow:WindowPtr):INTEGER; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92CH); CODE(RestoreA7);CODE(Return); END xFindWindow; PROCEDURE FindWindow (mousePoint:Point;VAR theWindow:WindowPtr):INTEGER; (*$P+*)(*$S-*) BEGIN RETURN(xFindWindow(mousePoint.param,theWindow)) END FindWindow; PROCEDURE SelectWindow(theWindow:WindowPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91FH); CODE(RestoreA7);CODE(Return); END SelectWindow; PROCEDURE xDragWindow (theWindow:WindowPtr; startPoint:LONGINT; VAR LimitRect:Rect); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A925H); CODE(RestoreA7);CODE(Return); END xDragWindow; PROCEDURE DragWindow (theWindow:WindowPtr; startPoint:Point; LimitRect:Rect); (*$P+*)(*$S-*) BEGIN xDragWindow(theWindow,startPoint.param,LimitRect) END DragWindow; PROCEDURE xGrowWindow (theWindow: WindowPtr; startPoint: LONGINT; VAR sizeRect: Rect):LONGINT; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A92BH); CODE(RestoreA7);CODE(Return); END xGrowWindow; PROCEDURE GrowWindow (theWindow: WindowPtr; startPoint: Point; sizeRect: Rect):LONGINT; (*$P+*)(*$S-*) BEGIN RETURN(xGrowWindow(theWindow,startPoint.param,sizeRect)) END GrowWindow; PROCEDURE xTrackGoAway(wind:WindowPtr;start:LONGINT):BOOLEAN; (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A91EH); CODE(RestoreA7);CODE(Return); END xTrackGoAway; PROCEDURE TrackGoAway(wind:WindowPtr;start:Point):BOOLEAN; (*$P+*)(*$S-*) BEGIN RETURN(xTrackGoAway(wind,start.param)) END TrackGoAway; PROCEDURE GetWMgrPort(VAR wMgrPort:GrafPtr); (*$P-*) BEGIN CODE(GetRet);CODE(SaveA7); CODE(0A910H); CODE(RestoreA7);CODE(Return); END GetWMgrPort; BEGIN InitWindows END WindowManager. !Funky!Stuff!