Home » Archimedes archive » Zipped Apps » BCPL » BCPL/b/trn

BCPL/b/trn

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Zipped Apps » BCPL
Filename: BCPL/b/trn
Read OK:
File size: 866E bytes
Load address: 0000
Exec address: 0000
File contents
SECTION "TrnA"

GET "b.Header"

STATIC
$( /* Version of 01 Nov 85 15:44:31
   */
   dummy = VersionMark
   version = 1*256+1
$)

LET bcpl.trn(x) = VALOF
$( nameBlockV := GetVector(name.block.vector.size)

   FOR j = 0 TO name.block.vector.size-1 DO
     nameBlockV!j := 0

   err.p, err.l := Level(), fail

   nameVecE := -1
   AddName(0, 0, 0)
   namepbase := nameVecE+1

   globList, globListe := 0, @globList
   globCount := 0

   casekvec := 0

   endcaseLabel, defaultLabel := 0, 0;
   resultLabel, breakLabel, loopLabel := -1, -1, -1;
   returnLabel := 0;

   accessible := FALSE;
   currentBranch := x
   ocount := 0
   paramNumber := 0
   undefCount := 0

   // If necessary, initialise the OCODE store buffers.
   // Otherwise, open the OCODE file for output if this
   // not already been done.

   TEST retainOcode THEN $(
      ocodeBuf := GetWithMark(oc.size, ocode.mark)
      ocodeBufs := ocodeBuf
      oc.lastbyte!ocodeBuf := oc.firstbyte
      oc.next!ocodeBuf := 0 $)
   ELSE $(
      IF ocodeStream=0 THEN
      $( ocodeStream := open(ocodeFile, FALSE, FALSE)
	 IF ocodestream=0 THEN
	    complain("Can't open *"%S*" for output", ocodeFile) $);
      SelectOutput(ocodeStream) $)

   WHILE x~=0 & (h1!x=s.section | h1!x=s.needs) DO $(
      Out1(h1!x)
      OutString(h2!x+1)
      x:=h3!x $)

   ssp := saveSpaceSize
   Out2(s.stack, ssp)

   DeclLabels(x)
   Trans(x)
   DeclExternals()

   Out2(s.global, globCount)

   WHILE globList~=0 DO
   $( Out2(gl.number!globList, gl.label!globList)
      globList := gl.link!globList $)

fail:
   EndOcode()
   SelectOutput(verstream)

   RESULTIS -1
$)

AND NextParam() = VALOF
$( paramNumber := paramNumber+1
   RESULTIS paramNumber
$)

AND CompEntry(n, l) BE
$( LET s = @n!2
   LET t = s%0

   Out2(s.entry, t); Out1(l);
   accessible := TRUE;

   FOR i = 1 TO t DO
   $( LET c = s%i
      Out1(transChars -> charCode!c, c) $)
$)

AND CompJump(l) BE Out2(s.jump, l)

AND EndOcode() BE IF ~retainOcode THEN
$( WrCh('*N')
   ocount := 0
$)

AND DeclExternals() BE
$( LET e = externals.list

   WHILE e~=0 DO
   $( LET l1 = h3!e
      LET l2 = h4!e

      IF l1~=0 THEN
	 TEST l2=0 THEN $(
	    Out2(s.refext, l1)
	    OutString(h2!e) $)
	 ELSE $(
	    CompDataLab(l1)
	    Out2(s.iteml, l2) $)

      IF l2~=0 THEN
      $( Out2(s.defext, l2)
	 OutString(h2!e) $)
      e := h1!e $)
$)

AND Trans(x) BE IF x~=0 THEN
$( LET sw = FALSE
   currentBranch := x
   SWITCHON h1!x INTO
   $( DEFAULT:
	TransReport(100, x)
	ENDCASE

      CASE s.let:
      $( LET a, s, s1 = nameVecE, ssp, 0
	 LET v = vecssp

	 Declnames(h2!x)
	 CheckDistinct(a+1, nameVecE)
	 vecssp, s1 := ssp, ssp
	 ssp := s
	 TransDef(h2!x)

	 IF ssp~=s1 THEN TransReport(110, x)

	 IF ssp~=vecssp THEN $(
	    ssp := vecssp
	    Out2(s.stack, ssp) $)

	 OutOp(s.store)
	 DeclLabels(h3!x)
	 Trans(h3!x)

	 vecssp := v
	 IF accessible & ssp~=s THEN Out2(s.stack, s)
	 nameVecE, ssp := a, s
	 ENDCASE $)

      CASE s.static:
      CASE s.global:
      CASE s.manifest:
      CASE s.external:
      $( LET a, s = nameVecE, ssp
	 LET op = h1!x
	 LET list = h2!x
	 LET p = list+2

	 FOR i = 0 TO h2!list-1 BY 3 DO $(
	    LET name = p!i
	    LET k = p!(i+1)
	    LET type = op

	    trnLineCount := p!(i+2)

	    TEST op=s.manifest THEN
	    $( LET name = 0
	       LET kt = 0

	       IF k~=0 & ~SmallNumber(k) THEN kt := h1!k

	       IF kt=s.name THEN $(
		  name := FindName(k)
		  kt := name.type!name $)

	       TEST kt~=s.string & kt~=s.table |
		    extension.level<5 THEN $(
		  type := s.number
		  k := EvalConst(k) $)
	       ELSE $(
		  type := kt

		  TEST name=0 THEN $(
		     IF kt=s.table THEN
			h2!k := nameVecE
		     h1!k := 0 $)
		  ELSE
		     k := name.value!name $) $)

	    ELSE IF op=s.global
	       THEN k := EvalConst(k)

	    TEST op=s.static THEN $(
	       LET m = NextParam()
	       LET l = 0

	       IF extension.level>=5 THEN
		  l := CheckLabel(k)

	       AddName(name, s.label, m)
	       CompDataLab(m)

	       TEST l=0
		  THEN Out2(s.itemn, EvalConst(k))
		  ELSE Out2(s.iteml, l) $)

	    ELSE
	       AddName(name, type, k) $)

	 DeclLabels(h3!x)
	 Trans(h3!x)
	 nameVecE, ssp := a, s
	 ENDCASE $)

      CASE s.ass:
	 Assign(h2!x, h3!x, 0)
	 ENDCASE

      CASE s.opab:
	 Assign(h3!x, h4!x, h2!x)
	 ENDCASE

      CASE s.rtap:
      $( LET s = ssp
	 ssp := ssp+saveSpaceSize
	 Out2(s.stack, ssp)
	 LoadList(h3!x)
	 Load(h2!x)
	 Out2(s.rtap, s)
	 ssp := s
	 ENDCASE $)

      CASE s.goto:
	 Load(h2!x)
	 OutOp(s.goto)
	 ssp := ssp-1;
	 accessible := FALSE;
	 ENDCASE

      CASE s.colon:
	 CompLab(h4!x, ssp)
	 Trans(h3!x)
	 ENDCASE

      CASE s.unless:
	 sw := TRUE
      CASE s.if:
      $( LET val = ?

	 TEST CheckConstant(h2!x, @val) THEN
	    IF sw=(val=0) THEN Trans(h3!x)
	 ELSE $(
	    LET l = NextParam()
	    JumpCond(h2!x, sw, l)
	    Trans(h3!x)
	    CompLab(l, ssp) $)
	 ENDCASE $)

      CASE s.test:
      $( LET val = ?

	 TEST CheckConstant(h2!x, @val) THEN
	    TEST val~=0 THEN
	       Trans(h3!x)
	    ELSE
	       Trans(h4!x)

	 ELSE $(
	    LET l, m = NextParam(), NextParam()
	    JumpCond(h2!x, FALSE, l)
	    Trans(h3!x)
	    TEST accessible
	       THEN CompJump(m)
	       ELSE m := 0;
	    CompLab(l, ssp);
	    Trans(h4!x);
	    CompLab(m, ssp) $)
	 ENDCASE $)

      CASE s.loop:
	 IF loopLabel<0 THEN TransReport(108, x)
	 IF loopLabel=0 THEN loopLabel := NextParam()
	 CompJump(loopLabel);
	 ENDCASE

      CASE s.break:
	 IF breakLabel<0 THEN TransReport(104, x)
	 IF breakLabel=0 THEN breakLabel := NextParam()
	 CompJump(breakLabel)
	 ENDCASE

      CASE s.return:
	 IF returnLabel<0 THEN TransReport(91, x);
	 OutOp(s.rtrn);
	 accessible := FALSE;
	 ENDCASE

      CASE s.finish:
	 OutOp(s.finish);
	 accessible := FALSE;
	 ENDCASE

      CASE s.resultis:
	 IF resultLabel<0 THEN TransReport(107, x)
	 Load(h2!x)
	 TEST resultLabel=0
	    THEN OutOp(s.fnrn)
	    ELSE Out2(s.res, resultLabel);
	 ssp := ssp-1;
	 accessible := FALSE;
	 ENDCASE

      CASE s.while:
	 sw := TRUE
      CASE s.until:
      $( LET l,  m = NextParam(), NextParam()
	 LET bl, ll = breakLabel,  loopLabel

	 breakLabel, loopLabel := 0, m

	 CompJump(m)
	 CompLab(l, ssp)
	 Trans(h3!x)
	 CompLab(m, ssp)
	 JumpCond(h2!x, sw, l)

	 CompLab(breakLabel, ssp)
	 breakLabel, loopLabel := bl, ll
	 ENDCASE $)

      CASE s.repeatwhile:
	 sw := TRUE
      CASE s.repeatuntil:
      CASE s.repeat:
      $( LET l = NextParam()
	 LET bl = breakLabel
	 LET ll = loopLabel

	 breakLabel, loopLabel := 0, NextParam()
	 CompLab(l, ssp)

	 TEST h1!x=s.repeat THEN $(
	    loopLabel := l;
	    Trans(h2!x);
	    CompJump(l);
	    accessible := FALSE $)
	 ELSE $(
	    Trans(h2!x)
	    CompLab(loopLabel, ssp)
	    JumpCond(h3!x, sw, l) $)

	 CompLab(breakLabel, ssp)
	 breakLabel, loopLabel := bl, ll
	 ENDCASE $)

      CASE s.case:
      $( LET l, k = NextParam(), EvalConst(h2!x)
	 TEST casekvec=0 THEN
	    TransReport(105, x)
	 ELSE $(
	    IF caseptr>=caselim THEN $(
	       rc := 20
	       TransReport(141, x) $)
	    FOR i = 0 TO caseptr-1 DO
	       IF casekvec!i=k THEN
		  TransReport(106, x)

	    casekvec!caseptr := k
	    caselvec!caseptr := l
	    caseptr := caseptr+1

	    CompLab(l, ssp) $)
	 Trans(h3!x)
	 ENDCASE $)

      CASE s.default:
	 IF casekvec=0 | defaultLabel~=0 THEN TransReport(101, x)
	 defaultLabel := NextParam()
	 CompLab(defaultLabel, ssp)
	 Trans(h2!x)
	 ENDCASE

      CASE s.endcase:
	 IF casekvec=0 THEN TransReport(121, x);
	 IF endcaseLabel=0 THEN endCaseLabel := NextParam();
	 CompJump(endcaseLabel);
	 ENDCASE

      CASE s.switchon:
	 TransSwitch(x);
	 ENDCASE

      CASE s.for:
	 TransFor(x)
	 ENDCASE

      CASE s.semicolon:
	 trnLineCount := h3!x
	 Trans(h2!x)
	 trnLineCount := h5!x
	 Trans(h4!x)
	 ENDCASE

      CASE s.semicolonlist:
	 FOR h = 2 TO h2!x BY 2 DO $(
	    trnLineCount := x!(h+1)
	    Trans(h!x) $)
	 ENDCASE
   $)
$)

AND CheckConstant(x, lv.v) = VALOF
$( IF x=0 THEN RESULTIS FALSE

   IF SmallNumber(x) THEN $(
      !lv.v := x
      RESULTIS TRUE $)

   SWITCHON h1!x INTO
   $( CASE s.name:
      $( LET n = FindName(x)

	 IF name.type!n=s.number THEN $(
	    !lv.v := name.value!n
	    RESULTIS TRUE $)
	 RESULTIS FALSE $)

      CASE s.number: !lv.v := h2!x;  RESULTIS TRUE
      CASE s.true:   !lv.v := TRUE;  RESULTIS TRUE
      CASE s.false:  !lv.v := FALSE; RESULTIS TRUE

      DEFAULT:			     RESULTIS  FALSE
   $)
$)

AND DeclNames(x) BE UNTIL x=0 DO
   SWITCHON h1!x INTO
   $( DEFAULT:
	 TransReport(102, currentBranch)
	 BREAK

      CASE s.vecdef: CASE s.valdef:
	 trnLineCount := h4!x
	 DeclDyn(h2!x)
	 BREAK

      CASE s.rtdef: CASE s.fndef:
	 trnLineCount := h6!x
	 h5!x := NextParam()
	 DeclStat(h2!x, h5!x)
	 BREAK

      CASE s.and:
	 DeclNames(h2!x)
	 x := h3!x
	 LOOP
   $)


AND DeclDyn(x) BE IF x~=0 THEN
   SWITCHON h1!x INTO
   $( CASE s.name:
	 AddName(x, s.local, ssp)
	 ssp := ssp+1
	 ENDCASE

      CASE s.comma:
	 AddName(h2!x, s.local, ssp)
	 ssp := ssp+1
	 DeclDyn(h3!x)
	 ENDCASE

      CASE s.commalist:
	 FOR h = 2 TO h2!x+1 DO DeclDyn(h!x)
	 ENDCASE

      DEFAULT:
	 TransReport(103, x)
   $)


AND DeclStat(x, l) BE
$( LET name = FindName(x)

   IF name.type!name=s.global THEN $(
      LET n = name.value!name
      LET g = GetBlk(gl.size)

      AddName(x, s.global, n)

      globcount := globCount+1
      gl.number!g := n
      gl.label!g := l
      gl.link!g := 0

      !globListE := g
      globListE := gl.link+g
      RETURN $)

   IF name.type!name=s.external THEN $(
      LET e = name.value!name
      h4!e := l
      AddName(x, s.external, e)
      RETURN $)

   $( LET m = NextParam()
      AddName(x, s.label, m)
      CompDataLab(m)
      Out1(s.iteml); Out1(l) $)
$)

AND DeclLabels(x) BE
$( LET b = nameVecE
   ScanLabels(x)
   CheckDistinct(b+1, nameVecE)
$)

AND CheckDistinct(p, q) BE
   FOR s = q TO p+1 BY -1 DO $(
      LET n = name.name!name(s)

      FOR r = p TO s-1 DO
	IF n=name.name!name(r) THEN TransReport(142, n) $)

AND AddName(name, type, value) BE
$( LET b, v, nblk = ?, ?, ?
   nameVecE := nameVecE+1

   b := nameVecE>>name.block.shift
   IF b>=name.block.vector.size THEN
   $( rc := 20
      TransReport(143, currentBranch) $)

   v := nameBlockV!b
   IF v=0 THEN
   $( v := GetVector(name.size * name.block.size)
      nameBlockV!b := v $)

   nblk := v+name.size * (nameVecE & name.block.mask)
   name.name!nblk := name
   name.type!nblk := type
   name.value!nblk := value
$)

AND Name(num) = VALOF
  //
  // Returns the object for the name of the given number.
  //
$( LET b = nameBlockV!(num>>name.block.shift)

     // If all is well, the block should already have been
     // allocated

   IF b=0 THEN $(
      rc := 20
      TransReport(1882, currentBranch) $)

   RESULTIS b+name.size * [num & name.block.mask]
$)


AND FindCell(n) = VALOF
  // Finds the cell number of the name 'n', returning zero
  // if it is not found.
$( FOR x = nameVecE TO 1 BY -1 DO
     IF name.name!Name(x)=n THEN
       RESULTIS x

   RESULTIS 0
$)

AND FindName(n) = Name(FindCell(n))

AND ScanLabels(x) BE IF x~=0 THEN
   SWITCHON h1!x INTO
   $( CASE s.colon:
	 h4!x := NextParam()
	 DeclStat(h2!x, h4!x)

      CASE s.if: CASE s.unless: CASE s.while:
      CASE s.until: CASE s.switchon: CASE s.case:
	 ScanLabels(h3!x)
	 ENDCASE

      CASE s.semicolonlist:
	 FOR h = 2 TO h2!x BY 2 DO ScanLabels(h!x)
	 ENDCASE

      CASE s.semicolon:
	 ScanLabels(h4!x)

      CASE s.repeat: CASE s.repeatwhile:
      CASE s.repeatuntil: CASE s.default:
	 ScanLabels(h2!x)
	 ENDCASE

      CASE s.test:
	 ScanLabels(h3!x)
	 ScanLabels(h4!x)
	 ENDCASE
   $)

AND TransDef(x) BE
$( TransDynDefs(x)

   IF StatDefs(x) THEN
   $( LET l, s = 0, ssp
      IF accessible THEN
      $( l := NextParam();
	 CompJump(l) $);

      TransStatDefs(x)
      ssp := s
      CompLab(l, ssp) $)
$)

AND TransDynDefs(x) BE SWITCHON h1!x INTO
$( CASE s.and:
      TransDynDefs(h2!x)
      x := h3!x
      LOOP

   CASE s.vecdef:
      trnLineCount := h4!x
      $( LET n = EvalConst(h3!x);
	 Out2(s.llp, vecssp+(backwardVecs -> n, 0));
	 ssp := ssp+1;
	 vecssp := vecssp+1+n $);
      BREAK

   CASE s.valdef:
      trnLineCount := h4!x
      LoadList(h3!x)
      BREAK

   DEFAULT:
      BREAK
$) REPEAT

AND TransStatDefs(x) BE
$( WHILE h1!x=s.and DO
   $( TransStatDefs(h2!x)
      x := h3!x $);

   IF h1!x=s.fndef | h1!x=s.rtdef THEN $(
      LET a,  c = nameVecE, namepbase
      LET bl, ll = breakLabel, loopLabel
      LET rl, kv = resultLabel, casekvec
      LET rtl, ecl = returnLabel, endcaseLabel;

      trnLineCount := h6!x

      breakLabel,  loopLabel := -1, -1
      resultLabel, casekvec := -1,  0
      returnLabel, endcaseLabel := -1, -1;

      CompEntry(h2!x, h5!x)
      ssp := saveSpaceSize

      namepbase := nameVecE+1

      DeclDyn(h3!x)
      CheckDistinct(a+1, nameVecE)
      DeclLabels(h4!x)

      Out2(s.save, ssp)

      TEST h1!x=s.fndef THEN $(
	 LET y = h4!x;
	 TEST h1!y=s.valof THEN $(
	    DeclLabels(h2!y);
	    resultLabel := 0;
	    Trans(h2!y);
	    IF accessible THEN TransReport(92, x) $)
	 ELSE $(
	    Load(y)
	    OutOp(s.fnrn);
	    accessible := FALSE $) $)

      ELSE $(
	 returnLabel := 0;
	 Trans(h4!x);
	 CompLab(returnLabel, ssp) $);

      IF accessible THEN
      $( OutOp(s.rtrn);
	 accessible := FALSE $);

      Out2(s.endproc, 0);

      breakLabel,  loopLabel := bl, ll;
      resultLabel, casekvec := rl, kv;
      nameVecE,    namepbase := a,  c;
      returnLabel, endcaseLabel := rtl, ecl $)
$)

AND StatDefs(x) = h1!x=s.fndef | h1!x=s.rtdef -> TRUE,
		  h1!x~=s.and -> FALSE,
		  StatDefs(h2!x) -> TRUE,
		  StatDefs(h3!x)

AND JumpCond(x, b, l) BE
$( LET sw = b
   IF ~SmallNumber(x) THEN
      SWITCHON h1!x INTO
      $( CASE s.false:
	    b := ~b

	 CASE s.true:
	    IF b THEN CompJump(l)
	    RETURN

	 CASE s.not:
	    JumpCond(h2!x, ~b, l)
	    RETURN

	 CASE s.logand:
	    sw := ~sw

	 CASE s.logor:
	    TEST sw THEN $(
	       JumpCond(h2!x, b, l)
	       JumpCond(h3!x, b, l) $)
	    ELSE $(
	       LET m = NextParam()
	       JumpCond(h2!x, ~b, m)
	       JumpCond(h3!x, b, l)
	       CompLab(m, -1) $)
	    RETURN
      $)

   Load(x)
   Out2(b -> s.jt, s.jf, l)
   ssp := ssp-1
$)

AND TransSwitch(x) BE
$( LET kvec, lvec = casekvec, caselvec
   LET cp, clim = caseptr, caselim
   LET ecl, dl = endcaseLabel, defaultLabel
   LET l = NextParam()

   endcaseLabel := 0;

   caseptr := 0
   caselim := h4!x

   casekvec := GetVector(2*caselim)
   caselvec := casekvec+caselim

   CompJump(l);
   defaultLabel := 0;

   Trans(h3!x);
   IF accessible THEN
   $( IF endcaseLabel=0 THEN endcaseLabel := NextParam();
      CompJump(endcaseLabel) $);

   CompLab(l, ssp)
   Load(h2!x)

   IF defaultLabel=0 THEN
   $( IF endcaseLabel=0 THEN endcaseLabel := NextParam();
      defaultLabel := endcaseLabel $);

   Out2(s.switchon, caselim)
   Out1(defaultLabel)

   FOR i = 0 TO caselim-1 DO Out2(casekvec!i, caselvec!i)

   accessible := FALSE;
   ssp := ssp-1;
   CompLab(endcaseLabel, ssp)

   FreeVector(casekvec)
   endcaseLabel, defaultLabel := ecl, dl
   casekvec, caselvec := kvec, lvec
   caseptr, caselim := cp, clim
$)


AND TransFor(x) BE
$( LET a = nameVecE
   LET m = NextParam()
   LET l = ?
   LET dojump = TRUE
   LET bl, ll = breakLabel, loopLabel
   LET k, n = 0, 0
   LET step = 1
   LET s = ssp

   breakLabel, loopLabel := 0, 0

   AddName(h2!x, s.local, s)
   Load(h3!x)

   IF h5!x~=0 THEN step := EvalConst(h5!x)

   TEST CheckConstant(h4!x, @n) THEN $(
      LET first = ?
      k := s.ln

      IF CheckConstant(h3!x, @first) THEN
	    // Only compare the values if they are of the
	    // same sign, to avoid inconsistencies with
	    // the target machine's handling of loops.

	 IF (n NEQV first)>=0 THEN
	    IF first<=n & step>=0 |
	       first>=n & step<0 THEN
	       dojump := FALSE $)

      ELSE $(
	 k, n := s.lp, ssp
	 Load(h4!x) $)

   OutOp(s.store)

   IF dojump THEN
   $( l := NextParam()
      CompJump(l) $)

   DeclLabels(h6!x)
   CompLab(m, ssp)
   Trans(h6!x)

   CompLab(loopLabel, ssp)

   Out2(s.lp, s); Out2(s.ln, step)
   OutOp(s.plus); Out2(s.sp, s)

   IF dojump THEN CompLab(l, ssp)

   TEST step>=0 THEN $(
      Out2(s.lp,s)
      Out2(k,n) $)
   ELSE $(
      Out2(k,n)
      Out2(s.lp,s) $)

   Out2(s.endfor, m)

   CompLab(breakLabel, s);
   breakLabel, loopLabel, ssp := bl, ll, s

   nameVecE := a
$)

.


SECTION "TrnB"

GET "b.Header"

STATIC
$( /* Version of 28 Feb 86 12:47:18
   */
   dummy = VersionMark
   version = 1*256+4
$)

/* 1.3	07 Feb 86 13:44:20
     Floating point incorporated
   1.4	28 Feb 86 12:46:52
     op:= allowed for selections
*/

LET Load(x) BE
$( IF x=0 THEN
   $( TransReport(148, currentBranch)
      LoadZero()
      RETURN $)

   IF SmallNumber(x) THEN
   $( Out2(s.ln, x)
      ssp := ssp+1
      RETURN $)

   $( LET op = h1!x
      SWITCHON op INTO
      $( DEFAULT:
	    TransReport(147, currentBranch)
	    LoadZero()
	    RETURN

	 CASE s.byteap:
	    op := s.getbyte

	 CASE s.div: CASE s.rem: CASE s.minus:
	 CASE s.fdiv:CASE s.fminus:
	 CASE s.ls:  CASE s.gr:  CASE s.le:  CASE s.ge:
	 CASE s.lls: CASE s.lgr: CASE s.lle: CASE s.lge:
	 CASE s.fls: CASE s.fgr: CASE s.fle: CASE s.fge:
	 CASE s.lshift: CASE s.rshift:
	    Load(h2!x)
	    Load(h3!x)
	    OutOp(op)
	    ssp := ssp-1
	    RETURN

	 CASE s.of:
	     // If the field is a whole word in size,
	     // code for x!v is generated.
	 $( LET selector = EvalConst(h2!x)
	    LET offset = selector & slct.max.offset
	    Load(h3!x)

	    TEST selector~=offset THEN $(
	       LET size = selector>>slct.size.shift;
	       LET shift = (selector>>slct.shift.shift) & slct.mask;
	       IF size=0 THEN size := bitswidth-shift;
	       OutOp(s.slctap)
	       Out1(size); Out1(shift); Out1(offset) $)
	    ELSE $(
	       Out2(s.ln, offset)
	       Out2(s.plus, s.rv) $)

	    RETURN $)

	 CASE s.vecap:
	 CASE s.mult:  CASE s.plus:
	 CASE s.eq:    CASE s.ne:
	 CASE s.fmult: CASE s.fplus:
	 CASE s.feq:   CASE s.fne:
	 CASE s.logand:CASE s.logor: CASE s.eqv: CASE s.neqv:
	 $( LET a, b = h2!x, h3!x
	      // Try to get the simpler operand on the right.

	    IF SmallNumber(a) | h1!a=s.name | h1!a=s.number THEN
	       a, b := h3!x, h2!x

	    Load(a)
	    Load(b)

	    IF op=s.vecap THEN
	    $( OutOp(s.plus)
	       op := s.rv $)

	    OutOp(op)
	    ssp := ssp-1
	    RETURN $)

	 CASE s.neg: CASE s.not: CASE s.rv: CASE s.abs:
	 CASE s.fneg:CASE s.fabs:
	 CASE s.fix: CASE s.float:
	 CASE s.car: CASE s.cdr: CASE s.vcar: CASE s.vcdr:
	    Load(h2!x)
	    OutOp(op)
	    RETURN

	 CASE s.nil:
	 CASE s.true: CASE s.false: CASE s.query:
	    OutOp(op)
	    ssp := ssp+1
	    RETURN

	 CASE s.lv:
	    LoadLV(h2!x)
	    RETURN

	 CASE s.number:
	    Out2(s.ln, h2!x)
	    ssp := ssp+1
	    RETURN

	 CASE s.fconst:
	    Out2(s.fconst, h2!x);
	    Out1(h3!x);
	    ssp := ssp+1;
	    ENDCASE

	 CASE s.slct:
	    Out2(s.ln, EvalConst(x))
	    ssp := ssp+1
	    RETURN

	 CASE s.string:
	    OutOp(s.lstr)
	    OutString(@h2!x)
	    ssp := ssp+1
	    RETURN

	 CASE s.name:
	    TransName(x, s.lp, s.lg, s.ll, s.ln, s.lll)
	    ssp := ssp+1
	    RETURN

	 CASE s.valof:
	 $( LET rl = resultLabel;
	    LET a = nameVecE;

	    DeclLabels(h2!x);
	    resultLabel := NextParam();
	    Trans(h2!x);
	    IF accessible THEN TransReport(92, x);

	    CompLab(resultLabel, -1);
	    Out2(s.rstack, ssp);

	    ssp := ssp+1;
	    nameVecE := a;
	    resultLabel := rl;
	    RETURN $)

	 CASE s.fnap:
	 $( LET s = ssp
	    ssp := ssp+saveSpaceSize
	    Out2(s.stack, ssp)
	    LoadList(h3!x)
	    Load(h2!x)
	    Out2(s.fnap, s)
	    ssp := s+1
	    RETURN $)

	 CASE s.cond:
	 $( LET val = ?

	    TEST CheckConstant(h2!x, @val) THEN
	       Load((val -> h3!x, h4!x))
	    ELSE $(
	       LET l, m = NextParam(), NextParam()
	       LET s = ssp

	       JumpCond(h2!x, FALSE, m);
	       Out2(s.stack, ssp)
	       Load(h3!x)
	       Out2(s.res,l)

	       ssp := s

	       CompLab(m, ssp)
	       Load(h4!x)
	       Out2(s.res,l)

	       CompLab(l, ssp)
	       Out2(s.rstack,s) $)
	    RETURN $)

	 CASE s.table:
	    Out2(s.lll, define.table(x))
	    ssp := ssp+1
	    RETURN
      $)
   $)
$)

AND LoadLV(x) BE
$( IF x=0 | SmallNumber(x) THEN GOTO err

   SWITCHON h1!x INTO
   $( DEFAULT:
   err: TransReport(113, currentBranch)
	LoadZero()
	ENDCASE

      CASE s.name:
	TransName(x, s.llp, s.llg,
		     (restrictedLanguage -> 0, s.lll), 0, 0)
	ssp := ssp+1
	ENDCASE

      CASE s.rv:
	Load(h2!x)
	ENDCASE

      CASE s.vecap:
	$( LET a, b = h2!x, h3!x

	   IF SmallNumber(a) | h1!a=s.name THEN
	     a, b := h3!x, h2!x

	   Load(a)
	   Load(b)
	   OutOp(s.plus)
	   ssp := ssp-1
	   ENDCASE $)
   $)
$)

AND LoadZero() BE
$( Out2(s.ln, 0)
   ssp := ssp+1
$)

AND LoadList(x) BE IF x~=0 THEN
$( IF ~SmallNumber(x) THEN $(
      LET p, n = 0, 0

      IF h1!x=s.comma THEN p, n := x+1, 2
      IF h1!x=s.commalist THEN p, n := x+2, h2!x

      IF p~=0 THEN $(
	 FOR h = 0 TO n-1 DO Load(h!p)
	 RETURN $) $)
   Load(x)
$)

AND EvalConst(x) = VALOF
$( LET a, b = 0, 0

   IF x=0 THEN
   $( TransReport(117, currentBranch)
      RESULTIS 0 $)

   IF SmallNumber(x) THEN RESULTIS x

   SWITCHON h1!x INTO
   $( DEFAULT:
	TransReport(118, x)
	RESULTIS 0

      CASE s.name:
	$( LET n = FindName(x)
	   LET k = name.type!n

	   IF k=0 THEN
	   $( TransReport(115, x)
	      undefCount := undefCount+1
	      RESULTIS undefCount $)

	   IF k=s.number THEN RESULTIS name.value!n

	   TransReport(119, x)
	   RESULTIS 0
	$)

      CASE s.number: RESULTIS h2!x

      CASE s.true:   RESULTIS TRUE

      CASE s.query:
      CASE s.false:  RESULTIS FALSE

      CASE s.cond:
	IF extension.level>=5 THEN
	$( LET b = EvalConst(h2!x)
	   LET t = EvalConst(h3!x)
	   LET f = EvalConst(h4!x)

	   RESULTIS b -> t, f $)
	TransReport(118, x)
	RESULTIS 0

      CASE s.slct:
	$( LET size = EvalConst(h2!x)
	   LET shift = EvalConst(h3!x)
	   LET offset = EvalConst(h4!x)

	   TEST 0<=size<=(bitswidth-shift) &
		0<=shift<bitswidth &
		0<=offset<=slct.max.offset THEN
	      RESULTIS [size<<slct.size.shift]	+
		       [shift<<slct.shift.shift] +
		       offset

	   ELSE $(
	      TransReport(120, x)
	      RESULTIS 0 $)
	$)

      CASE s.mult: CASE s.div: CASE s.rem:
      CASE s.plus: CASE s.minus:
      CASE s.lshift: CASE s.rshift:
      CASE s.logor: CASE s.logand: CASE s.eqv: CASE s.neqv:
	b := EvalConst(h3!x)

      CASE s.abs: CASE s.neg: CASE s.not:
	a := EvalConst(h2!x)
   $)

   SWITCHON h1!x INTO
   $( CASE s.abs:    RESULTIS ABS a
      CASE s.neg:    RESULTIS -a
      CASE s.not:    RESULTIS ~a

      CASE s.mult:   RESULTIS a*b
      CASE s.div:    RESULTIS a/b
      CASE s.rem:    RESULTIS a REM b
      CASE s.plus:   RESULTIS a+b
      CASE s.minus:  RESULTIS a-b
      CASE s.lshift: RESULTIS a<<b
      CASE s.rshift: RESULTIS a>>b
      CASE s.logand: RESULTIS a&b
      CASE s.logor:  RESULTIS a|b
      CASE s.eqv:    RESULTIS a EQV b
      CASE s.neqv:   RESULTIS a NEQV b
   $)
$)


AND Assign(x, y, op) BE
$( IF x=0 | SmallNumber(x) | y=0 THEN
   $( TransReport(110, currentBranch)
      RETURN $)

   IF ~SmallNumber(y) &
      [h1!y=s.comma | h1!y=s.commalist] &
      h1!y~=h1!x THEN
   $( TransReport(112, currentBranch)
      RETURN $)

   SWITCHON h1!x INTO
   $( CASE s.comma:
      CASE s.commalist:
	IF SmallNumber(y) | h1!x~=h1!y THEN
	$( TransReport(112, currentBranch)
	   ENDCASE $)

	$( LET l, n = h2, 2

	   IF h1!x=s.commalist THEN
	   $( l, n := h3, h2!x

	      IF h2!y~=n THEN
	      $( TransReport(112, currentBranch)
		 ENDCASE $) $)

	   FOR h = l TO l+n-1 DO
	     Assign(h!x, h!y, op)

	   ENDCASE
	$)

      CASE s.name:
	Load(y)
	TEST op=0 THEN
	   TransName(x, s.sp, s.sg,
			(restrictedLanguage -> 0, s.sl), 0, 0)
	ELSE $(
	   LoadLV(x);
	   Out2(s.mod, op);
	   ssp := ssp-1 $);
	ssp := ssp-1;
	ENDCASE

      CASE s.byteap:
	Load(y)
	Load(h2!x)
	Load(h3!x)

	OutOp(s.putbyte)
	ssp := ssp-3

	    // a % b +:= 2 is not allowed

	IF op~=0 THEN
	  TransReport(150, currentBranch)

	ENDCASE

      CASE s.of:
      $( LET selector = EvalConst(h2!x)
	 LET offset = selector & slct.max.offset

	 Load(y)
	 Load(h3!x)

	 TEST selector~=offset THEN $(
	    LET size = selector>>slct.size.shift;
	    LET shift = (selector>>slct.shift.shift) & slct.mask;
	    IF size=0 THEN size := bitswidth-shift;
	    TEST op=0 THEN $(
	       OutOp(s.slctst);
	       Out1(size); Out1(shift); Out1(offset) $)
	    ELSE $(
	       OutOp(s.slctap);
	       Out1(size); Out1(shift); Out1(offset);
	       Out2(s.modslct, op) $) $)

	 ELSE $(
	    Out2(s.ln, offset)
	    OutOp(s.plus)
	    TEST op=0 THEN
	       OutOp(s.stind)
	    ELSE
	       Out2(s.mod, op) $)
	 ssp := ssp-2
	 ENDCASE
      $)

      CASE s.rv: CASE s.vecap:
	 Load(y)
	 LoadLV(x)

	 TEST op=0 THEN
	    OutOp(s.stind)
	 ELSE
	    Out2(s.mod, op);
	 ssp := ssp-2
	 ENDCASE

      CASE s.nil:
	Load(y);
	OutOp(s.stnil);
	ssp := ssp-1;
	ENDCASE

      CASE s.car: CASE s.cdr: CASE s.vcar: CASE s.vcdr:
	IF op~=0 THEN TransReport(150, currentBranch);
	Load(y);
	Load(h2!x);
	OutOp(h1!x+s.stcar-s.car);
	ssp := ssp-2;
	ENDCASE

      DEFAULT:
	TransReport(109, currentBranch)
   $)
$)

AND TransName(x, p, g, l, n, s) BE
$( LET t = FindCell(x)
   LET nam = Name(t)
   LET k, a = name.type!nam, name.value!nam
   LET op = g

   SWITCHON k INTO
   $( DEFAULT:
	TransReport(115, x)
	ENDCASE

      CASE s.local:
	IF t<namepbase THEN TransReport(116, x)
	op := p
	ENDCASE

      CASE s.global:
	ENDCASE

      CASE s.label:
	TEST l=0
	   THEN TransReport(113, x)
	   ELSE op := l
	ENDCASE

      CASE s.number:
	TEST n=0
	   THEN TransReport(113, x)
	   ELSE op := n
	ENDCASE

      CASE s.string:
      CASE s.table:
	TEST s=0 THEN
	   TransReport(113, x)
	ELSE $(
	   LET l =!a
	   IF l=0 THEN $(
	      TEST k=s.string
		 THEN l := define.string(a+1)
		 ELSE l := define.table(a)

	      !a := l $)
	   a := l
	   op := s $)
	ENDCASE

      CASE s.external:
	TEST l=0 THEN
	   TransReport(113, x)
	ELSE $(
	   LET e = a;
	   a := h3!e;
	   IF a=0 THEN $(
	      a := NextParam()
	      h3!e := a $);
	   op := l $)
	ENDCASE
   $)
   Out2(op, a)
$)


AND define.string(sptr) = VALOF
  // Outputs a DSTR operation to define a string, returning
  // the label number as the result.
$( LET l = NextParam()
   Out2(s.dstr, l)
   OutString(sptr)
   RESULTIS l
$)


AND define.table(tab) = VALOF
  // Outputs a DTAB operation to define a table, returning
  // the label as the result.
  //
  //	DTAB l n t1 v1 t2 v2 ..... tn vn
  //
  // The parameter is a pointer to a TABLE object from the
  // parse tree.
$( LET label = NextParam()
   LET keep = nameVecE
   LET ln = trnLineCount
   LET names = h2!tab
   LET listptr = h4+tab
   LET list = ! listptr
   LET v, n = listptr, 1
   LET bsiz = ?
   LET bitmap = ?
   LET word, p, shift = 0, 0, bitsperword-1

     // Find the type and size of the value list

   IF ~SmallNumber(list) THEN $(
      IF h1!list=s.comma THEN $(
	 v := list+1
	 n := 2 $)

      IF h1!list=s.commalist THEN $(
	 v := list+2
	 n := h2!list $) $);

   bsiz := (n-1)/bitsperword+1
   bitmap := GetVector(bsiz)

     // The 'h2' field of a table object holds the end of
     // name vector at the time at which the table was
     // Declared.  If this field is negative, this is the
     // first time that the table has been encountered.
     // Otherwise, the name pointer must be changed while
     // table is being evaluated.

   IF names>=0 THEN nameVecE := names

     // The 'h3' field holds the line number of the table.

   trnLineCount := h3!tab

   FOR j = 0 TO n-1 DO $(
      LET e = v!j
      LET l = extension.level<5 -> 0, CheckLabel(e)
      LET b = 0

      TEST l=0 THEN
	 v!j := EvalConst(e)
      ELSE $(
	 b := 1
	 v!j := l $)

      IF shift<0 THEN $(
	 bitmap!p := word
	 p := p+1
	 word := 0
	 shift := bitsperword-1 $)

      word := word | (b << shift)
      shift := shift-1 $)

   bitmap!p := word
   p := 0
   shift := -1

   // Generate the DTAB operation and Output the types and values.

   Out2(s.dtab, label)
   Out1(n)

   FOR j = 0 TO n-1 DO $(
      IF shift<0 THEN $(
	 word := bitmap!p
	 p := p+1
	 shift := bitsperword-1 $)

      Out2(([(word >> shift) & 1]~=0 -> s.iteml,
					s.itemn),
	   v!j)

      shift := shift-1 $)

   freevector(bitmap)

     // The names pointer and line number can now be reset.

   nameVecE := keep
   trnLineCount := ln

   RESULTIS label
$)

AND CheckLabel(x) = SmallNumber(x) -> 0, VALOF
  // Checks whether the expression defined by 'x' is of
  // 'label' (table or string) or 'numeric' type.  The
  // result is zero or a label number.
$( LET type = h1!x
   LET name = FALSE
   LET thing = x

   IF type=s.name THEN $(
      LET n = FindName(x)

      name := TRUE
      type := name.type!n
      thing := name.value!n $)

   IF type=s.string | type=s.table THEN $(
      LET label = ?

      IF name THEN $(
	 label :=!thing
	 IF label~=0 THEN RESULTIS label $)

      TEST type=s.string
	 THEN label := define.string(thing+1)
	 ELSE label := define.table(thing)

      IF name THEN !thing := label

      RESULTIS label $)

   RESULTIS 0
$)

AND CompLab(l, s) BE
$( IF l~=0 THEN
   $( Out2(s.lab, l);
      accessible := TRUE $);
   IF s>=0 THEN Out2(s.stack, s)
$)

AND CompDataLab(l) BE
$( Out1(s.datalab);
   Out1(l)
$)

AND OutString(x) BE
$( LET l = x%0
   Out1(l)
   FOR i = 1 TO l DO Out1(x%i)
$)

AND OutOp(op) BE
$( IF outLineCount~=trnLineCount THEN $(
      Out1(s.linecount);
      Out1(trnLineCount);
      outLineCount := trnLineCount $);
   Out1(op)
$)

AND Out1(n) BE
   TEST retainOcode THEN
      TEST -127<=n<=127 THEN
	 PByte(n & 255)
      ELSE $(
	 LET shift = 8 * (bytesperword-1)
	 PByte(#X80)

	 FOR j = 1 TO bytesperword DO $(
	    PByte((n >> shift) & 255)
	    shift := shift-8 $) $)

   ELSE $(
      IF n<0 THEN $(
	 wrc('-'); n := - n
	 IF n<0 THEN $(
	    LET ndiv10 = (n >> 1)/5
	    wrpn(ndiv10)
	    n:=n-ndiv10*10 $) $)

      wrpn(n)
      wrc('*s') $)

AND PByte(byte) BE
$( LET ptr = oc.lastbyte!ocodebuf
   IF ptr>=oc.bytes THEN $(
      LET b = GetWithMark(oc.size, ocode.mark)
      !ocodeBuf := b;
      ocodeBuf := b
      oc.next!ocodeBuf := 0
      ptr := oc.firstbyte $)
   ocodeBuf%ptr := byte
   oc.lastbyte!ocodeBuf := ptr+1
$)

AND WrPn(n) BE
$( IF n>9 THEN WrPn(n/10)
   WrC(n REM 10+'0')
$)

AND Out2(x, y) BE $( OutOp(x); Out1(y)	$)

AND WrC(ch) BE
$( ocount := ocount+1
   IF ocount>62 & ch='*S' THEN
   $( WrCh('*N')
      ocount := 0
      RETURN $)
   WrCh(ch)
$)

AND TransReport(n, x) BE
$( LET arg = x+2
   LET str = Output()
   LET s = ?
   LET newrc, wm = 10, "Error";

   SelectOutput(verstream)

   s := VALOF SWITCHON n INTO
   $( DEFAULT: arg := n; RESULTIS "%N"

      CASE 101: RESULTIS "illegal use of DEFAULT"
      CASE 105: RESULTIS "illegal use of CASE"
      CASE 121: RESULTIS "illegal use of ENDCASE"
      CASE 104: RESULTIS "illegal use of BREAK"
      CASE 108: RESULTIS "illegal use of LOOP"
      CASE 107: RESULTIS "illegal use of RESULTIS"
      CASE 106: RESULTIS "two cases with the same constant"
      CASE 109:
      CASE 113: RESULTIS "L-type expression expected"
      CASE 110:
      CASE 112: RESULTIS "LHS and RHS do not match"
      CASE 115: RESULTIS "'%S' not declared"
      CASE 116: RESULTIS "dynamic free variable used ('%S')"
      CASE 117:
      CASE 118:
      CASE 119: RESULTIS "invalid constant expression"
      CASE 120: RESULTIS "invalid parameter in selector"
      CASE 142: RESULTIS "'%S' declared twice"
      CASE 143: RESULTIS "too many names declared"
      CASE 150: RESULTIS "invalid LHS for compound assignment"
      CASE  91: RESULTIS "RETURN used in body of function"
      CASE  92: RESULTIS "value of VALOF block may be undefined"
   $)

   IF n<100 THEN newrc, wm := 5, "Warning";
   WriteF("%s near line %N: ", wm, trnLineCount)
   WriteF(s, arg)

   IF rc>=20 THEN
   $( WriteS("compilation abandoned*N")
      LongJump(err.p, err.l) $)

   IF rc<newrc THEN rc := newrc

   NewLine()
   SelectOutput(str)
$)

.

SECTION "PTree"

GET "b.Header"

STATIC
$( /* Version of 07 Feb 86 13:55:00
   */
   dummy = VersionMark
   version = 1*256+2
$)

/* 1.2	07 Feb 86 13:44:20
     Floating point incorporated
*/

LET bcpl.ptree(a) BE PList(a, 0, 30)

AND PList(x, n, d) BE
$( LET size = 0
   LET v = TABLE 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   IF n=0 THEN
     err.p, err.l := Level(), exit

   IF x=0 THEN
   $( WriteS("nil"); RETURN $)

   IF SmallNumber(x) THEN
   $( WriteN(x); RETURN $)

   SWITCHON h1!x INTO
   $( CASE s.number:
	 WriteN(h2!x)
	 RETURN
      CASE s.fconst:
	 WriteF("%nE%n", h2!x, h3!x);
	 RETURN

      CASE s.name:
	 WriteS(x+2)
	 RETURN

      CASE s.string:
	 WriteF("*"%S*"",x+1)
	 RETURN

      CASE s.semicolonlist:
      CASE s.commalist:
	 size := h2!x+2
	 goto out
      CASE s.for:
	 size := size+2

      CASE s.cond:CASE s.fndef:CASE s.rtdef:
      CASE s.test:
	 size := size+1

      CASE s.needs:CASE s.section:CASE s.vecap:
      CASE s.byteap:CASE s.fnap:CASE s.mult:
      CASE s.div:CASE s.rem:CASE s.plus:CASE s.minus:
      CASE s.eq:CASE s.ne:CASE s.ls:CASE s.gr:
      CASE s.le:CASE s.ge:CASE s.lshift:CASE s.rshift:
      CASE s.lle:CASE s.lge:CASE s.lls:CASE s.lgr:
      CASE s.fmult:CASE s.fdiv:CASE s.fplus:CASE s.fminus:
      CASE s.feq:CASE s.fne:CASE s.fls:CASE s.fgr:
      CASE s.fle:CASE s.fge:
      CASE s.logand:CASE s.logor:CASE s.eqv:CASE s.neqv:
      CASE s.comma:CASE s.and:CASE s.valdef:
      CASE s.vecdef:CASE s.ass:CASE s.rtap:CASE s.colon:
      CASE s.if:CASE s.unless:CASE s.while:CASE s.until:
      CASE s.repeatwhile:CASE s.repeatuntil:CASE s.let:
      CASE s.switchon:CASE s.case:
      CASE s.manifest:CASE s.static:CASE s.global:
	 size := size+1

      CASE s.valof:CASE s.lv:CASE s.rv:CASE s.neg:
      CASE s.not:CASE s.abs:CASE s.table:CASE s.goto:
      CASE s.fneg:CASE s.fabs:CASE s.fix:CASE s.float:
      CASE s.resultis:CASE s.repeat:CASE s.default:
      CASE s.car:CASE s.cdr:CASE s.vcar:CASE s.vcdr:
	 size := size+1

      CASE s.loop:CASE s.break:CASE s.return:
      CASE s.finish:CASE s.endcase:CASE s.true:
      CASE s.false:CASE s.query:
      CASE s.nil:
      DEFAULT:
	 size := size+1

out:	 IF n=d THEN
	 $( WriteS("etc"); RETURN $)
	 WriteS("op")
	 WriteN(h1!x)
	 FOR i = 2 TO size DO
	 $( NewLine()
	    FOR j = 0 TO n-1 DO WriteS(v!j)
	    WriteS("**-")
	    v!n := i= size-> "  ","! "
	    PList(h1!(x+i-1), n+1, d)
	 $)
   $)
exit:
$)

00000000  53 45 43 54 49 4f 4e 20  22 54 72 6e 41 22 0a 0a  |SECTION "TrnA"..|
00000010  47 45 54 20 22 62 2e 48  65 61 64 65 72 22 0a 0a  |GET "b.Header"..|
00000020  53 54 41 54 49 43 0a 24  28 20 2f 2a 20 56 65 72  |STATIC.$( /* Ver|
00000030  73 69 6f 6e 20 6f 66 20  30 31 20 4e 6f 76 20 38  |sion of 01 Nov 8|
00000040  35 20 31 35 3a 34 34 3a  33 31 0a 20 20 20 2a 2f  |5 15:44:31.   */|
00000050  0a 20 20 20 64 75 6d 6d  79 20 3d 20 56 65 72 73  |.   dummy = Vers|
00000060  69 6f 6e 4d 61 72 6b 0a  20 20 20 76 65 72 73 69  |ionMark.   versi|
00000070  6f 6e 20 3d 20 31 2a 32  35 36 2b 31 0a 24 29 0a  |on = 1*256+1.$).|
00000080  0a 4c 45 54 20 62 63 70  6c 2e 74 72 6e 28 78 29  |.LET bcpl.trn(x)|
00000090  20 3d 20 56 41 4c 4f 46  0a 24 28 20 6e 61 6d 65  | = VALOF.$( name|
000000a0  42 6c 6f 63 6b 56 20 3a  3d 20 47 65 74 56 65 63  |BlockV := GetVec|
000000b0  74 6f 72 28 6e 61 6d 65  2e 62 6c 6f 63 6b 2e 76  |tor(name.block.v|
000000c0  65 63 74 6f 72 2e 73 69  7a 65 29 0a 0a 20 20 20  |ector.size)..   |
000000d0  46 4f 52 20 6a 20 3d 20  30 20 54 4f 20 6e 61 6d  |FOR j = 0 TO nam|
000000e0  65 2e 62 6c 6f 63 6b 2e  76 65 63 74 6f 72 2e 73  |e.block.vector.s|
000000f0  69 7a 65 2d 31 20 44 4f  0a 20 20 20 20 20 6e 61  |ize-1 DO.     na|
00000100  6d 65 42 6c 6f 63 6b 56  21 6a 20 3a 3d 20 30 0a  |meBlockV!j := 0.|
00000110  0a 20 20 20 65 72 72 2e  70 2c 20 65 72 72 2e 6c  |.   err.p, err.l|
00000120  20 3a 3d 20 4c 65 76 65  6c 28 29 2c 20 66 61 69  | := Level(), fai|
00000130  6c 0a 0a 20 20 20 6e 61  6d 65 56 65 63 45 20 3a  |l..   nameVecE :|
00000140  3d 20 2d 31 0a 20 20 20  41 64 64 4e 61 6d 65 28  |= -1.   AddName(|
00000150  30 2c 20 30 2c 20 30 29  0a 20 20 20 6e 61 6d 65  |0, 0, 0).   name|
00000160  70 62 61 73 65 20 3a 3d  20 6e 61 6d 65 56 65 63  |pbase := nameVec|
00000170  45 2b 31 0a 0a 20 20 20  67 6c 6f 62 4c 69 73 74  |E+1..   globList|
00000180  2c 20 67 6c 6f 62 4c 69  73 74 65 20 3a 3d 20 30  |, globListe := 0|
00000190  2c 20 40 67 6c 6f 62 4c  69 73 74 0a 20 20 20 67  |, @globList.   g|
000001a0  6c 6f 62 43 6f 75 6e 74  20 3a 3d 20 30 0a 0a 20  |lobCount := 0.. |
000001b0  20 20 63 61 73 65 6b 76  65 63 20 3a 3d 20 30 0a  |  casekvec := 0.|
000001c0  0a 20 20 20 65 6e 64 63  61 73 65 4c 61 62 65 6c  |.   endcaseLabel|
000001d0  2c 20 64 65 66 61 75 6c  74 4c 61 62 65 6c 20 3a  |, defaultLabel :|
000001e0  3d 20 30 2c 20 30 3b 0a  20 20 20 72 65 73 75 6c  |= 0, 0;.   resul|
000001f0  74 4c 61 62 65 6c 2c 20  62 72 65 61 6b 4c 61 62  |tLabel, breakLab|
00000200  65 6c 2c 20 6c 6f 6f 70  4c 61 62 65 6c 20 3a 3d  |el, loopLabel :=|
00000210  20 2d 31 2c 20 2d 31 2c  20 2d 31 3b 0a 20 20 20  | -1, -1, -1;.   |
00000220  72 65 74 75 72 6e 4c 61  62 65 6c 20 3a 3d 20 30  |returnLabel := 0|
00000230  3b 0a 0a 20 20 20 61 63  63 65 73 73 69 62 6c 65  |;..   accessible|
00000240  20 3a 3d 20 46 41 4c 53  45 3b 0a 20 20 20 63 75  | := FALSE;.   cu|
00000250  72 72 65 6e 74 42 72 61  6e 63 68 20 3a 3d 20 78  |rrentBranch := x|
00000260  0a 20 20 20 6f 63 6f 75  6e 74 20 3a 3d 20 30 0a  |.   ocount := 0.|
00000270  20 20 20 70 61 72 61 6d  4e 75 6d 62 65 72 20 3a  |   paramNumber :|
00000280  3d 20 30 0a 20 20 20 75  6e 64 65 66 43 6f 75 6e  |= 0.   undefCoun|
00000290  74 20 3a 3d 20 30 0a 0a  20 20 20 2f 2f 20 49 66  |t := 0..   // If|
000002a0  20 6e 65 63 65 73 73 61  72 79 2c 20 69 6e 69 74  | necessary, init|
000002b0  69 61 6c 69 73 65 20 74  68 65 20 4f 43 4f 44 45  |ialise the OCODE|
000002c0  20 73 74 6f 72 65 20 62  75 66 66 65 72 73 2e 0a  | store buffers..|
000002d0  20 20 20 2f 2f 20 4f 74  68 65 72 77 69 73 65 2c  |   // Otherwise,|
000002e0  20 6f 70 65 6e 20 74 68  65 20 4f 43 4f 44 45 20  | open the OCODE |
000002f0  66 69 6c 65 20 66 6f 72  20 6f 75 74 70 75 74 20  |file for output |
00000300  69 66 20 74 68 69 73 0a  20 20 20 2f 2f 20 6e 6f  |if this.   // no|
00000310  74 20 61 6c 72 65 61 64  79 20 62 65 65 6e 20 64  |t already been d|
00000320  6f 6e 65 2e 0a 0a 20 20  20 54 45 53 54 20 72 65  |one...   TEST re|
00000330  74 61 69 6e 4f 63 6f 64  65 20 54 48 45 4e 20 24  |tainOcode THEN $|
00000340  28 0a 20 20 20 20 20 20  6f 63 6f 64 65 42 75 66  |(.      ocodeBuf|
00000350  20 3a 3d 20 47 65 74 57  69 74 68 4d 61 72 6b 28  | := GetWithMark(|
00000360  6f 63 2e 73 69 7a 65 2c  20 6f 63 6f 64 65 2e 6d  |oc.size, ocode.m|
00000370  61 72 6b 29 0a 20 20 20  20 20 20 6f 63 6f 64 65  |ark).      ocode|
00000380  42 75 66 73 20 3a 3d 20  6f 63 6f 64 65 42 75 66  |Bufs := ocodeBuf|
00000390  0a 20 20 20 20 20 20 6f  63 2e 6c 61 73 74 62 79  |.      oc.lastby|
000003a0  74 65 21 6f 63 6f 64 65  42 75 66 20 3a 3d 20 6f  |te!ocodeBuf := o|
000003b0  63 2e 66 69 72 73 74 62  79 74 65 0a 20 20 20 20  |c.firstbyte.    |
000003c0  20 20 6f 63 2e 6e 65 78  74 21 6f 63 6f 64 65 42  |  oc.next!ocodeB|
000003d0  75 66 20 3a 3d 20 30 20  24 29 0a 20 20 20 45 4c  |uf := 0 $).   EL|
000003e0  53 45 20 24 28 0a 20 20  20 20 20 20 49 46 20 6f  |SE $(.      IF o|
000003f0  63 6f 64 65 53 74 72 65  61 6d 3d 30 20 54 48 45  |codeStream=0 THE|
00000400  4e 0a 20 20 20 20 20 20  24 28 20 6f 63 6f 64 65  |N.      $( ocode|
00000410  53 74 72 65 61 6d 20 3a  3d 20 6f 70 65 6e 28 6f  |Stream := open(o|
00000420  63 6f 64 65 46 69 6c 65  2c 20 46 41 4c 53 45 2c  |codeFile, FALSE,|
00000430  20 46 41 4c 53 45 29 0a  09 20 49 46 20 6f 63 6f  | FALSE).. IF oco|
00000440  64 65 73 74 72 65 61 6d  3d 30 20 54 48 45 4e 0a  |destream=0 THEN.|
00000450  09 20 20 20 20 63 6f 6d  70 6c 61 69 6e 28 22 43  |.    complain("C|
00000460  61 6e 27 74 20 6f 70 65  6e 20 2a 22 25 53 2a 22  |an't open *"%S*"|
00000470  20 66 6f 72 20 6f 75 74  70 75 74 22 2c 20 6f 63  | for output", oc|
00000480  6f 64 65 46 69 6c 65 29  20 24 29 3b 0a 20 20 20  |odeFile) $);.   |
00000490  20 20 20 53 65 6c 65 63  74 4f 75 74 70 75 74 28  |   SelectOutput(|
000004a0  6f 63 6f 64 65 53 74 72  65 61 6d 29 20 24 29 0a  |ocodeStream) $).|
000004b0  0a 20 20 20 57 48 49 4c  45 20 78 7e 3d 30 20 26  |.   WHILE x~=0 &|
000004c0  20 28 68 31 21 78 3d 73  2e 73 65 63 74 69 6f 6e  | (h1!x=s.section|
000004d0  20 7c 20 68 31 21 78 3d  73 2e 6e 65 65 64 73 29  | | h1!x=s.needs)|
000004e0  20 44 4f 20 24 28 0a 20  20 20 20 20 20 4f 75 74  | DO $(.      Out|
000004f0  31 28 68 31 21 78 29 0a  20 20 20 20 20 20 4f 75  |1(h1!x).      Ou|
00000500  74 53 74 72 69 6e 67 28  68 32 21 78 2b 31 29 0a  |tString(h2!x+1).|
00000510  20 20 20 20 20 20 78 3a  3d 68 33 21 78 20 24 29  |      x:=h3!x $)|
00000520  0a 0a 20 20 20 73 73 70  20 3a 3d 20 73 61 76 65  |..   ssp := save|
00000530  53 70 61 63 65 53 69 7a  65 0a 20 20 20 4f 75 74  |SpaceSize.   Out|
00000540  32 28 73 2e 73 74 61 63  6b 2c 20 73 73 70 29 0a  |2(s.stack, ssp).|
00000550  0a 20 20 20 44 65 63 6c  4c 61 62 65 6c 73 28 78  |.   DeclLabels(x|
00000560  29 0a 20 20 20 54 72 61  6e 73 28 78 29 0a 20 20  |).   Trans(x).  |
00000570  20 44 65 63 6c 45 78 74  65 72 6e 61 6c 73 28 29  | DeclExternals()|
00000580  0a 0a 20 20 20 4f 75 74  32 28 73 2e 67 6c 6f 62  |..   Out2(s.glob|
00000590  61 6c 2c 20 67 6c 6f 62  43 6f 75 6e 74 29 0a 0a  |al, globCount)..|
000005a0  20 20 20 57 48 49 4c 45  20 67 6c 6f 62 4c 69 73  |   WHILE globLis|
000005b0  74 7e 3d 30 20 44 4f 0a  20 20 20 24 28 20 4f 75  |t~=0 DO.   $( Ou|
000005c0  74 32 28 67 6c 2e 6e 75  6d 62 65 72 21 67 6c 6f  |t2(gl.number!glo|
000005d0  62 4c 69 73 74 2c 20 67  6c 2e 6c 61 62 65 6c 21  |bList, gl.label!|
000005e0  67 6c 6f 62 4c 69 73 74  29 0a 20 20 20 20 20 20  |globList).      |
000005f0  67 6c 6f 62 4c 69 73 74  20 3a 3d 20 67 6c 2e 6c  |globList := gl.l|
00000600  69 6e 6b 21 67 6c 6f 62  4c 69 73 74 20 24 29 0a  |ink!globList $).|
00000610  0a 66 61 69 6c 3a 0a 20  20 20 45 6e 64 4f 63 6f  |.fail:.   EndOco|
00000620  64 65 28 29 0a 20 20 20  53 65 6c 65 63 74 4f 75  |de().   SelectOu|
00000630  74 70 75 74 28 76 65 72  73 74 72 65 61 6d 29 0a  |tput(verstream).|
00000640  0a 20 20 20 52 45 53 55  4c 54 49 53 20 2d 31 0a  |.   RESULTIS -1.|
00000650  24 29 0a 0a 41 4e 44 20  4e 65 78 74 50 61 72 61  |$)..AND NextPara|
00000660  6d 28 29 20 3d 20 56 41  4c 4f 46 0a 24 28 20 70  |m() = VALOF.$( p|
00000670  61 72 61 6d 4e 75 6d 62  65 72 20 3a 3d 20 70 61  |aramNumber := pa|
00000680  72 61 6d 4e 75 6d 62 65  72 2b 31 0a 20 20 20 52  |ramNumber+1.   R|
00000690  45 53 55 4c 54 49 53 20  70 61 72 61 6d 4e 75 6d  |ESULTIS paramNum|
000006a0  62 65 72 0a 24 29 0a 0a  41 4e 44 20 43 6f 6d 70  |ber.$)..AND Comp|
000006b0  45 6e 74 72 79 28 6e 2c  20 6c 29 20 42 45 0a 24  |Entry(n, l) BE.$|
000006c0  28 20 4c 45 54 20 73 20  3d 20 40 6e 21 32 0a 20  |( LET s = @n!2. |
000006d0  20 20 4c 45 54 20 74 20  3d 20 73 25 30 0a 0a 20  |  LET t = s%0.. |
000006e0  20 20 4f 75 74 32 28 73  2e 65 6e 74 72 79 2c 20  |  Out2(s.entry, |
000006f0  74 29 3b 20 4f 75 74 31  28 6c 29 3b 0a 20 20 20  |t); Out1(l);.   |
00000700  61 63 63 65 73 73 69 62  6c 65 20 3a 3d 20 54 52  |accessible := TR|
00000710  55 45 3b 0a 0a 20 20 20  46 4f 52 20 69 20 3d 20  |UE;..   FOR i = |
00000720  31 20 54 4f 20 74 20 44  4f 0a 20 20 20 24 28 20  |1 TO t DO.   $( |
00000730  4c 45 54 20 63 20 3d 20  73 25 69 0a 20 20 20 20  |LET c = s%i.    |
00000740  20 20 4f 75 74 31 28 74  72 61 6e 73 43 68 61 72  |  Out1(transChar|
00000750  73 20 2d 3e 20 63 68 61  72 43 6f 64 65 21 63 2c  |s -> charCode!c,|
00000760  20 63 29 20 24 29 0a 24  29 0a 0a 41 4e 44 20 43  | c) $).$)..AND C|
00000770  6f 6d 70 4a 75 6d 70 28  6c 29 20 42 45 20 4f 75  |ompJump(l) BE Ou|
00000780  74 32 28 73 2e 6a 75 6d  70 2c 20 6c 29 0a 0a 41  |t2(s.jump, l)..A|
00000790  4e 44 20 45 6e 64 4f 63  6f 64 65 28 29 20 42 45  |ND EndOcode() BE|
000007a0  20 49 46 20 7e 72 65 74  61 69 6e 4f 63 6f 64 65  | IF ~retainOcode|
000007b0  20 54 48 45 4e 0a 24 28  20 57 72 43 68 28 27 2a  | THEN.$( WrCh('*|
000007c0  4e 27 29 0a 20 20 20 6f  63 6f 75 6e 74 20 3a 3d  |N').   ocount :=|
000007d0  20 30 0a 24 29 0a 0a 41  4e 44 20 44 65 63 6c 45  | 0.$)..AND DeclE|
000007e0  78 74 65 72 6e 61 6c 73  28 29 20 42 45 0a 24 28  |xternals() BE.$(|
000007f0  20 4c 45 54 20 65 20 3d  20 65 78 74 65 72 6e 61  | LET e = externa|
00000800  6c 73 2e 6c 69 73 74 0a  0a 20 20 20 57 48 49 4c  |ls.list..   WHIL|
00000810  45 20 65 7e 3d 30 20 44  4f 0a 20 20 20 24 28 20  |E e~=0 DO.   $( |
00000820  4c 45 54 20 6c 31 20 3d  20 68 33 21 65 0a 20 20  |LET l1 = h3!e.  |
00000830  20 20 20 20 4c 45 54 20  6c 32 20 3d 20 68 34 21  |    LET l2 = h4!|
00000840  65 0a 0a 20 20 20 20 20  20 49 46 20 6c 31 7e 3d  |e..      IF l1~=|
00000850  30 20 54 48 45 4e 0a 09  20 54 45 53 54 20 6c 32  |0 THEN.. TEST l2|
00000860  3d 30 20 54 48 45 4e 20  24 28 0a 09 20 20 20 20  |=0 THEN $(..    |
00000870  4f 75 74 32 28 73 2e 72  65 66 65 78 74 2c 20 6c  |Out2(s.refext, l|
00000880  31 29 0a 09 20 20 20 20  4f 75 74 53 74 72 69 6e  |1)..    OutStrin|
00000890  67 28 68 32 21 65 29 20  24 29 0a 09 20 45 4c 53  |g(h2!e) $).. ELS|
000008a0  45 20 24 28 0a 09 20 20  20 20 43 6f 6d 70 44 61  |E $(..    CompDa|
000008b0  74 61 4c 61 62 28 6c 31  29 0a 09 20 20 20 20 4f  |taLab(l1)..    O|
000008c0  75 74 32 28 73 2e 69 74  65 6d 6c 2c 20 6c 32 29  |ut2(s.iteml, l2)|
000008d0  20 24 29 0a 0a 20 20 20  20 20 20 49 46 20 6c 32  | $)..      IF l2|
000008e0  7e 3d 30 20 54 48 45 4e  0a 20 20 20 20 20 20 24  |~=0 THEN.      $|
000008f0  28 20 4f 75 74 32 28 73  2e 64 65 66 65 78 74 2c  |( Out2(s.defext,|
00000900  20 6c 32 29 0a 09 20 4f  75 74 53 74 72 69 6e 67  | l2).. OutString|
00000910  28 68 32 21 65 29 20 24  29 0a 20 20 20 20 20 20  |(h2!e) $).      |
00000920  65 20 3a 3d 20 68 31 21  65 20 24 29 0a 24 29 0a  |e := h1!e $).$).|
00000930  0a 41 4e 44 20 54 72 61  6e 73 28 78 29 20 42 45  |.AND Trans(x) BE|
00000940  20 49 46 20 78 7e 3d 30  20 54 48 45 4e 0a 24 28  | IF x~=0 THEN.$(|
00000950  20 4c 45 54 20 73 77 20  3d 20 46 41 4c 53 45 0a  | LET sw = FALSE.|
00000960  20 20 20 63 75 72 72 65  6e 74 42 72 61 6e 63 68  |   currentBranch|
00000970  20 3a 3d 20 78 0a 20 20  20 53 57 49 54 43 48 4f  | := x.   SWITCHO|
00000980  4e 20 68 31 21 78 20 49  4e 54 4f 0a 20 20 20 24  |N h1!x INTO.   $|
00000990  28 20 44 45 46 41 55 4c  54 3a 0a 09 54 72 61 6e  |( DEFAULT:..Tran|
000009a0  73 52 65 70 6f 72 74 28  31 30 30 2c 20 78 29 0a  |sReport(100, x).|
000009b0  09 45 4e 44 43 41 53 45  0a 0a 20 20 20 20 20 20  |.ENDCASE..      |
000009c0  43 41 53 45 20 73 2e 6c  65 74 3a 0a 20 20 20 20  |CASE s.let:.    |
000009d0  20 20 24 28 20 4c 45 54  20 61 2c 20 73 2c 20 73  |  $( LET a, s, s|
000009e0  31 20 3d 20 6e 61 6d 65  56 65 63 45 2c 20 73 73  |1 = nameVecE, ss|
000009f0  70 2c 20 30 0a 09 20 4c  45 54 20 76 20 3d 20 76  |p, 0.. LET v = v|
00000a00  65 63 73 73 70 0a 0a 09  20 44 65 63 6c 6e 61 6d  |ecssp... Declnam|
00000a10  65 73 28 68 32 21 78 29  0a 09 20 43 68 65 63 6b  |es(h2!x).. Check|
00000a20  44 69 73 74 69 6e 63 74  28 61 2b 31 2c 20 6e 61  |Distinct(a+1, na|
00000a30  6d 65 56 65 63 45 29 0a  09 20 76 65 63 73 73 70  |meVecE).. vecssp|
00000a40  2c 20 73 31 20 3a 3d 20  73 73 70 2c 20 73 73 70  |, s1 := ssp, ssp|
00000a50  0a 09 20 73 73 70 20 3a  3d 20 73 0a 09 20 54 72  |.. ssp := s.. Tr|
00000a60  61 6e 73 44 65 66 28 68  32 21 78 29 0a 0a 09 20  |ansDef(h2!x)... |
00000a70  49 46 20 73 73 70 7e 3d  73 31 20 54 48 45 4e 20  |IF ssp~=s1 THEN |
00000a80  54 72 61 6e 73 52 65 70  6f 72 74 28 31 31 30 2c  |TransReport(110,|
00000a90  20 78 29 0a 0a 09 20 49  46 20 73 73 70 7e 3d 76  | x)... IF ssp~=v|
00000aa0  65 63 73 73 70 20 54 48  45 4e 20 24 28 0a 09 20  |ecssp THEN $(.. |
00000ab0  20 20 20 73 73 70 20 3a  3d 20 76 65 63 73 73 70  |   ssp := vecssp|
00000ac0  0a 09 20 20 20 20 4f 75  74 32 28 73 2e 73 74 61  |..    Out2(s.sta|
00000ad0  63 6b 2c 20 73 73 70 29  20 24 29 0a 0a 09 20 4f  |ck, ssp) $)... O|
00000ae0  75 74 4f 70 28 73 2e 73  74 6f 72 65 29 0a 09 20  |utOp(s.store).. |
00000af0  44 65 63 6c 4c 61 62 65  6c 73 28 68 33 21 78 29  |DeclLabels(h3!x)|
00000b00  0a 09 20 54 72 61 6e 73  28 68 33 21 78 29 0a 0a  |.. Trans(h3!x)..|
00000b10  09 20 76 65 63 73 73 70  20 3a 3d 20 76 0a 09 20  |. vecssp := v.. |
00000b20  49 46 20 61 63 63 65 73  73 69 62 6c 65 20 26 20  |IF accessible & |
00000b30  73 73 70 7e 3d 73 20 54  48 45 4e 20 4f 75 74 32  |ssp~=s THEN Out2|
00000b40  28 73 2e 73 74 61 63 6b  2c 20 73 29 0a 09 20 6e  |(s.stack, s).. n|
00000b50  61 6d 65 56 65 63 45 2c  20 73 73 70 20 3a 3d 20  |ameVecE, ssp := |
00000b60  61 2c 20 73 0a 09 20 45  4e 44 43 41 53 45 20 24  |a, s.. ENDCASE $|
00000b70  29 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |)..      CASE s.|
00000b80  73 74 61 74 69 63 3a 0a  20 20 20 20 20 20 43 41  |static:.      CA|
00000b90  53 45 20 73 2e 67 6c 6f  62 61 6c 3a 0a 20 20 20  |SE s.global:.   |
00000ba0  20 20 20 43 41 53 45 20  73 2e 6d 61 6e 69 66 65  |   CASE s.manife|
00000bb0  73 74 3a 0a 20 20 20 20  20 20 43 41 53 45 20 73  |st:.      CASE s|
00000bc0  2e 65 78 74 65 72 6e 61  6c 3a 0a 20 20 20 20 20  |.external:.     |
00000bd0  20 24 28 20 4c 45 54 20  61 2c 20 73 20 3d 20 6e  | $( LET a, s = n|
00000be0  61 6d 65 56 65 63 45 2c  20 73 73 70 0a 09 20 4c  |ameVecE, ssp.. L|
00000bf0  45 54 20 6f 70 20 3d 20  68 31 21 78 0a 09 20 4c  |ET op = h1!x.. L|
00000c00  45 54 20 6c 69 73 74 20  3d 20 68 32 21 78 0a 09  |ET list = h2!x..|
00000c10  20 4c 45 54 20 70 20 3d  20 6c 69 73 74 2b 32 0a  | LET p = list+2.|
00000c20  0a 09 20 46 4f 52 20 69  20 3d 20 30 20 54 4f 20  |.. FOR i = 0 TO |
00000c30  68 32 21 6c 69 73 74 2d  31 20 42 59 20 33 20 44  |h2!list-1 BY 3 D|
00000c40  4f 20 24 28 0a 09 20 20  20 20 4c 45 54 20 6e 61  |O $(..    LET na|
00000c50  6d 65 20 3d 20 70 21 69  0a 09 20 20 20 20 4c 45  |me = p!i..    LE|
00000c60  54 20 6b 20 3d 20 70 21  28 69 2b 31 29 0a 09 20  |T k = p!(i+1).. |
00000c70  20 20 20 4c 45 54 20 74  79 70 65 20 3d 20 6f 70  |   LET type = op|
00000c80  0a 0a 09 20 20 20 20 74  72 6e 4c 69 6e 65 43 6f  |...    trnLineCo|
00000c90  75 6e 74 20 3a 3d 20 70  21 28 69 2b 32 29 0a 0a  |unt := p!(i+2)..|
00000ca0  09 20 20 20 20 54 45 53  54 20 6f 70 3d 73 2e 6d  |.    TEST op=s.m|
00000cb0  61 6e 69 66 65 73 74 20  54 48 45 4e 0a 09 20 20  |anifest THEN..  |
00000cc0  20 20 24 28 20 4c 45 54  20 6e 61 6d 65 20 3d 20  |  $( LET name = |
00000cd0  30 0a 09 20 20 20 20 20  20 20 4c 45 54 20 6b 74  |0..       LET kt|
00000ce0  20 3d 20 30 0a 0a 09 20  20 20 20 20 20 20 49 46  | = 0...       IF|
00000cf0  20 6b 7e 3d 30 20 26 20  7e 53 6d 61 6c 6c 4e 75  | k~=0 & ~SmallNu|
00000d00  6d 62 65 72 28 6b 29 20  54 48 45 4e 20 6b 74 20  |mber(k) THEN kt |
00000d10  3a 3d 20 68 31 21 6b 0a  0a 09 20 20 20 20 20 20  |:= h1!k...      |
00000d20  20 49 46 20 6b 74 3d 73  2e 6e 61 6d 65 20 54 48  | IF kt=s.name TH|
00000d30  45 4e 20 24 28 0a 09 09  20 20 6e 61 6d 65 20 3a  |EN $(...  name :|
00000d40  3d 20 46 69 6e 64 4e 61  6d 65 28 6b 29 0a 09 09  |= FindName(k)...|
00000d50  20 20 6b 74 20 3a 3d 20  6e 61 6d 65 2e 74 79 70  |  kt := name.typ|
00000d60  65 21 6e 61 6d 65 20 24  29 0a 0a 09 20 20 20 20  |e!name $)...    |
00000d70  20 20 20 54 45 53 54 20  6b 74 7e 3d 73 2e 73 74  |   TEST kt~=s.st|
00000d80  72 69 6e 67 20 26 20 6b  74 7e 3d 73 2e 74 61 62  |ring & kt~=s.tab|
00000d90  6c 65 20 7c 0a 09 09 20  20 20 20 65 78 74 65 6e  |le |...    exten|
00000da0  73 69 6f 6e 2e 6c 65 76  65 6c 3c 35 20 54 48 45  |sion.level<5 THE|
00000db0  4e 20 24 28 0a 09 09 20  20 74 79 70 65 20 3a 3d  |N $(...  type :=|
00000dc0  20 73 2e 6e 75 6d 62 65  72 0a 09 09 20 20 6b 20  | s.number...  k |
00000dd0  3a 3d 20 45 76 61 6c 43  6f 6e 73 74 28 6b 29 20  |:= EvalConst(k) |
00000de0  24 29 0a 09 20 20 20 20  20 20 20 45 4c 53 45 20  |$)..       ELSE |
00000df0  24 28 0a 09 09 20 20 74  79 70 65 20 3a 3d 20 6b  |$(...  type := k|
00000e00  74 0a 0a 09 09 20 20 54  45 53 54 20 6e 61 6d 65  |t....  TEST name|
00000e10  3d 30 20 54 48 45 4e 20  24 28 0a 09 09 20 20 20  |=0 THEN $(...   |
00000e20  20 20 49 46 20 6b 74 3d  73 2e 74 61 62 6c 65 20  |  IF kt=s.table |
00000e30  54 48 45 4e 0a 09 09 09  68 32 21 6b 20 3a 3d 20  |THEN....h2!k := |
00000e40  6e 61 6d 65 56 65 63 45  0a 09 09 20 20 20 20 20  |nameVecE...     |
00000e50  68 31 21 6b 20 3a 3d 20  30 20 24 29 0a 09 09 20  |h1!k := 0 $)... |
00000e60  20 45 4c 53 45 0a 09 09  20 20 20 20 20 6b 20 3a  | ELSE...     k :|
00000e70  3d 20 6e 61 6d 65 2e 76  61 6c 75 65 21 6e 61 6d  |= name.value!nam|
00000e80  65 20 24 29 20 24 29 0a  0a 09 20 20 20 20 45 4c  |e $) $)...    EL|
00000e90  53 45 20 49 46 20 6f 70  3d 73 2e 67 6c 6f 62 61  |SE IF op=s.globa|
00000ea0  6c 0a 09 20 20 20 20 20  20 20 54 48 45 4e 20 6b  |l..       THEN k|
00000eb0  20 3a 3d 20 45 76 61 6c  43 6f 6e 73 74 28 6b 29  | := EvalConst(k)|
00000ec0  0a 0a 09 20 20 20 20 54  45 53 54 20 6f 70 3d 73  |...    TEST op=s|
00000ed0  2e 73 74 61 74 69 63 20  54 48 45 4e 20 24 28 0a  |.static THEN $(.|
00000ee0  09 20 20 20 20 20 20 20  4c 45 54 20 6d 20 3d 20  |.       LET m = |
00000ef0  4e 65 78 74 50 61 72 61  6d 28 29 0a 09 20 20 20  |NextParam()..   |
00000f00  20 20 20 20 4c 45 54 20  6c 20 3d 20 30 0a 0a 09  |    LET l = 0...|
00000f10  20 20 20 20 20 20 20 49  46 20 65 78 74 65 6e 73  |       IF extens|
00000f20  69 6f 6e 2e 6c 65 76 65  6c 3e 3d 35 20 54 48 45  |ion.level>=5 THE|
00000f30  4e 0a 09 09 20 20 6c 20  3a 3d 20 43 68 65 63 6b  |N...  l := Check|
00000f40  4c 61 62 65 6c 28 6b 29  0a 0a 09 20 20 20 20 20  |Label(k)...     |
00000f50  20 20 41 64 64 4e 61 6d  65 28 6e 61 6d 65 2c 20  |  AddName(name, |
00000f60  73 2e 6c 61 62 65 6c 2c  20 6d 29 0a 09 20 20 20  |s.label, m)..   |
00000f70  20 20 20 20 43 6f 6d 70  44 61 74 61 4c 61 62 28  |    CompDataLab(|
00000f80  6d 29 0a 0a 09 20 20 20  20 20 20 20 54 45 53 54  |m)...       TEST|
00000f90  20 6c 3d 30 0a 09 09 20  20 54 48 45 4e 20 4f 75  | l=0...  THEN Ou|
00000fa0  74 32 28 73 2e 69 74 65  6d 6e 2c 20 45 76 61 6c  |t2(s.itemn, Eval|
00000fb0  43 6f 6e 73 74 28 6b 29  29 0a 09 09 20 20 45 4c  |Const(k))...  EL|
00000fc0  53 45 20 4f 75 74 32 28  73 2e 69 74 65 6d 6c 2c  |SE Out2(s.iteml,|
00000fd0  20 6c 29 20 24 29 0a 0a  09 20 20 20 20 45 4c 53  | l) $)...    ELS|
00000fe0  45 0a 09 20 20 20 20 20  20 20 41 64 64 4e 61 6d  |E..       AddNam|
00000ff0  65 28 6e 61 6d 65 2c 20  74 79 70 65 2c 20 6b 29  |e(name, type, k)|
00001000  20 24 29 0a 0a 09 20 44  65 63 6c 4c 61 62 65 6c  | $)... DeclLabel|
00001010  73 28 68 33 21 78 29 0a  09 20 54 72 61 6e 73 28  |s(h3!x).. Trans(|
00001020  68 33 21 78 29 0a 09 20  6e 61 6d 65 56 65 63 45  |h3!x).. nameVecE|
00001030  2c 20 73 73 70 20 3a 3d  20 61 2c 20 73 0a 09 20  |, ssp := a, s.. |
00001040  45 4e 44 43 41 53 45 20  24 29 0a 0a 20 20 20 20  |ENDCASE $)..    |
00001050  20 20 43 41 53 45 20 73  2e 61 73 73 3a 0a 09 20  |  CASE s.ass:.. |
00001060  41 73 73 69 67 6e 28 68  32 21 78 2c 20 68 33 21  |Assign(h2!x, h3!|
00001070  78 2c 20 30 29 0a 09 20  45 4e 44 43 41 53 45 0a  |x, 0).. ENDCASE.|
00001080  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 6f 70  |.      CASE s.op|
00001090  61 62 3a 0a 09 20 41 73  73 69 67 6e 28 68 33 21  |ab:.. Assign(h3!|
000010a0  78 2c 20 68 34 21 78 2c  20 68 32 21 78 29 0a 09  |x, h4!x, h2!x)..|
000010b0  20 45 4e 44 43 41 53 45  0a 0a 20 20 20 20 20 20  | ENDCASE..      |
000010c0  43 41 53 45 20 73 2e 72  74 61 70 3a 0a 20 20 20  |CASE s.rtap:.   |
000010d0  20 20 20 24 28 20 4c 45  54 20 73 20 3d 20 73 73  |   $( LET s = ss|
000010e0  70 0a 09 20 73 73 70 20  3a 3d 20 73 73 70 2b 73  |p.. ssp := ssp+s|
000010f0  61 76 65 53 70 61 63 65  53 69 7a 65 0a 09 20 4f  |aveSpaceSize.. O|
00001100  75 74 32 28 73 2e 73 74  61 63 6b 2c 20 73 73 70  |ut2(s.stack, ssp|
00001110  29 0a 09 20 4c 6f 61 64  4c 69 73 74 28 68 33 21  |).. LoadList(h3!|
00001120  78 29 0a 09 20 4c 6f 61  64 28 68 32 21 78 29 0a  |x).. Load(h2!x).|
00001130  09 20 4f 75 74 32 28 73  2e 72 74 61 70 2c 20 73  |. Out2(s.rtap, s|
00001140  29 0a 09 20 73 73 70 20  3a 3d 20 73 0a 09 20 45  |).. ssp := s.. E|
00001150  4e 44 43 41 53 45 20 24  29 0a 0a 20 20 20 20 20  |NDCASE $)..     |
00001160  20 43 41 53 45 20 73 2e  67 6f 74 6f 3a 0a 09 20  | CASE s.goto:.. |
00001170  4c 6f 61 64 28 68 32 21  78 29 0a 09 20 4f 75 74  |Load(h2!x).. Out|
00001180  4f 70 28 73 2e 67 6f 74  6f 29 0a 09 20 73 73 70  |Op(s.goto).. ssp|
00001190  20 3a 3d 20 73 73 70 2d  31 3b 0a 09 20 61 63 63  | := ssp-1;.. acc|
000011a0  65 73 73 69 62 6c 65 20  3a 3d 20 46 41 4c 53 45  |essible := FALSE|
000011b0  3b 0a 09 20 45 4e 44 43  41 53 45 0a 0a 20 20 20  |;.. ENDCASE..   |
000011c0  20 20 20 43 41 53 45 20  73 2e 63 6f 6c 6f 6e 3a  |   CASE s.colon:|
000011d0  0a 09 20 43 6f 6d 70 4c  61 62 28 68 34 21 78 2c  |.. CompLab(h4!x,|
000011e0  20 73 73 70 29 0a 09 20  54 72 61 6e 73 28 68 33  | ssp).. Trans(h3|
000011f0  21 78 29 0a 09 20 45 4e  44 43 41 53 45 0a 0a 20  |!x).. ENDCASE.. |
00001200  20 20 20 20 20 43 41 53  45 20 73 2e 75 6e 6c 65  |     CASE s.unle|
00001210  73 73 3a 0a 09 20 73 77  20 3a 3d 20 54 52 55 45  |ss:.. sw := TRUE|
00001220  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 69 66  |.      CASE s.if|
00001230  3a 0a 20 20 20 20 20 20  24 28 20 4c 45 54 20 76  |:.      $( LET v|
00001240  61 6c 20 3d 20 3f 0a 0a  09 20 54 45 53 54 20 43  |al = ?... TEST C|
00001250  68 65 63 6b 43 6f 6e 73  74 61 6e 74 28 68 32 21  |heckConstant(h2!|
00001260  78 2c 20 40 76 61 6c 29  20 54 48 45 4e 0a 09 20  |x, @val) THEN.. |
00001270  20 20 20 49 46 20 73 77  3d 28 76 61 6c 3d 30 29  |   IF sw=(val=0)|
00001280  20 54 48 45 4e 20 54 72  61 6e 73 28 68 33 21 78  | THEN Trans(h3!x|
00001290  29 0a 09 20 45 4c 53 45  20 24 28 0a 09 20 20 20  |).. ELSE $(..   |
000012a0  20 4c 45 54 20 6c 20 3d  20 4e 65 78 74 50 61 72  | LET l = NextPar|
000012b0  61 6d 28 29 0a 09 20 20  20 20 4a 75 6d 70 43 6f  |am()..    JumpCo|
000012c0  6e 64 28 68 32 21 78 2c  20 73 77 2c 20 6c 29 0a  |nd(h2!x, sw, l).|
000012d0  09 20 20 20 20 54 72 61  6e 73 28 68 33 21 78 29  |.    Trans(h3!x)|
000012e0  0a 09 20 20 20 20 43 6f  6d 70 4c 61 62 28 6c 2c  |..    CompLab(l,|
000012f0  20 73 73 70 29 20 24 29  0a 09 20 45 4e 44 43 41  | ssp) $).. ENDCA|
00001300  53 45 20 24 29 0a 0a 20  20 20 20 20 20 43 41 53  |SE $)..      CAS|
00001310  45 20 73 2e 74 65 73 74  3a 0a 20 20 20 20 20 20  |E s.test:.      |
00001320  24 28 20 4c 45 54 20 76  61 6c 20 3d 20 3f 0a 0a  |$( LET val = ?..|
00001330  09 20 54 45 53 54 20 43  68 65 63 6b 43 6f 6e 73  |. TEST CheckCons|
00001340  74 61 6e 74 28 68 32 21  78 2c 20 40 76 61 6c 29  |tant(h2!x, @val)|
00001350  20 54 48 45 4e 0a 09 20  20 20 20 54 45 53 54 20  | THEN..    TEST |
00001360  76 61 6c 7e 3d 30 20 54  48 45 4e 0a 09 20 20 20  |val~=0 THEN..   |
00001370  20 20 20 20 54 72 61 6e  73 28 68 33 21 78 29 0a  |    Trans(h3!x).|
00001380  09 20 20 20 20 45 4c 53  45 0a 09 20 20 20 20 20  |.    ELSE..     |
00001390  20 20 54 72 61 6e 73 28  68 34 21 78 29 0a 0a 09  |  Trans(h4!x)...|
000013a0  20 45 4c 53 45 20 24 28  0a 09 20 20 20 20 4c 45  | ELSE $(..    LE|
000013b0  54 20 6c 2c 20 6d 20 3d  20 4e 65 78 74 50 61 72  |T l, m = NextPar|
000013c0  61 6d 28 29 2c 20 4e 65  78 74 50 61 72 61 6d 28  |am(), NextParam(|
000013d0  29 0a 09 20 20 20 20 4a  75 6d 70 43 6f 6e 64 28  |)..    JumpCond(|
000013e0  68 32 21 78 2c 20 46 41  4c 53 45 2c 20 6c 29 0a  |h2!x, FALSE, l).|
000013f0  09 20 20 20 20 54 72 61  6e 73 28 68 33 21 78 29  |.    Trans(h3!x)|
00001400  0a 09 20 20 20 20 54 45  53 54 20 61 63 63 65 73  |..    TEST acces|
00001410  73 69 62 6c 65 0a 09 20  20 20 20 20 20 20 54 48  |sible..       TH|
00001420  45 4e 20 43 6f 6d 70 4a  75 6d 70 28 6d 29 0a 09  |EN CompJump(m)..|
00001430  20 20 20 20 20 20 20 45  4c 53 45 20 6d 20 3a 3d  |       ELSE m :=|
00001440  20 30 3b 0a 09 20 20 20  20 43 6f 6d 70 4c 61 62  | 0;..    CompLab|
00001450  28 6c 2c 20 73 73 70 29  3b 0a 09 20 20 20 20 54  |(l, ssp);..    T|
00001460  72 61 6e 73 28 68 34 21  78 29 3b 0a 09 20 20 20  |rans(h4!x);..   |
00001470  20 43 6f 6d 70 4c 61 62  28 6d 2c 20 73 73 70 29  | CompLab(m, ssp)|
00001480  20 24 29 0a 09 20 45 4e  44 43 41 53 45 20 24 29  | $).. ENDCASE $)|
00001490  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 6c  |..      CASE s.l|
000014a0  6f 6f 70 3a 0a 09 20 49  46 20 6c 6f 6f 70 4c 61  |oop:.. IF loopLa|
000014b0  62 65 6c 3c 30 20 54 48  45 4e 20 54 72 61 6e 73  |bel<0 THEN Trans|
000014c0  52 65 70 6f 72 74 28 31  30 38 2c 20 78 29 0a 09  |Report(108, x)..|
000014d0  20 49 46 20 6c 6f 6f 70  4c 61 62 65 6c 3d 30 20  | IF loopLabel=0 |
000014e0  54 48 45 4e 20 6c 6f 6f  70 4c 61 62 65 6c 20 3a  |THEN loopLabel :|
000014f0  3d 20 4e 65 78 74 50 61  72 61 6d 28 29 0a 09 20  |= NextParam().. |
00001500  43 6f 6d 70 4a 75 6d 70  28 6c 6f 6f 70 4c 61 62  |CompJump(loopLab|
00001510  65 6c 29 3b 0a 09 20 45  4e 44 43 41 53 45 0a 0a  |el);.. ENDCASE..|
00001520  20 20 20 20 20 20 43 41  53 45 20 73 2e 62 72 65  |      CASE s.bre|
00001530  61 6b 3a 0a 09 20 49 46  20 62 72 65 61 6b 4c 61  |ak:.. IF breakLa|
00001540  62 65 6c 3c 30 20 54 48  45 4e 20 54 72 61 6e 73  |bel<0 THEN Trans|
00001550  52 65 70 6f 72 74 28 31  30 34 2c 20 78 29 0a 09  |Report(104, x)..|
00001560  20 49 46 20 62 72 65 61  6b 4c 61 62 65 6c 3d 30  | IF breakLabel=0|
00001570  20 54 48 45 4e 20 62 72  65 61 6b 4c 61 62 65 6c  | THEN breakLabel|
00001580  20 3a 3d 20 4e 65 78 74  50 61 72 61 6d 28 29 0a  | := NextParam().|
00001590  09 20 43 6f 6d 70 4a 75  6d 70 28 62 72 65 61 6b  |. CompJump(break|
000015a0  4c 61 62 65 6c 29 0a 09  20 45 4e 44 43 41 53 45  |Label).. ENDCASE|
000015b0  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 72  |..      CASE s.r|
000015c0  65 74 75 72 6e 3a 0a 09  20 49 46 20 72 65 74 75  |eturn:.. IF retu|
000015d0  72 6e 4c 61 62 65 6c 3c  30 20 54 48 45 4e 20 54  |rnLabel<0 THEN T|
000015e0  72 61 6e 73 52 65 70 6f  72 74 28 39 31 2c 20 78  |ransReport(91, x|
000015f0  29 3b 0a 09 20 4f 75 74  4f 70 28 73 2e 72 74 72  |);.. OutOp(s.rtr|
00001600  6e 29 3b 0a 09 20 61 63  63 65 73 73 69 62 6c 65  |n);.. accessible|
00001610  20 3a 3d 20 46 41 4c 53  45 3b 0a 09 20 45 4e 44  | := FALSE;.. END|
00001620  43 41 53 45 0a 0a 20 20  20 20 20 20 43 41 53 45  |CASE..      CASE|
00001630  20 73 2e 66 69 6e 69 73  68 3a 0a 09 20 4f 75 74  | s.finish:.. Out|
00001640  4f 70 28 73 2e 66 69 6e  69 73 68 29 3b 0a 09 20  |Op(s.finish);.. |
00001650  61 63 63 65 73 73 69 62  6c 65 20 3a 3d 20 46 41  |accessible := FA|
00001660  4c 53 45 3b 0a 09 20 45  4e 44 43 41 53 45 0a 0a  |LSE;.. ENDCASE..|
00001670  20 20 20 20 20 20 43 41  53 45 20 73 2e 72 65 73  |      CASE s.res|
00001680  75 6c 74 69 73 3a 0a 09  20 49 46 20 72 65 73 75  |ultis:.. IF resu|
00001690  6c 74 4c 61 62 65 6c 3c  30 20 54 48 45 4e 20 54  |ltLabel<0 THEN T|
000016a0  72 61 6e 73 52 65 70 6f  72 74 28 31 30 37 2c 20  |ransReport(107, |
000016b0  78 29 0a 09 20 4c 6f 61  64 28 68 32 21 78 29 0a  |x).. Load(h2!x).|
000016c0  09 20 54 45 53 54 20 72  65 73 75 6c 74 4c 61 62  |. TEST resultLab|
000016d0  65 6c 3d 30 0a 09 20 20  20 20 54 48 45 4e 20 4f  |el=0..    THEN O|
000016e0  75 74 4f 70 28 73 2e 66  6e 72 6e 29 0a 09 20 20  |utOp(s.fnrn)..  |
000016f0  20 20 45 4c 53 45 20 4f  75 74 32 28 73 2e 72 65  |  ELSE Out2(s.re|
00001700  73 2c 20 72 65 73 75 6c  74 4c 61 62 65 6c 29 3b  |s, resultLabel);|
00001710  0a 09 20 73 73 70 20 3a  3d 20 73 73 70 2d 31 3b  |.. ssp := ssp-1;|
00001720  0a 09 20 61 63 63 65 73  73 69 62 6c 65 20 3a 3d  |.. accessible :=|
00001730  20 46 41 4c 53 45 3b 0a  09 20 45 4e 44 43 41 53  | FALSE;.. ENDCAS|
00001740  45 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |E..      CASE s.|
00001750  77 68 69 6c 65 3a 0a 09  20 73 77 20 3a 3d 20 54  |while:.. sw := T|
00001760  52 55 45 0a 20 20 20 20  20 20 43 41 53 45 20 73  |RUE.      CASE s|
00001770  2e 75 6e 74 69 6c 3a 0a  20 20 20 20 20 20 24 28  |.until:.      $(|
00001780  20 4c 45 54 20 6c 2c 20  20 6d 20 3d 20 4e 65 78  | LET l,  m = Nex|
00001790  74 50 61 72 61 6d 28 29  2c 20 4e 65 78 74 50 61  |tParam(), NextPa|
000017a0  72 61 6d 28 29 0a 09 20  4c 45 54 20 62 6c 2c 20  |ram().. LET bl, |
000017b0  6c 6c 20 3d 20 62 72 65  61 6b 4c 61 62 65 6c 2c  |ll = breakLabel,|
000017c0  20 20 6c 6f 6f 70 4c 61  62 65 6c 0a 0a 09 20 62  |  loopLabel... b|
000017d0  72 65 61 6b 4c 61 62 65  6c 2c 20 6c 6f 6f 70 4c  |reakLabel, loopL|
000017e0  61 62 65 6c 20 3a 3d 20  30 2c 20 6d 0a 0a 09 20  |abel := 0, m... |
000017f0  43 6f 6d 70 4a 75 6d 70  28 6d 29 0a 09 20 43 6f  |CompJump(m).. Co|
00001800  6d 70 4c 61 62 28 6c 2c  20 73 73 70 29 0a 09 20  |mpLab(l, ssp).. |
00001810  54 72 61 6e 73 28 68 33  21 78 29 0a 09 20 43 6f  |Trans(h3!x).. Co|
00001820  6d 70 4c 61 62 28 6d 2c  20 73 73 70 29 0a 09 20  |mpLab(m, ssp).. |
00001830  4a 75 6d 70 43 6f 6e 64  28 68 32 21 78 2c 20 73  |JumpCond(h2!x, s|
00001840  77 2c 20 6c 29 0a 0a 09  20 43 6f 6d 70 4c 61 62  |w, l)... CompLab|
00001850  28 62 72 65 61 6b 4c 61  62 65 6c 2c 20 73 73 70  |(breakLabel, ssp|
00001860  29 0a 09 20 62 72 65 61  6b 4c 61 62 65 6c 2c 20  |).. breakLabel, |
00001870  6c 6f 6f 70 4c 61 62 65  6c 20 3a 3d 20 62 6c 2c  |loopLabel := bl,|
00001880  20 6c 6c 0a 09 20 45 4e  44 43 41 53 45 20 24 29  | ll.. ENDCASE $)|
00001890  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 72  |..      CASE s.r|
000018a0  65 70 65 61 74 77 68 69  6c 65 3a 0a 09 20 73 77  |epeatwhile:.. sw|
000018b0  20 3a 3d 20 54 52 55 45  0a 20 20 20 20 20 20 43  | := TRUE.      C|
000018c0  41 53 45 20 73 2e 72 65  70 65 61 74 75 6e 74 69  |ASE s.repeatunti|
000018d0  6c 3a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |l:.      CASE s.|
000018e0  72 65 70 65 61 74 3a 0a  20 20 20 20 20 20 24 28  |repeat:.      $(|
000018f0  20 4c 45 54 20 6c 20 3d  20 4e 65 78 74 50 61 72  | LET l = NextPar|
00001900  61 6d 28 29 0a 09 20 4c  45 54 20 62 6c 20 3d 20  |am().. LET bl = |
00001910  62 72 65 61 6b 4c 61 62  65 6c 0a 09 20 4c 45 54  |breakLabel.. LET|
00001920  20 6c 6c 20 3d 20 6c 6f  6f 70 4c 61 62 65 6c 0a  | ll = loopLabel.|
00001930  0a 09 20 62 72 65 61 6b  4c 61 62 65 6c 2c 20 6c  |.. breakLabel, l|
00001940  6f 6f 70 4c 61 62 65 6c  20 3a 3d 20 30 2c 20 4e  |oopLabel := 0, N|
00001950  65 78 74 50 61 72 61 6d  28 29 0a 09 20 43 6f 6d  |extParam().. Com|
00001960  70 4c 61 62 28 6c 2c 20  73 73 70 29 0a 0a 09 20  |pLab(l, ssp)... |
00001970  54 45 53 54 20 68 31 21  78 3d 73 2e 72 65 70 65  |TEST h1!x=s.repe|
00001980  61 74 20 54 48 45 4e 20  24 28 0a 09 20 20 20 20  |at THEN $(..    |
00001990  6c 6f 6f 70 4c 61 62 65  6c 20 3a 3d 20 6c 3b 0a  |loopLabel := l;.|
000019a0  09 20 20 20 20 54 72 61  6e 73 28 68 32 21 78 29  |.    Trans(h2!x)|
000019b0  3b 0a 09 20 20 20 20 43  6f 6d 70 4a 75 6d 70 28  |;..    CompJump(|
000019c0  6c 29 3b 0a 09 20 20 20  20 61 63 63 65 73 73 69  |l);..    accessi|
000019d0  62 6c 65 20 3a 3d 20 46  41 4c 53 45 20 24 29 0a  |ble := FALSE $).|
000019e0  09 20 45 4c 53 45 20 24  28 0a 09 20 20 20 20 54  |. ELSE $(..    T|
000019f0  72 61 6e 73 28 68 32 21  78 29 0a 09 20 20 20 20  |rans(h2!x)..    |
00001a00  43 6f 6d 70 4c 61 62 28  6c 6f 6f 70 4c 61 62 65  |CompLab(loopLabe|
00001a10  6c 2c 20 73 73 70 29 0a  09 20 20 20 20 4a 75 6d  |l, ssp)..    Jum|
00001a20  70 43 6f 6e 64 28 68 33  21 78 2c 20 73 77 2c 20  |pCond(h3!x, sw, |
00001a30  6c 29 20 24 29 0a 0a 09  20 43 6f 6d 70 4c 61 62  |l) $)... CompLab|
00001a40  28 62 72 65 61 6b 4c 61  62 65 6c 2c 20 73 73 70  |(breakLabel, ssp|
00001a50  29 0a 09 20 62 72 65 61  6b 4c 61 62 65 6c 2c 20  |).. breakLabel, |
00001a60  6c 6f 6f 70 4c 61 62 65  6c 20 3a 3d 20 62 6c 2c  |loopLabel := bl,|
00001a70  20 6c 6c 0a 09 20 45 4e  44 43 41 53 45 20 24 29  | ll.. ENDCASE $)|
00001a80  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 63  |..      CASE s.c|
00001a90  61 73 65 3a 0a 20 20 20  20 20 20 24 28 20 4c 45  |ase:.      $( LE|
00001aa0  54 20 6c 2c 20 6b 20 3d  20 4e 65 78 74 50 61 72  |T l, k = NextPar|
00001ab0  61 6d 28 29 2c 20 45 76  61 6c 43 6f 6e 73 74 28  |am(), EvalConst(|
00001ac0  68 32 21 78 29 0a 09 20  54 45 53 54 20 63 61 73  |h2!x).. TEST cas|
00001ad0  65 6b 76 65 63 3d 30 20  54 48 45 4e 0a 09 20 20  |ekvec=0 THEN..  |
00001ae0  20 20 54 72 61 6e 73 52  65 70 6f 72 74 28 31 30  |  TransReport(10|
00001af0  35 2c 20 78 29 0a 09 20  45 4c 53 45 20 24 28 0a  |5, x).. ELSE $(.|
00001b00  09 20 20 20 20 49 46 20  63 61 73 65 70 74 72 3e  |.    IF caseptr>|
00001b10  3d 63 61 73 65 6c 69 6d  20 54 48 45 4e 20 24 28  |=caselim THEN $(|
00001b20  0a 09 20 20 20 20 20 20  20 72 63 20 3a 3d 20 32  |..       rc := 2|
00001b30  30 0a 09 20 20 20 20 20  20 20 54 72 61 6e 73 52  |0..       TransR|
00001b40  65 70 6f 72 74 28 31 34  31 2c 20 78 29 20 24 29  |eport(141, x) $)|
00001b50  0a 09 20 20 20 20 46 4f  52 20 69 20 3d 20 30 20  |..    FOR i = 0 |
00001b60  54 4f 20 63 61 73 65 70  74 72 2d 31 20 44 4f 0a  |TO caseptr-1 DO.|
00001b70  09 20 20 20 20 20 20 20  49 46 20 63 61 73 65 6b  |.       IF casek|
00001b80  76 65 63 21 69 3d 6b 20  54 48 45 4e 0a 09 09 20  |vec!i=k THEN... |
00001b90  20 54 72 61 6e 73 52 65  70 6f 72 74 28 31 30 36  | TransReport(106|
00001ba0  2c 20 78 29 0a 0a 09 20  20 20 20 63 61 73 65 6b  |, x)...    casek|
00001bb0  76 65 63 21 63 61 73 65  70 74 72 20 3a 3d 20 6b  |vec!caseptr := k|
00001bc0  0a 09 20 20 20 20 63 61  73 65 6c 76 65 63 21 63  |..    caselvec!c|
00001bd0  61 73 65 70 74 72 20 3a  3d 20 6c 0a 09 20 20 20  |aseptr := l..   |
00001be0  20 63 61 73 65 70 74 72  20 3a 3d 20 63 61 73 65  | caseptr := case|
00001bf0  70 74 72 2b 31 0a 0a 09  20 20 20 20 43 6f 6d 70  |ptr+1...    Comp|
00001c00  4c 61 62 28 6c 2c 20 73  73 70 29 20 24 29 0a 09  |Lab(l, ssp) $)..|
00001c10  20 54 72 61 6e 73 28 68  33 21 78 29 0a 09 20 45  | Trans(h3!x).. E|
00001c20  4e 44 43 41 53 45 20 24  29 0a 0a 20 20 20 20 20  |NDCASE $)..     |
00001c30  20 43 41 53 45 20 73 2e  64 65 66 61 75 6c 74 3a  | CASE s.default:|
00001c40  0a 09 20 49 46 20 63 61  73 65 6b 76 65 63 3d 30  |.. IF casekvec=0|
00001c50  20 7c 20 64 65 66 61 75  6c 74 4c 61 62 65 6c 7e  | | defaultLabel~|
00001c60  3d 30 20 54 48 45 4e 20  54 72 61 6e 73 52 65 70  |=0 THEN TransRep|
00001c70  6f 72 74 28 31 30 31 2c  20 78 29 0a 09 20 64 65  |ort(101, x).. de|
00001c80  66 61 75 6c 74 4c 61 62  65 6c 20 3a 3d 20 4e 65  |faultLabel := Ne|
00001c90  78 74 50 61 72 61 6d 28  29 0a 09 20 43 6f 6d 70  |xtParam().. Comp|
00001ca0  4c 61 62 28 64 65 66 61  75 6c 74 4c 61 62 65 6c  |Lab(defaultLabel|
00001cb0  2c 20 73 73 70 29 0a 09  20 54 72 61 6e 73 28 68  |, ssp).. Trans(h|
00001cc0  32 21 78 29 0a 09 20 45  4e 44 43 41 53 45 0a 0a  |2!x).. ENDCASE..|
00001cd0  20 20 20 20 20 20 43 41  53 45 20 73 2e 65 6e 64  |      CASE s.end|
00001ce0  63 61 73 65 3a 0a 09 20  49 46 20 63 61 73 65 6b  |case:.. IF casek|
00001cf0  76 65 63 3d 30 20 54 48  45 4e 20 54 72 61 6e 73  |vec=0 THEN Trans|
00001d00  52 65 70 6f 72 74 28 31  32 31 2c 20 78 29 3b 0a  |Report(121, x);.|
00001d10  09 20 49 46 20 65 6e 64  63 61 73 65 4c 61 62 65  |. IF endcaseLabe|
00001d20  6c 3d 30 20 54 48 45 4e  20 65 6e 64 43 61 73 65  |l=0 THEN endCase|
00001d30  4c 61 62 65 6c 20 3a 3d  20 4e 65 78 74 50 61 72  |Label := NextPar|
00001d40  61 6d 28 29 3b 0a 09 20  43 6f 6d 70 4a 75 6d 70  |am();.. CompJump|
00001d50  28 65 6e 64 63 61 73 65  4c 61 62 65 6c 29 3b 0a  |(endcaseLabel);.|
00001d60  09 20 45 4e 44 43 41 53  45 0a 0a 20 20 20 20 20  |. ENDCASE..     |
00001d70  20 43 41 53 45 20 73 2e  73 77 69 74 63 68 6f 6e  | CASE s.switchon|
00001d80  3a 0a 09 20 54 72 61 6e  73 53 77 69 74 63 68 28  |:.. TransSwitch(|
00001d90  78 29 3b 0a 09 20 45 4e  44 43 41 53 45 0a 0a 20  |x);.. ENDCASE.. |
00001da0  20 20 20 20 20 43 41 53  45 20 73 2e 66 6f 72 3a  |     CASE s.for:|
00001db0  0a 09 20 54 72 61 6e 73  46 6f 72 28 78 29 0a 09  |.. TransFor(x)..|
00001dc0  20 45 4e 44 43 41 53 45  0a 0a 20 20 20 20 20 20  | ENDCASE..      |
00001dd0  43 41 53 45 20 73 2e 73  65 6d 69 63 6f 6c 6f 6e  |CASE s.semicolon|
00001de0  3a 0a 09 20 74 72 6e 4c  69 6e 65 43 6f 75 6e 74  |:.. trnLineCount|
00001df0  20 3a 3d 20 68 33 21 78  0a 09 20 54 72 61 6e 73  | := h3!x.. Trans|
00001e00  28 68 32 21 78 29 0a 09  20 74 72 6e 4c 69 6e 65  |(h2!x).. trnLine|
00001e10  43 6f 75 6e 74 20 3a 3d  20 68 35 21 78 0a 09 20  |Count := h5!x.. |
00001e20  54 72 61 6e 73 28 68 34  21 78 29 0a 09 20 45 4e  |Trans(h4!x).. EN|
00001e30  44 43 41 53 45 0a 0a 20  20 20 20 20 20 43 41 53  |DCASE..      CAS|
00001e40  45 20 73 2e 73 65 6d 69  63 6f 6c 6f 6e 6c 69 73  |E s.semicolonlis|
00001e50  74 3a 0a 09 20 46 4f 52  20 68 20 3d 20 32 20 54  |t:.. FOR h = 2 T|
00001e60  4f 20 68 32 21 78 20 42  59 20 32 20 44 4f 20 24  |O h2!x BY 2 DO $|
00001e70  28 0a 09 20 20 20 20 74  72 6e 4c 69 6e 65 43 6f  |(..    trnLineCo|
00001e80  75 6e 74 20 3a 3d 20 78  21 28 68 2b 31 29 0a 09  |unt := x!(h+1)..|
00001e90  20 20 20 20 54 72 61 6e  73 28 68 21 78 29 20 24  |    Trans(h!x) $|
00001ea0  29 0a 09 20 45 4e 44 43  41 53 45 0a 20 20 20 24  |).. ENDCASE.   $|
00001eb0  29 0a 24 29 0a 0a 41 4e  44 20 43 68 65 63 6b 43  |).$)..AND CheckC|
00001ec0  6f 6e 73 74 61 6e 74 28  78 2c 20 6c 76 2e 76 29  |onstant(x, lv.v)|
00001ed0  20 3d 20 56 41 4c 4f 46  0a 24 28 20 49 46 20 78  | = VALOF.$( IF x|
00001ee0  3d 30 20 54 48 45 4e 20  52 45 53 55 4c 54 49 53  |=0 THEN RESULTIS|
00001ef0  20 46 41 4c 53 45 0a 0a  20 20 20 49 46 20 53 6d  | FALSE..   IF Sm|
00001f00  61 6c 6c 4e 75 6d 62 65  72 28 78 29 20 54 48 45  |allNumber(x) THE|
00001f10  4e 20 24 28 0a 20 20 20  20 20 20 21 6c 76 2e 76  |N $(.      !lv.v|
00001f20  20 3a 3d 20 78 0a 20 20  20 20 20 20 52 45 53 55  | := x.      RESU|
00001f30  4c 54 49 53 20 54 52 55  45 20 24 29 0a 0a 20 20  |LTIS TRUE $)..  |
00001f40  20 53 57 49 54 43 48 4f  4e 20 68 31 21 78 20 49  | SWITCHON h1!x I|
00001f50  4e 54 4f 0a 20 20 20 24  28 20 43 41 53 45 20 73  |NTO.   $( CASE s|
00001f60  2e 6e 61 6d 65 3a 0a 20  20 20 20 20 20 24 28 20  |.name:.      $( |
00001f70  4c 45 54 20 6e 20 3d 20  46 69 6e 64 4e 61 6d 65  |LET n = FindName|
00001f80  28 78 29 0a 0a 09 20 49  46 20 6e 61 6d 65 2e 74  |(x)... IF name.t|
00001f90  79 70 65 21 6e 3d 73 2e  6e 75 6d 62 65 72 20 54  |ype!n=s.number T|
00001fa0  48 45 4e 20 24 28 0a 09  20 20 20 20 21 6c 76 2e  |HEN $(..    !lv.|
00001fb0  76 20 3a 3d 20 6e 61 6d  65 2e 76 61 6c 75 65 21  |v := name.value!|
00001fc0  6e 0a 09 20 20 20 20 52  45 53 55 4c 54 49 53 20  |n..    RESULTIS |
00001fd0  54 52 55 45 20 24 29 0a  09 20 52 45 53 55 4c 54  |TRUE $).. RESULT|
00001fe0  49 53 20 46 41 4c 53 45  20 24 29 0a 0a 20 20 20  |IS FALSE $)..   |
00001ff0  20 20 20 43 41 53 45 20  73 2e 6e 75 6d 62 65 72  |   CASE s.number|
00002000  3a 20 21 6c 76 2e 76 20  3a 3d 20 68 32 21 78 3b  |: !lv.v := h2!x;|
00002010  20 20 52 45 53 55 4c 54  49 53 20 54 52 55 45 0a  |  RESULTIS TRUE.|
00002020  20 20 20 20 20 20 43 41  53 45 20 73 2e 74 72 75  |      CASE s.tru|
00002030  65 3a 20 20 20 21 6c 76  2e 76 20 3a 3d 20 54 52  |e:   !lv.v := TR|
00002040  55 45 3b 20 20 52 45 53  55 4c 54 49 53 20 54 52  |UE;  RESULTIS TR|
00002050  55 45 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |UE.      CASE s.|
00002060  66 61 6c 73 65 3a 20 20  21 6c 76 2e 76 20 3a 3d  |false:  !lv.v :=|
00002070  20 46 41 4c 53 45 3b 20  52 45 53 55 4c 54 49 53  | FALSE; RESULTIS|
00002080  20 54 52 55 45 0a 0a 20  20 20 20 20 20 44 45 46  | TRUE..      DEF|
00002090  41 55 4c 54 3a 09 09 09  20 20 20 20 20 52 45 53  |AULT:...     RES|
000020a0  55 4c 54 49 53 20 20 46  41 4c 53 45 0a 20 20 20  |ULTIS  FALSE.   |
000020b0  24 29 0a 24 29 0a 0a 41  4e 44 20 44 65 63 6c 4e  |$).$)..AND DeclN|
000020c0  61 6d 65 73 28 78 29 20  42 45 20 55 4e 54 49 4c  |ames(x) BE UNTIL|
000020d0  20 78 3d 30 20 44 4f 0a  20 20 20 53 57 49 54 43  | x=0 DO.   SWITC|
000020e0  48 4f 4e 20 68 31 21 78  20 49 4e 54 4f 0a 20 20  |HON h1!x INTO.  |
000020f0  20 24 28 20 44 45 46 41  55 4c 54 3a 0a 09 20 54  | $( DEFAULT:.. T|
00002100  72 61 6e 73 52 65 70 6f  72 74 28 31 30 32 2c 20  |ransReport(102, |
00002110  63 75 72 72 65 6e 74 42  72 61 6e 63 68 29 0a 09  |currentBranch)..|
00002120  20 42 52 45 41 4b 0a 0a  20 20 20 20 20 20 43 41  | BREAK..      CA|
00002130  53 45 20 73 2e 76 65 63  64 65 66 3a 20 43 41 53  |SE s.vecdef: CAS|
00002140  45 20 73 2e 76 61 6c 64  65 66 3a 0a 09 20 74 72  |E s.valdef:.. tr|
00002150  6e 4c 69 6e 65 43 6f 75  6e 74 20 3a 3d 20 68 34  |nLineCount := h4|
00002160  21 78 0a 09 20 44 65 63  6c 44 79 6e 28 68 32 21  |!x.. DeclDyn(h2!|
00002170  78 29 0a 09 20 42 52 45  41 4b 0a 0a 20 20 20 20  |x).. BREAK..    |
00002180  20 20 43 41 53 45 20 73  2e 72 74 64 65 66 3a 20  |  CASE s.rtdef: |
00002190  43 41 53 45 20 73 2e 66  6e 64 65 66 3a 0a 09 20  |CASE s.fndef:.. |
000021a0  74 72 6e 4c 69 6e 65 43  6f 75 6e 74 20 3a 3d 20  |trnLineCount := |
000021b0  68 36 21 78 0a 09 20 68  35 21 78 20 3a 3d 20 4e  |h6!x.. h5!x := N|
000021c0  65 78 74 50 61 72 61 6d  28 29 0a 09 20 44 65 63  |extParam().. Dec|
000021d0  6c 53 74 61 74 28 68 32  21 78 2c 20 68 35 21 78  |lStat(h2!x, h5!x|
000021e0  29 0a 09 20 42 52 45 41  4b 0a 0a 20 20 20 20 20  |).. BREAK..     |
000021f0  20 43 41 53 45 20 73 2e  61 6e 64 3a 0a 09 20 44  | CASE s.and:.. D|
00002200  65 63 6c 4e 61 6d 65 73  28 68 32 21 78 29 0a 09  |eclNames(h2!x)..|
00002210  20 78 20 3a 3d 20 68 33  21 78 0a 09 20 4c 4f 4f  | x := h3!x.. LOO|
00002220  50 0a 20 20 20 24 29 0a  0a 0a 41 4e 44 20 44 65  |P.   $)...AND De|
00002230  63 6c 44 79 6e 28 78 29  20 42 45 20 49 46 20 78  |clDyn(x) BE IF x|
00002240  7e 3d 30 20 54 48 45 4e  0a 20 20 20 53 57 49 54  |~=0 THEN.   SWIT|
00002250  43 48 4f 4e 20 68 31 21  78 20 49 4e 54 4f 0a 20  |CHON h1!x INTO. |
00002260  20 20 24 28 20 43 41 53  45 20 73 2e 6e 61 6d 65  |  $( CASE s.name|
00002270  3a 0a 09 20 41 64 64 4e  61 6d 65 28 78 2c 20 73  |:.. AddName(x, s|
00002280  2e 6c 6f 63 61 6c 2c 20  73 73 70 29 0a 09 20 73  |.local, ssp).. s|
00002290  73 70 20 3a 3d 20 73 73  70 2b 31 0a 09 20 45 4e  |sp := ssp+1.. EN|
000022a0  44 43 41 53 45 0a 0a 20  20 20 20 20 20 43 41 53  |DCASE..      CAS|
000022b0  45 20 73 2e 63 6f 6d 6d  61 3a 0a 09 20 41 64 64  |E s.comma:.. Add|
000022c0  4e 61 6d 65 28 68 32 21  78 2c 20 73 2e 6c 6f 63  |Name(h2!x, s.loc|
000022d0  61 6c 2c 20 73 73 70 29  0a 09 20 73 73 70 20 3a  |al, ssp).. ssp :|
000022e0  3d 20 73 73 70 2b 31 0a  09 20 44 65 63 6c 44 79  |= ssp+1.. DeclDy|
000022f0  6e 28 68 33 21 78 29 0a  09 20 45 4e 44 43 41 53  |n(h3!x).. ENDCAS|
00002300  45 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |E..      CASE s.|
00002310  63 6f 6d 6d 61 6c 69 73  74 3a 0a 09 20 46 4f 52  |commalist:.. FOR|
00002320  20 68 20 3d 20 32 20 54  4f 20 68 32 21 78 2b 31  | h = 2 TO h2!x+1|
00002330  20 44 4f 20 44 65 63 6c  44 79 6e 28 68 21 78 29  | DO DeclDyn(h!x)|
00002340  0a 09 20 45 4e 44 43 41  53 45 0a 0a 20 20 20 20  |.. ENDCASE..    |
00002350  20 20 44 45 46 41 55 4c  54 3a 0a 09 20 54 72 61  |  DEFAULT:.. Tra|
00002360  6e 73 52 65 70 6f 72 74  28 31 30 33 2c 20 78 29  |nsReport(103, x)|
00002370  0a 20 20 20 24 29 0a 0a  0a 41 4e 44 20 44 65 63  |.   $)...AND Dec|
00002380  6c 53 74 61 74 28 78 2c  20 6c 29 20 42 45 0a 24  |lStat(x, l) BE.$|
00002390  28 20 4c 45 54 20 6e 61  6d 65 20 3d 20 46 69 6e  |( LET name = Fin|
000023a0  64 4e 61 6d 65 28 78 29  0a 0a 20 20 20 49 46 20  |dName(x)..   IF |
000023b0  6e 61 6d 65 2e 74 79 70  65 21 6e 61 6d 65 3d 73  |name.type!name=s|
000023c0  2e 67 6c 6f 62 61 6c 20  54 48 45 4e 20 24 28 0a  |.global THEN $(.|
000023d0  20 20 20 20 20 20 4c 45  54 20 6e 20 3d 20 6e 61  |      LET n = na|
000023e0  6d 65 2e 76 61 6c 75 65  21 6e 61 6d 65 0a 20 20  |me.value!name.  |
000023f0  20 20 20 20 4c 45 54 20  67 20 3d 20 47 65 74 42  |    LET g = GetB|
00002400  6c 6b 28 67 6c 2e 73 69  7a 65 29 0a 0a 20 20 20  |lk(gl.size)..   |
00002410  20 20 20 41 64 64 4e 61  6d 65 28 78 2c 20 73 2e  |   AddName(x, s.|
00002420  67 6c 6f 62 61 6c 2c 20  6e 29 0a 0a 20 20 20 20  |global, n)..    |
00002430  20 20 67 6c 6f 62 63 6f  75 6e 74 20 3a 3d 20 67  |  globcount := g|
00002440  6c 6f 62 43 6f 75 6e 74  2b 31 0a 20 20 20 20 20  |lobCount+1.     |
00002450  20 67 6c 2e 6e 75 6d 62  65 72 21 67 20 3a 3d 20  | gl.number!g := |
00002460  6e 0a 20 20 20 20 20 20  67 6c 2e 6c 61 62 65 6c  |n.      gl.label|
00002470  21 67 20 3a 3d 20 6c 0a  20 20 20 20 20 20 67 6c  |!g := l.      gl|
00002480  2e 6c 69 6e 6b 21 67 20  3a 3d 20 30 0a 0a 20 20  |.link!g := 0..  |
00002490  20 20 20 20 21 67 6c 6f  62 4c 69 73 74 45 20 3a  |    !globListE :|
000024a0  3d 20 67 0a 20 20 20 20  20 20 67 6c 6f 62 4c 69  |= g.      globLi|
000024b0  73 74 45 20 3a 3d 20 67  6c 2e 6c 69 6e 6b 2b 67  |stE := gl.link+g|
000024c0  0a 20 20 20 20 20 20 52  45 54 55 52 4e 20 24 29  |.      RETURN $)|
000024d0  0a 0a 20 20 20 49 46 20  6e 61 6d 65 2e 74 79 70  |..   IF name.typ|
000024e0  65 21 6e 61 6d 65 3d 73  2e 65 78 74 65 72 6e 61  |e!name=s.externa|
000024f0  6c 20 54 48 45 4e 20 24  28 0a 20 20 20 20 20 20  |l THEN $(.      |
00002500  4c 45 54 20 65 20 3d 20  6e 61 6d 65 2e 76 61 6c  |LET e = name.val|
00002510  75 65 21 6e 61 6d 65 0a  20 20 20 20 20 20 68 34  |ue!name.      h4|
00002520  21 65 20 3a 3d 20 6c 0a  20 20 20 20 20 20 41 64  |!e := l.      Ad|
00002530  64 4e 61 6d 65 28 78 2c  20 73 2e 65 78 74 65 72  |dName(x, s.exter|
00002540  6e 61 6c 2c 20 65 29 0a  20 20 20 20 20 20 52 45  |nal, e).      RE|
00002550  54 55 52 4e 20 24 29 0a  0a 20 20 20 24 28 20 4c  |TURN $)..   $( L|
00002560  45 54 20 6d 20 3d 20 4e  65 78 74 50 61 72 61 6d  |ET m = NextParam|
00002570  28 29 0a 20 20 20 20 20  20 41 64 64 4e 61 6d 65  |().      AddName|
00002580  28 78 2c 20 73 2e 6c 61  62 65 6c 2c 20 6d 29 0a  |(x, s.label, m).|
00002590  20 20 20 20 20 20 43 6f  6d 70 44 61 74 61 4c 61  |      CompDataLa|
000025a0  62 28 6d 29 0a 20 20 20  20 20 20 4f 75 74 31 28  |b(m).      Out1(|
000025b0  73 2e 69 74 65 6d 6c 29  3b 20 4f 75 74 31 28 6c  |s.iteml); Out1(l|
000025c0  29 20 24 29 0a 24 29 0a  0a 41 4e 44 20 44 65 63  |) $).$)..AND Dec|
000025d0  6c 4c 61 62 65 6c 73 28  78 29 20 42 45 0a 24 28  |lLabels(x) BE.$(|
000025e0  20 4c 45 54 20 62 20 3d  20 6e 61 6d 65 56 65 63  | LET b = nameVec|
000025f0  45 0a 20 20 20 53 63 61  6e 4c 61 62 65 6c 73 28  |E.   ScanLabels(|
00002600  78 29 0a 20 20 20 43 68  65 63 6b 44 69 73 74 69  |x).   CheckDisti|
00002610  6e 63 74 28 62 2b 31 2c  20 6e 61 6d 65 56 65 63  |nct(b+1, nameVec|
00002620  45 29 0a 24 29 0a 0a 41  4e 44 20 43 68 65 63 6b  |E).$)..AND Check|
00002630  44 69 73 74 69 6e 63 74  28 70 2c 20 71 29 20 42  |Distinct(p, q) B|
00002640  45 0a 20 20 20 46 4f 52  20 73 20 3d 20 71 20 54  |E.   FOR s = q T|
00002650  4f 20 70 2b 31 20 42 59  20 2d 31 20 44 4f 20 24  |O p+1 BY -1 DO $|
00002660  28 0a 20 20 20 20 20 20  4c 45 54 20 6e 20 3d 20  |(.      LET n = |
00002670  6e 61 6d 65 2e 6e 61 6d  65 21 6e 61 6d 65 28 73  |name.name!name(s|
00002680  29 0a 0a 20 20 20 20 20  20 46 4f 52 20 72 20 3d  |)..      FOR r =|
00002690  20 70 20 54 4f 20 73 2d  31 20 44 4f 0a 09 49 46  | p TO s-1 DO..IF|
000026a0  20 6e 3d 6e 61 6d 65 2e  6e 61 6d 65 21 6e 61 6d  | n=name.name!nam|
000026b0  65 28 72 29 20 54 48 45  4e 20 54 72 61 6e 73 52  |e(r) THEN TransR|
000026c0  65 70 6f 72 74 28 31 34  32 2c 20 6e 29 20 24 29  |eport(142, n) $)|
000026d0  0a 0a 41 4e 44 20 41 64  64 4e 61 6d 65 28 6e 61  |..AND AddName(na|
000026e0  6d 65 2c 20 74 79 70 65  2c 20 76 61 6c 75 65 29  |me, type, value)|
000026f0  20 42 45 0a 24 28 20 4c  45 54 20 62 2c 20 76 2c  | BE.$( LET b, v,|
00002700  20 6e 62 6c 6b 20 3d 20  3f 2c 20 3f 2c 20 3f 0a  | nblk = ?, ?, ?.|
00002710  20 20 20 6e 61 6d 65 56  65 63 45 20 3a 3d 20 6e  |   nameVecE := n|
00002720  61 6d 65 56 65 63 45 2b  31 0a 0a 20 20 20 62 20  |ameVecE+1..   b |
00002730  3a 3d 20 6e 61 6d 65 56  65 63 45 3e 3e 6e 61 6d  |:= nameVecE>>nam|
00002740  65 2e 62 6c 6f 63 6b 2e  73 68 69 66 74 0a 20 20  |e.block.shift.  |
00002750  20 49 46 20 62 3e 3d 6e  61 6d 65 2e 62 6c 6f 63  | IF b>=name.bloc|
00002760  6b 2e 76 65 63 74 6f 72  2e 73 69 7a 65 20 54 48  |k.vector.size TH|
00002770  45 4e 0a 20 20 20 24 28  20 72 63 20 3a 3d 20 32  |EN.   $( rc := 2|
00002780  30 0a 20 20 20 20 20 20  54 72 61 6e 73 52 65 70  |0.      TransRep|
00002790  6f 72 74 28 31 34 33 2c  20 63 75 72 72 65 6e 74  |ort(143, current|
000027a0  42 72 61 6e 63 68 29 20  24 29 0a 0a 20 20 20 76  |Branch) $)..   v|
000027b0  20 3a 3d 20 6e 61 6d 65  42 6c 6f 63 6b 56 21 62  | := nameBlockV!b|
000027c0  0a 20 20 20 49 46 20 76  3d 30 20 54 48 45 4e 0a  |.   IF v=0 THEN.|
000027d0  20 20 20 24 28 20 76 20  3a 3d 20 47 65 74 56 65  |   $( v := GetVe|
000027e0  63 74 6f 72 28 6e 61 6d  65 2e 73 69 7a 65 20 2a  |ctor(name.size *|
000027f0  20 6e 61 6d 65 2e 62 6c  6f 63 6b 2e 73 69 7a 65  | name.block.size|
00002800  29 0a 20 20 20 20 20 20  6e 61 6d 65 42 6c 6f 63  |).      nameBloc|
00002810  6b 56 21 62 20 3a 3d 20  76 20 24 29 0a 0a 20 20  |kV!b := v $)..  |
00002820  20 6e 62 6c 6b 20 3a 3d  20 76 2b 6e 61 6d 65 2e  | nblk := v+name.|
00002830  73 69 7a 65 20 2a 20 28  6e 61 6d 65 56 65 63 45  |size * (nameVecE|
00002840  20 26 20 6e 61 6d 65 2e  62 6c 6f 63 6b 2e 6d 61  | & name.block.ma|
00002850  73 6b 29 0a 20 20 20 6e  61 6d 65 2e 6e 61 6d 65  |sk).   name.name|
00002860  21 6e 62 6c 6b 20 3a 3d  20 6e 61 6d 65 0a 20 20  |!nblk := name.  |
00002870  20 6e 61 6d 65 2e 74 79  70 65 21 6e 62 6c 6b 20  | name.type!nblk |
00002880  3a 3d 20 74 79 70 65 0a  20 20 20 6e 61 6d 65 2e  |:= type.   name.|
00002890  76 61 6c 75 65 21 6e 62  6c 6b 20 3a 3d 20 76 61  |value!nblk := va|
000028a0  6c 75 65 0a 24 29 0a 0a  41 4e 44 20 4e 61 6d 65  |lue.$)..AND Name|
000028b0  28 6e 75 6d 29 20 3d 20  56 41 4c 4f 46 0a 20 20  |(num) = VALOF.  |
000028c0  2f 2f 0a 20 20 2f 2f 20  52 65 74 75 72 6e 73 20  |//.  // Returns |
000028d0  74 68 65 20 6f 62 6a 65  63 74 20 66 6f 72 20 74  |the object for t|
000028e0  68 65 20 6e 61 6d 65 20  6f 66 20 74 68 65 20 67  |he name of the g|
000028f0  69 76 65 6e 20 6e 75 6d  62 65 72 2e 0a 20 20 2f  |iven number..  /|
00002900  2f 0a 24 28 20 4c 45 54  20 62 20 3d 20 6e 61 6d  |/.$( LET b = nam|
00002910  65 42 6c 6f 63 6b 56 21  28 6e 75 6d 3e 3e 6e 61  |eBlockV!(num>>na|
00002920  6d 65 2e 62 6c 6f 63 6b  2e 73 68 69 66 74 29 0a  |me.block.shift).|
00002930  0a 20 20 20 20 20 2f 2f  20 49 66 20 61 6c 6c 20  |.     // If all |
00002940  69 73 20 77 65 6c 6c 2c  20 74 68 65 20 62 6c 6f  |is well, the blo|
00002950  63 6b 20 73 68 6f 75 6c  64 20 61 6c 72 65 61 64  |ck should alread|
00002960  79 20 68 61 76 65 20 62  65 65 6e 0a 20 20 20 20  |y have been.    |
00002970  20 2f 2f 20 61 6c 6c 6f  63 61 74 65 64 0a 0a 20  | // allocated.. |
00002980  20 20 49 46 20 62 3d 30  20 54 48 45 4e 20 24 28  |  IF b=0 THEN $(|
00002990  0a 20 20 20 20 20 20 72  63 20 3a 3d 20 32 30 0a  |.      rc := 20.|
000029a0  20 20 20 20 20 20 54 72  61 6e 73 52 65 70 6f 72  |      TransRepor|
000029b0  74 28 31 38 38 32 2c 20  63 75 72 72 65 6e 74 42  |t(1882, currentB|
000029c0  72 61 6e 63 68 29 20 24  29 0a 0a 20 20 20 52 45  |ranch) $)..   RE|
000029d0  53 55 4c 54 49 53 20 62  2b 6e 61 6d 65 2e 73 69  |SULTIS b+name.si|
000029e0  7a 65 20 2a 20 5b 6e 75  6d 20 26 20 6e 61 6d 65  |ze * [num & name|
000029f0  2e 62 6c 6f 63 6b 2e 6d  61 73 6b 5d 0a 24 29 0a  |.block.mask].$).|
00002a00  0a 0a 41 4e 44 20 46 69  6e 64 43 65 6c 6c 28 6e  |..AND FindCell(n|
00002a10  29 20 3d 20 56 41 4c 4f  46 0a 20 20 2f 2f 20 46  |) = VALOF.  // F|
00002a20  69 6e 64 73 20 74 68 65  20 63 65 6c 6c 20 6e 75  |inds the cell nu|
00002a30  6d 62 65 72 20 6f 66 20  74 68 65 20 6e 61 6d 65  |mber of the name|
00002a40  20 27 6e 27 2c 20 72 65  74 75 72 6e 69 6e 67 20  | 'n', returning |
00002a50  7a 65 72 6f 0a 20 20 2f  2f 20 69 66 20 69 74 20  |zero.  // if it |
00002a60  69 73 20 6e 6f 74 20 66  6f 75 6e 64 2e 0a 24 28  |is not found..$(|
00002a70  20 46 4f 52 20 78 20 3d  20 6e 61 6d 65 56 65 63  | FOR x = nameVec|
00002a80  45 20 54 4f 20 31 20 42  59 20 2d 31 20 44 4f 0a  |E TO 1 BY -1 DO.|
00002a90  20 20 20 20 20 49 46 20  6e 61 6d 65 2e 6e 61 6d  |     IF name.nam|
00002aa0  65 21 4e 61 6d 65 28 78  29 3d 6e 20 54 48 45 4e  |e!Name(x)=n THEN|
00002ab0  0a 20 20 20 20 20 20 20  52 45 53 55 4c 54 49 53  |.       RESULTIS|
00002ac0  20 78 0a 0a 20 20 20 52  45 53 55 4c 54 49 53 20  | x..   RESULTIS |
00002ad0  30 0a 24 29 0a 0a 41 4e  44 20 46 69 6e 64 4e 61  |0.$)..AND FindNa|
00002ae0  6d 65 28 6e 29 20 3d 20  4e 61 6d 65 28 46 69 6e  |me(n) = Name(Fin|
00002af0  64 43 65 6c 6c 28 6e 29  29 0a 0a 41 4e 44 20 53  |dCell(n))..AND S|
00002b00  63 61 6e 4c 61 62 65 6c  73 28 78 29 20 42 45 20  |canLabels(x) BE |
00002b10  49 46 20 78 7e 3d 30 20  54 48 45 4e 0a 20 20 20  |IF x~=0 THEN.   |
00002b20  53 57 49 54 43 48 4f 4e  20 68 31 21 78 20 49 4e  |SWITCHON h1!x IN|
00002b30  54 4f 0a 20 20 20 24 28  20 43 41 53 45 20 73 2e  |TO.   $( CASE s.|
00002b40  63 6f 6c 6f 6e 3a 0a 09  20 68 34 21 78 20 3a 3d  |colon:.. h4!x :=|
00002b50  20 4e 65 78 74 50 61 72  61 6d 28 29 0a 09 20 44  | NextParam().. D|
00002b60  65 63 6c 53 74 61 74 28  68 32 21 78 2c 20 68 34  |eclStat(h2!x, h4|
00002b70  21 78 29 0a 0a 20 20 20  20 20 20 43 41 53 45 20  |!x)..      CASE |
00002b80  73 2e 69 66 3a 20 43 41  53 45 20 73 2e 75 6e 6c  |s.if: CASE s.unl|
00002b90  65 73 73 3a 20 43 41 53  45 20 73 2e 77 68 69 6c  |ess: CASE s.whil|
00002ba0  65 3a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |e:.      CASE s.|
00002bb0  75 6e 74 69 6c 3a 20 43  41 53 45 20 73 2e 73 77  |until: CASE s.sw|
00002bc0  69 74 63 68 6f 6e 3a 20  43 41 53 45 20 73 2e 63  |itchon: CASE s.c|
00002bd0  61 73 65 3a 0a 09 20 53  63 61 6e 4c 61 62 65 6c  |ase:.. ScanLabel|
00002be0  73 28 68 33 21 78 29 0a  09 20 45 4e 44 43 41 53  |s(h3!x).. ENDCAS|
00002bf0  45 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |E..      CASE s.|
00002c00  73 65 6d 69 63 6f 6c 6f  6e 6c 69 73 74 3a 0a 09  |semicolonlist:..|
00002c10  20 46 4f 52 20 68 20 3d  20 32 20 54 4f 20 68 32  | FOR h = 2 TO h2|
00002c20  21 78 20 42 59 20 32 20  44 4f 20 53 63 61 6e 4c  |!x BY 2 DO ScanL|
00002c30  61 62 65 6c 73 28 68 21  78 29 0a 09 20 45 4e 44  |abels(h!x).. END|
00002c40  43 41 53 45 0a 0a 20 20  20 20 20 20 43 41 53 45  |CASE..      CASE|
00002c50  20 73 2e 73 65 6d 69 63  6f 6c 6f 6e 3a 0a 09 20  | s.semicolon:.. |
00002c60  53 63 61 6e 4c 61 62 65  6c 73 28 68 34 21 78 29  |ScanLabels(h4!x)|
00002c70  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 72  |..      CASE s.r|
00002c80  65 70 65 61 74 3a 20 43  41 53 45 20 73 2e 72 65  |epeat: CASE s.re|
00002c90  70 65 61 74 77 68 69 6c  65 3a 0a 20 20 20 20 20  |peatwhile:.     |
00002ca0  20 43 41 53 45 20 73 2e  72 65 70 65 61 74 75 6e  | CASE s.repeatun|
00002cb0  74 69 6c 3a 20 43 41 53  45 20 73 2e 64 65 66 61  |til: CASE s.defa|
00002cc0  75 6c 74 3a 0a 09 20 53  63 61 6e 4c 61 62 65 6c  |ult:.. ScanLabel|
00002cd0  73 28 68 32 21 78 29 0a  09 20 45 4e 44 43 41 53  |s(h2!x).. ENDCAS|
00002ce0  45 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |E..      CASE s.|
00002cf0  74 65 73 74 3a 0a 09 20  53 63 61 6e 4c 61 62 65  |test:.. ScanLabe|
00002d00  6c 73 28 68 33 21 78 29  0a 09 20 53 63 61 6e 4c  |ls(h3!x).. ScanL|
00002d10  61 62 65 6c 73 28 68 34  21 78 29 0a 09 20 45 4e  |abels(h4!x).. EN|
00002d20  44 43 41 53 45 0a 20 20  20 24 29 0a 0a 41 4e 44  |DCASE.   $)..AND|
00002d30  20 54 72 61 6e 73 44 65  66 28 78 29 20 42 45 0a  | TransDef(x) BE.|
00002d40  24 28 20 54 72 61 6e 73  44 79 6e 44 65 66 73 28  |$( TransDynDefs(|
00002d50  78 29 0a 0a 20 20 20 49  46 20 53 74 61 74 44 65  |x)..   IF StatDe|
00002d60  66 73 28 78 29 20 54 48  45 4e 0a 20 20 20 24 28  |fs(x) THEN.   $(|
00002d70  20 4c 45 54 20 6c 2c 20  73 20 3d 20 30 2c 20 73  | LET l, s = 0, s|
00002d80  73 70 0a 20 20 20 20 20  20 49 46 20 61 63 63 65  |sp.      IF acce|
00002d90  73 73 69 62 6c 65 20 54  48 45 4e 0a 20 20 20 20  |ssible THEN.    |
00002da0  20 20 24 28 20 6c 20 3a  3d 20 4e 65 78 74 50 61  |  $( l := NextPa|
00002db0  72 61 6d 28 29 3b 0a 09  20 43 6f 6d 70 4a 75 6d  |ram();.. CompJum|
00002dc0  70 28 6c 29 20 24 29 3b  0a 0a 20 20 20 20 20 20  |p(l) $);..      |
00002dd0  54 72 61 6e 73 53 74 61  74 44 65 66 73 28 78 29  |TransStatDefs(x)|
00002de0  0a 20 20 20 20 20 20 73  73 70 20 3a 3d 20 73 0a  |.      ssp := s.|
00002df0  20 20 20 20 20 20 43 6f  6d 70 4c 61 62 28 6c 2c  |      CompLab(l,|
00002e00  20 73 73 70 29 20 24 29  0a 24 29 0a 0a 41 4e 44  | ssp) $).$)..AND|
00002e10  20 54 72 61 6e 73 44 79  6e 44 65 66 73 28 78 29  | TransDynDefs(x)|
00002e20  20 42 45 20 53 57 49 54  43 48 4f 4e 20 68 31 21  | BE SWITCHON h1!|
00002e30  78 20 49 4e 54 4f 0a 24  28 20 43 41 53 45 20 73  |x INTO.$( CASE s|
00002e40  2e 61 6e 64 3a 0a 20 20  20 20 20 20 54 72 61 6e  |.and:.      Tran|
00002e50  73 44 79 6e 44 65 66 73  28 68 32 21 78 29 0a 20  |sDynDefs(h2!x). |
00002e60  20 20 20 20 20 78 20 3a  3d 20 68 33 21 78 0a 20  |     x := h3!x. |
00002e70  20 20 20 20 20 4c 4f 4f  50 0a 0a 20 20 20 43 41  |     LOOP..   CA|
00002e80  53 45 20 73 2e 76 65 63  64 65 66 3a 0a 20 20 20  |SE s.vecdef:.   |
00002e90  20 20 20 74 72 6e 4c 69  6e 65 43 6f 75 6e 74 20  |   trnLineCount |
00002ea0  3a 3d 20 68 34 21 78 0a  20 20 20 20 20 20 24 28  |:= h4!x.      $(|
00002eb0  20 4c 45 54 20 6e 20 3d  20 45 76 61 6c 43 6f 6e  | LET n = EvalCon|
00002ec0  73 74 28 68 33 21 78 29  3b 0a 09 20 4f 75 74 32  |st(h3!x);.. Out2|
00002ed0  28 73 2e 6c 6c 70 2c 20  76 65 63 73 73 70 2b 28  |(s.llp, vecssp+(|
00002ee0  62 61 63 6b 77 61 72 64  56 65 63 73 20 2d 3e 20  |backwardVecs -> |
00002ef0  6e 2c 20 30 29 29 3b 0a  09 20 73 73 70 20 3a 3d  |n, 0));.. ssp :=|
00002f00  20 73 73 70 2b 31 3b 0a  09 20 76 65 63 73 73 70  | ssp+1;.. vecssp|
00002f10  20 3a 3d 20 76 65 63 73  73 70 2b 31 2b 6e 20 24  | := vecssp+1+n $|
00002f20  29 3b 0a 20 20 20 20 20  20 42 52 45 41 4b 0a 0a  |);.      BREAK..|
00002f30  20 20 20 43 41 53 45 20  73 2e 76 61 6c 64 65 66  |   CASE s.valdef|
00002f40  3a 0a 20 20 20 20 20 20  74 72 6e 4c 69 6e 65 43  |:.      trnLineC|
00002f50  6f 75 6e 74 20 3a 3d 20  68 34 21 78 0a 20 20 20  |ount := h4!x.   |
00002f60  20 20 20 4c 6f 61 64 4c  69 73 74 28 68 33 21 78  |   LoadList(h3!x|
00002f70  29 0a 20 20 20 20 20 20  42 52 45 41 4b 0a 0a 20  |).      BREAK.. |
00002f80  20 20 44 45 46 41 55 4c  54 3a 0a 20 20 20 20 20  |  DEFAULT:.     |
00002f90  20 42 52 45 41 4b 0a 24  29 20 52 45 50 45 41 54  | BREAK.$) REPEAT|
00002fa0  0a 0a 41 4e 44 20 54 72  61 6e 73 53 74 61 74 44  |..AND TransStatD|
00002fb0  65 66 73 28 78 29 20 42  45 0a 24 28 20 57 48 49  |efs(x) BE.$( WHI|
00002fc0  4c 45 20 68 31 21 78 3d  73 2e 61 6e 64 20 44 4f  |LE h1!x=s.and DO|
00002fd0  0a 20 20 20 24 28 20 54  72 61 6e 73 53 74 61 74  |.   $( TransStat|
00002fe0  44 65 66 73 28 68 32 21  78 29 0a 20 20 20 20 20  |Defs(h2!x).     |
00002ff0  20 78 20 3a 3d 20 68 33  21 78 20 24 29 3b 0a 0a  | x := h3!x $);..|
00003000  20 20 20 49 46 20 68 31  21 78 3d 73 2e 66 6e 64  |   IF h1!x=s.fnd|
00003010  65 66 20 7c 20 68 31 21  78 3d 73 2e 72 74 64 65  |ef | h1!x=s.rtde|
00003020  66 20 54 48 45 4e 20 24  28 0a 20 20 20 20 20 20  |f THEN $(.      |
00003030  4c 45 54 20 61 2c 20 20  63 20 3d 20 6e 61 6d 65  |LET a,  c = name|
00003040  56 65 63 45 2c 20 6e 61  6d 65 70 62 61 73 65 0a  |VecE, namepbase.|
00003050  20 20 20 20 20 20 4c 45  54 20 62 6c 2c 20 6c 6c  |      LET bl, ll|
00003060  20 3d 20 62 72 65 61 6b  4c 61 62 65 6c 2c 20 6c  | = breakLabel, l|
00003070  6f 6f 70 4c 61 62 65 6c  0a 20 20 20 20 20 20 4c  |oopLabel.      L|
00003080  45 54 20 72 6c 2c 20 6b  76 20 3d 20 72 65 73 75  |ET rl, kv = resu|
00003090  6c 74 4c 61 62 65 6c 2c  20 63 61 73 65 6b 76 65  |ltLabel, casekve|
000030a0  63 0a 20 20 20 20 20 20  4c 45 54 20 72 74 6c 2c  |c.      LET rtl,|
000030b0  20 65 63 6c 20 3d 20 72  65 74 75 72 6e 4c 61 62  | ecl = returnLab|
000030c0  65 6c 2c 20 65 6e 64 63  61 73 65 4c 61 62 65 6c  |el, endcaseLabel|
000030d0  3b 0a 0a 20 20 20 20 20  20 74 72 6e 4c 69 6e 65  |;..      trnLine|
000030e0  43 6f 75 6e 74 20 3a 3d  20 68 36 21 78 0a 0a 20  |Count := h6!x.. |
000030f0  20 20 20 20 20 62 72 65  61 6b 4c 61 62 65 6c 2c  |     breakLabel,|
00003100  20 20 6c 6f 6f 70 4c 61  62 65 6c 20 3a 3d 20 2d  |  loopLabel := -|
00003110  31 2c 20 2d 31 0a 20 20  20 20 20 20 72 65 73 75  |1, -1.      resu|
00003120  6c 74 4c 61 62 65 6c 2c  20 63 61 73 65 6b 76 65  |ltLabel, casekve|
00003130  63 20 3a 3d 20 2d 31 2c  20 20 30 0a 20 20 20 20  |c := -1,  0.    |
00003140  20 20 72 65 74 75 72 6e  4c 61 62 65 6c 2c 20 65  |  returnLabel, e|
00003150  6e 64 63 61 73 65 4c 61  62 65 6c 20 3a 3d 20 2d  |ndcaseLabel := -|
00003160  31 2c 20 2d 31 3b 0a 0a  20 20 20 20 20 20 43 6f  |1, -1;..      Co|
00003170  6d 70 45 6e 74 72 79 28  68 32 21 78 2c 20 68 35  |mpEntry(h2!x, h5|
00003180  21 78 29 0a 20 20 20 20  20 20 73 73 70 20 3a 3d  |!x).      ssp :=|
00003190  20 73 61 76 65 53 70 61  63 65 53 69 7a 65 0a 0a  | saveSpaceSize..|
000031a0  20 20 20 20 20 20 6e 61  6d 65 70 62 61 73 65 20  |      namepbase |
000031b0  3a 3d 20 6e 61 6d 65 56  65 63 45 2b 31 0a 0a 20  |:= nameVecE+1.. |
000031c0  20 20 20 20 20 44 65 63  6c 44 79 6e 28 68 33 21  |     DeclDyn(h3!|
000031d0  78 29 0a 20 20 20 20 20  20 43 68 65 63 6b 44 69  |x).      CheckDi|
000031e0  73 74 69 6e 63 74 28 61  2b 31 2c 20 6e 61 6d 65  |stinct(a+1, name|
000031f0  56 65 63 45 29 0a 20 20  20 20 20 20 44 65 63 6c  |VecE).      Decl|
00003200  4c 61 62 65 6c 73 28 68  34 21 78 29 0a 0a 20 20  |Labels(h4!x)..  |
00003210  20 20 20 20 4f 75 74 32  28 73 2e 73 61 76 65 2c  |    Out2(s.save,|
00003220  20 73 73 70 29 0a 0a 20  20 20 20 20 20 54 45 53  | ssp)..      TES|
00003230  54 20 68 31 21 78 3d 73  2e 66 6e 64 65 66 20 54  |T h1!x=s.fndef T|
00003240  48 45 4e 20 24 28 0a 09  20 4c 45 54 20 79 20 3d  |HEN $(.. LET y =|
00003250  20 68 34 21 78 3b 0a 09  20 54 45 53 54 20 68 31  | h4!x;.. TEST h1|
00003260  21 79 3d 73 2e 76 61 6c  6f 66 20 54 48 45 4e 20  |!y=s.valof THEN |
00003270  24 28 0a 09 20 20 20 20  44 65 63 6c 4c 61 62 65  |$(..    DeclLabe|
00003280  6c 73 28 68 32 21 79 29  3b 0a 09 20 20 20 20 72  |ls(h2!y);..    r|
00003290  65 73 75 6c 74 4c 61 62  65 6c 20 3a 3d 20 30 3b  |esultLabel := 0;|
000032a0  0a 09 20 20 20 20 54 72  61 6e 73 28 68 32 21 79  |..    Trans(h2!y|
000032b0  29 3b 0a 09 20 20 20 20  49 46 20 61 63 63 65 73  |);..    IF acces|
000032c0  73 69 62 6c 65 20 54 48  45 4e 20 54 72 61 6e 73  |sible THEN Trans|
000032d0  52 65 70 6f 72 74 28 39  32 2c 20 78 29 20 24 29  |Report(92, x) $)|
000032e0  0a 09 20 45 4c 53 45 20  24 28 0a 09 20 20 20 20  |.. ELSE $(..    |
000032f0  4c 6f 61 64 28 79 29 0a  09 20 20 20 20 4f 75 74  |Load(y)..    Out|
00003300  4f 70 28 73 2e 66 6e 72  6e 29 3b 0a 09 20 20 20  |Op(s.fnrn);..   |
00003310  20 61 63 63 65 73 73 69  62 6c 65 20 3a 3d 20 46  | accessible := F|
00003320  41 4c 53 45 20 24 29 20  24 29 0a 0a 20 20 20 20  |ALSE $) $)..    |
00003330  20 20 45 4c 53 45 20 24  28 0a 09 20 72 65 74 75  |  ELSE $(.. retu|
00003340  72 6e 4c 61 62 65 6c 20  3a 3d 20 30 3b 0a 09 20  |rnLabel := 0;.. |
00003350  54 72 61 6e 73 28 68 34  21 78 29 3b 0a 09 20 43  |Trans(h4!x);.. C|
00003360  6f 6d 70 4c 61 62 28 72  65 74 75 72 6e 4c 61 62  |ompLab(returnLab|
00003370  65 6c 2c 20 73 73 70 29  20 24 29 3b 0a 0a 20 20  |el, ssp) $);..  |
00003380  20 20 20 20 49 46 20 61  63 63 65 73 73 69 62 6c  |    IF accessibl|
00003390  65 20 54 48 45 4e 0a 20  20 20 20 20 20 24 28 20  |e THEN.      $( |
000033a0  4f 75 74 4f 70 28 73 2e  72 74 72 6e 29 3b 0a 09  |OutOp(s.rtrn);..|
000033b0  20 61 63 63 65 73 73 69  62 6c 65 20 3a 3d 20 46  | accessible := F|
000033c0  41 4c 53 45 20 24 29 3b  0a 0a 20 20 20 20 20 20  |ALSE $);..      |
000033d0  4f 75 74 32 28 73 2e 65  6e 64 70 72 6f 63 2c 20  |Out2(s.endproc, |
000033e0  30 29 3b 0a 0a 20 20 20  20 20 20 62 72 65 61 6b  |0);..      break|
000033f0  4c 61 62 65 6c 2c 20 20  6c 6f 6f 70 4c 61 62 65  |Label,  loopLabe|
00003400  6c 20 3a 3d 20 62 6c 2c  20 6c 6c 3b 0a 20 20 20  |l := bl, ll;.   |
00003410  20 20 20 72 65 73 75 6c  74 4c 61 62 65 6c 2c 20  |   resultLabel, |
00003420  63 61 73 65 6b 76 65 63  20 3a 3d 20 72 6c 2c 20  |casekvec := rl, |
00003430  6b 76 3b 0a 20 20 20 20  20 20 6e 61 6d 65 56 65  |kv;.      nameVe|
00003440  63 45 2c 20 20 20 20 6e  61 6d 65 70 62 61 73 65  |cE,    namepbase|
00003450  20 3a 3d 20 61 2c 20 20  63 3b 0a 20 20 20 20 20  | := a,  c;.     |
00003460  20 72 65 74 75 72 6e 4c  61 62 65 6c 2c 20 65 6e  | returnLabel, en|
00003470  64 63 61 73 65 4c 61 62  65 6c 20 3a 3d 20 72 74  |dcaseLabel := rt|
00003480  6c 2c 20 65 63 6c 20 24  29 0a 24 29 0a 0a 41 4e  |l, ecl $).$)..AN|
00003490  44 20 53 74 61 74 44 65  66 73 28 78 29 20 3d 20  |D StatDefs(x) = |
000034a0  68 31 21 78 3d 73 2e 66  6e 64 65 66 20 7c 20 68  |h1!x=s.fndef | h|
000034b0  31 21 78 3d 73 2e 72 74  64 65 66 20 2d 3e 20 54  |1!x=s.rtdef -> T|
000034c0  52 55 45 2c 0a 09 09 20  20 68 31 21 78 7e 3d 73  |RUE,...  h1!x~=s|
000034d0  2e 61 6e 64 20 2d 3e 20  46 41 4c 53 45 2c 0a 09  |.and -> FALSE,..|
000034e0  09 20 20 53 74 61 74 44  65 66 73 28 68 32 21 78  |.  StatDefs(h2!x|
000034f0  29 20 2d 3e 20 54 52 55  45 2c 0a 09 09 20 20 53  |) -> TRUE,...  S|
00003500  74 61 74 44 65 66 73 28  68 33 21 78 29 0a 0a 41  |tatDefs(h3!x)..A|
00003510  4e 44 20 4a 75 6d 70 43  6f 6e 64 28 78 2c 20 62  |ND JumpCond(x, b|
00003520  2c 20 6c 29 20 42 45 0a  24 28 20 4c 45 54 20 73  |, l) BE.$( LET s|
00003530  77 20 3d 20 62 0a 20 20  20 49 46 20 7e 53 6d 61  |w = b.   IF ~Sma|
00003540  6c 6c 4e 75 6d 62 65 72  28 78 29 20 54 48 45 4e  |llNumber(x) THEN|
00003550  0a 20 20 20 20 20 20 53  57 49 54 43 48 4f 4e 20  |.      SWITCHON |
00003560  68 31 21 78 20 49 4e 54  4f 0a 20 20 20 20 20 20  |h1!x INTO.      |
00003570  24 28 20 43 41 53 45 20  73 2e 66 61 6c 73 65 3a  |$( CASE s.false:|
00003580  0a 09 20 20 20 20 62 20  3a 3d 20 7e 62 0a 0a 09  |..    b := ~b...|
00003590  20 43 41 53 45 20 73 2e  74 72 75 65 3a 0a 09 20  | CASE s.true:.. |
000035a0  20 20 20 49 46 20 62 20  54 48 45 4e 20 43 6f 6d  |   IF b THEN Com|
000035b0  70 4a 75 6d 70 28 6c 29  0a 09 20 20 20 20 52 45  |pJump(l)..    RE|
000035c0  54 55 52 4e 0a 0a 09 20  43 41 53 45 20 73 2e 6e  |TURN... CASE s.n|
000035d0  6f 74 3a 0a 09 20 20 20  20 4a 75 6d 70 43 6f 6e  |ot:..    JumpCon|
000035e0  64 28 68 32 21 78 2c 20  7e 62 2c 20 6c 29 0a 09  |d(h2!x, ~b, l)..|
000035f0  20 20 20 20 52 45 54 55  52 4e 0a 0a 09 20 43 41  |    RETURN... CA|
00003600  53 45 20 73 2e 6c 6f 67  61 6e 64 3a 0a 09 20 20  |SE s.logand:..  |
00003610  20 20 73 77 20 3a 3d 20  7e 73 77 0a 0a 09 20 43  |  sw := ~sw... C|
00003620  41 53 45 20 73 2e 6c 6f  67 6f 72 3a 0a 09 20 20  |ASE s.logor:..  |
00003630  20 20 54 45 53 54 20 73  77 20 54 48 45 4e 20 24  |  TEST sw THEN $|
00003640  28 0a 09 20 20 20 20 20  20 20 4a 75 6d 70 43 6f  |(..       JumpCo|
00003650  6e 64 28 68 32 21 78 2c  20 62 2c 20 6c 29 0a 09  |nd(h2!x, b, l)..|
00003660  20 20 20 20 20 20 20 4a  75 6d 70 43 6f 6e 64 28  |       JumpCond(|
00003670  68 33 21 78 2c 20 62 2c  20 6c 29 20 24 29 0a 09  |h3!x, b, l) $)..|
00003680  20 20 20 20 45 4c 53 45  20 24 28 0a 09 20 20 20  |    ELSE $(..   |
00003690  20 20 20 20 4c 45 54 20  6d 20 3d 20 4e 65 78 74  |    LET m = Next|
000036a0  50 61 72 61 6d 28 29 0a  09 20 20 20 20 20 20 20  |Param()..       |
000036b0  4a 75 6d 70 43 6f 6e 64  28 68 32 21 78 2c 20 7e  |JumpCond(h2!x, ~|
000036c0  62 2c 20 6d 29 0a 09 20  20 20 20 20 20 20 4a 75  |b, m)..       Ju|
000036d0  6d 70 43 6f 6e 64 28 68  33 21 78 2c 20 62 2c 20  |mpCond(h3!x, b, |
000036e0  6c 29 0a 09 20 20 20 20  20 20 20 43 6f 6d 70 4c  |l)..       CompL|
000036f0  61 62 28 6d 2c 20 2d 31  29 20 24 29 0a 09 20 20  |ab(m, -1) $)..  |
00003700  20 20 52 45 54 55 52 4e  0a 20 20 20 20 20 20 24  |  RETURN.      $|
00003710  29 0a 0a 20 20 20 4c 6f  61 64 28 78 29 0a 20 20  |)..   Load(x).  |
00003720  20 4f 75 74 32 28 62 20  2d 3e 20 73 2e 6a 74 2c  | Out2(b -> s.jt,|
00003730  20 73 2e 6a 66 2c 20 6c  29 0a 20 20 20 73 73 70  | s.jf, l).   ssp|
00003740  20 3a 3d 20 73 73 70 2d  31 0a 24 29 0a 0a 41 4e  | := ssp-1.$)..AN|
00003750  44 20 54 72 61 6e 73 53  77 69 74 63 68 28 78 29  |D TransSwitch(x)|
00003760  20 42 45 0a 24 28 20 4c  45 54 20 6b 76 65 63 2c  | BE.$( LET kvec,|
00003770  20 6c 76 65 63 20 3d 20  63 61 73 65 6b 76 65 63  | lvec = casekvec|
00003780  2c 20 63 61 73 65 6c 76  65 63 0a 20 20 20 4c 45  |, caselvec.   LE|
00003790  54 20 63 70 2c 20 63 6c  69 6d 20 3d 20 63 61 73  |T cp, clim = cas|
000037a0  65 70 74 72 2c 20 63 61  73 65 6c 69 6d 0a 20 20  |eptr, caselim.  |
000037b0  20 4c 45 54 20 65 63 6c  2c 20 64 6c 20 3d 20 65  | LET ecl, dl = e|
000037c0  6e 64 63 61 73 65 4c 61  62 65 6c 2c 20 64 65 66  |ndcaseLabel, def|
000037d0  61 75 6c 74 4c 61 62 65  6c 0a 20 20 20 4c 45 54  |aultLabel.   LET|
000037e0  20 6c 20 3d 20 4e 65 78  74 50 61 72 61 6d 28 29  | l = NextParam()|
000037f0  0a 0a 20 20 20 65 6e 64  63 61 73 65 4c 61 62 65  |..   endcaseLabe|
00003800  6c 20 3a 3d 20 30 3b 0a  0a 20 20 20 63 61 73 65  |l := 0;..   case|
00003810  70 74 72 20 3a 3d 20 30  0a 20 20 20 63 61 73 65  |ptr := 0.   case|
00003820  6c 69 6d 20 3a 3d 20 68  34 21 78 0a 0a 20 20 20  |lim := h4!x..   |
00003830  63 61 73 65 6b 76 65 63  20 3a 3d 20 47 65 74 56  |casekvec := GetV|
00003840  65 63 74 6f 72 28 32 2a  63 61 73 65 6c 69 6d 29  |ector(2*caselim)|
00003850  0a 20 20 20 63 61 73 65  6c 76 65 63 20 3a 3d 20  |.   caselvec := |
00003860  63 61 73 65 6b 76 65 63  2b 63 61 73 65 6c 69 6d  |casekvec+caselim|
00003870  0a 0a 20 20 20 43 6f 6d  70 4a 75 6d 70 28 6c 29  |..   CompJump(l)|
00003880  3b 0a 20 20 20 64 65 66  61 75 6c 74 4c 61 62 65  |;.   defaultLabe|
00003890  6c 20 3a 3d 20 30 3b 0a  0a 20 20 20 54 72 61 6e  |l := 0;..   Tran|
000038a0  73 28 68 33 21 78 29 3b  0a 20 20 20 49 46 20 61  |s(h3!x);.   IF a|
000038b0  63 63 65 73 73 69 62 6c  65 20 54 48 45 4e 0a 20  |ccessible THEN. |
000038c0  20 20 24 28 20 49 46 20  65 6e 64 63 61 73 65 4c  |  $( IF endcaseL|
000038d0  61 62 65 6c 3d 30 20 54  48 45 4e 20 65 6e 64 63  |abel=0 THEN endc|
000038e0  61 73 65 4c 61 62 65 6c  20 3a 3d 20 4e 65 78 74  |aseLabel := Next|
000038f0  50 61 72 61 6d 28 29 3b  0a 20 20 20 20 20 20 43  |Param();.      C|
00003900  6f 6d 70 4a 75 6d 70 28  65 6e 64 63 61 73 65 4c  |ompJump(endcaseL|
00003910  61 62 65 6c 29 20 24 29  3b 0a 0a 20 20 20 43 6f  |abel) $);..   Co|
00003920  6d 70 4c 61 62 28 6c 2c  20 73 73 70 29 0a 20 20  |mpLab(l, ssp).  |
00003930  20 4c 6f 61 64 28 68 32  21 78 29 0a 0a 20 20 20  | Load(h2!x)..   |
00003940  49 46 20 64 65 66 61 75  6c 74 4c 61 62 65 6c 3d  |IF defaultLabel=|
00003950  30 20 54 48 45 4e 0a 20  20 20 24 28 20 49 46 20  |0 THEN.   $( IF |
00003960  65 6e 64 63 61 73 65 4c  61 62 65 6c 3d 30 20 54  |endcaseLabel=0 T|
00003970  48 45 4e 20 65 6e 64 63  61 73 65 4c 61 62 65 6c  |HEN endcaseLabel|
00003980  20 3a 3d 20 4e 65 78 74  50 61 72 61 6d 28 29 3b  | := NextParam();|
00003990  0a 20 20 20 20 20 20 64  65 66 61 75 6c 74 4c 61  |.      defaultLa|
000039a0  62 65 6c 20 3a 3d 20 65  6e 64 63 61 73 65 4c 61  |bel := endcaseLa|
000039b0  62 65 6c 20 24 29 3b 0a  0a 20 20 20 4f 75 74 32  |bel $);..   Out2|
000039c0  28 73 2e 73 77 69 74 63  68 6f 6e 2c 20 63 61 73  |(s.switchon, cas|
000039d0  65 6c 69 6d 29 0a 20 20  20 4f 75 74 31 28 64 65  |elim).   Out1(de|
000039e0  66 61 75 6c 74 4c 61 62  65 6c 29 0a 0a 20 20 20  |faultLabel)..   |
000039f0  46 4f 52 20 69 20 3d 20  30 20 54 4f 20 63 61 73  |FOR i = 0 TO cas|
00003a00  65 6c 69 6d 2d 31 20 44  4f 20 4f 75 74 32 28 63  |elim-1 DO Out2(c|
00003a10  61 73 65 6b 76 65 63 21  69 2c 20 63 61 73 65 6c  |asekvec!i, casel|
00003a20  76 65 63 21 69 29 0a 0a  20 20 20 61 63 63 65 73  |vec!i)..   acces|
00003a30  73 69 62 6c 65 20 3a 3d  20 46 41 4c 53 45 3b 0a  |sible := FALSE;.|
00003a40  20 20 20 73 73 70 20 3a  3d 20 73 73 70 2d 31 3b  |   ssp := ssp-1;|
00003a50  0a 20 20 20 43 6f 6d 70  4c 61 62 28 65 6e 64 63  |.   CompLab(endc|
00003a60  61 73 65 4c 61 62 65 6c  2c 20 73 73 70 29 0a 0a  |aseLabel, ssp)..|
00003a70  20 20 20 46 72 65 65 56  65 63 74 6f 72 28 63 61  |   FreeVector(ca|
00003a80  73 65 6b 76 65 63 29 0a  20 20 20 65 6e 64 63 61  |sekvec).   endca|
00003a90  73 65 4c 61 62 65 6c 2c  20 64 65 66 61 75 6c 74  |seLabel, default|
00003aa0  4c 61 62 65 6c 20 3a 3d  20 65 63 6c 2c 20 64 6c  |Label := ecl, dl|
00003ab0  0a 20 20 20 63 61 73 65  6b 76 65 63 2c 20 63 61  |.   casekvec, ca|
00003ac0  73 65 6c 76 65 63 20 3a  3d 20 6b 76 65 63 2c 20  |selvec := kvec, |
00003ad0  6c 76 65 63 0a 20 20 20  63 61 73 65 70 74 72 2c  |lvec.   caseptr,|
00003ae0  20 63 61 73 65 6c 69 6d  20 3a 3d 20 63 70 2c 20  | caselim := cp, |
00003af0  63 6c 69 6d 0a 24 29 0a  0a 0a 41 4e 44 20 54 72  |clim.$)...AND Tr|
00003b00  61 6e 73 46 6f 72 28 78  29 20 42 45 0a 24 28 20  |ansFor(x) BE.$( |
00003b10  4c 45 54 20 61 20 3d 20  6e 61 6d 65 56 65 63 45  |LET a = nameVecE|
00003b20  0a 20 20 20 4c 45 54 20  6d 20 3d 20 4e 65 78 74  |.   LET m = Next|
00003b30  50 61 72 61 6d 28 29 0a  20 20 20 4c 45 54 20 6c  |Param().   LET l|
00003b40  20 3d 20 3f 0a 20 20 20  4c 45 54 20 64 6f 6a 75  | = ?.   LET doju|
00003b50  6d 70 20 3d 20 54 52 55  45 0a 20 20 20 4c 45 54  |mp = TRUE.   LET|
00003b60  20 62 6c 2c 20 6c 6c 20  3d 20 62 72 65 61 6b 4c  | bl, ll = breakL|
00003b70  61 62 65 6c 2c 20 6c 6f  6f 70 4c 61 62 65 6c 0a  |abel, loopLabel.|
00003b80  20 20 20 4c 45 54 20 6b  2c 20 6e 20 3d 20 30 2c  |   LET k, n = 0,|
00003b90  20 30 0a 20 20 20 4c 45  54 20 73 74 65 70 20 3d  | 0.   LET step =|
00003ba0  20 31 0a 20 20 20 4c 45  54 20 73 20 3d 20 73 73  | 1.   LET s = ss|
00003bb0  70 0a 0a 20 20 20 62 72  65 61 6b 4c 61 62 65 6c  |p..   breakLabel|
00003bc0  2c 20 6c 6f 6f 70 4c 61  62 65 6c 20 3a 3d 20 30  |, loopLabel := 0|
00003bd0  2c 20 30 0a 0a 20 20 20  41 64 64 4e 61 6d 65 28  |, 0..   AddName(|
00003be0  68 32 21 78 2c 20 73 2e  6c 6f 63 61 6c 2c 20 73  |h2!x, s.local, s|
00003bf0  29 0a 20 20 20 4c 6f 61  64 28 68 33 21 78 29 0a  |).   Load(h3!x).|
00003c00  0a 20 20 20 49 46 20 68  35 21 78 7e 3d 30 20 54  |.   IF h5!x~=0 T|
00003c10  48 45 4e 20 73 74 65 70  20 3a 3d 20 45 76 61 6c  |HEN step := Eval|
00003c20  43 6f 6e 73 74 28 68 35  21 78 29 0a 0a 20 20 20  |Const(h5!x)..   |
00003c30  54 45 53 54 20 43 68 65  63 6b 43 6f 6e 73 74 61  |TEST CheckConsta|
00003c40  6e 74 28 68 34 21 78 2c  20 40 6e 29 20 54 48 45  |nt(h4!x, @n) THE|
00003c50  4e 20 24 28 0a 20 20 20  20 20 20 4c 45 54 20 66  |N $(.      LET f|
00003c60  69 72 73 74 20 3d 20 3f  0a 20 20 20 20 20 20 6b  |irst = ?.      k|
00003c70  20 3a 3d 20 73 2e 6c 6e  0a 0a 20 20 20 20 20 20  | := s.ln..      |
00003c80  49 46 20 43 68 65 63 6b  43 6f 6e 73 74 61 6e 74  |IF CheckConstant|
00003c90  28 68 33 21 78 2c 20 40  66 69 72 73 74 29 20 54  |(h3!x, @first) T|
00003ca0  48 45 4e 0a 09 20 20 20  20 2f 2f 20 4f 6e 6c 79  |HEN..    // Only|
00003cb0  20 63 6f 6d 70 61 72 65  20 74 68 65 20 76 61 6c  | compare the val|
00003cc0  75 65 73 20 69 66 20 74  68 65 79 20 61 72 65 20  |ues if they are |
00003cd0  6f 66 20 74 68 65 0a 09  20 20 20 20 2f 2f 20 73  |of the..    // s|
00003ce0  61 6d 65 20 73 69 67 6e  2c 20 74 6f 20 61 76 6f  |ame sign, to avo|
00003cf0  69 64 20 69 6e 63 6f 6e  73 69 73 74 65 6e 63 69  |id inconsistenci|
00003d00  65 73 20 77 69 74 68 0a  09 20 20 20 20 2f 2f 20  |es with..    // |
00003d10  74 68 65 20 74 61 72 67  65 74 20 6d 61 63 68 69  |the target machi|
00003d20  6e 65 27 73 20 68 61 6e  64 6c 69 6e 67 20 6f 66  |ne's handling of|
00003d30  20 6c 6f 6f 70 73 2e 0a  0a 09 20 49 46 20 28 6e  | loops.... IF (n|
00003d40  20 4e 45 51 56 20 66 69  72 73 74 29 3e 3d 30 20  | NEQV first)>=0 |
00003d50  54 48 45 4e 0a 09 20 20  20 20 49 46 20 66 69 72  |THEN..    IF fir|
00003d60  73 74 3c 3d 6e 20 26 20  73 74 65 70 3e 3d 30 20  |st<=n & step>=0 |
00003d70  7c 0a 09 20 20 20 20 20  20 20 66 69 72 73 74 3e  ||..       first>|
00003d80  3d 6e 20 26 20 73 74 65  70 3c 30 20 54 48 45 4e  |=n & step<0 THEN|
00003d90  0a 09 20 20 20 20 20 20  20 64 6f 6a 75 6d 70 20  |..       dojump |
00003da0  3a 3d 20 46 41 4c 53 45  20 24 29 0a 0a 20 20 20  |:= FALSE $)..   |
00003db0  20 20 20 45 4c 53 45 20  24 28 0a 09 20 6b 2c 20  |   ELSE $(.. k, |
00003dc0  6e 20 3a 3d 20 73 2e 6c  70 2c 20 73 73 70 0a 09  |n := s.lp, ssp..|
00003dd0  20 4c 6f 61 64 28 68 34  21 78 29 20 24 29 0a 0a  | Load(h4!x) $)..|
00003de0  20 20 20 4f 75 74 4f 70  28 73 2e 73 74 6f 72 65  |   OutOp(s.store|
00003df0  29 0a 0a 20 20 20 49 46  20 64 6f 6a 75 6d 70 20  |)..   IF dojump |
00003e00  54 48 45 4e 0a 20 20 20  24 28 20 6c 20 3a 3d 20  |THEN.   $( l := |
00003e10  4e 65 78 74 50 61 72 61  6d 28 29 0a 20 20 20 20  |NextParam().    |
00003e20  20 20 43 6f 6d 70 4a 75  6d 70 28 6c 29 20 24 29  |  CompJump(l) $)|
00003e30  0a 0a 20 20 20 44 65 63  6c 4c 61 62 65 6c 73 28  |..   DeclLabels(|
00003e40  68 36 21 78 29 0a 20 20  20 43 6f 6d 70 4c 61 62  |h6!x).   CompLab|
00003e50  28 6d 2c 20 73 73 70 29  0a 20 20 20 54 72 61 6e  |(m, ssp).   Tran|
00003e60  73 28 68 36 21 78 29 0a  0a 20 20 20 43 6f 6d 70  |s(h6!x)..   Comp|
00003e70  4c 61 62 28 6c 6f 6f 70  4c 61 62 65 6c 2c 20 73  |Lab(loopLabel, s|
00003e80  73 70 29 0a 0a 20 20 20  4f 75 74 32 28 73 2e 6c  |sp)..   Out2(s.l|
00003e90  70 2c 20 73 29 3b 20 4f  75 74 32 28 73 2e 6c 6e  |p, s); Out2(s.ln|
00003ea0  2c 20 73 74 65 70 29 0a  20 20 20 4f 75 74 4f 70  |, step).   OutOp|
00003eb0  28 73 2e 70 6c 75 73 29  3b 20 4f 75 74 32 28 73  |(s.plus); Out2(s|
00003ec0  2e 73 70 2c 20 73 29 0a  0a 20 20 20 49 46 20 64  |.sp, s)..   IF d|
00003ed0  6f 6a 75 6d 70 20 54 48  45 4e 20 43 6f 6d 70 4c  |ojump THEN CompL|
00003ee0  61 62 28 6c 2c 20 73 73  70 29 0a 0a 20 20 20 54  |ab(l, ssp)..   T|
00003ef0  45 53 54 20 73 74 65 70  3e 3d 30 20 54 48 45 4e  |EST step>=0 THEN|
00003f00  20 24 28 0a 20 20 20 20  20 20 4f 75 74 32 28 73  | $(.      Out2(s|
00003f10  2e 6c 70 2c 73 29 0a 20  20 20 20 20 20 4f 75 74  |.lp,s).      Out|
00003f20  32 28 6b 2c 6e 29 20 24  29 0a 20 20 20 45 4c 53  |2(k,n) $).   ELS|
00003f30  45 20 24 28 0a 20 20 20  20 20 20 4f 75 74 32 28  |E $(.      Out2(|
00003f40  6b 2c 6e 29 0a 20 20 20  20 20 20 4f 75 74 32 28  |k,n).      Out2(|
00003f50  73 2e 6c 70 2c 73 29 20  24 29 0a 0a 20 20 20 4f  |s.lp,s) $)..   O|
00003f60  75 74 32 28 73 2e 65 6e  64 66 6f 72 2c 20 6d 29  |ut2(s.endfor, m)|
00003f70  0a 0a 20 20 20 43 6f 6d  70 4c 61 62 28 62 72 65  |..   CompLab(bre|
00003f80  61 6b 4c 61 62 65 6c 2c  20 73 29 3b 0a 20 20 20  |akLabel, s);.   |
00003f90  62 72 65 61 6b 4c 61 62  65 6c 2c 20 6c 6f 6f 70  |breakLabel, loop|
00003fa0  4c 61 62 65 6c 2c 20 73  73 70 20 3a 3d 20 62 6c  |Label, ssp := bl|
00003fb0  2c 20 6c 6c 2c 20 73 0a  0a 20 20 20 6e 61 6d 65  |, ll, s..   name|
00003fc0  56 65 63 45 20 3a 3d 20  61 0a 24 29 0a 0a 2e 0a  |VecE := a.$)....|
00003fd0  0a 0a 53 45 43 54 49 4f  4e 20 22 54 72 6e 42 22  |..SECTION "TrnB"|
00003fe0  0a 0a 47 45 54 20 22 62  2e 48 65 61 64 65 72 22  |..GET "b.Header"|
00003ff0  0a 0a 53 54 41 54 49 43  0a 24 28 20 2f 2a 20 56  |..STATIC.$( /* V|
00004000  65 72 73 69 6f 6e 20 6f  66 20 32 38 20 46 65 62  |ersion of 28 Feb|
00004010  20 38 36 20 31 32 3a 34  37 3a 31 38 0a 20 20 20  | 86 12:47:18.   |
00004020  2a 2f 0a 20 20 20 64 75  6d 6d 79 20 3d 20 56 65  |*/.   dummy = Ve|
00004030  72 73 69 6f 6e 4d 61 72  6b 0a 20 20 20 76 65 72  |rsionMark.   ver|
00004040  73 69 6f 6e 20 3d 20 31  2a 32 35 36 2b 34 0a 24  |sion = 1*256+4.$|
00004050  29 0a 0a 2f 2a 20 31 2e  33 09 30 37 20 46 65 62  |)../* 1.3.07 Feb|
00004060  20 38 36 20 31 33 3a 34  34 3a 32 30 0a 20 20 20  | 86 13:44:20.   |
00004070  20 20 46 6c 6f 61 74 69  6e 67 20 70 6f 69 6e 74  |  Floating point|
00004080  20 69 6e 63 6f 72 70 6f  72 61 74 65 64 0a 20 20  | incorporated.  |
00004090  20 31 2e 34 09 32 38 20  46 65 62 20 38 36 20 31  | 1.4.28 Feb 86 1|
000040a0  32 3a 34 36 3a 35 32 0a  20 20 20 20 20 6f 70 3a  |2:46:52.     op:|
000040b0  3d 20 61 6c 6c 6f 77 65  64 20 66 6f 72 20 73 65  |= allowed for se|
000040c0  6c 65 63 74 69 6f 6e 73  0a 2a 2f 0a 0a 4c 45 54  |lections.*/..LET|
000040d0  20 4c 6f 61 64 28 78 29  20 42 45 0a 24 28 20 49  | Load(x) BE.$( I|
000040e0  46 20 78 3d 30 20 54 48  45 4e 0a 20 20 20 24 28  |F x=0 THEN.   $(|
000040f0  20 54 72 61 6e 73 52 65  70 6f 72 74 28 31 34 38  | TransReport(148|
00004100  2c 20 63 75 72 72 65 6e  74 42 72 61 6e 63 68 29  |, currentBranch)|
00004110  0a 20 20 20 20 20 20 4c  6f 61 64 5a 65 72 6f 28  |.      LoadZero(|
00004120  29 0a 20 20 20 20 20 20  52 45 54 55 52 4e 20 24  |).      RETURN $|
00004130  29 0a 0a 20 20 20 49 46  20 53 6d 61 6c 6c 4e 75  |)..   IF SmallNu|
00004140  6d 62 65 72 28 78 29 20  54 48 45 4e 0a 20 20 20  |mber(x) THEN.   |
00004150  24 28 20 4f 75 74 32 28  73 2e 6c 6e 2c 20 78 29  |$( Out2(s.ln, x)|
00004160  0a 20 20 20 20 20 20 73  73 70 20 3a 3d 20 73 73  |.      ssp := ss|
00004170  70 2b 31 0a 20 20 20 20  20 20 52 45 54 55 52 4e  |p+1.      RETURN|
00004180  20 24 29 0a 0a 20 20 20  24 28 20 4c 45 54 20 6f  | $)..   $( LET o|
00004190  70 20 3d 20 68 31 21 78  0a 20 20 20 20 20 20 53  |p = h1!x.      S|
000041a0  57 49 54 43 48 4f 4e 20  6f 70 20 49 4e 54 4f 0a  |WITCHON op INTO.|
000041b0  20 20 20 20 20 20 24 28  20 44 45 46 41 55 4c 54  |      $( DEFAULT|
000041c0  3a 0a 09 20 20 20 20 54  72 61 6e 73 52 65 70 6f  |:..    TransRepo|
000041d0  72 74 28 31 34 37 2c 20  63 75 72 72 65 6e 74 42  |rt(147, currentB|
000041e0  72 61 6e 63 68 29 0a 09  20 20 20 20 4c 6f 61 64  |ranch)..    Load|
000041f0  5a 65 72 6f 28 29 0a 09  20 20 20 20 52 45 54 55  |Zero()..    RETU|
00004200  52 4e 0a 0a 09 20 43 41  53 45 20 73 2e 62 79 74  |RN... CASE s.byt|
00004210  65 61 70 3a 0a 09 20 20  20 20 6f 70 20 3a 3d 20  |eap:..    op := |
00004220  73 2e 67 65 74 62 79 74  65 0a 0a 09 20 43 41 53  |s.getbyte... CAS|
00004230  45 20 73 2e 64 69 76 3a  20 43 41 53 45 20 73 2e  |E s.div: CASE s.|
00004240  72 65 6d 3a 20 43 41 53  45 20 73 2e 6d 69 6e 75  |rem: CASE s.minu|
00004250  73 3a 0a 09 20 43 41 53  45 20 73 2e 66 64 69 76  |s:.. CASE s.fdiv|
00004260  3a 43 41 53 45 20 73 2e  66 6d 69 6e 75 73 3a 0a  |:CASE s.fminus:.|
00004270  09 20 43 41 53 45 20 73  2e 6c 73 3a 20 20 43 41  |. CASE s.ls:  CA|
00004280  53 45 20 73 2e 67 72 3a  20 20 43 41 53 45 20 73  |SE s.gr:  CASE s|
00004290  2e 6c 65 3a 20 20 43 41  53 45 20 73 2e 67 65 3a  |.le:  CASE s.ge:|
000042a0  0a 09 20 43 41 53 45 20  73 2e 6c 6c 73 3a 20 43  |.. CASE s.lls: C|
000042b0  41 53 45 20 73 2e 6c 67  72 3a 20 43 41 53 45 20  |ASE s.lgr: CASE |
000042c0  73 2e 6c 6c 65 3a 20 43  41 53 45 20 73 2e 6c 67  |s.lle: CASE s.lg|
000042d0  65 3a 0a 09 20 43 41 53  45 20 73 2e 66 6c 73 3a  |e:.. CASE s.fls:|
000042e0  20 43 41 53 45 20 73 2e  66 67 72 3a 20 43 41 53  | CASE s.fgr: CAS|
000042f0  45 20 73 2e 66 6c 65 3a  20 43 41 53 45 20 73 2e  |E s.fle: CASE s.|
00004300  66 67 65 3a 0a 09 20 43  41 53 45 20 73 2e 6c 73  |fge:.. CASE s.ls|
00004310  68 69 66 74 3a 20 43 41  53 45 20 73 2e 72 73 68  |hift: CASE s.rsh|
00004320  69 66 74 3a 0a 09 20 20  20 20 4c 6f 61 64 28 68  |ift:..    Load(h|
00004330  32 21 78 29 0a 09 20 20  20 20 4c 6f 61 64 28 68  |2!x)..    Load(h|
00004340  33 21 78 29 0a 09 20 20  20 20 4f 75 74 4f 70 28  |3!x)..    OutOp(|
00004350  6f 70 29 0a 09 20 20 20  20 73 73 70 20 3a 3d 20  |op)..    ssp := |
00004360  73 73 70 2d 31 0a 09 20  20 20 20 52 45 54 55 52  |ssp-1..    RETUR|
00004370  4e 0a 0a 09 20 43 41 53  45 20 73 2e 6f 66 3a 0a  |N... CASE s.of:.|
00004380  09 20 20 20 20 20 2f 2f  20 49 66 20 74 68 65 20  |.     // If the |
00004390  66 69 65 6c 64 20 69 73  20 61 20 77 68 6f 6c 65  |field is a whole|
000043a0  20 77 6f 72 64 20 69 6e  20 73 69 7a 65 2c 0a 09  | word in size,..|
000043b0  20 20 20 20 20 2f 2f 20  63 6f 64 65 20 66 6f 72  |     // code for|
000043c0  20 78 21 76 20 69 73 20  67 65 6e 65 72 61 74 65  | x!v is generate|
000043d0  64 2e 0a 09 20 24 28 20  4c 45 54 20 73 65 6c 65  |d... $( LET sele|
000043e0  63 74 6f 72 20 3d 20 45  76 61 6c 43 6f 6e 73 74  |ctor = EvalConst|
000043f0  28 68 32 21 78 29 0a 09  20 20 20 20 4c 45 54 20  |(h2!x)..    LET |
00004400  6f 66 66 73 65 74 20 3d  20 73 65 6c 65 63 74 6f  |offset = selecto|
00004410  72 20 26 20 73 6c 63 74  2e 6d 61 78 2e 6f 66 66  |r & slct.max.off|
00004420  73 65 74 0a 09 20 20 20  20 4c 6f 61 64 28 68 33  |set..    Load(h3|
00004430  21 78 29 0a 0a 09 20 20  20 20 54 45 53 54 20 73  |!x)...    TEST s|
00004440  65 6c 65 63 74 6f 72 7e  3d 6f 66 66 73 65 74 20  |elector~=offset |
00004450  54 48 45 4e 20 24 28 0a  09 20 20 20 20 20 20 20  |THEN $(..       |
00004460  4c 45 54 20 73 69 7a 65  20 3d 20 73 65 6c 65 63  |LET size = selec|
00004470  74 6f 72 3e 3e 73 6c 63  74 2e 73 69 7a 65 2e 73  |tor>>slct.size.s|
00004480  68 69 66 74 3b 0a 09 20  20 20 20 20 20 20 4c 45  |hift;..       LE|
00004490  54 20 73 68 69 66 74 20  3d 20 28 73 65 6c 65 63  |T shift = (selec|
000044a0  74 6f 72 3e 3e 73 6c 63  74 2e 73 68 69 66 74 2e  |tor>>slct.shift.|
000044b0  73 68 69 66 74 29 20 26  20 73 6c 63 74 2e 6d 61  |shift) & slct.ma|
000044c0  73 6b 3b 0a 09 20 20 20  20 20 20 20 49 46 20 73  |sk;..       IF s|
000044d0  69 7a 65 3d 30 20 54 48  45 4e 20 73 69 7a 65 20  |ize=0 THEN size |
000044e0  3a 3d 20 62 69 74 73 77  69 64 74 68 2d 73 68 69  |:= bitswidth-shi|
000044f0  66 74 3b 0a 09 20 20 20  20 20 20 20 4f 75 74 4f  |ft;..       OutO|
00004500  70 28 73 2e 73 6c 63 74  61 70 29 0a 09 20 20 20  |p(s.slctap)..   |
00004510  20 20 20 20 4f 75 74 31  28 73 69 7a 65 29 3b 20  |    Out1(size); |
00004520  4f 75 74 31 28 73 68 69  66 74 29 3b 20 4f 75 74  |Out1(shift); Out|
00004530  31 28 6f 66 66 73 65 74  29 20 24 29 0a 09 20 20  |1(offset) $)..  |
00004540  20 20 45 4c 53 45 20 24  28 0a 09 20 20 20 20 20  |  ELSE $(..     |
00004550  20 20 4f 75 74 32 28 73  2e 6c 6e 2c 20 6f 66 66  |  Out2(s.ln, off|
00004560  73 65 74 29 0a 09 20 20  20 20 20 20 20 4f 75 74  |set)..       Out|
00004570  32 28 73 2e 70 6c 75 73  2c 20 73 2e 72 76 29 20  |2(s.plus, s.rv) |
00004580  24 29 0a 0a 09 20 20 20  20 52 45 54 55 52 4e 20  |$)...    RETURN |
00004590  24 29 0a 0a 09 20 43 41  53 45 20 73 2e 76 65 63  |$)... CASE s.vec|
000045a0  61 70 3a 0a 09 20 43 41  53 45 20 73 2e 6d 75 6c  |ap:.. CASE s.mul|
000045b0  74 3a 20 20 43 41 53 45  20 73 2e 70 6c 75 73 3a  |t:  CASE s.plus:|
000045c0  0a 09 20 43 41 53 45 20  73 2e 65 71 3a 20 20 20  |.. CASE s.eq:   |
000045d0  20 43 41 53 45 20 73 2e  6e 65 3a 0a 09 20 43 41  | CASE s.ne:.. CA|
000045e0  53 45 20 73 2e 66 6d 75  6c 74 3a 20 43 41 53 45  |SE s.fmult: CASE|
000045f0  20 73 2e 66 70 6c 75 73  3a 0a 09 20 43 41 53 45  | s.fplus:.. CASE|
00004600  20 73 2e 66 65 71 3a 20  20 20 43 41 53 45 20 73  | s.feq:   CASE s|
00004610  2e 66 6e 65 3a 0a 09 20  43 41 53 45 20 73 2e 6c  |.fne:.. CASE s.l|
00004620  6f 67 61 6e 64 3a 43 41  53 45 20 73 2e 6c 6f 67  |ogand:CASE s.log|
00004630  6f 72 3a 20 43 41 53 45  20 73 2e 65 71 76 3a 20  |or: CASE s.eqv: |
00004640  43 41 53 45 20 73 2e 6e  65 71 76 3a 0a 09 20 24  |CASE s.neqv:.. $|
00004650  28 20 4c 45 54 20 61 2c  20 62 20 3d 20 68 32 21  |( LET a, b = h2!|
00004660  78 2c 20 68 33 21 78 0a  09 20 20 20 20 20 20 2f  |x, h3!x..      /|
00004670  2f 20 54 72 79 20 74 6f  20 67 65 74 20 74 68 65  |/ Try to get the|
00004680  20 73 69 6d 70 6c 65 72  20 6f 70 65 72 61 6e 64  | simpler operand|
00004690  20 6f 6e 20 74 68 65 20  72 69 67 68 74 2e 0a 0a  | on the right...|
000046a0  09 20 20 20 20 49 46 20  53 6d 61 6c 6c 4e 75 6d  |.    IF SmallNum|
000046b0  62 65 72 28 61 29 20 7c  20 68 31 21 61 3d 73 2e  |ber(a) | h1!a=s.|
000046c0  6e 61 6d 65 20 7c 20 68  31 21 61 3d 73 2e 6e 75  |name | h1!a=s.nu|
000046d0  6d 62 65 72 20 54 48 45  4e 0a 09 20 20 20 20 20  |mber THEN..     |
000046e0  20 20 61 2c 20 62 20 3a  3d 20 68 33 21 78 2c 20  |  a, b := h3!x, |
000046f0  68 32 21 78 0a 0a 09 20  20 20 20 4c 6f 61 64 28  |h2!x...    Load(|
00004700  61 29 0a 09 20 20 20 20  4c 6f 61 64 28 62 29 0a  |a)..    Load(b).|
00004710  0a 09 20 20 20 20 49 46  20 6f 70 3d 73 2e 76 65  |..    IF op=s.ve|
00004720  63 61 70 20 54 48 45 4e  0a 09 20 20 20 20 24 28  |cap THEN..    $(|
00004730  20 4f 75 74 4f 70 28 73  2e 70 6c 75 73 29 0a 09  | OutOp(s.plus)..|
00004740  20 20 20 20 20 20 20 6f  70 20 3a 3d 20 73 2e 72  |       op := s.r|
00004750  76 20 24 29 0a 0a 09 20  20 20 20 4f 75 74 4f 70  |v $)...    OutOp|
00004760  28 6f 70 29 0a 09 20 20  20 20 73 73 70 20 3a 3d  |(op)..    ssp :=|
00004770  20 73 73 70 2d 31 0a 09  20 20 20 20 52 45 54 55  | ssp-1..    RETU|
00004780  52 4e 20 24 29 0a 0a 09  20 43 41 53 45 20 73 2e  |RN $)... CASE s.|
00004790  6e 65 67 3a 20 43 41 53  45 20 73 2e 6e 6f 74 3a  |neg: CASE s.not:|
000047a0  20 43 41 53 45 20 73 2e  72 76 3a 20 43 41 53 45  | CASE s.rv: CASE|
000047b0  20 73 2e 61 62 73 3a 0a  09 20 43 41 53 45 20 73  | s.abs:.. CASE s|
000047c0  2e 66 6e 65 67 3a 43 41  53 45 20 73 2e 66 61 62  |.fneg:CASE s.fab|
000047d0  73 3a 0a 09 20 43 41 53  45 20 73 2e 66 69 78 3a  |s:.. CASE s.fix:|
000047e0  20 43 41 53 45 20 73 2e  66 6c 6f 61 74 3a 0a 09  | CASE s.float:..|
000047f0  20 43 41 53 45 20 73 2e  63 61 72 3a 20 43 41 53  | CASE s.car: CAS|
00004800  45 20 73 2e 63 64 72 3a  20 43 41 53 45 20 73 2e  |E s.cdr: CASE s.|
00004810  76 63 61 72 3a 20 43 41  53 45 20 73 2e 76 63 64  |vcar: CASE s.vcd|
00004820  72 3a 0a 09 20 20 20 20  4c 6f 61 64 28 68 32 21  |r:..    Load(h2!|
00004830  78 29 0a 09 20 20 20 20  4f 75 74 4f 70 28 6f 70  |x)..    OutOp(op|
00004840  29 0a 09 20 20 20 20 52  45 54 55 52 4e 0a 0a 09  |)..    RETURN...|
00004850  20 43 41 53 45 20 73 2e  6e 69 6c 3a 0a 09 20 43  | CASE s.nil:.. C|
00004860  41 53 45 20 73 2e 74 72  75 65 3a 20 43 41 53 45  |ASE s.true: CASE|
00004870  20 73 2e 66 61 6c 73 65  3a 20 43 41 53 45 20 73  | s.false: CASE s|
00004880  2e 71 75 65 72 79 3a 0a  09 20 20 20 20 4f 75 74  |.query:..    Out|
00004890  4f 70 28 6f 70 29 0a 09  20 20 20 20 73 73 70 20  |Op(op)..    ssp |
000048a0  3a 3d 20 73 73 70 2b 31  0a 09 20 20 20 20 52 45  |:= ssp+1..    RE|
000048b0  54 55 52 4e 0a 0a 09 20  43 41 53 45 20 73 2e 6c  |TURN... CASE s.l|
000048c0  76 3a 0a 09 20 20 20 20  4c 6f 61 64 4c 56 28 68  |v:..    LoadLV(h|
000048d0  32 21 78 29 0a 09 20 20  20 20 52 45 54 55 52 4e  |2!x)..    RETURN|
000048e0  0a 0a 09 20 43 41 53 45  20 73 2e 6e 75 6d 62 65  |... CASE s.numbe|
000048f0  72 3a 0a 09 20 20 20 20  4f 75 74 32 28 73 2e 6c  |r:..    Out2(s.l|
00004900  6e 2c 20 68 32 21 78 29  0a 09 20 20 20 20 73 73  |n, h2!x)..    ss|
00004910  70 20 3a 3d 20 73 73 70  2b 31 0a 09 20 20 20 20  |p := ssp+1..    |
00004920  52 45 54 55 52 4e 0a 0a  09 20 43 41 53 45 20 73  |RETURN... CASE s|
00004930  2e 66 63 6f 6e 73 74 3a  0a 09 20 20 20 20 4f 75  |.fconst:..    Ou|
00004940  74 32 28 73 2e 66 63 6f  6e 73 74 2c 20 68 32 21  |t2(s.fconst, h2!|
00004950  78 29 3b 0a 09 20 20 20  20 4f 75 74 31 28 68 33  |x);..    Out1(h3|
00004960  21 78 29 3b 0a 09 20 20  20 20 73 73 70 20 3a 3d  |!x);..    ssp :=|
00004970  20 73 73 70 2b 31 3b 0a  09 20 20 20 20 45 4e 44  | ssp+1;..    END|
00004980  43 41 53 45 0a 0a 09 20  43 41 53 45 20 73 2e 73  |CASE... CASE s.s|
00004990  6c 63 74 3a 0a 09 20 20  20 20 4f 75 74 32 28 73  |lct:..    Out2(s|
000049a0  2e 6c 6e 2c 20 45 76 61  6c 43 6f 6e 73 74 28 78  |.ln, EvalConst(x|
000049b0  29 29 0a 09 20 20 20 20  73 73 70 20 3a 3d 20 73  |))..    ssp := s|
000049c0  73 70 2b 31 0a 09 20 20  20 20 52 45 54 55 52 4e  |sp+1..    RETURN|
000049d0  0a 0a 09 20 43 41 53 45  20 73 2e 73 74 72 69 6e  |... CASE s.strin|
000049e0  67 3a 0a 09 20 20 20 20  4f 75 74 4f 70 28 73 2e  |g:..    OutOp(s.|
000049f0  6c 73 74 72 29 0a 09 20  20 20 20 4f 75 74 53 74  |lstr)..    OutSt|
00004a00  72 69 6e 67 28 40 68 32  21 78 29 0a 09 20 20 20  |ring(@h2!x)..   |
00004a10  20 73 73 70 20 3a 3d 20  73 73 70 2b 31 0a 09 20  | ssp := ssp+1.. |
00004a20  20 20 20 52 45 54 55 52  4e 0a 0a 09 20 43 41 53  |   RETURN... CAS|
00004a30  45 20 73 2e 6e 61 6d 65  3a 0a 09 20 20 20 20 54  |E s.name:..    T|
00004a40  72 61 6e 73 4e 61 6d 65  28 78 2c 20 73 2e 6c 70  |ransName(x, s.lp|
00004a50  2c 20 73 2e 6c 67 2c 20  73 2e 6c 6c 2c 20 73 2e  |, s.lg, s.ll, s.|
00004a60  6c 6e 2c 20 73 2e 6c 6c  6c 29 0a 09 20 20 20 20  |ln, s.lll)..    |
00004a70  73 73 70 20 3a 3d 20 73  73 70 2b 31 0a 09 20 20  |ssp := ssp+1..  |
00004a80  20 20 52 45 54 55 52 4e  0a 0a 09 20 43 41 53 45  |  RETURN... CASE|
00004a90  20 73 2e 76 61 6c 6f 66  3a 0a 09 20 24 28 20 4c  | s.valof:.. $( L|
00004aa0  45 54 20 72 6c 20 3d 20  72 65 73 75 6c 74 4c 61  |ET rl = resultLa|
00004ab0  62 65 6c 3b 0a 09 20 20  20 20 4c 45 54 20 61 20  |bel;..    LET a |
00004ac0  3d 20 6e 61 6d 65 56 65  63 45 3b 0a 0a 09 20 20  |= nameVecE;...  |
00004ad0  20 20 44 65 63 6c 4c 61  62 65 6c 73 28 68 32 21  |  DeclLabels(h2!|
00004ae0  78 29 3b 0a 09 20 20 20  20 72 65 73 75 6c 74 4c  |x);..    resultL|
00004af0  61 62 65 6c 20 3a 3d 20  4e 65 78 74 50 61 72 61  |abel := NextPara|
00004b00  6d 28 29 3b 0a 09 20 20  20 20 54 72 61 6e 73 28  |m();..    Trans(|
00004b10  68 32 21 78 29 3b 0a 09  20 20 20 20 49 46 20 61  |h2!x);..    IF a|
00004b20  63 63 65 73 73 69 62 6c  65 20 54 48 45 4e 20 54  |ccessible THEN T|
00004b30  72 61 6e 73 52 65 70 6f  72 74 28 39 32 2c 20 78  |ransReport(92, x|
00004b40  29 3b 0a 0a 09 20 20 20  20 43 6f 6d 70 4c 61 62  |);...    CompLab|
00004b50  28 72 65 73 75 6c 74 4c  61 62 65 6c 2c 20 2d 31  |(resultLabel, -1|
00004b60  29 3b 0a 09 20 20 20 20  4f 75 74 32 28 73 2e 72  |);..    Out2(s.r|
00004b70  73 74 61 63 6b 2c 20 73  73 70 29 3b 0a 0a 09 20  |stack, ssp);... |
00004b80  20 20 20 73 73 70 20 3a  3d 20 73 73 70 2b 31 3b  |   ssp := ssp+1;|
00004b90  0a 09 20 20 20 20 6e 61  6d 65 56 65 63 45 20 3a  |..    nameVecE :|
00004ba0  3d 20 61 3b 0a 09 20 20  20 20 72 65 73 75 6c 74  |= a;..    result|
00004bb0  4c 61 62 65 6c 20 3a 3d  20 72 6c 3b 0a 09 20 20  |Label := rl;..  |
00004bc0  20 20 52 45 54 55 52 4e  20 24 29 0a 0a 09 20 43  |  RETURN $)... C|
00004bd0  41 53 45 20 73 2e 66 6e  61 70 3a 0a 09 20 24 28  |ASE s.fnap:.. $(|
00004be0  20 4c 45 54 20 73 20 3d  20 73 73 70 0a 09 20 20  | LET s = ssp..  |
00004bf0  20 20 73 73 70 20 3a 3d  20 73 73 70 2b 73 61 76  |  ssp := ssp+sav|
00004c00  65 53 70 61 63 65 53 69  7a 65 0a 09 20 20 20 20  |eSpaceSize..    |
00004c10  4f 75 74 32 28 73 2e 73  74 61 63 6b 2c 20 73 73  |Out2(s.stack, ss|
00004c20  70 29 0a 09 20 20 20 20  4c 6f 61 64 4c 69 73 74  |p)..    LoadList|
00004c30  28 68 33 21 78 29 0a 09  20 20 20 20 4c 6f 61 64  |(h3!x)..    Load|
00004c40  28 68 32 21 78 29 0a 09  20 20 20 20 4f 75 74 32  |(h2!x)..    Out2|
00004c50  28 73 2e 66 6e 61 70 2c  20 73 29 0a 09 20 20 20  |(s.fnap, s)..   |
00004c60  20 73 73 70 20 3a 3d 20  73 2b 31 0a 09 20 20 20  | ssp := s+1..   |
00004c70  20 52 45 54 55 52 4e 20  24 29 0a 0a 09 20 43 41  | RETURN $)... CA|
00004c80  53 45 20 73 2e 63 6f 6e  64 3a 0a 09 20 24 28 20  |SE s.cond:.. $( |
00004c90  4c 45 54 20 76 61 6c 20  3d 20 3f 0a 0a 09 20 20  |LET val = ?...  |
00004ca0  20 20 54 45 53 54 20 43  68 65 63 6b 43 6f 6e 73  |  TEST CheckCons|
00004cb0  74 61 6e 74 28 68 32 21  78 2c 20 40 76 61 6c 29  |tant(h2!x, @val)|
00004cc0  20 54 48 45 4e 0a 09 20  20 20 20 20 20 20 4c 6f  | THEN..       Lo|
00004cd0  61 64 28 28 76 61 6c 20  2d 3e 20 68 33 21 78 2c  |ad((val -> h3!x,|
00004ce0  20 68 34 21 78 29 29 0a  09 20 20 20 20 45 4c 53  | h4!x))..    ELS|
00004cf0  45 20 24 28 0a 09 20 20  20 20 20 20 20 4c 45 54  |E $(..       LET|
00004d00  20 6c 2c 20 6d 20 3d 20  4e 65 78 74 50 61 72 61  | l, m = NextPara|
00004d10  6d 28 29 2c 20 4e 65 78  74 50 61 72 61 6d 28 29  |m(), NextParam()|
00004d20  0a 09 20 20 20 20 20 20  20 4c 45 54 20 73 20 3d  |..       LET s =|
00004d30  20 73 73 70 0a 0a 09 20  20 20 20 20 20 20 4a 75  | ssp...       Ju|
00004d40  6d 70 43 6f 6e 64 28 68  32 21 78 2c 20 46 41 4c  |mpCond(h2!x, FAL|
00004d50  53 45 2c 20 6d 29 3b 0a  09 20 20 20 20 20 20 20  |SE, m);..       |
00004d60  4f 75 74 32 28 73 2e 73  74 61 63 6b 2c 20 73 73  |Out2(s.stack, ss|
00004d70  70 29 0a 09 20 20 20 20  20 20 20 4c 6f 61 64 28  |p)..       Load(|
00004d80  68 33 21 78 29 0a 09 20  20 20 20 20 20 20 4f 75  |h3!x)..       Ou|
00004d90  74 32 28 73 2e 72 65 73  2c 6c 29 0a 0a 09 20 20  |t2(s.res,l)...  |
00004da0  20 20 20 20 20 73 73 70  20 3a 3d 20 73 0a 0a 09  |     ssp := s...|
00004db0  20 20 20 20 20 20 20 43  6f 6d 70 4c 61 62 28 6d  |       CompLab(m|
00004dc0  2c 20 73 73 70 29 0a 09  20 20 20 20 20 20 20 4c  |, ssp)..       L|
00004dd0  6f 61 64 28 68 34 21 78  29 0a 09 20 20 20 20 20  |oad(h4!x)..     |
00004de0  20 20 4f 75 74 32 28 73  2e 72 65 73 2c 6c 29 0a  |  Out2(s.res,l).|
00004df0  0a 09 20 20 20 20 20 20  20 43 6f 6d 70 4c 61 62  |..       CompLab|
00004e00  28 6c 2c 20 73 73 70 29  0a 09 20 20 20 20 20 20  |(l, ssp)..      |
00004e10  20 4f 75 74 32 28 73 2e  72 73 74 61 63 6b 2c 73  | Out2(s.rstack,s|
00004e20  29 20 24 29 0a 09 20 20  20 20 52 45 54 55 52 4e  |) $)..    RETURN|
00004e30  20 24 29 0a 0a 09 20 43  41 53 45 20 73 2e 74 61  | $)... CASE s.ta|
00004e40  62 6c 65 3a 0a 09 20 20  20 20 4f 75 74 32 28 73  |ble:..    Out2(s|
00004e50  2e 6c 6c 6c 2c 20 64 65  66 69 6e 65 2e 74 61 62  |.lll, define.tab|
00004e60  6c 65 28 78 29 29 0a 09  20 20 20 20 73 73 70 20  |le(x))..    ssp |
00004e70  3a 3d 20 73 73 70 2b 31  0a 09 20 20 20 20 52 45  |:= ssp+1..    RE|
00004e80  54 55 52 4e 0a 20 20 20  20 20 20 24 29 0a 20 20  |TURN.      $).  |
00004e90  20 24 29 0a 24 29 0a 0a  41 4e 44 20 4c 6f 61 64  | $).$)..AND Load|
00004ea0  4c 56 28 78 29 20 42 45  0a 24 28 20 49 46 20 78  |LV(x) BE.$( IF x|
00004eb0  3d 30 20 7c 20 53 6d 61  6c 6c 4e 75 6d 62 65 72  |=0 | SmallNumber|
00004ec0  28 78 29 20 54 48 45 4e  20 47 4f 54 4f 20 65 72  |(x) THEN GOTO er|
00004ed0  72 0a 0a 20 20 20 53 57  49 54 43 48 4f 4e 20 68  |r..   SWITCHON h|
00004ee0  31 21 78 20 49 4e 54 4f  0a 20 20 20 24 28 20 44  |1!x INTO.   $( D|
00004ef0  45 46 41 55 4c 54 3a 0a  20 20 20 65 72 72 3a 20  |EFAULT:.   err: |
00004f00  54 72 61 6e 73 52 65 70  6f 72 74 28 31 31 33 2c  |TransReport(113,|
00004f10  20 63 75 72 72 65 6e 74  42 72 61 6e 63 68 29 0a  | currentBranch).|
00004f20  09 4c 6f 61 64 5a 65 72  6f 28 29 0a 09 45 4e 44  |.LoadZero()..END|
00004f30  43 41 53 45 0a 0a 20 20  20 20 20 20 43 41 53 45  |CASE..      CASE|
00004f40  20 73 2e 6e 61 6d 65 3a  0a 09 54 72 61 6e 73 4e  | s.name:..TransN|
00004f50  61 6d 65 28 78 2c 20 73  2e 6c 6c 70 2c 20 73 2e  |ame(x, s.llp, s.|
00004f60  6c 6c 67 2c 0a 09 09 20  20 20 20 20 28 72 65 73  |llg,...     (res|
00004f70  74 72 69 63 74 65 64 4c  61 6e 67 75 61 67 65 20  |trictedLanguage |
00004f80  2d 3e 20 30 2c 20 73 2e  6c 6c 6c 29 2c 20 30 2c  |-> 0, s.lll), 0,|
00004f90  20 30 29 0a 09 73 73 70  20 3a 3d 20 73 73 70 2b  | 0)..ssp := ssp+|
00004fa0  31 0a 09 45 4e 44 43 41  53 45 0a 0a 20 20 20 20  |1..ENDCASE..    |
00004fb0  20 20 43 41 53 45 20 73  2e 72 76 3a 0a 09 4c 6f  |  CASE s.rv:..Lo|
00004fc0  61 64 28 68 32 21 78 29  0a 09 45 4e 44 43 41 53  |ad(h2!x)..ENDCAS|
00004fd0  45 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |E..      CASE s.|
00004fe0  76 65 63 61 70 3a 0a 09  24 28 20 4c 45 54 20 61  |vecap:..$( LET a|
00004ff0  2c 20 62 20 3d 20 68 32  21 78 2c 20 68 33 21 78  |, b = h2!x, h3!x|
00005000  0a 0a 09 20 20 20 49 46  20 53 6d 61 6c 6c 4e 75  |...   IF SmallNu|
00005010  6d 62 65 72 28 61 29 20  7c 20 68 31 21 61 3d 73  |mber(a) | h1!a=s|
00005020  2e 6e 61 6d 65 20 54 48  45 4e 0a 09 20 20 20 20  |.name THEN..    |
00005030  20 61 2c 20 62 20 3a 3d  20 68 33 21 78 2c 20 68  | a, b := h3!x, h|
00005040  32 21 78 0a 0a 09 20 20  20 4c 6f 61 64 28 61 29  |2!x...   Load(a)|
00005050  0a 09 20 20 20 4c 6f 61  64 28 62 29 0a 09 20 20  |..   Load(b)..  |
00005060  20 4f 75 74 4f 70 28 73  2e 70 6c 75 73 29 0a 09  | OutOp(s.plus)..|
00005070  20 20 20 73 73 70 20 3a  3d 20 73 73 70 2d 31 0a  |   ssp := ssp-1.|
00005080  09 20 20 20 45 4e 44 43  41 53 45 20 24 29 0a 20  |.   ENDCASE $). |
00005090  20 20 24 29 0a 24 29 0a  0a 41 4e 44 20 4c 6f 61  |  $).$)..AND Loa|
000050a0  64 5a 65 72 6f 28 29 20  42 45 0a 24 28 20 4f 75  |dZero() BE.$( Ou|
000050b0  74 32 28 73 2e 6c 6e 2c  20 30 29 0a 20 20 20 73  |t2(s.ln, 0).   s|
000050c0  73 70 20 3a 3d 20 73 73  70 2b 31 0a 24 29 0a 0a  |sp := ssp+1.$)..|
000050d0  41 4e 44 20 4c 6f 61 64  4c 69 73 74 28 78 29 20  |AND LoadList(x) |
000050e0  42 45 20 49 46 20 78 7e  3d 30 20 54 48 45 4e 0a  |BE IF x~=0 THEN.|
000050f0  24 28 20 49 46 20 7e 53  6d 61 6c 6c 4e 75 6d 62  |$( IF ~SmallNumb|
00005100  65 72 28 78 29 20 54 48  45 4e 20 24 28 0a 20 20  |er(x) THEN $(.  |
00005110  20 20 20 20 4c 45 54 20  70 2c 20 6e 20 3d 20 30  |    LET p, n = 0|
00005120  2c 20 30 0a 0a 20 20 20  20 20 20 49 46 20 68 31  |, 0..      IF h1|
00005130  21 78 3d 73 2e 63 6f 6d  6d 61 20 54 48 45 4e 20  |!x=s.comma THEN |
00005140  70 2c 20 6e 20 3a 3d 20  78 2b 31 2c 20 32 0a 20  |p, n := x+1, 2. |
00005150  20 20 20 20 20 49 46 20  68 31 21 78 3d 73 2e 63  |     IF h1!x=s.c|
00005160  6f 6d 6d 61 6c 69 73 74  20 54 48 45 4e 20 70 2c  |ommalist THEN p,|
00005170  20 6e 20 3a 3d 20 78 2b  32 2c 20 68 32 21 78 0a  | n := x+2, h2!x.|
00005180  0a 20 20 20 20 20 20 49  46 20 70 7e 3d 30 20 54  |.      IF p~=0 T|
00005190  48 45 4e 20 24 28 0a 09  20 46 4f 52 20 68 20 3d  |HEN $(.. FOR h =|
000051a0  20 30 20 54 4f 20 6e 2d  31 20 44 4f 20 4c 6f 61  | 0 TO n-1 DO Loa|
000051b0  64 28 68 21 70 29 0a 09  20 52 45 54 55 52 4e 20  |d(h!p).. RETURN |
000051c0  24 29 20 24 29 0a 20 20  20 4c 6f 61 64 28 78 29  |$) $).   Load(x)|
000051d0  0a 24 29 0a 0a 41 4e 44  20 45 76 61 6c 43 6f 6e  |.$)..AND EvalCon|
000051e0  73 74 28 78 29 20 3d 20  56 41 4c 4f 46 0a 24 28  |st(x) = VALOF.$(|
000051f0  20 4c 45 54 20 61 2c 20  62 20 3d 20 30 2c 20 30  | LET a, b = 0, 0|
00005200  0a 0a 20 20 20 49 46 20  78 3d 30 20 54 48 45 4e  |..   IF x=0 THEN|
00005210  0a 20 20 20 24 28 20 54  72 61 6e 73 52 65 70 6f  |.   $( TransRepo|
00005220  72 74 28 31 31 37 2c 20  63 75 72 72 65 6e 74 42  |rt(117, currentB|
00005230  72 61 6e 63 68 29 0a 20  20 20 20 20 20 52 45 53  |ranch).      RES|
00005240  55 4c 54 49 53 20 30 20  24 29 0a 0a 20 20 20 49  |ULTIS 0 $)..   I|
00005250  46 20 53 6d 61 6c 6c 4e  75 6d 62 65 72 28 78 29  |F SmallNumber(x)|
00005260  20 54 48 45 4e 20 52 45  53 55 4c 54 49 53 20 78  | THEN RESULTIS x|
00005270  0a 0a 20 20 20 53 57 49  54 43 48 4f 4e 20 68 31  |..   SWITCHON h1|
00005280  21 78 20 49 4e 54 4f 0a  20 20 20 24 28 20 44 45  |!x INTO.   $( DE|
00005290  46 41 55 4c 54 3a 0a 09  54 72 61 6e 73 52 65 70  |FAULT:..TransRep|
000052a0  6f 72 74 28 31 31 38 2c  20 78 29 0a 09 52 45 53  |ort(118, x)..RES|
000052b0  55 4c 54 49 53 20 30 0a  0a 20 20 20 20 20 20 43  |ULTIS 0..      C|
000052c0  41 53 45 20 73 2e 6e 61  6d 65 3a 0a 09 24 28 20  |ASE s.name:..$( |
000052d0  4c 45 54 20 6e 20 3d 20  46 69 6e 64 4e 61 6d 65  |LET n = FindName|
000052e0  28 78 29 0a 09 20 20 20  4c 45 54 20 6b 20 3d 20  |(x)..   LET k = |
000052f0  6e 61 6d 65 2e 74 79 70  65 21 6e 0a 0a 09 20 20  |name.type!n...  |
00005300  20 49 46 20 6b 3d 30 20  54 48 45 4e 0a 09 20 20  | IF k=0 THEN..  |
00005310  20 24 28 20 54 72 61 6e  73 52 65 70 6f 72 74 28  | $( TransReport(|
00005320  31 31 35 2c 20 78 29 0a  09 20 20 20 20 20 20 75  |115, x)..      u|
00005330  6e 64 65 66 43 6f 75 6e  74 20 3a 3d 20 75 6e 64  |ndefCount := und|
00005340  65 66 43 6f 75 6e 74 2b  31 0a 09 20 20 20 20 20  |efCount+1..     |
00005350  20 52 45 53 55 4c 54 49  53 20 75 6e 64 65 66 43  | RESULTIS undefC|
00005360  6f 75 6e 74 20 24 29 0a  0a 09 20 20 20 49 46 20  |ount $)...   IF |
00005370  6b 3d 73 2e 6e 75 6d 62  65 72 20 54 48 45 4e 20  |k=s.number THEN |
00005380  52 45 53 55 4c 54 49 53  20 6e 61 6d 65 2e 76 61  |RESULTIS name.va|
00005390  6c 75 65 21 6e 0a 0a 09  20 20 20 54 72 61 6e 73  |lue!n...   Trans|
000053a0  52 65 70 6f 72 74 28 31  31 39 2c 20 78 29 0a 09  |Report(119, x)..|
000053b0  20 20 20 52 45 53 55 4c  54 49 53 20 30 0a 09 24  |   RESULTIS 0..$|
000053c0  29 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |)..      CASE s.|
000053d0  6e 75 6d 62 65 72 3a 20  52 45 53 55 4c 54 49 53  |number: RESULTIS|
000053e0  20 68 32 21 78 0a 0a 20  20 20 20 20 20 43 41 53  | h2!x..      CAS|
000053f0  45 20 73 2e 74 72 75 65  3a 20 20 20 52 45 53 55  |E s.true:   RESU|
00005400  4c 54 49 53 20 54 52 55  45 0a 0a 20 20 20 20 20  |LTIS TRUE..     |
00005410  20 43 41 53 45 20 73 2e  71 75 65 72 79 3a 0a 20  | CASE s.query:. |
00005420  20 20 20 20 20 43 41 53  45 20 73 2e 66 61 6c 73  |     CASE s.fals|
00005430  65 3a 20 20 52 45 53 55  4c 54 49 53 20 46 41 4c  |e:  RESULTIS FAL|
00005440  53 45 0a 0a 20 20 20 20  20 20 43 41 53 45 20 73  |SE..      CASE s|
00005450  2e 63 6f 6e 64 3a 0a 09  49 46 20 65 78 74 65 6e  |.cond:..IF exten|
00005460  73 69 6f 6e 2e 6c 65 76  65 6c 3e 3d 35 20 54 48  |sion.level>=5 TH|
00005470  45 4e 0a 09 24 28 20 4c  45 54 20 62 20 3d 20 45  |EN..$( LET b = E|
00005480  76 61 6c 43 6f 6e 73 74  28 68 32 21 78 29 0a 09  |valConst(h2!x)..|
00005490  20 20 20 4c 45 54 20 74  20 3d 20 45 76 61 6c 43  |   LET t = EvalC|
000054a0  6f 6e 73 74 28 68 33 21  78 29 0a 09 20 20 20 4c  |onst(h3!x)..   L|
000054b0  45 54 20 66 20 3d 20 45  76 61 6c 43 6f 6e 73 74  |ET f = EvalConst|
000054c0  28 68 34 21 78 29 0a 0a  09 20 20 20 52 45 53 55  |(h4!x)...   RESU|
000054d0  4c 54 49 53 20 62 20 2d  3e 20 74 2c 20 66 20 24  |LTIS b -> t, f $|
000054e0  29 0a 09 54 72 61 6e 73  52 65 70 6f 72 74 28 31  |)..TransReport(1|
000054f0  31 38 2c 20 78 29 0a 09  52 45 53 55 4c 54 49 53  |18, x)..RESULTIS|
00005500  20 30 0a 0a 20 20 20 20  20 20 43 41 53 45 20 73  | 0..      CASE s|
00005510  2e 73 6c 63 74 3a 0a 09  24 28 20 4c 45 54 20 73  |.slct:..$( LET s|
00005520  69 7a 65 20 3d 20 45 76  61 6c 43 6f 6e 73 74 28  |ize = EvalConst(|
00005530  68 32 21 78 29 0a 09 20  20 20 4c 45 54 20 73 68  |h2!x)..   LET sh|
00005540  69 66 74 20 3d 20 45 76  61 6c 43 6f 6e 73 74 28  |ift = EvalConst(|
00005550  68 33 21 78 29 0a 09 20  20 20 4c 45 54 20 6f 66  |h3!x)..   LET of|
00005560  66 73 65 74 20 3d 20 45  76 61 6c 43 6f 6e 73 74  |fset = EvalConst|
00005570  28 68 34 21 78 29 0a 0a  09 20 20 20 54 45 53 54  |(h4!x)...   TEST|
00005580  20 30 3c 3d 73 69 7a 65  3c 3d 28 62 69 74 73 77  | 0<=size<=(bitsw|
00005590  69 64 74 68 2d 73 68 69  66 74 29 20 26 0a 09 09  |idth-shift) &...|
000055a0  30 3c 3d 73 68 69 66 74  3c 62 69 74 73 77 69 64  |0<=shift<bitswid|
000055b0  74 68 20 26 0a 09 09 30  3c 3d 6f 66 66 73 65 74  |th &...0<=offset|
000055c0  3c 3d 73 6c 63 74 2e 6d  61 78 2e 6f 66 66 73 65  |<=slct.max.offse|
000055d0  74 20 54 48 45 4e 0a 09  20 20 20 20 20 20 52 45  |t THEN..      RE|
000055e0  53 55 4c 54 49 53 20 5b  73 69 7a 65 3c 3c 73 6c  |SULTIS [size<<sl|
000055f0  63 74 2e 73 69 7a 65 2e  73 68 69 66 74 5d 09 2b  |ct.size.shift].+|
00005600  0a 09 09 20 20 20 20 20  20 20 5b 73 68 69 66 74  |...       [shift|
00005610  3c 3c 73 6c 63 74 2e 73  68 69 66 74 2e 73 68 69  |<<slct.shift.shi|
00005620  66 74 5d 20 2b 0a 09 09  20 20 20 20 20 20 20 6f  |ft] +...       o|
00005630  66 66 73 65 74 0a 0a 09  20 20 20 45 4c 53 45 20  |ffset...   ELSE |
00005640  24 28 0a 09 20 20 20 20  20 20 54 72 61 6e 73 52  |$(..      TransR|
00005650  65 70 6f 72 74 28 31 32  30 2c 20 78 29 0a 09 20  |eport(120, x).. |
00005660  20 20 20 20 20 52 45 53  55 4c 54 49 53 20 30 20  |     RESULTIS 0 |
00005670  24 29 0a 09 24 29 0a 0a  20 20 20 20 20 20 43 41  |$)..$)..      CA|
00005680  53 45 20 73 2e 6d 75 6c  74 3a 20 43 41 53 45 20  |SE s.mult: CASE |
00005690  73 2e 64 69 76 3a 20 43  41 53 45 20 73 2e 72 65  |s.div: CASE s.re|
000056a0  6d 3a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |m:.      CASE s.|
000056b0  70 6c 75 73 3a 20 43 41  53 45 20 73 2e 6d 69 6e  |plus: CASE s.min|
000056c0  75 73 3a 0a 20 20 20 20  20 20 43 41 53 45 20 73  |us:.      CASE s|
000056d0  2e 6c 73 68 69 66 74 3a  20 43 41 53 45 20 73 2e  |.lshift: CASE s.|
000056e0  72 73 68 69 66 74 3a 0a  20 20 20 20 20 20 43 41  |rshift:.      CA|
000056f0  53 45 20 73 2e 6c 6f 67  6f 72 3a 20 43 41 53 45  |SE s.logor: CASE|
00005700  20 73 2e 6c 6f 67 61 6e  64 3a 20 43 41 53 45 20  | s.logand: CASE |
00005710  73 2e 65 71 76 3a 20 43  41 53 45 20 73 2e 6e 65  |s.eqv: CASE s.ne|
00005720  71 76 3a 0a 09 62 20 3a  3d 20 45 76 61 6c 43 6f  |qv:..b := EvalCo|
00005730  6e 73 74 28 68 33 21 78  29 0a 0a 20 20 20 20 20  |nst(h3!x)..     |
00005740  20 43 41 53 45 20 73 2e  61 62 73 3a 20 43 41 53  | CASE s.abs: CAS|
00005750  45 20 73 2e 6e 65 67 3a  20 43 41 53 45 20 73 2e  |E s.neg: CASE s.|
00005760  6e 6f 74 3a 0a 09 61 20  3a 3d 20 45 76 61 6c 43  |not:..a := EvalC|
00005770  6f 6e 73 74 28 68 32 21  78 29 0a 20 20 20 24 29  |onst(h2!x).   $)|
00005780  0a 0a 20 20 20 53 57 49  54 43 48 4f 4e 20 68 31  |..   SWITCHON h1|
00005790  21 78 20 49 4e 54 4f 0a  20 20 20 24 28 20 43 41  |!x INTO.   $( CA|
000057a0  53 45 20 73 2e 61 62 73  3a 20 20 20 20 52 45 53  |SE s.abs:    RES|
000057b0  55 4c 54 49 53 20 41 42  53 20 61 0a 20 20 20 20  |ULTIS ABS a.    |
000057c0  20 20 43 41 53 45 20 73  2e 6e 65 67 3a 20 20 20  |  CASE s.neg:   |
000057d0  20 52 45 53 55 4c 54 49  53 20 2d 61 0a 20 20 20  | RESULTIS -a.   |
000057e0  20 20 20 43 41 53 45 20  73 2e 6e 6f 74 3a 20 20  |   CASE s.not:  |
000057f0  20 20 52 45 53 55 4c 54  49 53 20 7e 61 0a 0a 20  |  RESULTIS ~a.. |
00005800  20 20 20 20 20 43 41 53  45 20 73 2e 6d 75 6c 74  |     CASE s.mult|
00005810  3a 20 20 20 52 45 53 55  4c 54 49 53 20 61 2a 62  |:   RESULTIS a*b|
00005820  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 64 69  |.      CASE s.di|
00005830  76 3a 20 20 20 20 52 45  53 55 4c 54 49 53 20 61  |v:    RESULTIS a|
00005840  2f 62 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |/b.      CASE s.|
00005850  72 65 6d 3a 20 20 20 20  52 45 53 55 4c 54 49 53  |rem:    RESULTIS|
00005860  20 61 20 52 45 4d 20 62  0a 20 20 20 20 20 20 43  | a REM b.      C|
00005870  41 53 45 20 73 2e 70 6c  75 73 3a 20 20 20 52 45  |ASE s.plus:   RE|
00005880  53 55 4c 54 49 53 20 61  2b 62 0a 20 20 20 20 20  |SULTIS a+b.     |
00005890  20 43 41 53 45 20 73 2e  6d 69 6e 75 73 3a 20 20  | CASE s.minus:  |
000058a0  52 45 53 55 4c 54 49 53  20 61 2d 62 0a 20 20 20  |RESULTIS a-b.   |
000058b0  20 20 20 43 41 53 45 20  73 2e 6c 73 68 69 66 74  |   CASE s.lshift|
000058c0  3a 20 52 45 53 55 4c 54  49 53 20 61 3c 3c 62 0a  |: RESULTIS a<<b.|
000058d0  20 20 20 20 20 20 43 41  53 45 20 73 2e 72 73 68  |      CASE s.rsh|
000058e0  69 66 74 3a 20 52 45 53  55 4c 54 49 53 20 61 3e  |ift: RESULTIS a>|
000058f0  3e 62 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |>b.      CASE s.|
00005900  6c 6f 67 61 6e 64 3a 20  52 45 53 55 4c 54 49 53  |logand: RESULTIS|
00005910  20 61 26 62 0a 20 20 20  20 20 20 43 41 53 45 20  | a&b.      CASE |
00005920  73 2e 6c 6f 67 6f 72 3a  20 20 52 45 53 55 4c 54  |s.logor:  RESULT|
00005930  49 53 20 61 7c 62 0a 20  20 20 20 20 20 43 41 53  |IS a|b.      CAS|
00005940  45 20 73 2e 65 71 76 3a  20 20 20 20 52 45 53 55  |E s.eqv:    RESU|
00005950  4c 54 49 53 20 61 20 45  51 56 20 62 0a 20 20 20  |LTIS a EQV b.   |
00005960  20 20 20 43 41 53 45 20  73 2e 6e 65 71 76 3a 20  |   CASE s.neqv: |
00005970  20 20 52 45 53 55 4c 54  49 53 20 61 20 4e 45 51  |  RESULTIS a NEQ|
00005980  56 20 62 0a 20 20 20 24  29 0a 24 29 0a 0a 0a 41  |V b.   $).$)...A|
00005990  4e 44 20 41 73 73 69 67  6e 28 78 2c 20 79 2c 20  |ND Assign(x, y, |
000059a0  6f 70 29 20 42 45 0a 24  28 20 49 46 20 78 3d 30  |op) BE.$( IF x=0|
000059b0  20 7c 20 53 6d 61 6c 6c  4e 75 6d 62 65 72 28 78  | | SmallNumber(x|
000059c0  29 20 7c 20 79 3d 30 20  54 48 45 4e 0a 20 20 20  |) | y=0 THEN.   |
000059d0  24 28 20 54 72 61 6e 73  52 65 70 6f 72 74 28 31  |$( TransReport(1|
000059e0  31 30 2c 20 63 75 72 72  65 6e 74 42 72 61 6e 63  |10, currentBranc|
000059f0  68 29 0a 20 20 20 20 20  20 52 45 54 55 52 4e 20  |h).      RETURN |
00005a00  24 29 0a 0a 20 20 20 49  46 20 7e 53 6d 61 6c 6c  |$)..   IF ~Small|
00005a10  4e 75 6d 62 65 72 28 79  29 20 26 0a 20 20 20 20  |Number(y) &.    |
00005a20  20 20 5b 68 31 21 79 3d  73 2e 63 6f 6d 6d 61 20  |  [h1!y=s.comma |
00005a30  7c 20 68 31 21 79 3d 73  2e 63 6f 6d 6d 61 6c 69  || h1!y=s.commali|
00005a40  73 74 5d 20 26 0a 20 20  20 20 20 20 68 31 21 79  |st] &.      h1!y|
00005a50  7e 3d 68 31 21 78 20 54  48 45 4e 0a 20 20 20 24  |~=h1!x THEN.   $|
00005a60  28 20 54 72 61 6e 73 52  65 70 6f 72 74 28 31 31  |( TransReport(11|
00005a70  32 2c 20 63 75 72 72 65  6e 74 42 72 61 6e 63 68  |2, currentBranch|
00005a80  29 0a 20 20 20 20 20 20  52 45 54 55 52 4e 20 24  |).      RETURN $|
00005a90  29 0a 0a 20 20 20 53 57  49 54 43 48 4f 4e 20 68  |)..   SWITCHON h|
00005aa0  31 21 78 20 49 4e 54 4f  0a 20 20 20 24 28 20 43  |1!x INTO.   $( C|
00005ab0  41 53 45 20 73 2e 63 6f  6d 6d 61 3a 0a 20 20 20  |ASE s.comma:.   |
00005ac0  20 20 20 43 41 53 45 20  73 2e 63 6f 6d 6d 61 6c  |   CASE s.commal|
00005ad0  69 73 74 3a 0a 09 49 46  20 53 6d 61 6c 6c 4e 75  |ist:..IF SmallNu|
00005ae0  6d 62 65 72 28 79 29 20  7c 20 68 31 21 78 7e 3d  |mber(y) | h1!x~=|
00005af0  68 31 21 79 20 54 48 45  4e 0a 09 24 28 20 54 72  |h1!y THEN..$( Tr|
00005b00  61 6e 73 52 65 70 6f 72  74 28 31 31 32 2c 20 63  |ansReport(112, c|
00005b10  75 72 72 65 6e 74 42 72  61 6e 63 68 29 0a 09 20  |urrentBranch).. |
00005b20  20 20 45 4e 44 43 41 53  45 20 24 29 0a 0a 09 24  |  ENDCASE $)...$|
00005b30  28 20 4c 45 54 20 6c 2c  20 6e 20 3d 20 68 32 2c  |( LET l, n = h2,|
00005b40  20 32 0a 0a 09 20 20 20  49 46 20 68 31 21 78 3d  | 2...   IF h1!x=|
00005b50  73 2e 63 6f 6d 6d 61 6c  69 73 74 20 54 48 45 4e  |s.commalist THEN|
00005b60  0a 09 20 20 20 24 28 20  6c 2c 20 6e 20 3a 3d 20  |..   $( l, n := |
00005b70  68 33 2c 20 68 32 21 78  0a 0a 09 20 20 20 20 20  |h3, h2!x...     |
00005b80  20 49 46 20 68 32 21 79  7e 3d 6e 20 54 48 45 4e  | IF h2!y~=n THEN|
00005b90  0a 09 20 20 20 20 20 20  24 28 20 54 72 61 6e 73  |..      $( Trans|
00005ba0  52 65 70 6f 72 74 28 31  31 32 2c 20 63 75 72 72  |Report(112, curr|
00005bb0  65 6e 74 42 72 61 6e 63  68 29 0a 09 09 20 45 4e  |entBranch)... EN|
00005bc0  44 43 41 53 45 20 24 29  20 24 29 0a 0a 09 20 20  |DCASE $) $)...  |
00005bd0  20 46 4f 52 20 68 20 3d  20 6c 20 54 4f 20 6c 2b  | FOR h = l TO l+|
00005be0  6e 2d 31 20 44 4f 0a 09  20 20 20 20 20 41 73 73  |n-1 DO..     Ass|
00005bf0  69 67 6e 28 68 21 78 2c  20 68 21 79 2c 20 6f 70  |ign(h!x, h!y, op|
00005c00  29 0a 0a 09 20 20 20 45  4e 44 43 41 53 45 0a 09  |)...   ENDCASE..|
00005c10  24 29 0a 0a 20 20 20 20  20 20 43 41 53 45 20 73  |$)..      CASE s|
00005c20  2e 6e 61 6d 65 3a 0a 09  4c 6f 61 64 28 79 29 0a  |.name:..Load(y).|
00005c30  09 54 45 53 54 20 6f 70  3d 30 20 54 48 45 4e 0a  |.TEST op=0 THEN.|
00005c40  09 20 20 20 54 72 61 6e  73 4e 61 6d 65 28 78 2c  |.   TransName(x,|
00005c50  20 73 2e 73 70 2c 20 73  2e 73 67 2c 0a 09 09 09  | s.sp, s.sg,....|
00005c60  28 72 65 73 74 72 69 63  74 65 64 4c 61 6e 67 75  |(restrictedLangu|
00005c70  61 67 65 20 2d 3e 20 30  2c 20 73 2e 73 6c 29 2c  |age -> 0, s.sl),|
00005c80  20 30 2c 20 30 29 0a 09  45 4c 53 45 20 24 28 0a  | 0, 0)..ELSE $(.|
00005c90  09 20 20 20 4c 6f 61 64  4c 56 28 78 29 3b 0a 09  |.   LoadLV(x);..|
00005ca0  20 20 20 4f 75 74 32 28  73 2e 6d 6f 64 2c 20 6f  |   Out2(s.mod, o|
00005cb0  70 29 3b 0a 09 20 20 20  73 73 70 20 3a 3d 20 73  |p);..   ssp := s|
00005cc0  73 70 2d 31 20 24 29 3b  0a 09 73 73 70 20 3a 3d  |sp-1 $);..ssp :=|
00005cd0  20 73 73 70 2d 31 3b 0a  09 45 4e 44 43 41 53 45  | ssp-1;..ENDCASE|
00005ce0  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 62  |..      CASE s.b|
00005cf0  79 74 65 61 70 3a 0a 09  4c 6f 61 64 28 79 29 0a  |yteap:..Load(y).|
00005d00  09 4c 6f 61 64 28 68 32  21 78 29 0a 09 4c 6f 61  |.Load(h2!x)..Loa|
00005d10  64 28 68 33 21 78 29 0a  0a 09 4f 75 74 4f 70 28  |d(h3!x)...OutOp(|
00005d20  73 2e 70 75 74 62 79 74  65 29 0a 09 73 73 70 20  |s.putbyte)..ssp |
00005d30  3a 3d 20 73 73 70 2d 33  0a 0a 09 20 20 20 20 2f  |:= ssp-3...    /|
00005d40  2f 20 61 20 25 20 62 20  2b 3a 3d 20 32 20 69 73  |/ a % b +:= 2 is|
00005d50  20 6e 6f 74 20 61 6c 6c  6f 77 65 64 0a 0a 09 49  | not allowed...I|
00005d60  46 20 6f 70 7e 3d 30 20  54 48 45 4e 0a 09 20 20  |F op~=0 THEN..  |
00005d70  54 72 61 6e 73 52 65 70  6f 72 74 28 31 35 30 2c  |TransReport(150,|
00005d80  20 63 75 72 72 65 6e 74  42 72 61 6e 63 68 29 0a  | currentBranch).|
00005d90  0a 09 45 4e 44 43 41 53  45 0a 0a 20 20 20 20 20  |..ENDCASE..     |
00005da0  20 43 41 53 45 20 73 2e  6f 66 3a 0a 20 20 20 20  | CASE s.of:.    |
00005db0  20 20 24 28 20 4c 45 54  20 73 65 6c 65 63 74 6f  |  $( LET selecto|
00005dc0  72 20 3d 20 45 76 61 6c  43 6f 6e 73 74 28 68 32  |r = EvalConst(h2|
00005dd0  21 78 29 0a 09 20 4c 45  54 20 6f 66 66 73 65 74  |!x).. LET offset|
00005de0  20 3d 20 73 65 6c 65 63  74 6f 72 20 26 20 73 6c  | = selector & sl|
00005df0  63 74 2e 6d 61 78 2e 6f  66 66 73 65 74 0a 0a 09  |ct.max.offset...|
00005e00  20 4c 6f 61 64 28 79 29  0a 09 20 4c 6f 61 64 28  | Load(y).. Load(|
00005e10  68 33 21 78 29 0a 0a 09  20 54 45 53 54 20 73 65  |h3!x)... TEST se|
00005e20  6c 65 63 74 6f 72 7e 3d  6f 66 66 73 65 74 20 54  |lector~=offset T|
00005e30  48 45 4e 20 24 28 0a 09  20 20 20 20 4c 45 54 20  |HEN $(..    LET |
00005e40  73 69 7a 65 20 3d 20 73  65 6c 65 63 74 6f 72 3e  |size = selector>|
00005e50  3e 73 6c 63 74 2e 73 69  7a 65 2e 73 68 69 66 74  |>slct.size.shift|
00005e60  3b 0a 09 20 20 20 20 4c  45 54 20 73 68 69 66 74  |;..    LET shift|
00005e70  20 3d 20 28 73 65 6c 65  63 74 6f 72 3e 3e 73 6c  | = (selector>>sl|
00005e80  63 74 2e 73 68 69 66 74  2e 73 68 69 66 74 29 20  |ct.shift.shift) |
00005e90  26 20 73 6c 63 74 2e 6d  61 73 6b 3b 0a 09 20 20  |& slct.mask;..  |
00005ea0  20 20 49 46 20 73 69 7a  65 3d 30 20 54 48 45 4e  |  IF size=0 THEN|
00005eb0  20 73 69 7a 65 20 3a 3d  20 62 69 74 73 77 69 64  | size := bitswid|
00005ec0  74 68 2d 73 68 69 66 74  3b 0a 09 20 20 20 20 54  |th-shift;..    T|
00005ed0  45 53 54 20 6f 70 3d 30  20 54 48 45 4e 20 24 28  |EST op=0 THEN $(|
00005ee0  0a 09 20 20 20 20 20 20  20 4f 75 74 4f 70 28 73  |..       OutOp(s|
00005ef0  2e 73 6c 63 74 73 74 29  3b 0a 09 20 20 20 20 20  |.slctst);..     |
00005f00  20 20 4f 75 74 31 28 73  69 7a 65 29 3b 20 4f 75  |  Out1(size); Ou|
00005f10  74 31 28 73 68 69 66 74  29 3b 20 4f 75 74 31 28  |t1(shift); Out1(|
00005f20  6f 66 66 73 65 74 29 20  24 29 0a 09 20 20 20 20  |offset) $)..    |
00005f30  45 4c 53 45 20 24 28 0a  09 20 20 20 20 20 20 20  |ELSE $(..       |
00005f40  4f 75 74 4f 70 28 73 2e  73 6c 63 74 61 70 29 3b  |OutOp(s.slctap);|
00005f50  0a 09 20 20 20 20 20 20  20 4f 75 74 31 28 73 69  |..       Out1(si|
00005f60  7a 65 29 3b 20 4f 75 74  31 28 73 68 69 66 74 29  |ze); Out1(shift)|
00005f70  3b 20 4f 75 74 31 28 6f  66 66 73 65 74 29 3b 0a  |; Out1(offset);.|
00005f80  09 20 20 20 20 20 20 20  4f 75 74 32 28 73 2e 6d  |.       Out2(s.m|
00005f90  6f 64 73 6c 63 74 2c 20  6f 70 29 20 24 29 20 24  |odslct, op) $) $|
00005fa0  29 0a 0a 09 20 45 4c 53  45 20 24 28 0a 09 20 20  |)... ELSE $(..  |
00005fb0  20 20 4f 75 74 32 28 73  2e 6c 6e 2c 20 6f 66 66  |  Out2(s.ln, off|
00005fc0  73 65 74 29 0a 09 20 20  20 20 4f 75 74 4f 70 28  |set)..    OutOp(|
00005fd0  73 2e 70 6c 75 73 29 0a  09 20 20 20 20 54 45 53  |s.plus)..    TES|
00005fe0  54 20 6f 70 3d 30 20 54  48 45 4e 0a 09 20 20 20  |T op=0 THEN..   |
00005ff0  20 20 20 20 4f 75 74 4f  70 28 73 2e 73 74 69 6e  |    OutOp(s.stin|
00006000  64 29 0a 09 20 20 20 20  45 4c 53 45 0a 09 20 20  |d)..    ELSE..  |
00006010  20 20 20 20 20 4f 75 74  32 28 73 2e 6d 6f 64 2c  |     Out2(s.mod,|
00006020  20 6f 70 29 20 24 29 0a  09 20 73 73 70 20 3a 3d  | op) $).. ssp :=|
00006030  20 73 73 70 2d 32 0a 09  20 45 4e 44 43 41 53 45  | ssp-2.. ENDCASE|
00006040  0a 20 20 20 20 20 20 24  29 0a 0a 20 20 20 20 20  |.      $)..     |
00006050  20 43 41 53 45 20 73 2e  72 76 3a 20 43 41 53 45  | CASE s.rv: CASE|
00006060  20 73 2e 76 65 63 61 70  3a 0a 09 20 4c 6f 61 64  | s.vecap:.. Load|
00006070  28 79 29 0a 09 20 4c 6f  61 64 4c 56 28 78 29 0a  |(y).. LoadLV(x).|
00006080  0a 09 20 54 45 53 54 20  6f 70 3d 30 20 54 48 45  |.. TEST op=0 THE|
00006090  4e 0a 09 20 20 20 20 4f  75 74 4f 70 28 73 2e 73  |N..    OutOp(s.s|
000060a0  74 69 6e 64 29 0a 09 20  45 4c 53 45 0a 09 20 20  |tind).. ELSE..  |
000060b0  20 20 4f 75 74 32 28 73  2e 6d 6f 64 2c 20 6f 70  |  Out2(s.mod, op|
000060c0  29 3b 0a 09 20 73 73 70  20 3a 3d 20 73 73 70 2d  |);.. ssp := ssp-|
000060d0  32 0a 09 20 45 4e 44 43  41 53 45 0a 0a 20 20 20  |2.. ENDCASE..   |
000060e0  20 20 20 43 41 53 45 20  73 2e 6e 69 6c 3a 0a 09  |   CASE s.nil:..|
000060f0  4c 6f 61 64 28 79 29 3b  0a 09 4f 75 74 4f 70 28  |Load(y);..OutOp(|
00006100  73 2e 73 74 6e 69 6c 29  3b 0a 09 73 73 70 20 3a  |s.stnil);..ssp :|
00006110  3d 20 73 73 70 2d 31 3b  0a 09 45 4e 44 43 41 53  |= ssp-1;..ENDCAS|
00006120  45 0a 0a 20 20 20 20 20  20 43 41 53 45 20 73 2e  |E..      CASE s.|
00006130  63 61 72 3a 20 43 41 53  45 20 73 2e 63 64 72 3a  |car: CASE s.cdr:|
00006140  20 43 41 53 45 20 73 2e  76 63 61 72 3a 20 43 41  | CASE s.vcar: CA|
00006150  53 45 20 73 2e 76 63 64  72 3a 0a 09 49 46 20 6f  |SE s.vcdr:..IF o|
00006160  70 7e 3d 30 20 54 48 45  4e 20 54 72 61 6e 73 52  |p~=0 THEN TransR|
00006170  65 70 6f 72 74 28 31 35  30 2c 20 63 75 72 72 65  |eport(150, curre|
00006180  6e 74 42 72 61 6e 63 68  29 3b 0a 09 4c 6f 61 64  |ntBranch);..Load|
00006190  28 79 29 3b 0a 09 4c 6f  61 64 28 68 32 21 78 29  |(y);..Load(h2!x)|
000061a0  3b 0a 09 4f 75 74 4f 70  28 68 31 21 78 2b 73 2e  |;..OutOp(h1!x+s.|
000061b0  73 74 63 61 72 2d 73 2e  63 61 72 29 3b 0a 09 73  |stcar-s.car);..s|
000061c0  73 70 20 3a 3d 20 73 73  70 2d 32 3b 0a 09 45 4e  |sp := ssp-2;..EN|
000061d0  44 43 41 53 45 0a 0a 20  20 20 20 20 20 44 45 46  |DCASE..      DEF|
000061e0  41 55 4c 54 3a 0a 09 54  72 61 6e 73 52 65 70 6f  |AULT:..TransRepo|
000061f0  72 74 28 31 30 39 2c 20  63 75 72 72 65 6e 74 42  |rt(109, currentB|
00006200  72 61 6e 63 68 29 0a 20  20 20 24 29 0a 24 29 0a  |ranch).   $).$).|
00006210  0a 41 4e 44 20 54 72 61  6e 73 4e 61 6d 65 28 78  |.AND TransName(x|
00006220  2c 20 70 2c 20 67 2c 20  6c 2c 20 6e 2c 20 73 29  |, p, g, l, n, s)|
00006230  20 42 45 0a 24 28 20 4c  45 54 20 74 20 3d 20 46  | BE.$( LET t = F|
00006240  69 6e 64 43 65 6c 6c 28  78 29 0a 20 20 20 4c 45  |indCell(x).   LE|
00006250  54 20 6e 61 6d 20 3d 20  4e 61 6d 65 28 74 29 0a  |T nam = Name(t).|
00006260  20 20 20 4c 45 54 20 6b  2c 20 61 20 3d 20 6e 61  |   LET k, a = na|
00006270  6d 65 2e 74 79 70 65 21  6e 61 6d 2c 20 6e 61 6d  |me.type!nam, nam|
00006280  65 2e 76 61 6c 75 65 21  6e 61 6d 0a 20 20 20 4c  |e.value!nam.   L|
00006290  45 54 20 6f 70 20 3d 20  67 0a 0a 20 20 20 53 57  |ET op = g..   SW|
000062a0  49 54 43 48 4f 4e 20 6b  20 49 4e 54 4f 0a 20 20  |ITCHON k INTO.  |
000062b0  20 24 28 20 44 45 46 41  55 4c 54 3a 0a 09 54 72  | $( DEFAULT:..Tr|
000062c0  61 6e 73 52 65 70 6f 72  74 28 31 31 35 2c 20 78  |ansReport(115, x|
000062d0  29 0a 09 45 4e 44 43 41  53 45 0a 0a 20 20 20 20  |)..ENDCASE..    |
000062e0  20 20 43 41 53 45 20 73  2e 6c 6f 63 61 6c 3a 0a  |  CASE s.local:.|
000062f0  09 49 46 20 74 3c 6e 61  6d 65 70 62 61 73 65 20  |.IF t<namepbase |
00006300  54 48 45 4e 20 54 72 61  6e 73 52 65 70 6f 72 74  |THEN TransReport|
00006310  28 31 31 36 2c 20 78 29  0a 09 6f 70 20 3a 3d 20  |(116, x)..op := |
00006320  70 0a 09 45 4e 44 43 41  53 45 0a 0a 20 20 20 20  |p..ENDCASE..    |
00006330  20 20 43 41 53 45 20 73  2e 67 6c 6f 62 61 6c 3a  |  CASE s.global:|
00006340  0a 09 45 4e 44 43 41 53  45 0a 0a 20 20 20 20 20  |..ENDCASE..     |
00006350  20 43 41 53 45 20 73 2e  6c 61 62 65 6c 3a 0a 09  | CASE s.label:..|
00006360  54 45 53 54 20 6c 3d 30  0a 09 20 20 20 54 48 45  |TEST l=0..   THE|
00006370  4e 20 54 72 61 6e 73 52  65 70 6f 72 74 28 31 31  |N TransReport(11|
00006380  33 2c 20 78 29 0a 09 20  20 20 45 4c 53 45 20 6f  |3, x)..   ELSE o|
00006390  70 20 3a 3d 20 6c 0a 09  45 4e 44 43 41 53 45 0a  |p := l..ENDCASE.|
000063a0  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 6e 75  |.      CASE s.nu|
000063b0  6d 62 65 72 3a 0a 09 54  45 53 54 20 6e 3d 30 0a  |mber:..TEST n=0.|
000063c0  09 20 20 20 54 48 45 4e  20 54 72 61 6e 73 52 65  |.   THEN TransRe|
000063d0  70 6f 72 74 28 31 31 33  2c 20 78 29 0a 09 20 20  |port(113, x)..  |
000063e0  20 45 4c 53 45 20 6f 70  20 3a 3d 20 6e 0a 09 45  | ELSE op := n..E|
000063f0  4e 44 43 41 53 45 0a 0a  20 20 20 20 20 20 43 41  |NDCASE..      CA|
00006400  53 45 20 73 2e 73 74 72  69 6e 67 3a 0a 20 20 20  |SE s.string:.   |
00006410  20 20 20 43 41 53 45 20  73 2e 74 61 62 6c 65 3a  |   CASE s.table:|
00006420  0a 09 54 45 53 54 20 73  3d 30 20 54 48 45 4e 0a  |..TEST s=0 THEN.|
00006430  09 20 20 20 54 72 61 6e  73 52 65 70 6f 72 74 28  |.   TransReport(|
00006440  31 31 33 2c 20 78 29 0a  09 45 4c 53 45 20 24 28  |113, x)..ELSE $(|
00006450  0a 09 20 20 20 4c 45 54  20 6c 20 3d 21 61 0a 09  |..   LET l =!a..|
00006460  20 20 20 49 46 20 6c 3d  30 20 54 48 45 4e 20 24  |   IF l=0 THEN $|
00006470  28 0a 09 20 20 20 20 20  20 54 45 53 54 20 6b 3d  |(..      TEST k=|
00006480  73 2e 73 74 72 69 6e 67  0a 09 09 20 54 48 45 4e  |s.string... THEN|
00006490  20 6c 20 3a 3d 20 64 65  66 69 6e 65 2e 73 74 72  | l := define.str|
000064a0  69 6e 67 28 61 2b 31 29  0a 09 09 20 45 4c 53 45  |ing(a+1)... ELSE|
000064b0  20 6c 20 3a 3d 20 64 65  66 69 6e 65 2e 74 61 62  | l := define.tab|
000064c0  6c 65 28 61 29 0a 0a 09  20 20 20 20 20 20 21 61  |le(a)...      !a|
000064d0  20 3a 3d 20 6c 20 24 29  0a 09 20 20 20 61 20 3a  | := l $)..   a :|
000064e0  3d 20 6c 0a 09 20 20 20  6f 70 20 3a 3d 20 73 20  |= l..   op := s |
000064f0  24 29 0a 09 45 4e 44 43  41 53 45 0a 0a 20 20 20  |$)..ENDCASE..   |
00006500  20 20 20 43 41 53 45 20  73 2e 65 78 74 65 72 6e  |   CASE s.extern|
00006510  61 6c 3a 0a 09 54 45 53  54 20 6c 3d 30 20 54 48  |al:..TEST l=0 TH|
00006520  45 4e 0a 09 20 20 20 54  72 61 6e 73 52 65 70 6f  |EN..   TransRepo|
00006530  72 74 28 31 31 33 2c 20  78 29 0a 09 45 4c 53 45  |rt(113, x)..ELSE|
00006540  20 24 28 0a 09 20 20 20  4c 45 54 20 65 20 3d 20  | $(..   LET e = |
00006550  61 3b 0a 09 20 20 20 61  20 3a 3d 20 68 33 21 65  |a;..   a := h3!e|
00006560  3b 0a 09 20 20 20 49 46  20 61 3d 30 20 54 48 45  |;..   IF a=0 THE|
00006570  4e 20 24 28 0a 09 20 20  20 20 20 20 61 20 3a 3d  |N $(..      a :=|
00006580  20 4e 65 78 74 50 61 72  61 6d 28 29 0a 09 20 20  | NextParam()..  |
00006590  20 20 20 20 68 33 21 65  20 3a 3d 20 61 20 24 29  |    h3!e := a $)|
000065a0  3b 0a 09 20 20 20 6f 70  20 3a 3d 20 6c 20 24 29  |;..   op := l $)|
000065b0  0a 09 45 4e 44 43 41 53  45 0a 20 20 20 24 29 0a  |..ENDCASE.   $).|
000065c0  20 20 20 4f 75 74 32 28  6f 70 2c 20 61 29 0a 24  |   Out2(op, a).$|
000065d0  29 0a 0a 0a 41 4e 44 20  64 65 66 69 6e 65 2e 73  |)...AND define.s|
000065e0  74 72 69 6e 67 28 73 70  74 72 29 20 3d 20 56 41  |tring(sptr) = VA|
000065f0  4c 4f 46 0a 20 20 2f 2f  20 4f 75 74 70 75 74 73  |LOF.  // Outputs|
00006600  20 61 20 44 53 54 52 20  6f 70 65 72 61 74 69 6f  | a DSTR operatio|
00006610  6e 20 74 6f 20 64 65 66  69 6e 65 20 61 20 73 74  |n to define a st|
00006620  72 69 6e 67 2c 20 72 65  74 75 72 6e 69 6e 67 0a  |ring, returning.|
00006630  20 20 2f 2f 20 74 68 65  20 6c 61 62 65 6c 20 6e  |  // the label n|
00006640  75 6d 62 65 72 20 61 73  20 74 68 65 20 72 65 73  |umber as the res|
00006650  75 6c 74 2e 0a 24 28 20  4c 45 54 20 6c 20 3d 20  |ult..$( LET l = |
00006660  4e 65 78 74 50 61 72 61  6d 28 29 0a 20 20 20 4f  |NextParam().   O|
00006670  75 74 32 28 73 2e 64 73  74 72 2c 20 6c 29 0a 20  |ut2(s.dstr, l). |
00006680  20 20 4f 75 74 53 74 72  69 6e 67 28 73 70 74 72  |  OutString(sptr|
00006690  29 0a 20 20 20 52 45 53  55 4c 54 49 53 20 6c 0a  |).   RESULTIS l.|
000066a0  24 29 0a 0a 0a 41 4e 44  20 64 65 66 69 6e 65 2e  |$)...AND define.|
000066b0  74 61 62 6c 65 28 74 61  62 29 20 3d 20 56 41 4c  |table(tab) = VAL|
000066c0  4f 46 0a 20 20 2f 2f 20  4f 75 74 70 75 74 73 20  |OF.  // Outputs |
000066d0  61 20 44 54 41 42 20 6f  70 65 72 61 74 69 6f 6e  |a DTAB operation|
000066e0  20 74 6f 20 64 65 66 69  6e 65 20 61 20 74 61 62  | to define a tab|
000066f0  6c 65 2c 20 72 65 74 75  72 6e 69 6e 67 0a 20 20  |le, returning.  |
00006700  2f 2f 20 74 68 65 20 6c  61 62 65 6c 20 61 73 20  |// the label as |
00006710  74 68 65 20 72 65 73 75  6c 74 2e 0a 20 20 2f 2f  |the result..  //|
00006720  0a 20 20 2f 2f 09 44 54  41 42 20 6c 20 6e 20 74  |.  //.DTAB l n t|
00006730  31 20 76 31 20 74 32 20  76 32 20 2e 2e 2e 2e 2e  |1 v1 t2 v2 .....|
00006740  20 74 6e 20 76 6e 0a 20  20 2f 2f 0a 20 20 2f 2f  | tn vn.  //.  //|
00006750  20 54 68 65 20 70 61 72  61 6d 65 74 65 72 20 69  | The parameter i|
00006760  73 20 61 20 70 6f 69 6e  74 65 72 20 74 6f 20 61  |s a pointer to a|
00006770  20 54 41 42 4c 45 20 6f  62 6a 65 63 74 20 66 72  | TABLE object fr|
00006780  6f 6d 20 74 68 65 0a 20  20 2f 2f 20 70 61 72 73  |om the.  // pars|
00006790  65 20 74 72 65 65 2e 0a  24 28 20 4c 45 54 20 6c  |e tree..$( LET l|
000067a0  61 62 65 6c 20 3d 20 4e  65 78 74 50 61 72 61 6d  |abel = NextParam|
000067b0  28 29 0a 20 20 20 4c 45  54 20 6b 65 65 70 20 3d  |().   LET keep =|
000067c0  20 6e 61 6d 65 56 65 63  45 0a 20 20 20 4c 45 54  | nameVecE.   LET|
000067d0  20 6c 6e 20 3d 20 74 72  6e 4c 69 6e 65 43 6f 75  | ln = trnLineCou|
000067e0  6e 74 0a 20 20 20 4c 45  54 20 6e 61 6d 65 73 20  |nt.   LET names |
000067f0  3d 20 68 32 21 74 61 62  0a 20 20 20 4c 45 54 20  |= h2!tab.   LET |
00006800  6c 69 73 74 70 74 72 20  3d 20 68 34 2b 74 61 62  |listptr = h4+tab|
00006810  0a 20 20 20 4c 45 54 20  6c 69 73 74 20 3d 20 21  |.   LET list = !|
00006820  20 6c 69 73 74 70 74 72  0a 20 20 20 4c 45 54 20  | listptr.   LET |
00006830  76 2c 20 6e 20 3d 20 6c  69 73 74 70 74 72 2c 20  |v, n = listptr, |
00006840  31 0a 20 20 20 4c 45 54  20 62 73 69 7a 20 3d 20  |1.   LET bsiz = |
00006850  3f 0a 20 20 20 4c 45 54  20 62 69 74 6d 61 70 20  |?.   LET bitmap |
00006860  3d 20 3f 0a 20 20 20 4c  45 54 20 77 6f 72 64 2c  |= ?.   LET word,|
00006870  20 70 2c 20 73 68 69 66  74 20 3d 20 30 2c 20 30  | p, shift = 0, 0|
00006880  2c 20 62 69 74 73 70 65  72 77 6f 72 64 2d 31 0a  |, bitsperword-1.|
00006890  0a 20 20 20 20 20 2f 2f  20 46 69 6e 64 20 74 68  |.     // Find th|
000068a0  65 20 74 79 70 65 20 61  6e 64 20 73 69 7a 65 20  |e type and size |
000068b0  6f 66 20 74 68 65 20 76  61 6c 75 65 20 6c 69 73  |of the value lis|
000068c0  74 0a 0a 20 20 20 49 46  20 7e 53 6d 61 6c 6c 4e  |t..   IF ~SmallN|
000068d0  75 6d 62 65 72 28 6c 69  73 74 29 20 54 48 45 4e  |umber(list) THEN|
000068e0  20 24 28 0a 20 20 20 20  20 20 49 46 20 68 31 21  | $(.      IF h1!|
000068f0  6c 69 73 74 3d 73 2e 63  6f 6d 6d 61 20 54 48 45  |list=s.comma THE|
00006900  4e 20 24 28 0a 09 20 76  20 3a 3d 20 6c 69 73 74  |N $(.. v := list|
00006910  2b 31 0a 09 20 6e 20 3a  3d 20 32 20 24 29 0a 0a  |+1.. n := 2 $)..|
00006920  20 20 20 20 20 20 49 46  20 68 31 21 6c 69 73 74  |      IF h1!list|
00006930  3d 73 2e 63 6f 6d 6d 61  6c 69 73 74 20 54 48 45  |=s.commalist THE|
00006940  4e 20 24 28 0a 09 20 76  20 3a 3d 20 6c 69 73 74  |N $(.. v := list|
00006950  2b 32 0a 09 20 6e 20 3a  3d 20 68 32 21 6c 69 73  |+2.. n := h2!lis|
00006960  74 20 24 29 20 24 29 3b  0a 0a 20 20 20 62 73 69  |t $) $);..   bsi|
00006970  7a 20 3a 3d 20 28 6e 2d  31 29 2f 62 69 74 73 70  |z := (n-1)/bitsp|
00006980  65 72 77 6f 72 64 2b 31  0a 20 20 20 62 69 74 6d  |erword+1.   bitm|
00006990  61 70 20 3a 3d 20 47 65  74 56 65 63 74 6f 72 28  |ap := GetVector(|
000069a0  62 73 69 7a 29 0a 0a 20  20 20 20 20 2f 2f 20 54  |bsiz)..     // T|
000069b0  68 65 20 27 68 32 27 20  66 69 65 6c 64 20 6f 66  |he 'h2' field of|
000069c0  20 61 20 74 61 62 6c 65  20 6f 62 6a 65 63 74 20  | a table object |
000069d0  68 6f 6c 64 73 20 74 68  65 20 65 6e 64 20 6f 66  |holds the end of|
000069e0  0a 20 20 20 20 20 2f 2f  20 6e 61 6d 65 20 76 65  |.     // name ve|
000069f0  63 74 6f 72 20 61 74 20  74 68 65 20 74 69 6d 65  |ctor at the time|
00006a00  20 61 74 20 77 68 69 63  68 20 74 68 65 20 74 61  | at which the ta|
00006a10  62 6c 65 20 77 61 73 0a  20 20 20 20 20 2f 2f 20  |ble was.     // |
00006a20  44 65 63 6c 61 72 65 64  2e 20 20 49 66 20 74 68  |Declared.  If th|
00006a30  69 73 20 66 69 65 6c 64  20 69 73 20 6e 65 67 61  |is field is nega|
00006a40  74 69 76 65 2c 20 74 68  69 73 20 69 73 20 74 68  |tive, this is th|
00006a50  65 0a 20 20 20 20 20 2f  2f 20 66 69 72 73 74 20  |e.     // first |
00006a60  74 69 6d 65 20 74 68 61  74 20 74 68 65 20 74 61  |time that the ta|
00006a70  62 6c 65 20 68 61 73 20  62 65 65 6e 20 65 6e 63  |ble has been enc|
00006a80  6f 75 6e 74 65 72 65 64  2e 0a 20 20 20 20 20 2f  |ountered..     /|
00006a90  2f 20 4f 74 68 65 72 77  69 73 65 2c 20 74 68 65  |/ Otherwise, the|
00006aa0  20 6e 61 6d 65 20 70 6f  69 6e 74 65 72 20 6d 75  | name pointer mu|
00006ab0  73 74 20 62 65 20 63 68  61 6e 67 65 64 20 77 68  |st be changed wh|
00006ac0  69 6c 65 0a 20 20 20 20  20 2f 2f 20 74 61 62 6c  |ile.     // tabl|
00006ad0  65 20 69 73 20 62 65 69  6e 67 20 65 76 61 6c 75  |e is being evalu|
00006ae0  61 74 65 64 2e 0a 0a 20  20 20 49 46 20 6e 61 6d  |ated...   IF nam|
00006af0  65 73 3e 3d 30 20 54 48  45 4e 20 6e 61 6d 65 56  |es>=0 THEN nameV|
00006b00  65 63 45 20 3a 3d 20 6e  61 6d 65 73 0a 0a 20 20  |ecE := names..  |
00006b10  20 20 20 2f 2f 20 54 68  65 20 27 68 33 27 20 66  |   // The 'h3' f|
00006b20  69 65 6c 64 20 68 6f 6c  64 73 20 74 68 65 20 6c  |ield holds the l|
00006b30  69 6e 65 20 6e 75 6d 62  65 72 20 6f 66 20 74 68  |ine number of th|
00006b40  65 20 74 61 62 6c 65 2e  0a 0a 20 20 20 74 72 6e  |e table...   trn|
00006b50  4c 69 6e 65 43 6f 75 6e  74 20 3a 3d 20 68 33 21  |LineCount := h3!|
00006b60  74 61 62 0a 0a 20 20 20  46 4f 52 20 6a 20 3d 20  |tab..   FOR j = |
00006b70  30 20 54 4f 20 6e 2d 31  20 44 4f 20 24 28 0a 20  |0 TO n-1 DO $(. |
00006b80  20 20 20 20 20 4c 45 54  20 65 20 3d 20 76 21 6a  |     LET e = v!j|
00006b90  0a 20 20 20 20 20 20 4c  45 54 20 6c 20 3d 20 65  |.      LET l = e|
00006ba0  78 74 65 6e 73 69 6f 6e  2e 6c 65 76 65 6c 3c 35  |xtension.level<5|
00006bb0  20 2d 3e 20 30 2c 20 43  68 65 63 6b 4c 61 62 65  | -> 0, CheckLabe|
00006bc0  6c 28 65 29 0a 20 20 20  20 20 20 4c 45 54 20 62  |l(e).      LET b|
00006bd0  20 3d 20 30 0a 0a 20 20  20 20 20 20 54 45 53 54  | = 0..      TEST|
00006be0  20 6c 3d 30 20 54 48 45  4e 0a 09 20 76 21 6a 20  | l=0 THEN.. v!j |
00006bf0  3a 3d 20 45 76 61 6c 43  6f 6e 73 74 28 65 29 0a  |:= EvalConst(e).|
00006c00  20 20 20 20 20 20 45 4c  53 45 20 24 28 0a 09 20  |      ELSE $(.. |
00006c10  62 20 3a 3d 20 31 0a 09  20 76 21 6a 20 3a 3d 20  |b := 1.. v!j := |
00006c20  6c 20 24 29 0a 0a 20 20  20 20 20 20 49 46 20 73  |l $)..      IF s|
00006c30  68 69 66 74 3c 30 20 54  48 45 4e 20 24 28 0a 09  |hift<0 THEN $(..|
00006c40  20 62 69 74 6d 61 70 21  70 20 3a 3d 20 77 6f 72  | bitmap!p := wor|
00006c50  64 0a 09 20 70 20 3a 3d  20 70 2b 31 0a 09 20 77  |d.. p := p+1.. w|
00006c60  6f 72 64 20 3a 3d 20 30  0a 09 20 73 68 69 66 74  |ord := 0.. shift|
00006c70  20 3a 3d 20 62 69 74 73  70 65 72 77 6f 72 64 2d  | := bitsperword-|
00006c80  31 20 24 29 0a 0a 20 20  20 20 20 20 77 6f 72 64  |1 $)..      word|
00006c90  20 3a 3d 20 77 6f 72 64  20 7c 20 28 62 20 3c 3c  | := word | (b <<|
00006ca0  20 73 68 69 66 74 29 0a  20 20 20 20 20 20 73 68  | shift).      sh|
00006cb0  69 66 74 20 3a 3d 20 73  68 69 66 74 2d 31 20 24  |ift := shift-1 $|
00006cc0  29 0a 0a 20 20 20 62 69  74 6d 61 70 21 70 20 3a  |)..   bitmap!p :|
00006cd0  3d 20 77 6f 72 64 0a 20  20 20 70 20 3a 3d 20 30  |= word.   p := 0|
00006ce0  0a 20 20 20 73 68 69 66  74 20 3a 3d 20 2d 31 0a  |.   shift := -1.|
00006cf0  0a 20 20 20 2f 2f 20 47  65 6e 65 72 61 74 65 20  |.   // Generate |
00006d00  74 68 65 20 44 54 41 42  20 6f 70 65 72 61 74 69  |the DTAB operati|
00006d10  6f 6e 20 61 6e 64 20 4f  75 74 70 75 74 20 74 68  |on and Output th|
00006d20  65 20 74 79 70 65 73 20  61 6e 64 20 76 61 6c 75  |e types and valu|
00006d30  65 73 2e 0a 0a 20 20 20  4f 75 74 32 28 73 2e 64  |es...   Out2(s.d|
00006d40  74 61 62 2c 20 6c 61 62  65 6c 29 0a 20 20 20 4f  |tab, label).   O|
00006d50  75 74 31 28 6e 29 0a 0a  20 20 20 46 4f 52 20 6a  |ut1(n)..   FOR j|
00006d60  20 3d 20 30 20 54 4f 20  6e 2d 31 20 44 4f 20 24  | = 0 TO n-1 DO $|
00006d70  28 0a 20 20 20 20 20 20  49 46 20 73 68 69 66 74  |(.      IF shift|
00006d80  3c 30 20 54 48 45 4e 20  24 28 0a 09 20 77 6f 72  |<0 THEN $(.. wor|
00006d90  64 20 3a 3d 20 62 69 74  6d 61 70 21 70 0a 09 20  |d := bitmap!p.. |
00006da0  70 20 3a 3d 20 70 2b 31  0a 09 20 73 68 69 66 74  |p := p+1.. shift|
00006db0  20 3a 3d 20 62 69 74 73  70 65 72 77 6f 72 64 2d  | := bitsperword-|
00006dc0  31 20 24 29 0a 0a 20 20  20 20 20 20 4f 75 74 32  |1 $)..      Out2|
00006dd0  28 28 5b 28 77 6f 72 64  20 3e 3e 20 73 68 69 66  |(([(word >> shif|
00006de0  74 29 20 26 20 31 5d 7e  3d 30 20 2d 3e 20 73 2e  |t) & 1]~=0 -> s.|
00006df0  69 74 65 6d 6c 2c 0a 09  09 09 09 09 73 2e 69 74  |iteml,......s.it|
00006e00  65 6d 6e 29 2c 0a 09 20  20 20 76 21 6a 29 0a 0a  |emn),..   v!j)..|
00006e10  20 20 20 20 20 20 73 68  69 66 74 20 3a 3d 20 73  |      shift := s|
00006e20  68 69 66 74 2d 31 20 24  29 0a 0a 20 20 20 66 72  |hift-1 $)..   fr|
00006e30  65 65 76 65 63 74 6f 72  28 62 69 74 6d 61 70 29  |eevector(bitmap)|
00006e40  0a 0a 20 20 20 20 20 2f  2f 20 54 68 65 20 6e 61  |..     // The na|
00006e50  6d 65 73 20 70 6f 69 6e  74 65 72 20 61 6e 64 20  |mes pointer and |
00006e60  6c 69 6e 65 20 6e 75 6d  62 65 72 20 63 61 6e 20  |line number can |
00006e70  6e 6f 77 20 62 65 20 72  65 73 65 74 2e 0a 0a 20  |now be reset... |
00006e80  20 20 6e 61 6d 65 56 65  63 45 20 3a 3d 20 6b 65  |  nameVecE := ke|
00006e90  65 70 0a 20 20 20 74 72  6e 4c 69 6e 65 43 6f 75  |ep.   trnLineCou|
00006ea0  6e 74 20 3a 3d 20 6c 6e  0a 0a 20 20 20 52 45 53  |nt := ln..   RES|
00006eb0  55 4c 54 49 53 20 6c 61  62 65 6c 0a 24 29 0a 0a  |ULTIS label.$)..|
00006ec0  41 4e 44 20 43 68 65 63  6b 4c 61 62 65 6c 28 78  |AND CheckLabel(x|
00006ed0  29 20 3d 20 53 6d 61 6c  6c 4e 75 6d 62 65 72 28  |) = SmallNumber(|
00006ee0  78 29 20 2d 3e 20 30 2c  20 56 41 4c 4f 46 0a 20  |x) -> 0, VALOF. |
00006ef0  20 2f 2f 20 43 68 65 63  6b 73 20 77 68 65 74 68  | // Checks wheth|
00006f00  65 72 20 74 68 65 20 65  78 70 72 65 73 73 69 6f  |er the expressio|
00006f10  6e 20 64 65 66 69 6e 65  64 20 62 79 20 27 78 27  |n defined by 'x'|
00006f20  20 69 73 20 6f 66 0a 20  20 2f 2f 20 27 6c 61 62  | is of.  // 'lab|
00006f30  65 6c 27 20 28 74 61 62  6c 65 20 6f 72 20 73 74  |el' (table or st|
00006f40  72 69 6e 67 29 20 6f 72  20 27 6e 75 6d 65 72 69  |ring) or 'numeri|
00006f50  63 27 20 74 79 70 65 2e  20 20 54 68 65 0a 20 20  |c' type.  The.  |
00006f60  2f 2f 20 72 65 73 75 6c  74 20 69 73 20 7a 65 72  |// result is zer|
00006f70  6f 20 6f 72 20 61 20 6c  61 62 65 6c 20 6e 75 6d  |o or a label num|
00006f80  62 65 72 2e 0a 24 28 20  4c 45 54 20 74 79 70 65  |ber..$( LET type|
00006f90  20 3d 20 68 31 21 78 0a  20 20 20 4c 45 54 20 6e  | = h1!x.   LET n|
00006fa0  61 6d 65 20 3d 20 46 41  4c 53 45 0a 20 20 20 4c  |ame = FALSE.   L|
00006fb0  45 54 20 74 68 69 6e 67  20 3d 20 78 0a 0a 20 20  |ET thing = x..  |
00006fc0  20 49 46 20 74 79 70 65  3d 73 2e 6e 61 6d 65 20  | IF type=s.name |
00006fd0  54 48 45 4e 20 24 28 0a  20 20 20 20 20 20 4c 45  |THEN $(.      LE|
00006fe0  54 20 6e 20 3d 20 46 69  6e 64 4e 61 6d 65 28 78  |T n = FindName(x|
00006ff0  29 0a 0a 20 20 20 20 20  20 6e 61 6d 65 20 3a 3d  |)..      name :=|
00007000  20 54 52 55 45 0a 20 20  20 20 20 20 74 79 70 65  | TRUE.      type|
00007010  20 3a 3d 20 6e 61 6d 65  2e 74 79 70 65 21 6e 0a  | := name.type!n.|
00007020  20 20 20 20 20 20 74 68  69 6e 67 20 3a 3d 20 6e  |      thing := n|
00007030  61 6d 65 2e 76 61 6c 75  65 21 6e 20 24 29 0a 0a  |ame.value!n $)..|
00007040  20 20 20 49 46 20 74 79  70 65 3d 73 2e 73 74 72  |   IF type=s.str|
00007050  69 6e 67 20 7c 20 74 79  70 65 3d 73 2e 74 61 62  |ing | type=s.tab|
00007060  6c 65 20 54 48 45 4e 20  24 28 0a 20 20 20 20 20  |le THEN $(.     |
00007070  20 4c 45 54 20 6c 61 62  65 6c 20 3d 20 3f 0a 0a  | LET label = ?..|
00007080  20 20 20 20 20 20 49 46  20 6e 61 6d 65 20 54 48  |      IF name TH|
00007090  45 4e 20 24 28 0a 09 20  6c 61 62 65 6c 20 3a 3d  |EN $(.. label :=|
000070a0  21 74 68 69 6e 67 0a 09  20 49 46 20 6c 61 62 65  |!thing.. IF labe|
000070b0  6c 7e 3d 30 20 54 48 45  4e 20 52 45 53 55 4c 54  |l~=0 THEN RESULT|
000070c0  49 53 20 6c 61 62 65 6c  20 24 29 0a 0a 20 20 20  |IS label $)..   |
000070d0  20 20 20 54 45 53 54 20  74 79 70 65 3d 73 2e 73  |   TEST type=s.s|
000070e0  74 72 69 6e 67 0a 09 20  54 48 45 4e 20 6c 61 62  |tring.. THEN lab|
000070f0  65 6c 20 3a 3d 20 64 65  66 69 6e 65 2e 73 74 72  |el := define.str|
00007100  69 6e 67 28 74 68 69 6e  67 2b 31 29 0a 09 20 45  |ing(thing+1).. E|
00007110  4c 53 45 20 6c 61 62 65  6c 20 3a 3d 20 64 65 66  |LSE label := def|
00007120  69 6e 65 2e 74 61 62 6c  65 28 74 68 69 6e 67 29  |ine.table(thing)|
00007130  0a 0a 20 20 20 20 20 20  49 46 20 6e 61 6d 65 20  |..      IF name |
00007140  54 48 45 4e 20 21 74 68  69 6e 67 20 3a 3d 20 6c  |THEN !thing := l|
00007150  61 62 65 6c 0a 0a 20 20  20 20 20 20 52 45 53 55  |abel..      RESU|
00007160  4c 54 49 53 20 6c 61 62  65 6c 20 24 29 0a 0a 20  |LTIS label $).. |
00007170  20 20 52 45 53 55 4c 54  49 53 20 30 0a 24 29 0a  |  RESULTIS 0.$).|
00007180  0a 41 4e 44 20 43 6f 6d  70 4c 61 62 28 6c 2c 20  |.AND CompLab(l, |
00007190  73 29 20 42 45 0a 24 28  20 49 46 20 6c 7e 3d 30  |s) BE.$( IF l~=0|
000071a0  20 54 48 45 4e 0a 20 20  20 24 28 20 4f 75 74 32  | THEN.   $( Out2|
000071b0  28 73 2e 6c 61 62 2c 20  6c 29 3b 0a 20 20 20 20  |(s.lab, l);.    |
000071c0  20 20 61 63 63 65 73 73  69 62 6c 65 20 3a 3d 20  |  accessible := |
000071d0  54 52 55 45 20 24 29 3b  0a 20 20 20 49 46 20 73  |TRUE $);.   IF s|
000071e0  3e 3d 30 20 54 48 45 4e  20 4f 75 74 32 28 73 2e  |>=0 THEN Out2(s.|
000071f0  73 74 61 63 6b 2c 20 73  29 0a 24 29 0a 0a 41 4e  |stack, s).$)..AN|
00007200  44 20 43 6f 6d 70 44 61  74 61 4c 61 62 28 6c 29  |D CompDataLab(l)|
00007210  20 42 45 0a 24 28 20 4f  75 74 31 28 73 2e 64 61  | BE.$( Out1(s.da|
00007220  74 61 6c 61 62 29 3b 0a  20 20 20 4f 75 74 31 28  |talab);.   Out1(|
00007230  6c 29 0a 24 29 0a 0a 41  4e 44 20 4f 75 74 53 74  |l).$)..AND OutSt|
00007240  72 69 6e 67 28 78 29 20  42 45 0a 24 28 20 4c 45  |ring(x) BE.$( LE|
00007250  54 20 6c 20 3d 20 78 25  30 0a 20 20 20 4f 75 74  |T l = x%0.   Out|
00007260  31 28 6c 29 0a 20 20 20  46 4f 52 20 69 20 3d 20  |1(l).   FOR i = |
00007270  31 20 54 4f 20 6c 20 44  4f 20 4f 75 74 31 28 78  |1 TO l DO Out1(x|
00007280  25 69 29 0a 24 29 0a 0a  41 4e 44 20 4f 75 74 4f  |%i).$)..AND OutO|
00007290  70 28 6f 70 29 20 42 45  0a 24 28 20 49 46 20 6f  |p(op) BE.$( IF o|
000072a0  75 74 4c 69 6e 65 43 6f  75 6e 74 7e 3d 74 72 6e  |utLineCount~=trn|
000072b0  4c 69 6e 65 43 6f 75 6e  74 20 54 48 45 4e 20 24  |LineCount THEN $|
000072c0  28 0a 20 20 20 20 20 20  4f 75 74 31 28 73 2e 6c  |(.      Out1(s.l|
000072d0  69 6e 65 63 6f 75 6e 74  29 3b 0a 20 20 20 20 20  |inecount);.     |
000072e0  20 4f 75 74 31 28 74 72  6e 4c 69 6e 65 43 6f 75  | Out1(trnLineCou|
000072f0  6e 74 29 3b 0a 20 20 20  20 20 20 6f 75 74 4c 69  |nt);.      outLi|
00007300  6e 65 43 6f 75 6e 74 20  3a 3d 20 74 72 6e 4c 69  |neCount := trnLi|
00007310  6e 65 43 6f 75 6e 74 20  24 29 3b 0a 20 20 20 4f  |neCount $);.   O|
00007320  75 74 31 28 6f 70 29 0a  24 29 0a 0a 41 4e 44 20  |ut1(op).$)..AND |
00007330  4f 75 74 31 28 6e 29 20  42 45 0a 20 20 20 54 45  |Out1(n) BE.   TE|
00007340  53 54 20 72 65 74 61 69  6e 4f 63 6f 64 65 20 54  |ST retainOcode T|
00007350  48 45 4e 0a 20 20 20 20  20 20 54 45 53 54 20 2d  |HEN.      TEST -|
00007360  31 32 37 3c 3d 6e 3c 3d  31 32 37 20 54 48 45 4e  |127<=n<=127 THEN|
00007370  0a 09 20 50 42 79 74 65  28 6e 20 26 20 32 35 35  |.. PByte(n & 255|
00007380  29 0a 20 20 20 20 20 20  45 4c 53 45 20 24 28 0a  |).      ELSE $(.|
00007390  09 20 4c 45 54 20 73 68  69 66 74 20 3d 20 38 20  |. LET shift = 8 |
000073a0  2a 20 28 62 79 74 65 73  70 65 72 77 6f 72 64 2d  |* (bytesperword-|
000073b0  31 29 0a 09 20 50 42 79  74 65 28 23 58 38 30 29  |1).. PByte(#X80)|
000073c0  0a 0a 09 20 46 4f 52 20  6a 20 3d 20 31 20 54 4f  |... FOR j = 1 TO|
000073d0  20 62 79 74 65 73 70 65  72 77 6f 72 64 20 44 4f  | bytesperword DO|
000073e0  20 24 28 0a 09 20 20 20  20 50 42 79 74 65 28 28  | $(..    PByte((|
000073f0  6e 20 3e 3e 20 73 68 69  66 74 29 20 26 20 32 35  |n >> shift) & 25|
00007400  35 29 0a 09 20 20 20 20  73 68 69 66 74 20 3a 3d  |5)..    shift :=|
00007410  20 73 68 69 66 74 2d 38  20 24 29 20 24 29 0a 0a  | shift-8 $) $)..|
00007420  20 20 20 45 4c 53 45 20  24 28 0a 20 20 20 20 20  |   ELSE $(.     |
00007430  20 49 46 20 6e 3c 30 20  54 48 45 4e 20 24 28 0a  | IF n<0 THEN $(.|
00007440  09 20 77 72 63 28 27 2d  27 29 3b 20 6e 20 3a 3d  |. wrc('-'); n :=|
00007450  20 2d 20 6e 0a 09 20 49  46 20 6e 3c 30 20 54 48  | - n.. IF n<0 TH|
00007460  45 4e 20 24 28 0a 09 20  20 20 20 4c 45 54 20 6e  |EN $(..    LET n|
00007470  64 69 76 31 30 20 3d 20  28 6e 20 3e 3e 20 31 29  |div10 = (n >> 1)|
00007480  2f 35 0a 09 20 20 20 20  77 72 70 6e 28 6e 64 69  |/5..    wrpn(ndi|
00007490  76 31 30 29 0a 09 20 20  20 20 6e 3a 3d 6e 2d 6e  |v10)..    n:=n-n|
000074a0  64 69 76 31 30 2a 31 30  20 24 29 20 24 29 0a 0a  |div10*10 $) $)..|
000074b0  20 20 20 20 20 20 77 72  70 6e 28 6e 29 0a 20 20  |      wrpn(n).  |
000074c0  20 20 20 20 77 72 63 28  27 2a 73 27 29 20 24 29  |    wrc('*s') $)|
000074d0  0a 0a 41 4e 44 20 50 42  79 74 65 28 62 79 74 65  |..AND PByte(byte|
000074e0  29 20 42 45 0a 24 28 20  4c 45 54 20 70 74 72 20  |) BE.$( LET ptr |
000074f0  3d 20 6f 63 2e 6c 61 73  74 62 79 74 65 21 6f 63  |= oc.lastbyte!oc|
00007500  6f 64 65 62 75 66 0a 20  20 20 49 46 20 70 74 72  |odebuf.   IF ptr|
00007510  3e 3d 6f 63 2e 62 79 74  65 73 20 54 48 45 4e 20  |>=oc.bytes THEN |
00007520  24 28 0a 20 20 20 20 20  20 4c 45 54 20 62 20 3d  |$(.      LET b =|
00007530  20 47 65 74 57 69 74 68  4d 61 72 6b 28 6f 63 2e  | GetWithMark(oc.|
00007540  73 69 7a 65 2c 20 6f 63  6f 64 65 2e 6d 61 72 6b  |size, ocode.mark|
00007550  29 0a 20 20 20 20 20 20  21 6f 63 6f 64 65 42 75  |).      !ocodeBu|
00007560  66 20 3a 3d 20 62 3b 0a  20 20 20 20 20 20 6f 63  |f := b;.      oc|
00007570  6f 64 65 42 75 66 20 3a  3d 20 62 0a 20 20 20 20  |odeBuf := b.    |
00007580  20 20 6f 63 2e 6e 65 78  74 21 6f 63 6f 64 65 42  |  oc.next!ocodeB|
00007590  75 66 20 3a 3d 20 30 0a  20 20 20 20 20 20 70 74  |uf := 0.      pt|
000075a0  72 20 3a 3d 20 6f 63 2e  66 69 72 73 74 62 79 74  |r := oc.firstbyt|
000075b0  65 20 24 29 0a 20 20 20  6f 63 6f 64 65 42 75 66  |e $).   ocodeBuf|
000075c0  25 70 74 72 20 3a 3d 20  62 79 74 65 0a 20 20 20  |%ptr := byte.   |
000075d0  6f 63 2e 6c 61 73 74 62  79 74 65 21 6f 63 6f 64  |oc.lastbyte!ocod|
000075e0  65 42 75 66 20 3a 3d 20  70 74 72 2b 31 0a 24 29  |eBuf := ptr+1.$)|
000075f0  0a 0a 41 4e 44 20 57 72  50 6e 28 6e 29 20 42 45  |..AND WrPn(n) BE|
00007600  0a 24 28 20 49 46 20 6e  3e 39 20 54 48 45 4e 20  |.$( IF n>9 THEN |
00007610  57 72 50 6e 28 6e 2f 31  30 29 0a 20 20 20 57 72  |WrPn(n/10).   Wr|
00007620  43 28 6e 20 52 45 4d 20  31 30 2b 27 30 27 29 0a  |C(n REM 10+'0').|
00007630  24 29 0a 0a 41 4e 44 20  4f 75 74 32 28 78 2c 20  |$)..AND Out2(x, |
00007640  79 29 20 42 45 20 24 28  20 4f 75 74 4f 70 28 78  |y) BE $( OutOp(x|
00007650  29 3b 20 4f 75 74 31 28  79 29 09 24 29 0a 0a 41  |); Out1(y).$)..A|
00007660  4e 44 20 57 72 43 28 63  68 29 20 42 45 0a 24 28  |ND WrC(ch) BE.$(|
00007670  20 6f 63 6f 75 6e 74 20  3a 3d 20 6f 63 6f 75 6e  | ocount := ocoun|
00007680  74 2b 31 0a 20 20 20 49  46 20 6f 63 6f 75 6e 74  |t+1.   IF ocount|
00007690  3e 36 32 20 26 20 63 68  3d 27 2a 53 27 20 54 48  |>62 & ch='*S' TH|
000076a0  45 4e 0a 20 20 20 24 28  20 57 72 43 68 28 27 2a  |EN.   $( WrCh('*|
000076b0  4e 27 29 0a 20 20 20 20  20 20 6f 63 6f 75 6e 74  |N').      ocount|
000076c0  20 3a 3d 20 30 0a 20 20  20 20 20 20 52 45 54 55  | := 0.      RETU|
000076d0  52 4e 20 24 29 0a 20 20  20 57 72 43 68 28 63 68  |RN $).   WrCh(ch|
000076e0  29 0a 24 29 0a 0a 41 4e  44 20 54 72 61 6e 73 52  |).$)..AND TransR|
000076f0  65 70 6f 72 74 28 6e 2c  20 78 29 20 42 45 0a 24  |eport(n, x) BE.$|
00007700  28 20 4c 45 54 20 61 72  67 20 3d 20 78 2b 32 0a  |( LET arg = x+2.|
00007710  20 20 20 4c 45 54 20 73  74 72 20 3d 20 4f 75 74  |   LET str = Out|
00007720  70 75 74 28 29 0a 20 20  20 4c 45 54 20 73 20 3d  |put().   LET s =|
00007730  20 3f 0a 20 20 20 4c 45  54 20 6e 65 77 72 63 2c  | ?.   LET newrc,|
00007740  20 77 6d 20 3d 20 31 30  2c 20 22 45 72 72 6f 72  | wm = 10, "Error|
00007750  22 3b 0a 0a 20 20 20 53  65 6c 65 63 74 4f 75 74  |";..   SelectOut|
00007760  70 75 74 28 76 65 72 73  74 72 65 61 6d 29 0a 0a  |put(verstream)..|
00007770  20 20 20 73 20 3a 3d 20  56 41 4c 4f 46 20 53 57  |   s := VALOF SW|
00007780  49 54 43 48 4f 4e 20 6e  20 49 4e 54 4f 0a 20 20  |ITCHON n INTO.  |
00007790  20 24 28 20 44 45 46 41  55 4c 54 3a 20 61 72 67  | $( DEFAULT: arg|
000077a0  20 3a 3d 20 6e 3b 20 52  45 53 55 4c 54 49 53 20  | := n; RESULTIS |
000077b0  22 25 4e 22 0a 0a 20 20  20 20 20 20 43 41 53 45  |"%N"..      CASE|
000077c0  20 31 30 31 3a 20 52 45  53 55 4c 54 49 53 20 22  | 101: RESULTIS "|
000077d0  69 6c 6c 65 67 61 6c 20  75 73 65 20 6f 66 20 44  |illegal use of D|
000077e0  45 46 41 55 4c 54 22 0a  20 20 20 20 20 20 43 41  |EFAULT".      CA|
000077f0  53 45 20 31 30 35 3a 20  52 45 53 55 4c 54 49 53  |SE 105: RESULTIS|
00007800  20 22 69 6c 6c 65 67 61  6c 20 75 73 65 20 6f 66  | "illegal use of|
00007810  20 43 41 53 45 22 0a 20  20 20 20 20 20 43 41 53  | CASE".      CAS|
00007820  45 20 31 32 31 3a 20 52  45 53 55 4c 54 49 53 20  |E 121: RESULTIS |
00007830  22 69 6c 6c 65 67 61 6c  20 75 73 65 20 6f 66 20  |"illegal use of |
00007840  45 4e 44 43 41 53 45 22  0a 20 20 20 20 20 20 43  |ENDCASE".      C|
00007850  41 53 45 20 31 30 34 3a  20 52 45 53 55 4c 54 49  |ASE 104: RESULTI|
00007860  53 20 22 69 6c 6c 65 67  61 6c 20 75 73 65 20 6f  |S "illegal use o|
00007870  66 20 42 52 45 41 4b 22  0a 20 20 20 20 20 20 43  |f BREAK".      C|
00007880  41 53 45 20 31 30 38 3a  20 52 45 53 55 4c 54 49  |ASE 108: RESULTI|
00007890  53 20 22 69 6c 6c 65 67  61 6c 20 75 73 65 20 6f  |S "illegal use o|
000078a0  66 20 4c 4f 4f 50 22 0a  20 20 20 20 20 20 43 41  |f LOOP".      CA|
000078b0  53 45 20 31 30 37 3a 20  52 45 53 55 4c 54 49 53  |SE 107: RESULTIS|
000078c0  20 22 69 6c 6c 65 67 61  6c 20 75 73 65 20 6f 66  | "illegal use of|
000078d0  20 52 45 53 55 4c 54 49  53 22 0a 20 20 20 20 20  | RESULTIS".     |
000078e0  20 43 41 53 45 20 31 30  36 3a 20 52 45 53 55 4c  | CASE 106: RESUL|
000078f0  54 49 53 20 22 74 77 6f  20 63 61 73 65 73 20 77  |TIS "two cases w|
00007900  69 74 68 20 74 68 65 20  73 61 6d 65 20 63 6f 6e  |ith the same con|
00007910  73 74 61 6e 74 22 0a 20  20 20 20 20 20 43 41 53  |stant".      CAS|
00007920  45 20 31 30 39 3a 0a 20  20 20 20 20 20 43 41 53  |E 109:.      CAS|
00007930  45 20 31 31 33 3a 20 52  45 53 55 4c 54 49 53 20  |E 113: RESULTIS |
00007940  22 4c 2d 74 79 70 65 20  65 78 70 72 65 73 73 69  |"L-type expressi|
00007950  6f 6e 20 65 78 70 65 63  74 65 64 22 0a 20 20 20  |on expected".   |
00007960  20 20 20 43 41 53 45 20  31 31 30 3a 0a 20 20 20  |   CASE 110:.   |
00007970  20 20 20 43 41 53 45 20  31 31 32 3a 20 52 45 53  |   CASE 112: RES|
00007980  55 4c 54 49 53 20 22 4c  48 53 20 61 6e 64 20 52  |ULTIS "LHS and R|
00007990  48 53 20 64 6f 20 6e 6f  74 20 6d 61 74 63 68 22  |HS do not match"|
000079a0  0a 20 20 20 20 20 20 43  41 53 45 20 31 31 35 3a  |.      CASE 115:|
000079b0  20 52 45 53 55 4c 54 49  53 20 22 27 25 53 27 20  | RESULTIS "'%S' |
000079c0  6e 6f 74 20 64 65 63 6c  61 72 65 64 22 0a 20 20  |not declared".  |
000079d0  20 20 20 20 43 41 53 45  20 31 31 36 3a 20 52 45  |    CASE 116: RE|
000079e0  53 55 4c 54 49 53 20 22  64 79 6e 61 6d 69 63 20  |SULTIS "dynamic |
000079f0  66 72 65 65 20 76 61 72  69 61 62 6c 65 20 75 73  |free variable us|
00007a00  65 64 20 28 27 25 53 27  29 22 0a 20 20 20 20 20  |ed ('%S')".     |
00007a10  20 43 41 53 45 20 31 31  37 3a 0a 20 20 20 20 20  | CASE 117:.     |
00007a20  20 43 41 53 45 20 31 31  38 3a 0a 20 20 20 20 20  | CASE 118:.     |
00007a30  20 43 41 53 45 20 31 31  39 3a 20 52 45 53 55 4c  | CASE 119: RESUL|
00007a40  54 49 53 20 22 69 6e 76  61 6c 69 64 20 63 6f 6e  |TIS "invalid con|
00007a50  73 74 61 6e 74 20 65 78  70 72 65 73 73 69 6f 6e  |stant expression|
00007a60  22 0a 20 20 20 20 20 20  43 41 53 45 20 31 32 30  |".      CASE 120|
00007a70  3a 20 52 45 53 55 4c 54  49 53 20 22 69 6e 76 61  |: RESULTIS "inva|
00007a80  6c 69 64 20 70 61 72 61  6d 65 74 65 72 20 69 6e  |lid parameter in|
00007a90  20 73 65 6c 65 63 74 6f  72 22 0a 20 20 20 20 20  | selector".     |
00007aa0  20 43 41 53 45 20 31 34  32 3a 20 52 45 53 55 4c  | CASE 142: RESUL|
00007ab0  54 49 53 20 22 27 25 53  27 20 64 65 63 6c 61 72  |TIS "'%S' declar|
00007ac0  65 64 20 74 77 69 63 65  22 0a 20 20 20 20 20 20  |ed twice".      |
00007ad0  43 41 53 45 20 31 34 33  3a 20 52 45 53 55 4c 54  |CASE 143: RESULT|
00007ae0  49 53 20 22 74 6f 6f 20  6d 61 6e 79 20 6e 61 6d  |IS "too many nam|
00007af0  65 73 20 64 65 63 6c 61  72 65 64 22 0a 20 20 20  |es declared".   |
00007b00  20 20 20 43 41 53 45 20  31 35 30 3a 20 52 45 53  |   CASE 150: RES|
00007b10  55 4c 54 49 53 20 22 69  6e 76 61 6c 69 64 20 4c  |ULTIS "invalid L|
00007b20  48 53 20 66 6f 72 20 63  6f 6d 70 6f 75 6e 64 20  |HS for compound |
00007b30  61 73 73 69 67 6e 6d 65  6e 74 22 0a 20 20 20 20  |assignment".    |
00007b40  20 20 43 41 53 45 20 20  39 31 3a 20 52 45 53 55  |  CASE  91: RESU|
00007b50  4c 54 49 53 20 22 52 45  54 55 52 4e 20 75 73 65  |LTIS "RETURN use|
00007b60  64 20 69 6e 20 62 6f 64  79 20 6f 66 20 66 75 6e  |d in body of fun|
00007b70  63 74 69 6f 6e 22 0a 20  20 20 20 20 20 43 41 53  |ction".      CAS|
00007b80  45 20 20 39 32 3a 20 52  45 53 55 4c 54 49 53 20  |E  92: RESULTIS |
00007b90  22 76 61 6c 75 65 20 6f  66 20 56 41 4c 4f 46 20  |"value of VALOF |
00007ba0  62 6c 6f 63 6b 20 6d 61  79 20 62 65 20 75 6e 64  |block may be und|
00007bb0  65 66 69 6e 65 64 22 0a  20 20 20 24 29 0a 0a 20  |efined".   $).. |
00007bc0  20 20 49 46 20 6e 3c 31  30 30 20 54 48 45 4e 20  |  IF n<100 THEN |
00007bd0  6e 65 77 72 63 2c 20 77  6d 20 3a 3d 20 35 2c 20  |newrc, wm := 5, |
00007be0  22 57 61 72 6e 69 6e 67  22 3b 0a 20 20 20 57 72  |"Warning";.   Wr|
00007bf0  69 74 65 46 28 22 25 73  20 6e 65 61 72 20 6c 69  |iteF("%s near li|
00007c00  6e 65 20 25 4e 3a 20 22  2c 20 77 6d 2c 20 74 72  |ne %N: ", wm, tr|
00007c10  6e 4c 69 6e 65 43 6f 75  6e 74 29 0a 20 20 20 57  |nLineCount).   W|
00007c20  72 69 74 65 46 28 73 2c  20 61 72 67 29 0a 0a 20  |riteF(s, arg).. |
00007c30  20 20 49 46 20 72 63 3e  3d 32 30 20 54 48 45 4e  |  IF rc>=20 THEN|
00007c40  0a 20 20 20 24 28 20 57  72 69 74 65 53 28 22 63  |.   $( WriteS("c|
00007c50  6f 6d 70 69 6c 61 74 69  6f 6e 20 61 62 61 6e 64  |ompilation aband|
00007c60  6f 6e 65 64 2a 4e 22 29  0a 20 20 20 20 20 20 4c  |oned*N").      L|
00007c70  6f 6e 67 4a 75 6d 70 28  65 72 72 2e 70 2c 20 65  |ongJump(err.p, e|
00007c80  72 72 2e 6c 29 20 24 29  0a 0a 20 20 20 49 46 20  |rr.l) $)..   IF |
00007c90  72 63 3c 6e 65 77 72 63  20 54 48 45 4e 20 72 63  |rc<newrc THEN rc|
00007ca0  20 3a 3d 20 6e 65 77 72  63 0a 0a 20 20 20 4e 65  | := newrc..   Ne|
00007cb0  77 4c 69 6e 65 28 29 0a  20 20 20 53 65 6c 65 63  |wLine().   Selec|
00007cc0  74 4f 75 74 70 75 74 28  73 74 72 29 0a 24 29 0a  |tOutput(str).$).|
00007cd0  0a 2e 0a 0a 53 45 43 54  49 4f 4e 20 22 50 54 72  |....SECTION "PTr|
00007ce0  65 65 22 0a 0a 47 45 54  20 22 62 2e 48 65 61 64  |ee"..GET "b.Head|
00007cf0  65 72 22 0a 0a 53 54 41  54 49 43 0a 24 28 20 2f  |er"..STATIC.$( /|
00007d00  2a 20 56 65 72 73 69 6f  6e 20 6f 66 20 30 37 20  |* Version of 07 |
00007d10  46 65 62 20 38 36 20 31  33 3a 35 35 3a 30 30 0a  |Feb 86 13:55:00.|
00007d20  20 20 20 2a 2f 0a 20 20  20 64 75 6d 6d 79 20 3d  |   */.   dummy =|
00007d30  20 56 65 72 73 69 6f 6e  4d 61 72 6b 0a 20 20 20  | VersionMark.   |
00007d40  76 65 72 73 69 6f 6e 20  3d 20 31 2a 32 35 36 2b  |version = 1*256+|
00007d50  32 0a 24 29 0a 0a 2f 2a  20 31 2e 32 09 30 37 20  |2.$)../* 1.2.07 |
00007d60  46 65 62 20 38 36 20 31  33 3a 34 34 3a 32 30 0a  |Feb 86 13:44:20.|
00007d70  20 20 20 20 20 46 6c 6f  61 74 69 6e 67 20 70 6f  |     Floating po|
00007d80  69 6e 74 20 69 6e 63 6f  72 70 6f 72 61 74 65 64  |int incorporated|
00007d90  0a 2a 2f 0a 0a 4c 45 54  20 62 63 70 6c 2e 70 74  |.*/..LET bcpl.pt|
00007da0  72 65 65 28 61 29 20 42  45 20 50 4c 69 73 74 28  |ree(a) BE PList(|
00007db0  61 2c 20 30 2c 20 33 30  29 0a 0a 41 4e 44 20 50  |a, 0, 30)..AND P|
00007dc0  4c 69 73 74 28 78 2c 20  6e 2c 20 64 29 20 42 45  |List(x, n, d) BE|
00007dd0  0a 24 28 20 4c 45 54 20  73 69 7a 65 20 3d 20 30  |.$( LET size = 0|
00007de0  0a 20 20 20 4c 45 54 20  76 20 3d 20 54 41 42 4c  |.   LET v = TABL|
00007df0  45 20 30 2c 30 2c 30 2c  30 2c 30 2c 30 2c 30 2c  |E 0,0,0,0,0,0,0,|
00007e00  30 2c 30 2c 30 2c 30 2c  30 2c 30 2c 30 2c 30 2c  |0,0,0,0,0,0,0,0,|
00007e10  0a 09 09 20 30 2c 30 2c  30 2c 30 2c 30 2c 30 2c  |... 0,0,0,0,0,0,|
00007e20  30 2c 30 2c 30 2c 30 2c  30 2c 30 2c 30 2c 30 2c  |0,0,0,0,0,0,0,0,|
00007e30  30 0a 20 20 20 49 46 20  6e 3d 30 20 54 48 45 4e  |0.   IF n=0 THEN|
00007e40  0a 20 20 20 20 20 65 72  72 2e 70 2c 20 65 72 72  |.     err.p, err|
00007e50  2e 6c 20 3a 3d 20 4c 65  76 65 6c 28 29 2c 20 65  |.l := Level(), e|
00007e60  78 69 74 0a 0a 20 20 20  49 46 20 78 3d 30 20 54  |xit..   IF x=0 T|
00007e70  48 45 4e 0a 20 20 20 24  28 20 57 72 69 74 65 53  |HEN.   $( WriteS|
00007e80  28 22 6e 69 6c 22 29 3b  20 52 45 54 55 52 4e 20  |("nil"); RETURN |
00007e90  24 29 0a 0a 20 20 20 49  46 20 53 6d 61 6c 6c 4e  |$)..   IF SmallN|
00007ea0  75 6d 62 65 72 28 78 29  20 54 48 45 4e 0a 20 20  |umber(x) THEN.  |
00007eb0  20 24 28 20 57 72 69 74  65 4e 28 78 29 3b 20 52  | $( WriteN(x); R|
00007ec0  45 54 55 52 4e 20 24 29  0a 0a 20 20 20 53 57 49  |ETURN $)..   SWI|
00007ed0  54 43 48 4f 4e 20 68 31  21 78 20 49 4e 54 4f 0a  |TCHON h1!x INTO.|
00007ee0  20 20 20 24 28 20 43 41  53 45 20 73 2e 6e 75 6d  |   $( CASE s.num|
00007ef0  62 65 72 3a 0a 09 20 57  72 69 74 65 4e 28 68 32  |ber:.. WriteN(h2|
00007f00  21 78 29 0a 09 20 52 45  54 55 52 4e 0a 20 20 20  |!x).. RETURN.   |
00007f10  20 20 20 43 41 53 45 20  73 2e 66 63 6f 6e 73 74  |   CASE s.fconst|
00007f20  3a 0a 09 20 57 72 69 74  65 46 28 22 25 6e 45 25  |:.. WriteF("%nE%|
00007f30  6e 22 2c 20 68 32 21 78  2c 20 68 33 21 78 29 3b  |n", h2!x, h3!x);|
00007f40  0a 09 20 52 45 54 55 52  4e 0a 0a 20 20 20 20 20  |.. RETURN..     |
00007f50  20 43 41 53 45 20 73 2e  6e 61 6d 65 3a 0a 09 20  | CASE s.name:.. |
00007f60  57 72 69 74 65 53 28 78  2b 32 29 0a 09 20 52 45  |WriteS(x+2).. RE|
00007f70  54 55 52 4e 0a 0a 20 20  20 20 20 20 43 41 53 45  |TURN..      CASE|
00007f80  20 73 2e 73 74 72 69 6e  67 3a 0a 09 20 57 72 69  | s.string:.. Wri|
00007f90  74 65 46 28 22 2a 22 25  53 2a 22 22 2c 78 2b 31  |teF("*"%S*"",x+1|
00007fa0  29 0a 09 20 52 45 54 55  52 4e 0a 0a 20 20 20 20  |).. RETURN..    |
00007fb0  20 20 43 41 53 45 20 73  2e 73 65 6d 69 63 6f 6c  |  CASE s.semicol|
00007fc0  6f 6e 6c 69 73 74 3a 0a  20 20 20 20 20 20 43 41  |onlist:.      CA|
00007fd0  53 45 20 73 2e 63 6f 6d  6d 61 6c 69 73 74 3a 0a  |SE s.commalist:.|
00007fe0  09 20 73 69 7a 65 20 3a  3d 20 68 32 21 78 2b 32  |. size := h2!x+2|
00007ff0  0a 09 20 67 6f 74 6f 20  6f 75 74 0a 20 20 20 20  |.. goto out.    |
00008000  20 20 43 41 53 45 20 73  2e 66 6f 72 3a 0a 09 20  |  CASE s.for:.. |
00008010  73 69 7a 65 20 3a 3d 20  73 69 7a 65 2b 32 0a 0a  |size := size+2..|
00008020  20 20 20 20 20 20 43 41  53 45 20 73 2e 63 6f 6e  |      CASE s.con|
00008030  64 3a 43 41 53 45 20 73  2e 66 6e 64 65 66 3a 43  |d:CASE s.fndef:C|
00008040  41 53 45 20 73 2e 72 74  64 65 66 3a 0a 20 20 20  |ASE s.rtdef:.   |
00008050  20 20 20 43 41 53 45 20  73 2e 74 65 73 74 3a 0a  |   CASE s.test:.|
00008060  09 20 73 69 7a 65 20 3a  3d 20 73 69 7a 65 2b 31  |. size := size+1|
00008070  0a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 6e  |..      CASE s.n|
00008080  65 65 64 73 3a 43 41 53  45 20 73 2e 73 65 63 74  |eeds:CASE s.sect|
00008090  69 6f 6e 3a 43 41 53 45  20 73 2e 76 65 63 61 70  |ion:CASE s.vecap|
000080a0  3a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 62  |:.      CASE s.b|
000080b0  79 74 65 61 70 3a 43 41  53 45 20 73 2e 66 6e 61  |yteap:CASE s.fna|
000080c0  70 3a 43 41 53 45 20 73  2e 6d 75 6c 74 3a 0a 20  |p:CASE s.mult:. |
000080d0  20 20 20 20 20 43 41 53  45 20 73 2e 64 69 76 3a  |     CASE s.div:|
000080e0  43 41 53 45 20 73 2e 72  65 6d 3a 43 41 53 45 20  |CASE s.rem:CASE |
000080f0  73 2e 70 6c 75 73 3a 43  41 53 45 20 73 2e 6d 69  |s.plus:CASE s.mi|
00008100  6e 75 73 3a 0a 20 20 20  20 20 20 43 41 53 45 20  |nus:.      CASE |
00008110  73 2e 65 71 3a 43 41 53  45 20 73 2e 6e 65 3a 43  |s.eq:CASE s.ne:C|
00008120  41 53 45 20 73 2e 6c 73  3a 43 41 53 45 20 73 2e  |ASE s.ls:CASE s.|
00008130  67 72 3a 0a 20 20 20 20  20 20 43 41 53 45 20 73  |gr:.      CASE s|
00008140  2e 6c 65 3a 43 41 53 45  20 73 2e 67 65 3a 43 41  |.le:CASE s.ge:CA|
00008150  53 45 20 73 2e 6c 73 68  69 66 74 3a 43 41 53 45  |SE s.lshift:CASE|
00008160  20 73 2e 72 73 68 69 66  74 3a 0a 20 20 20 20 20  | s.rshift:.     |
00008170  20 43 41 53 45 20 73 2e  6c 6c 65 3a 43 41 53 45  | CASE s.lle:CASE|
00008180  20 73 2e 6c 67 65 3a 43  41 53 45 20 73 2e 6c 6c  | s.lge:CASE s.ll|
00008190  73 3a 43 41 53 45 20 73  2e 6c 67 72 3a 0a 20 20  |s:CASE s.lgr:.  |
000081a0  20 20 20 20 43 41 53 45  20 73 2e 66 6d 75 6c 74  |    CASE s.fmult|
000081b0  3a 43 41 53 45 20 73 2e  66 64 69 76 3a 43 41 53  |:CASE s.fdiv:CAS|
000081c0  45 20 73 2e 66 70 6c 75  73 3a 43 41 53 45 20 73  |E s.fplus:CASE s|
000081d0  2e 66 6d 69 6e 75 73 3a  0a 20 20 20 20 20 20 43  |.fminus:.      C|
000081e0  41 53 45 20 73 2e 66 65  71 3a 43 41 53 45 20 73  |ASE s.feq:CASE s|
000081f0  2e 66 6e 65 3a 43 41 53  45 20 73 2e 66 6c 73 3a  |.fne:CASE s.fls:|
00008200  43 41 53 45 20 73 2e 66  67 72 3a 0a 20 20 20 20  |CASE s.fgr:.    |
00008210  20 20 43 41 53 45 20 73  2e 66 6c 65 3a 43 41 53  |  CASE s.fle:CAS|
00008220  45 20 73 2e 66 67 65 3a  0a 20 20 20 20 20 20 43  |E s.fge:.      C|
00008230  41 53 45 20 73 2e 6c 6f  67 61 6e 64 3a 43 41 53  |ASE s.logand:CAS|
00008240  45 20 73 2e 6c 6f 67 6f  72 3a 43 41 53 45 20 73  |E s.logor:CASE s|
00008250  2e 65 71 76 3a 43 41 53  45 20 73 2e 6e 65 71 76  |.eqv:CASE s.neqv|
00008260  3a 0a 20 20 20 20 20 20  43 41 53 45 20 73 2e 63  |:.      CASE s.c|
00008270  6f 6d 6d 61 3a 43 41 53  45 20 73 2e 61 6e 64 3a  |omma:CASE s.and:|
00008280  43 41 53 45 20 73 2e 76  61 6c 64 65 66 3a 0a 20  |CASE s.valdef:. |
00008290  20 20 20 20 20 43 41 53  45 20 73 2e 76 65 63 64  |     CASE s.vecd|
000082a0  65 66 3a 43 41 53 45 20  73 2e 61 73 73 3a 43 41  |ef:CASE s.ass:CA|
000082b0  53 45 20 73 2e 72 74 61  70 3a 43 41 53 45 20 73  |SE s.rtap:CASE s|
000082c0  2e 63 6f 6c 6f 6e 3a 0a  20 20 20 20 20 20 43 41  |.colon:.      CA|
000082d0  53 45 20 73 2e 69 66 3a  43 41 53 45 20 73 2e 75  |SE s.if:CASE s.u|
000082e0  6e 6c 65 73 73 3a 43 41  53 45 20 73 2e 77 68 69  |nless:CASE s.whi|
000082f0  6c 65 3a 43 41 53 45 20  73 2e 75 6e 74 69 6c 3a  |le:CASE s.until:|
00008300  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 72 65  |.      CASE s.re|
00008310  70 65 61 74 77 68 69 6c  65 3a 43 41 53 45 20 73  |peatwhile:CASE s|
00008320  2e 72 65 70 65 61 74 75  6e 74 69 6c 3a 43 41 53  |.repeatuntil:CAS|
00008330  45 20 73 2e 6c 65 74 3a  0a 20 20 20 20 20 20 43  |E s.let:.      C|
00008340  41 53 45 20 73 2e 73 77  69 74 63 68 6f 6e 3a 43  |ASE s.switchon:C|
00008350  41 53 45 20 73 2e 63 61  73 65 3a 0a 20 20 20 20  |ASE s.case:.    |
00008360  20 20 43 41 53 45 20 73  2e 6d 61 6e 69 66 65 73  |  CASE s.manifes|
00008370  74 3a 43 41 53 45 20 73  2e 73 74 61 74 69 63 3a  |t:CASE s.static:|
00008380  43 41 53 45 20 73 2e 67  6c 6f 62 61 6c 3a 0a 09  |CASE s.global:..|
00008390  20 73 69 7a 65 20 3a 3d  20 73 69 7a 65 2b 31 0a  | size := size+1.|
000083a0  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 76 61  |.      CASE s.va|
000083b0  6c 6f 66 3a 43 41 53 45  20 73 2e 6c 76 3a 43 41  |lof:CASE s.lv:CA|
000083c0  53 45 20 73 2e 72 76 3a  43 41 53 45 20 73 2e 6e  |SE s.rv:CASE s.n|
000083d0  65 67 3a 0a 20 20 20 20  20 20 43 41 53 45 20 73  |eg:.      CASE s|
000083e0  2e 6e 6f 74 3a 43 41 53  45 20 73 2e 61 62 73 3a  |.not:CASE s.abs:|
000083f0  43 41 53 45 20 73 2e 74  61 62 6c 65 3a 43 41 53  |CASE s.table:CAS|
00008400  45 20 73 2e 67 6f 74 6f  3a 0a 20 20 20 20 20 20  |E s.goto:.      |
00008410  43 41 53 45 20 73 2e 66  6e 65 67 3a 43 41 53 45  |CASE s.fneg:CASE|
00008420  20 73 2e 66 61 62 73 3a  43 41 53 45 20 73 2e 66  | s.fabs:CASE s.f|
00008430  69 78 3a 43 41 53 45 20  73 2e 66 6c 6f 61 74 3a  |ix:CASE s.float:|
00008440  0a 20 20 20 20 20 20 43  41 53 45 20 73 2e 72 65  |.      CASE s.re|
00008450  73 75 6c 74 69 73 3a 43  41 53 45 20 73 2e 72 65  |sultis:CASE s.re|
00008460  70 65 61 74 3a 43 41 53  45 20 73 2e 64 65 66 61  |peat:CASE s.defa|
00008470  75 6c 74 3a 0a 20 20 20  20 20 20 43 41 53 45 20  |ult:.      CASE |
00008480  73 2e 63 61 72 3a 43 41  53 45 20 73 2e 63 64 72  |s.car:CASE s.cdr|
00008490  3a 43 41 53 45 20 73 2e  76 63 61 72 3a 43 41 53  |:CASE s.vcar:CAS|
000084a0  45 20 73 2e 76 63 64 72  3a 0a 09 20 73 69 7a 65  |E s.vcdr:.. size|
000084b0  20 3a 3d 20 73 69 7a 65  2b 31 0a 0a 20 20 20 20  | := size+1..    |
000084c0  20 20 43 41 53 45 20 73  2e 6c 6f 6f 70 3a 43 41  |  CASE s.loop:CA|
000084d0  53 45 20 73 2e 62 72 65  61 6b 3a 43 41 53 45 20  |SE s.break:CASE |
000084e0  73 2e 72 65 74 75 72 6e  3a 0a 20 20 20 20 20 20  |s.return:.      |
000084f0  43 41 53 45 20 73 2e 66  69 6e 69 73 68 3a 43 41  |CASE s.finish:CA|
00008500  53 45 20 73 2e 65 6e 64  63 61 73 65 3a 43 41 53  |SE s.endcase:CAS|
00008510  45 20 73 2e 74 72 75 65  3a 0a 20 20 20 20 20 20  |E s.true:.      |
00008520  43 41 53 45 20 73 2e 66  61 6c 73 65 3a 43 41 53  |CASE s.false:CAS|
00008530  45 20 73 2e 71 75 65 72  79 3a 0a 20 20 20 20 20  |E s.query:.     |
00008540  20 43 41 53 45 20 73 2e  6e 69 6c 3a 0a 20 20 20  | CASE s.nil:.   |
00008550  20 20 20 44 45 46 41 55  4c 54 3a 0a 09 20 73 69  |   DEFAULT:.. si|
00008560  7a 65 20 3a 3d 20 73 69  7a 65 2b 31 0a 0a 6f 75  |ze := size+1..ou|
00008570  74 3a 09 20 49 46 20 6e  3d 64 20 54 48 45 4e 0a  |t:. IF n=d THEN.|
00008580  09 20 24 28 20 57 72 69  74 65 53 28 22 65 74 63  |. $( WriteS("etc|
00008590  22 29 3b 20 52 45 54 55  52 4e 20 24 29 0a 09 20  |"); RETURN $).. |
000085a0  57 72 69 74 65 53 28 22  6f 70 22 29 0a 09 20 57  |WriteS("op").. W|
000085b0  72 69 74 65 4e 28 68 31  21 78 29 0a 09 20 46 4f  |riteN(h1!x).. FO|
000085c0  52 20 69 20 3d 20 32 20  54 4f 20 73 69 7a 65 20  |R i = 2 TO size |
000085d0  44 4f 0a 09 20 24 28 20  4e 65 77 4c 69 6e 65 28  |DO.. $( NewLine(|
000085e0  29 0a 09 20 20 20 20 46  4f 52 20 6a 20 3d 20 30  |)..    FOR j = 0|
000085f0  20 54 4f 20 6e 2d 31 20  44 4f 20 57 72 69 74 65  | TO n-1 DO Write|
00008600  53 28 76 21 6a 29 0a 09  20 20 20 20 57 72 69 74  |S(v!j)..    Writ|
00008610  65 53 28 22 2a 2a 2d 22  29 0a 09 20 20 20 20 76  |eS("**-")..    v|
00008620  21 6e 20 3a 3d 20 69 3d  20 73 69 7a 65 2d 3e 20  |!n := i= size-> |
00008630  22 20 20 22 2c 22 21 20  22 0a 09 20 20 20 20 50  |"  ","! "..    P|
00008640  4c 69 73 74 28 68 31 21  28 78 2b 69 2d 31 29 2c  |List(h1!(x+i-1),|
00008650  20 6e 2b 31 2c 20 64 29  0a 09 20 24 29 0a 20 20  | n+1, d).. $).  |
00008660  20 24 29 0a 65 78 69 74  3a 0a 24 29 0a 0a        | $).exit:.$)..|
0000866e