Edinburgh IMP77 Compiler - Version 8.4 LANG 0000 PUSHS "\n" DEF V_0001 SNL + 0x0031 + 0x0001 + 0x0012 INIT 1 DEF V_0002 REM + 0x0018 + 0x0001 + 0x003e START DEF V_0003 P + 0x0011 + 0x0001 + 0x0000 DEF V_0004 Q + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0003 READSYMBOL + 0x0007 + 0x0000 + 0x002e START DEF V_0004 P + 0x0002 + 0x0000 + 0x0000 FINISH DEF V_0004 FLOAT + 0x0028 + 0x0001 + 0x003e START DEF V_0005 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0005 TOSTRING + 0x0038 + 0x0001 + 0x003e START DEF V_0006 P + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0006 SUBSTRING + 0x0038 + 0x00ff + 0x003e START DEF V_0007 S + 0x0031 + 0x00ff + 0x0000 DEF V_0008 F + 0x0011 + 0x0001 + 0x0000 DEF V_0009 T + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0007 FREESPACE + 0x0018 + 0x0001 + 0x003e START FINISH DEF V_0008 SVC + 0x0007 + 0x0000 + 0x002e START DEF V_0009 N + 0x0011 + 0x0001 + 0x0000 DEF V_000a R + 0x0042 + 0x0000 + 0x0000 FINISH DEF V_0009 ADDR + 0x0018 + 0x0001 + 0x003e START DEF V_000a P + 0x0002 + 0x0000 + 0x0000 FINISH DEF V_000a INTEGER + 0x0019 + 0x0001 + 0x002e START DEF V_000b N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_000b SHORTINTEGER + 0x0019 + 0x0003 + 0x002e START DEF V_000c N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_000c BYTEINTEGER + 0x0019 + 0x0002 + 0x002e START DEF V_000d N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_000d STRING + 0x0039 + 0x0000 + 0x002e START DEF V_000e N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_000e RECORD + 0x0049 + 0x0000 + 0x002e START DEF V_000f N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_000f REAL + 0x0029 + 0x0001 + 0x002e START DEF V_0010 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0010 LONGREAL + 0x0029 + 0x0004 + 0x002e START DEF V_0011 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0011 LENGTH + 0x0019 + 0x0002 + 0x002e START DEF V_0012 S + 0x0031 + 0x00ff + 0x0000 FINISH DEF V_0012 CHARNO + 0x0019 + 0x0002 + 0x002e START DEF V_0013 S + 0x0031 + 0x00ff + 0x0000 DEF V_0014 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0013 INT + 0x0018 + 0x0001 + 0x003e START DEF V_0014 X + 0x0021 + 0x0001 + 0x0000 FINISH DEF V_0014 INTPT + 0x0018 + 0x0001 + 0x003e START DEF V_0015 X + 0x0021 + 0x0001 + 0x0000 FINISH DEF V_0015 IOCP + 0x0007 + 0x0000 + 0x002e START DEF V_0016 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0016 TYPEOF + 0x0018 + 0x0001 + 0x003e START DEF V_0017 N + 0x0002 + 0x0000 + 0x0000 FINISH DEF V_0017 SIZEOF + 0x0018 + 0x0001 + 0x003e START DEF V_0018 N + 0x0002 + 0x0000 + 0x0000 FINISH DEF V_0018 FRACPT + 0x0028 + 0x0001 + 0x003e START DEF V_0019 X + 0x0021 + 0x0001 + 0x0000 FINISH DEF V_0019 PROMPT + 0x0007 + 0x0000 + 0x002b START DEF V_001a S + 0x0031 + 0x000f + 0x0000 FINISH DEF V_001a NEXTSYMBOL + 0x0018 + 0x0001 + 0x003b START FINISH DEF V_001b SKIPSYMBOL + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_001c PRINTSYMBOL + 0x0007 + 0x0000 + 0x002b START DEF V_001d SYM + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_001d PRINTSTRING + 0x0007 + 0x0000 + 0x002b START DEF V_001e S + 0x0031 + 0x00ff + 0x0000 FINISH DEF V_001e WRITE + 0x0007 + 0x0000 + 0x002b START DEF V_001f V + 0x0011 + 0x0001 + 0x0000 DEF V_0020 P + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_001f SELECTINPUT + 0x0007 + 0x0000 + 0x002b START DEF V_0020 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0020 SELECTOUTPUT + 0x0007 + 0x0000 + 0x002b START DEF V_0021 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0021 OPENINPUT + 0x0007 + 0x0000 + 0x002b START DEF V_0022 N + 0x0011 + 0x0001 + 0x0000 DEF V_0023 FD + 0x0031 + 0x001f + 0x0000 FINISH DEF V_0022 OPENOUTPUT + 0x0007 + 0x0000 + 0x002b START DEF V_0023 N + 0x0011 + 0x0001 + 0x0000 DEF V_0024 FD + 0x0031 + 0x001f + 0x0000 FINISH DEF V_0023 CLOSEINPUT + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_0024 CLOSEOUTPUT + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_0025 RESETINPUT + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_0026 RESETOUTPUT + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_0027 TIME + 0x0038 + 0x0008 + 0x003b START FINISH DEF V_0028 DATE + 0x0038 + 0x0009 + 0x003b START FINISH DEF V_0029 CPUTIME + 0x0018 + 0x0001 + 0x003b START FINISH DEF V_002a COMREG + 0x0019 + 0x0001 + 0x002b START DEF V_002b N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_002b READ + 0x0007 + 0x0000 + 0x002b START DEF V_002c X + 0x0002 + 0x0000 + 0x0000 FINISH DEF V_002c PRINT + 0x0007 + 0x0000 + 0x002b START DEF V_002d VAL + 0x0021 + 0x0001 + 0x0000 DEF V_002e BEFORE + 0x0011 + 0x0001 + 0x0000 DEF V_002f AFTER + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_002d PRINTFL + 0x0007 + 0x0000 + 0x002b START DEF V_002e VAL + 0x0021 + 0x0001 + 0x0000 DEF V_002f PLACES + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_002e SPACE + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_002f SPACES + 0x0007 + 0x0000 + 0x002b START DEF V_0030 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0030 NEWLINE + 0x0007 + 0x0000 + 0x002b START FINISH DEF V_0031 NEWLINES + 0x0007 + 0x0000 + 0x002b START DEF V_0032 N + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0032 FILEFM + 0x0044 + 0x0032 + 0x0000 START DEF V_0000 UNIT + 0x0011 + 0x0001 + 0x0000 DEF V_0000 OWNER + 0x0011 + 0x0001 + 0x0000 DEF V_0000 N1 + 0x0011 + 0x0001 + 0x0000 DEF V_0000 N2 + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0033 EVENTFM + 0x0044 + 0x0033 + 0x0000 START DEF V_0000 EVENT + 0x0011 + 0x0001 + 0x0000 DEF V_0000 SUB + 0x0011 + 0x0001 + 0x0000 DEF V_0000 EXTRA + 0x0011 + 0x0001 + 0x0000 DEF V_0000 MESSAGE + 0x0031 + 0x003f + 0x0000 DEF V_0000 PC + 0x0011 + 0x0001 + 0x0000 DEF V_0000 X + 0x0011 + 0x0001 + 0x0000 FINISH DEF V_0034 EVENT + 0x0041 + 0x0033 + 0x002b LINE 20 1 !!This version of ECCE, derived from a paper copy believed to 2 !!date from 1975, removes PDP9/15 machine code, and other 3 !!IMP9/15 system dependencies, and I'm hopeful that as a result 4 !!it might well work if compiled with a generic Imp compiler. 5 6 !!RWT Feb 2002 7 8 !!Code slightly rearranged to fit the model of Peter Stephen's Imp to C 9 !!translator. This now compiles and runs exactly as on the pdp9/15 10 !!Remember to run it with redirected input, eg ecce < file.txt > file2.txt 11 12 !!The I/O library currently assumes you are running on Unix. 13 !!NOTE: There IS a bug in this implementation. Lines of more 14 !!than 120 characters have a newline inserted at the 120th character 15 !!on output. This *may* be an original bug rather than an artifact 16 !!of the translation or run-time library.. 17 18 !!GT 02 Mar 2002 19 20 %external %integer outstream DEF V_0035 OUTSTREAM + 0x0011 + 0x0001 + 0x0023 INIT 1 LINE 22 21 22 %owninteger in=1; !current input stream PUSHI #0x00000001 DEF V_0036 IN + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 23 23 %constinteger min=1; !main input stream LINE 24 24 %constinteger mout=1; !main output stream LINE 25 25 %constinteger sin=2; !secondary input stream LINE 26 26 %constinteger sextra=122; !extra buff for sin LINE 27 27 %constinteger size=30000; !of edit buffer (bytes) LINE 28 28 %owninteger mon=0; !monitor indic PUSHI #0x00000000 DEF V_0037 MON + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 29 29 %owninteger print1=0,print2=0; !print indicators PUSHI #0x00000000 DEF V_0038 PRINT1 + 0x0011 + 0x0001 + 0x0021 INIT 1 PUSHI #0x00000000 DEF V_0039 PRINT2 + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 30 30 %constinteger stop=-5000; !loop stop (const) LINE 31 31 %owninteger i,j,k,pp1,sym DEF V_003a I + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_003b J + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_003c K + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_003d PP1 + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_003e SYM + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 32 32 %owninteger code; !command code letter DEF V_003f CODE + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 33 33 %owninteger text; !text pointer DEF V_0040 TEXT + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 34 34 %owninteger num; !repetition number DEF V_0041 NUM + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 35 35 %ownintegername mainfp; ! == fp or mfp (for sin) DEF V_0042 MAINFP + 0x0012 + 0x0001 + 0x0021 INIT 1 LINE 36 36 %constinteger cbase=1,tbase=120 LINE 37 37 %ownintegerarray c(cbase:tbase); !command -> <- text PUSHI #0x00000001 PUSHI #0x00000078 BOUNDS DEF V_0043 C + 0x001b + 0x0001 + 0x0121 INIT 120 LINE 42 38 ! each command unit -- letter, parenthesis or comma -- is 39 ! represented by a trio: code(+lim) text num 40 ! in the case of parentheses and commas 'text' is a pointer 41 ! to another command unit (not to a text string) 42 %owninteger ci; !command index (ad) DEF V_0044 CI + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 43 43 %owninteger ti; !text index (ad) DEF V_0045 TI + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 44 44 %owninteger cmax=0; !command max (ad) PUSHI #0x00000000 DEF V_0046 CMAX + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 45 45 %ownintegerarray stored(1:192); !defs of x,y,z PUSHI #0x00000001 PUSHI #0x000000c0 BOUNDS DEF V_0047 STORED + 0x001b + 0x0001 + 0x0121 INIT 192 LINE 46 46 %owninteger pos1=0, pos2=0, pos3=0 PUSHI #0x00000000 DEF V_0048 POS1 + 0x0011 + 0x0001 + 0x0021 INIT 1 PUSHI #0x00000000 DEF V_0049 POS2 + 0x0011 + 0x0001 + 0x0021 INIT 1 PUSHI #0x00000000 DEF V_004a POS3 + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 47 47 %ownbyteintegerarray byte(1:size) PUSHI #0x00000001 PUSHI #0x00007530 BOUNDS DEF V_004b BYTE + 0x001b + 0x0002 + 0x0121 INIT 30000 LINE 48 48 %owninteger top = 2; !top of buff (index) PUSHI #0x00000002 DEF V_004c TOP + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 49 49 %owninteger bot = size-sextra; !bottom of buff (index) PUSHI #0x000074b6 DEF V_004d BOT + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 50 50 %owninteger lbeg; !line start (index) DEF V_004e LBEG + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 51 51 %owninteger pp; !previous pointer (index) DEF V_004f PP + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 52 52 %owninteger fp=0; !file pointer (index) PUSHI #0x00000000 DEF V_0050 FP + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 53 53 %owninteger lend; !line end (index) DEF V_0051 LEND + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 54 54 %owninteger fend; !end of file in buff (index) DEF V_0052 FEND + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 55 55 %owninteger ms=0; !match start (index) PUSHI #0x00000000 DEF V_0053 MS + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 56 56 %owninteger ml=0; !match limit (index) PUSHI #0x00000000 DEF V_0054 ML + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 65 57 ! significance of file pointers: 58 ! [nl] o n e nl t w . . . o nl n e x t nl . . nl l a s t nl [nl] 59 ! ! ! ! ! ! ! 60 ! t l p f l f 61 ! o b p p e e 62 ! p e n n 63 ! g d d 64 65 %owninteger type,chain; !command input vars DEF V_0055 TYPE + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_0056 CHAIN + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 66 66 %owninteger pend=0; !ditto PUSHI #0x00000000 DEF V_0057 PEND + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 68 67 68 %routine prompt(%string(1) s); ! Emulating pdp9/15 routine DEF V_0058 PROMPT + 0x0007 + 0x0000 + 0x0000 START DEF V_0059 S + 0x0031 + 0x0001 + 0x0000 FINISH LINE 69 69 %integer oldstream, c DEF V_005a OLDSTREAM + 0x0011 + 0x0001 + 0x0000 DEF V_005b C + 0x0011 + 0x0001 + 0x0000 LINE 70 70 c = charno(s, 1) PUSH V_005b PUSH V_0012 PUSH V_0059 ASSPAR PUSHI #0x00000001 ASSPAR CALL ASSVAL LINE 71 71 %if c # 0 %then %start ; ! c = 0 is supposed to flush output on the 9/15 PUSH V_005b PUSHI #0x00000000 JUMPIF = L_0004 LINE 72 72 oldstream = outstream PUSH V_005a PUSH V_0035 ASSVAL LINE 73 73 select output(0) PUSH V_0020 PUSHI #0x00000000 ASSPAR CALL LINE 74 74 print symbol(c) PUSH V_001c PUSH V_005b ASSPAR CALL LINE 75 75 select output(oldstream) PUSH V_0020 PUSH V_005a ASSPAR CALL LINE 76 76 %finish LOCATE L_0004 LINE 77 77 %end END LINE 79 78 79 %routine load pp(%integer k); !!!also increments pp DEF V_0059 LOADPP + 0x0007 + 0x0000 + 0x0000 START DEF V_005a K + 0x0011 + 0x0001 + 0x0000 FINISH LINE 80 80 byte(pp) = k; pp = pp+1 PUSH V_004b PUSH V_004f ACCESS PUSH V_005a ASSVAL LINE 80 PUSH V_004f PUSH V_004f PUSHI #0x00000001 ADD ASSVAL LINE 81 81 %end END LINE 83 82 83 %routine load fp(%integer k) DEF V_005a LOADFP + 0x0007 + 0x0000 + 0x0000 START DEF V_005b K + 0x0011 + 0x0001 + 0x0000 FINISH LINE 84 84 byte(fp) = k PUSH V_004b PUSH V_0050 ACCESS PUSH V_005b ASSVAL LINE 85 85 %end END LINE 87 86 87 %routine left star DEF V_005b LEFTSTAR + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 88 88 %cycle LOCATE L_0003 LINE 89 89 %return %if pp = lbeg PUSH V_004f PUSH V_004e JUMPIF # L_0007 RETURN LOCATE L_0007 LINE 90 90 fp = fp-1; pp = pp-1 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 SUB ASSVAL LINE 90 PUSH V_004f PUSH V_004f PUSHI #0x00000001 SUB ASSVAL LINE 91 91 load fp(byte(pp)) PUSH V_005a PUSH V_004b PUSH V_004f ACCESS ASSPAR CALL LINE 92 92 %repeat REPEAT L_0003 LINE 93 93 %end END LINE 95 94 95 %routine right star DEF V_005c RIGHTSTAR + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 96 96 %cycle LOCATE L_0003 LINE 97 97 %return %if fp = lend PUSH V_0050 PUSH V_0051 JUMPIF # L_0007 RETURN LOCATE L_0007 LINE 98 98 load pp(byte(fp)) PUSH V_0059 PUSH V_004b PUSH V_0050 ACCESS ASSPAR CALL LINE 99 99 fp = fp+1 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 100 100 %repeat REPEAT L_0003 LINE 101 101 %end END LINE 103 102 103 %ownintegerarray symtype(33:95) = %c PUSHI #0x00000021 PUSHI #0x0000005f BOUNDS DEF V_005d SYMTYPE + 0x001b + 0x0001 + 0x0121 PUSHI #0x00000040 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x0000000b INIT 1 PUSHI #0x00000009 INIT 1 PUSHI #0x00000040 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x0000000c INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000000 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000001 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000040 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x00000012 INIT 1 PUSHI #0x00000005 INIT 1 PUSHI #0x00000008 INIT 1 PUSHI #0x00000034 INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x00000006 INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x00000038 INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x00000032 INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x00000016 INIT 1 PUSHI #0x00000005 INIT 1 PUSHI #0x00000005 INIT 1 PUSHI #0x00000006 INIT 1 PUSHI #0x00000002 INIT 1 PUSHI #0x00000020 INIT 1 PUSHI #0x00000020 INIT 1 PUSHI #0x00000020 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x0000000a INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 PUSHI #0x00000003 INIT 1 LINE 113 104 64, 3, 3, 3, 2, 3, 3,11, 9,64, 3,12, 2, 3, 3, 105 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 3, 3, 3,64, 106 3, 2,10,18, 5, 8,52,10, 2, 6,10,10,10,56, 2, 2, 107 10,50,10,22, 5, 5, 6, 2,32,32,32, 3,10, 3, 3, 3 108 ! ! " # $ % & ' ( ) * + , - . / 109 ! 0 1 2 3 4 5 6 7 8 9 : < = > ? 110 ! @ A B C D E F G H I J K L M N O 111 ! P Q R S T U V W X Y Z [ \ ] ^ _ 112 113 %routine read sym DEF V_005e READSYM + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 114 114 %if pend # 0 %then sym=pend %and pend=0 %else %start PUSH V_0057 PUSHI #0x00000000 JUMPIF = L_0004 PUSH V_003e PUSH V_0057 ASSVAL PUSH V_0057 PUSHI #0x00000000 ASSVAL GOTO L_0003 LOCATE L_0004 LINE 115 115 %while pos3 # 0 %cycle LOCATE L_0006 PUSH V_004a PUSHI #0x00000000 JUMPIF = L_0007 LINE 116 116 sym = stored(pos3); pos3 = pos3+1 PUSH V_003e PUSH V_0047 PUSH V_004a ACCESS ASSVAL LINE 116 PUSH V_004a PUSH V_004a PUSHI #0x00000001 ADD ASSVAL LINE 117 117 %return %unless sym = nl PUSH V_003e PUSHI #0x0000000a JUMPIF = L_000a RETURN LOCATE L_000a LINE 118 118 pos3 = pos2; pos2 = pos1; pos1 = 0 PUSH V_004a PUSH V_0049 ASSVAL LINE 118 PUSH V_0049 PUSH V_0048 ASSVAL LINE 118 PUSH V_0048 PUSHI #0x00000000 ASSVAL LINE 119 119 %repeat REPEAT L_0006 LOCATE L_0007 LINE 120 120 read symbol(sym) PUSH V_0003 PUSH V_003e ASSPAR CALL LINE 121 121 %finish LOCATE L_0003 LINE 122 122 %end END LINE 124 123 124 %routine read item DEF V_005f READITEM + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 125 125 type = 1 PUSH V_0055 PUSHI #0x00000001 ASSVAL LINE 126 126 %cycle LOCATE L_0003 LINE 127 127 read sym %until sym # ' ' LOCATE L_0006 PUSH V_005e CALL PUSH V_003e PUSHI #0x00000020 JUMPIF # L_0007 REPEAT L_0006 LOCATE L_0007 LINE 128 128 %return %if sym < 32; !nl PUSH V_003e PUSHI #0x00000020 JUMPIF >= L_0007 RETURN LOCATE L_0007 LINE 129 129 sym = sym-32 %if sym >= 96; !ensure upper case PUSH V_003e PUSHI #0x00000060 JUMPIF < L_0007 PUSH V_003e PUSH V_003e PUSHI #0x00000020 SUB ASSVAL LOCATE L_0007 LINE 130 130 type = symtype(sym) PUSH V_0055 PUSH V_005d PUSH V_003e ACCESS ASSVAL LINE 131 131 %return %unless type&15 = 0 PUSH V_0055 PUSHI #0x0000000f AND PUSHI #0x00000000 JUMPIF = L_0007 RETURN LOCATE L_0007 LINE 132 132 %exit %unless type=32 PUSH V_0055 PUSHI #0x00000020 JUMPIF = L_0007 GOTO L_0004 LOCATE L_0007 LINE 133 133 pos1 = pos2; pos2 = pos3 PUSH V_0048 PUSH V_0049 ASSVAL LINE 133 PUSH V_0049 PUSH V_004a ASSVAL LINE 134 134 pos3 = (sym-'X')<<6+1 PUSH V_004a PUSH V_003e PUSHI #0x00000058 SUB PUSHI #0x00000006 LSH PUSHI #0x00000001 ADD ASSVAL LINE 135 135 %repeat REPEAT L_0003 LOCATE L_0004 LINE 136 136 %if type = 0 %start PUSH V_0055 PUSHI #0x00000000 JUMPIF # L_0004 LINE 137 137 num = sym-'0' PUSH V_0041 PUSH V_003e PUSHI #0x00000030 SUB ASSVAL LINE 138 138 %cycle LOCATE L_0006 LINE 139 139 read symbol(pend) PUSH V_0003 PUSH V_0057 ASSPAR CALL LINE 140 140 %exit %unless '0' <= pend <= '9' PUSHI #0x00000030 PUSH V_0057 JUMPIFD > L_000b PUSHI #0x00000039 JUMPIF <= L_000a LOCATE L_000b GOTO L_0007 LOCATE L_000a LINE 141 141 num = (num<<2+num)<<1-'0'+pend PUSH V_0041 PUSH V_0041 PUSHI #0x00000002 LSH PUSH V_0041 ADD PUSHI #0x00000001 LSH PUSHI #0x00000030 SUB PUSH V_0057 ADD ASSVAL LINE 142 142 %repeat REPEAT L_0006 LOCATE L_0007 LINE 143 143 %finish %else %start GOTO L_0003 LOCATE L_0004 LINE 144 144 type = 0 PUSH V_0055 PUSHI #0x00000000 ASSVAL LINE 145 145 num = 0; %return %if sym = '*' PUSH V_0041 PUSHI #0x00000000 ASSVAL LINE 145 PUSH V_003e PUSHI #0x0000002a JUMPIF # L_0007 RETURN LOCATE L_0007 LINE 146 146 num = stop+1; %return %if sym = '?' PUSH V_0041 PUSHI #0xffffec78 PUSHI #0x00000001 ADD ASSVAL LINE 146 PUSH V_003e PUSHI #0x0000003f JUMPIF # L_0007 RETURN LOCATE L_0007 LINE 147 147 num = stop; ! '!' PUSH V_0041 PUSHI #0xffffec78 ASSVAL LINE 148 148 %finish LOCATE L_0003 LINE 149 149 %end END LINE 151 150 151 %routine unchain DEF V_0060 UNCHAIN + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 152 152 %cycle LOCATE L_0003 LINE 153 153 text = chain; %return %if text = 0 PUSH V_0040 PUSH V_0056 ASSVAL LINE 153 PUSH V_0040 PUSHI #0x00000000 JUMPIF # L_0007 RETURN LOCATE L_0007 LINE 154 154 chain = c(text+1); c(text+1) = ci PUSH V_0056 PUSH V_0043 PUSH V_0040 PUSHI #0x00000001 ADD ACCESS ASSVAL LINE 154 PUSH V_0043 PUSH V_0040 PUSHI #0x00000001 ADD ACCESS PUSH V_0044 ASSVAL LINE 155 155 %repeat %until c(text) = 'X' PUSH V_0043 PUSH V_0040 ACCESS PUSHI #0x00000058 JUMPIF = L_0004 REPEAT L_0003 LOCATE L_0004 LINE 156 156 %end END LINE 158 157 158 %routine stack(%integer v) DEF V_0061 STACK + 0x0007 + 0x0000 + 0x0000 START DEF V_0062 V + 0x0011 + 0x0001 + 0x0000 FINISH LINE 159 159 c(ci) = v; ci = ci+1 PUSH V_0043 PUSH V_0044 ACCESS PUSH V_0062 ASSVAL LINE 159 PUSH V_0044 PUSH V_0044 PUSHI #0x00000001 ADD ASSVAL LINE 160 160 %end END LINE 162 161 162 %routine make space DEF V_0062 MAKESPACE + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 163 163 %integer k,p1,p2 DEF V_0063 K + 0x0011 + 0x0001 + 0x0000 DEF V_0064 P1 + 0x0011 + 0x0001 + 0x0000 DEF V_0065 P2 + 0x0011 + 0x0001 + 0x0000 LINE 164 164 %return %if mainfp-pp-240 > 0 PUSH V_0042 PUSH V_004f SUB PUSHI #0x000000f0 SUB PUSHI #0x00000000 JUMPIF <= L_0004 RETURN LOCATE L_0004 LINE 165 165 select output(mout) PUSH V_0020 PUSHI #0x00000001 ASSPAR CALL LINE 166 166 p1 = top; p2 = (p1+lbeg)>>1; !output about half PUSH V_0064 PUSH V_004c ASSVAL LINE 166 PUSH V_0065 PUSH V_0064 PUSH V_004e ADD PUSHI #0x00000001 RSH ASSVAL LINE 167 167 p2 = lbeg %if code = 'C'; !but all if closing PUSH V_003f PUSHI #0x00000043 JUMPIF # L_0004 PUSH V_0065 PUSH V_004e ASSVAL LOCATE L_0004 LINE 168 168 %monitor %and %stop %if p2 = top; !!!logical error PUSH V_0065 PUSH V_004c JUMPIF # L_0004 MONITOR STOP LOCATE L_0004 LINE 169 169 %cycle LOCATE L_0003 LINE 170 170 k = byte(p1); print symbol(k); p1 = p1+1 PUSH V_0063 PUSH V_004b PUSH V_0064 ACCESS ASSVAL LINE 170 PUSH V_001c PUSH V_0063 ASSPAR CALL LINE 170 PUSH V_0064 PUSH V_0064 PUSHI #0x00000001 ADD ASSVAL LINE 171 171 %repeat %until k = nl %and p1-p2 >= 0 PUSH V_0063 PUSHI #0x0000000a JUMPIF # L_0005 PUSH V_0064 PUSH V_0065 SUB PUSHI #0x00000000 JUMPIF >= L_0004 LOCATE L_0005 REPEAT L_0003 LOCATE L_0004 LINE 172 172 select output(0) PUSH V_0020 PUSHI #0x00000000 ASSPAR CALL LINE 173 173 lbeg = top+lbeg-p1; p2 = pp; pp = top PUSH V_004e PUSH V_004c PUSH V_004e ADD PUSH V_0064 SUB ASSVAL LINE 173 PUSH V_0065 PUSH V_004f ASSVAL LINE 173 PUSH V_004f PUSH V_004c ASSVAL LINE 174 174 %cycle LOCATE L_0003 LINE 175 175 %return %if p1 = p2 PUSH V_0064 PUSH V_0065 JUMPIF # L_0007 RETURN LOCATE L_0007 LINE 176 176 load pp(byte(p1)); p1 = p1+1 PUSH V_0059 PUSH V_004b PUSH V_0064 ACCESS ASSPAR CALL LINE 176 PUSH V_0064 PUSH V_0064 PUSHI #0x00000001 ADD ASSVAL LINE 177 177 %repeat REPEAT L_0003 LINE 178 178 %end END LINE 180 179 180 %routine read line DEF V_0063 READLINE + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 181 181 %integer k DEF V_0064 K + 0x0011 + 0x0001 + 0x0000 LINE 185 182 ! %on %event 9 %start 183 ! ->eof 184 ! %finish 185 %if fp # fend %start PUSH V_0050 PUSH V_0052 JUMPIF = L_0004 LINE 186 186 lend = fp PUSH V_0051 PUSH V_0050 ASSVAL LINE 187 187 lend = lend+1 %while byte(lend) # nl LOCATE L_0006 PUSH V_004b PUSH V_0051 ACCESS PUSHI #0x0000000a JUMPIF = L_0007 PUSH V_0051 PUSH V_0051 PUSHI #0x00000001 ADD ASSVAL REPEAT L_0006 LOCATE L_0007 LINE 188 188 %return RETURN LINE 189 189 %finish LOCATE L_0004 LINE 190 190 ms = 0; print1 = 0; print2 = 0 PUSH V_0053 PUSHI #0x00000000 ASSVAL LINE 190 PUSH V_0038 PUSHI #0x00000000 ASSVAL LINE 190 PUSH V_0039 PUSHI #0x00000000 ASSVAL LINE 191 191 select input(in) PUSH V_001f PUSH V_0036 ASSPAR CALL LINE 192 192 fp = bot-sextra+1 PUSH V_0050 PUSH V_004d PUSHI #0x0000007a SUB PUSHI #0x00000001 ADD ASSVAL LINE 193 193 %cycle LOCATE L_0003 LINE 194 194 %if fp # bot %then read symbol(k) %else k = nl PUSH V_0050 PUSH V_004d JUMPIF = L_0007 PUSH V_0003 PUSH V_0064 ASSPAR CALL GOTO L_0006 LOCATE L_0007 PUSH V_0064 PUSHI #0x0000000a ASSVAL LOCATE L_0006 LINE 195 195 ->eof %if k<0 PUSH V_0064 PUSHI #0x00000000 JUMPIF >= L_0007 JUMP L_0065 LOCATE L_0007 LINE 196 196 load fp(k); fp = fp+1 PUSH V_005a PUSH V_0064 ASSPAR CALL LINE 196 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 197 197 %repeat %until k = nl PUSH V_0064 PUSHI #0x0000000a JUMPIF = L_0004 REPEAT L_0003 LOCATE L_0004 LINE 198 198 fend = fp; lend = fend-1 PUSH V_0052 PUSH V_0050 ASSVAL LINE 198 PUSH V_0051 PUSH V_0052 PUSHI #0x00000001 SUB ASSVAL LINE 199 199 fp = bot-sextra+1 PUSH V_0050 PUSH V_004d PUSHI #0x0000007a SUB PUSHI #0x00000001 ADD ASSVAL LINE 200 200 select input(0) PUSH V_001f PUSHI #0x00000000 ASSPAR CALL LINE 201 201 %return RETURN LINE 202 202 eof:fp = bot; lend = fp; fend = lend LABEL L_0065 LINE 202 PUSH V_0050 PUSH V_004d ASSVAL LINE 202 PUSH V_0051 PUSH V_0050 ASSVAL LINE 202 PUSH V_0052 PUSH V_0051 ASSVAL LINE 203 203 load fp(nl) PUSH V_005a PUSHI #0x0000000a ASSPAR CALL LINE 204 204 select input(0) PUSH V_001f PUSHI #0x00000000 ASSPAR CALL LINE 205 205 %end END LINE 207 206 207 %routine switch inputs DEF V_0064 SWITCHINPUTS + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 208 208 %owninteger mfp,mlend,mend,sfp,send DEF V_0065 MFP + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_0066 MLEND + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_0067 MEND + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_0068 SFP + 0x0011 + 0x0001 + 0x0021 INIT 1 DEF V_0069 SEND + 0x0011 + 0x0001 + 0x0021 INIT 1 LINE 209 209 %if in = min %start PUSH V_0036 PUSHI #0x00000001 JUMPIF # L_0004 LINE 210 210 left star PUSH V_005b CALL LINE 211 211 in = sin PUSH V_0036 PUSHI #0x00000002 ASSVAL LINE 212 212 mfp = fp; mlend = lend; mend = fend PUSH V_0065 PUSH V_0050 ASSVAL LINE 212 PUSH V_0066 PUSH V_0051 ASSVAL LINE 212 PUSH V_0067 PUSH V_0052 ASSVAL LINE 213 213 mainfp == mfp PUSH V_0042 PUSH V_0065 ASSREF LINE 214 214 bot = bot+sextra; fp = sfp; fend = send PUSH V_004d PUSH V_004d PUSHI #0x0000007a ADD ASSVAL LINE 214 PUSH V_0050 PUSH V_0068 ASSVAL LINE 214 PUSH V_0052 PUSH V_0069 ASSVAL LINE 215 215 read line PUSH V_0063 CALL LINE 216 216 %finish %else %start GOTO L_0003 LOCATE L_0004 LINE 217 217 pp = lbeg PUSH V_004f PUSH V_004e ASSVAL LINE 218 218 in = min PUSH V_0036 PUSHI #0x00000001 ASSVAL LINE 219 219 bot = bot-sextra; sfp = fp; send = fend PUSH V_004d PUSH V_004d PUSHI #0x0000007a SUB ASSVAL LINE 219 PUSH V_0068 PUSH V_0050 ASSVAL LINE 219 PUSH V_0069 PUSH V_0052 ASSVAL LINE 220 220 fp = mfp; lend = mlend; fend = mend PUSH V_0050 PUSH V_0065 ASSVAL LINE 220 PUSH V_0051 PUSH V_0066 ASSVAL LINE 220 PUSH V_0052 PUSH V_0067 ASSVAL LINE 221 221 mainfp == fp PUSH V_0042 PUSH V_0050 ASSREF LINE 222 222 %finish LOCATE L_0003 LINE 223 223 %end END LINE 225 224 225 %routine print line DEF V_0065 PRINTLINE + 0x0007 + 0x0000 + 0x0000 START FINISH LINE 226 226 %integer p DEF V_0066 P + 0x0011 + 0x0001 + 0x0000 LINE 227 227 print1 = lend; print2 = fp+pp PUSH V_0038 PUSH V_0051 ASSVAL LINE 227 PUSH V_0039 PUSH V_0050 PUSH V_004f ADD ASSVAL LINE 228 228 p = lbeg PUSH V_0066 PUSH V_004e ASSVAL LINE 229 229 %cycle LOCATE L_0003 LINE 230 230 %if p = pp %start PUSH V_0066 PUSH V_004f JUMPIF # L_0007 LINE 231 231 print symbol('^') %if p # lbeg %and num = 0 PUSH V_0066 PUSH V_004e JUMPIF = L_000a PUSH V_0041 PUSHI #0x00000000 JUMPIF # L_000a PUSH V_001c PUSHI #0x0000005e ASSPAR CALL LOCATE L_000a LINE 232 232 p = fp PUSH V_0066 PUSH V_0050 ASSVAL LINE 233 233 %finish LOCATE L_0007 LINE 234 234 %exit %if p = lend PUSH V_0066 PUSH V_0051 JUMPIF # L_0007 GOTO L_0004 LOCATE L_0007 LINE 235 235 print symbol(byte(p)) PUSH V_001c PUSH V_004b PUSH V_0066 ACCESS ASSPAR CALL LINE 236 236 p = p+1 PUSH V_0066 PUSH V_0066 PUSHI #0x00000001 ADD ASSVAL LINE 237 237 %repeat REPEAT L_0003 LOCATE L_0004 LINE 238 238 print string("**END**") %if p = fend PUSH V_0066 PUSH V_0052 JUMPIF # L_0004 PUSH V_001d PUSHS "**END**" ASSPAR CALL LOCATE L_0004 LINE 239 239 newline PUSH V_0030 CALL LINE 240 240 %end END LINE 242 241 242 %integerfn matched DEF V_0066 MATCHED + 0x0018 + 0x0001 + 0x0010 START FINISH LINE 243 243 %integer i,j,k,l,t1,fp1,lim DEF V_0067 I + 0x0011 + 0x0001 + 0x0000 DEF V_0068 J + 0x0011 + 0x0001 + 0x0000 DEF V_0069 K + 0x0011 + 0x0001 + 0x0000 DEF V_006a L + 0x0011 + 0x0001 + 0x0000 DEF V_006b T1 + 0x0011 + 0x0001 + 0x0000 DEF V_006c FP1 + 0x0011 + 0x0001 + 0x0000 DEF V_006d LIM + 0x0011 + 0x0001 + 0x0000 LINE 244 244 lim = c(ci-3)&(\127); t1 = c(text) PUSH V_006d PUSH V_0043 PUSH V_0044 PUSHI #0x00000003 SUB ACCESS PUSHI #0x0000007f NOT AND ASSVAL LINE 244 PUSH V_006b PUSH V_0043 PUSH V_0040 ACCESS ASSVAL LINE 245 245 L1: pp1 = pp; fp1 = fp LABEL L_006e LINE 245 PUSH V_003d PUSH V_004f ASSVAL LINE 245 PUSH V_006c PUSH V_0050 ASSVAL LINE 246 246 ->L3 %unless fp = ms %and (code='F' %or code='U') PUSH V_0050 PUSH V_0053 JUMPIF # L_0005 PUSH V_003f PUSHI #0x00000046 JUMPIF = L_0004 PUSH V_003f PUSHI #0x00000055 JUMPIF = L_0004 LOCATE L_0005 JUMP L_006f LOCATE L_0004 LINE 247 247 k = byte(fp) PUSH V_0069 PUSH V_004b PUSH V_0050 ACCESS ASSVAL LINE 248 248 L2: load pp(k); fp = fp+1 LABEL L_0070 LINE 248 PUSH V_0059 PUSH V_0069 ASSPAR CALL LINE 248 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 249 249 L3: ->L10 %if fp = lend LABEL L_006f LINE 249 PUSH V_0050 PUSH V_0051 JUMPIF # L_0004 JUMP L_0071 LOCATE L_0004 LINE 250 250 k = byte(fp) PUSH V_0069 PUSH V_004b PUSH V_0050 ACCESS ASSVAL LINE 251 251 ->L2 %unless k = t1 PUSH V_0069 PUSH V_006b JUMPIF = L_0004 JUMP L_0070 LOCATE L_0004 LINE 252 252 i = fp; j = text PUSH V_0067 PUSH V_0050 ASSVAL LINE 252 PUSH V_0068 PUSH V_0040 ASSVAL LINE 253 253 L6: i = i+1; j = j-1 LABEL L_0072 LINE 253 PUSH V_0067 PUSH V_0067 PUSHI #0x00000001 ADD ASSVAL LINE 253 PUSH V_0068 PUSH V_0068 PUSHI #0x00000001 SUB ASSVAL LINE 254 254 l = c(j) PUSH V_006a PUSH V_0043 PUSH V_0068 ACCESS ASSVAL LINE 255 255 ->L6 %if byte(i) = l PUSH V_004b PUSH V_0067 ACCESS PUSH V_006a JUMPIF # L_0004 JUMP L_0072 LOCATE L_0004 LINE 256 256 ->L2 %if l # 0 PUSH V_006a PUSHI #0x00000000 JUMPIF = L_0004 JUMP L_0070 LOCATE L_0004 LINE 257 257 ms = fp; ml = i PUSH V_0053 PUSH V_0050 ASSVAL LINE 257 PUSH V_0054 PUSH V_0067 ASSVAL LINE 258 258 %result = 1 PUSHI #0x00000001 RESULT LINE 259 259 L10: lim = lim-128 LABEL L_0071 LINE 259 PUSH V_006d PUSH V_006d PUSHI #0x00000080 SUB ASSVAL LINE 260 260 %if lim # 0 %and fp # fend %start PUSH V_006d PUSHI #0x00000000 JUMPIF = L_0004 PUSH V_0050 PUSH V_0052 JUMPIF = L_0004 LINE 261 261 %if code # 'U' %start PUSH V_003f PUSHI #0x00000055 JUMPIF = L_0007 LINE 262 262 load pp(nl); lbeg = pp PUSH V_0059 PUSHI #0x0000000a ASSPAR CALL LINE 262 PUSH V_004e PUSH V_004f ASSVAL LINE 263 263 %finish %else pp = pp1 GOTO L_0006 LOCATE L_0007 PUSH V_004f PUSH V_003d ASSVAL LOCATE L_0006 LINE 264 264 fp = fp+1; make space; read line PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 264 PUSH V_0062 CALL LINE 264 PUSH V_0063 CALL LINE 265 265 ->L1 JUMP L_006e LINE 266 266 %finish LOCATE L_0004 LINE 267 267 pp = pp1; fp = fp1 PUSH V_004f PUSH V_003d ASSVAL LINE 267 PUSH V_0050 PUSH V_006c ASSVAL LINE 268 268 %result = 0 PUSHI #0x00000000 RESULT LINE 269 269 %end END LINE 272 270 271 272 %externalintegerfn main; !edit15: ecce for pdp9/15 DEF V_0067 MAIN + 0x0018 + 0x0001 + 0x0033 START FINISH LINE 274 273 !initialise 274 %switch t(0:12) PUSHI #0x00000000 PUSHI #0x0000000c BOUNDS DEF V_0068 T + 0x0006 + 0x0000 + 0x0000 LINE 275 275 %switch s('A':'\') PUSHI #0x00000041 PUSHI #0x0000005c BOUNDS DEF V_0069 S + 0x0006 + 0x0000 + 0x0000 LINE 282 276 277 !%on %event 9 %start 278 ! printstring("Caught event"); newline 279 ! ->eof 280 !%finish 281 282 select input(0) PUSH V_001f PUSHI #0x00000000 ASSPAR CALL LINE 283 283 pp = top-1; load pp(nl); !for bouncing off PUSH V_004f PUSH V_004c PUSHI #0x00000001 SUB ASSVAL LINE 283 PUSH V_0059 PUSHI #0x0000000a ASSPAR CALL LINE 284 284 lbeg = pp; mainfp == fp PUSH V_004e PUSH V_004f ASSVAL LINE 284 PUSH V_0042 PUSH V_0050 ASSREF LINE 285 285 stored(1) = nl; stored(65) = nl; stored(129) = nl PUSH V_0047 PUSHI #0x00000001 ACCESS PUSHI #0x0000000a ASSVAL LINE 285 PUSH V_0047 PUSHI #0x00000041 ACCESS PUSHI #0x0000000a ASSVAL LINE 285 PUSH V_0047 PUSHI #0x00000081 ACCESS PUSHI #0x0000000a ASSVAL LINE 286 286 select output(0); print string("EDIT PUSH V_0020 PUSHI #0x00000000 ASSPAR CALL LINE 286 PUSH V_001d PUSHS "EDIT\n" ASSPAR CALL LINE 288 287 ") 288 read line PUSH V_0063 CALL LINE 292 289 290 !read command line 291 292 L1: prompt(">") LABEL L_006a LINE 292 PUSH V_0058 PUSHS ">" ASSPAR CALL LINE 293 293 read item; ->eof %if sym<0; ->L1 %if type = 1 PUSH V_005f CALL LINE 293 PUSH V_003e PUSHI #0x00000000 JUMPIF >= L_0004 JUMP L_006b LOCATE L_0004 LINE 293 PUSH V_0055 PUSHI #0x00000001 JUMPIF # L_0004 JUMP L_006a LOCATE L_0004 LINE 294 294 ci = cbase; ti = tbase; chain = 0 PUSH V_0044 PUSHI #0x00000001 ASSVAL LINE 294 PUSH V_0045 PUSHI #0x00000078 ASSVAL LINE 294 PUSH V_0056 PUSHI #0x00000000 ASSVAL LINE 295 295 %if type = 0 %and cmax # 0 %start PUSH V_0055 PUSHI #0x00000000 JUMPIF # L_0004 PUSH V_0046 PUSHI #0x00000000 JUMPIF = L_0004 LINE 296 296 c(cmax+2) = num PUSH V_0043 PUSH V_0046 PUSHI #0x00000002 ADD ACCESS PUSH V_0041 ASSVAL LINE 297 297 read item; ->er2 %if type # 1 PUSH V_005f CALL LINE 297 PUSH V_0055 PUSHI #0x00000001 JUMPIF = L_0007 JUMP L_006c LOCATE L_0007 LINE 298 298 ->go JUMP L_006d LINE 299 299 %finish LOCATE L_0004 LINE 300 300 %if sym = '%' %start PUSH V_003e PUSHI #0x00000025 JUMPIF # L_0004 LINE 301 301 read sym; sym = sym-32 %if sym >= 96 PUSH V_005e CALL LINE 301 PUSH V_003e PUSHI #0x00000060 JUMPIF < L_0007 PUSH V_003e PUSH V_003e PUSHI #0x00000020 SUB ASSVAL LOCATE L_0007 LINE 302 302 code = sym; ->er5 %if code<=32 PUSH V_003f PUSH V_003e ASSVAL LINE 302 PUSH V_003f PUSHI #0x00000020 JUMPIF > L_0007 JUMP L_006e LOCATE L_0007 LINE 303 303 read item PUSH V_005f CALL LINE 304 304 ->t(symtype(code)>>4) PUSH V_005d PUSH V_003f ACCESS PUSHI #0x00000004 RSH SJUMP 104 LINE 305 305 %finish LOCATE L_0004 LINE 306 306 L2: i = type&15; ->er2 %if i < 4 LABEL L_006f LINE 306 PUSH V_003a PUSH V_0055 PUSHI #0x0000000f AND ASSVAL LINE 306 PUSH V_003a PUSHI #0x00000004 JUMPIF >= L_0004 JUMP L_006c LOCATE L_0004 LINE 307 307 code = sym; text = 0; num = 1; !default values PUSH V_003f PUSH V_003e ASSVAL LINE 307 PUSH V_0040 PUSHI #0x00000000 ASSVAL LINE 307 PUSH V_0041 PUSHI #0x00000001 ASSVAL LINE 308 308 read item PUSH V_005f CALL LINE 309 309 ->t(i) PUSH V_003a SJUMP 104 LINE 310 310 t(2): !%x, %y, %z PUSHI #0x00000002 SLABEL 104 LINE 311 311 ->er1 %if sym # '=' PUSH V_003e PUSHI #0x0000003d JUMPIF = L_0004 JUMP L_0070 LOCATE L_0004 LINE 312 312 i = (code-'X')<<6 PUSH V_003a PUSH V_003f PUSHI #0x00000058 SUB PUSHI #0x00000006 LSH ASSVAL LINE 313 313 %cycle LOCATE L_0003 LINE 314 314 read sym PUSH V_005e CALL LINE 315 315 i = i+1; stored(i) = sym PUSH V_003a PUSH V_003a PUSHI #0x00000001 ADD ASSVAL LINE 315 PUSH V_0047 PUSH V_003a ACCESS PUSH V_003e ASSVAL LINE 316 316 ->L1 %if sym = nl PUSH V_003e PUSHI #0x0000000a JUMPIF # L_0007 JUMP L_006a LOCATE L_0007 LINE 317 317 %repeat REPEAT L_0003 LINE 318 318 t(3): !%m, %f, %q PUSHI #0x00000003 SLABEL 104 LINE 319 319 mon = 'M'-code PUSH V_0037 PUSHI #0x0000004d PUSH V_003f SUB ASSVAL LINE 320 320 ->L1 JUMP L_006a LINE 321 321 t(4): !find PUSHI #0x00000004 SLABEL 104 LINE 322 322 num = 0 %unless type = 0 PUSH V_0055 PUSHI #0x00000000 JUMPIF = L_0004 PUSH V_0041 PUSHI #0x00000000 ASSVAL LOCATE L_0004 LINE 323 323 t(5): !+del,trav,uncover PUSHI #0x00000005 SLABEL 104 LINE 324 324 code = num<<7+code; num = 1 PUSH V_003f PUSH V_0041 PUSHI #0x00000007 LSH PUSH V_003f ADD ASSVAL LINE 324 PUSH V_0041 PUSHI #0x00000001 ASSVAL LINE 325 325 read item %if type = 0 PUSH V_0055 PUSHI #0x00000000 JUMPIF # L_0004 PUSH V_005f CALL LOCATE L_0004 LINE 326 326 t(6): !+insert,subst,verify PUSHI #0x00000006 SLABEL 104 LINE 327 327 ->er4 %if type # 3 PUSH V_0055 PUSHI #0x00000003 JUMPIF = L_0004 JUMP L_0071 LOCATE L_0004 LINE 328 328 text = ti; i = sym PUSH V_0040 PUSH V_0045 ASSVAL LINE 328 PUSH V_003a PUSH V_003e ASSVAL LINE 329 329 L61: read sym LABEL L_0072 LINE 329 PUSH V_005e CALL LINE 330 330 %if sym # nl %start PUSH V_003e PUSHI #0x0000000a JUMPIF = L_0004 LINE 331 331 %if sym # i %start PUSH V_003e PUSH V_003a JUMPIF = L_0007 LINE 332 332 ->er6 %if ti <= ci PUSH V_0045 PUSH V_0044 JUMPIF > L_000a JUMP L_0073 LOCATE L_000a LINE 333 333 c(ti) = sym; ti = ti-1 PUSH V_0043 PUSH V_0045 ACCESS PUSH V_003e ASSVAL LINE 333 PUSH V_0045 PUSH V_0045 PUSHI #0x00000001 SUB ASSVAL LINE 334 334 ->L61 JUMP L_0072 LINE 335 335 %finish LOCATE L_0007 LINE 336 336 %finish %else %start GOTO L_0003 LOCATE L_0004 LINE 337 337 pend = sym PUSH V_0057 PUSH V_003e ASSVAL LINE 338 338 ->er4 %unless code = 'S' %or code = 'I' PUSH V_003f PUSHI #0x00000053 JUMPIF = L_0007 PUSH V_003f PUSHI #0x00000049 JUMPIF = L_0007 JUMP L_0071 LOCATE L_0007 LINE 339 339 %finish LOCATE L_0003 LINE 340 340 ->er4 %if ti = text %and code # 'S' PUSH V_0045 PUSH V_0040 JUMPIF # L_0004 PUSH V_003f PUSHI #0x00000053 JUMPIF = L_0004 JUMP L_0071 LOCATE L_0004 LINE 341 341 c(ti) = 0; ti = ti-1 PUSH V_0043 PUSH V_0045 ACCESS PUSHI #0x00000000 ASSVAL LINE 341 PUSH V_0045 PUSH V_0045 PUSHI #0x00000001 SUB ASSVAL LINE 342 342 ->L81 JUMP L_0074 LINE 343 343 t(8): !move,erase PUSHI #0x00000008 SLABEL 104 LINE 344 344 ->L100 %unless sym = '-' PUSH V_003e PUSHI #0x0000002d JUMPIF = L_0004 JUMP L_0075 LOCATE L_0004 LINE 345 345 code = code+10 PUSH V_003f PUSH V_003f PUSHI #0x0000000a ADD ASSVAL LINE 346 346 L81: read item LABEL L_0074 LINE 346 PUSH V_005f CALL LINE 347 347 ->L101 JUMP L_0076 LINE 348 348 t(9): !close bracket PUSHI #0x00000009 SLABEL 104 LINE 349 349 unchain; ->er3 %if text = 0 PUSH V_0060 CALL LINE 349 PUSH V_0040 PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_0077 LOCATE L_0004 LINE 350 350 code = 'Z'; c(text+2) = num PUSH V_003f PUSHI #0x0000005a ASSVAL LINE 350 PUSH V_0043 PUSH V_0040 PUSHI #0x00000002 ADD ACCESS PUSH V_0041 ASSVAL LINE 351 351 text = text+3 PUSH V_0040 PUSH V_0040 PUSHI #0x00000003 ADD ASSVAL LINE 352 352 t(10): !+get,kill,etc. PUSHI #0x0000000a SLABEL 104 LINE 353 353 L100:->er1 %if type = 3 LABEL L_0075 LINE 353 PUSH V_0055 PUSHI #0x00000003 JUMPIF # L_0004 JUMP L_0070 LOCATE L_0004 LINE 354 354 L101:read item %if type = 0 LABEL L_0076 LINE 354 PUSH V_0055 PUSHI #0x00000000 JUMPIF # L_0004 PUSH V_005f CALL LOCATE L_0004 LINE 355 355 ->put JUMP L_0078 LINE 356 356 t(11): !open bracket PUSHI #0x0000000b SLABEL 104 LINE 357 357 code = 'X' PUSH V_003f PUSHI #0x00000058 ASSVAL LINE 358 358 ->L121 JUMP L_0079 LINE 359 359 t(12): !comma PUSHI #0x0000000c SLABEL 104 LINE 360 360 code = 'Y' PUSH V_003f PUSHI #0x00000059 ASSVAL LINE 361 361 read item %if type = 1 PUSH V_0055 PUSHI #0x00000001 JUMPIF # L_0004 PUSH V_005f CALL LOCATE L_0004 LINE 362 362 L121:text = chain; chain = ci LABEL L_0079 LINE 362 PUSH V_0040 PUSH V_0056 ASSVAL LINE 362 PUSH V_0056 PUSH V_0044 ASSVAL LINE 363 363 num = 0 PUSH V_0041 PUSHI #0x00000000 ASSVAL LINE 364 364 put:stack(code); stack(text); stack(num) LABEL L_0078 LINE 364 PUSH V_0061 PUSH V_003f ASSPAR CALL LINE 364 PUSH V_0061 PUSH V_0040 ASSPAR CALL LINE 364 PUSH V_0061 PUSH V_0041 ASSPAR CALL LINE 365 365 ->er6 %if ci+4 >= ti PUSH V_0044 PUSHI #0x00000004 ADD PUSH V_0045 JUMPIF < L_0004 JUMP L_0073 LOCATE L_0004 LINE 366 366 ->L2 %unless type = 1 PUSH V_0055 PUSHI #0x00000001 JUMPIF = L_0004 JUMP L_006f LOCATE L_0004 LINE 367 367 unchain; ->er3 %if text # 0 PUSH V_0060 CALL LINE 367 PUSH V_0040 PUSHI #0x00000000 JUMPIF = L_0004 JUMP L_0077 LOCATE L_0004 LINE 368 368 cmax = ci PUSH V_0046 PUSH V_0044 ASSVAL LINE 369 369 stack('Z'); stack(cbase); stack(1); !extra close b PUSH V_0061 PUSHI #0x0000005a ASSPAR CALL LINE 369 PUSH V_0061 PUSHI #0x00000001 ASSPAR CALL LINE 369 PUSH V_0061 PUSHI #0x00000001 ASSPAR CALL LINE 370 370 stack(0) PUSH V_0061 PUSHI #0x00000000 ASSPAR CALL LINE 371 371 ->go JUMP L_006d LINE 375 372 373 !command input error reports 374 375 er1:space; print symbol(code) LABEL L_0070 LINE 375 PUSH V_002e CALL LINE 375 PUSH V_001c PUSH V_003f ASSPAR CALL LINE 376 376 er2:code = sym LABEL L_006c LINE 376 PUSH V_003f PUSH V_003e ASSVAL LINE 377 377 ->er5 JUMP L_006e LINE 378 378 er3:print string(" ()") LABEL L_0077 LINE 378 PUSH V_001d PUSHS " ()" ASSPAR CALL LINE 379 379 ->er7 JUMP L_007a LINE 380 380 er4:print string(" TEXT FOR") LABEL L_0071 LINE 380 PUSH V_001d PUSHS " TEXT FOR" ASSPAR CALL LINE 381 381 t(0): PUSHI #0x00000000 SLABEL 104 LINE 382 382 er5:space; print symbol(code&127) LABEL L_006e LINE 382 PUSH V_002e CALL LINE 382 PUSH V_001c PUSH V_003f PUSHI #0x0000007f AND ASSPAR CALL LINE 383 383 ->er7 JUMP L_007a LINE 384 384 er6:print string(" SIZE") LABEL L_0073 LINE 384 PUSH V_001d PUSHS " SIZE" ASSPAR CALL LINE 385 385 er7:print symbol('?') LABEL L_007a LINE 385 PUSH V_001c PUSHI #0x0000003f ASSPAR CALL LINE 386 386 newline; cmax = 0 %if ci # cbase PUSH V_0030 CALL LINE 386 PUSH V_0044 PUSHI #0x00000001 JUMPIF = L_0004 PUSH V_0046 PUSHI #0x00000000 ASSVAL LOCATE L_0004 LINE 387 387 L10: ->L1 %if sym<32 LABEL L_007b LINE 387 PUSH V_003e PUSHI #0x00000020 JUMPIF >= L_0004 JUMP L_006a LOCATE L_0004 LINE 388 388 read sym PUSH V_005e CALL LINE 389 389 ->L10 JUMP L_007b LINE 393 390 391 !execute command line 392 393 go: ci = cbase LABEL L_006d LINE 393 PUSH V_0044 PUSHI #0x00000001 ASSVAL LINE 394 394 get:code = c(ci)&127; ->L99 %if code = 0 LABEL L_007c LINE 394 PUSH V_003f PUSH V_0043 PUSH V_0044 ACCESS PUSHI #0x0000007f AND ASSVAL LINE 394 PUSH V_003f PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_007d LOCATE L_0004 LINE 395 395 text = c(ci+1) PUSH V_0040 PUSH V_0043 PUSH V_0044 PUSHI #0x00000001 ADD ACCESS ASSVAL LINE 396 396 num = c(ci+2) PUSH V_0041 PUSH V_0043 PUSH V_0044 PUSHI #0x00000002 ADD ACCESS ASSVAL LINE 397 397 ci = ci+3 PUSH V_0044 PUSH V_0044 PUSHI #0x00000003 ADD ASSVAL LINE 398 398 rep:num = num-1 LABEL L_007e LINE 398 PUSH V_0041 PUSH V_0041 PUSHI #0x00000001 SUB ASSVAL LINE 399 399 ->s(code) PUSH V_003f SJUMP 105 LINE 400 400 ok: ->rep %unless num = 0 %or num = stop LABEL L_007f LINE 400 PUSH V_0041 PUSHI #0x00000000 JUMPIF = L_0004 PUSH V_0041 PUSHI #0xffffec78 JUMPIF = L_0004 JUMP L_007e LOCATE L_0004 LINE 401 401 ->get JUMP L_007c LINE 402 402 s('\'): !invert PUSHI #0x0000005c SLABEL 105 LINE 403 403 no: ->get %if num < 0 LABEL L_0080 LINE 403 PUSH V_0041 PUSHI #0x00000000 JUMPIF >= L_0004 JUMP L_007c LOCATE L_0004 LINE 404 404 ci = ci+3 %and ->get %if c(ci) = '\' PUSH V_0043 PUSH V_0044 ACCESS PUSHI #0x0000005c JUMPIF # L_0004 PUSH V_0044 PUSH V_0044 PUSHI #0x00000003 ADD ASSVAL JUMP L_007c LOCATE L_0004 LINE 405 405 skp:i = c(ci); ci = c(ci+1) %if i = 'X' LABEL L_0081 LINE 405 PUSH V_003a PUSH V_0043 PUSH V_0044 ACCESS ASSVAL LINE 405 PUSH V_003a PUSHI #0x00000058 JUMPIF # L_0004 PUSH V_0044 PUSH V_0043 PUSH V_0044 PUSHI #0x00000001 ADD ACCESS ASSVAL LOCATE L_0004 LINE 406 406 ci = ci+3 PUSH V_0044 PUSH V_0044 PUSHI #0x00000003 ADD ASSVAL LINE 407 407 num = c(ci-1)-1 %and ->no %if i > 'X' PUSH V_003a PUSHI #0x00000058 JUMPIF <= L_0004 PUSH V_0041 PUSH V_0043 PUSH V_0044 PUSHI #0x00000001 SUB ACCESS PUSHI #0x00000001 SUB ASSVAL JUMP L_0080 LOCATE L_0004 LINE 408 408 ->skp %if i # 0 PUSH V_003a PUSHI #0x00000000 JUMPIF = L_0004 JUMP L_0081 LOCATE L_0004 LINE 412 409 410 !execution error report 411 412 print string("FAILURE: ") PUSH V_001d PUSHS "FAILURE: " ASSPAR CALL LINE 413 413 %if code='O' %or code='W' %start PUSH V_003f PUSHI #0x0000004f JUMPIF = L_0005 PUSH V_003f PUSHI #0x00000057 JUMPIF # L_0004 LOCATE L_0005 LINE 414 414 print symbol(code-10); code = '-' PUSH V_001c PUSH V_003f PUSHI #0x0000000a SUB ASSPAR CALL LINE 414 PUSH V_003f PUSHI #0x0000002d ASSVAL LINE 415 415 %finish LOCATE L_0004 LINE 416 416 print symbol(code) PUSH V_001c PUSH V_003f ASSPAR CALL LINE 417 417 %if text # 0 %start PUSH V_0040 PUSHI #0x00000000 JUMPIF = L_0004 LINE 418 418 print symbol('''') PUSH V_001c PUSHI #0x00000027 ASSPAR CALL LINE 419 419 %while c(text) # 0 %cycle LOCATE L_0006 PUSH V_0043 PUSH V_0040 ACCESS PUSHI #0x00000000 JUMPIF = L_0007 LINE 420 420 print symbol(c(text)) PUSH V_001c PUSH V_0043 PUSH V_0040 ACCESS ASSPAR CALL LINE 421 421 text = text-1 PUSH V_0040 PUSH V_0040 PUSHI #0x00000001 SUB ASSVAL LINE 422 422 %repeat REPEAT L_0006 LOCATE L_0007 LINE 423 423 print symbol('''') PUSH V_001c PUSHI #0x00000027 ASSPAR CALL LINE 424 424 %finish LOCATE L_0004 LINE 425 425 newline PUSH V_0030 CALL LINE 426 426 print1 = 0 PUSH V_0038 PUSHI #0x00000000 ASSVAL LINE 430 427 428 !end of command line 429 430 L99: ->L1 %if sym # nl LABEL L_007d LINE 430 PUSH V_003e PUSHI #0x0000000a JUMPIF = L_0004 JUMP L_006a LOCATE L_0004 LINE 431 431 ->L1 %unless (mon>=0 %and print1#lend) %or (mon>0 %and print2#fp+pp) PUSH V_0037 PUSHI #0x00000000 JUMPIF < L_0005 PUSH V_0038 PUSH V_0051 JUMPIF # L_0004 LOCATE L_0005 PUSH V_0037 PUSHI #0x00000000 JUMPIF <= L_0005 PUSH V_0039 PUSH V_0050 PUSH V_004f ADD JUMPIF # L_0004 LOCATE L_0005 JUMP L_006a LOCATE L_0004 LINE 432 432 num = 0; print line PUSH V_0041 PUSHI #0x00000000 ASSVAL LINE 432 PUSH V_0065 CALL LINE 433 433 ->L1 JUMP L_006a LINE 437 434 435 !individual commands 436 437 s('X'): !open bracket PUSHI #0x00000058 SLABEL 105 LINE 438 438 c(text+2) = num+1 PUSH V_0043 PUSH V_0040 PUSHI #0x00000002 ADD ACCESS PUSH V_0041 PUSHI #0x00000001 ADD ASSVAL LINE 439 439 ->get JUMP L_007c LINE 440 440 s('Z'): !close bracket PUSHI #0x0000005a SLABEL 105 LINE 441 441 ->get %if num = 0 %or num = stop PUSH V_0041 PUSHI #0x00000000 JUMPIF = L_0005 PUSH V_0041 PUSHI #0xffffec78 JUMPIF # L_0004 LOCATE L_0005 JUMP L_007c LOCATE L_0004 LINE 442 442 c(ci-1) = num PUSH V_0043 PUSH V_0044 PUSHI #0x00000001 SUB ACCESS PUSH V_0041 ASSVAL LINE 443 443 s('Y'): !+comma PUSHI #0x00000059 SLABEL 105 LINE 444 444 ci = text PUSH V_0044 PUSH V_0040 ASSVAL LINE 445 445 ->get JUMP L_007c LINE 446 446 s('R'): !right shift PUSHI #0x00000052 SLABEL 105 LINE 447 447 ->no %if fp = lend PUSH V_0050 PUSH V_0051 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 448 448 load pp(byte(fp)); fp = fp+1 PUSH V_0059 PUSH V_004b PUSH V_0050 ACCESS ASSPAR CALL LINE 448 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 449 449 ->ok JUMP L_007f LINE 450 450 s('L'): !left shift PUSHI #0x0000004c SLABEL 105 LINE 451 451 ->no %if in = sin %or pp = lbeg PUSH V_0036 PUSHI #0x00000002 JUMPIF = L_0005 PUSH V_004f PUSH V_004e JUMPIF # L_0004 LOCATE L_0005 JUMP L_0080 LOCATE L_0004 LINE 452 452 fp = fp-1; pp = pp-1; load fp(byte(pp)) PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 SUB ASSVAL LINE 452 PUSH V_004f PUSH V_004f PUSHI #0x00000001 SUB ASSVAL LINE 452 PUSH V_005a PUSH V_004b PUSH V_004f ACCESS ASSPAR CALL LINE 453 453 ms = 0 PUSH V_0053 PUSHI #0x00000000 ASSVAL LINE 454 454 ->ok JUMP L_007f LINE 455 455 s('E'): !erase PUSHI #0x00000045 SLABEL 105 LINE 456 456 ->no %if fp = lend PUSH V_0050 PUSH V_0051 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 457 457 fp = fp+1 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 458 458 ->ok JUMP L_007f LINE 459 459 s('O'): !erase back PUSHI #0x0000004f SLABEL 105 LINE 460 460 ->no %if pp = lbeg PUSH V_004f PUSH V_004e JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 461 461 pp = pp-1 PUSH V_004f PUSH V_004f PUSHI #0x00000001 SUB ASSVAL LINE 462 462 ->ok JUMP L_007f LINE 463 463 s('V'): !verify PUSHI #0x00000056 SLABEL 105 LINE 464 464 i = fp-1; j = text+1 PUSH V_003a PUSH V_0050 PUSHI #0x00000001 SUB ASSVAL LINE 464 PUSH V_003b PUSH V_0040 PUSHI #0x00000001 ADD ASSVAL LINE 465 465 v1: i = i+1; j = j-1 LABEL L_0082 LINE 465 PUSH V_003a PUSH V_003a PUSHI #0x00000001 ADD ASSVAL LINE 465 PUSH V_003b PUSH V_003b PUSHI #0x00000001 SUB ASSVAL LINE 466 466 k = c(j) PUSH V_003c PUSH V_0043 PUSH V_003b ACCESS ASSVAL LINE 467 467 ->v1 %if byte(i) = k PUSH V_004b PUSH V_003a ACCESS PUSH V_003c JUMPIF # L_0004 JUMP L_0082 LOCATE L_0004 LINE 468 468 ->no %if k # 0 PUSH V_003c PUSHI #0x00000000 JUMPIF = L_0004 JUMP L_0080 LOCATE L_0004 LINE 469 469 ms = fp; ml = i PUSH V_0053 PUSH V_0050 ASSVAL LINE 469 PUSH V_0054 PUSH V_003a ASSVAL LINE 470 470 ->ok JUMP L_007f LINE 471 471 s('F'): !find PUSHI #0x00000046 SLABEL 105 LINE 472 472 ->no %if matched = 0 PUSH V_0066 CALL PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 473 473 ->ok JUMP L_007f LINE 474 474 s('U'): !uncover PUSHI #0x00000055 SLABEL 105 LINE 475 475 ->no %if matched = 0; pp = pp1 PUSH V_0066 CALL PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 475 PUSH V_004f PUSH V_003d ASSVAL LINE 476 476 ->ok JUMP L_007f LINE 477 477 s('D'): !delete PUSHI #0x00000044 SLABEL 105 LINE 478 478 ->no %if matched = 0; fp = ml PUSH V_0066 CALL PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 478 PUSH V_0050 PUSH V_0054 ASSVAL LINE 479 479 ->ok JUMP L_007f LINE 480 480 s('T'): !traverse PUSHI #0x00000054 SLABEL 105 LINE 481 481 ->no %if matched = 0 PUSH V_0066 CALL PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 482 482 s('S'): !+substitute PUSHI #0x00000053 SLABEL 105 LINE 483 483 fp = ml %if fp = ms PUSH V_0050 PUSH V_0053 JUMPIF # L_0004 PUSH V_0050 PUSH V_0054 ASSVAL LOCATE L_0004 LINE 484 484 s('I'): !+insert PUSHI #0x00000049 SLABEL 105 LINE 485 485 make space PUSH V_0062 CALL LINE 487 486 !! ->no %if pp-lbeg+lend-fp > 80 487 i = text PUSH V_003a PUSH V_0040 ASSVAL LINE 488 488 i1: ->ok %if c(i) = 0 LABEL L_0083 LINE 488 PUSH V_0043 PUSH V_003a ACCESS PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_007f LOCATE L_0004 LINE 489 489 load pp(c(i)); i = i-1 PUSH V_0059 PUSH V_0043 PUSH V_003a ACCESS ASSPAR CALL LINE 489 PUSH V_003a PUSH V_003a PUSHI #0x00000001 SUB ASSVAL LINE 490 490 ->i1 JUMP L_0083 LINE 491 491 s('G'): !get (line from tt) PUSHI #0x00000047 SLABEL 105 LINE 492 492 prompt(":") PUSH V_0058 PUSHS ":" ASSPAR CALL LINE 494 493 !! make space 494 read symbol(i) PUSH V_0003 PUSH V_003a ASSPAR CALL LINE 495 495 ->no %if i = ':' PUSH V_003a PUSHI #0x0000003a JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 496 496 left star PUSH V_005b CALL LINE 497 497 %while i # nl %cycle LOCATE L_0003 PUSH V_003a PUSHI #0x0000000a JUMPIF = L_0004 LINE 498 498 load pp(i) PUSH V_0059 PUSH V_003a ASSPAR CALL LINE 499 499 read symbol(i) PUSH V_0003 PUSH V_003a ASSPAR CALL LINE 500 500 %repeat REPEAT L_0003 LOCATE L_0004 LINE 501 501 s('B'): !+break (insert newline) PUSHI #0x00000042 SLABEL 105 LINE 502 502 make space PUSH V_0062 CALL LINE 503 503 load pp(nl); lbeg = pp PUSH V_0059 PUSHI #0x0000000a ASSPAR CALL LINE 503 PUSH V_004e PUSH V_004f ASSVAL LINE 504 504 ->ok JUMP L_007f LINE 505 505 s('P'): !print PUSHI #0x00000050 SLABEL 105 LINE 506 506 print line PUSH V_0065 CALL LINE 507 507 ->get %if num = 0 PUSH V_0041 PUSHI #0x00000000 JUMPIF # L_0004 JUMP L_007c LOCATE L_0004 LINE 508 508 s('M'): !+move PUSHI #0x0000004d SLABEL 105 LINE 509 509 right star PUSH V_005c CALL LINE 510 510 ->no %if fp = fend PUSH V_0050 PUSH V_0052 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 511 511 load pp(nl); lbeg = pp PUSH V_0059 PUSHI #0x0000000a ASSPAR CALL LINE 511 PUSH V_004e PUSH V_004f ASSVAL LINE 512 512 m1: fp = fp+1; make space; read line LABEL L_0084 LINE 512 PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 512 PUSH V_0062 CALL LINE 512 PUSH V_0063 CALL LINE 513 513 ->ok JUMP L_007f LINE 514 514 s('K'): !kill (line) PUSHI #0x0000004b SLABEL 105 LINE 515 515 pp = lbeg; fp = lend PUSH V_004f PUSH V_004e ASSVAL LINE 515 PUSH V_0050 PUSH V_0051 ASSVAL LINE 516 516 k1: ->no %if fp = fend LABEL L_0085 LINE 516 PUSH V_0050 PUSH V_0052 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 517 517 ->m1 JUMP L_0084 LINE 518 518 s('J'): !join (delete newline) PUSHI #0x0000004a SLABEL 105 LINE 519 519 right star PUSH V_005c CALL LINE 521 520 !! ->no %if pp-lbeg > 80 521 ->k1 JUMP L_0085 LINE 522 522 s('W'): !move back PUSHI #0x00000057 SLABEL 105 LINE 523 523 ->no %if in = sin PUSH V_0036 PUSHI #0x00000002 JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 524 524 make space PUSH V_0062 CALL LINE 525 525 ->no %if lbeg = top PUSH V_004e PUSH V_004c JUMPIF # L_0004 JUMP L_0080 LOCATE L_0004 LINE 526 526 lend = fp-pp+lbeg-1 PUSH V_0051 PUSH V_0050 PUSH V_004f SUB PUSH V_004e ADD PUSHI #0x00000001 SUB ASSVAL LINE 527 527 w1: k = byte(pp-1) LABEL L_0086 LINE 527 PUSH V_003c PUSH V_004b PUSH V_004f PUSHI #0x00000001 SUB ACCESS ASSVAL LINE 528 528 ->w2 %if k = nl %and pp # lbeg PUSH V_003c PUSHI #0x0000000a JUMPIF # L_0004 PUSH V_004f PUSH V_004e JUMPIF = L_0004 JUMP L_0087 LOCATE L_0004 LINE 529 529 fp = fp-1; pp = pp-1; load fp(k) PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 SUB ASSVAL LINE 529 PUSH V_004f PUSH V_004f PUSHI #0x00000001 SUB ASSVAL LINE 529 PUSH V_005a PUSH V_003c ASSPAR CALL LINE 530 530 ->w1 JUMP L_0086 LINE 531 531 w2: lbeg = pp; ms = 0 LABEL L_0087 LINE 531 PUSH V_004e PUSH V_004f ASSVAL LINE 531 PUSH V_0053 PUSHI #0x00000000 ASSVAL LINE 532 532 ->ok JUMP L_007f LINE 533 533 t(1): !%s, %c ... PUSHI #0x00000001 SLABEL 104 LINE 534 534 ->eof %if code = 'C' PUSH V_003f PUSHI #0x00000043 JUMPIF # L_0004 JUMP L_006b LOCATE L_0004 LINE 535 535 switch inputs PUSH V_0064 CALL LINE 536 536 ->L99 JUMP L_007d LINE 537 537 eof:code = 'C'; !+eof on command stream LABEL L_006b LINE 537 PUSH V_003f PUSHI #0x00000043 ASSVAL LINE 538 538 switch inputs %if in = sin PUSH V_0036 PUSHI #0x00000002 JUMPIF # L_0004 PUSH V_0064 CALL LOCATE L_0004 LINE 539 539 %cycle LOCATE L_0003 LINE 540 540 right star PUSH V_005c CALL LINE 541 541 %exit %if fp = fend PUSH V_0050 PUSH V_0052 JUMPIF # L_0007 GOTO L_0004 LOCATE L_0007 LINE 542 542 load pp(nl); lbeg = pp PUSH V_0059 PUSHI #0x0000000a ASSPAR CALL LINE 542 PUSH V_004e PUSH V_004f ASSVAL LINE 543 543 fp = fp+1; make space; read line PUSH V_0050 PUSH V_0050 PUSHI #0x00000001 ADD ASSVAL LINE 543 PUSH V_0062 CALL LINE 543 PUSH V_0063 CALL LINE 544 544 %repeat REPEAT L_0003 LOCATE L_0004 LINE 545 545 select output(mout) PUSH V_0020 PUSHI #0x00000001 ASSPAR CALL LINE 546 546 %while top # pp %cycle LOCATE L_0003 PUSH V_004c PUSH V_004f JUMPIF = L_0004 LINE 547 547 print symbol(byte(top)); top = top+1 PUSH V_001c PUSH V_004b PUSH V_004c ACCESS ASSPAR CALL LINE 547 PUSH V_004c PUSH V_004c PUSHI #0x00000001 ADD ASSVAL LINE 548 548 %repeat REPEAT L_0003 LOCATE L_0004 LINE 549 549 select output(0) PUSH V_0020 PUSHI #0x00000000 ASSPAR CALL LINE 550 550 %if code # 'C' %then %monitor PUSH V_003f PUSHI #0x00000043 JUMPIF = L_0004 MONITOR LOCATE L_0004 LINE 551 551 %result = 0 PUSHI #0x00000000 RESULT LINE 552 552 %end END LINE 554 553 554 %endoffile END