[comp.sources.mac] Changes for the MacMETH vers 2.3 toolbox

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
---