jnp@daimi.UUCP (J|rgen N|rgaard) (01/17/88)
[Changes for the MacMETH vers 2.3 toolbox] This is some changes for the MacMETH vers 2.3 toolbox etc interface. correcting errors and extending StringLib0. Regards J|rgen N|rgaard, jnp@daimi.dk --- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # change.CMD # MacConstants.DEF # StringLib0.DEF # MemoryManager.MOD # StringLib0.MOD # This archive created: Fri Oct 23 12:34:29 1987 export PATH; PATH=/bin:$PATH echo shar: extracting "'change.CMD'" if test -f 'change.CMD' then echo shar: will not over-write existing file "'change.CMD'" else cat << \SHAR_EOF > 'change.CMD' MacConstants.DEF MacConstants.MOD MemoryManager.MOD StringLib0.DEF StringLib0.MOD SHAR_EOF fi # end of overwriting check echo shar: extracting "'MacConstants.DEF'" if test -f 'MacConstants.DEF' then echo shar: will not over-write existing file "'MacConstants.DEF'" else cat << \SHAR_EOF > 'MacConstants.DEF' DEFINITION MODULE MacConstants; (* C. Pfister 3-Jan-87 All pascal constants of 'Inside Macintosh' are declared in this module. A few useful constants have been added (e.g. 'inFront'), they are marked with the following comment: (* new *). Several constants concerning the 128K ROMs have been appended at the end. The constants are sorted like in the summary of 'Inside Macintosh', i.e. all constants of one module together, the modules sorted alphabetically; with the exception of the error / result codes, which are at the beginning. If a constant occurs several times, it is declared only once. Several constants denoting masks are defined not as integers (like in Inside Macintosh) but as bitsets, i.e. as masks (e.g. {0..3}) or as bit indices. Such constants are marked with the comment (* BITSET *). They can be added (set union), tested (IF cmdKey IN event.modifiers ...), etc. *) FROM MacTypes IMPORT WindowPtr; FROM SYSTEM IMPORT VAL; CONST (* Result Codes *) noErr = 0; (* OSEventManager Error *) evtNotEnb = 1; (* PrintingManager Errors *) iPrAbort = 128; iPrSavPFil = -1; (* PBManager Errors (queuing) *) qErr = -1; vTypErr = -2; (* DeviceManager Errors *) controlErr = -17; statusErr = -18; readErr = -19; writErr = -20; badUnitErr = -21; unitEmptyErr = -22; openErr = -23; dRemovErr = -25; dInstErr = -26; abortErr = -27; notOpenErr = -28; (* FileManager Errors *) dirFulErr = -33; dskFulErr = -34; nsvErr = -35; ioErr = -36; bdNamErr = -37; fnOpnErr = -38; eofErr = -39; posErr = -40; mFulErr = -41; tmfoErr = -42; fnfErr = -43; wPrErr = -44; fLckdErr = -45; vLckdErr = -46; fBsyErr = -47; dupFNErr = -48; opWrErr = -49; paramErr = -50; rfNumErr = -51; gfpErr = -52; volOffLinErr = -53; permErr = -54; volOnLinErr = -55; nsDrvErr = -56; noMacDskErr = -57; extFSErr = -58; fsRnErr = -59; badMDBErr = -60; wrPermErr = -61; lastDskErr = -64; (* last of the range of low-level disk errors *) noDriveErr = -64; offLinErr = -65; noNybErr = -66; noAdrMkErr = -67; dataVerErr = -68; badCksmErr = -69; badBtSlpErr = -70; noDtaMkErr = -71; badDCksum = -72; badDBtSlp = -73; wrUnderrun = -74; cantStepErr = -75; tk0BadErr = -76; initIWMErr = -77; twoSideErr = -78; spdAdjErr = -79; seekErr = -80; sectNFErr = -81; firstDskErr = -84; (* first of the range of low-level disk errors *) (* Clock Errors *) clkRdErr = -85; (* Unable to read clock *) clkWrErr = -86; (* time written did not verify *) prWrErr = -87; (* parmeter RAM written did not verify *) prInitErr = -88; (* Validity status is not $A8 *) (* AppleTalkManager Errors *) ddpSktErr = -91; ddpLenErr = -92; noBridgeErr = -93; lapProtErr = -94; excessCollsns = -95; portInUse = -97; portNotCf = -98; (* ScrapManager Errors *) noScrapErr = -100; noTypeErr = -102; (* MemoryManager Errors *) memROZErr = -99; (* operation on a read-only zone *) memFullErr = -108; (* not enough room in heap zone *) iMemFullErr = -108; (* same for printing manager *) nilHandleErr = -109; (* Master Pointer was NIL in HandleZone or other *) memWZErr = -111; (* WhichZone failed (applied to free block) *) memPurErr = -112; (* trying to purge locked or non-purgeable block *) memLockedErr = -117; (* block is locked *) dirNFErr = -120; (* directory not found *) tmwdoErr = -121; (* too many working directories open *) badMovErr = -122; (* attempt to move into offspring *) wrgVolTypErr = -123; (* hierarchical operation on non-HFS volume *) fsDSIntErr = -127; (* internal file system error *) (* ResourceManager Errors *) resNotFound = -192; (* Resource not found *) resFNotFound = -193; (* Resource file not found *) addResFailed = -194; (* AddResource failed *) rmvResFailed = -196; (* RmveResource failed *) resAttrErr = -198; (* attribute inconsistent with operation *) mapReadErr = -199; (* map inconsistent with operation *) (* Additional AppleTalkManager Errors *) nbpBuffOvr = -1024; nbpNoConfirm = -1025; nbpConfDiff = -1026; nbpDuplicate = -1027; nbpNotFound = -1028; nbpNISErr = -1029; reqFailed = -1096; tooManyReqs = -1097; tooManySkts = -1098; badATPSkt = -1099; badBuffNum = -1100; noRelErr = -1101; cbNotFound = -1102; noSendResp = -1103; noDataArea = -1104; reqAborted = -1105; buf2SmallErr = -3101; noMPPError = -3102; cksumErr = -3103; extractErr = -3104; readQErr = -3105; atpLenErr = -3106; atpBadResp = -3107; recNotFnd = -3108; sktClosedErr = -3109; (*******************************************************************************) (* AppleTalk *) lapSize = 20; ddpSize = 26; nbpSize = 26; aptSize = 56; (* ControlManager *) pushButProc = 0; checkBoxProc = 1; radioButProc = 2; useWFont = 8; scrollBarProc = 16; inButton = 10; inCheckBox = 11; inUpButton = 20; inDownButton = 21; inPageUp = 22; inPageDown = 23; inThumb = 129; noConstraint = 0; hAxisOnly = 1; vAxisOnly = 2; drawCntl = 0; testCntl = 1; calcCRgns = 2; initCntl = 3; dispCntl = 4; posCntl = 5; thumbCntl = 6; dragCntl = 7; autoTrack = 8; (* DeviceManager *) fsCurPerm = 0; fsRdPerm = 1; fsWrPerm = 2; fsRdWrPerm = 3; fsRdWrShPerm = 4; fsAtMark = 0; fsFromStart = 1; fsFromLEOF = 2; fsFromMark = 3; (* Chooser message values *) newSelMsg = 12; fillListMsg = 13; getSelMsg = 14; selectMsg = 15; deselectMsg = 16; terminateMsg = 17; buttonMsg = 18; chooserID = 1; (* DialogManager *) ctrlItem = 4; btnCtrl = 0; chkCtrl = 1; radCtrl = 2; resCtrl = 3; statText = 8; editText = 16; iconItem = 32; picItem = 64; userItem = 0; itemDisable = 128; (* disable item if set (i.e. if added) *) ok = 1; cancel = 2; stopIcon = 0; noteIcon = 1; cautionIcon = 2; (* DiskDriver (included in PBManager) *) rdVerify = 64; dtrNegated = 40H; (* OSEventManager / EventManager *) nullEvent = 0; mouseDown = 1; mouseUp = 2; keyDown = 3; keyUp = 4; autoKey = 5; updateEvt = 6; diskEvt = 7; activateEvt = 8; abortEvt = 9; networkEvt = 10; driverEvt = 11; app1Evt = 12; app2Evt = 13; app3Evt = 14; app4Evt = 15; charCodeMask = VAL(LONGINT, 0FFH); keyCodeMask = VAL(LONGINT, 0FF00H); (* BITSET *) mDownMask = {1}; mUpMask = {2}; keyDownMask = {3}; keyUpMask = {4}; autoKeyMask = {5}; updateMask = {6}; diskMask = {7}; activMask = {8}; abortMask = {9}; networkMask = {10}; driverMask = {11}; app1Mask = {12}; app2Mask = {13}; app3Mask = {14}; app4Mask = {15}; everyEvent = {0..15}; (* BITSET *) activeFlag = 0; (* bit # 0 of low byte *) sysAppFlag = 1; btnState = 7; cmdKey = 8; (* bit # 0 of high byte *) shiftKey = 9; alphaLock = 10; optionKey = 11; (* new *) (* control characters which can be generated on the Macintosh keyboard *) ETX = 3C; (* enter (keyboard or keypad *) BS = 10C; (* backspace (keyboard) *) HT = 11C; (* tab (keyboard) *) CR = 15C; (* return (keyboard) *) ESC = 33C; (* clear (keypad) *) FS = 34C; (* left (keypad) *) GS = 35C; (* right (keypad) *) RS = 36C; (* up (keypad) *) US = 37C; (* down (keypad) *) SP = 40C; (* space (keyboard) *) (* FileManager *) (* BITSET *) fOnDesk = 0; fHasBundle = 13; fInvisible = 14; fTrash = -3; fDesktop = -2; fDisk = 0; (* FontManager *) systemFont = 0; applFont = 1; newYork = 2; geneva = 3; monaco = 4; venice = 5; london = 6; athens = 7; sanFran = 8; toronto = 9; cairo = 11; losAngeles = 12; times = 20; helvetica = 21; courier = 22; symbol = 23; taliesin = 24; commandMark = 21C; checkMark = 22C; diamondMark = 23C; appleMark = 24C; propFont = 09000H; prpFntH = 09001H; prpFntW = 09002H; prpFntHW = 09003H; fixedFont = 0B000H; fxdFntH = 0B001H; fxdFntW = 0B002H; fxdFntHW = 0B003H; fontWid = 0ACB0H; (* IntlUtilities *) currSymLead = 16; currNegSym = 32; currTrailingZ = 64; currLeadingZ = 128; mdy = 0; dmy = 1; ymd = 2; dayLdingZ = 32; mntLdingZ = 64; century = 128; secLeadingZ = 32; minLeadingZ = 64; hrLeadingZ = 128; verUS = 0; verFrance = 1; verBritain = 2; verGermany = 3; verItaly = 4; verNetherlands = 5; verBelgiumLux = 6; verSweden = 7; verSpain = 8; verDenmark = 9; verPortugal = 10; verFrCanada = 11; verNorway = 12; verIsrael = 13; verJapan = 14; verAustralia = 15; verArabia = 16; verFinland = 17; verFrSwiss = 18; verGrSwiss = 19; verGreece = 20; verIceland = 21; verMalta = 22; verCyprus = 23; verTurkey = 24; verYugoslavia = 25; (* MenuManger *) noMark = 0; mDrawMsg = 0; mChooseMsg = 1; mSizeMsg = 2; textMenuProc = 0; atRear = 0; (* new *) (* PackageManager (included in ToolboxUtilities) *) listMgr = 0; dskInit = 2; stdFile = 3; flPoint = 4; trFunc = 5; intUtil = 6; bdConv = 7; (* PrintingManager *) bDraftLoop = 0C; bSpoolLoop = 1C; bDevCItoh = 256; bDevLaser = 259; iPFMaxPgs = 128; iPrDevCtl = 7; lPrReset = VAL(LONGINT, 10000H); lPrLineFeed = VAL(LONGINT, 30000H); lPrLFSixth = VAL(LONGINT, 3FFFFH); lPrPageEnd = VAL(LONGINT, 20000H); iPrBitsCtl = 4; lScreenBits = 0D; lPaintBits = 1D; iPrIOCtl = 5; sPrDrvr = '.Print'; iPrDrvrRef = -3; (* QuickDraw *) srcCopy = 0; srcOr = 1; srcXor = 2; srcBic = 3; notSrcCopy = 4; notSrcOr = 5; notSrcXor = 6; notSrcBic = 7; patCopy = 8; patOr = 9; patXor = 10; patBic = 11; notPatCopy = 12; notPatOr = 13; notPatXor = 14; notPatBic = 15; normalBit = 0; inverseBit = 1; redBit = 4; greenBit = 3; blueBit = 2; cyanBit = 8; magentaBit = 7; yellowBit = 6; blackBit = 5; blackColor = 33; whiteColor = 30; redColor = 205; greenColor = 341; blueColor = 409; cyanColor = 273; magentaColor = 137; yellowColor = 69; picLParen = 0; picRParen = 1; sysPatListID = 0; iBeamCursor = 1; crossCursor = 2; plusCursor = 3; watchCursor = 4; (* ResourceManager *) (* BITSET *) resSysHeap = 6; resPurgeable = 5; resLocked = 4; resProtected = 3; resPreload = 2; resChanged = 1; (* BITSET *) mapReadOnly = 7; mapCompact = 6; mapChanged = 5; (* SegmentLoader *) appOpen = 0; appPrint = 1; (* SerialDrivers *) (* BITSET *) baud300 = {2..6,8}; baud600 = {0,2..5,7}; baud1200 = {1..4,6}; baud1800 = {1..5}; baud2400 = {1..3,5}; baud3600 = {1..4}; baud4800 = {1,2,4}; baud7200 = {1..3}; baud9600 = {1,3}; baud19200 = {2}; baud57600 = {}; stop10 = {14}; stop15 = {15}; stop20 = {14,15}; noParity = {}; oddParity = {12}; evenParity = {12,13}; data5 = {}; data6 = {11}; data7 = {10}; data8 = {10,11}; swOverrunErr = {0}; parityErr = {4}; hwOverrunErr = {5}; framingErr = {6}; ctsEvent = {5}; breakEvent = {7}; xOffWasSent = 200C; (* e.g. default setting of 9600 bit/s, 8 data bits, 2 stop bits and no parity bitsetWord = baud9600 + data8 + stop20 + noParity *) (* SoundDriver *) swMode = -1; ftMode = 1; ffMode = 0; (* StdFilePackage *) putDlgID = -3999; getDlgID = -4000; putSave = 1; putCancel = 2; putEject = 5; putDrive = 6; putName = 7; getOpen = 1; getCancel = 3; getEject = 5; getDrive = 6; getNmList = 7; getScroll = 8; (* TextEdit *) teJustLeft = 0; teJustCenter = 1; teJustRight = -1; (* OSUtilities *) macXLMachine = 0; macMachine = 1; (* WindowManager *) documentProc = 0; dBoxProc = 1; plainDBox = 2; altDBoxProc = 3; noGrowDocProc = 4; zoomDocProc = 8; zoomNoGrow = 12; rDocProc = 16; dialogKind = 2; userKind = 8; inDesk = 0; inMenuBar = 1; inSysWindow = 2; inContent = 3; inDrag = 4; inGrow = 5; inGoAway = 6; inZoomIn = 7; inZoomOut = 8; wDraw = 0; wHit = 1; wCalcRgns = 2; wNew = 3; wDispose = 4; wGrow = 5; wDrawGIcon = 6; wNoHit = 0; wInContent = 1; wInDrag = 2; wInGrow = 3; wInGoAway = 4; wInZoomIn = 5; wInZoomOut = 6; deskPatID = 16; inFront = VAL(WindowPtr,-1D); (* new *) (*******************************************************************************) (* 128K ROM *) (* ListManager *) (* BITSET *) lDoVAutoscroll = 1; lDoHAutoscroll = 0; (* BITSET *) lOnlyOne = 7; lExtendDrag = 6; lNoDisjoint = 5; (* BITSET *) lNoExtend = 4; lNoRect = 3; lUseSense = 2; lNoNilHilite = 1; lInitMsg = 0; lDrawMsg = 1; lHiliteMsg = 2; lCloseMsg = 3; (* SCSIManager *) scInc = 1; scNoInc = 2; scAdd = 3; scMove = 4; scLoop = 5; scNop = 6; scStop = 7; scComp = 8; scBadParmsErr = 4; scCommErr = 2; scCompareErr = 6; scPhaseErr = 5; END MacConstants. SHAR_EOF fi # end of overwriting check echo shar: extracting "'StringLib0.DEF'" if test -f 'StringLib0.DEF' then echo shar: will not over-write existing file "'StringLib0.DEF'" else cat << \SHAR_EOF > 'StringLib0.DEF' DEFINITION MODULE StringLib0; (* F. Paquet 17-Apr-86 / C. Pfister 27-Dec-86 - this module is not Macintosh-specific *) TYPE Result = ( LessThan, EqualTo, GreaterThan); PROCEDURE Length(s: ARRAY OF CHAR): INTEGER; PROCEDURE Equal (s1, s2: ARRAY OF CHAR): BOOLEAN; PROCEDURE Compare (s1, s2: ARRAY OF CHAR): Result; PROCEDURE Occurs(s, pat: ARRAY OF CHAR): BOOLEAN; (* return 'pat occurs in s' *) PROCEDURE Copy( src: ARRAY OF CHAR; VAR dest: ARRAY OF CHAR); (* OUT *) (* copy src string to dest string *) PROCEDURE Concat(VAR dest: ARRAY OF CHAR; (* INOUT *) pat: ARRAY OF CHAR); (* append pat string to dest string *) PROCEDURE Insert(VAR s: ARRAY OF CHAR; (* INOUT *) pat: ARRAY OF CHAR; i: INTEGER); (* insert pat in s at position i *) PROCEDURE Delete(VAR s: ARRAY OF CHAR; (* INOUT *) i, l: INTEGER); (* delete s from position i to l *) END StringLib0. SHAR_EOF fi # end of overwriting check echo shar: extracting "'MemoryManager.MOD'" if test -f 'MemoryManager.MOD' then echo shar: will not over-write existing file "'MemoryManager.MOD'" else cat << \SHAR_EOF > 'MemoryManager.MOD' IMPLEMENTATION MODULE MemoryManager; (* C.Pfister 11-Jan-87 - MaxApplZone and MoveHHi only implemented for the 128K ROMs *) FROM OSUtilities IMPORT GetLong; FROM MacTypes IMPORT Ptr, Handle, ProcPtr, THz, Size, OSErr, Byte; FROM SYSTEM IMPORT INLINE, ADR, ADDRESS, SHORT, VAL, REG, SETREG, LONG; CONST D0 = 0; A0 = 8; A1 = 9; VAR err: INTEGER; PROCEDURE InitApplZone; BEGIN INLINE(0A02CH); err := SHORT(REG(D0)) END InitApplZone; PROCEDURE SetApplBase(startPtr: Ptr); BEGIN SETREG(A0,startPtr); INLINE(0A057H); err := SHORT(REG(D0)) END SetApplBase; PROCEDURE InitZone(pgrowZone: ProcPtr; cmoreMasters: INTEGER; limitPtr, startPtr : Ptr); BEGIN SETREG(A0,ADR(startPtr)); INLINE(0A019H); err := SHORT(REG(D0)) END InitZone; PROCEDURE GetApplLimit(): Ptr; VAR l: LONGINT; BEGIN RETURN GetLong(130H) END GetApplLimit; PROCEDURE SetApplLimit(zoneLimit: Ptr); BEGIN SETREG(A0,zoneLimit); INLINE(0A02DH); err := SHORT(REG(D0)) END SetApplLimit; PROCEDURE MaxApplZone; BEGIN INLINE(0A063H); err := SHORT(REG(D0)) END MaxApplZone; PROCEDURE MoreMasters; BEGIN INLINE(0A036H); err := SHORT(REG(D0)) END MoreMasters; PROCEDURE GetZone(): THz; BEGIN INLINE(0A11AH); err := SHORT(REG(D0)); RETURN VAL(THz,REG(A0)) END GetZone; PROCEDURE SetZone(hz: THz); BEGIN SETREG(A0,hz); INLINE(0A01BH); err := SHORT(REG(D0)) END SetZone; PROCEDURE ApplicZone(): THz; BEGIN RETURN GetLong(2AAH) END ApplicZone; PROCEDURE SystemZone(): THz; BEGIN RETURN GetLong(2A6H) END SystemZone; PROCEDURE NewHandle(byteCount: Size): ADDRESS; BEGIN SETREG(D0,byteCount); INLINE(0A122H); err := SHORT(REG(D0)); RETURN REG(A0) END NewHandle; PROCEDURE DisposHandle(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A023H); err := SHORT(REG(D0)) END DisposHandle; PROCEDURE GetHandleSize(h: ADDRESS): Size; VAR Res: LONGINT; BEGIN SETREG(A0,h); INLINE(0A025H); Res := REG(D0); IF Res > 0D THEN err := 0; RETURN Res ELSE err := SHORT(Res); RETURN 0 END END GetHandleSize; PROCEDURE SetHandleSize(h: ADDRESS; newSize: Size); BEGIN SETREG(A0,h); SETREG(D0,newSize); INLINE(0A024H); err := SHORT(REG(D0)) END SetHandleSize; PROCEDURE HandleZone(h: ADDRESS): THz; BEGIN SETREG(A0,h); INLINE(0A126H); err := SHORT(REG(D0)); RETURN VAL(THz,REG(A0)) END HandleZone; PROCEDURE RecoverHandle(p: Ptr): ADDRESS; BEGIN SETREG(A0,p); INLINE(0A128H); err := 0; RETURN REG(A0) END RecoverHandle; PROCEDURE ReallocHandle(h: ADDRESS; byteCount: Size); BEGIN SETREG(A0,h); SETREG(D0,byteCount); INLINE(0A027H); err := SHORT(REG(D0)) END ReallocHandle; PROCEDURE NewPtr(byteCount: Size): Ptr; BEGIN SETREG(D0,byteCount); INLINE(0A11EH); err := SHORT(REG(D0)); RETURN REG(A0) END NewPtr; PROCEDURE DisposPtr(p: Ptr); BEGIN SETREG(A0,p); INLINE(0A01FH); err := SHORT(REG(D0)) END DisposPtr; PROCEDURE GetPtrSize(p: Ptr): Size; VAR Res: LONGINT; BEGIN SETREG(A0,p); INLINE(0A021H); Res := REG(D0); IF Res > 0D THEN err := 0; RETURN VAL(Size,Res) ELSE err := SHORT(Res); RETURN 0 END END GetPtrSize; PROCEDURE SetPtrSize(p: Ptr; newSize: Size); BEGIN SETREG(A0,p); SETREG(D0,newSize); INLINE(0A020H); err := SHORT(REG(D0)) END SetPtrSize; PROCEDURE PtrZone(p: Ptr): THz; BEGIN SETREG(A0,p); INLINE(0A148H); err := SHORT(REG(D0)); RETURN VAL(THz,REG(A0)) END PtrZone; PROCEDURE FreeMem(): LONGINT; BEGIN INLINE(0A01CH); err := 0; RETURN REG(D0) END FreeMem; PROCEDURE MaxMem(VAR grow: Size): Size; BEGIN INLINE(0A11DH); err := 0; grow := VAL(Size,REG(A0)); RETURN REG(D0) END MaxMem; PROCEDURE CompactMem(cbNeeded: Size): Size; BEGIN SETREG(D0,cbNeeded); INLINE(0A04CH); err := 0; RETURN REG(D0) END CompactMem; PROCEDURE ResrvMem(cbNeeded: Size); BEGIN SETREG(D0,cbNeeded); INLINE(0A040H); err := SHORT(REG(D0)) END ResrvMem; PROCEDURE PurgeMem(cbNeeded: Size); BEGIN SETREG(D0,cbNeeded); INLINE(0A04DH); err := SHORT(REG(D0)) END PurgeMem; PROCEDURE EmptyHandle(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A02BH); err := SHORT(REG(D0)) END EmptyHandle; PROCEDURE HLock(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A029H); err := SHORT(REG(D0)) END HLock; PROCEDURE HUnlock(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A02AH); err := SHORT(REG(D0)) END HUnlock; PROCEDURE HPurge(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A049H); err := SHORT(REG(D0)) END HPurge; PROCEDURE HNoPurge(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A04AH); err := SHORT(REG(D0)) END HNoPurge; PROCEDURE SetGrowZone(growZone: ProcPtr); BEGIN SETREG(A0,growZone); INLINE(0A04BH); err := SHORT(REG(D0)) END SetGrowZone; PROCEDURE GZSaveHnd(): ADDRESS; BEGIN RETURN GetLong(328H) END GZSaveHnd; PROCEDURE BlockMove(srcPtr, destPtr: Ptr; byteCount: Size); BEGIN SETREG(A0,srcPtr); SETREG(A1,destPtr); SETREG(D0,byteCount); INLINE(0A02EH); err := SHORT(REG(D0)) END BlockMove; PROCEDURE TopMem(): Ptr; BEGIN RETURN GetLong(108H) END TopMem; PROCEDURE MoveHHi(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A064H); err := SHORT(REG(D0)) END MoveHHi; PROCEDURE MemError(): OSErr; BEGIN RETURN err END MemError; PROCEDURE HandToHand(VAR theHndl: ADDRESS): OSErr; BEGIN SETREG(A0,theHndl); INLINE(0A9E1H); err := SHORT(REG(D0)); theHndl := REG(A0); RETURN err END HandToHand; PROCEDURE PtrToHand(srcPtr: Ptr; VAR dstHndl: ADDRESS; size: LONGINT): OSErr; BEGIN SETREG(A0,srcPtr); SETREG(D0,size); INLINE(0A9E3H); err := SHORT(REG(D0)); dstHndl := REG(A0); RETURN err END PtrToHand; PROCEDURE PtrToXHand(srcPtr: Ptr; dstHndl: ADDRESS; size: LONGINT): OSErr; BEGIN SETREG(A0,srcPtr); SETREG(A1,dstHndl); SETREG(D0,size); INLINE(0A9E2H); err := SHORT(REG(D0)); RETURN err END PtrToXHand; PROCEDURE HandAndHand(hand1, hand2: ADDRESS): OSErr; BEGIN SETREG(A0,hand1); SETREG(A1,hand2); INLINE(0A9E4H); err := SHORT(REG(D0)); RETURN err END HandAndHand; PROCEDURE PtrAndHand(ptr: Ptr; hand: ADDRESS; size: LONGINT): OSErr; BEGIN SETREG(A0,ptr); SETREG(A1,hand); INLINE(0A9EFH); err := SHORT(REG(D0)); RETURN err END PtrAndHand; PROCEDURE MaxBlock(): LONGINT; BEGIN INLINE(0A061H); RETURN REG(D0) END MaxBlock; PROCEDURE PurgeSpace(VAR total, contig: LONGINT); BEGIN INLINE(0A062H); total := REG(D0); contig := REG(A0) END PurgeSpace; PROCEDURE StackSpace(): LONGINT; BEGIN INLINE(0A065H); RETURN REG(D0) END StackSpace; PROCEDURE NewEmptyHandle(): ADDRESS; BEGIN INLINE(0A166H); (* Error was 0A066H, = preserve A0 ! *) err := SHORT(REG(D0)); RETURN REG(A0) END NewEmptyHandle; PROCEDURE HSetRBit(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A067H); err := SHORT(REG(D0)) END HSetRBit; PROCEDURE HClrRBit(h: ADDRESS); BEGIN SETREG(A0,h); INLINE(0A68H); err := SHORT(REG(D0)) END HClrRBit; PROCEDURE HGetState(h: ADDRESS): Byte; BEGIN SETREG(A0,h); INLINE(0A069H); RETURN CHR(SHORT(REG(D0))) END HGetState; PROCEDURE HSetState(h: ADDRESS; flags: Byte); BEGIN SETREG(A0,h); SETREG(D0,LONG(ORD(flags))); INLINE(0A6AH); err := SHORT(REG(D0)) END HSetState; END MemoryManager. SHAR_EOF fi # end of overwriting check echo shar: extracting "'StringLib0.MOD'" if test -f 'StringLib0.MOD' then echo shar: will not over-write existing file "'StringLib0.MOD'" else cat << \SHAR_EOF > 'StringLib0.MOD' IMPLEMENTATION MODULE StringLib0; (* F. Paquet 17-Apr-86 / C. Pfister 9-Apr-86 *) CONST NUL = 0C; FirstDigit = '0'; PROCEDURE Length(s: ARRAY OF CHAR): INTEGER; VAR cnt, max: INTEGER; BEGIN cnt:= 0; max:= HIGH(s); LOOP IF (cnt > max) OR (s[cnt] = NUL) THEN RETURN cnt END; INC(cnt) END (* LOOP *) END Length; PROCEDURE Equal(s1, s2: ARRAY OF CHAR): BOOLEAN; (* VAR i, h1, h2: INTEGER;*) BEGIN (* h1:= HIGH(s1); h2:= HIGH(s2); i:= 0; LOOP IF (i > h1) OR (s1[i] = NUL) THEN EXIT END; IF (i > h2) OR (s2[i] = NUL) THEN EXIT END; IF s1[i] <> s2[i] THEN RETURN (FALSE) END; INC(i); END; *) (* now the strings are equal up to here, i *) (* IF (i > h1) OR (s1[i] = NUL) THEN *)(* s1 possibly shorter, and s2 possibly longer *) (* LOOP IF (i > h2) OR (s2[i] = NUL) THEN EXIT END; IF s2[i] <> ' ' THEN RETURN FALSE END; INC(i) END ELSE *) (* s2 is shorter, s1 is longer *) (* LOOP IF (i > h1) OR (s1[i] = NUL) THEN EXIT END; IF s1[i] <> ' ' THEN RETURN FALSE END; INC(i) END END; RETURN(TRUE); *) (* s1 = s2 *) RETURN Compare(s1, s2 ) = EqualTo; END Equal; PROCEDURE Compare(s1, s2: ARRAY OF CHAR): Result; (* Added, jnp *) VAR i, h1, h2: INTEGER; BEGIN h1:= HIGH(s1); h2:= HIGH(s2); i:= 0; LOOP IF (i > h1) OR (s1[i] = NUL) THEN EXIT END; IF (i > h2) OR (s2[i] = NUL) THEN EXIT END; IF s1[i] < s2[i] THEN RETURN LessThan ELSIF s1[i] > s2[i] THEN RETURN GreaterThan END; INC(i); END; (* LOOP *) (* now the strings are equal up to here, i *) IF (i > h1) OR (s1[i] = NUL) THEN (* s1 possibly shorter, and s2 possibly longer *) LOOP IF (i > h2) OR (s2[i] = NUL) THEN EXIT END; IF s2[i] <> ' ' THEN RETURN LessThan END; INC(i) END (* LOOP *) ELSE (* s2 is shorter, s1 is longer *) LOOP IF (i > h1) OR (s1[i] = NUL) THEN EXIT END; IF s1[i] <> ' ' THEN RETURN GreaterThan END; INC(i) END (* LOOP *) END; (* IF *) RETURN EqualTo; (* s1 = s2 *) END Compare; PROCEDURE Occurs(s, p: ARRAY OF CHAR): BOOLEAN; VAR sl, pl, i, k: INTEGER; PROCEDURE Same(): BOOLEAN; BEGIN FOR k := 0 TO pl - 1 DO IF s[k+i] # p[k] THEN RETURN FALSE END END; (* FOR *) RETURN TRUE END Same; BEGIN sl:= Length(s); pl:= Length(p); IF sl >= pl THEN FOR i := 0 TO sl - pl DO IF Same() THEN RETURN TRUE END END (* FOR *) END; (* IF *) RETURN FALSE END Occurs; PROCEDURE Copy(from: ARRAY OF CHAR; VAR to: ARRAY OF CHAR); VAR i: INTEGER; BEGIN i := 0; LOOP IF i > HIGH(to) THEN EXIT END; IF (i > HIGH(from)) OR (from[i] = NUL) THEN to[i] := NUL; EXIT END; (* IF *) to[i] := from[i]; INC (i) END (* LOOP *) END Copy; PROCEDURE Concat(VAR dest: ARRAY OF CHAR; pat: ARRAY OF CHAR); VAR i, j: INTEGER; BEGIN i := 0; WHILE (i <= HIGH(dest)) & (dest[i] # NUL) DO INC(i) END; j := 0; LOOP IF (i > HIGH(dest)) OR (j > HIGH(pat)) OR (pat[j] = NUL) THEN EXIT END; dest[i] := pat[j]; INC(i); INC(j) END; (* LOOP *) IF i <= HIGH(dest) THEN dest[i] := NUL END END Concat; PROCEDURE Min(x, y: INTEGER): INTEGER; BEGIN IF x > y THEN RETURN y ELSE RETURN x END END Min; (* GeneralCopyString *) PROCEDURE GCS(VAR ts: ARRAY OF CHAR; (* destination string *) tp: INTEGER; (* start position destination *) fs: ARRAY OF CHAR; (* source string *) fp, (* start position source *) l: INTEGER); (* length *) VAR max: INTEGER; BEGIN IF ((fp + l) > HIGH(fs) + 1) OR ((tp + l) > HIGH(ts) + 1) THEN HALT (* Error ('GeneralCopyString', 'array bounds error') *) END; (* IF *) max:= fp + l; LOOP IF fp >= max THEN EXIT END; ts[tp] := fs[fp]; INC(tp); INC(fp) END (* LOOP *) END GCS; PROCEDURE Insert(VAR bs: ARRAY OF CHAR; pat: ARRAY OF CHAR; i: INTEGER); VAR ol, nl, rl, ssl: INTEGER; BEGIN ol := Length(bs); IF ol >= i THEN ssl := Min(Length(pat), HIGH(bs) + 1 - i); IF ssl > 0 THEN rl := Min(ol, HIGH(bs) + 1 - ssl) - i; IF rl > 0 THEN GCS(bs,i+ssl,bs,i,rl) END; (* IF *) GCS(bs,i,pat,0,ssl) END; (* IF *) nl:= i + ssl + rl; IF nl <= HIGH(bs) THEN bs[nl]:= NUL END (* IF *) END (* IF *) END Insert; PROCEDURE Delete(VAR bs: ARRAY OF CHAR; fp, l: INTEGER); VAR ol, nl, rl: INTEGER; BEGIN ol := Length(bs); IF ol > fp THEN rl := ol - fp; IF rl > l THEN GCS(bs,fp,bs,fp + l,rl - l); nl := ol - l; ELSE nl := fp; END; (* IF *) IF nl <= HIGH (bs) THEN bs[nl] := NUL END (* IF *) END (* IF *) END Delete; END StringLib0. SHAR_EOF fi # end of overwriting check # End of shell archive exit 0 ---