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