/ EIGHT/S INTERPRETER. ESI Page 1 1 / EIGHT/S INTERPRETER. ESI 2 / DAVID J. WAKS 3 / APPLIED DATA RESEARCH, INC. 4 / 5 / EXTENDED FEATURE ESI-X. 6 / OCTOBER 1, 1966 7 / REVISED JULY, 1967 --- ROBERT M. SUPNIK 8 / 9 / MACROES... 10 DEFINE ROTR4 11 DEFINE ROTR6 12 DEFINE ROTR8 13 DEFINE ROTL5 14 DEFINE ROTL4 15 DEFINE ROTR3 16 DEFINE ROTR5 17 DEFINE ROTL6 18 7402 XX=HLT 19 / 20 / 21 / ASSEMBLY PARAMETERS... 22 / 23 / NUMBER OF WORDS DEVOTED TO EACH F-P NUMBER IS... 24 0003 NUMWD=3 25 / NUMBER OF DECIMAL DIGITS OF PRECISION IS... 26 0007 PREC=NUMWD+NUMWD+NUMWD-2 27 / 28 / / EIGHT/S INTERPRETER. ESI Page 2 29 /SYNTAX TABLE DEFINITIONS AND MACROES. 30 / 31 /FIRST WORD: 32 / 33 DEFINE TERML A 34 35 DEFINE SUBGL A 36 37 / 38 /SECOND WORD: 39 / 40 / ALTERNATE: 41 / ALTLOC = LOCATION OF ALTERNATE (1-15 WORDS FOLLOWING) 42 / SUCLOC = LOC. OF SUCCESSOR (-26 TO +7 WORDS) 43 / = NOSUC 44 / QGEN = ?NEXT WORD A GENERATOR - "YES" OR "NO" 45 / 46 0001 YES=1 47 0000 NO=0 48 DEFINE FCALT ALTLOC SUCLOC QGEN 49 < NOSUC=.-27 50 VFD 1:QGEN, 2:2, 4:ALTLOC-.-1, 5:SUCLOC-.+27> 51 / 52 / 53 / OK TO FAIL: 54 / 55 DEFINE FCOK SUCLOC QGEN 56 < NOSUC=.-27 57 VFD 1:QGEN, 2:1, 4:0, 5:SUCLOC-.+27> 58 / 59 / 60 / DEAD: 61 / 62 DEFINE FCDEAD SUCLOC QGEN 63 < NOSUC=.-27 64 VFD 1:QGEN, 2:3, 4:0, 5:SUCLOC-.+27> 65 / 66 / 67 / FAIL: 68 / 69 DEFINE FCFAIL SUCLOC QGEN 70 < NOSUC=.-27 71 VFD 1:QGEN, 2:0, 4:0, 5:SUCLOC-.+27> 72 / 73 / 74 /WORDS 3-N (GENERATORS): 75 / 76 DEFINE GEN GENLOC QGEN 77 / EIGHT/S INTERPRETER. ESI Page 3 78 /STRING MANIPULATION MACROES. 79 / 80 DEFINE ADV PTRNAM 81 < JMS I [ADVPS] 82 PTRNAM> 83 / 84 DEFINE RD PTRNAM 85 < JMS I [RDS] 86 PTRNAM> 87 / 88 DEFINE RDADV PTRNAM 89 < JMS I [RDADVS] 90 PTRNAM> 91 / 92 DEFINE WR PTRNAM 93 < JMS WRS 94 PTRNAM> 95 / 96 DEFINE WRADV PTRNAM 97 < JMS I [WRADVS] 98 PTRNAM> 99 / 100 DEFINE BKPTR PTRNAM 101 < JMS BKPTRS 102 PTRNAM> 103 / 104 DEFINE DIFPTR PTR1 PTR2 105 < JMS I [DIFPS] 106 PTR1 107 PTR2> 108 / 109 DEFINE TYSTRG PTRNAM 110 < JMS TYSTRS 111 PTRNAM> 112 113 DEFINE CPY A B 114 < TAD A 115 DCA B> / EIGHT/S INTERPRETER. ESI Page 4 116 / PAGE 0 ASSIGNMENTS. 117 / 118 /AUTO-INDEX REGISTERS. 119 0010 *10 120 00010 0000 AX0, 0 121 00011 0000 AX1, 0 122 00012 0000 AX2, 0 123 00013 0000 AX3, 0 124 00014 0000 AX4, 0 125 00015 0000 AX5, 0 126 / 127 /FLOATING-POINT ARITHMETIC REGISTERS... 128 / 129 0020 *20 130 00020 0000 DIGAC, 0 /QUOTIENT ACCUMULATOR 131 00021 0000 MQ, 0 /FLOATING MQ REGISTER (FMQ) 132 0030 *MQ+PREC 133 00030 0000 AC, 0 /FLOATING ACCUMULATOR (FAC) 134 0037 *AC+PREC 135 00037 0000 ACX, 0 /FAC EXPONENT 136 00040 0000 ACS, 0 /FAC SIGN 137 00041 0000 IR, 0 /FLOATING INPUT REGISTER (IR) 138 0050 *IR+PREC 139 00050 0000 IRX, 0 /IR EXPONENT 140 00051 0000 IRS, 0 /IR SIGN 141 00052 0000 ALDIG, 0 /ALIGNMENT AND AC OVERFLOW DIGIT 142 / 143 / 144 / TEMPORARIES... 145 / 146 00053 0000 CRWD, 0 147 00054 0000 WDCNT, 0 /WORD COUNTER FOR LOOPS. 148 00055 0000 ALCNT, 0 /NUMBER OF SHIFTS FOR REGISTER 149 /ALIGNMENT. 150 00056 0000 MULCNT, 0 /MULTIPLICATION COUNT 151 00057 0000 NORMFR, 0 /"FROM" WORD POINTER. 152 00060 0000 NORMTO, 0 /"TO" WORD POINTER. 153 00061 0000 TMP, 0 /GENERAL TEMPORARY. / EIGHT/S INTERPRETER. ESI Page 5 154 /MAIN CONTROL PAGE 0 ASSIGNMENTS. 155 / 156 00062 0330 ENDPR, USERPR /CURRENT END OF USER PROG STORAGE 157 00063 7740 ARYNXT, USEREND /CURRENT END OF ELEMENT STORAGE. 158 00064 0000 STKNXT, 0 /CURRENT TOP OF STACK. 159 00065 0000 STEPNO, 0 /STEP NUMBER IF INDIRECT 160 0070 *STEPNO+NUMWD 161 0016 GOAL=16 162 / 163 / 164 /FOR VARIABLES: 165 00070 0000 INDEX, 0 /LOCATION OF "FOR" INDEX VARIABLE. 166 00071 0000 INCR, 0 /VALUE OF "FOR" INCREMENT 167 0074 *INCR+NUMWD 168 00074 0000 INCRSN, 0 /INCREMENT SIGN. 169 00075 0000 TRMVAL, 0 /"FOR" TERMINAL VALUE. 170 0100 *TRMVAL+NUMWD 171 / 172 /LEXICAL ANALYSER TEMPORARIES AND DEFINITIONS. 173 / 174 0017 NXTTTC=17 /NEXT TERMINAL TYPE CODE. 175 00100 0000 NXTLXF, 0 /CURRENT GADGET START. 176 00101 0000 QRTF, 0 177 00102 0000 XSTEP, 0 /LOC. OF INDIRECT STEP; 0 IF DIRECT 178 00103 0000 NXTLXN, 0 /CURRENT CHARACTER BEING EXAMINED 179 00104 0000 0 180 00105 0000 CURSYM, 0 /LOCATION OF CURRENT V ARIABLE. 181 00106 0000 QANYIN, 0 /?ANY INPUT IN BUFFER OR FAC 182 00107 0000 CURCHR, 0 /LAST CHARACTER READ FROM STRING. 183 00110 0000 SVLXF, 0 /STRING POINTER USED IN "TYPE". 184 00111 0000 0 185 00112 0000 VARNAM, 0 /VARIABLE NAME IN SCAN 186 00113 0000 VARLOC, 0 /VARIABLE LOCATION IN SCAN 187 / 188 00114 0000 PRVSTP, 0 /PREVIOUS STEP LOCATION 189 00115 0000 CURSTP, 0 /CURRENT STEP LOC. TEMPORARY 190 00116 0000 NXTSTP, 0 /LOCATION OF NEXT STEP POINTER. 191 / 192 / 193 /UNPACKED STRING POINTERS. 194 /USED BY STRING MANIPULATION SUBROUTINES. 195 / 196 00117 0000 ADVAC, 0 /PDP-8 AC STORAGE 197 00120 0000 PTR1ST, 0 /LOCATION OF CURRENT WORD IN STRING 198 00121 0000 LPTR1ST, 0 /LOCATION OF STRING WORD POINTER. 199 00122 0000 PTR2ND, 0 /LOCATION OF ?RIGHT. 200 00123 0000 QADVC, 0 /?ADVANCE AFTER READ OR WRTIE. 201 00124 0000 QEOL, 0 /END OF LINE FLAG 202 00125 0000 QINSTAT, 0 /INTERRUPT STATEMENT FLAG 203 00126 0000 PAGEKNT, 0 / EIGHT/S INTERPRETER. ESI Page 6 204 / 205 / "INTERRUPT" AND "CANCEL" TELETYPE CODE IS: 206 0375 ICODE=375 / ("ALT MODE"). 207 /MAJOR LOCATION REFERENCES AND SUBROUTINE CALLS: 208 DEFINE GET A 209 < TAD A 210 JMS I [GETNUM]> 211 212 DEFINE STORE A 213 < TAD A 214 JMS I [STPACK]> 215 216 5577 RETURN=JMP I [SUCLP2] 217 4576 PUSH=JMS I [PUSH1] 218 4575 POP=JMS I [POP1] 219 4574 SWP=JMS I [SWAP] 220 4573 TYPE=JMS I [TYCHAR] 221 4572 CRLF=JMS I [TYCRLF] 222 / 223 / 224 PAGE 21 225 /TYCHAR 226 /TYPE AN ASCII CHARACTER. 227 /CHARACTER IN 8AC ON ENTRY, LEFT CLEAR ON EXIT. 228 / 229 04200 0000 TYCHAR, 0 230 04201 6041 TSF /IS TELEPRINTER READY? 231 04202 5201 JMP .-1 /NO. 232 04203 6046 TLS /YES. PRINT CHARACTER. 233 04204 7200 CLA 234 04205 5600 JMP I TYCHAR 235 4206 BP21=. 236 LIT 237 PAGE 30 238 / 239 /TYCRLF 240 /TYPE CARRIAGE RETURN/LINE FEED. 241 /8AC CLEAR ON ENTRY AND EXIT. 242 06000 0000 TYCRLF, 0 243 06001 1212 TAD ECR 244 06002 4573 TYPE /TYPE "CR". 245 06003 1213 TAD ELF 246 06004 4573 TYPE /TYPE "LF". 247 06005 2777@ ISZ LINEKNT /IS LINE COUNT ZERO? 248 06006 5600 JMP I TYCRLF /NO. 249 06007 4776@ JMS EJECT /YES, GO TO TOP OF FORM 250 06010 4775@ JMS NEWPAGE /PRINT NEW HEADING. 251 06011 5600 JMP I TYCRLF 252 / 253 06012 0215 ECR, 215 254 06013 0212 ELF, 212 255 6014 BP30=. 06175 6454 06176 6315 06177 0345 256 LIT / EIGHT/S INTERPRETER. ESI Page 7 257 PAGE 1 258 /ESI-B GENERATORS. 259 / 260 /"SET" GENERATORS. 261 / 262 00200 1105 PSHCUR, TAD CURSYM /PUT "CURSYM" IN STACK. 263 00201 4576 GPD, PUSH 264 00202 5577 RETURN 265 / 266 00203 4575 STOREC, POP /GET LOCATION OF VARIABLE. 267 00204 3105 DCA CURSYM /RECOVER VARIABLE LOC. 268 00205 6211 CDF 10 269 00206 1505 TAD I CURSYM /GET CONTROL WORD. 270 00207 6201 CDF 0 271 00210 1377 TAD (-3777) 272 00211 7650 SNA CLA /IS IT SUBSCRIPTED? 273 00212 5776@ JMP ERRSUB /YES. SUBSCRIPT ERROR. 274 00213 6211 CDF 10 275 STORE CURSYM /NO, STORE AND PACK AC THERE. 00214 1105 00215 4571 276 00216 5577 RETURN 277 / 278 00217 4221 ACTOS, JMS PUSHAC /STORE FAC. 279 00220 5577 RETURN 280 / 281 00221 0000 PUSHAC, 0 /SUBROUTINE TO STORE FAC. 282 00222 1064 TAD STKNXT 283 00223 1170 TAD [NUMWD-1] 284 00224 7141 CIA CLL 285 00225 1063 TAD ARYNXT /ARYNXT-(STKNXT+NUMWD-1) 286 00226 7620 SNL CLA /IS IT POSITIVE? 287 00227 5775@ JMP ERRSO /NO. STACK OVERFLOW. 288 00230 6211 CDF 10 289 STORE STKNXT /YES, STORE PACKED AC IN STACK. 00231 1064 00232 4571 290 00233 1064 TAD STKNXT 291 00234 1167 TAD [NUMWD] /INCREMENT STACK POINTER. 292 00235 3064 DCA STKNXT / BY NUMWD. 293 00236 5621 JMP I PUSHAC /EXIT. 294 / 295 00237 0000 POPAC, 0 /ROUTINE TO POP STORED AC. 296 00240 1064 TAD STKNXT 297 00241 1166 TAD [-NUMWD] /GET LOC. OF PACKED AC ON STACK 298 00242 3064 DCA STKNXT 299 00243 6211 CDF 10 300 GET STKNXT /UNPACK STACK TO FAC 00244 1064 00245 4565 301 00246 5637 JMP I POPAC 302 / 303 00247 4574 POPDO, SWP /SWAP FAC AND IR. 304 00250 4237 JMS POPAC /UNPACK TOP OF STACK TO FAC. 305 00251 4575 DO, POP /GET LOCATION OF OPERATION. 306 00252 3061 DCA TMP 307 00253 5461 JMP I TMP /GO TO DELAYED OPERATION. / EIGHT/S INTERPRETER. ESI Page 8 308 / 309 00254 6211 TOAC, CDF 10 /GET FIRST WORD OF VARIABLE. 310 00255 1505 TAD I CURSYM 311 00256 6201 CDF 0 312 00257 0164 AND [3777] 313 00260 1377 TAD (-3777) 314 00261 7650 SNA CLA /IS VARIABLE DEFINED AND SIMPLE? 315 00262 5774@ JMP ERRUND /NO. 316 00263 6211 CDF 10 317 GET CURSYM /GO GET AND UNPACK NUMBER SPEC. BY CURSYM. 00264 1105 00265 4565 318 00266 5577 RETURN 319 / 320 00267 1170 STDIV, TAD [DFDV-DFMU] 321 00270 1170 STMUL, TAD [DFMU-DFSB] 322 00271 1170 STSUB, TAD [DFSB-DFAD] 323 00272 1373 STADD, TAD (DFAD) /LOCATION OF "FAD" ROUTINE. 324 00273 4275 GPDU, JMS PUSH1U /STORE ON STACK UNDER TOP. 325 00274 5577 RETURN 326 / 327 /PUSH1U - PUSHES A WORD, GIVEN IN 8AC AT ENTRY, INTO 328 /STACK DIRECTLY UNDER TOP WORD. USED FOR DELAYED GENERATORS 329 / 330 00275 0000 PUSH1U, 0 331 00276 3061 DCA TMP /SAVE VALUE. 332 00277 4575 POP /GET TOP WORD OF STACK. 333 00300 3054 DCA WDCNT /SAVE IT. 334 00301 1061 TAD TMP 335 00302 4576 PUSH /PUSH DOWN NEW WORD. 336 00303 1054 TAD WDCNT 337 00304 4576 PUSH /PUSH OLD TOP. 338 00305 5675 JMP I PUSH1U /ESIT. 339 / 340 / 341 00306 4772@ DFAD, JMS FAD 342 00307 5577 RETURN 343 / 344 00310 4771@ DFSB, JMS FSB 345 00311 5577 RETURN 346 / 347 00312 4770@ DFMU, JMS FMU 348 00313 5577 RETURN 349 / 350 00314 4767@ DFDV, JMS FDV 351 00315 5577 RETURN / EIGHT/S INTERPRETER. ESI Page 9 352 / 353 /PROCESS "LOG ON". 354 / 355 00316 1366 PRLON, TAD (LONMES) /PUT OUT "TITLE: " MESSAGE. 356 00317 4765@ JMS TYPKST 357 00320 4764@ JMS INPUT /READ INPUT LINE INTO 'BUFF'. 358 CPY [TITBUF],SVLXF 00321 1170 00322 3110 359 CPY [0010],SVLXF+1 00323 1163 00324 3111 360 PRLON1, RDADV NXTLXF /READ AN INPUT CHAR. 00325 4562 00326 0100 361 00327 1363 TAD (-ICR) /IS IT CR? 362 00330 7650 SNA CLA 363 00331 5325 JMP PRLON1 /YES, IGNORE IT. 364 00332 1107 TAD CURCHR /NO, WRITE IT IN TITLE BUFFER. 365 WRADV SVLXF 00333 4561 00334 0110 366 00335 1107 TAD CURCHR /WAS THE CHAR. EOL? 367 00336 7640 SZA CLA 368 00337 5325 JMP PRLON1 369 00340 3126 DCA PAGEKNT 370 00341 3345 DCA LINEKNT 371 00342 4762@ PRPAGE, JMS EJECT /GO TO TOP OF FORM. 372 00343 4761@ JMS NEWPAGE /PRINT NEW HEADING. 373 00344 5577 RETURN 374 / 375 00345 7710 LINEKNT, -LINPAG 376 00346 5760@ PRLOF, JMP UPRLOF /GENERATOR IN UPPER 2K. 377 0347 EP1=. 00360 4604 00361 6454 00362 6315 00363 7741 00364 6014 00365 1667 00366 4600 00367 4400 00370 4206 00371 5603 00372 5600 00373 0306 00374 5630 00375 5612 00376 5644 00377 4001 378 LIT 379 / 380 PAGE 23 381 04600 2411 LONMES, TEXT /TITLE: / 04601 2414 04602 0572 04603 4000 / EIGHT/S INTERPRETER. ESI Page 10 382 / 383 /PROCESS "LOG OFF". 384 / 385 04604 4777@ UPRLOF, JMS EJECT /GO TO TOP OF FORM. 386 04605 1376 TAD (LF3-1) /EJECT 3 LINES TO ALIGN TEAR MARKS 387 04606 4775@ JMS TYUNPK 388 04607 1376 TAD (LF3-1) /ACTUALLY, WE MUST EJECT 7 TIMES. 389 04610 4775@ JMS TYUNPK 390 04611 3126 DCA PAGEKNT /CLEAR THE PAGE COUNT. 391 04612 6211 CDF 10 392 04613 3570 DCA I [TITBUF] /CLEAR THE TITLE BUFFER. 393 04614 6201 CDF 0 394 04615 5774@ JMP PLINE /DO CRLF AND SET CR SWITCH. 395 4616 BP23=. 04774 0704 04775 6347 04776 0167 04777 6315 396 LIT / EIGHT/S INTERPRETER. ESI Page 11 397 PAGE 34 398 /FDTOB 399 /FLOATING DECIMAL TO BINARY CONVERSION. 400 /INTEGER PART OF FAC IS CONVERTED TO A SIGNED BINARY INTEGER, 401 /WHICH IS LEFT IN THE 8AC AT EXIT. THE LEGAL RANGE IS -999 402 /TO +999; VIOLATION CAUSES "SUBSCRIPT" ERROR. 403 / 404 07000 0000 FDTOB, 0 405 07001 1036 TAD AC+PREC-1 /GET H-O DIGIT OF FAC 406 07002 3056 DCA MULCNT 407 07003 1037 TAD ACX 408 07004 7550 SNA SPA /IS EXPONENT GT 0? 409 07005 5237 JMP FDTOBX /NO. INTEGER PART IS 0. 410 07006 1160 TAD [-1] /YES. 411 07007 7650 SNA CLA /IS EXPONENT = 1? 412 07010 5227 JMP FDTOB1 /YES. DONE. 413 07011 4241 JMS BMUL10 /NO. MULTIPLY MULCNT BY 10. 414 07012 1035 TAD AC+PREC-2 /ADD NEXT AC DIGIT. 415 07013 3056 DCA MULCNT 416 07014 1037 TAD ACX 417 07015 1157 TAD [-2] 418 07016 7650 SNA CLA /IS EXPONENT = 2? 419 07017 5227 JMP FDTOB1 /YES. 420 07020 4241 JMS BMUL10 /NO. 421 07021 1034 TAD AC+PREC-3 /ADD THIRD AC DIGIT. 422 07022 3056 DCA MULCNT 423 07023 1037 TAD ACX 424 07024 1166 TAD [-3] 425 07025 7640 SZA CLA /IS EXPONENT = 3? 426 07026 5777@ JMP ERRSUB /NO. SUBSCRIPT ERROR. 427 07027 1040 FDTOB1, TAD ACS 428 07030 7650 SNA CLA /IS AC SIGN "+"? 429 07031 5235 JMP FDTOB2 /YES. 430 07032 1056 TAD MULCNT /NO. 431 07033 7041 CIA /COMPLEMENT RESULT. 432 07034 5600 JMP I FDTOB 433 / 434 07035 1056 FDTOB2, TAD MULCNT 435 07036 5600 JMP I FDTOB 436 / 437 07037 7200 FDTOBX, CLA 438 07040 5600 JMP I FDTOB 439 / 440 07041 0000 BMUL10, 0 441 07042 1056 TAD MULCNT /MULTIPLY MULCNT BY 10. 442 07043 7104 CLL RAL 443 07044 3056 DCA MULCNT 444 07045 1056 TAD MULCNT 445 07046 7106 CLL RTL 446 07047 1056 TAD MULCNT 447 07050 5641 JMP I BMUL10 448 7051 BP34=. 07177 5644 449 LIT / EIGHT/S INTERPRETER. ESI Page 12 450 PAGE 3 451 /PROCESS SUBSCRIPTED VARIABLES. 452 / 453 /SET ?PERMIT UNDEFINED (QPUND) TO 0 OR 1. 454 00600 7201 SQPUN1, CLA IAC 455 00601 3777@ SQPUN0, DCA QPUND /SET TO 0 OR 1. 456 00602 5577 RETURN 457 / 458 / 459 /SAVE QPUN ON STACK. 460 00603 1777@ STQPUN, TAD QPUND /SAVE QPUND. 461 00604 4576 PUSH 462 00605 5201 JMP SQPUN0 /CLEAR QPUND 463 / 464 /STORE FIRST SUBSCRIPT: 465 00606 4776@ STSUB1, JMS FDTOB /GET BINARY VALUE OF SUBS1. 466 00607 4576 PUSH /SAVE IT ON STACK. 467 00610 7201 CLA IAC /SET # OF SUBS TO 1. 468 00611 4576 PUSH 469 00612 7201 CLA IAC /SET 2ND SUBSCRIPT TO 1. 470 00613 4576 GPD3, PUSH 471 00614 5577 RETURN 472 / 473 /STORE SECOND SUBSCRIPT: 474 / 475 00615 4575 STSUB2, POP /THROW AWAY FALSE SUBS2. 476 00616 4575 POP /GET OF SUBS. 477 00617 7001 IAC /ADD 1. 478 00620 4576 PUSH /PUT BACK 2. 479 00621 4776@ JMS FDTOB /GET BINARY VALUE OF SUBS2. 480 00622 5213 JMP GPD3 /PUT IT ON STACK. 481 482 0623 BP3=. 00776 7000 00777 0553 483 LIT / EIGHT/S INTERPRETER. ESI Page 13 484 PAGE 2 485 /COMPUTE SUBSCRIPT ELEMENT LOCATION. 486 /STACK HAS FOLLOWING VALUES AT ENTRY : 487 / TOP - SECOND SUBSCRIPT (SUBS2) 488 / TOP-1 - NUMBER OF SUBSCRIPTS (NUMSUB) 489 / TOP-2 - FIRST SUBSCRIPT (SUBS1) 490 / TOP-3 - ?PERMIT UNDEFINED ELEMENT (QPUND) 491 / TOP-4 - LOC. OF VARB. CONTROL WORD (CURSYM) 492 / 493 /AT EXIT: 494 / CURSYM - LOCATION OF ELEMENT IN VARIBLE STORAGE 495 / 496 /8AC IS CLEAR ON ENTRY AND EXIT. 497 / 498 00400 4575 CMPSUB, POP /GET ALL SAVED VALUES. 499 00401 3352 DCA SUBS2 500 00402 4575 POP 501 00403 3350 DCA NUMSUB 502 00404 4575 POP 503 00405 3351 DCA SUBS1 504 00406 4575 POP 505 00407 3353 DCA QPUND 506 00410 4575 POP 507 00411 3105 DCA CURSYM 508 00412 6211 CDF 10 509 00413 1505 TAD I CURSYM /GET VARIABLE CONTROL WORD. 510 00414 6201 CDF 0 511 00415 7040 CMA 512 00416 7450 SNA /IS IT "UNDEFINED"? 513 00417 5272 JMP PRU1 /YES. 514 00420 1165 TAD [4000] 515 00421 7640 SZA CLA /IS IT "SUBSCRIPTED"? 516 00422 5777@ JMP ERRSUB /NO. SUBSCRIPT ERROR. 517 00423 2105 ISZ CURSYM /YES. 518 00424 6211 CDF 10 519 00425 1505 TAD I CURSYM /GET # OF SUBSCRIPTS. 520 00426 6201 CDF 0 521 00427 7041 CIA 522 00430 1350 TAD NUMSUB 523 00431 7640 SZA CLA /IS IT RIGHT? 524 00432 5777@ JMP ERRSUB /NO. SUBSCRIPT ERROR. 525 00433 2105 ISZ CURSYM /ADVANCE TO ENTRY LOC. 526 00434 1105 CMPL1, TAD CURSYM 527 00435 6201 CDF 0 /BECAUSE OF FOLLOWING INDIRECT LINK. 528 00436 3776@ DCA PREVEL /SAVE PREDECESSOR LOC. 529 00437 6211 CDF 10 530 00440 1505 TAD I CURSYM /GET POINTER TO NEXT ELEMENT. 531 00441 6201 CDF 0 532 00442 7100 CLL 533 00443 1375 TAD (-VBLKEND) /IS THERE A NEXT ELEMENT? 534 00444 7420 SNL 535 00445 5343 JMP PRU2 /NO. NOTE: AC NOT CLEAR. 536 00446 1374 TAD (VBLKEND) 537 00447 3105 DCA CURSYM /YES. MAKE IT CURRENT. 538 00450 1105 TAD CURSYM 539 00451 3010 DCA AX0 /LOCATION OF 1ST SUBSCRIPT. 540 00452 6211 CDF 10 / EIGHT/S INTERPRETER. ESI Page 14 541 00453 1410 TAD I AX0 /GET 1ST SUBSCRIPT. 542 00454 7041 CIA 543 00455 1351 TAD SUBS1 544 00456 7640 SZA CLA /IS IT DESIRED VALUE? 545 00457 5234 JMP CMPL1 /NO. 546 00460 1410 TAD I AX0 /YES. GET SECOND SUBS. 547 00461 7041 CIA 548 00462 1352 TAD SUBS2 549 00463 7640 SZA CLA /IS IT DESIRED VALUE. 550 00464 5234 JMP CMPL1 /NO. 551 00465 2010 ISZ AX0 /YES. SET LOCATION OF VALUE. 552 00466 1010 TAD AX0 553 00467 3105 DCA CURSYM 554 00470 6201 CDF 0 555 00471 5577 RETURN /DONE. 556 / 557 /CREATE NEW ELEMENT IF ALLOWED (ELEMENT IS BEING DEFINED). 558 00472 1353 PRU1, TAD QPUND 559 00473 7650 SNA CLA /CAN IT BE UNDEFINED? 560 00474 5777@ JMP ERRSUB /NO. SUBSCRIPT ERROR. 561 00475 1164 TAD [3777] 562 00476 6211 CDF 10 563 00477 3505 DCA I CURSYM /SET VARIABLE "SUBSCRIPTED". 564 00500 2105 ISZ CURSYM 565 00501 1350 TAD NUMSUB /SET # OF SUBS. 566 00502 3505 DCA I CURSYM 567 00503 2105 ISZ CURSYM 568 00504 1105 TAD CURSYM /REL LOC. OF POINTER. 569 00505 3505 DCA I CURSYM /GOES TO POINTER WORD. 570 00506 6201 CDF 0 571 00507 1063 CMPS2, TAD ARYNXT 572 00510 1373 TAD (-NUMWD-3) /LOCATION OF NEW ELEMENT. 573 00511 3063 DCA ARYNXT 574 00512 1064 TAD STKNXT 575 00513 7141 CIA CLL 576 00514 1063 TAD ARYNXT 577 00515 7450 SNA 578 00516 5772@ JMP ERRSO /NO ROOM FOR ELEMENT. 579 00517 7620 SNL CLA 580 00520 5772@ JMP ERRSO 581 00521 7240 CLA CMA 582 00522 1063 TAD ARYNXT 583 00523 3010 DCA AX0 584 00524 6211 CDF 10 585 00525 1505 TAD I CURSYM /GET POINTER OF LAST ELEMENT. 586 00526 3410 DCA I AX0 /SET INTO NEW ELEMENT. 587 00527 1063 TAD ARYNXT /MAKE PREVIOUS ELEMENT 588 00530 3505 DCA I CURSYM / POINT OT NEW ONE. 589 00531 1351 TAD SUBS1 /STORE SUBSCRIPT VALUES. 590 00532 3410 DCA I AX0 591 00533 1352 TAD SUBS2 592 00534 3410 DCA I AX0 593 00535 7240 CLA CMA 594 00536 3410 DCA I AX0 /SET ELEMENT "UNDEFINED". 595 00537 6201 CDF 0 596 00540 1010 TAD AX0 597 00541 3105 DCA CURSYM /SET CURSYM TO NEW ELEMENT LOC. / EIGHT/S INTERPRETER. ESI Page 15 598 00542 5577 RETURN 599 / 600 00543 7200 PRU2, CLA 601 00544 1353 TAD QPUND 602 00545 7650 SNA CLA /CAN IT BE UNDEFINED 603 00546 5777@ JMP ERRSUB /NO. SUBSCRIPT ERROR. 604 00547 5307 JMP CMPS2 /YES. CREATE NEW ELEMENT. 605 / 606 /TEMPORARIES: 607 00550 0000 NUMSUB, 0 /NUMBER OF SUBSCRIPTS IN REFERENCE 608 00551 0000 SUBS1, 0 /FIRST SUBSCRIPT VALUE. 609 00552 0000 SUBS2, 0 /SECOND SUBSCRIPT VALUE 610 00553 0000 QPUND, 0 /?PERMIT UNDEFINED ELEMENT. 611 612 0554 EP2=. 00572 5612 00573 7772 00574 0330 00575 7450 00576 2244 00577 5644 613 LIT / EIGHT/S INTERPRETER. ESI Page 16 614 0623 *BP3 615 /BUILT-IN FUNCTIONS. 616 / 617 00623 1157 SPRIP, TAD (PRIP-PRFP) 618 00624 1375 SPRFP, TAD (PRFP-PRSGN) 619 00625 1374 SPRSGN, TAD (PRSGN-PRABS) 620 00626 1373 SPRABS, TAD (PRABS-PRSIN) 621 00627 1372 SPRSIN, TAD (PRSIN-PRCOS) 622 00630 1371 SPRCOS, TAD (PRCOS-PRSQRT) 623 00631 1370 SPRSQRT, TAD (PRSQRT-PREXP) 624 00632 1367 SPREXP, TAD (PREXP-PRLOG) 625 00633 1366 SPRLOG, TAD (PRLOG-PRARC) 626 00634 1365 SPRARC, TAD (PRARC-PRLN) 627 00635 1364 SPRLN, TAD (PRLN-PRDP) 628 00636 1166 SPRDP, TAD (PRDP-PREP) 629 00637 1363 SPREP, TAD (PREP) 630 00640 5762@ JMP GPDU 631 / 632 / 633 00641 4262 PRIP, JMS IPS /GET INTEGER PART OF FAC. 634 00642 5577 RETURN 635 / 636 00643 4245 PRFP, JMS FPS /GET FRACTION PART. 637 00644 5577 RETURN 638 / 639 00645 0000 FPS, 0 640 00646 4761@ JMS PUSHAC /SAVE FAC. 641 00647 4262 JMS IPS /GET IP OF FAC. 642 00650 4574 SWP /FAC TO IR. 643 00651 4760@ JMS POPAC /GET FAC. 644 00652 4757@ JMS FSB /SUBSTRACT IP FROM FAC. 645 00653 5645 JMP I FPS 646 / 647 00654 1156 PRSGN, TAD [-PREC] 648 00655 4274 JMS CLFACS /CLEAR ALL FAC DIGITS. 649 00656 2036 ISZ AC+PREC-1 /FORCE H-O DIGIT OF FAC TO 1. 650 00657 7201 CLA IAC 651 00660 3037 DCA ACX /FORCE ACX TO 1. 652 00661 5577 RETURN 653 / 654 / 655 /IPS 656 /INTEGER PART OF FAC TO FAC. 657 00662 0000 IPS, 0 658 00663 1037 TAD ACX /AC EXP. IS # OF INTEGER DIGITS. 659 00664 7710 SPA CLA /IS ACX POSITIVE? 660 00665 3037 DCA ACX /NO. CLEAR ALL AC DIGITS. 661 00666 1037 TAD ACX 662 00667 1156 TAD [-PREC] /SUBTRACT PRECISION. 663 00670 7500 SMA /IS ACX 7 OR MORE? 664 00671 7610 SKP CLA /YES. FAC IS INTEGRAL ALREADY. 665 00672 4274 JMS CLFACS /NO. GO CLEAR SPEC. OF DIGITS. 666 00673 5662 JMP I IPS /EXIT. 667 / 668 / 669 /CLEAR SPECIFIED OF LOW-ORDER DIGITS OF FAC. 670 00674 0000 CLFACS, 0 / EIGHT/S INTERPRETER. ESI Page 17 671 00675 3054 DCA WDCNT /SET WORD COUNT FOR # OF DIGITS. 672 00676 1155 TAD [AC-1] /INITIAL CLEAR LOCATION. 673 00677 3011 DCA AX1 674 00700 3411 CLFAC1, DCA I AX1 /CLEAR AN FAC DIGIT. 675 00701 2054 ISZ WDCNT 676 00702 5300 JMP CLFAC1 677 00703 5674 JMP I CLFACS 678 / 679 /CONDITIONAL CARRIAGE RETURN IN TYPE STATEMENTS. 680 00704 1356 PLINE, TAD (CRLF) /SET SWITCH TO "RETURN". 681 00705 3306 PNLINE, DCA .+1 /SET SWITCH TO "NO RETURN". 682 00706 4572 CNLINE, CRLF /CONDITIONAL RETURN, EITHER "CRLF" OR "0000=NOP". 683 00707 5577 RETURN 684 / 685 00710 1355 STUPAR, TAD (DFEXP) /SAVE ADDR OF ^ GENERATOR. 686 00711 5213 JMP GPD3 687 0712 EP3=. 00755 7652 00756 4572 00757 5603 00760 0237 00761 0221 00762 0273 00763 5546 00764 1435 00765 0106 00766 7674 00767 0376 00770 7663 00771 7715 00772 0004 00773 1155 00774 0073 00775 7767 688 LIT / EIGHT/S INTERPRETER. ESI Page 18 689 PAGE 4 690 /"FOR" GENERATORS. 691 / 692 /SAVE INDEX LOCATION: 693 01000 1105 SVINDX, TAD CURSYM /SAVE CURSYM 694 01001 3070 DCA INDEX 695 01002 5577 RETURN 696 / 697 /SAVE INCREMENT VALUE: 698 SVINCR, STORE (INCR) /SAVE INCREMENT. 01003 1377 01004 4571 699 01005 1040 TAD ACS 700 01006 3074 DCA INCRSN /SAVE INCREMENT SIGN. 701 01007 5577 RETURN 702 / 703 /STORE TERMINAL VALUE, AND PROCESS FOR. 704 PRFOR, STORE (TRMVAL) /STORE TERMINAL VALUE. 01010 1376 01011 4571 705 PRFORL, GET (TRMVAL) /TERMINAL VALUE TO FAC. 01012 1376 01013 4565 706 01014 4574 SWP /NOW IN IR. 707 01015 6211 CDF 10 708 GET INDEX /INDEX VALUE TO FAC. 01016 1070 01017 4565 709 01020 4775@ JMS FSB /INDEX - TRMVAL TO FAC. 710 01021 1040 TAD ACS 711 01022 1074 TAD INCRSN 712 01023 0154 AND [0020] /SIGN(INCR)*SIGN(DIFFERENCE). 713 01024 7650 SNA CLA /IS IT GE 0? 714 01025 5275 JMP PRFOR4 /YES. SEE IF IT IS GT 0. 715 01026 1374 PRFOR1, TAD (INDEX-1) /NO. PUSH DOWN INDEX, INCR, 716 01027 3010 DCA AX0 / INCRSN, TRMVAL. 717 01030 1373 TAD (-NUMWD-NUMWD-5) /AND LEX. POINTERS. 718 01031 3054 DCA WDCNT 719 01032 1410 PRFR1L, TAD I AX0 720 01033 4576 PUSH /PUSH A WORD. 721 01034 2054 ISZ WDCNT /DONE? 722 01035 5232 JMP PRFR1L /NO. 723 01036 1772@ TAD SYNAN /PUSH SYNAN RETURN LOC. 724 01037 4576 PUSH 725 01040 1102 TAD XSTEP 726 01041 7640 SZA CLA /IS THIS A DIRECT STATEMENT? 727 01042 1371 TAD (ISTAT-DSTAT1) /NO. MAKE AN . 728 01043 1370 TAD (DSTAT1-1) /YES. MAKE A . 729 01044 4772@ PRFOR2, JMS SYNAN /CALL SYNTACTIC ANALYSER (RECURSION 730 01045 4575 POP /POP UP ALL VARIABLES. 731 01046 3772@ DCA SYNAN 732 01047 1373 TAD (-NUMWD-NUMWD-5) 733 01050 3054 DCA WDCNT 734 01051 1367 TAD (XSTEP) 735 01052 3060 DCA NORMTO 736 01053 4575 PRFR2L, POP 737 01054 3460 DCA I NORMTO / EIGHT/S INTERPRETER. ESI Page 19 738 01055 7240 CLA CMA 739 01056 1060 TAD NORMTO 740 01057 3060 DCA NORMTO 741 01060 2054 ISZ WDCNT 742 01061 5253 JMP PRFR2L 743 GET (INCR) /GET INCREMENT. 01062 1377 01063 4565 744 01064 4574 SWP 745 01065 6211 CDF 10 746 GET INDEX /GET INDEX VARIABLE VALUE. 01066 1070 01067 4565 747 01070 4766@ JMS FAD /ADD INDEX AND INCR. 748 01071 6211 CDF 10 749 STORE INDEX /STORE IN INDEX, LEAVE IN FAC. 01072 1070 01073 4571 750 01074 5212 JMP PRFORL 751 / 752 01075 1036 PRFOR4, TAD AC+PREC-1 /GET FAC H-O DIGIT. 753 01076 7650 SNA CLA /IS FAC GT 0? 754 01077 5226 JMP PRFOR1 /NO. EQUAL TO 0. 755 01100 5577 RETURN /YES. EXIT. / EIGHT/S INTERPRETER. ESI Page 20 756 /"STOP" GENERATOR. 757 / 758 01101 4575 PRSTOP, POP /REMOVE AND 759 01102 4575 POP /FROM THE STACK. 760 01103 7200 CLA 761 01104 1365 TAD (STPMSG) 762 01105 4764@ PRSTP1, JMS TYPKST /TYPE STOP MESSAGE. 763 01106 1363 TAD (ERST+3) 764 01107 4764@ JMS TYPKST /TYPE "IN STEP". 765 01110 1102 TAD XSTEP /LOCATION OF THIS STEP. 766 01111 4762@ JMS TYSNUM /GO TYPE STEP NUMBER. 767 01112 4572 PRSTP3, CRLF 768 01113 4761@ PRSTP2, JMS INPUT /GET A LINE. 769 01114 2125 ISZ QINSTAT 770 01115 3102 DCA XSTEP /SET FOR "DIRECT". 771 01116 1360 TAD (INTST-1) 772 01117 4772@ JMS SYNAN /CALL SYNTACTIC ANALYSER . 773 01120 5313 JMP PRSTP2 /CONTINUE IN INTERRUPT MODE. 774 / 775 01121 4223 STPMSG, TEXT /"STOP" / 01122 2417 01123 2042 01124 4000 776 01125 1116 INTMSG, TEXT /INTERRUPTED / 01126 2405 01127 2222 01130 2520 01131 2405 01132 0440 01133 0000 777 / 778 /ILLEGAL INTERRUPT COMMAND MESSAGE. 779 01134 1357 ILLINT, TAD (EHMSG) /TYPE "EH?". 780 01135 4764@ JMS TYPKST 781 01136 5312 JMP PRSTP3 /ACCEPT NEXT INTERRUPT MESSAGE. / EIGHT/S INTERPRETER. ESI Page 21 782 /"IF" GENERATORS. 783 / 784 / 785 01137 1356 STGT, TAD (GGT-GLT) 786 01140 1355 STLT, TAD (GLT-GGE) 787 01141 1356 STGE, TAD (GGE-GLE) 788 01142 1356 STLE, TAD (GLE-GEQ) 789 01143 1356 STEQ, TAD (GEQ-GNE) 790 01144 1354 STNE, TAD (GNE) 791 01145 5753@ JMP GPDU 792 1146 EP4=. 01153 0273 01154 1226 01155 7772 01156 7774 01157 5626 01160 3320 01161 6014 01162 1656 01163 5713 01164 1667 01165 1121 01166 5600 01167 0102 01170 2411 01171 0041 01172 6200 01173 7765 01174 0067 01175 5603 01176 0075 01177 0071 793 LIT 794 PAGE 5 795 / 796 01200 4232 GGT, JMS COMP /COMPARE FAC WITH IR. 797 01201 5207 JMP POPEX /AC < IR. 798 01202 5207 JMP POPEX /AC = IR 799 01203 5577 RETURN /AC > IR. SUCCESS. 800 / 801 01204 4232 GLT, JMS COMP 802 01205 5577 RETURN 803 01206 5207 JMP POPEX 804 01207 4575 POPEX, POP /POP STACK TO REMOVE . 805 01210 7200 CLA /OR . 806 01211 5777@ EXIT, JMP SYNEXIT /EXIT FROM SYNTACTIC ANALYZER. 807 / 808 01212 4232 GGE, JMS COMP 809 01213 5207 JMP POPEX 810 01214 5577 RETURN 811 01215 5577 RETURN 812 / 813 01216 4232 GLE, JMS COMP 814 01217 5577 RETURN 815 01220 5577 RETURN 816 01221 5207 JMP POPEX 817 / / EIGHT/S INTERPRETER. ESI Page 22 818 01222 4232 GEQ, JMS COMP 819 01223 5207 JMP POPEX 820 01224 5577 RETURN 821 01225 5207 JMP POPEX 822 / 823 01226 4232 GNE, JMS COMP 824 01227 5577 RETURN 825 01230 5207 JMP POPEX 826 01231 5577 RETURN / EIGHT/S INTERPRETER. ESI Page 23 827 /COMP 828 /COMPARISON SUBROUTINE. COMPARES FAC WITH IR, 829 / DESTROYING BOTH IN THE PROCESS. 8AC IS 0 ON ENTRY 830 /AND EXIT. 831 /CALLING SEQUENCE IS: 832 / JMS COMP 833 / ... /IF AC < IR. 834 / ... /IF AC = IR. 835 / ... /IF AC > IR. 836 / 837 01232 0000 COMP, 0 838 01233 4776@ JMS FSB /SUBTRACT IR FROM FAC. 839 01234 1040 TAD ACS 840 01235 7640 SZA CLA /IS FAC SIGN NEGATIVE? 841 01236 5632 JMP I COMP /YES. 842 01237 2232 ISZ COMP /NO. 843 01240 1036 TAD AC+PREC-1 /GET H-O FAC DIGIT. 844 01241 7640 SZA CLA /IS IT 0? 845 01242 2232 ISZ COMP /NO. 846 01243 5632 JMP I COMP /YES. THEREFOR FAC IS 0. 847 1244 EP5=. 01376 5603 01377 6332 848 LIT / EIGHT/S INTERPRETER. ESI Page 24 849 0347 *EP1 850 /"TYPE" GENERATORS. 851 / 852 00347 1100 SAVNXT, TAD NXTLXF /SAVE LEXICAL ANALYSER POINTER TO 853 00350 3110 DCA SVLXF /CURRENT CHARACTER OF INSTRUCTION 854 00351 1101 TAD NXTLXF+1 / STRING. 855 00352 3111 DCA SVLXF+1 856 00353 5577 RETURN 857 PAGE 6 858 / 859 PSHNXT, DIFPTR NXTLXF,SVLXF /SVLXF-NXTLXF 01400 4553 01401 0100 01402 0110 860 01403 3054 DCA WDCNT /STORE # OF CHARAS. 861 01404 5577 RETURN 862 01405 4777@ PSHNX1, JMS TYEXPR /GO TYPE SYMBOLIC EXPRESSION 863 01406 5577 RETURN / AND FAC. 864 1407 EP6=. 01577 1244 865 1244 *EP5 866 / 867 01244 0000 TYEXPR, 0 868 01245 1152 TAD [NUMLSP] /# OF SPACES BEFORE "=". 869 01246 1054 TAD WDCNT /SUBTRACT CHAR COUNT. 870 01247 7550 SPA SNA /SHOULD LEADING SPACES BE PRINTED? 871 01250 5252 JMP PTOT2 /NO. (NOTE AC NOT 0). 872 01251 4277 JMS TYSPC /GO TYPE SPACES. 873 01252 3061 PTOT2, DCA TMP /SAVE WHETHER OR NOT TO TYPE SPACES 874 /AFTER = SIGN. 875 01253 4270 JMS PRSTRG /TYPE CHAR. STRING. 876 01254 1061 TAD TMP 877 01255 4775@ JMS TYVAL /GO TYPE VALUE. 878 01256 5644 JMP I TYEXPR /EXIT. 879 0012 NUMLSP=DECIMAL 10 OCTAL / EIGHT/S INTERPRETER. ESI Page 25 880 /TYPE "STRING" GENERATORS. 881 / 882 01257 1055 TSTRG, TAD ALCNT /# OF CHARS. DETERMINED BY TCSCRS. 883 01260 7450 SNA /IS IT 0? 884 01261 5577 RETURN /YES. DON'T TYPE ANYTHING. 885 01262 7041 CIA /NO. COMPLEMENT FOR COUNT. 886 01263 3054 DCA WDCNT / OF CHARACTERS TO BE TYPED. 887 ADV SVLXF /ADVANCE OVER FIRST ". 01264 4551 01265 0110 888 01266 4270 JMS PRSTRG /PRING STRING. 889 01267 5577 RETURN 890 / 891 / 892 /PRSTRG 893 /PRINT STRING SUBROUTINE. 894 /PRINTS A STRING OF INTERNAL CHARACTERS. 895 /FIRST CHARACTER LOCATION IS IN SVLXF AT ENTRY. 896 /"WDCNT" HAS COMPLEMENT OF OF CHARS TO PRINT. 897 /8AC IS 0 AT EXIT. 898 / 899 01270 0000 PRSTRG, 0 900 PRSL, RDADV SVLXF /GET NEXT CHARACTER. 01271 4562 01272 0110 901 01273 4774@ JMS TYINCH /TYPE CHAR. 902 01274 2054 ISZ WDCNT /END OF LOOP? 903 01275 5271 JMP PRSL /NO. 904 01276 5670 JMP I PRSTRG /YES. 905 / 906 / 907 /TYSPC 908 /TYPE NUMBER OF SPACES SPECIFIED BY 8AC AT ENTRY. 909 /8AC IS CLEAR AT EXIT. 910 / 911 01277 0000 TYSPC, 0 912 01300 7041 CIA 913 01301 3061 DCA TMP 914 01302 1373 TYSPCL, TAD (240) 915 01303 4573 TYPE 916 01304 2061 ISZ TMP /DONE? 917 01305 5302 JMP TYSPCL /NO. 918 01306 5677 JMP I TYSPC 919 1307 EP5=. 01373 0240 01374 1707 01375 1600 920 LIT 921 0554 *EP2 922 /PROCESS UNARY MINUS. 923 / 924 00554 1371 SCHSGN, TAD (CHSGN) 925 00555 5770@ JMP GPD 926 / 927 00556 1040 CHSGN, TAD ACS /COMPLEMENT FAC SIGN. 928 00557 7040 CMA 929 00560 0154 AND [0020] / EIGHT/S INTERPRETER. ESI Page 26 930 00561 3040 PRABS, DCA ACS 931 00562 5577 RETURN 932 / 933 /TYPE FLOATING FAC. 934 00563 7001 TYFAC, IAC 935 00564 4767@ JMS TYFP /TYPE FAC WITHOUT LEADING SPACES. 936 00565 5577 RETURN 00567 5000 00570 0201 00571 0556 937 LIT / EIGHT/S INTERPRETER. ESI Page 27 938 1407 *EP6 939 /TYPE ALL VALUES. 940 / 941 01407 4572 TAVAL, CRLF /RETURN CARRIAGE AT START. 942 01410 4776@ JMS SCNVRB /GO TO SCAN VARIABLES. 943 01411 5224 JMP PRLINE /FINAL EXIT WHEN DONE SCAN. 944 01412 4226 JMS TYPVAR /PLUGGED IN ROUTINE -- TYPE VAR. 945 01413 7000 NOP /DONT CARE IF UNDEFINED. 946 01414 5775@ JMP SCNRET 947 /TYPE ALL "A". 948 / 949 TYARRY, CPY CURSYM,VARLOC /COPY VARIABLE LOCATION TO VARLOC 01415 1105 01416 3113 950 RD SVLXF /AND VARIABLE NAME TO VARNAM. 01417 4550 01420 0110 951 01421 3112 DCA VARNAM 952 01422 4226 JMS TYPVAR /TYPE OUT VARIABLE. 953 01423 5774@ JMP ERRUND /IF UNDEFINED, ERROR. 954 01424 4572 PRLINE, CRLF /RETURN CARRIAGE AND EXIT. 955 01425 5577 RETURN 956 / 957 /TYPE VARIABLE ROUTINE. 958 /VARIABLE NAME IN 'VARNAM', LOCATION IN 'VARLOC'. 959 / 960 01426 0000 TYPVAR, 0 961 01427 6211 CDF 10 962 01430 1513 TAD I VARLOC /PLUGGED IN ROUTINE FOR VARB. 963 01431 6201 CDF 0 964 01432 7040 CMA 965 01433 7450 SNA /IS VARIABLE DEFINED? 966 01434 5626 JMP I TYPVAR /NO, TAKE UNDEFINED EXIT. 967 01435 2226 ISZ TYPVAR 968 01436 1165 TAD [-4000] 969 01437 7650 SNA CLA /IS VARIABLE SIMPLE? 970 01440 5253 JMP TYSUBS /NO. 971 01441 1373 TAD (NUMLSP-1) 972 01442 4772@ JMS TYSPC /TYPE SPACES. 973 01443 1112 TAD VARNAM /TYPE VARIABLE NAME. 974 01444 4771@ JMS TYINCH 975 01445 6211 CDF 10 976 GET VARLOC /UNPACK NUMBER. 01446 1113 01447 4565 977 01450 4770@ JMS TYVAL /GO TYPE VALUE. 978 01451 4572 CRLF /RETURN CARRIAGE. 979 01452 5626 JMP I TYPVAR /RETURN. 980 / 981 /TYPE OUT ALL VALUES OF A SUBSCRIPTED VARIABLE. 982 / 983 01453 1112 TYSUBS, TAD VARNAM /VARIABLE NAME IN PACKED CODE. 984 01454 7106 CLL RTL 985 ROTL4 01455 7006 01456 7006 986 01457 1367 TAD (ILBRAC) / EIGHT/S INTERPRETER. ESI Page 28 987 01460 3041 DCA OUTBUF /STORE AND "[". 988 01461 1113 TAD VARLOC 989 01462 7001 IAC 990 01463 3105 DCA CURSYM /SET VARIABLE LOCATION. 991 01464 7240 CLA CMA 992 01465 6211 CDF 10 993 01466 1505 TAD I CURSYM /GET OF SUBSCRIPTS -1. 994 01467 3050 DCA IRX /SAVE IT. 995 01470 2105 ISZ CURSYM 996 01471 1505 TYSUBL, TAD I CURSYM /GET CURRENT "NEXT" POINTER. 997 01472 7100 CLL 998 01473 1366 TAD (-VBLKEND) /IS IT LAST ELEMENT? 999 01474 7630 SZL CLA 1000 01475 5300 JMP TYSUB1 /NO. 1001 01476 6201 CDF 0 /YES. 1002 01477 5626 JMP I TYPVAR /FINISHED WITH VARIABLE. 1003 / 1004 01500 1505 TYSUB1, TAD I CURSYM /LOCATION OF NEW ELEMENT. 1005 01501 3105 DCA CURSYM 1006 01502 1105 TAD CURSYM 1007 01503 3014 DCA AX4 1008 01504 1365 TAD (OUTBUF+1) 1009 01505 3110 DCA SVLXF /INITIALISE STRING POINTER. 1010 01506 3111 DCA SVLXF+1 1011 01507 1414 TAD I AX4 /GET FIRST SUBSCRIPT VALUE. 1012 01510 6201 CDF 0 1013 01511 4764@ JMS BTOD /CONVERT TO DECIMAL. 1014 01512 1050 TAD IRX 1015 01513 7650 SNA CLA /HOW MANY SUBSCRIPTS? 1016 01514 5324 JMP TYSUB2 /1. 1017 01515 1363 TAD (ICOMMA) /2. 1018 WRADV SVLXF /WRITE "," INTO STRING. 01516 4561 01517 0110 1019 01520 6211 CDF 10 1020 01521 1414 TAD I AX4 /GET 2ND SUBSCRIPT VALUE. 1021 01522 6201 CDF 0 1022 01523 4764@ JMS BTOD /CONVERT O DECIMAL. 1023 01524 1362 TYSUB2, TAD (IRBRAC) 1024 WRADV SVLXF /WRITE "]" INTO STRING. 01525 4561 01526 0110 1025 01527 1105 TAD CURSYM 1026 01530 1167 TAD [3] /LOCATION OF VALUE. 1027 01531 6211 CDF 10 1028 01532 4565 JMS I [GETNUM] /GET VALUE. 1029 DIFPTR SVLXF,LBUFF /GET OF CHARS. 01533 4553 01534 0110 01535 1546 1030 01536 3054 DCA WDCNT 1031 01537 1346 TAD LBUFF 1032 01540 3110 DCA SVLXF 1033 01541 3111 DCA SVLXF+1 /RESET POINTER TO BEGINNING. 1034 01542 4761@ JMS TYEXPR /TYPE NAME AND VALUE. 1035 01543 4572 CRLF /RETURN CARRIAGE. 1036 01544 6211 CDF 10 / EIGHT/S INTERPRETER. ESI Page 29 1037 01545 5271 JMP TYSUBL /GO PROCESS NEXT ELEMENT. 1038 / 1039 0041 OUTBUF=IR 1040 01546 0041 LBUFF, OUTBUF /LOCATION OF BUFFER 1041 01547 0000 0 /USED IN LENGTH COMPUTATION. 1042 / 1043 /TYPE "SIZE". 1044 / 1045 01550 1152 TYPSIZ, TAD [NUMLSP] /TYPE OUT LEADING SPACES. 1046 01551 4772@ JMS TYSPC 1047 01552 1064 TAD STKNXT /COMPUTE AMOUNT OF SPACE LEFT: 1048 01553 7040 CMA /AYNXT-STKNXT-1. 1049 01554 1063 TAD ARYNXT 1050 01555 4760@ JMS BTODX /CONVERT RESULT TO DECIMAL AND PRINT. 1051 01556 5224 JMP PRLINE 1052 / 1053 1557 EP6=. 01560 7125 01561 1244 01562 0035 01563 0054 01564 7051 01565 0042 01566 7450 01567 0033 01570 1600 01571 1707 01572 1277 01573 0011 01574 5630 01575 1743 01576 1725 1054 LIT / EIGHT/S INTERPRETER. ESI Page 30 1055 7051 *BP34 1056 /BINARY TO DECIMAL CONVERSION. 1057 / 1058 07051 0000 BTOD, 0 1059 07052 7510 SPA /IS VALUE POSITIVE? 1060 07053 5273 JMP BTODM /NO. 1061 07054 3051 DCA IRS /YES. SVE IT. 1062 07055 1376 BTOD1, TAD DECIMAL (-100) OCTAL 1063 07056 4300 JMS BTODDV /GET THE HUNDREDS DIGIT. SKIP ON 0. 1064 07057 5266 JMP BTODNZ /NON-ZERO. 1065 07060 1147 TAD DECIMAL [-10] OCTAL 1066 07061 4300 JMS BTODDV /GET THE TENS DIGIT. SKIP ON 0. 1067 07062 4320 BTOD2, JMS BTODAD /PUT IN BUFFER. 1068 07063 1051 TAD IRS /GET ONES DIGIT. 1069 07064 4320 JMS BTODAD /PUT IN BUFFER EVEN IF 0. 1070 07065 5651 JMP I BTOD /EXIT. 1071 / 1072 07066 4320 BTODNZ, JMS BTODAD /NON-ZERO HUNDREDS DIGIT. 1073 07067 1147 TAD DECIMAL [-10] OCTAL 1074 07070 4300 JMS BTODDV /GET TENS DIGIT. 1075 07071 7000 NOP 1076 07072 5262 JMP BTOD2 1077 / 1078 07073 7041 BTODM, CIA /COMPLEMENT NEGATIVE NUMBER 1079 07074 3051 DCA IRS / TO GET ITS MAGNITUDE. 1080 07075 1166 TAD [IMINUS-60] 1081 07076 4320 JMS BTODAD /PUT "-" IN BUFFER. 1082 07077 5255 JMP BTOD1 1083 / 1084 /DIVIDES IRS BY NUMBER IN AC AT ENTRY. RESULT LEFT IN AC. 1085 07100 0000 BTODDV, 0 1086 07101 3052 DCA ALDIG /SAVE DIVISOR. 1087 07102 3020 DCA DIGAC /CLEAR QUOTIENT. 1088 07103 7100 BTODD1, CLL 1089 07104 1051 TAD IRS 1090 07105 1052 TAD ALDIG /SUBTRACT DIVISOR 1091 07106 7420 SNL /IS RESULT POSITIVE? 1092 07107 5313 JMP BTODD2 /NO. 1093 07110 3051 DCA IRS /YES. 1094 07111 2020 ISZ DIGAC /INCREMENT QUOTIENT. 1095 07112 5303 JMP BTODD1 /LOOP. 1096 07113 7200 BTODD2, CLA 1097 07114 1020 TAD DIGAC 1098 07115 7450 SNA /IS QUOTIENT 0? 1099 07116 2300 ISZ BTODDV /YES. SKIP NEXT INXTRUCTION. 1100 07117 5700 JMP I BTODDV /EXIT. 1101 / 1102 /TAKES DECIMAL DIGIT (0-11 OCTAL), WRITES TO BUFFER. 1103 07120 0000 BTODAD, 0 1104 07121 1375 TAD (60) 1105 WRADV SVLXF /WRITE INTOP BUFFER. 07122 4561 07123 0110 1106 07124 5720 JMP I BTODAD 1107 1108 / 1109 /BTODX -- EXTENDED BINARY TO DECIMAL WITH PRINTING. / EIGHT/S INTERPRETER. ESI Page 31 1110 / INPUT: BINARY IN 8AC. 1111 / OUTPUT: CHARS. ON TELETYPE 1112 / 1113 /RANGE: 0-4095. 1114 / 1115 07125 0000 BTODX, 0 1116 07126 3051 DCA IRS /SAVE INPUT IN IRS (FOR BTOD), 1117 CPY (MQ),SVLXF /SET UP POINTER FOR BTOD. 07127 1374 07130 3110 1118 07131 3111 DCA SVLXF+1 1119 CPY (BTXRTN),BTOD /SET UP RETURN FOR BTOD. 07132 1373 07133 3251 1120 07134 1372 TAD DECIMAL (-1000) OCTAL 1121 07135 4300 JMS BTODDV /DIVIDE INPUT BY 1000. 1122 07136 7410 SKP /WAS INPUT < 1000? 1123 07137 5255 JMP BTOD1 /YES, TREAT LIKE NORMAL NUMBER. 1124 07140 4320 JMS BTODAD /NO, STORE 1000'S DIGIT. 1125 07141 1376 TAD DECIMAL (-100) OCTAL 1126 07142 4300 JMS BTODDV /GET 100'S DIGIT 1127 07143 7000 NOP /AND STORE EVEN IF ZERO. 1128 07144 5266 JMP BTODNZ 1129 / 1130 BTXRTN, WRADV SVLXF /WRITE EOL AFTER LAST NUMBER. 07145 4561 07146 0110 1131 07147 1374 TAD (MQ) /TYPE OUT PACKED STRING. 1132 07150 4771@ JMS TYPKST 1133 07151 5725 JMP I BTODX /RETURN 1134 / 1135 /"END OF LINE" PROCESSOR. 1136 07152 3124 PREOL, DCA QEOL /SET END OF LINE FLAG TO "EOL". 1137 RDADV NXTLXN /GET CURRENT CHAR. 07153 4562 07154 0103 1138 07155 7450 SNA /IS IT EOL? 1139 07156 5770@ JMP RCSUC /YES, SUCCESS. 1140 07157 1367 TAD (-ISEMI) /NO, IS IT SEMICOLON? 1141 07160 7640 SZA CLA 1142 07161 5766@ JMP RCFAIL /NO, FAILURE. 1143 07162 7240 CLA CMA 1144 07163 3124 DCA QEOL /YES, SET END OF LINE FLAG TO "SEMICOLON". 1145 07164 5770@ JMP RCSUC 07166 5361 07167 7705 07170 5345 07171 1667 07172 6030 07173 7145 07174 0021 07175 0060 07176 7634 1146 LIT / EIGHT/S INTERPRETER. ESI Page 32 1147 PAGE 7 1148 /TYVAL 1149 /TYPE VALUE OF A NUMBER. 1150 /PASSES 8AC VALUE ON ENTRY TO TYFP. 8AC CLEAR AR EXIT. 1151 / 1152 01600 0000 TYVAL, 0 1153 01601 4204 JMS TYSES /GO TYPE " = ". 1154 01602 4777@ JMS TYFP /TYEP VALUE. 1155 01603 5600 JMP I TYVAL 1156 / 1157 /TYSES 1158 /TYPE " = ". 1159 /SAVES INPUT AC. 1160 01604 0000 TYSES, 0 1161 01605 3061 DCA TMP 1162 01606 1376 TAD (240) /TYPE " = ". 1163 01607 4573 TYPE 1164 01610 1375 TAD (275) 1165 01611 4573 TYPE 1166 01612 1376 TAD (240) 1167 01613 4573 TYPE 1168 01614 1061 TAD TMP 1169 01615 5604 JMP I TYSES 1170 / 1171 / 1172 /"TYPE ALL PARTS" GENERATOR. 1173 / 1174 01616 1374 TYAP, TAD DECIMAL (-9) OCTAL 1175 01617 3056 DCA MULCNT /SET PART COUNTER. 1176 01620 1373 TAD (PRTLST) 1177 01621 3014 DCA AX4 /SET PART LIST START. 1178 01622 1014 TYAPS1, TAD AX4 /GET PART START LOCATION. 1179 01623 3115 DCA CURSTP 1180 01624 6211 CDF 10 1181 01625 1515 TAD I CURSTP 1182 01626 6201 CDF 0 1183 01627 7650 SNA CLA /IS PART EMPTY? 1184 01630 5236 JMP TYAPS3 /YES. 1185 01631 4572 CRLF /LEAVE BLANK LINE. 1186 01632 4772@ TYAPS2, JMS GNSTP /GO TO NEXT STEP. 1187 01633 5236 JMP TYAPS3 /END OF PART. 1188 01634 4242 JMS TYSTPS /TYPE STEP. 1189 01635 5232 JMP TYAPS2 1190 / 1191 01636 2014 TYAPS3, ISZ AX4 1192 01637 2056 ISZ MULCNT /END OF PART LIST? 1193 01640 5222 JMP TYAPS1 /NO. TYPE NEXT PART. 1194 01641 5577 RETURN /YES. EXIT. 1195 / 1196 / 1197 /TYSTPS 1198 /TYPE STEP WHOSE LOCATION IS GIVEN BY CURSTP. 1199 / 1200 01642 0000 TYSTPS, 0 1201 01643 1115 TAD CURSTP /GET LOC. OF STEP. 1202 01644 4256 JMS TYSNUM /GO TYPE STEP #. 1203 01645 1376 TAD (240) / EIGHT/S INTERPRETER. ESI Page 33 1204 01646 4573 TYPE 1205 01647 1115 TAD CURSTP 1206 01650 1371 TAD (NUMWD+1) /GET LOC OF 1ST WORD OF STEP. 1207 01651 4316 JMS TYPKUP /GO TYPE STEP. 1208 01652 1370 TAD (256) 1209 01653 4573 TYPE /TYPE ".". 1210 01654 4572 CRLF 1211 01655 5642 JMP I TYSTPS /EXIT. 1212 / 1213 / 1214 /TYSNUM 1215 /TYPE STEP NUMBER. 8AC CONTAINS LOC. OF STEP. 1216 / 1217 01656 0000 TYSNUM, 0 1218 01657 7001 IAC 1219 01660 6211 CDF 10 1220 01661 4565 JMS I [GETNUM] /GET STEP #. 1221 01662 7201 CLA IAC 1222 01663 3037 DCA ACX /FORCE ACX"1. 1223 01664 7001 IAC /FORCE AC NON-0. 1224 01665 4777@ JMS TYFP /TYPE STEP #. 1225 01666 5656 JMP I TYSNUM / EIGHT/S INTERPRETER. ESI Page 34 1226 /TYPKST 1227 /TYPE PACKED STRING. 1228 /LOCATION OF STRING IS IN 8AC ON ENTRY. AC CLEAR ON EXIT. 1229 / 1230 01667 0000 TYPKST, 0 1231 01670 3057 DCA NORMFR /STORE STRING POINTER. 1232 01671 3060 DCA NORMTO /SET ?RIGHT TO 0. 1233 TYSTRG NORMFR /TYPE STRING. 01672 4275 01673 0057 1234 01674 5667 JMP I TYPKST 1235 / 1236 / 1237 /TYSTRS 1238 /TYPE STRING SUBROUTINE. TYPES STRING UNTIL 1239 / AN END CHARCTER (00). 1240 / 1241 /CALLING SEQUENCE: 1242 / JMS TYSTRS 1243 / PTRNAM /LOCATION OF STRING POINTER. 1244 /MACRO: TYSTRG PTRNAM 1245 /8AC CLEAR ON INPUT AND OUTPUT. 1246 / 1247 01675 0000 TYSTRS, 0 1248 01676 1675 TAD I TYSTRS /GET STRING POINTER. 1249 01677 2275 ISZ TYSTRS /ADVANCE OVER POINTER. 1250 01700 3302 DCA .+2 /STORE IN "RDADV" CALL. 1251 TYSTR1, RDADV 0 01701 4562 01702 0000 1252 01703 7450 SNA /IS IT END OF STRING? 1253 01704 5675 JMP I TYSTRS /YES. EXIT. 1254 01705 4307 JMS TYINCH /NO. TYPE CHARACTER. 1255 01706 5301 JMP TYSTR1 1256 / 1257 / 1258 /TYPE INTERNAL CHARACTER 1259 /CHARACTER IN 8AC AT ENTRY, 8AC CLEAR AT EXIT. 1260 / 1261 01707 0000 TYINCH, 0 1262 01710 1367 TAD (-40) 1263 01711 7510 SPA /IS IT BETWEEN 0 AND 37? 1264 01712 1366 TAD (100) /YES. ADD 300 TO GET 301 TO 337. 1265 01713 1376 TAD (240) /NO. ADD 200 TO GET 240 TO 277. 1266 01714 4573 TYPE 1267 01715 5707 JMP I TYINCH 1268 / 1269 01716 0000 TYPKUP, 0 /TYPE UPPER MEMORY INTERNAL STRING. 1270 01717 3057 DCA NORMFR 1271 CPY [0010],NORMTO 01720 1163 01721 3060 1272 TYSTRG NORMFR 01722 4275 01723 0057 1273 01724 5716 JMP I TYPKUP / EIGHT/S INTERPRETER. ESI Page 35 1274 /SCNVRB - SCAN ALL VARIABLES. 1275 /8AC CLEAR ON ENTRY AND BOTH EXITS. MUST ALSO BE 0 AT RETURN 1276 /AT EACH INTERMEDIATE EXIT TO PLUGGED-IN ROUTINE, 1277 / "VARLOC" CONTAINS LOCATION OF VARIABLE 1278 / "VARNAM" CONTAINS VARIABLE NAME IN ASCII. 1279 / 1280 01725 0000 SCNVRB, 0 1281 01726 1325 TAD SCNVRB /GET LOCATION OF PLUGGED-IN 1282 01727 7001 IAC /ROUTINE AND SAVE IT. 1283 01730 3346 DCA PSENT 1284 01731 3112 DCA VARNAM /INITIALISE VARIABLE NAME. 1285 01732 1365 TAD DECIMAL (-26) OCTAL 1286 01733 3347 DCA SCNCNT 1287 01734 1364 TAD (VRBLOC-NUMWD) 1288 01735 7410 SKP 1289 01736 1113 SCNL1, TAD VARLOC 1290 01737 1167 TAD [NUMWD] 1291 01740 3113 DCA VARLOC 1292 01741 2112 ISZ VARNAM 1293 01742 5746 JMP I PSENT /GO TO PLUGGED-IN ROUTINE. 1294 /PLUGGED-IN ROUTINE RETURNS HERE: 1295 01743 2347 SCNRET, ISZ SCNCNT /LAST VARIABLE? 1296 01744 5336 JMP SCNL1 /NO. 1297 01745 5725 JMP I SCNVRB /YES. FINAL EXIT. 1298 / 1299 01746 0000 PSENT, 0 /PLUGGED-IN ROUTINE ENTRY. 1300 01747 0000 SCNCNT, 0 /VARIABLE COUNTER. 1301 / 1302 / 1303 /"DELETE" GENERATORS. 1304 / 1305 /DELETE ALL VALUES. 1306 / 1307 01750 1367 DLAVAL, TAD (USEREND) 1308 01751 3063 DCA ARYNXT /RESET START OF ELEMENT STORAGE. 1309 01752 4325 JMS SCNVRB /SCAN ALL VARIABLES. 1310 01753 5577 RETURN /FINAL EXIT. 1311 01754 7240 CLA CMA 1312 01755 6211 CDF 10 1313 01756 3513 DCA I VARLOC /STORE 7777 IN VARIABLE. 1314 01757 6201 CDF 0 1315 01760 5343 JMP SCNRET /RETURN TO SCAN. 1316 / 1317 / 1318 1761 EP7=. 01764 0207 01765 7746 01766 0100 01767 7740 01770 0256 01771 0004 01772 6632 01773 0200 01774 7767 01775 0275 01776 0240 01777 5000 / EIGHT/S INTERPRETER. ESI Page 36 1319 LIT / EIGHT/S INTERPRETER. ESI Page 37 1320 PAGE 10 1321 /XEQS 1322 /EXECUTE STEP GENERATOR. CALLS SUBROUTINE SPECIFIED 1323 / BY XEQSUB FOR STEP SPECIFIED BY FAC. 1324 / 1325 02000 4777@ XEQS, JMS FNDSTP /FIND LOCATION OF STEP. 1326 02001 5776@ JMP ERRSTP /ERROR IN STEP NUMBER. 1327 02002 4613 JMS I XEQSUB /GO TO EXECTION SUBROUTINE. 1328 02003 5577 RETURN 1329 / 1330 / 1331 /XEQP 1332 /EXECUTE PART GENERATOR. CALLS SUBROUTINE 1333 /SPECIFIED BY XEQSUB ONCE FOR EACH STEP OF PART 1334 /SPECIFIED BY PARTNO AT ENTRY. 1335 / 1336 02004 1362 XEQP, TAD PARTNO 1337 02005 1375 TAD (PRTLST-1) 1338 02006 3115 DCA CURSTP /LOCATION OF PART CONTROL WORD. 1339 02007 4774@ XEQPL, JMS GNSTP /GET NEXT STEP LOC. 1340 02010 5577 RETURN /END OF LOOP. 1341 02011 4613 JMS I XEQSUB /CALL EXECUTION SUBROUTINE. 1342 02012 5207 JMP XEQPL 1343 / 1344 02013 0000 XEQSUB, 0 /EXECUTION SUBROUTINE LOCATION. 1345 / 1346 / 1347 /INITIALISE XEQSUB GENERATORS. 1348 / 1349 02014 1373 STDLST, TAD (DLSTPS-TYSTPS) 1350 02015 1372 STTYST, TAD (TYSTPS-DOSTPS) 1351 02016 1371 STDOST, TAD (DOSTPS) 1352 02017 3213 DCA XEQSUB 1353 02020 5577 RETURN 1354 /DLSTPS 1355 /DELETE STEP SUBROUTINE. DELETE STEP WHOSE LOCATION 1356 /IS IN CURSTP AND WHOSE PREDECESSOR IS IN PRVSTP. 1357 /8AC IS CLEAR AT ETNRY AND EXIT. 1358 / 1359 02021 0000 DLSTPS, 0 1360 02022 6211 CDF 10 1361 02023 1515 TAD I CURSTP /GET POINTER OF CURSTP 1362 02024 3514 DCA I PRVSTP /PUT IN PREDECESSOR. 1363 02025 1115 TAD CURSTP 1364 02026 4321 JMS GLGSTP /GET STEP LENGTH. 1365 02027 3055 DCA ALCNT 1366 02030 1115 TAD CURSTP 1367 02031 7141 CIA CLL 1368 02032 1114 TAD PRVSTP 1369 02033 7620 SNL CLA /IS PREVIOUS STEP FOLLOWING CURRENT 1370 02034 5240 JMP DLSTP0 /NO. 1371 02035 1055 TAD ALCNT /YES. 1372 02036 1114 TAD PRVSTP /DECREMENT POINTER. 1373 02037 3114 DCA PRVSTP 1374 02040 7240 DLSTP0, CLA CMA /INITIALISE PACK-DOWN LOOP. 1375 02041 1115 TAD CURSTP 1376 02042 3011 DCA AX1 /"TO" LOACTION FOR LOOP. / EIGHT/S INTERPRETER. ESI Page 38 1377 02043 1011 TAD AX1 1378 02044 1056 TAD MULCNT 1379 02045 3010 DCA AX0 /"FROM" LOCATION. 1380 02046 1115 TAD CURSTP /INITIAL STEP LOCATION. 1381 02047 3060 DCA NORMTO 1382 02050 1114 TAD PRVSTP 1383 02051 3115 DCA CURSTP 1384 /PACK DOWN ONE STEP. 1385 02052 1060 DELLP1, TAD NORMTO /ADVANCE OVER PREVIOUS STEP. 1386 02053 1056 TAD MULCNT 1387 02054 3060 DCA NORMTO 1388 02055 1060 TAD NORMTO 1389 02056 7041 CIA 1390 02057 1062 TAD ENDPR 1391 02060 7650 SNA CLA /END OF STEP STORAGE? 1392 02061 5314 JMP DLST3 /YES. GO DELETE SPACE. 1393 02062 1060 TAD NORMTO /GET PART LOCATION. 1394 02063 1167 TAD [NUMWD] 1395 02064 3061 DCA TMP 1396 02065 1461 TAD I TMP 1397 02066 0370 AND (0017) 1398 02067 1375 TAD (PRTLST-1) 1399 02070 3053 DCA CRWD 1400 02071 1453 DELLP2, TAD I CRWD 1401 02072 7041 CIA 1402 02073 1060 TAD NORMTO 1403 02074 7650 SNA CLA /IS CURRENT STEP POINTING TO WANTED 1404 02075 5301 JMP DLST1 /YES. 1405 02076 1453 TAD I CRWD /NO. 1406 02077 3053 DCA CRWD /GO ON TO NEXT STEP. 1407 02100 5271 JMP DELLP2 1408 02101 1055 DLST1, TAD ALCNT /SET POINTER TO POINT TO 1409 02102 1060 TAD NORMTO /NEW LOCATION. 1410 02103 3453 DCA I CRWD 1411 02104 1060 TAD NORMTO 1412 02105 4321 JMS GLGSTP /GET LENGTH OF CURRENT STEP. 1413 02106 3054 DCA WDCNT /STORE COMPLEMENT OF LENGTH. 1414 02107 1410 DLST2, TAD I AX0 /MOVE STEP DOWN "ALCNT" WORDS. 1415 02110 3411 DCA I AX1 1416 02111 2054 ISZ WDCNT 1417 02112 5307 JMP DLST2 1418 02113 5252 JMP DELLP1 /GO ON TO NEXT STEP IN STORAGE. 1419 / 1420 02114 1055 DLST3, TAD ALCNT /DECREMENT "END OF USER AREA" 1421 02115 1062 TAD ENDPR /ENDPR-ALCNT 1422 02116 3062 DCA ENDPR /TO ENDPR 1423 02117 6201 CDF 0 1424 02120 5621 JMP I DLSTPS /EXIT. 1425 / 1426 /GLGSTP - GET LENGTH OF STEP SUBROUTINE. 1427 /AT ENTRY, 8AC HAS LOCATION OF STEP. 1428 /AT EXIT, MULCNT CONTAINS LENGTH, AND 8AC CONTAINS 1429 / COMPLEMENT OF LENGTH. 1430 / 1431 02121 0000 GLGSTP, 0 1432 02122 7001 IAC /ADVANCE TO LENGTH WORD. 1433 02123 3061 DCA TMP / EIGHT/S INTERPRETER. ESI Page 39 1434 02124 1461 TAD I TMP /GET LENGTH WORD. 1435 ROTR5 02125 7012 02126 7012 02127 7010 1436 02130 0146 AND [0077] /EXTRACT LENGTH. 1437 02131 3056 DCA MULCNT /STORE LENGTH. 1438 02132 1056 TAD MULCNT 1439 02133 7041 CIA /GET COMPLEMENT OF LENGTH. 1440 02134 5721 JMP I GLGSTP /IN 8AC AT EXIT. 1441 2135 EP10=. 02170 0017 02171 1307 02172 0333 02173 0157 02174 6632 02175 0177 02176 5656 02177 5505 1442 LIT / EIGHT/S INTERPRETER. ESI Page 40 1443 PAGE 11 1444 /"DELETE" . 1445 / 1446 02200 7100 DELCUR, CLL 1447 02201 6211 CDF 10 1448 02202 1105 TAD CURSYM /GET VARIABLE LOCATION. 1449 02203 1377 TAD (-USERPR) /SUBTRACT BEGINNING OF USER AREA. 1450 02204 7630 SZL CLA /IS VARIABLE A SUBSCRIPT ELEMENT? 1451 02205 5236 JMP DELCR1 /YES. 1452 02206 1505 TAD I CURSYM /NO. 1453 02207 1376 TAD (-3777) 1454 02210 7640 SZA CLA /IS VARIABLE "SIMPLE" 1455 02211 5232 JMP DELCUN /YES. 1456 02212 1105 DELSUB, TAD CURSYM /NO. 1457 02213 1170 TAD [2] 1458 02214 3244 DCA PREVEL /POINTER LOC. 1459 02215 1644 DLSUB1, TAD I PREVEL /GET "NEXT ELEMENT" LOC. 1460 02216 7100 CLL 1461 02217 1377 TAD (-VBLKEND) /IS IT "END"? 1462 02220 7420 SNL 1463 02221 5226 JMP DELSBX /YES. 1464 02222 1375 TAD (VBLKEND) 1465 02223 3105 DCA CURSYM 1466 02224 4245 JMS DELELS /DELETE ELEMENT. 1467 02225 5215 JMP DLSUB1 1468 / 1469 02226 7200 DELSBX, CLA /NOW DELETE CONTROL WORD. 1470 02227 1244 TAD PREVEL 1471 02230 1157 TAD [-2] 1472 02231 3105 DCA CURSYM /LOCATION OF CONTROL WORD. 1473 02232 7240 DELCUN, CLA CMA 1474 02233 3505 DCA I CURSYM /SET VARIABLE "UNDEFINED". 1475 02234 6201 CDF 0 1476 02235 5577 RETURN 1477 / 1478 02236 1105 DELCR1, TAD CURSYM /LOCATION OF VALUE. 1479 02237 1166 TAD [-3] 1480 02240 3105 DCA CURSYM /LOCATION OF POINTER WORD. 1481 02241 4245 JMS DELELS /DELETE ELEMENT. 1482 02242 6201 CDF 0 1483 02243 5577 RETURN 1484 / 1485 02244 0000 PREVEL, 0 /PREDECESSOR ELEMENT. / EIGHT/S INTERPRETER. ESI Page 41 1486 /DELELS 1487 /DELETE SUBSCRIPTED VARIABLE ELEMENT. 1488 / CURSYM - LOC. OF POINTER WORD. 1489 / PREVEL - LOC. OF PREDECESSOR POINTER WORD. 1490 / 1491 02245 0000 DELELS, 0 1492 02246 1505 TAD I CURSYM /GET POINTER OF DELETED ELEMENT. 1493 02247 3644 DCA I PREVEL /STORE IN PREDECESSOR. 1494 02250 1105 TAD CURSYM 1495 02251 7041 CIA 1496 02252 1063 TAD ARYNXT 1497 02253 7650 SNA CLA /IS DELETED ELEMENT LAST IN STORE? 1498 02254 5317 JMP DELELX /YES. 1499 02255 1063 TAD ARYNXT /NO. SET UP LOOP TO 1500 02256 3053 DCA CRWD / SEARCH FOR POINTER TO 1501 02257 1453 DELEL1, TAD I CRWD / LAST ELEMENT. 1502 02260 7100 CLL 1503 02261 1377 TAD (-VBLKEND) /IS CURRENT ELEMENT "END"? 1504 02262 7420 SNL 1505 02263 5267 JMP DELEL2 /YES. 1506 02264 1375 TAD (VBLKEND) 1507 02265 3053 DCA CRWD /NO. ADVANCE TO NEXT ELEMENT. 1508 02266 5257 JMP DELEL1 /CONTINUE SEARCH 1509 / 1510 02267 1375 DELEL2, TAD (VBLKEND) /NOW AT CONTROL WORD. 1511 02270 3053 DCA CRWD /LOCATION OF CONTROL POINTER. 1512 02271 1453 DELEL3, TAD I CRWD 1513 02272 7041 CIA 1514 02273 1063 TAD ARYNXT 1515 02274 7650 SNA CLA /IS THIS POINTER TO LAST ELEMENT? 1516 02275 5301 JMP DELEL4 /YES. 1517 02276 1453 TAD I CRWD /ADVANCE TO NEXT ELEMENT. 1518 02277 3053 DCA CRWD 1519 02300 5271 JMP DELEL3 1520 / 1521 02301 1105 DELEL4, TAD CURSYM /SET PREDECESSOR TO POINT TO 1522 02302 3453 DCA I CRWD / LOC. OF DELETED ONCE. 1523 02303 7240 CLA CMA 1524 02304 1063 TAD ARYNXT 1525 02305 3010 DCA AX0 /FROM LOCATION. 1526 02306 7240 CLA CMA 1527 02307 1105 TAD CURSYM 1528 02310 3011 DCA AX1 /"TO" LOCATION 1529 02311 1145 TAD [-NUMWD-3] 1530 02312 3054 DCA WDCNT 1531 02313 1410 DELEL5, TAD I AX0 /MOVE LAST ELEMENT TO REPLACE 1532 02314 3411 DCA I AX1 /DELETED ONE. 1533 02315 2054 ISZ WDCNT 1534 02316 5313 JMP DELEL5 1535 02317 1063 DELELX, TAD ARYNXT /SET NEW ELEMENT STORE 1536 02320 1144 TAD [NUMWD+3] /END LOCATION. 1537 02321 3063 DCA ARYNXT 1538 02322 5645 JMP I DELELS /EXIT. / EIGHT/S INTERPRETER. ESI Page 42 1539 /"DELETE ALL PARTS" GENERATOR. 1540 / 1541 02323 1375 DALPRT, TAD (USERPR) /RESET START 1542 02324 3062 DCA ENDPR / OF USER PROGRAM AREA. 1543 02325 1374 TAD DECIMAL (-9) OCTAL 1544 02326 3054 DCA WDCNT 1545 02327 1373 TAD (PRTLST-1) /INITIALIZE CLEAR LOOP. 1546 02330 3010 DCA AX0 1547 02331 6211 DALPR1, CDF 10 /CLEAR PART LIST. 1548 02332 3410 DCA I AX0 1549 02333 6201 CDF 0 1550 02334 2054 ISZ WDCNT 1551 02335 5331 JMP DALPR1 1552 02336 5577 RETURN 1553 / 1554 / 1555 /"DEMAND" GENERATOR. 1556 / 1557 02337 4772@ PRDMD, JMS PRSTRG /TYPE STRING WITH VARB. NAME. 1558 02340 4771@ PRDMD1, JMS TYSES /TYPE " = ". 1559 02341 1105 TAD CURSYM 1560 02342 4576 PUSH /SAVE VAR. LOC. 1561 02343 4770@ JMS SAVSYN /SAVE SYNAN VARIABLES. 1562 02344 4767@ JMS INPUT /CALL INPUT ROUTINE TO GET EXPRESSION. 1563 02345 3124 DCA QEOL 1564 02346 1366 TAD (INVAL-1) 1565 02347 4765@ JMS SYNAN /GET VALUE OF EXPRESSION. 1566 02350 4764@ JMS GETSYN /RESTORE SYNAN VARIABLES. 1567 02351 4575 POP /GET VARB LOCATION. 1568 02352 6211 CDF 10 1569 02353 4571 JMS I [STPACK] /STORE NUMBER IN "CURSYN". 1570 02354 5577 RETURN 1571 / 1572 02355 5763@ SCREOL, JMP PREOL /GO PROCESS END OF LINE. 1573 02363 7152 02364 1352 02365 6200 02366 3160 02367 6014 02370 1340 02371 1604 02372 1270 02373 0177 02374 7767 02375 0330 02376 4001 02377 7450 1574 LIT / EIGHT/S INTERPRETER. ESI Page 43 1575 2135 *EP10 1576 /"DO" GENERATORS. 1577 / 1578 02135 1116 DOPRT, TAD NXTSTP 1579 02136 4576 PUSH 1580 02137 1362 TAD PARTNO 1581 02140 1367 TAD (PRTLST-1) 1582 02141 3115 DCA CURSTP /FIRST STEP POINTER. 1583 02142 6211 CDF 10 1584 02143 1515 TAD I CURSTP /GET FIRST STEP POINTER. 1585 02144 6201 CDF 0 1586 02145 7650 SNA CLA /IS PART EMPTY? 1587 02146 5766@ JMP ERRPRT /YES. PART # ERROR. 1588 02147 4765@ DOPRT1, JMS GNSTP /NO, GET NEXT STEP. 1589 02150 5357 JMP DOPRTX /DONE WITH PART. 1590 02151 1115 TAD CURSTP 1591 02152 3116 DCA NXTSTP /NEXT STEP POINTER. 1592 02153 4764@ JMS DOSTPS /DO THE CURRENT STEP. 1593 02154 1116 TAD NXTSTP /GET THE NEXT STEP. 1594 02155 3115 DCA CURSTP /STORE POINTER TO NEXT STEP. 1595 02156 5347 JMP DOPRT1 /LOOP. 1596 / 1597 02157 4575 DOPRTX, POP 1598 02160 3116 DCA NXTSTP /SET NEXT STEP FOR HIGHER LEVEL 1599 02161 5577 RETURN /OF RECURSION AND EXIT. 1600 / 1601 02162 0000 PARTNO, 0 /CURRENT PART NUMBER. 02164 1307 02165 6632 02166 5652 02167 0177 1602 LIT 1603 1307 *EP5 1604 / 1605 / 1606 /DOSTPS 1607 /INVOKE A STEP SUBROUTINE. STEP LOC. IS IN CURSTP. 1608 / 1609 01307 0000 DOSTPS, 0 1610 01310 1115 TAD CURSTP /SET STEP LOCATION 1611 01311 3102 DCA XSTEP / FOR ERROR ANALYSIS. 1612 01312 1307 TAD DOSTPS 1613 01313 4576 PUSH /PUSH DOWN EXIT FROM 1614 01314 4340 JMS SAVSYN /DOSTPS AND SYNAN FOR RECURSION. 1615 01315 1115 TAD CURSTP 1616 01316 1372 TAD (NUMWD+1) 1617 01317 3100 DCA NXTLXF /SCAN START. 1618 CPY [0010],NXTLXF+1 01320 1163 01321 3101 1619 01322 3124 DCA QEOL 1620 01323 1371 TAD (ISTAT-1) /SCAN INDIRECT STATEMENT. 1621 01324 4770@ JMS SYNAN 1622 01325 6031 KSF /IS KEYBOARD FLAG SET? 1623 01326 5333 JMP DOSTP2 /NO. 1624 01327 6034 KRS /READ KEYBOARD STATIC (DON'T 1625 01330 1367 TAD (-ICODE) / CLEAR FLAG.) / EIGHT/S INTERPRETER. ESI Page 44 1626 01331 7650 SNA CLA /IT CHARACTER "ALT MODE"? 1627 01332 5766@ JMP INTRPT /YES. GO INTO INTERRUPT STATE. 1628 01333 3125 DOSTP2, DCA QINSTAT /RESTORE SAVED LOCATIONS. 1629 01334 4352 JMS GETSYN 1630 01335 4575 POP 1631 01336 3307 DCA DOSTPS 1632 01337 5707 JMP I DOSTPS /EXIT. 1633 / 1634 /SAVSYN -- SAVE SYNTACTIC ANALYZER VARIABLES. 1635 01340 0000 SAVSYN, 0 1636 01341 1770@ TAD SYNAN /SAVE EXIT FROM SYNAN, 1637 01342 4576 PUSH /EOL FLAG, 1638 01343 1124 TAD QEOL 1639 01344 4576 PUSH 1640 01345 1100 TAD NXTLXF /AND LEXICAL ANALYZER POINTERS. 1641 01346 4576 PUSH 1642 01347 1101 TAD NXTLXF+1 1643 01350 4576 PUSH 1644 01351 5740 JMP I SAVSYN 1645 /GETSYN -- GET SYNTACTIC ANALYZER VARIABLES. 1646 01352 0000 GETSYN, 0 1647 01353 4575 POP /RESTORE VARIABLES FROM STACK. 1648 01354 3101 DCA NXTLXF+1 1649 01355 4575 POP 1650 01356 3100 DCA NXTLXF 1651 01357 4575 POP 1652 01360 3124 DCA QEOL 1653 01361 4575 POP 1654 01362 3770@ DCA SYNAN 1655 01363 5752 JMP I GETSYN 01366 1146 01367 7403 01370 6200 01371 2452 01372 0004 1656 LIT 1657 1146 *EP4 1658 / 1659 01146 6032 INTRPT, KCC /CLEAR TELETYPE FLAG. 1660 01147 1352 TAD (INTMSG) /GET SET TO TYPE "INTERRUPTED". 1661 01150 5305 JMP PRSTP1 /GO INTO INTERRUPT MODE. 1662 01152 1125 1663 LIT / EIGHT/S INTERPRETER. ESI Page 45 1664 0712 *EP3 1665 /"TO" GENERATORS: 1666 / 1667 /"TO STEP" GENERATOR. 1668 00712 4754@ PRTOS, JMS FNDSTP /FIND STEP LOCATION. 1669 00713 5753@ JMP ERRSTP /ERROR - STEP #. 1670 00714 1115 TAD CURSTP /GOOD - GET STEP LOC. 1671 00715 6211 PRDONE, CDF 10 /STORE NEXT STEP LOCATION INTO 1672 00716 3752 DCA I (TOSTPN) /UPPER MEMORY. 1673 00717 6201 CDF 0 1674 00720 1352 TAD (TOSTPN) 1675 00721 3116 PRTOS1, DCA NXTSTP /FORCE TRANSFER OF CONTROL. 1676 00722 5577 RETURN 1677 / 1678 / 1679 /"TO PART" GENERATOR. 1680 00723 1751@ PRTOP, TAD PARTNO 1681 00724 1350 TAD (PRTLST-1) /LOCATION OF 1ST STEP OF PART. 1682 00725 5321 JMP PRTOS1 1683 / 1684 / 1685 /"CANCEL" GENERATOR. 1686 00726 4572 CANCEL, CRLF /ENTERED FROM "ALT MODE" IN INPUT. 1687 00727 1347 PRCANC, TAD (CANMSG) /ENTERED FROM "CANCEL" STATEMENT. 1688 00730 4746@ JMS TYPKST /TYPE "CANCELLED". 1689 00731 3125 DCA QINSTAT 1690 00732 5745@ JMP MAIN 1691 1692 00733 0301 CANMSG, TEXT /CANCELLED/ 00734 1603 00735 0514 00736 1405 00737 0400 1693 00745 5401 00746 1667 00747 0733 00750 0177 00751 2162 00752 0001 00753 5656 00754 5505 1694 LIT / EIGHT/S INTERPRETER. ESI Page 46 1695 PAGE 12 1696 /ESI-B SYNTAX. 1697 / 1698 DSTAT, TERML TLOG /LOG ON OR OFF 02400 7543 1699 FCALT DSTAT1,.+1,NO 2352 02401 2430 1700 TERML TON 02402 7527 1701 FCALT .+3,NOSUC,YES 2354 02403 6100 1702 GEN PRLON,YES 02404 4316 1703 GEN EXIT,NO 02405 1211 1704 TERML TOFF 02406 7532 1705 FCDEAD NOSUC,YES 2360 02407 7000 1706 GEN PRLOF,YES 02410 4346 1707 GEN EXIT,NO 02411 1211 1708 DSTAT1, TERML TSTAR /COMMENT 02412 7410 1709 FCALT .+2,NOSUC,YES 2364 02413 6040 1710 GEN EXIT,NO 02414 1211 1711 SUBGL IFCLSE /DIRECT STATEMENT 02415 2504 1712 FCALT .+1,.+1,NO 2367 02416 2030 1713 SUBGL DTAIL 02417 2421 1714 FCDEAD NOSUC,YES 2371 02420 7000 1715 GEN EXIT,NO 02421 1211 1716 / 1717 DTAIL, SUBGL FORCLS 02422 2542 1718 FCALT .+1,NOSUC,NO 2374 02423 2000 1719 SUBGL DOIST 02424 2427 1720 FCALT .+1,NOSUC,NO 2376 02425 2000 1721 SUBGL DONLY / EIGHT/S INTERPRETER. ESI Page 47 02426 2446 1722 FCDEAD NOSUC,NO 2400 02427 3000 1723 / 1724 DOIST, SUBGL SETST /DIRECT OR INDIRECT 02430 2573 1725 FCALT .+1,NOSUC,NO 2402 02431 2000 1726 SUBGL DOST 02432 3004 1727 FCALT .+1,NOSUC,NO 2404 02433 2000 1728 SUBGL TYPST 02434 3027 1729 FCALT .+1,NOSUC,NO 2406 02435 2000 1730 TERML TLINE 02436 7336 1731 FCALT .+2,NOSUC,YES 2410 02437 6040 1732 GEN PLINE,NO 02440 0704 1733 TERML TNLINE 02441 7334 1734 FCALT .+2,NOSUC,YES 2413 02442 6040 1735 GEN PNLINE,NO 02443 0705 1736 TERML TPAGE 02444 7536 1737 FCFAIL NOSUC,YES 2416 02445 4000 1738 GEN PRPAGE,NO 02446 0342 1739 / 1740 DONLY, SUBGL DDELST /DIRECT ONLY 02447 3163 1741 FCALT DONLY1,NOSUC,NO 2421 02450 2000 1742 DONLY1, SUBGL ARITH 02451 3251 1743 FCDEAD NOSUC,NO 2423 02452 3000 / EIGHT/S INTERPRETER. ESI Page 48 1744 / 1745 ISTAT, TERML TSTAR /COMMENT 02453 7410 1746 FCALT .+2,NOSUC,YES 2425 02454 6040 1747 GEN EXIT,NO 02455 1211 1748 SUBGL IFCLSE /INDIRECT STATEMENT. 02456 2504 1749 FCALT .+1,.+1,NO 2430 02457 2030 1750 SUBGL ITAIL 02460 2462 1751 FCDEAD NOSUC,YES 2432 02461 7000 1752 GEN EXIT,NO 02462 1211 1753 / 1754 ITAIL, SUBGL FORCLS 02463 2542 1755 FCALT .+1,NOSUC,NO 2435 02464 2000 1756 SUBGL DOIST 02465 2427 1757 FCALT .+1,NOSUC,NO 2437 02466 2000 1758 SUBGL IONLY 02467 2470 1759 FCDEAD NOSUC,NO 2441 02470 3000 1760 / 1761 IONLY, SUBGL TOST /INDIRECT ONLY. 02471 3265 1762 FCALT .+1,NOSUC,NO 2443 02472 2000 1763 TERML TDONE 02473 7346 1764 FCALT IONLY1,NOSUC,YES 2445 02474 6040 1765 GEN PRDONE,NO 02475 0715 1766 IONLY1, TERML TSTOP 02476 7352 1767 FCALT IONLY2,NOSUC,YES 2450 02477 6040 1768 GEN PRSTOP,NO 02500 1101 1769 IONLY2, SUBGL DEMDST / EIGHT/S INTERPRETER. ESI Page 49 02501 3305 1770 FCALT .+1,NOSUC,NO 2453 02502 2000 1771 SUBGL IDELST 02503 3236 1772 FCDEAD NOSUC,NO 2455 02504 3000 1773 / 1774 IFCLSE, TERML TIF /IF CLAUSE 02505 7357 1775 FCFAIL .+1,NO 2457 02506 0030 1776 SUBGL AREX 02507 2611 1777 FCDEAD .+1,NO 2461 02510 3030 1778 SUBGL RELOP 02511 2520 1779 FCDEAD IFCL1,YES 2463 02512 7031 1780 GEN ACTOS,NO 02513 0217 1781 IFCL1, SUBGL AREX 02514 2611 1782 FCDEAD .+1,NO 2466 02515 3030 1783 TERML TCOMMA 02516 7361 1784 FCDEAD NOSUC,YES 2470 02517 7000 1785 GEN POPDO,NO 02520 0247 / EIGHT/S INTERPRETER. ESI Page 50 1786 / 1787 RELOP, TERML TEQUAL /RELATIONAL OPERATORS. 02521 7376 1788 FCALT .+2,NOSUC,YES 2473 02522 6040 1789 GEN STEQ,NO 02523 1143 1790 TERML TLT2 02524 7363 1791 FCALT .+2,NOSUC,YES 2476 02525 6040 1792 GEN STLT,NO 02526 1140 1793 TERML TGT2 02527 7362 1794 FCALT .+2,NOSUC,YES 2501 02530 6040 1795 GEN STGT,NO 02531 1137 1796 TERML TGE 02532 7364 1797 FCALT .+2,NOSUC,YES 2504 02533 6040 1798 GEN STGE,NO 02534 1141 1799 TERML TLE 02535 7366 1800 FCALT .+2,NOSUC,YES 2507 02536 6040 1801 GEN STLE,NO 02537 1142 1802 TERML TNE 02540 7370 1803 FCDEAD NOSUC,YES 2512 02541 7000 1804 GEN STNE,NO 02542 1144 1805 / 1806 FORCLS, TERML TFOR /FOR CLAUSE. 02543 7372 1807 FCFAIL .+2,YES 2515 02544 4031 1808 GEN SQPUN1,NO 02545 0600 1809 SUBGL VARB 02546 2700 1810 FCDEAD .+1,NO 2520 02547 3030 1811 TERML TEQUAL / EIGHT/S INTERPRETER. ESI Page 51 02550 7376 1812 FCDEAD FORCL1,YES 2522 02551 7033 1813 GEN SQPUN0,YES 02552 4601 1814 GEN PSHCUR,YES 02553 4200 1815 GEN SVINDX,NO 02554 1000 1816 FORCL1, SUBGL AREX 02555 2611 1817 FCDEAD .+1,NO 2527 02556 3030 1818 TERML TLPAR 02557 7377 1819 FCDEAD .+2,YES 2531 02560 7031 1820 GEN STOREC,NO 02561 0203 1821 SUBGL AREX 02562 2611 1822 FCDEAD .+1,NO 2534 02563 3030 1823 TERML TRPAR 02564 7400 1824 FCDEAD .+2,YES 2536 02565 7031 1825 GEN SVINCR,NO 02566 1003 1826 SUBGL AREX 02567 2611 1827 FCDEAD .+1,NO 2541 02570 3030 1828 TERML TCOMMA 02571 7361 1829 FCDEAD NOSUC,YES 2543 02572 7000 1830 GEN PRFOR,NO 02573 1010 1831 / 1832 SETST, TERML TSET /"SET" STATEMENT. 02574 7401 1833 FCFAIL .+2,YES 2546 02575 4031 1834 GEN SQPUN1,NO 02576 0600 1835 SUBGL VARB 02577 2700 1836 FCDEAD .+1,NO / EIGHT/S INTERPRETER. ESI Page 52 2551 02600 3030 1837 TERML TEQUAL 02601 7376 1838 FCDEAD SETST1,YES 2553 02602 7032 1839 GEN SQPUN0,YES 02603 4601 1840 GEN PSHCUR,NO 02604 0200 1841 SETST1, SUBGL AREX 02605 2611 1842 FCDEAD .+1,NO 2557 02606 3030 1843 TERML TEOL 02607 7457 1844 FCDEAD NOSUC,YES 2561 02610 7000 1845 GEN STOREC,NO 02611 0203 / EIGHT/S INTERPRETER. ESI Page 53 1846 / 1847 AREX, SUBGL TERM /ARITHMETIC EXPRESSION. 02612 2621 1848 FCFAIL AREX1,NO 2564 02613 0030 1849 AREX1, SUBGL ADOP 02614 2727 1850 FCOK .+2,YES 2566 02615 5031 1851 GEN ACTOS,NO 02616 0217 1852 SUBGL TERM 02617 2621 1853 FCDEAD AREX1,YES 2571 02620 7023 1854 GEN POPDO,NO 02621 0247 1855 / 1856 TERM, SUBGL FACT 02622 2631 1857 FCFAIL TERM1,NO 2574 02623 0030 1858 TERM1, SUBGL MULOP 02624 2721 1859 FCOK .+2,YES 2576 02625 5031 1860 GEN ACTOS,NO 02626 0217 1861 SUBGL FACT 02627 2631 1862 FCDEAD TERM1,YES 2601 02630 7023 1863 GEN POPDO,NO 02631 0247 1864 / 1865 FACT, TERML TMINUS /FACTOR 02632 7413 1866 FCALT FACT1,.+2,YES 2604 02633 6231 1867 GEN SCHSGN,NO 02634 0554 1868 SUBGL FACT2 02635 2643 1869 FCDEAD NOSUC,YES 2607 02636 7000 1870 GEN DO,NO 02637 0251 1871 FACT1, TERML TPLUS 02640 7412 / EIGHT/S INTERPRETER. ESI Page 54 1872 FCALT .+1,.+1,NO 2612 02641 2030 1873 SUBGL FACT2 02642 2643 1874 FCFAIL NOSUC,NO 2614 02643 0000 1875 / 1876 FACT2, SUBGL PRIMRY 02644 2654 1877 FCFAIL FACT3,NO 2616 02645 0030 1878 FACT3, TERML TUPAR 02646 7404 1879 FCOK .+3,YES 2620 02647 5032 1880 GEN STUPAR,YES 02650 4710 1881 GEN ACTOS,NO 02651 0217 1882 SUBGL PRIMRY 02652 2654 1883 FCDEAD FACT3,YES 2624 02653 7022 1884 GEN POPDO,NO 02654 0247 1885 / 1886 PRIMRY, SUBGL VARB 02655 2700 1887 FCALT .+2,NOSUC,YES 2627 02656 6040 1888 GEN TOAC,NO 02657 0254 1889 TERML TSCRN 02660 7405 1890 FCALT .+1,NOSUC,NO 2632 02661 2000 1891 TERML TLPAR 02662 7377 1892 FCALT PRIM1,.+1,NO 2634 02663 2230 1893 SUBGL AREX 02664 2611 1894 FCDEAD .+1,NO 2636 02665 3030 1895 TERML TRPAR 02666 7400 1896 FCDEAD NOSUC,NO 2640 / EIGHT/S INTERPRETER. ESI Page 55 02667 3000 1897 PRIM1, SUBGL FUNC 02670 2735 1898 FCFAIL .+1,NO 2642 02671 0030 1899 TERML TLPAR 02672 7377 1900 FCDEAD .+1,NO 2644 02673 3030 1901 SUBGL AREX 02674 2611 1902 FCDEAD .+1,NO 2646 02675 3030 1903 TERML TRPAR 02676 7400 1904 FCDEAD NOSUC,YES 2650 02677 7000 1905 GEN DO,NO 02700 0251 1906 / 1907 VARB, TERML TSCRV 02701 7375 1908 FCFAIL .+1,NO 2653 02702 0030 1909 TERML TLBRAC 02703 7406 1910 FCOK .+3,YES 2655 02704 5032 1911 GEN PSHCUR,YES 02705 4200 1912 GEN STQPUN,NO 02706 0603 1913 SUBGL AREX 02707 2611 1914 FCDEAD .+2,YES 2661 02710 7031 1915 GEN STSUB1,NO 02711 0606 1916 TERML TCOMMA 02712 7361 1917 FCALT VARB1,.+1,NO 2664 02713 2170 1918 SUBGL AREX 02714 2611 1919 FCDEAD VARB1,YES 2666 02715 7031 1920 GEN STSUB2,NO 02716 0615 / EIGHT/S INTERPRETER. ESI Page 56 1921 VARB1, TERML TRBRAC 02717 7407 1922 FCDEAD NOSUC,YES 2671 02720 7000 1923 GEN CMPSUB,NO 02721 0400 1924 / 1925 MULOP, TERML TSTAR /MULTIPLYING OPERATORS. 02722 7410 1926 FCALT .+2,NOSUC,YES 2674 02723 6040 1927 GEN STMUL,NO 02724 0270 1928 TERML TSLASH 02725 7411 1929 FCFAIL NOSUC,YES 2677 02726 4000 1930 GEN STDIV,NO 02727 0267 1931 / 1932 ADOP, TERML TPLUS /ADDING OPERATORS. 02730 7412 1933 FCALT .+2,NOSUC,YES 2702 02731 6040 1934 GEN STADD,NO 02732 0272 1935 TERML TMINUS 02733 7413 1936 FCFAIL NOSUC,YES 2705 02734 4000 1937 GEN STSUB,NO 02735 0271 / EIGHT/S INTERPRETER. ESI Page 57 1938 / 1939 FUNC, TERML TABS /FUNCTION NAMES. 02736 7420 1940 FCALT .+2,NOSUC,YES 2710 02737 6040 1941 GEN SPRABS,NO 02740 0626 1942 TERML TIP 02741 7414 1943 FCALT .+2,NOSUC,YES 2713 02742 6040 1944 GEN SPRIP,NO 02743 0623 1945 TERML TFP 02744 7416 1946 FCALT .+2,NOSUC,YES 2716 02745 6040 1947 GEN SPRFP,NO 02746 0624 1948 TERML TSGN 02747 7423 1949 FCALT .+2,NOSUC,YES 2721 02750 6040 1950 GEN SPRSGN,NO 02751 0625 1951 TERML TSIN 02752 7551 1952 FCALT .+2,NOSUC,YES 2724 02753 6040 1953 GEN SPRSIN,NO 02754 0627 1954 TERML TCOS 02755 7554 1955 FCALT .+2,NOSUC,YES 2727 02756 6040 1956 GEN SPRCOS,NO 02757 0630 1957 TERML TSQRT 02760 7557 1958 FCALT .+2,NOSUC,YES 2732 02761 6040 1959 GEN SPRSQRT,NO 02762 0631 1960 TERML TLOG 02763 7543 1961 FCALT .+2,NOSUC,YES 2735 02764 6040 1962 GEN SPRLOG,NO 02765 0633 / EIGHT/S INTERPRETER. ESI Page 58 1963 TERML TEXP 02766 7546 1964 FCALT .+2,NOSUC,YES 2740 02767 6040 1965 GEN SPREXP,NO 02770 0632 1966 TERML TARCTAN 02771 7563 1967 FCALT .+2,NOSUC,YES 2743 02772 6040 1968 GEN SPRARC,NO 02773 0634 1969 TERML TLN 02774 7571 1970 FCALT .+2,NOSUC,YES 2746 02775 6040 1971 GEN SPRLN,NO 02776 0635 1972 TERML TDP 02777 7573 1973 FCALT .+2,NOSUC,YES 2751 03000 6040 1974 GEN SPRDP,NO 03001 0636 1975 TERML TEP 03002 7575 1976 FCFAIL NOSUC,YES 2754 03003 4000 1977 GEN SPREP,NO 03004 0637 / EIGHT/S INTERPRETER. ESI Page 59 1978 / 1979 DOST, TERML TDO /"DO" STATEMENT. 03005 7435 1980 FCFAIL .+2,YES 2757 03006 4031 1981 GEN STDOST,NO 03007 2016 1982 SUBGL DOTAIL 03010 3011 1983 FCDEAD NOSUC,NO 2762 03011 3000 1984 / 1985 DOTAIL, TERML TPART 03012 7437 1986 FCALT DOTL1,.+1,NO 2764 03013 2270 1987 TERML TSCRI 03014 7514 1988 FCDEAD .+1,NO 2766 03015 3030 1989 TERML TEOL 03016 7457 1990 FCDEAD NOSUC,YES 2770 03017 7000 1991 GEN DOPRT,NO 03020 2135 1992 DOTL1, TERML TSTEP 03021 7443 1993 FCFAIL .+1,NO 2773 03022 0030 1994 SUBGL AREX 03023 2611 1995 FCDEAD .+1,NO 2775 03024 3030 1996 TERML TEOL 03025 7457 1997 FCDEAD NOSUC,YES 2777 03026 7000 1998 GEN XEQS,NO 03027 2000 1999 / 2000 TYPST, TERML TTYPE /"TYPE" STATE,ENT. 03030 7447 2001 FCFAIL .+3,YES 3002 03031 4032 2002 GEN STTYST,YES 03032 6015 2003 GEN SAVNXT,NO / EIGHT/S INTERPRETER. ESI Page 60 03033 0347 2004 SUBGL TYTAIL 03034 3035 2005 FCDEAD NOSUC,NO 3006 03035 3000 2006 / 2007 TYTAIL, SUBGL TYAREX 03036 3044 2008 FCALT TYTL1,.+1,NO 3010 03037 2170 2009 TERML TEOL 03040 7457 2010 FCDEAD NOSUC,YES 3012 03041 7000 2011 GEN CNLINE,NO 03042 0706 2012 TYTL1, SUBGL TYNOTA 03043 3115 2013 FCFAIL NOSUC,NO 3015 03044 0000 2014 / 2015 TYAREX, SUBGL TYAR1 03045 3054 2016 FCFAIL TYARXL,NO 3017 03046 0030 2017 TYARXL, TERML TCOMMA 03047 7361 2018 FCOK .+3,YES 3021 03050 5032 2019 GEN CNLINE,YES 03051 4706 2020 GEN SAVNXT,NO 03052 0347 2021 SUBGL TYAR1 03053 3054 2022 FCDEAD TYARXL,NO 3025 03054 3022 2023 / 2024 TYAR1, SUBGL AREX 03055 2611 2025 FCALT TYAR11,.+4,YES 3027 03056 6273 2026 GEN PSHNXT,YES 03057 5400 2027 GEN PSHNX1,YES 03060 5405 2028 GEN SAVNXT,NO 03061 0347 2029 SUBGL TYAR2 / EIGHT/S INTERPRETER. ESI Page 61 03062 3075 2030 FCDEAD NOSUC,NO 3034 03063 3000 2031 TYAR11, TERML TQUOTE 03064 7460 2032 FCFAIL .+1,NO 3036 03065 0030 2033 TERML TSCRS 03066 7461 2034 FCDEAD .+1,NO 3040 03067 3030 2035 TERML TQUOTE 03070 7460 2036 FCDEAD .+3,YES 3042 03071 7032 2037 GEN TSTRG,YES 03072 5257 2038 GEN SAVNXT,NO 03073 0347 2039 SUBGL TYAR3 03074 3107 2040 FCDEAD NOSUC,NO 3046 03075 3000 2041 / 2042 TYAR2, TERML TQUOTE 03076 7460 2043 FCOK .+1,NO 3050 03077 1030 2044 TERML TSCRS 03100 7461 2045 FCDEAD .+1,NO 3052 03101 3030 2046 TERML TQUOTE 03102 7460 2047 FCDEAD .+3,YES 3054 03103 7032 2048 GEN TSTRG,YES 03104 5257 2049 GEN SAVNXT,NO 03105 0347 2050 SUBGL TYAR3 03106 3107 2051 FCDEAD TYAR2,NO 3060 03107 3016 2052 / 2053 TYAR3, SUBGL AREX 03110 2611 2054 FCOK .+3,YES / EIGHT/S INTERPRETER. ESI Page 62 3062 03111 5032 2055 GEN TYFAC,YES 03112 4563 2056 GEN SAVNXT,NO 03113 0347 2057 SUBGL TYAR2 03114 3075 2058 FCDEAD TYAR3,NO 3066 03115 3022 2059 / 2060 TYNOTA, TERML TSIZE 03116 7453 2061 FCALT .+2,NOSUC,YES 3070 03117 6040 2062 GEN TYPSIZ,NO 03120 1550 2063 TERML TSTEP 03121 7443 2064 FCALT TYNTA2,.+1,NO 3073 03122 2270 2065 TERML TSCRN 03123 7405 2066 FCDEAD .+1,NO 3075 03124 3030 2067 TERML TEOL 03125 7457 2068 FCDEAD NOSUC,YES 3077 03126 7000 2069 GEN XEQS,NO 03127 2000 2070 TYNTA2, TERML TPART 03130 7437 2071 FCALT TYNTA3,.+1,NO 3102 03131 2270 2072 TERML TSCRI 03132 7514 2073 FCDEAD .+1,NO 3104 03133 3030 2074 TERML TEOL 03134 7457 2075 FCDEAD NOSUC,YES 3106 03135 7000 2076 GEN XEQP,NO 03136 2004 2077 TYNTA3, TERML TALLE 03137 7477 2078 FCALT TYNTA4,NOSUC,YES 3111 / EIGHT/S INTERPRETER. ESI Page 63 03140 6100 2079 GEN TYAP,YES 03141 5616 2080 GEN TAVAL,NO 03142 1407 2081 TYNTA4, TERML TALL 03143 7503 2082 FCDEAD .+2,YES 3115 03144 7031 2083 GEN SAVNXT,NO 03145 0347 2084 TERML TVALSE 03146 7470 2085 FCALT .+2,NOSUC,YES 3120 03147 6040 2086 GEN TAVAL,NO 03150 1407 2087 TERML TPRTSE 03151 7462 2088 FCALT .+2,NOSUC,YES 3123 03152 6040 2089 GEN TYAP,NO 03153 1616 2090 TERML TSCRV 03154 7375 2091 FCDEAD .+1,NO 3126 03155 3030 2092 TERML TEOL 03156 7457 2093 FCDEAD NOSUC,YES 3130 03157 7000 2094 GEN TYARRY,NO 03160 1415 2095 / 2096 INVAL, SUBGL AREX 03161 2611 2097 FCDEAD NOSUC,YES 3133 03162 7000 2098 GEN EXIT,NO 03163 1211 / EIGHT/S INTERPRETER. ESI Page 64 2099 / 2100 DDELST, TERML TDELETE /"DELETE" STATEMENT - DIRECT ONLY 03164 7506 2101 FCFAIL .+2,YES 3136 03165 4031 2102 GEN STDLST,NO 03166 2014 2103 SUBGL DELTAIL 03167 3170 2104 FCDEAD NOSUC,NO 3141 03170 3000 2105 / 2106 DELTAIL, SUBGL DELLST 03171 3226 2107 FCALT DLTL1,.+1,NO 3143 03172 2130 2108 TERML TEOL 03173 7457 2109 FCDEAD NOSUC,NO 3145 03174 3000 2110 DLTL1, TERML TSTEP 03175 7443 2111 FCALT DLTL2,.+1,NO 3147 03176 2270 2112 TERML TSCRN 03177 7405 2113 FCDEAD .+1,NO 3151 03200 3030 2114 TERML TEOL 03201 7457 2115 FCDEAD NOSUC,YES 3153 03202 7000 2116 GEN XEQS,NO 03203 2000 2117 DLTL2, TERML TPART 03204 7437 2118 FCALT DLTL3,.+1,NO 3156 03205 2270 2119 TERML TSCRI 03206 7514 2120 FCDEAD .+1,NO 3160 03207 3030 2121 TERML TEOL 03210 7457 2122 FCDEAD NOSUC,YES 3162 03211 7000 2123 GEN XEQP,NO / EIGHT/S INTERPRETER. ESI Page 65 03212 2004 2124 DLTL3, TERML TALLE 03213 7477 2125 FCALT DLTL4,NOSUC,YES 3165 03214 6100 2126 GEN DALPRT,YES 03215 6323 2127 GEN DLAVAL,NO 03216 1750 2128 DLTL4, TERML TALL 03217 7503 2129 FCDEAD .+1,NO 3171 03220 3030 2130 TERML TVALSE 03221 7470 2131 FCALT .+2,NOSUC,YES 3173 03222 6040 2132 GEN DLAVAL,NO 03223 1750 2133 TERML TPRTSE 03224 7462 2134 FCDEAD NOSUC,YES 3176 03225 7000 2135 GEN DALPRT,NO 03226 2323 2136 / 2137 DELLST, SUBGL VARB 03227 2700 2138 FCFAIL DLLST1,YES 3201 03230 4031 2139 GEN DELCUR,NO 03231 2200 2140 DLLST1, TERML TCOMMA 03232 7361 2141 FCOK .+1,NO 3204 03233 1030 2142 SUBGL VARB 03234 2700 2143 FCDEAD DLLST1,YES 3206 03235 7024 2144 GEN DELCUR,NO 03236 2200 2145 / 2146 IDELST, TERML TDELETE /"DELETE" STATEMENT - INDIRECT ONLY 03237 7506 2147 FCFAIL DT2,NO 3211 03240 0030 2148 DT2, SUBGL DELLST 03241 3226 / EIGHT/S INTERPRETER. ESI Page 66 2149 FCALT DT3,.+1,NO 3213 03242 2130 2150 TERML TEOL 03243 7457 2151 FCDEAD NOSUC,NO 3215 03244 3000 2152 DT3, TERML TALL 03245 7503 2153 FCDEAD .+1,NO 3217 03246 3030 2154 TERML TVALSE 03247 7470 2155 FCDEAD NOSUC,YES 3221 03250 7000 2156 GEN DLAVAL,NO 03251 1750 / EIGHT/S INTERPRETER. ESI Page 67 2157 / 2158 ARITH, TERML TNULL /ARITHMETIC ASSIGNMENT. 03252 7516 2159 FCDEAD .+2,YES 3224 03253 7031 2160 GEN SQPUN1,NO 03254 0600 2161 SUBGL VARB 03255 2700 2162 FCDEAD .+1,NO 3227 03256 3030 2163 TERML TEQUAL 03257 7376 2164 FCDEAD .+3,YES 3231 03260 7032 2165 GEN SQPUN0,YES 03261 4601 2166 GEN PSHCUR,NO 03262 0200 2167 SUBGL AREX 03263 2611 2168 FCDEAD NOSUC,YES 3235 03264 7000 2169 GEN STOREC,NO 03265 0203 2170 / 2171 TOST, TERML TTO /"TO" STATE,ENT 03266 7517 2172 FCFAIL TOTAIL,NO 3240 03267 0030 2173 TOTAIL, TERML TSTEP 03270 7443 2174 FCALT TOTL1,.+1,NO 3242 03271 2270 2175 SUBGL AREX 03272 2611 2176 FCDEAD .+1,NO 3244 03273 3030 2177 TERML TIEOL 03274 7345 2178 FCDEAD NOSUC,YES 3246 03275 7000 2179 GEN PRTOS,NO 03276 0712 2180 TOTL1, TERML TPART 03277 7437 2181 FCDEAD .+1,NO 3251 03300 3030 / EIGHT/S INTERPRETER. ESI Page 68 2182 TERML TSCRI 03301 7514 2183 FCDEAD .+1,NO 3253 03302 3030 2184 TERML TIEOL 03303 7345 2185 FCDEAD NOSUC,YES 3255 03304 7000 2186 GEN PRTOP,NO 03305 0723 2187 / 2188 DEMDST, TERML TDEMAND /"DEMAND" STATEMENT. 03306 7521 2189 FCFAIL .+3,YES 3260 03307 4032 2190 GEN SAVNXT,YES 03310 4347 2191 GEN SQPUN1,NO 03311 0600 2192 SUBGL VARB 03312 2700 2193 FCDEAD .+2,YES 3264 03313 7031 2194 GEN PSHNXT,NO 03314 1400 2195 TERML TEOL 03315 7457 2196 FCDEAD NOSUC,YES 3267 03316 7000 2197 GEN SQPUN0,YES 03317 4601 2198 GEN PRDMD,NO 03320 2337 2199 / 2200 INTST, TERML TGO 03321 7343 2201 FCALT .+2,NOSUC,YES 3273 03322 6040 2202 GEN DOSTP2,NO 03323 1333 2203 TERML TCANC 03324 7426 2204 FCALT .+2,NOSUC,YES 3276 03325 6040 2205 GEN PRCANC,NO 03326 0727 2206 SUBGL TYPST 03327 3027 2207 FCALT .+2,NOSUC,YES 3301 / EIGHT/S INTERPRETER. ESI Page 69 03330 6040 2208 GEN EXIT,NO 03331 1211 2209 TERML TNULL 03332 7516 2210 FCDEAD NOSUC,YES 3304 03333 7000 2211 GEN ILLINT,NO 03334 1134 / EIGHT/S INTERPRETER. ESI Page 70 2212 /TERMINAL SYMBOLS AND CLASSES. 2213 / 2214 /INTERNAL CHARACTER DEFINITIONS. 2215 / 2216 0001 IA=01 2217 0002 IB=02 2218 0003 IC=03 2219 0004 ID=04 2220 0005 IE=05 2221 0006 IF=06 2222 0007 IG=07 2223 0010 IH=10 2224 0011 II=11 2225 0012 IJ=12 2226 0013 IK=13 2227 0014 IL=14 2228 0015 IM=15 2229 0016 IN=16 2230 0017 IO=17 2231 0020 IP=20 2232 0021 IQ=21 2233 0022 IAR=22 2234 0023 IS=23 2235 0024 IT=24 2236 0025 IU=25 2237 0026 IV=26 2238 0027 IW=27 2239 0030 IX=30 2240 0031 IY=31 2241 0032 IZ=32 2242 0060 I0=60 2243 0061 I1=61 2244 0062 I2=62 2245 0063 I3=63 2246 0064 I4=64 2247 0065 I5=65 2248 0066 I6=66 2249 0067 I7=67 2250 0070 I8=70 2251 0071 I9=71 2252 0000 IEOL=00 2253 0054 ICOMMA=54 2254 0075 IEQUAL=75 2255 0050 ILPAR=50 2256 0051 IRPAR=51 2257 0033 ILBRAC=33 2258 0035 IRBRAC=35 2259 0074 ILT=74 2260 0076 IGT=76 2261 0036 IUPAR=36 2262 0057 ISLASH=57 2263 0052 ISTAR=52 2264 0053 IPLUS=53 2265 0055 IMINUS=55 2266 0042 IQUOTE=42 2267 0072 ICOLON=72 2268 0073 ISEMI=73 / EIGHT/S INTERPRETER. ESI Page 71 2269 0037 ICR=37 2270 0040 ISPACE=40 / EIGHT/S INTERPRETER. ESI Page 72 2271 /TERMINAL SYMBOL DEFINITIONS: 2272 / 2273 03335 7762 TNLINE, -IN; -IO 03336 7761 2274 03337 7764 TLINE, -IL; -II; -IN; -IE; SCREOL 03340 7767 03341 7762 03342 7773 03343 2355 2275 03344 7771 TGO, -IG; -IO 03345 7761 2276 03346 0000 TIEOL, IEOL 2277 03347 7773 TDONE, -IE; -IN; -ID; IEOL 03350 7762 03351 7774 03352 0000 2278 03353 7755 TSTOP, -IS; -IT; -IO; -IP; IEOL 03354 7754 03355 7761 03356 7760 03357 0000 2279 03360 7767 TIF, -II; IF 03361 0006 2280 03362 0054 TCOMMA, ICOMMA 2281 03363 0076 TGT2, IGT 2282 03364 0074 TLT2, ILT 2283 03365 7771 TGE, -IG 2284 03366 0005 TE, IE 2285 03367 7764 TLE, -IL; IE 03370 0005 2286 03371 7762 TNE, -IN; IE 03372 0005 2287 03373 7772 TFOR, -IF; -IO; IAR 03374 7761 03375 0022 2288 03376 3600 TSCRV, TCVARB 2289 03377 0075 TEQUAL, IEQUAL 2290 03400 0050 TLPAR, ILPAR 2291 03401 0051 TRPAR, IRPAR 2292 03402 7755 TSET, -IS; -IE; IT 03403 7773 03404 0024 2293 03405 0036 TUPAR, IUPAR 2294 03406 3671 TSCRN, TCFPN 2295 03407 0033 TLBRAC, ILBRAC 2296 03410 0035 TRBRAC, IRBRAC 2297 03411 0052 TSTAR, ISTAR 2298 03412 0057 TSLASH, ISLASH 2299 03413 0053 TPLUS, IPLUS 2300 03414 0055 TMINUS, IMINUS 2301 03415 7767 TIP, -II; IP 03416 0020 2302 03417 7772 TFP, -IF; IP 03420 0020 2303 03421 7777 TABS, -IA; -IB; IS 03422 7776 03423 0023 / EIGHT/S INTERPRETER. ESI Page 73 2304 03424 7755 TSGN, -IS; -IG; IN 03425 7771 03426 0016 2305 03427 7775 TCANC, -IC; -IA; -IN; -IC; -IE; -IL; IEOL 03430 7777 03431 7762 03432 7775 03433 7773 03434 7764 03435 0000 2306 03436 7774 TDO, -ID; IO 03437 0017 2307 03440 7760 TPART, -IP; -IA; -IAR; IT 03441 7777 03442 7756 03443 0024 2308 03444 7755 TSTEP, -IS; -IT; -IE; IP 03445 7754 03446 7773 03447 0020 2309 03450 7754 TTYPE, -IT; -IY; -IP; IE 03451 7747 03452 7760 03453 0005 2310 03454 7755 TSIZE, -IS; -II; -IZ; -IE 03455 7767 03456 7746 03457 7773 2311 03460 2355 TEOL, SCREOL 2312 03461 0042 TQUOTE, IQUOTE 2313 03462 3637 TSCRS, TCSTRG 2314 03463 7760 TPRTSE, -IP; -IA; -IAR; -IT; -IS; SCREOL 03464 7777 03465 7756 03466 7754 03467 7755 03470 2355 2315 03471 7752 TVALSE, -IV; -IA; -IL; -IU; -IE; -IS; SCREOL 03472 7777 03473 7764 03474 7753 03475 7773 03476 7755 03477 2355 2316 03500 7777 TALLE, -IA; -IL; -IL; SCREOL 03501 7764 03502 7764 03503 2355 2317 03504 7777 TALL, -IA; -IL; IL 03505 7764 03506 0014 2318 03507 7774 TDELETE, -ID; -IE; -IL; -IE; -IT; IE 03510 7773 03511 7764 03512 7773 03513 7754 03514 0005 / EIGHT/S INTERPRETER. ESI Page 74 2319 03515 3662 TSCRI, TCINTG 2320 03516 0072 TCOLON, ICOLON 2321 03517 3670 TNULL, TCNULL 2322 03520 7754 TTO, -IT; IO 03521 0017 2323 03522 7774 TDEMAND, -ID; -IE; -IM; -IA; -IN; ID 03523 7773 03524 7763 03525 7777 03526 7762 03527 0004 2324 03530 7761 TON, -IO; -IN; IEOL 03531 7762 03532 0000 2325 03533 7761 TOFF, -IO; -IF; -IF; IEOL 03534 7772 03535 7772 03536 0000 2326 03537 7760 TPAGE, -IP; -IA; -IG; -IE; SCREOL 03540 7777 03541 7771 03542 7773 03543 2355 2327 03544 7764 TLOG, -IL; -IO; IG 03545 7761 03546 0007 2328 03547 7773 TEXP, -IE; -IX; IP 03550 7750 03551 0020 2329 03552 7755 TSIN, -IS; -II; IN 03553 7767 03554 0016 2330 03555 7775 TCOS, -IC; -IO; IS 03556 7761 03557 0023 2331 03560 7755 TSQRT, -IS; -IQ; -IAR; IT 03561 7757 03562 7756 03563 0024 2332 03564 7777 TARCTAN, -IA; -IAR; -IC; -IT; -IA; IN 03565 7756 03566 7775 03567 7754 03570 7777 03571 0016 2333 03572 7764 TLN, -IL; IN 03573 0016 2334 03574 7774 TDP, -ID; IP 03575 0020 2335 03576 7750 TEP, -IX; IP 03577 0020 / EIGHT/S INTERPRETER. ESI Page 75 2336 /TERMINAL CLASS PROCESSOR FOR "SCRIPT V". 2337 / 2338 TCVARB, RDADV NXTLXN /GET CURRENT CHAR. 03600 4562 03601 0103 2339 03602 7450 SNA /IS IT "END OF LINE"? 2340 03603 5777@ JMP RCFAIL /YES. 2341 03604 1376 TAD (-33) 2342 03605 7500 SMA /IS IT A LETTER? 2343 03606 5777@ JMP RCFAIL /NO. 2344 03607 1375 TAD (33) /YES. SAVE IT TEMPORARILY 2345 03610 3061 DCA TMP 2346 RD NXTLXN /GET NEXT CHAR. 03611 4550 03612 0103 2347 03613 7450 SNA /IS IT END OF LINE? 2348 03614 5226 JMP TCV1 /YES.. 2349 03615 1376 TAD (-33) /NO. SUBTRACT 33. 2350 03616 7510 SPA /IS IT A LETTER? 2351 03617 5777@ JMP RCFAIL /YES. NO GOOD. 2352 03620 1374 TAD (-25) /SUBTRACT TOTAL OF 60 2353 03621 7510 SPA /IS IT SPECIAL CHAR. 2354 03622 5226 JMP TCV1 /YES. OK 2355 03623 1147 TAD [-12] /NO. SUBTRACT TOTAL OF 72. 2356 03624 7510 SPA /IS IT A NUMBER? 2357 03625 5777@ JMP RCFAIL /YES. NO GOOD. 2358 03626 7200 TCV1, CLA /NO. NOT A LETTER OR DIGIT. 2359 03627 1166 TAD [-NUMWD] 2360 03630 3054 DCA WDCNT /MULTIPLY LETTER BY NUMWD. 2361 03631 1061 TCV1L, TAD TMP 2362 03632 2054 ISZ WDCNT 2363 03633 5231 JMP TCV1L /NOW HAVE REL LOC OF VARIABLE. 2364 03634 1373 TAD (VRBLOC-NUMWD) /ADD VARIABLE BASE. 2365 03635 3105 DCA CURSYM /THIS IS LOCATION OF VARIABLE. 2366 03636 5772@ JMP RCSUC1 2367 2368 /PROCESS TERMINAL CLASS "SCRIPT S" - STRING. 2369 / 2370 TCSTRG, RD NXTLXN /GET CURRENT CHARACTER. 03637 4550 03640 0103 2371 03641 7450 SNA /IS IT EOL? 2372 03642 5254 JMP TCSTR1 /YES. 2373 03643 1371 TAD (-37) 2374 03644 7450 SNA /IS IT "CR"? 2375 03645 5254 JMP TCSTR1 /YES. 2376 03646 1166 TAD [-3] 2377 03647 7650 SNA CLA /IS IT "QUOTE". 2378 03650 5254 JMP TCSTR1 /YES. 2379 ADV NXTLXN 03651 4551 03652 0103 2380 03653 5237 JMP TCSTRG /TRY NEXT CHARACTER. 2381 / 2382 TCSTR1, DIFPTR SVLXF,NXTLXN /GET STRING LENGTH. 03654 4553 03655 0110 / EIGHT/S INTERPRETER. ESI Page 76 03656 0103 2383 03657 1160 TAD [-1] 2384 03660 3055 DCA ALCNT /STORE LENGTH. 2385 03661 5770@ JMP STLXF 2386 / 2387 / 2388 /PROCESS TERMINAL CLASS "SCRIPT I" - 2389 / DECIMAL INTEGER 1 - 9 2390 / 2391 03662 0000 TCINTG, 0 2392 03663 4767@ JMS TSTDEC /IS CURRENT CHAR DECIMAL DIGIT? 2393 03664 5777@ JMP RCFAIL /NO. 2394 03665 7450 SNA /YES. IS IT ZERO? 2395 03666 5777@ JMP RCFAIL /YES. 2396 03667 3766@ DCA PARTNO /NO. 2397 03670 5765@ TCNULL, JMP RCSUC /DONE. / EIGHT/S INTERPRETER. ESI Page 77 2398 /PROCESS TERMINAL CLASS "SCRIPT N". 2399 / 2400 03671 3037 TCFPN, DCA ACX /CLEAR AC EXPONENT. 2401 03672 3040 DCA ACS /CLEAR AC SIGN. 2402 03673 3106 DCA QANYIN /CLEAR "ANY IN" FLAG. 2403 03674 3354 DCA QDCPT /CLEAR "DECIMAL POINT YET" FLAG. 2404 03675 1143 TAD [-PREC-1] 2405 03676 3055 DCA ALCNT /NUMBER OF AC DIGITS + 1. 2406 03677 1142 TAD [AC+PREC-1] /HIGH ORDER AC DIGIT. 2407 03700 3053 DCA CRWD 2408 03701 4767@ TCFGDG, JMS TSTDEC /IS CURRENT CHAR A DECIMAL DIGIT? 2409 03702 5325 JMP TCF1 /NO. 2410 03703 7450 SNA /YES. IS DIGIT ZERO? 2411 03704 5313 JMP TCFTQA /YES. 2412 03705 4764@ TCFAAC, JMS ADACS /ADD DIGIT TO FLOATING AC. 2413 03706 7000 NOP /"AC FULL" EXIT. 2414 03707 1354 TAD QDCPT 2415 03710 7650 SNA CLA /HAS A DECIMAL POINT BEEN REACHED? 2416 03711 2037 ISZ ACX /NO. INCREMENT AC EXPONENT. 2417 03712 5301 JMP TCFGDG 2418 / 2419 03713 1106 TCFTQA, TAD QANYIN 2420 03714 7640 SZA CLA /HAVE ANY DIGITS BEEN PUT IN FAC? 2421 03715 5305 JMP TCFAAC /YES. SO PUT IN THE ZERO. 2422 03716 1354 TAD QDCPT /NO. 2423 03717 7650 SNA CLA /HAS A DECIMAL POINT BEEN REACHED? 2424 03720 5301 JMP TCFGDG /NO. 2425 03721 7040 CMA 2426 03722 1037 TAD ACX /SUBTRACT ONE FROM AC EXPONENT. 2427 03723 3037 DCA ACX 2428 03724 5301 JMP TCFGDG 2429 / 2430 03725 1107 TCF1, TAD CURCHR /GET CURRENT CHAR. 2431 03726 1363 TAD (-56) 2432 03727 7440 SZA /IS IT A DECIMAL POINT? 2433 03730 5340 JMP TCF2 /NO. 2434 03731 1354 TAD QDCPT /YES. 2435 03732 7640 SZA CLA /HAS DECIMAL PT. BEEN REACHED? 2436 03733 5340 JMP TCF2 /YES. 2437 03734 2354 ISZ QDCPT /NO, SET "DEC. PT. REACHED" FLAG. 2438 ADV NXTLXN /ADVANCE OVER DECIMAL POINT. 03735 4551 03736 0103 2439 03737 5301 JMP TCFGDG 2440 / 2441 03740 7200 TCF2, CLA 2442 03741 1106 TAD QANYIN 2443 03742 7640 SZA CLA /HAVE ANY DIGITS BEEN PUT IN FAC? 2444 03743 5351 JMP TCFFAC /YES. RESULT IS NON-ZERO. 2445 DIFPTR NXTLXF,NXTLXN /NO. 03744 4553 03745 0100 03746 0103 2446 03747 7650 SNA CLA /HAS INPUT POINTER CHANGED? 2447 03750 5777@ JMP RCFAIL /NO. 2448 03751 4764@ TCFFAC, JMS ADACS /ADD ZERO TO FAC. 2449 03752 5762@ JMP TCF3 /"AC FULL" EXIT. GO TEST FOR "E". / EIGHT/S INTERPRETER. ESI Page 78 2450 03753 5351 JMP TCFFAC /"FAC NOT FULL" EXIT. 2451 / 2452 03754 0000 QDCPT, 0 /?DECIMAL POINT REACHED YET. 2453 3755 EP17=. 03762 5200 03763 7722 03764 5250 03765 5345 03766 2162 03767 5267 03770 5354 03771 7741 03772 5350 03773 0207 03774 7753 03775 0033 03776 7745 03777 5361 2454 LIT / EIGHT/S INTERPRETER. ESI Page 79 2455 PAGE 25 2456 / 2457 05200 1107 TCF3, TAD CURCHR /GET CURRENT CHARACTER. 2458 05201 1377 TAD (-IE) 2459 05202 7640 SZA CLA /IS IT "E"? 2460 05203 5244 JMP TCF8 /NO. DONE. 2461 ADV NXTLXN /YES. PROCESS EXPONENT. 05204 4551 05205 0103 2462 05206 7240 CLA CMA /SET EXP SIGN SWITCH TO +. 2463 05207 3051 DCA IRS 2464 RD NXTLXN /GET NEW CHAR. 05210 4550 05211 0103 2465 05212 1376 TAD (-IPLUS) 2466 05213 7450 SNA /IS IT "+"? 2467 05214 5221 JMP TCF4 /YES. 2468 05215 1157 TAD [-IMINUS+IPLUS] 2469 05216 7640 SZA CLA /IS IT "-"? 2470 05217 5223 JMP TCF5 /NO. 2471 05220 3051 DCA IRS /YES, SET EXP SIGN SWITCH TO -. 2472 TCF4, ADV NXTLXN /ADVANCE OVER + OR -. 05221 4551 05222 0103 2473 05223 4267 TCF5, JMS TSTDEC /IS CHAR DECIMAL DIGIT? 2474 05224 5361 JMP RCFAIL /NO. 2475 05225 3056 TCF9, DCA MULCNT /YES. STORE DIGIT. 2476 05226 1056 TAD MULCNT 2477 05227 3050 DCA IRX 2478 05230 4267 JMS TSTDEC /IS NEXT CHAR DEC. DIGIT? 2479 05231 5236 JMP TCF6 /NO. 2480 05232 3061 DCA TMP /YES. SAVE SECOND DIGIT. 2481 05233 4775@ JMS BMUL10 /MULTIPLY 1ST DIGIT BY 10. 2482 05234 1061 TAD TMP /ADD 2ND DIGIT. 2483 05235 5225 JMP TCF9 /GET NEXT DIGIT. 2484 05236 1050 TCF6, TAD IRX /GET "E" EXPONENT. 2485 05237 2051 ISZ IRS /WAS EXP SIGN +? 2486 05240 7041 CIA /NO, COMPLEMENT EXPONENT. 2487 05241 1037 TAD ACX /TO OR FROM FAC EXPONENT. 2488 05242 3037 DCA ACX 2489 05243 4774@ JMS CHKEXP /CHECK FOR EXPONENT OVERFLOW. 2490 05244 1036 TCF8, TAD AC+PREC-1 2491 05245 7650 SNA CLA /IS H-O AC DIGIT = 0? 2492 05246 3037 DCA ACX /YES. CLEAR EXPONENT. 2493 05247 5345 JMP RCSUC /DONE. 2494 / 2495 / 2496 05250 0000 ADACS, 0 2497 05251 3453 DCA I CRWD /STORE DIGIT. 2498 05252 1055 TAD ALCNT 2499 05253 7650 SNA CLA /IS AC FULL? 2500 05254 5650 JMP I ADACS /YES. TAKE "AC FULL" EXIT. 2501 05255 7040 CMA 2502 05256 1053 TAD CRWD 2503 05257 3053 DCA CRWD /CRWD-1 TO CRWD. 2504 05260 2055 ISZ ALCNT /IS AC NOW FULL? 2505 05261 5264 JMP ADACS1 /NO. / EIGHT/S INTERPRETER. ESI Page 80 2506 05262 4773@ JMS ROUND /YES. ROUND AC BY H-O MQ DIGIT. 2507 05263 5650 JMP I ADACS /TAKE "AC FULL" EXIT. 2508 / 2509 05264 2250 ADACS1, ISZ ADACS 2510 05265 2106 ISZ QANYIN 2511 05266 5650 JMP I ADACS /TAKE "AC NOT FULL" EXIT. / EIGHT/S INTERPRETER. ESI Page 81 2512 /TSTDEC 2513 /SUBROUTINE TO TEST CURRENT CHARACTER FOR DECIMAL DIGIT. 2514 /IF IT IS, CONVERTS IT TO RANGE 00-11 OCTAL. 2515 /CALLING SEQUENCE; 2516 / JMS TSTDEC 2517 / ... /NOT DECIMAL DIGIT. 8AC CLEAR. 2518 / ... /DECIMAL DIGIT, IN 8AC. 2519 / 2520 05267 0000 TSTDEC, 0 2521 RD NXTLXN /GET NEXT CHAR. 05270 4550 05271 0103 2522 05272 1372 TAD (-60) 2523 05273 7710 SPA CLA /IS IT GE 0? 2524 05274 5667 JMP I TSTDEC /NO. FAIL EXIT. 2525 05275 1107 TAD CURCHR /YES. 2526 05276 1371 TAD (-72) 2527 05277 7700 SMA CLA /IS IT <72? 2528 05300 5667 JMP I TSTDEC /NO. FAIL EXIT. 2529 ADV NXTLXN /YES. ADVNCE OVER DIGIT. 05301 4551 05302 0103 2530 05303 1107 TAD CURCHR 2531 05304 1372 TAD (-60) /GET OCTAL EQUIV OF DIGIT. 2532 05305 2267 ISZ TSTDEC /SUCCESS EXIT. 2533 05306 5667 JMP I TSTDEC 2534 / 2535 05307 5220 PAGMES, TEXT /*PAGE / 05310 0107 05311 0540 05312 0000 / EIGHT/S INTERPRETER. ESI Page 82 2536 /LEXICAL ANALYSER. 2537 /CALLING SEQUENCE: 2538 / TAD (TERM) 2539 / JMS RECOG 2540 / ... /SUCCESS EXIT. 2541 / ... /FAIL EXIT. 2542 / 2543 05313 0000 RECOG, 0 2544 05314 3017 DCA NXTTTC /NEXT TERMINAL TYPE CODE (AX7). 2545 05315 1100 TAD NXTLXF /CURRENT TERMINAL CHARCTER POSITION 2546 05316 3103 DCA NXTLXN /STORE IN RUNNING POINTER. 2547 05317 1101 TAD NXTLXF+1 2548 05320 3104 DCA NXTLXN+1 2549 05321 1417 RECOGL, TAD I NXTTTC /GET TTC. 2550 05322 7510 SPA /IS IT A NON-LAST WORD OF MULTI? 2551 05323 5332 JMP NLC /YES. 2552 05324 7004 RAL /NO. SHIFT LEFT 1. 2553 05325 7500 SMA /IS IT LAST WORD OF TTC? 2554 05326 5337 JMP LC /YES. 2555 05327 7010 RAR /NO. MUST BE TERMINAL CLASS PTR. 2556 05330 3061 DCA TMP /GET SUBROUTINE ENTRY LOCATION. 2557 05331 5461 JMP I TMP /ENTER TERMINAL CLASS SUBROUTINE. 2558 / 2559 NLC, RDADV NXTLXN /ADD CURRENT INPUT CHARACTER. 05332 4562 05333 0103 2560 05334 7640 SZA CLA /IS IT EQUAL TO DESIRED CHAR? 2561 05335 5361 JMP RCFAIL /NO. FAILURE. 2562 05336 5321 JMP RECOGL /GO ON TO NEXT INPUT CHARACTER. 2563 / 2564 05337 7010 LC, RAR /SHIFT CHARACTER BACK. 2565 05340 7041 CIA /- CHAR. 2566 RDADV NXTLXN /ADD CURRENT INPUT CHARACTER. 05341 4562 05342 0103 2567 05343 7640 SZA CLA /IS IS EQUAL TO DESIRED CHAR? 2568 05344 5361 JMP RCFAIL /NO. 2569 RCSUC, RD NXTLXN /GRT NEXT INPUT CHAR. 05345 4550 05346 0103 2570 05347 7200 CLA 2571 05350 1107 RCSUC1, TAD CURCHR /GET CHAR. 2572 05351 1370 TAD (-ISPACE) /IS IT "SPACE" CODE? 2573 05352 7650 SNA CLA 2574 05353 5364 JMP RCSUC2 /YES. SKIP SPACE. 2575 05354 1103 STLXF, TAD NXTLXN /NO. ADVANCE "PERMANENT" 2576 05355 3100 DCA NXTLXF /CHARACTER POINTER. 2577 05356 1104 TAD NXTLXN+1 2578 05357 3101 DCA NXTLXF+1 2579 05360 5713 JMP I RECOG /"SUCCESS" EXIT. 2580 / 2581 05361 2313 RCFAIL, ISZ RECOG /FAILURE RETURN AT (N+2). 2582 05362 7200 CLA 2583 05363 5713 JMP I RECOG 2584 / 2585 RCSUC2, ADV NXTLXN /ADVANCE OVER SPACE. 05364 4551 / EIGHT/S INTERPRETER. ESI Page 83 05365 0103 2586 05366 5345 JMP RCSUC 2587 / 05370 7740 05371 7706 05372 7720 05373 6600 05374 4351 05375 7041 05376 7725 05377 7773 2588 LIT 2589 2590 2591 /NOTE THAT TERMINAL CLASS PROCESSORS RETURN TO MAIN 2592 /LEXICAL ANALYSER IN ONE OF THREE WAYS: 2593 / RCSUC2 - ADVANCE INPUT STRING, THEN 2594 / RCSUC - READ CHRACTER, THE 2595 / RCSUC1 - TEST FOR SPACES. / EIGHT/S INTERPRETER. ESI Page 84 2596 PAGE 20 2597 / FLOATING POINT ARITHMETIC PACKAGE. 2598 / 2599 / 2600 /GETNUM - UNPACK A NUMBER AND PUT IT IN FAC. LOCATION OF 2601 /NUMBER IS SPECIFIED IN AC AT ENTRY. AC IS CLEAR AT EXIT. 2602 / 2603 04000 0000 GETNUM, 0 2604 04001 3053 DCA CRWD /LOCATION OF WORD 0 2605 04002 6214 RDF /PRESERVE INITIAL DATA BANK. 2606 04003 1377 TAD (CDF 0) 2607 04004 3236 DCA GTXX 2608 CPY GTXX,GTXX1 04005 1236 04006 3246 2609 CPY GTXX,GTXX2 04007 1236 04010 3255 2610 04011 1453 TAD I CRWD /GET FIRST WORD 2611 04012 7004 RAL /ROTATE AC SIGN TO LINK. 2612 04013 0141 AND [7700] /CLEAR NON-EXISTANT BITS. 2613 04014 7430 SZL /IS EXPONENT NEGATIVE? 2614 04015 1146 TAD [0077] /YES - FORCE ALL ONES. 2615 ROTR6 /RIGHT ALIGN EXPONENT 04016 7012 04017 7012 04020 7012 2616 04021 3037 DCA ACX 2617 04022 1453 TAD I CRWD /GET FIRST WORD AGAIN. 2618 04023 0154 AND [0020] /EXTRACT MANTISSA SIGN. 2619 04024 3040 DCA ACS /SAVE. 2620 04025 1155 TAD [AC-1] 2621 04026 3010 DCA AX0 2622 04027 1157 TAD [-NUMWD+1] /NUMBER OF 3-DIGIT WORDS. 2623 04030 3054 DCA WDCNT 2624 04031 1453 TAD I CRWD /GET FIRST WORD AGAIN. 2625 04032 0376 AND (0017) /GET LOW-ORDER DECIMAL DIGIT. 2626 04033 6201 CDF 0 2627 04034 3410 DCA I AX0 2628 04035 2053 GTLP, ISZ CRWD /GO TO N-TH WORD. 2629 04036 7402 GTXX, XX 2630 04037 1453 TAD I CRWD /GET WORD. 2631 04040 6201 CDF 0 2632 ROTR8 04041 7006 04042 7006 04043 7004 2633 04044 0376 AND (0017) /EXTRACT DIGIT 1. 2634 04045 3410 DCA I AX0 2635 04046 7402 GTXX1, XX 2636 04047 1453 TAD I CRWD 2637 04050 6201 CDF 0 2638 ROTR4 04051 7012 04052 7012 2639 04053 0376 AND (0017) /EXTRACT DIGIT 2. 2640 04054 3410 DCA I AX0 / EIGHT/S INTERPRETER. ESI Page 85 2641 04055 7402 GTXX2, XX 2642 04056 1453 TAD I CRWD 2643 04057 6201 CDF 0 2644 04060 0376 AND (0017) 2645 04061 3410 DCA I AX0 /EXTRACT DIGIT 3 2646 04062 2054 ISZ WDCNT /WAS IT LAST WORD? 2647 04063 5235 JMP GTLP /NO. GO BACK FOR NEXT. 2648 04064 5600 JMP I GETNUM /YES. DONE. 2649 4065 CP20=. 04176 0017 04177 6201 2650 LIT / EIGHT/S INTERPRETER. ESI Page 86 2651 /FAD, FSB 2652 /FLOATING DECIMAL ADD AND SUBTRACT SUBROUTINES. 2653 /ADD OR SUBTRACT CONTENTS OF IR TO OR FROM FAC, LEAVING 2654 /NORMALISED RESULT IN FAC. PDP-8 AC IS CLEAR AT ENTRY 2655 /AND AT EXIT. 2656 / 2657 PAGE 27 2658 05600 0000 FAD, 0 2659 05601 4777@ JMS FDADDS /ADD AC TO IR. 2660 05602 5600 JMP I FAD 2661 05603 0000 FSB, 0 2662 05604 1051 TAD IRS 2663 05605 7040 CMA 2664 05606 0154 AND [0020] 2665 05607 3051 DCA IRS /COMPLEMENT IR SIGN. 2666 05610 4777@ JMS FDADDS /SUBTRACT IR FROM FAC. 2667 05611 5603 JMP I FSB 2668 5612 BP27=. 05777 4065 2669 LIT 2670 4065 *CP20 2671 / 2672 / 2673 /FDADDS 2674 /FLOATING DECIMAL ADD SUBROUTINE. 2675 /ADDS IR AND FAC. ASSUMES BOTH ARE SIGNED-MAGNITUDE 2676 /FLOATING-POINT DECIMAL NUMBERS. LEAVES NORMALISED RESULT 2677 /IN FAC. PDP-8 AC IS CLEAR AT ENTRY, NOT NECESSARILY 2678 /LEFT CLEAR AT EXIT. 2679 / 2680 04065 0000 FDADDS, 0 2681 04066 1047 TAD IR+PREC-1 2682 04067 7650 SNA CLA /IS IR = 0? 2683 04070 5665 JMP I FDADDS /YES. EXIT. 2684 04071 1036 TAD AC+PREC-1 2685 04072 7640 SZA CLA /IS FAC = 0? 2686 04073 5276 JMP FDAD1 /NO. 2687 04074 4574 SWP /YES. SWAP AC AND IR. 2688 04075 5665 JMP I FDADDS /EXIT. 2689 04076 1050 FDAD1, TAD IRX /IR EXPONENT. 2690 04077 7041 CIA /COMPLEMENT IT. 2691 04100 1037 TAD ACX /ACX-IRX 2692 04101 7710 SPA CLA /IS AC MAGNITUDE GE IR MAGNITUDE? 2693 04102 4574 SWP /NO. SWAP FAC AND IR VALUES. SIGNS 2694 /AND EXPONENTS. 2695 04103 3052 DCA ALDIG /SET ALIGNMENT DIGIT TO 0. 2696 04104 1051 TAD IRS 2697 04105 7041 CIA 2698 04106 1040 TAD ACS /ACS-IRS 2699 04107 7650 SNA CLA /ARE THEY EQUAL? 2700 04110 5315 JMP TSTEXP /YES. 2701 04111 1140 TAD [IR-1] /NO. 2702 04112 4775@ JMS COMP10 /COMPLEMENT IR. 2703 04113 1374 TAD DECIMAL (9) OCTAL 2704 04114 3052 DCA ALDIG /SET ALIGNMENT DIGIT TO 9. 2705 04115 1050 TSTEXP, TAD IRX 2706 04116 7041 CIA / EIGHT/S INTERPRETER. ESI Page 87 2707 04117 1037 TAD ACX /ACX-IRX 2708 04120 7450 SNA /IS DIFFERENCE 0? 2709 04121 5331 JMP FDADM /YES. GO ADD MAGNITUDES. 2710 04122 1156 TAD [-PREC] 2711 04123 7500 SMA /IS IR NON-SIGNIFICANT 2712 04124 5365 JMP FDADX /EXIT, FORCE AC CLEAR. 2713 04125 1137 TAD [PREC] /NO. 2714 04126 3055 DCA ALCNT /STORE ALIGNMENT COUNT. 2715 04127 1140 TAD [IR-1] 2716 04130 4773@ JMS ALIGN /ALIGN IR. 2717 04131 1052 FDADM, TAD ALDIG 2718 04132 7650 SNA CLA /ARE SIGNS EQUAL OR UNEQUAL? 2719 04133 5350 JMP FDSE /EQUAL. 2720 04134 1140 FDSU, TAD [IR-1] /ADD DECIMAL, SIGNS UNEQUAL. 2721 04135 4772@ JMS ADSUB /ADD IR TO FAC. 2722 04136 7640 SZA CLA /IS THERE A CARRY? 2723 04137 5346 JMP FDNORM /YES. NO CHANGE IN AC SIGN. 2724 04140 1040 TAD ACS /NO. COMPLEMENT AC SIGN. 2725 04141 7040 CMA 2726 04142 0154 AND [0020] 2727 04143 3040 DCA ACS 2728 04144 1155 TAD [AC-1] 2729 04145 4775@ JMS COMP10 /COMPLEMENT AC VALUE. 2730 04146 4771@ FDNORM, JMS NORM10 /GO NORMALISE FAC, IF NECESSARY. 2731 04147 5665 JMP I FDADDS /EXIT. 2732 / 2733 04150 1140 FDSE, TAD [IR-1] /ADD DECIMAL, SIGNS EQUAL. 2734 04151 4772@ JMS ADSUB /ADD IR TO FAC. 2735 04152 7450 SNA /IS THERE A CARRY? 2736 04153 5665 JMP I FDADDS /NO. EXIT. 2737 04154 3055 DCA ALCNT /YES. SET SHIFT COUNTER TO 1. 2738 04155 3052 DCA ALDIG /SET ALDIG TO 0. 2739 CPY AC,MQ+PREC-1 /SAVE HIGH ORDER AC DIGIT FOR ROUNDING. 04156 1030 04157 3027 2740 04160 1155 TAD [AC-1] 2741 04161 4773@ JMS ALIGN /SHIFT AC RIGHT 1. H-O DIGIT IS 0. 2742 04162 2036 ISZ AC+PREC-1 /SET H-O DIGIT TO 1. 2743 04163 4770@ JMS ROUND /ROUND PRODUCT TO 7 DIGITS. 2744 04164 2037 ISZ ACX /INCREMENT AC EXPONENT. 2745 04165 7200 FDADX, CLA /SUPPRESS SKIP ON 7777, CLEAR AC. 2746 04166 5665 JMP I FDADDS /EXIT. 2747 4167 EP20=. 04170 6600 04171 4714 04172 4542 04173 4670 04174 0011 04175 4642 2748 LIT / EIGHT/S INTERPRETER. ESI Page 88 2749 4206 *BP21 2750 /FMU 2751 /FLOATING DECIMAL MULTIPLY SUBROUTINE. 2752 /MULTIPLIES FAC BY IR, LEAVING NORMALISED AND ROUNDED RESULT 2753 /IN FAC. 8AC IS 0 AT EXIT AND ENTRY. 2754 / 2755 04206 0000 FMU, 0 2756 04207 1155 TAD [AC-1] /MOVE AC TO MQ AND CLEAR AC. 2757 04210 3010 DCA AX0 2758 04211 1154 TAD [MQ-1] 2759 04212 3011 DCA AX1 2760 04213 1155 TAD [AC-1] 2761 04214 3012 DCA AX2 2762 04215 1156 TAD [-PREC] 2763 04216 3054 DCA WDCNT 2764 04217 1410 FMUL1, TAD I AX0 /MOVE A DIGIT. 2765 04220 3411 DCA I AX1 2766 04221 3412 DCA I AX2 /CLEAR AN AC DIGIT. 2767 04222 2054 ISZ WDCNT /DONE? 2768 04223 5217 JMP FMUL1 /NO. 2769 04224 1156 TAD [-PREC] /YES. INITIALISE COUNTER FOR 2770 /MAIN LOOP. 2771 04225 3056 DCA MULCNT 2772 04226 3052 FMUL3, DCA ALDIG /ALDIG HOLDS FAC CARRY DIGIT. 2773 04227 1021 FMUL4, TAD MQ /GET L-O DIGIT OF MQ. 2774 04230 7450 SNA /IS IT 0? 2775 04231 5241 JMP FMULSR /YES. SHIFT RIGHT. 2776 04232 1160 TAD [-1] /NO. SUBTRACT 1. 2777 04233 3021 DCA MQ /AND STORE. 2778 04234 1140 TAD [IR-1] 2779 04235 4777@ JMS ADSUB /ADD FIR TO FAC. 2780 04236 1052 TAD ALDIG /ACCUMULATE CARRY DIGIT. 2781 04237 3052 DCA ALDIG 2782 04240 5227 JMP FMUL4 /TRY AGAION. 2783 / 2784 04241 1376 FMULSR, TAD (MQ) /SHIFT FAC-FMQ RIGHT 1 DIGIT. 2785 04242 3010 DCA AX0 2786 04243 1154 TAD [MQ-1] 2787 04244 3011 DCA AX1 2788 04245 1375 TAD (-PREC-PREC+1) 2789 04246 3054 DCA WDCNT 2790 04247 1410 FMUL5, TAD I AX0 /MOVE A DIGIT. 2791 04250 3411 DCA I AX1 2792 04251 2054 ISZ WDCNT /DONE? 2793 04252 5247 JMP FMUL5 /NO. 2794 04253 1052 TAD ALDIG /YES. 2795 04254 3036 DCA AC+PREC-1 /MOVE IN CARRY DIGIT. 2796 04255 2056 ISZ MULCNT /END OF MULTIPLY LOOP? 2797 04256 5226 JMP FMUL3 /NO. WORK ON NEXT DIGIT. 2798 04257 1036 TAD AC+PREC-1 /YES. GET H-O AC DIGIT. 2799 04260 7640 SZA CLA /IS IT 0? 2800 04261 5272 JMP FMUL6 /NO. 2801 04262 4774@ JMS NORM10 /YES. NORMALISE RESULT. 2802 04263 1036 TAD AC+PREC-1 2803 04264 7650 SNA CLA /IS H-O AC DIGIT STILL 0? 2804 04265 5606 JMP I FMU /YES. WHOLE PRODUCT MUST BE 0. 2805 04266 1027 TAD AC-1 /NO. GET H-O MQ DIGIT, / EIGHT/S INTERPRETER. ESI Page 89 2806 04267 3030 DCA AC /PUT IT IN L-O AC 2807 04270 1026 TAD AC-2 2808 04271 3027 DCA AC-1 2809 04272 4773@ FMUL6, JMS ROUND /ROUND PRODUCT. 2810 04273 1037 TAD ACX 2811 04274 1050 TAD IRX /COMPUTE NEW AC EXPONENT. 2812 04275 3037 DCA ACX 2813 04276 1040 TAD ACS /COMPUTE NEW AC SIGN. 2814 04277 1051 TAD IRS /BY EXCLUSIVE OR OF 2815 04300 0154 AND [0020] /IR AND AC SIGNS. 2816 04301 3040 DCA ACS 2817 04302 5606 JMP I FMU /EXIT. / EIGHT/S INTERPRETER. ESI Page 90 2818 /STPACK 2819 /STORES FLOATING AC IN ITS PACKED FORM. 2820 /STORAGE LOCATION IS SPECIFIED BY AC AT ENTRY. AC IS 0 AT 2821 /EXIT. 2822 / 2823 04303 0000 STPACK, 0 2824 04304 1160 TAD [-1] 2825 04305 3011 DCA AX1 /SET FIRST STOARAGE LOCATION. 2826 04306 6214 RDF /PRESERVE CALLING DATA BANK. 2827 04307 1372 TAD (CDF 0) 2828 04310 3330 DCA STXX 2829 CPY STXX,STXX1 04311 1330 04312 3343 2830 04313 6201 CDF 0 /SET DATA BANK 0 TO BEGIN. 2831 04314 1155 TAD [AC-1] 2832 04315 3010 DCA AX0 /SET FIRST AC LOCATION. 2833 04316 1157 TAD [-NUMWD+1] /NUMBER OF 3-DIGIT WORDS. 2834 04317 3054 DCA WDCNT 2835 04320 4351 JMS CHKEXP /CHECK FOR EXPONENT OVERFLOW. 2836 04321 1037 TAD ACX 2837 ROTL5 /CONSTRUCT FIRST WORD OF 04322 7006 04323 7006 04324 7004 2838 04325 0371 AND (7740) /PACKED FORM, WITH EXPONENT, 2839 04326 1040 TAD ACS /SIGN, 2840 04327 1410 TAD I AX0 /AND LOW-ORDER AC DIGIT. 2841 04330 7402 STXX, XX /SET OUTPUT DATA BANK. 2842 04331 3411 DCA I AX1 /STORE FIRST WORD. 2843 04332 7100 CLL 2844 04333 6201 STPL, CDF 0 /GET AN AC DIGIT. 2845 04334 1410 TAD I AX0 2846 ROTL4 04335 7006 04336 7006 2847 04337 1410 TAD I AX0 /GET A SECOND AC DIGIT. 2848 ROTL4 04340 7006 04341 7006 2849 04342 1410 TAD I AX0 /GET A THIRD DIGIT. 2850 04343 7402 STXX1, XX /STORE AS PACKED WORD. 2851 04344 3411 DCA I AX1 2852 04345 6201 CDF 0 2853 04346 2054 ISZ WDCNT /IS IT END OF LOOP? 2854 04347 5333 JMP STPL /NO. GO PACK ANOTHER WORD. 2855 04350 5703 JMP I STPACK /YES. EXIT. 2856 / 2857 /CHECK FOR EXPONENT OVERFLOW OF ACX. 2858 04351 0000 CHKEXP, 0 2859 04352 1037 TAD ACX 2860 04353 7510 SPA /TAKE ABSOLUTE VALUE OF ACX. 2861 04354 7041 CIA 2862 04355 0141 AND [7700] 2863 04356 7640 SZA CLA /IS EXPONENT LEGAL. 2864 04357 5770@ JMP ERREXP 2865 04360 5751 JMP I CHKEXP /YES, RETURN. / EIGHT/S INTERPRETER. ESI Page 91 2866 4361 EP21=. 04370 5636 04371 7740 04372 6201 04373 6600 04374 4714 04375 7763 04376 0021 04377 4542 2867 LIT / EIGHT/S INTERPRETER. ESI Page 92 2868 PAGE 22 2869 /FDV 2870 /FLOATING DECIMAL DIVIDE SUBROUTINE. 2871 /DIVIDES FAC BY IR, LEAVING ROUNDED QUOTIENT IN FAC. 2872 /PDP-8 AC IS 0 ON ENTRY AND EXIT. 2873 / 2874 04400 0000 FDV, 0 2875 04401 1047 TAD IR+PREC-1 /GET H-O IR DIGIT. 2876 04402 7650 SNA CLA /IS IT 0? 2877 04403 5777@ JMP ERRD0 /YES. DIVISION BY 0. 2878 04404 1036 TAD AC+PREC-1 /GET H-O FAC DIGIT. 2879 04405 7650 SNA CLA /IS IT 0? 2880 04406 5600 JMP I FDV /YES. DIVIDEND IS 0, SO EXIT. 2881 04407 1156 TAD [-PREC] /MOVE IR TO IRP, CLEAR FMQ. 2882 04410 3054 DCA WDCNT 2883 04411 1140 TAD [IR-1] 2884 04412 3010 DCA AX0 2885 04413 1376 TAD (IRP-1) 2886 04414 3011 DCA AX1 2887 04415 1154 TAD [MQ-1] 2888 04416 3012 DCA AX2 2889 04417 1410 FDVL0, TAD I AX0 /GET AN IR DIGIT. 2890 04420 3411 DCA I AX1 /STORE IN IRP. 2891 04421 3412 DCA I AX2 /CLEAR AN FMQ DIGIT. 2892 04422 2054 ISZ WDCNT /DONE? 2893 04423 5217 JMP FDVL0 /NO. 2894 04424 3052 DCA ALDIG /YES. CLEAR FAC OVERFLOW DIGIT. 2895 04425 1143 TAD [-PREC-1] 2896 04426 3332 DCA SHCNTR /INITIALIZE SHIFT COUNTER. 2897 04427 1140 TAD [IR-1] 2898 04430 4775@ JMS COMP10 /TAKE 10'S COMPLEMENT OF IR. 2899 04431 3020 FDVL1, DCA DIGAC /CLEAR QUOTIENT DIGIT ACCUMULATOR. 2900 04432 1140 FDVL2, TAD [IR-1] 2901 04433 4342 JMS ADSUB /ADD IR TO FAC. 2902 04434 7640 SZA CLA /IS THERE A CARRY? 2903 04435 5243 JMP FDVAD1 /YES. 2904 04436 7240 CLA CMA /NO. 2905 04437 1052 TAD ALDIG /SUBTRACT 1 FROM AC OVERFLOW DIGIT. 2906 04440 7510 SPA /IS RESULT POSITIVE? 2907 04441 5245 JMP FDVTMQ /NO. 2908 04442 3052 DCA ALDIG /YES. STORE NEW OVERFLOW DIGIT. 2909 04443 2020 FDVAD1, ISZ DIGAC /INCREMENT QUOTIENT DIGIT. 2910 04444 5232 JMP FDVL2 2911 / 2912 /GETS HERE WHEN AC OVERFLOW DIGIT GOES NEGATIVE. 2913 04445 7200 FDVTMQ, CLA 2914 04446 1376 TAD (IRP-1) 2915 04447 4342 JMS ADSUB /ADD IRP TO FAC. 2916 04450 7200 CLA /CLEAR CARRY, IF ANY 2917 04451 1027 TAD MQ+PREC-1 /GERT HO MQ DIGIT. 2918 04452 7640 SZA CLA /IS IT ZERO? 2919 04453 5303 JMP FDVMV /NO. 2920 04454 1036 TAD AC+PREC-1 /YES. MOVE FAC H-O DIGIT. 2921 04455 3052 DCA ALDIG /TO FAC OVERFLOW DIGIT. 2922 04456 1374 TAD (-PREC-PREC+1) /SHIFT FAC,FMQ LSFT 19 2923 04457 3054 DCA WDCNT 2924 04460 1142 TAD [AC+PREC-1] / EIGHT/S INTERPRETER. ESI Page 93 2925 04461 3060 DCA NORMTO 2926 04462 1373 TAD (AC+PREC-2) 2927 04463 3057 DCA NORMFR 2928 04464 1457 FDVL3, TAD I NORMFR /MOVE A DIGIT. 2929 04465 3460 DCA I NORMTO 2930 04466 7240 CLA CMA 2931 04467 1057 TAD NORMFR 2932 04470 3057 DCA NORMFR 2933 04471 7240 CLA CMA 2934 04472 1060 TAD NORMTO 2935 04473 3060 DCA NORMTO 2936 04474 2054 ISZ WDCNT /END OF LOOP? 2937 04475 5264 JMP FDVL3 /NO. 2938 04476 1020 TAD DIGAC /YES. MOVE ACCUMULATED QUOTIENT 2939 04477 3021 DCA MQ /DIGIT TO L-O MQ DIGIT. 2940 04500 2332 ISZ SHCNTR /INCREMENT SHIFT COUNTER. 2941 04501 5231 JMP FDVL1 /DON'T CARE ON OVERFLOW. 2942 04502 5231 JMP FDVL1 2943 / 2944 04503 1154 FDVMV, TAD [MQ-1] /MOVE FMQ TO FAC 2945 04504 3010 DCA AX0 2946 04505 1155 TAD [AC-1] 2947 04506 3011 DCA AX1 2948 04507 1156 TAD [-PREC] 2949 04510 3054 DCA WDCNT 2950 04511 1410 FDVL4, TAD I AX0 2951 04512 3411 DCA I AX1 2952 04513 2054 ISZ WDCNT 2953 04514 5311 JMP FDVL4 2954 04515 1020 TAD DIGAC /MOVE EXTRA DIGIT TO H-O MQ. 2955 04516 3027 DCA AC-1 2956 04517 4772@ JMS ROUND /ROUND QUOTIENT. 2957 04520 1050 TAD IRX /COMPUTE NEW EXPONENT. 2958 04521 1332 TAD SHCNTR 2959 04522 7041 CIA 2960 04523 1037 TAD ACX 2961 04524 3037 DCA ACX 2962 04525 1040 TAD ACS 2963 04526 1051 TAD IRS 2964 04527 0154 AND [0020] 2965 04530 3040 DCA ACS 2966 04531 5600 JMP I FDV 2967 / 2968 04532 0000 SHCNTR, 0 /DIVISION SHIFT COUNTER. 2969 04533 0000 IRP, 0 /POSITIVE IR VALUE. 2970 4542 *IRP+PREC / EIGHT/S INTERPRETER. ESI Page 94 2971 /ADSUB 2972 /DECIMAL ADD SUBROUTINE. 2973 /ADDS MAGNITUDE OF SPECIFIED REGISTER (IR OR IRP) 2974 /TO FAC. CARRY OUT OF HIGH-ORDER 2975 /FAC DIGIT IS IN 8AC ON EXIT. 2976 /CALLING SEQUENCE IS: 2977 / TAD [REG-1] 2978 / JMS ADSUB 2979 / 2980 04542 0000 ADSUB, 0 2981 04543 3010 DCA AX0 /INITIALISE FIRST OPERAND LOCATION. 2982 04544 1155 TAD [AC-1] /INITIALISE SECOND OPERAND LOC. 2983 04545 3011 DCA AX1 2984 04546 1155 TAD [AC-1] /INITIALISE THIRD OPERAND LOC. 2985 04547 3012 DCA AX2 2986 04550 1156 TAD [-PREC] /INITIALISE COUNT. 2987 04551 3054 DCA WDCNT 2988 04552 1410 ADLP, TAD I AX0 /ADD TWO DIGITS. 2989 04553 1411 TAD I AX1 2990 04554 1147 TAD DECIMAL [-10] OCTAL /SUBTRACT 10. 2991 04555 7510 SPA /IS RESULT GE 10? 2992 04556 5362 JMP ADBK /NO. 2993 04557 3412 DCA I AX2 /YES. STORE RESULT-10. 2994 04560 7201 CLA IAC /PUT CARRY DIGIT IN AC. 2995 04561 5364 JMP ADISZ 2996 / 2997 04562 1152 ADBK, TAD DECIMAL [10] OCTAL /ADD BACK 10. 2998 04563 3412 DCA I AX2 /STORE RESULT. 2999 04564 2054 ADISZ, ISZ WDCNT /END OF LOOP? 3000 04565 5352 JMP ADLP /NO. GO DO NEXT DIGIT. 3001 04566 5742 JMP I ADSUB /YES. EXIT WITH AC= 0 OR 1. 3002 04572 6600 04573 0035 04574 7763 04575 4642 04576 4532 04577 5617 3003 LIT / EIGHT/S INTERPRETER. ESI Page 95 3004 4616 *BP23 3005 /SWAP 3006 /SWAPS IR AND FAC DIGIT FOR DIGIT. 3007 /SWAPS VALUES, SIGNS, AND EXPONENTS. 3008 /ASSUMES 8AC CLEAR ON ENTRY AND EXIT. 3009 / 3010 04616 0000 SWAP, 0 3011 04617 1140 TAD [IR-1] /INITIALIZE LOOP. 3012 04620 3010 DCA AX0 3013 04621 1140 TAD [IR-1] 3014 04622 3012 DCA AX2 3015 04623 1155 TAD [AC-1] 3016 04624 3011 DCA AX1 3017 04625 1155 TAD [AC-1] 3018 04626 3013 DCA AX3 3019 04627 1373 TAD (-PREC-2) 3020 04630 3054 DCA WDCNT /COUNT OF DIGITS +SIGN+EXPONENT. 3021 04631 1410 SWAPL, TAD I AX0 /GET DIGIT OF IR. 3022 04632 3061 DCA TMP /SAVE IT. 3023 04633 1411 TAD I AX1 /GET A DIGIT OF AC. 3024 04634 3412 DCA I AX2 /STORE IT IN IR. 3025 04635 1061 TAD TMP /GET SAVED IR DIGIT. 3026 04636 3413 DCA I AX3 /STORE IT IN FAC. 3027 04637 2054 ISZ WDCNT /END OF LOOP? 3028 04640 5231 JMP SWAPL /NO. 3029 04641 5616 JMP I SWAP /YES. / EIGHT/S INTERPRETER. ESI Page 96 3030 /COMP10 3031 /10'S COMPLEMENT SUBROUTINE. 3032 /TAKES 10'S COMPLEMENT OF REGISTER SPECIFIED BY 8AC 3033 /AT ENTRY. 8AC IS 0 AT EXIT. FORM OF CALL IS 3034 / TAD [REG-1] 3035 / JMS COMP10 3036 / 3037 04642 0000 COMP10, 0 3038 04643 3010 DCA AX0 /INITIALISE WORD INDICIES. 3039 04644 1010 TAD AX0 3040 04645 3011 DCA AX1 3041 04646 1156 TAD [-PREC] /SET COUNTER. 3042 04647 3054 DCA WDCNT 3043 04650 7201 C10L1, CLA IAC /SET CARRY TO 1. 3044 04651 3061 C10L2, DCA TMP /SAVE CARRY. 3045 04652 1410 TAD I AX0 /GET A DIGIT. 3046 04653 7040 CMA /COMPLEMENT IT. 3047 04654 1061 TAD TMP /ADD CARRY. 3048 04655 7500 SMA /IS (9-DIGIT+CARRY-10) POSITIVE? 3049 04656 5264 JMP C10ST /YES. 3050 04657 1152 TAD DECIMAL [10] OCTAL /NO. ADD 10 BACK. 3051 04660 3411 DCA I AX1 /STORE DIGIT. 3052 04661 2054 ISZ WDCNT /DONE YET? 3053 04662 5251 JMP C10L2 /NO. MAKE CARRY 0. 3054 04663 5642 JMP I COMP10 /YES. EXIT. 3055 / 3056 04664 3411 C10ST, DCA I AX1 /STORE DIGIT. 3057 04665 2054 ISZ WDCNT /DONE YET? 3058 04666 5250 JMP C10L1 /NO. MAKE CARRY 1. 3059 04667 5642 JMP I COMP10 /YES. EXIT. / EIGHT/S INTERPRETER. ESI Page 97 3060 /ALIGN 3061 /ALIGNMENT SUBROUTINE. 3062 /SHIFTS REGISTER SPECIFIED BY INPUT 8AC RIGHT NUMBER 3063 /OF PLACES SPECIFIED BY ALCNT. 3064 /8AC IS CLEAR ON EXIT. THE CONTENTS OF "ALDIG" IS USED TO 3065 /LEFT FILL. 3066 / 3067 04670 0000 ALIGN, 0 3068 04671 3011 DCA AX1 /STORE "TO" REGISTER ADDRESS. 3069 04672 1011 TAD AX1 3070 04673 1055 TAD ALCNT 3071 04674 3010 DCA AX0 /STORE "FROM" REGISTER ADDRESS. 3072 04675 1156 TAD [-PREC] 3073 04676 1055 TAD ALCNT /ALCNT-PREC 3074 04677 3054 DCA WDCNT /SET COUNT. 3075 04700 1410 ALL1, TAD I AX0 /GET A DIGIT. 3076 04701 3411 DCA I AX1 /STORE IT MOVED. 3077 04702 2054 ISZ WDCNT /END OF LOOP? 3078 04703 5300 JMP ALL1 /NO. 3079 04704 1055 TAD ALCNT /YES. 3080 04705 7041 CIA 3081 04706 3054 DCA WDCNT /SET COUNT OF LEFT FILL IDGITS. 3082 04707 1052 ALL2, TAD ALDIG 3083 04710 3411 DCA I AX1 /STORE AN ALIGNMENT DIGIT. 3084 04711 2054 ISZ WDCNT /END OF FILL LOOP? 3085 04712 5307 JMP ALL2 /NO. 3086 04713 5670 JMP I ALIGN /YES. EXIT. / EIGHT/S INTERPRETER. ESI Page 98 3087 /NORM10 3088 /FLOATING DECIMAL NORMALISE ROUTINE. 3089 /NORMALISES FLOATING AC. 3090 /ASSUMES 8AC IS 0 ON ENTRY AND EXIT. 3091 / 3092 04714 0000 NORM10, 0 3093 04715 1156 TAD [-PREC] /SET LIMIT FOR ALL DIGITS = 0. 3094 04716 3054 DCA WDCNT 3095 04717 1142 TAD [AC+PREC-1] /SET H-O DIGIT LOCATION. 3096 04720 3057 DCA NORMFR 3097 04721 1457 NLP1, TAD I NORMFR /GET AN AC DIGIT 3098 04722 7640 SZA CLA /IS IT ZERO? 3099 04723 5334 JMP NLP1E /NO. END LOOP 1. 3100 04724 7240 CLA CMA /BACK UP WORD POINTER. 3101 04725 1057 TAD NORMFR 3102 04726 3057 DCA NORMFR 3103 04727 2054 ISZ WDCNT /LOOKED AT EACH AC DIGIT? 3104 04730 5321 JMP NLP1 /NO. 3105 04731 3037 DCA ACX /YES. THEREFORE ALL 0. CLEAR ACX. 3106 04732 3040 DCA ACS /CLEAR ACS. 3107 04733 5714 JMP I NORM10 /EXIT. 3108 / 3109 04734 1137 NLP1E, TAD [PREC] /FOUND NON-ZERO DIGIT. 3110 04735 1054 TAD WDCNT /PREC-# OF NON-ZERO DIGITS. 3111 04736 7450 SNA /WAS H-O DIGIT 0? 3112 04737 5714 JMP I NORM10 /YES. SO EXIT. 3113 04740 7041 CIA 3114 04741 3061 DCA TMP /NO. SAVE # OF TRAILING ZEROES 3115 04742 1142 TAD [AC+PREC-1] 3116 04743 3060 DCA NORMTO /SET MOVE "TO" LOCATION. 3117 04744 1457 NLP2, TAD I NORMFR /GET A DIGIT. 3118 04745 3460 DCA I NORMTO /STORE IT. 3119 04746 7240 CLA CMA /DECREMENT LOC. COUNTERS. 3120 04747 1057 TAD NORMFR 3121 04750 3057 DCA NORMFR 3122 04751 7240 CLA CMA 3123 04752 1060 TAD NORMTO 3124 04753 3060 DCA NORMTO 3125 04754 2054 ISZ WDCNT /END OF LOOP? 3126 04755 5344 JMP NLP2 /NO. 3127 04756 1037 TAD ACX /SUBTRACT # OF SHIFTS FROM 3128 04757 1061 TAD TMP /AC EXPONENT. 3129 04760 3037 DCA ACX 3130 04761 3460 NLP3, DCA I NORMTO /SET AN AC DIGIT TO 0. 3131 04762 7240 CLA CMA /DECREMENT LOCATION. 3132 04763 1060 TAD NORMTO 3133 04764 3060 DCA NORMTO 3134 04765 2061 ISZ TMP /END OF LOOP? 3135 04766 5361 JMP NLP3 /NO. 3136 04767 5714 JMP I NORM10 /YES. EXIT. 3137 4770 EP23=. 04773 7767 3138 LIT / EIGHT/S INTERPRETER. ESI Page 99 3139 PAGE 33 3140 /ROUND 3141 /ROUNDS FAC ACCORDING TO HIGH-ORDER FMQ DIGIT. 3142 /8AC IS 0 AT ENTRY AND EXIT. 3143 / 3144 06600 0000 ROUND, 0 3145 06601 1027 TAD MQ+PREC-1 /GET H-O MQ DIGIT. 3146 06602 1377 TAD (-5) 3147 06603 7710 SPA CLA /IS H-O FMQ DIGIT 5 OR MORE? 3148 06604 5600 JMP I ROUND /NO. EXIT. 3149 06605 1155 TAD [AC-1] /YES. INITIALISE ADD AND CARRY 3150 /LOOP. 3151 06606 3010 DCA AX0 3152 06607 1155 TAD [AC-1] 3153 06610 3011 DCA AX1 3154 06611 1156 TAD [-PREC] /MAXIMUM NUMBER OF CARRY 3155 06612 3054 DCA WDCNT /PROPAGATIONS. 3156 06613 1410 ROUNDL, TAD I AX0 3157 06614 7001 IAC /ADD 1 TO AN AC DIGIT. 3158 06615 1147 TAD DECIMAL [-10] OCTAL 3159 06616 7510 SPA /IS SUM BETWEEN 1 AND 9? 3160 06617 5227 JMP ROUNDE /YES. ALMOST DONE. 3161 06620 3411 DCA I AX1 /NO. IT'S 0. THUS THERE'S A CARRY. 3162 06621 2054 ISZ WDCNT /DONE EVERY DIGIT OF FAC? 3163 06622 5213 JMP ROUNDL /NO. DO NEXT DIGIT. 3164 06623 2036 ISZ AC+PREC-1 /YES. FAC HAS OVERFLOWED. 3165 /MUST BE ALL 0'S. THEREFORE SET 3166 /HIGH-ORDER FAC DIGIT TO 1. 3167 06624 2037 ISZ ACX /INCREMENT AC EXPONENT. 3168 06625 7000 NOP /TO COVER CASE OF .99999995! 3169 06626 5600 JMP I ROUND /EXIT. 3170 / 3171 06627 1152 ROUNDE, TAD DECIMAL [10] OCTAL 3172 06630 3411 DCA I AX1 /STORE INCREMENTED DIGIT. 3173 06631 5600 JMP I ROUND /EXIT. 3174 3175 6632 BP33=. 06777 7773 3176 LIT / EIGHT/S INTERPRETER. ESI Page 100 3177 /TYFP 3178 /TYPE A FLOATING-POINT NUMBER. 3179 /TYPES CONTENTS OF FAC ON TELETYPE. 3180 /PDP-8 AC AT ENTRY SPECIFIES WHETHER OR NOT TO INSERT 3181 /LEADING BLANKS FOR ALGINMENT ABOUT = SIGN. 3182 / 0 - INSERT 3183 / 1 - DON'T INSERT. 3184 /PDP8 AC IS 0 AT EXIT. 3185 / 3186 PAGE 24 3187 05000 0000 TYFP, 0 3188 05001 3275 DCA QPRSP /STORE "?DON'T PRINT SPACES". 3189 05002 1036 TAD AC+PREC-1 /GET H-O AC DIGIT. 3190 05003 7650 SNA CLA /IS IT 0? 3191 05004 5271 JMP TYZERO /YES. THEREFORE WHOLE # IS 0. 3192 05005 1155 TAD [AC-1] /NO. COUNT # OF TRAILING ZEROES. 3193 05006 3010 DCA AX0 3194 05007 3055 DCA ALCNT /CLEAR "NUMBER OF 0'S". 3195 05010 1410 TYFPL1, TAD I AX0 /GET AN AC DIGIT. 3196 05011 7640 SZA CLA /IS IT 0? 3197 05012 5215 JMP TYFP1E /NO. 3198 05013 2055 ISZ ALCNT /ADD 1 TO COUNT. 3199 05014 5210 JMP TYFPL1 /GO TO LOOK AT NEXT. 3200 / 3201 05015 1037 TYFP1E, TAD ACX /GET AC EXPONENT. 3202 05016 7510 SPA /IS IT NEGATIVE? 3203 05017 5226 JMP TYFPEF /YES. TYPE IN "E" FORMAT. 3204 05020 1143 TAD [-10] /NO. 3205 05021 7700 SMA CLA /IS IT > 8? 3206 05022 5226 JMP TYFPEF /YES. TYPE IN "E" FORMAT. 3207 05023 1037 TAD ACX /NO, BETWEEN 0 AND 7. 3208 05024 4276 TYFPFF, JMS TYFPS /TYPE IN "F" FORMAT. 3209 05025 5600 JMP I TYFP /EXIT. 3210 / 3211 05026 7201 TYFPEF, CLA IAC /SET AC = 1. 3212 05027 4276 JMS TYFPS /TYPE 1 DIGIT BEFORE DEC. PT. 3213 05030 1377 TAD (305) /TYPE "E". 3214 05031 4573 TYPE 3215 05032 1037 TAD ACX 3216 05033 7700 SMA CLA /IS AC EXP. NEGATIVE? 3217 05034 5263 JMP TYFPEP /NO. 3218 05035 1376 TAD (255) /YES. TYPE "-". 3219 05036 4573 TYPE 3220 05037 3061 DCA TMP /CLEAR TENS DIGIT OF EXP. 3221 05040 1037 TAD ACX 3222 05041 7041 CIA 3223 05042 7001 IAC /ADD 1. 3224 05043 1147 TYFPL2, TAD DECIMAL [-10] OCTAL 3225 05044 7510 SPA /IS DIFFERENCE POSITIVE? 3226 05045 5250 JMP TYFP2E /NO. END OF SUBTRACT LOOP. 3227 05046 2061 ISZ TMP /ADD 1 TO TENS DIGIT. 3228 05047 5243 JMP TYFPL2 3229 / 3230 05050 1152 TYFP2E, TAD DECIMAL [10] OCTAL 3231 05051 3052 DCA ALDIG /SAVE UNITS DIGIT. 3232 05052 1061 TAD TMP /GET TENS DIGIT. 3233 05053 7450 SNA /IS IT ZERO? / EIGHT/S INTERPRETER. ESI Page 101 3234 05054 5257 JMP TYFPTU /YES. DON'T PRINT IT. 3235 05055 1375 TAD (260) /NO. CONVERT TO ASCII. 3236 05056 4573 TYPE /PRINT IT. 3237 05057 1052 TYFPTU, TAD ALDIG /GET UNITS DIGIT 3238 05060 1375 TAD (260) /CONVERT TO ASCII. 3239 05061 4573 TYPE 3240 05062 5600 JMP I TYFP /EXIT. 3241 / 3242 05063 1374 TYFPEP, TAD (253) /TYPE "+". 3243 05064 4573 TYPE 3244 05065 3061 DCA TMP 3245 05066 7240 CLA CMA 3246 05067 1037 TAD ACX /GET EXPONENT. 3247 05070 5243 JMP TYFPL2 3248 / 3249 05071 1144 TYZERO, TAD [PREC-1] 3250 05072 3055 DCA ALCNT /SET "# OF 0'S" TO (PREC-1). 3251 05073 7001 IAC /SET "EXP" TO 1. 3252 05074 5224 JMP TYFPFF /GO TYPE IN "F" FORMAT. 3253 / 3254 05075 0000 QPRSP, 0 /?DON'T PRINT SPACES BEFORE NUMBER. / EIGHT/S INTERPRETER. ESI Page 102 3255 /TYFPS 3256 /FLOATING POINT OUTPUT SUBROUTINE. INPUTS ARE 3257 / A) NUMBER OF TRAILING ZEROES, IN "ALCNT"; 3258 / B) NUMBER OF DIGITS BEFORE DECIMAL POINT "N", STORED 3259 / IN PDP-8 AC AT ENTRY. 3260 /IT TYPES OUT THE FOLLOWING: 3261 / A) (4-N) SPACES; 3262 / B) "-" IF ACS IS -, "SPACE" IF ACS IS "+"; 3263 / C) N LEADING DIGITS OF FAC; 3264 / D) IF ALCNT GE (PREC-N), EXITS; 3265 / E) OTHERWISE, TYPES "." FOLLOWED BY (PREC-N-ALCNT) 3266 / MORE DIGTS OF FAC. 3267 / 3268 05076 0000 TYFPS, 0 3269 05077 3020 DCA DIGAC /SAVE OF LEADING DIGITS. 3270 05100 1275 TAD QPRSP 3271 05101 7650 SNA CLA /SHOULD SPACES BE PRINTED? 3272 05102 5307 JMP TYFPS0 /YES. 3273 05103 1040 TAD ACS /NO, GET AC SIGN. 3274 05104 7650 SNA CLA /IS IT +? 3275 05105 5321 JMP TYFP2B /YES, NO SPACE BEFORE NUMBER. 3276 05106 5317 JMP TYFP2A /NO, GO TO TYPE "-". 3277 3278 05107 1020 TYFPS0, TAD DIGAC /# LEADING DIGITS. 3279 05110 1156 TAD [-PREC] 3280 05111 7041 CIA /NUMBER OF SPACES BEFORE . 3281 05112 7440 SZA /IS IT 0? 3282 05113 4773@ JMS TYSPC /NO, GO PRINT APPROPR. # OF SPACES. 3283 05114 1040 TYFPS2, TAD ACS /YES, GET FAC SIGN. 3284 05115 7650 SNA CLA /IS IT +? 3285 05116 1372 TAD (-15) /YES, TYPE "SPACE". 3286 05117 1376 TYFP2A, TAD (255) /NO, TYPE "-". 3287 05120 4573 TYPE 3288 05121 1142 TYFP2B, TAD [AC+PREC-1] /SET UP H-O FAC DIGIT LOCATION. 3289 05122 3057 DCA NORMFR 3290 05123 1020 TAD DIGAC /GET OF LEADING FAC DIGITS. 3291 05124 7450 SNA /IS IT 0? 3292 05125 5341 JMP TYFPS4 /YES, DONT TYPE LEADING DIGITS. 3293 05126 7041 CIA 3294 05127 3054 DCA WDCNT 3295 05130 1457 TYFPS3, TAD I NORMFR /GET AN AC DIGIT 3296 05131 1375 TAD (260) 3297 05132 4573 TYPE 3298 05133 7240 CLA CMA /GO ON TO NEXT FAC DIGIT. 3299 05134 1057 TAD NORMFR 3300 05135 3057 DCA NORMFR 3301 05136 2054 ISZ WDCNT /END OF LOOP? 3302 05137 5330 JMP TYFPS3 /NO. 3303 05140 1020 TAD DIGAC /GET COUNT OF LEADING DIGITS. 3304 05141 1055 TYFPS4, TAD ALCNT /ADD COUNT OF ZEROES. 3305 05142 1156 TAD [-PREC] 3306 05143 7500 SMA /ANYTHING LEFT TO TYPE? 3307 05144 5353 JMP TYFPSX /NO. EXIT. 3308 05145 3054 DCA WDCNT /YES. STORE COUNT. 3309 05146 1371 TAD (256) /TYPE "." 3310 05147 4573 TYPE 3311 05150 1137 TAD [PREC] /FORCE EXIT FROM PRINT LOOP. / EIGHT/S INTERPRETER. ESI Page 103 3312 05151 3055 DCA ALCNT 3313 05152 5330 JMP TYFPS3 3314 / 3315 05153 7200 TYFPSX, CLA 3316 05154 5676 JMP I TYFPS 3317 / 3318 /INSTALLATION CODE LOCATION: 3319 05155 0000 INSCOD, 0 3320 5156 EP24=. 05171 0256 05172 7763 05173 1277 05174 0253 05175 0260 05176 0255 05177 0305 3321 LIT / EIGHT/S INTERPRETER. ESI Page 104 3322 PAGE 26 3323 /MAIN 3324 /ESI MAIN CONTROL ROUTINE. 3325 /8AC IS CLEAR AT ENTRY. 3326 / 3327 05400 6046 ESI, TLS /SET TTY OUTPUT FLAG. 3328 05401 4572 MAIN, CRLF /RETURN CARRIAGE. 3329 05402 4777@ JMS INPUT /READ A LINE OF INPUT. 3330 05403 1103 TAD NXTLXN /CALCULATE LENGTH OF INPUT. 3331 05404 1376 TAD (-BUFF) 3332 05405 3304 DCA LENBUF 3333 05406 1062 TAD ENDPR /INITIALISE STACK POINTER 3334 05407 3064 DCA STKNXT /TO END OF USER PROGRAM AREA. 3335 05410 3102 DCA XSTEP /SET "DIRECT STATEMENT IN PROCESS". 3336 05411 1375 TAD (TSCRN-1) /DOES RECOGNISER HAVE A NUMBER? 3337 05412 4774@ JMS RECOG 3338 05413 5217 JMP STIND /YES. INDIRECT STATEMENT. 3339 05414 1373 TAD (DSTAT-1) /NO. MUST BE DIRECT STATEMENT. 3340 05415 4772@ JMS SYNAN /CALL SYNTACTIC ANALYSER. 3341 05416 5202 JMP MAIN+1 /GET NEXT STATEMENT. 3342 / 3343 / 3344 /INDIRECT STATEMENT PROCESSOR. 3345 / 3346 /STIND 3347 /STORE INDIRECT STATEMNET. 3348 / 3349 05417 4305 STIND, JMS FNDSTP /SEE IF STEP IS ALREADY PRESENT. 3350 05420 7410 SKP /NOT PRESENT. 3351 05421 4771@ JMS DLSTPS /PRESENT, DELETE IT. 3352 05422 1062 TAD ENDPR 3353 05423 3064 DCA STKNXT /RESTORE STACK IN CASE OF DELETION. 3354 05424 1063 TAD ARYNXT /CHECK FOR POSSIBLE OVERFLOW. 3355 05425 7141 CIA CLL 3356 05426 1064 TAD STKNXT 3357 05427 1304 TAD LENBUF 3358 05430 7630 SZL CLA 3359 05431 5770@ JMP ERRSO 3360 05432 6211 CDF 10 3361 05433 1514 TAD I PRVSTP /GET POINTER OF PRVST. 3362 05434 6201 CDF 0 3363 05435 4576 PUSH /STORE IN FIRST WORD OF STEP. 3364 05436 1062 TAD ENDPR 3365 05437 6211 CDF 10 3366 05440 3514 DCA I PRVSTP /SET PREVIOUS STEP TO PT. TO NEW ONE. 3367 05441 6201 CDF 0 3368 05442 1064 TAD STKNXT 3369 05443 3055 DCA ALCNT /SAVE LOC. OF STEP . 3370 GET (STEPNO) 05444 1367 05445 4565 3371 05446 4766@ JMS PUSHAC /SAVE STEP 3372 05447 1064 TAD STKNXT / GET NEXT STACK LOCATION. 3373 05450 3110 DCA SVLXF /SET LOC. OF STEP STORAGE. 3374 CPY [0010],SVLXF+1 05451 1163 05452 3111 / EIGHT/S INTERPRETER. ESI Page 105 3375 STIND1, RDADV NXTLXF /GET CHAR. FROM BUFFER. 05453 4562 05454 0100 3376 STIND2, WRADV SVLXF /WRITE IT IN STEP STORE. 05455 4561 05456 0110 3377 05457 1107 TAD CURCHR /GET CURRENT CHARACTER. 3378 05460 7650 SNA CLA /IS IT END? 3379 05461 5263 JMP STIND3 /YES. 3380 05462 5253 JMP STIND1 3381 / 3382 05463 1111 STIND3, TAD SVLXF+1 /GET?RIGHT. 3383 05464 7010 RAR /IS IT RIGHT? 3384 05465 7630 SZL CLA 3385 05466 5255 JMP STIND2 /YES. FORCE LEFT. 3386 05467 1062 TAD ENDPR /NO. LEFT. 3387 05470 7040 CMA 3388 05471 1110 TAD SVLXF /SVLXF-ENDPR-1. 3389 05472 7104 CLL RAL 3390 ROTL4 /SHIFT TO EXP. POSITION. 05473 7006 05474 7006 3391 05475 6211 CDF 10 3392 05476 1455 TAD I ALCNT /ADD STEP WORD WITH EXP OF 1. 3393 05477 3455 DCA I ALCNT /STORE BACK WITH WORD COUNT. 3394 05500 6201 CDF 0 3395 05501 1110 TAD SVLXF 3396 05502 3062 DCA ENDPR /SET NEW END OF PROGRAM 3397 05503 5202 JMP MAIN+1 3398 / 3399 05504 0000 LENBUF, 0 /BUFFER LENGTH / EIGHT/S INTERPRETER. ESI Page 106 3400 /FNDSTP 3401 /FIND STEP LOCATION GIVEN STEP #. 3402 /STEP # IN FAC AT ENTRY, 8AC CLEAR. 3403 /AT EXIT: 3404 / CURSTP - CURRENT STEP LOCATION (IF IT'S PRESENT) 3405 / PRVSTP - PREVIOUS STEP LOCATION 3406 / STEPNO - STEP 3407 / 3408 /CALLING SEQUENCE: 3409 / JMS FNDSTP 3410 / ... /NOT FOUND 3411 / ... /FOUND 3412 / 3413 05505 0000 FNDSTP, 0 3414 05506 7240 CLA CMA 3415 05507 1037 TAD ACX 3416 05510 7640 SZA CLA /IS ACX = 1? 3417 05511 5765@ JMP ERRSTP /NO. 3418 05512 1040 TAD ACS /YES. 3419 05513 7640 SZA CLA /IS ACS = 0? 3420 05514 5765@ JMP ERRSTP /NO. 3421 STORE (STEPNO) /SAVE FAC IN STEPNO. 05515 1367 05516 4571 3422 05517 1036 TAD AC+PREC-1 /GET PART . 3423 05520 1364 TAD (PRTLST-1) /GET PART LOCATION. 3424 05521 3115 DCA CURSTP 3425 05522 4763@ FNDSTL, JMS GNSTP /GET NEXT STEP LOCATION. 3426 05523 5705 JMP I FNDSTP /EXIT AT "NOT FOUND". 3427 05524 1115 TAD CURSTP 3428 05525 7001 IAC /GET LOC. OF STEP . 3429 05526 6211 CDF 10 3430 05527 4565 JMS I [GETNUM] /UNPACK STEP NUMBER. 3431 05530 7201 CLA IAC 3432 05531 3037 DCA ACX /SET ACX TO 1. 3433 05532 4574 SWP 3434 GET (STEPNO) 05533 1367 05534 4565 3435 05535 4762@ JMS COMP /COMPARE DESIRED WITH CURRENT STEP 3436 05536 5705 JMP I FNDSTP /DC. NOT YET FOUND. 3439 05541 2305 ISZ FNDSTP 3440 05542 5705 JMP I FNDSTP /"FOUND" EXIT. 3441 / 3442 / 3443 /PROCESS "DIGIT PART". 3444 / 3445 05543 7201 PRDP, CLA IAC /SET ACX TO 1. 3446 05544 3037 DCA ACX 3447 05545 5577 RETURN 3448 / 3449 /PROCESS EXPONENT PART. 3450 / 3451 05546 1156 PREP, TAD [-PREC] /CLEAR THE FAC. 3452 05547 4761@ JMS CLFACS / EIGHT/S INTERPRETER. ESI Page 107 3453 05550 7201 CLA IAC /SET AC MANTISSA TO 1. 3454 05551 3036 DCA AC+PREC-1 3455 05552 3040 DCA ACS 3456 05553 5760@ JMP PRLOG /GO TAKE LOG OF RESULT. 3457 5554 EP26=. 05560 7202 05561 0674 05562 1232 05563 6632 05564 0177 05565 5656 05566 0221 05567 0065 05570 5612 05571 2021 05572 6200 05573 2377 05574 5313 05575 3405 05576 2056 05577 6014 3458 LIT / EIGHT/S INTERPRETER. ESI Page 108 3459 6632 *BP33 3460 /GNSTP 3461 /GET NEXT STEP SUBROUTINE. 3462 /AT ENTRY, CURSTP HAS LOC. OF CURRENT STEP. 3463 /AT EXIT; 3464 / CURSTP - NEXT STEP (IF NOT LAST OF PART) 3465 / PRVSTP - PREVIOUS STEP LOC. 3466 / 3467 /CALLING SEQUENCE: 3468 / JMS GNSTP 3469 / ... /LAST STEP. 3470 / ... /NOT LAST. 3471 / 3472 06632 0000 GNSTP, 0 3473 06633 1115 TAD CURSTP 3474 06634 3114 DCA PRVSTP 3475 06635 6211 CDF 10 3476 06636 1514 TAD I PRVSTP 3477 06637 7450 SNA /IS CURRENT STEP LAST? 3478 06640 5243 JMP GNEXT /YES. 3479 06641 3115 DCA CURSTP /NO. 3480 06642 2232 ISZ GNSTP 3481 06643 6201 GNEXT, CDF 0 3482 06644 5632 JMP I GNSTP /TAKE "NOT LAST" EXIT. 3483 3484 6645 BP33=. 3485 LIT / EIGHT/S INTERPRETER. ESI Page 109 3486 5612 *BP27 3487 /ERROR PROCESSOR. 3488 / 3489 / 1) STORAGE EXCEEDED: 3490 / 3491 05612 4262 ERRSO, JMS ERRG /GO TO GENERAL ERRROR TYPEOUT. 3492 05613 2324 TEXT /STORAGE/ 05614 1722 05615 0107 05616 0500 3493 / 3494 / 2) DIVISION BY 0: 3495 / 3496 05617 4262 ERRD0, JMS ERRG 3497 05620 6040 TEXT /0 DIVISOR/ 05621 0411 05622 2611 05623 2317 05624 2200 3498 / 3499 / 3) SYNTACTIC ERROR: 3500 / 3501 05625 4262 ERRSYN, JMS ERRG 3502 05626 0510 EHMSG, TEXT /EH?/ 05627 7700 3503 / 3504 / 4) UNDEFINED VARIABLE: 3505 / 3506 05630 4262 ERRUND, JMS ERRG 3507 05631 2516 TEXT /UNDEFINED/ 05632 0405 05633 0611 05634 1605 05635 0400 3508 / 3509 / 5) EXPONENT OVER/UNDERFLOW: 3510 / 3511 05636 4262 ERREXP, JMS ERRG 3512 05637 0530 TEXT /EXPONENT/ 05640 2017 05641 1605 05642 1624 05643 0000 3513 / 3514 / 6) SUBSCRIPT ERROR: 3515 / 3516 05644 4262 ERRSUB, JMS ERRG 3517 05645 2325 TEXT /SUBSCRIPT/ 05646 0223 05647 0322 05650 1120 05651 2400 3518 / 3519 / 7) PART ERROR: 3520 / 3521 05652 4262 ERRPRT, JMS ERRG 3522 05653 2001 TEXT /PART / / EIGHT/S INTERPRETER. ESI Page 110 05654 2224 05655 4000 3523 / 3524 / 8) STEP ERROR: 3525 / 3526 05656 4262 ERRSTP, JMS ERRG 3527 05657 2324 TEXT /STEP / 05660 0520 05661 4000 3528 / 3529 /GENERAL ERROR TYPEOUT: 3530 / 3531 05662 0000 ERRG, 0 3532 05663 1102 TAD XSTEP 3533 05664 7640 SZA CLA /IS CURRENT STATEMENT DIRECT? 3534 05665 5302 JMP ERRIND /NO, INDIRECT, 3535 05666 1376 TAD (ERAB) /TYPE "ERROR ABOVE" 3536 05667 4775@ ERRG1, JMS TYPKST 3537 05670 1262 TAD ERRG 3538 05671 4775@ JMS TYPKST /TYPE SPECIFIC MESSAGE. 3539 05672 5774@ JMP MAIN /GO GET NEW LINE. 3540 05673 0522 ERAB, TEXT /ERROR ABOVE: / 05674 2217 05675 2240 05676 0102 05677 1726 05700 0572 05701 4000 3541 / 3542 05702 1373 ERRIND, TAD (ERST) 3543 05703 4775@ JMS TYPKST /TYPE "ERROR IN STEP " 3544 05704 1102 TAD XSTEP 3545 05705 4772@ JMS TYSNUM /TYPE STEP NUMBER. 3546 05706 1371 TAD (LCOL) /TYPE ": ". 3547 05707 5267 JMP ERRG1 3548 05710 0522 ERST, TEXT /ERROR IN STEP / 05711 2217 05712 2240 05713 1116 05714 4023 05715 2405 05716 2040 05717 0000 3549 05720 7240 LCOL, TEXT /: / 05721 0000 3550 05771 5720 05772 1656 05773 5710 05774 5401 05775 1667 05776 5673 3551 LIT / EIGHT/S INTERPRETER. ESI Page 111 3552 /INPUT 3553 /MAIN INPUT SUBROUTINE - USED FOR ALL KEYBOARD INPUT. 3554 /8AC IS 0 AT ENTRY AND AT EXIT. 3555 /AT EXIT, NXTLXF CONTAINS LOCATION OF FIRST CHARACTER OF 3556 /BUFFER; LAST CHARACTER IS EITHER 00 ("PERIOD-CR") OR 3557 /37("CR") FOLLOWED BY 00. 3558 / 3559 / 3560 /INPUT LINE BUFFER. 3561 / 3562 0044 BLENG=DECIMAL 36 OCTAL 3563 05722 0000 BUFF, 0 3564 5766 *BUFF+BLENG 3565 / 3566 6014 *BP30 3567 06014 0000 INPUT, 0 3568 06015 1374 TAD (207) /RING BELL. 3569 06016 4573 TYPE 3570 06017 1373 TAD (337) 3571 06020 4573 TYPE 3572 06021 1372 ININIT, TAD (BUFF) /INITIALISE READ BUFFER. 3573 06022 3103 DCA NXTLXN 3574 06023 3104 DCA NXTLXN+1 3575 06024 1371 TAD (-BLENG-BLENG+2) /LIMIT # OF CHARACTERS TO 70. 3576 06025 3054 DCA WDCNT 3577 06026 1372 TAD (BUFF) 3578 06027 3100 DCA NXTLXF /INITIALISE LEXICAL ANALYSER. 3579 06030 3101 DCA NXTLXF+1 3580 06031 3106 DCA QANYIN /CLEAR "?ANY INPUT YET". 3581 06032 6031 CGET, KSF /GET A CHARACTER FROM KEYBOARD. 3582 06033 5232 JMP .-1 /WAIT FOR CHARACTER. 3583 06034 6036 KRB /READ CHAR. 3584 06035 3061 DCA TMP /SAVE CHAR. 3585 06036 1147 TAD (-NSPCHR) /SET UP SPECIAL CHARACTER COMPARE LOOP. 3586 06037 3056 DCA MULCNT 3587 06040 1370 TAD (SPCTB-1) 3588 06041 3010 DCA AX0 3589 06042 1410 INPL1, TAD I AX0 /GET A CHAR. CODE. 3590 06043 1061 TAD TMP /ADD INPUT CHAR. 3591 06044 7650 SNA CLA /IS IT A SPECIAL ONE? 3592 06045 5410 JMP I AX0 /YES, GO TO SPECIAL ROUTINE. 3593 06046 2010 ISZ AX0 /NO, ADVANCE OVER ENTRY LOC. 3594 06047 2056 ISZ MULCNT /END OF LOOP? 3595 06050 5242 JMP INPL1 /NO. 3596 06051 2106 ISZ QANYIN /YES, SET "?ANY INPUT YET". 3597 06052 1061 INP1, TAD TMP /STORE "STRIPPED" CHAR. 3598 06053 0146 AND [0077] /IN BUFFER. 3599 WRADV NXTLXN 06054 4561 06055 0103 3600 06056 1117 TAD ADVAC /ECHO INTERNAL CHAR. 3601 06057 4767@ JMS TYINCH / TO TELEPRINTER. 3602 06060 2054 ISZ WDCNT /IS BUFFER FULL? 3603 06061 5232 JMP CGET /NO. 3604 / 3605 /GETS HERE OR BUFFER FULL OR ON "CR". 3606 / / EIGHT/S INTERPRETER. ESI Page 112 3607 06062 4572 NDLIN, CRLF 3608 06063 1106 TAD QANYIN 3609 06064 7650 SNA CLA /HAS ANYTHING BEEN PUT IN BUFFER? 3610 06065 5215 JMP INPUT+1 /NO. GO GET A NEW LINE. 3611 BKPTR NXTLXN /BACK UP POINTER. 06066 4766 06067 0103 3612 RD NXTLXN /READ LAST CHAR. STORED IN BUFFER. 06070 4550 06071 0103 3613 06072 1365 TAD (-56) 3614 06073 7450 SNA /IS IT "."? 3615 06074 5305 JMP INP2 /YES. 3616 06075 1364 TAD (-77+56) 3617 06076 7650 SNA CLA /IS IT "?"? 3618 06077 5215 JMP INPUT+1 /YES. FORGET LINE. 3619 ADV NXTLXN /ADVANCE OVER LAST CHAR. 06100 4551 06101 0103 3620 06102 1363 TAD (37) 3621 WRADV NXTLXN /STORE CR AT END OF LINE. 06103 4561 06104 0103 3622 INP2, WR NXTLXN /STORE 00 AT END OF LINE. 06105 4762 06106 0103 3623 06107 5614 JMP I INPUT /EXIT. 3624 / 3625 /GETS HERE ON "RUBOUT". 3626 / 3627 PRRO, DIFPTR NXTLXF,NXTLXN 06110 4553 06111 0100 06112 0103 3628 06113 1160 TAD [-1] 3629 06114 7750 SNA SPA CLA /IS THERE MORE THAN 1 CHAR IN UBFFR 3630 06115 5215 JMP INPUT+1 /NO. 3631 06116 2054 ISZ WDCNT /ADVANCE COUNTER. 3632 BKPTR NXTLXN /BACK UP POINTER. 06117 4766 06120 0103 3633 06121 1373 TAD (337) 3634 06122 4573 TYPE /TYPE "_". 3635 06123 5232 JMP CGET 3636 / 3637 / 3638 /GETS HEREON DPACE. 3639 06124 1106 PRSPC, TAD QANYIN 3640 06125 7640 SZA CLA /HAVE ANY CHARACTERS BEEN READ? 3641 06126 5252 JMP INP1 /YES. 3642 06127 5232 JMP CGET /NO. 3643 / 3644 /SPECIAL CHARACTER TABLE: 3645 06130 7563 SPCTB, -215 /C-R 3646 06131 5262 JMP NDLIN 3647 06132 7540 -240 /SPACE 3648 06133 5324 JMP PRSPC / EIGHT/S INTERPRETER. ESI Page 113 3649 06134 7403 -ICODE /ALT MODE OR "ESC" 3650 06135 5761@ JMP CANCEL 3651 06136 7401 -377 /RUBOUT 3652 06137 5310 JMP PRRO 3653 06140 7441 -337 /BACK ARROW 3654 06141 5232 JMP CGET 3655 06142 7500 -300 3656 06143 5232 JMP CGET 3657 06144 7600 -200 /L-T 3658 06145 5232 JMP CGET 3659 06146 7571 -207 /BELL 3660 06147 5232 JMP CGET 3661 06150 7566 -212 /LINE FEED 3662 06151 5232 JMP CGET 3663 06152 0000 0 3664 06153 5232 JMP CGET 3665 3666 0012 NSPCHR=DECIMAL 10 OCTAL 3667 / 3668 6154 EP30=. 06161 0726 06162 6524 06163 0037 06164 7757 06165 7722 06166 6672 06167 1707 06170 6127 06171 7672 06172 5722 06173 0337 06174 0207 3669 LIT / EIGHT/S INTERPRETER. ESI Page 114 3670 PAGE 31 3671 /SYNAN 3672 /SYNTACTIC ANALYSER. 3673 /CALLED WITH MAJOR GOAL LOCATION IN AC. 3674 /EXITS WITH 8AC CLEAR. 3675 / 3676 06200 0000 SYNAN, 0 3677 06201 3016 STGL, DCA GOAL /GAOL IS AN AUTO-INDEX. 3678 06202 1416 SYNLP, TAD I GOAL /GET "LOOKFOR" WORD. 3679 06203 7510 SPA /IS GOAL TERMINAL? 3680 06204 5212 JMP TRMGL /YES. 3681 06205 3061 DCA TMP /SAVE NEW GOAL 3682 06206 1016 TAD GOAL /GET OLD GOAL. 3683 06207 4272 JMS PUSH1 /PUT IT ON STACK. 3684 06210 1061 TAD TMP 3685 06211 5201 JMP STGL /SET NEW SUBGOAL. 3686 / 3687 06212 0164 TRMGL, AND [3777] /EXTRACT TERMINAL LOCATION. 3688 06213 4777@ JMS RECOG /CALL RECOGNISER. IS THAT CURRENT? 3689 06214 5245 JMP SUCLP /YES. SUCCESS. 3690 06215 1416 TSTFAL, TAD I GOAL /NO, FAULURE. GET 2ND WORD. 3691 06216 3061 DCA TMP /SAVE IT. 3692 06217 1061 TAD TMP 3693 06220 0376 AND (3000) /GET FAIL CODE. 3694 06221 7450 SNA /IS IT 0 - FAIL? 3695 06222 5240 JMP POPGL /YES. GO REPORT FAILURE TO TO 3696 06223 1375 TAD (-1000) / SUPER-GOAL. 3697 06224 7450 SNA /IS IT 1 - OK? 3698 06225 5243 JMP NWGL /YES. GO REPORT SUCCESS 3699 06226 1375 TAD (-1000) / TO SUPER-GOAL. 3700 06227 7640 SZA CLA /IS IT 2 - ALTERNATE? 3701 06230 5774@ JMP ERRSYN /NO. 3 - DEAD. SYNTAX ERROR. 3702 06231 1061 TAD TMP /YES. 3703 06232 0373 AND (0740) /EXTRACT "ALTERNATE" LOC. 3704 06233 7112 CLL RTR 3705 ROTR3 06234 7012 06235 7010 3706 06236 1016 TAD GOAL /LOCATION OF NEW GOAL 3707 06237 5201 JMP STGL /SET NEW GOAL. 3708 / 3709 06240 4305 POPGL, JMS POP1 /POP SUPER-GOAL. 3710 06241 3016 DCA GOAL /REPORT FAILURE. 3711 06242 5215 JMP TSTFAL 3712 / 3713 06243 4305 NWGL, JMS POP1 /GET PARENT GOAL. 3714 06244 3016 DCA GOAL /SET GOAL. REPORT BACK SUCESS. 3715 06245 1416 SUCLP, TAD I GOAL /GET REL LOC OF SUCCESSOR. 3716 06246 0372 AND (0037) 3717 06247 3271 DCA SUCLOC /SAVE IT. 3718 06250 1016 TAD GOAL 3719 06251 3270 DCA GOALT /TEMPORARY GOAL POINTER. 3720 06252 1670 SUCLP2, TAD I GOALT /ALL GENERATORS RETURN HERE. 3721 06253 7700 SMA CLA /IS NEXT LOC. A GENERATOR? 3722 06254 5262 JMP SETSUC /NO. GO SET SUCESSOR. 3723 06255 2270 ISZ GOALT /ADVANCE TO GENERATOR WORD,P 3724 06256 1670 TAD I GOALT /GET GENERATOR POINTER. / EIGHT/S INTERPRETER. ESI Page 115 3725 06257 0164 AND [3777] /EXTRACT GEN. LOC. 3726 06260 3061 DCA TMP 3727 06261 5461 JMP I TMP /GO TO GENERATOR. AC = 0. 3728 / 3729 06262 1271 SETSUC, TAD SUCLOC /GET SUCESSOR LOC. 3730 06263 7450 SNA /IS THERE A SUCESSOR? 3731 06264 5243 JMP NWGL /NO. 3732 06265 1371 TAD (-30) /YES. GET REL LOC OF CUCESSOR. 3733 06266 1016 TAD GOAL 3734 06267 5201 JMP STGL /NEW GOAL. 3735 / 3736 06270 0000 GOALT, 0 3737 06271 0000 SUCLOC, 0 3738 / 3739 / 3740 06272 0000 PUSH1, 0 3741 06273 6211 CDF 10 3742 06274 3464 DCA I STKNXT /STORE WORD ON STACK. 3743 06275 6201 CDF 0 3744 06276 1064 TAD STKNXT 3745 06277 7040 CMA /WAS LAST STACK ENTRY AT 3746 06300 1063 TAD ARYNXT /LAST WORD BEFORE ARRAY VALUES? 3747 06301 7650 SNA CLA 3748 06302 5770@ JMP ERRSO /YES. STACK OVERFLOW. 3749 06303 2064 ISZ STKNXT /NO. ADVANCE TO NEXT WORD. 3750 06304 5672 JMP I PUSH1 3751 / 3752 06305 0000 POP1, 0 /AC NOT NECESSARILY CLEAR AT ENTRY. 3753 06306 7240 CLA CMA 3754 06307 1064 TAD STKNXT 3755 06310 3064 DCA STKNXT /BACK UP STACK. 3756 06311 6211 CDF 10 3757 06312 1464 TAD I STKNXT /GET TOP OF STACK. 3758 06313 6201 CDF 0 3759 06314 5705 JMP I POP1 3760 3761 0070 LINPAG=DECIMAL 56 OCTAL /LINES PER PAGE. 3762 / 3763 /EJECT -- TOP OF FORM ROUTINE. 3764 / 3765 06315 0000 EJECT, 0 3766 06316 1767@ TAD LINEKNT /IS THE LINE COUNT ZERO? 3767 06317 7650 SNA CLA /NO. 3768 06320 5325 JMP NOLF /YES, DONT FEED LINES. 3769 06321 1766@ TAD ELF 3770 06322 4573 TYPE /EJECT LINES UNTIL PAGE COUNT EXHAUSTED. 3771 06323 2767@ ISZ LINEKNT 3772 06324 5321 JMP .-3 3773 NOLF, CPY (-LINPAG),LINEKNT /RESET LINE COUNTER. 06325 1365 06326 3767 3774 06327 1364 TAD (JEQSEQ-1) /TYPE OUT END OF PAGE SEQUENCE. 3775 06330 4347 JMS TYUNPK 3776 06331 5715 JMP I EJECT 3777 / 3778 / 3779 06332 1124 SYNEXIT, TAD QEOL /IS END OF LINE FLAG "EOL"? / EIGHT/S INTERPRETER. ESI Page 116 3780 06333 7650 SNA CLA 3781 06334 5600 JMP I SYNAN /YES, EXIT. 3782 06335 3124 DCA QEOL 3783 06336 1125 TAD QINSTAT /ARE WE IN INTERRUPT MODE. 3784 06337 7640 SZA CLA /YES, TRY FOR . 3785 06340 5345 JMP SYNEX1 3786 06341 1102 TAD XSTEP /ARE WE TRYING FOR . 3787 06342 7640 SZA CLA 3788 06343 1363 TAD (ISTAT-DSTAT) /NO, TRY FOR NEW . 3789 06344 1362 TAD (DSTAT-INTST) 3790 06345 1361 SYNEX1, TAD (INTST-1) 3791 06346 5201 JMP STGL 3792 / 3793 /TYUNPK -- TYPE UNPACKED STRING. 3794 / ADDR-1 OF STRING IN AC. 3795 / 3796 06347 0000 TYUNPK, 0 3797 06350 3010 DCA AX0 /GET STRING ADDRESS-1. 3798 06351 6211 TYUN1, CDF 10 3799 06352 1410 TAD I AX0 /GET NEXT CHARACTER. 3800 06353 6201 CDF 0 3801 06354 7450 SNA /IS IT EOL? 3802 06355 5747 JMP I TYUNPK /YES, EXIT. 3803 06356 4573 TYPE /NO, TYPE IT OUT. 3804 06357 5351 JMP TYUN1 06361 3320 06362 7057 06363 0053 06364 0155 06365 7710 06366 6013 06367 0345 06370 5612 06371 7750 06372 0037 06373 0740 06374 5625 06375 7000 06376 3000 06377 5313 3805 LIT / EIGHT/S INTERPRETER. ESI Page 117 3806 /STRING POINTER MANIPULATION SUBROUTINES. 3807 / 3808 /THIS SET OF MACROES AND SUBROUTINES PROVIDE FOR THE EASY 3809 /MANIPULATION OF PACKED TWO-BYTE-PER-WORD CHARCTER STRINGS. 3810 /THE MACRO DEFINITIONS ARE AT THE BEGINNING OF THE PROGRA. 3811 /ALL OF THESE SUBROUTINES ARE CALLED BY MEANS OF MACROES. 3812 /THE FORMS AND MEANINGS OF THESE MACROES ARE AS FOLLOWS: 3813 / 3814 / 1) ADVNCE PTRNAM 3815 / ADVANCE POINTER "PTRNAM" TO NEXT CHAR. OF STRING. 3816 / 3817 /2) RDADV PTRNAM 3818 / READ CURRENT CHAR. AND ADVANCE PTRNAM. 3819 / 3820 /3) WRADV PTRNAM 3821 / WRITE 8AC TO CURRENT CHAR. AND ADVANCE PTRNAM. 3822 / 3823 /4) RD PTRNAM 3824 / READ CURRENT CHAR. TO 8AC; SAVE IN CURCHR. 3825 / 3826 /5) WR PTRNAM 3827 / WRITE 8AC TO CURRENT CHAR. 3828 / 3829 /6) BKPTR PTRNAM 3830 / BACK UP POINTER PTRNAM 3831 / 3832 /7) DIFPTR PTR1,PTR2 3833 / TAKE DIFFERENCE BETWEEN PTR2 AND PTR1 TO 8AC. 3834 / / EIGHT/S INTERPRETER. ESI Page 118 3835 /SUBROUTINES. 3836 / 3837 /ALL SUBROUTINES MANIPULATE STRING POINTERS, EACH OF WHICH 3838 /IS A PAIR OF WORDS; THE FIRST WORD IS THE ADDRESS OF THE 3839 /CURRENT WORD IN THE STRING, THE SECOND IS 0000 OR 0001 3840 /ACCORDING AS THE CURRENT CHARACTER IS THE LEFT OR RIGHT 3841 /ONE OF THE CURRENT WORD. 3842 / 3843 /ALL SUBROUTINES ARE CALLED BY A SEQUENCE OF THE FORM: 3844 / JMS SUBR 3845 / PTRNAM /POINTER LOCATION. 3846 / 3847 PAGE 32 3848 /GTPTRS 3849 /USED BY ALL OTHER SUBROUTINES TO GET THE 2-WORD STRING 3850 /POINTERS UNPACKED TO STANDARD LOCATION. 3851 /THE LOCATION OF THE POINTER IS IN THE 8AC AT ENTRY. 3852 /CALLING SEQUENCE: 3853 / JMS GTPTRS 3854 / ... /IF ?RIGHT IS 0. 3855 / ... /IF ?RIGHT IS 1. 3856 /OUTPUTS ARE : 3857 /PTRSTR - LOCATION OF CURRENT WORD OF STRING. 3858 /QRIGHT - ?RIGHT FOR STRING. 3859 /PTRLOC - LOCATION OF WORD POINTER FOR STRING. 3860 /QLOC - LOCATION OF WORD POINTER+1 FOR STRING. 3861 / 3862 /GTPTRS ALSO SETS THE DBR TO THE PROPER VALUE. 3863 / 3864 0120 PTRSTR=PTR1ST 3865 0122 QRIGHT=PTR2ND 3866 0121 PTRLOC=LPTR1ST 3867 06400 0000 QLOC, 0 3868 / 3869 06401 0000 GTPTRS, 0 /ENTRY. 3870 06402 3121 DCA PTRLOC /SAVE LOCATION OF POINTER. 3871 06403 1521 TAD I PTRLOC /SAVE FIRST WORD OF POINTER 3872 06404 3120 DCA PTRSTR /IN PTRSTR. 3873 06405 1121 TAD PTRLOC 3874 06406 7001 IAC 3875 06407 3200 DCA QLOC /CALCULATE ADDRESS OF ?RIGHT. 3876 06410 1600 TAD I QLOC 3877 06411 0377 AND (0030) /SET THE DBR FROM ?RIGHT. 3878 06412 1376 TAD (CDF 0) 3879 06413 3221 DCA GETPTX 3880 06414 7201 CLA IAC /GET ?RIGHT FROM QRIGHT 3881 06415 0600 AND I QLOC 3882 06416 7440 SZA /DOES QRIGHT = 1 = RIGHT? 3883 06417 2201 ISZ GTPTRS /NO, EXIT AT (N+1). 3884 06420 3122 DCA QRIGHT /SAVE ?RIGHT IN QRIGHT. 3885 06421 7402 GETPTX, XX 3886 06422 5601 JMP I GTPTRS /EXIT TO CALLER. 3887 / 3888 /SUBROUTINE REPACK -- REPACK PREVIOUSLY UNPACKED POINTERS. 3889 /CALLING SEQUENCE: 3890 / JMS REPACK 3891 /REPACK IS CALLED BY EVERY ROUTINE WHICH HAS MODIFIED THE / EIGHT/S INTERPRETER. ESI Page 119 3892 /INPUT POINTERS. REPACK PUTS THE UNPACKED POINTER BACK INTO 3893 /THE PROPER FORM AND SETS THE DBR TO 0. 3894 / 3895 06423 0000 REPACK, 0 3896 06424 6214 RDF /GET THE DATA BANK FOR ?RIGHT. 3897 06425 6201 CDF 0 3898 06426 1122 TAD QRIGHT 3899 06427 3600 DCA I QLOC /PUT NEW ?RIGHT BACK IN POINTER. 3900 06430 1120 TAD PTRSTR /PUT REVISED STRING POINTER 3901 06431 3521 DCA I PTRLOC /INTO POINTER. 3902 06432 5623 JMP I REPACK / EIGHT/S INTERPRETER. ESI Page 120 3903 /ADVS 3904 /ADVANCE PREVIOUSLY UNPACKED POINTERS. 3905 /CALLED BY ADVPS, WRADVS, RDADVS. 3906 / 3907 06433 0000 ADVS, 0 3908 06434 1122 TAD QRIGHT 3909 06435 7650 SNA CLA /IS IT LEFT OR RIGHT? 3910 06436 5242 JMP ADVLFT /LEFT. 3911 06437 3122 DCA QRIGHT /RIGHT. SET IT LEFT. 3912 06440 2120 ISZ PTRSTR 3913 06441 5633 JMP I ADVS 3914 / 3915 06442 2122 ADVLFT, ISZ QRIGHT /SET IT TO RIGHT. 3916 06443 5633 JMP I ADVS /EXIT . 3917 / 3918 / 3919 /ADVPS (CALLED BY "ADVNCE" MACRO). 3920 /ADVANCE PACKED POINTERS TO NEXT CHAR. OF STRING. 3921 / 3922 06444 0000 ADVPS, 0 3923 06445 1644 TAD I ADVPS /BET POINTER LOC. 3924 06446 2244 ISZ ADVPS /ADVANCE OVER POINTE. 3925 06447 4201 JMS GTPTRS /UNPACK POINTER. 3926 06450 7000 OPR 3927 06451 4233 JMS ADVS /ADVANCE POINTER. 3928 06452 4223 JMS REPACK /REPACK POINTER. 3929 06453 5644 JMP I ADVPS /EXIT. / EIGHT/S INTERPRETER. ESI Page 121 3930 / 3931 /NEWPAGE -- TYPE NEW PAGE HEADING ROUTINE. 3932 / 3933 06454 0000 NEWPAGE, 0 3934 06455 2126 ISZ PAGEKNT /INCREMENT PAGE COUNT. 3935 06456 1375 TAD (PAGMES) /TYPE OUT "*PAGE ". 3936 06457 4774@ JMS TYPKST /NOTE THAT "*" WILL CAUSE PAPER TAPE 3937 06460 1126 TAD PAGEKNT /TO DISREGARD THIS ON INPUT. 3938 06461 4773@ JMS BTODX /CONVERT PAGE COUNT TO DECIMAL AND PRINT. 3939 06462 1372 TAD (5) 3940 06463 4771@ JMS TYSPC /TYPE 5 SPACES. 3941 06464 1170 TAD [TITBUF] /TYPE OUT TITLE BUFFER. 3942 06465 4770@ JMS TYPKUP 3943 06466 1367 TAD (CRLF3-1) /RETURN THE CARRIAGE AND SPACE. 3944 06467 4766@ JMS TYUNPK 3945 06470 5654 JMP I NEWPAGE 3946 / / EIGHT/S INTERPRETER. ESI Page 122 3947 / 3948 /RDS -- READ CHARACTER SUBROUTINE. 3949 /USED BY "RD" AND "RDADV" MACROES. 3950 / 3951 06471 0000 RDS, 0 3952 06472 3117 DCA ADVAC /SAVE INPUT AC. 3953 06473 7240 CLA CMA /SET ADVANCE SWITCH TO NO ADVANCE. 3954 06474 3123 RDS1, DCA QADVC 3955 06475 1671 TAD I RDS 3956 06476 2271 ISZ RDS 3957 06477 4201 JMS GTPTRS /UNPACK INPUT POINTER. 3958 06500 5312 JMP RDSLFT /IF LEFT, GO PROCESS. 3959 06501 1520 TAD I PTRSTR /FETCH CURRENT WORD 3960 06502 0146 RDMASK, AND [0077] /AND GET LOW ORDER SIX BITS. 3961 06503 3107 DCA CURCHR 3962 06504 2123 ISZ QADVC /IF ADVANCE FLAG IS SET, 3963 06505 4233 JMS ADVS /ADVANCE INPUT. 3964 06506 4223 JMS REPACK /REPACK INPUT. 3965 06507 1107 TAD CURCHR 3966 06510 1117 TAD ADVAC /LEAVE RESULT IN AC. 3967 06511 5671 JMP I RDS 3968 / 3969 06512 1520 RDSLFT, TAD I PTRSTR /LEFT. MOVE LEFT TO RIGHT. 3970 ROTR6 06513 7012 06514 7012 06515 7012 3971 06516 5302 JMP RDMASK /GO FETCH CHARACTER. 3972 / 3973 /RDADVS -- READ ADVANCE SUBROUTINE. 3974 /USED BY "RDADV" MACRO. 3975 / 3976 06517 0000 RDADVS, 0 3977 06520 3117 DCA ADVAC /SAVE INPUT AND SET ADVANCE SWITCH. 3978 CPY RDADVS,RDS 06521 1317 06522 3271 3979 06523 5274 JMP RDS1 3980 /WRS (CALLED BY "WR" MACRO) 3981 / 3982 06524 0000 WRS, 0 3983 06525 3117 DCA ADVAC /SAVE INPUT 8AC. 3984 06526 7240 CLA CMA /SET ?ADVANCE TO NO ADVANCE. 3985 06527 3123 WRS1, DCA QADVC 3986 06530 1724 TAD I WRS /GET POINTER LOC. 3987 06531 2324 ISZ WRS /ADVANCE OVER POINTER. 3988 06532 4201 JMS GTPTRS /UNPACK POINTERS AND TEST ?RIGHT. 3989 06533 5344 JMP WRSLFT /LEFT CHAR. 3990 06534 1520 TAD I PTRSTR /RIGHT CHAR. GET WORD. 3991 06535 0141 AND [7700] 3992 06536 1117 TAD ADVAC 3993 06537 3520 WRS2, DCA I PTRSTR /STORE NEW WORD. 3994 06540 2123 ISZ QADVC /IF ?ADVANCE IS SET, 3995 06541 4233 JMS ADVS /ADVANCE POINTER. 3996 06542 4223 JMS REPACK 3997 06543 5724 JMP I WRS 3998 / / EIGHT/S INTERPRETER. ESI Page 123 3999 06544 1117 WRSLFT, TAD ADVAC /GET CHARACTER. 4000 ROTL6 /CLEAR RIGHT-HAND CHARACTER. 06545 7006 06546 7006 06547 7006 4001 06550 5337 JMP WRS2 4002 / 4003 / 4004 /WRADVS (CALLED BY "WRADV" MACRO) 4005 / ALTERNALTE ENTRY TO WRS. 4006 / 4007 06551 0000 WRADVS, 0 4008 06552 3117 DCA ADVAC /SAVE INPUT AD. 4009 CPY WRADVS,WRS 06553 1351 06554 3324 4010 06555 5327 JMP WRS1 / EIGHT/S INTERPRETER. ESI Page 124 06566 6347 06567 0166 06570 1716 06571 1277 06572 0005 06573 7125 06574 1667 06575 5307 06576 6201 06577 0030 4011 6645 *BP33 4012 /DIFPS (CALLED BY "DIFPTR" MACRO) 4013 /GET DIFFERENCE OF TWO POINTERS. 4014 /(PTR2-PTR1) TO 8AC. 4015 /CALLING SEQUENCE 4016 / JMS DIFPS 4017 / PTR1 4018 / PTR2 4019 / 4020 06645 0000 DIFPS, 0 4021 06646 1645 TAD I DIFPS 4022 06647 4776@ JMS GTPTRS 4023 06650 7000 OPR 4024 06651 1120 TAD PTRSTR 4025 06652 7104 CLL RAL 4026 06653 1122 TAD QRIGHT 4027 06654 7041 CIA /GET ROL. CHAR. POSITON OF PTR1 4028 06655 3117 DCA ADVAC /SAVE (-PTR1) 4029 06656 2245 ISZ DIFPS 4030 06657 6201 CDF 0 4031 06660 1645 TAD I DIFPS 4032 06661 4776@ JMS GTPTRS /UNPACK PTR2. 4033 06662 7000 OPR 4034 06663 1120 TAD PTRSTR 4035 06664 7104 CLL RAL 4036 06665 1122 TAD QRIGHT 4037 06666 1117 TAD ADVAC /REL. POS. OF PTR2 - PTR1. 4038 06667 2245 ISZ DIFPS 4039 06670 6201 CDF 0 4040 06671 5645 JMP I DIFPS 4041 / 4042 /BKPTRS -- BACK UP POINTERS. 4043 /USED BY "BKPTR" MACRO. 4044 / 4045 06672 0000 BKPTRS, 0 4046 06673 1672 TAD I BKPTRS /UNPACK INPUT POINTER 4047 06674 2272 ISZ BKPTRS /AND TEST ?RIGHT. 4048 06675 4776@ JMS GTPTRS 4049 06676 5301 JMP BKLFT /LEFT. GO PROCESS. 4050 06677 3122 DCA QRIGHT /RIGHT. MAKE PTR POINT TO LEFT. 4051 06700 5305 JMP BKEXIT 4052 06701 2122 BKLFT, ISZ QRIGHT /LEFT. MAKE PTR POINT TO RIGHT 4053 06702 7240 CLA CMA /OF PREVIOUS WORD. 4054 06703 1120 TAD PTRSTR 4055 06704 3120 DCA PTRSTR 4056 06705 4775@ BKEXIT, JMS REPACK /REPACK MODIFIED POINTER. 4057 06706 5672 JMP I BKPTRS / EIGHT/S INTERPRETER. ESI Page 125 4058 6707 EP33=. 06775 6423 06776 6401 4059 LIT / EIGHT/S INTERPRETER. ESI Page 126 4060 /UPPER MEMORY ORGANIZATION. 4061 / 4062 /PAGE 0...USED BY SYSTEM. 4063 / 4064 0001 TOSTPN=0001 /NEXT STEP POINTER. 4065 0002 TITBUF=0002 /TITLE BUFFER. 4066 0046 HASCON=TITBUF+BLENG /HASTINGS CONSTANTS. 4067 / 4068 /PAGES 1...37 USER MEMORY. 4069 / 4070 / 1) PART LIST 4071 / 4072 0200 PRTLST=200 4073 / 4074 / 4075 / 2) VARIABLE STORAGE 4076 / 4077 0212 VRBLOC=DECIMAL PRTLST+10 OCTAL 4078 0330 VBLKEND=DECIMAL VRBLOC+78 OCTAL 4079 / 4080 / 4081 / 3) ARRAY STORAGE 4082 / 4083 0330 USERPR=VBLKEND 4084 7740 USEREND=7740 4085 /END OF PROGRAM. 4086 / / EIGHT/S INTERPRETER. ESI Page 127 4087 4088 /FP,LIST,TAPE -- RMS. 4089 /FLOATING POINT ARITHMETIC FUNCTION ROUTINES FOR ESI-X. RMS -- 7/67. 4090 / 4091 /FUNCTIONS -- SIN, COS, LN, LOG, EXP, SQRT, ARCTAN 4092 / ALL FUNCTIONS EXCEPT SQRT USE HASTINGS APPROXIMATIONS. 4093 / SQRT USES NEWTON-RAPSON ITERATION 4094 /ALL ROUTINES PRODUCE RESULTS WITH ERROR < 3*10**-7. 4095 / 4096 /FLOATING NATURAL LOG GENERATOR. 4097 /RETURNS LN(FAC) IN FAC. 4098 / 4099 PAGE 35 4100 07200 4204 PRLN, JMS FLN /GET FLOATING NATURAL LOG OF FAC. 4101 07201 5577 RETURN 4102 /FLOATING COMMON LOGARITHM GENERATOR. 4103 / 4104 07202 4213 PRLOG, JMS FLOG /GET LOGARITHM OF FAC, BASE 10 4105 07203 5577 RETURN 4106 /NATURAL LOGARITHM ROUTINE. 4107 /RETURNS LN(FAC) IN FAC. 4108 /THE 8AC IS CLEAR AT ENTRY AND EXIT. 4109 07204 0000 FLN, 0 4110 07205 4213 JMS FLOG /GET COMMON LOG OF FAC IN FAC. 4111 07206 4574 SWP /NOTE: LN X = LOG X * LN 10 4112 GET (TENBASE) /MULTIPLY FAC BY LN 10. 07207 1377 07210 4565 4113 07211 4776@ JMS FMU 4114 07212 5604 JMP I FLN 4115 /FLOATING COMMON LOGARITHM ROUTINE. 4116 /RETUNRS LOG(FAC) IN FAC. 4117 /8AC IS CLEAR AT ENTRY AND EXIT. 4118 / 4119 07213 0000 FLOG, 0 /ENTRY. 4120 07214 1040 TAD ACS /IS THE SIGN OF THE FAC -? 4121 07215 7640 SZA CLA 4122 07216 5775@ JMP ERRARG /YES, ERROR. 4123 07217 1036 TAD AC+PREC-1 /IS FAC ZERO? 4124 07220 7650 SNA CLA 4125 07221 5775@ JMP ERRARG /YES, ERROR. 4126 07222 7240 CLA CMA 4127 07223 1037 TAD ACX 4128 07224 3344 DCA SAVCS /NO...SAVE ACX-1 FOR LATER SCALING. 4129 07225 7201 CLA IAC 4130 07226 3037 DCA ACX 4131 STORE (X) /SET FAC EXPONENT TO 1 AND STORE. 07227 1374 07230 4571 4132 GET (SQRT10) 07231 1373 07232 4565 4133 07233 4265 JMS CHGPAR /SET X = X-SQRT(10)/X+SQRT(10) 4134 GET (FPHALF) 07234 1372 07235 4565 4135 07236 1371 TAD DECIMAL (-9) OCTAL /DO A FIVE TERM HASTINGS / EIGHT/S INTERPRETER. ESI Page 128 4136 07237 4770@ JMS HASTINGS 4137 07240 0065 LOGCON /APPROXIMATION. 4138 07241 7410 SKP 4139 07242 1344 TAD SAVCS /GET FORMER ACX-1. 4140 07243 7450 SNA /IS IT ZERO? 4141 07244 5613 JMP I FLOG /YES, EXIT ...NO SCALING NEEDED. 4142 07245 7500 SMA /NOTE: THE CHARACTERISTIC OF THE 4143 07246 7041 CIA /LOG IS THIS SCALING FACTOR. 4144 07247 3117 DCA ADVAC /NO. COMPLEMENT IT AND USE AS LOOP CONTROL. 4145 07250 4574 FLOGLP, SWP /X TO IR, 1 TO FAC. 4146 GET (FP1) 07251 1367 07252 4565 4147 07253 1344 TAD SAVCS /WAS ACX-1 > 0? 4148 07254 7710 SPA CLA /NO...SUBTRACT 1 FROM X. 4149 07255 5262 JMP FLSUBX 4150 07256 4766@ JMS FAD /YES...ADD 1 TO X. 4151 07257 2117 FLINDX, ISZ ADVAC /SCALING DONE? 4152 07260 5250 JMP FLOGLP /NO, CONTINUE. 4153 07261 5613 JMP I FLOG /YES, EXIT. 4154 / 4155 07262 4574 FLSUBX, SWP /SUBTRACT 1 FROM X. 4156 07263 4765@ JMS FSB 4157 07264 5257 JMP FLINDX / EIGHT/S INTERPRETER. ESI Page 129 4158 /CHANGE PARAMTER SUBROUTINE. 4159 /PRODUCES X-FAC/X+FAC IN FAC. 4160 / 4161 07265 0000 CHGPAR, 0 4162 STORE (Y) /SAVE FAC IN Y, 07266 1364 07267 4571 4163 07270 4323 JMS GETX /X TO FAC, Y TO IR. 4164 07271 4765@ JMS FSB / X-Y. 4165 07272 4323 JMS GETX / XO TO FAC, X-Y TO IR, AND REVERSE. 4166 07273 4574 SWP 4167 STORE (X) 07274 1374 07275 4571 4168 GET (Y) /Y TO FAC, 07276 1364 07277 4565 4169 07300 4766@ JMS FAD / X+Y TO FAC. 4170 07301 4323 JMS GETX / X-Y TO FAC, X+Y TO IR, 4171 07302 4763@ JMS FDV / X-Y/X+Y IN FAC. 4172 STORE (X) 07303 1374 07304 4571 4173 07305 5665 JMP I CHGPAR 4174 /FLOATING ARCTANGENT GENERATOR. 4175 /PRODUCES ARCTAN(FAC) IN FAC. 4176 /8AC IS CLEAR AT ENTRY AND EXIT. 4177 / 4178 07306 4330 PRARC, JMS SAVSGN /SAVE SGN(FAC) AND GET ABS(X) IN FAC. 4179 GET (FP1) 07307 1367 07310 4565 4180 07311 4265 JMS CHGPAR /SET X=X-1/X+1. 4181 GET (PIBY4) /INITIAL HASTINGS TERM OF PI/4. 07312 1362 07313 4565 4182 07314 1361 TAD DECIMAL (-15) OCTAL /DO AN 8 TERM HASTINGS APPROXIMATION 4183 07315 4770@ JMS HASTINGS 4184 07316 0126 ARCCON 4185 07317 7410 SKP 4186 CPY SAVCS,ACS /SIGN OF OUTPUT = SIGN OF INPUT. 07320 1344 07321 3040 4187 07322 5577 RETURN 4188 /MINOR SUBROUTINES. 4189 / 4190 07323 0000 GETX, 0 4191 07324 4574 SWP /FAC TO IR, 4192 GET (X) /X TO FAC. 07325 1374 07326 4565 4193 07327 5723 JMP I GETX 4194 / 4195 07330 0000 SAVSGN, 0 4196 CPY ACS,SAVCS /SAVE FAC SIGN IN SAVCS. 07331 1040 07332 3344 / EIGHT/S INTERPRETER. ESI Page 130 4197 07333 3040 DCA ACS /PUT ABS(FAC) IN X. 4198 STORE (X) 07334 1374 07335 4571 4199 07336 5730 JMP I SAVSGN 4200 / 4201 07337 0000 GETY, 0 4202 07340 4574 SWP 4203 GET (Y) 07341 1364 07342 4565 4204 07343 5737 JMP I GETY 4205 /SCRATCH STORAGE AND A CONSTANT. 4206 07344 0000 SAVCS, 0 4207 7345 EP35=. 07361 7761 07362 7353 07363 4400 07364 6763 07365 5603 07366 5600 07367 7541 07370 6707 07371 7767 07372 6760 07373 7536 07374 6755 07375 7533 07376 4206 07377 7345 4208 LIT / EIGHT/S INTERPRETER. ESI Page 131 4209 /FLOATING EXPONENTIAL GENERATOR. 4210 /RETURNS E**(FAC) IN FAC. 4211 /8AC IS CLEAR AT ENTRY AND EXIT. 4212 / 4213 PAGE 37 4214 LITBAS 7754 4215 07600 4754@ PREXP, JMS SAVSGN /SAVE SIGN OF INPUT, GET ABS(X) IN FAC. 4216 GET (TENBASE) /DIVIDE INPUT BY LN 10. 07601 1353 07602 4565 4217 07603 4752@ JMS GETX /NOTE: E**X = 4218 07604 4751@ JMS FDV / 10**IP(X/LN 10) + E**(LN 10*FP(X/LN 10)) 4219 STORE (X) 07605 1350 07606 4571 4220 07607 4747@ JMS IPS /SAVE INTEGER PART (CONVERTED TO BINARY) 4221 07610 4746@ JMS FDTOB /AS SCALING FACTOR. 4222 07611 3251 DCA EXPTMP 4223 07612 4752@ JMS GETX 4224 07613 4745@ JMS FPS /USE FRACTION PART*LN 10 AS BASIS FOR 4225 07614 4574 SWP /HASTINGS APPROXIMATION. 4226 GET (TENBASE) 07615 1353 07616 4565 4227 07617 4744@ JMS FMU 4228 STORE (X) 07620 1350 07621 4571 4229 GET (FP1) /DO A 6 TERM HASTINGS APPROXIMATION. 07622 1343 07623 4565 4230 07624 1145 TAD [-6] 4231 07625 4742@ JMS HASTINGS 4232 07626 0104 EXPCON 4233 07627 7000 NOP 4234 STORE (X) /RAISE RESULT TO THE FOURTH POWER. 07630 1350 07631 4571 4235 07632 1341 TAD (-4) 4236 07633 4315 JMS XPOWER 4237 07634 1040 TAD ACS /ADD SCALING FACTOR TO AC EXPONENT. 4238 07635 1251 TAD EXPTMP /I.E, MULTIPLY BY 10**EXPTMP. 4239 07636 7001 IAC 4240 07637 3037 DCA ACX 4241 07640 4740@ JMS CHKEXP /DID EXPONENT OVERFLOW? 4242 07641 1737@ EXPVRT, TAD SAVCS /WAS ORIGINAL INPUT NEGATIVE? 4243 07642 7650 SNA CLA 4244 07643 5577 RETURN /NO. 4245 07644 4574 SWP /YES...OUTPUT IS INVERTED. 4246 GET (FP1) 07645 1343 07646 4565 4247 07647 4751@ JMS FDV 4248 07650 5577 RETURN / EIGHT/S INTERPRETER. ESI Page 132 4249 / 4250 07651 0000 EXPTMP, 0 4251 /FLOATING EXPONENTIATION SECTION. 4252 /GIVEN A IN FAC, B IN IR, RETURNS A**B. 4253 /THIS VERSION CHECKS FOR THE FOLLOWING SPECIAL CASES: 4254 / A=0 RESULT IS 0 4255 / B INTEGRAL, NON-ZERO AND ABS(B) <9 4256 / EXPONENTIATION DONE BY MULTIPLYING. 4257 / 4258 07652 1036 DFEXP, TAD AC+PREC-1 /DOES A (IN FAC) =0? 4259 07653 7650 SNA CLA 4260 07654 5577 RETURN /YES, THEN A**B =0. 4261 STORE (X) /SAVE A, 07655 1350 07656 4571 4262 07657 4574 SWP /SAVE B, 4263 07660 4736@ JMS PUSHAC /GET FP(B). 4264 07661 1036 TAD AC+PREC-1 /IS B ZERO? 4265 07662 7650 SNA CLA 4266 07663 5312 JMP DFEXP2 /YES, THEN RETURN 1. 4267 07664 1037 TAD ACX 4268 07665 1160 TAD [-1] /IS B BETWEEN 1 AND 10? 4269 07666 7640 SZA CLA 4270 07667 5274 JMP DFEXP1 /NO, DO BY NORMAL METHODS. 4271 07670 4745@ JMS FPS 4272 07671 1036 TAD AC+PREC-1 /S B AN INTEGER? (I.E, FP(B)=0?) 4273 07672 7650 SNA CLA 4274 07673 5302 JMP DFIEXP /YES, DO BY INTEGRAL EXPONENTIATION. 4275 07674 4752@ DFEXP1, JMS GETX /NO, RECOVER A. 4276 07675 4735@ JMS FLN /NOTE: A**B = EXP(B*LN(A)) 4277 07676 4574 SWP 4278 07677 4734@ JMS POPAC /RECOVER B. 4279 07700 4744@ JMS FMU /B*LN A IN FAC. 4280 07701 5200 JMP PREXP /DO EXPONENTIATION. 4281 / 4282 07702 4734@ DFIEXP, JMS POPAC /POP B, 4283 CPY ACS,SAVCS /SAVE ITS SIGN AND CONVERT ITS 07703 1040 07704 3737 4284 07705 3040 DCA ACS /MAGNITUDE TO A BINARY INTEGER. 4285 07706 4746@ JMS FDTOB 4286 07707 7041 CIA 4287 07710 4315 JMS XPOWER /RAISE A TOTHE B POWER BY MULTIPLICATION. 4288 07711 5241 JMP EXPVRT 4289 DFEXP2, GET (FP1) /RETURN 1.0 07712 1343 07713 4565 4290 07714 5577 RETURN 4291 /XPOWER -- RAISE X TO POWER N. 4292 /CALLING SEQUENCE... 4293 / TAD (-POWER) 4294 / JMS XPOWER 4295 / 4296 07715 0000 XPOWER, 0 4297 07716 3117 DCA ADVAC /SAVE COUNT. 4298 GET (FP1) /START OFF WITH X**0 IN FAC. 07717 1343 / EIGHT/S INTERPRETER. ESI Page 133 07720 4565 4299 07721 4752@ XPLP, JMS GETX /X**(N-1) TO IR, X TO FAC. 4300 07722 4744@ JMS FMU /X**N IN FAC. 4301 07723 2117 ISZ ADVAC /DONE? 4302 07724 5321 JMP XPLP /NO. 4303 07725 5715 JMP I XPOWER 4304 7726 EP37=. 07734 0237 07735 7204 07736 0221 07737 7344 07740 4351 07741 7774 07742 6707 07743 7541 07744 4206 07745 0645 07746 7000 07747 0662 07750 6755 07751 4400 07752 7323 07753 7345 07754 7330 4305 LIT / EIGHT/S INTERPRETER. ESI Page 134 4306 /FLOATING SIN/COS GENERATOR. 4307 /RETURNS SINE OR COSINE OF FAC IN FAC. 4308 /8AC IS CLEAR AT ENTRY AND EXIT. 4309 / 4310 PAGE 36 4311 07400 4574 PRCOS, SWP 4312 GET (PIBY2) /ADD IN PI/2. 07401 1377 07402 4565 4313 07403 4776@ JMS FAD 4314 07404 4574 PRSIN, SWP 4315 GET (PIBY2) /DIVIDE BY PI/2 TO REDUCE X TO PROPER RANGE 07405 1377 07406 4565 4316 07407 4574 SWP 4317 07410 4775@ JMS FDV 4318 FSIN1, STORE (X) /SAVE RESULT IN X, 07411 1374 07412 4571 4319 07413 3040 DCA ACS /AND GET ABS(X) IN FAC. 4320 07414 4574 SWP 4321 GET (FP1) 07415 1373 07416 4565 4322 07417 4772@ JMS COMP /COMPARE ABS(X) WITH 1. 4323 07420 5231 JMP FSINC2 /ABS(X) > 1. 4324 07421 7000 NOP / = 1. 4325 07422 1371 FSIN2, TAD (-PREC-2) / < 1. 4326 07423 4770@ JMS CLFACS /SET INITIAL FAC TO ZERO. 4327 07424 1371 TAD DECIMAL (-9) OCTAL /DO A FIVE TERM HASTINGS APPROX. 4328 07425 4767@ JMS HASTINGS 4329 07426 0046 SINCON 4330 07427 7410 SKP 4331 07430 5577 RETURN 4332 / 4333 /IF ABS(X) > 1, WE MUST FOLD X SO THAT 4334 / -1 < X < 1. 4335 / 4336 07431 4766@ FSINC2, JMS GETX 4337 07432 3040 DCA ACS 4338 07433 4574 SWP 4339 GET (FP2) 07434 1365 07435 4565 4340 07436 4772@ JMS COMP /COMPARE ABS(X) WITH 2. 4341 07437 5253 JMP FSINC4 /ABS(X) > 2. 4342 07440 7000 NOP / = 2. 4343 07441 4766@ JMS GETX /ABS(X) < 2. 4344 07442 4574 SWP 4345 GET (FP2) 07443 1365 07444 4565 4346 CPY IRS,ACS /SET FAC TO 2*SGN(X), 07445 1051 07446 3040 4347 07447 4764@ JMS FSB /AND THEN TO 2*SGN(X) - X. 4348 STORE (X) /STORE NEW VALUE OF X. / EIGHT/S INTERPRETER. ESI Page 135 07450 1374 07451 4571 4349 07452 5222 JMP FSIN2 4350 / 4351 FSINC4, GET (FP4) 07453 1363 07454 4565 4352 07455 1774@ TAD X /GET FIRST WORD OF X, 4353 07456 0154 AND [0020] 4354 07457 3040 DCA ACS /AND 4*SGN(X)IN FAC. 4355 07460 4766@ JMS GETX /RECOVER X, 4356 07461 4764@ JMS FSB /X-4*SGN(X). 4357 07462 5211 JMP FSIN1 / EIGHT/S INTERPRETER. ESI Page 136 4358 /PROCESS SQRT GENERATOR. 4359 /RETURNS SQRT(FAC) IN FAC. 4360 /8AC IS CLEAR AT ENTRY AND EXIT. 4361 / 4362 07463 1040 PRSQRT, TAD ACS /IS FAC > OR = 0? 4363 07464 7640 SZA CLA 4364 07465 5333 JMP ERRARG /NO, ERROR. 4365 STORE (X) /YES, SAVE INITIAL VALUE. 07466 1374 07467 4571 4366 07470 1037 TAD ACX /IF X = Y*10**N 4367 07471 7001 IAC /INITIAL APPROXIMATION IS Y*10**(N+1)/2 4368 07472 7100 CLL 4369 07473 7510 SPA 4370 07474 7020 CML 4371 07475 7010 RAR 4372 07476 3037 DCA ACX 4373 SQRTL, STORE (Y) /SAVE CURRENT APPROXIMATION IN Y. 07477 1362 07500 4571 4374 07501 4766@ JMS GETX 4375 07502 4775@ JMS FDV /X/Y. 4376 07503 4761@ JMS GETY 4377 07504 4776@ JMS FAD /X/Y+Y. 4378 07505 4574 SWP 4379 GET (FPHALF) 07506 1360 07507 4565 4380 07510 4757@ JMS FMU / (X/Y+Y)*0.5. 4381 CPY ACX,ADVAC /SAVE NEW APPROXIMATION ON STACK 07511 1037 07512 3117 4382 07513 4756@ JMS PUSHAC /AND NEW AC EXPONENT IN ADVAC. 4383 07514 4761@ JMS GETY 4384 07515 4764@ JMS FSB /OLD APPROXIMATION - NEW APPROXIMATION 4385 07516 1036 TAD AC+PREC-1 /IS AC=0? 4386 07517 7650 SNA CLA 4387 07520 5331 JMP SQRTX /YES...DONE 4388 07521 1037 TAD ACX / OLD EXPONENT - NEW EXPONENT 4389 07522 7041 CIA 4390 07523 1117 TAD ADVAC 4391 07524 1355 TAD (-5) /IS CHANGE OVER ITERATION LESS THAN 10**-5? 4392 07525 7700 SMA CLA 4393 07526 5331 JMP SQRTX /YES. DONE 4394 07527 4754@ JMS POPAC /NO, RECOVER NEW APPROXIMATION 4395 07530 5277 JMP SQRTL /AND ITERATE. 4396 / 4397 07531 4754@ SQRTX, JMS POPAC /RECOVER ANSWER. 4398 07532 5577 RETURN /AND EXIT 4399 / 4400 07533 4753@ ERRARG, JMS ERRG /ARGUMENT ERROR. 4401 07534 0122 TEXT /ARG/ 07535 0700 4402 7536 EP36=. 07553 5662 07554 0237 07555 7773 / EIGHT/S INTERPRETER. ESI Page 137 07556 0221 07557 4206 07560 6760 07561 7337 07562 6763 07563 7726 07564 5603 07565 7544 07566 7323 07567 6707 07570 0674 07571 7767 07572 1232 07573 7541 07574 6755 07575 4400 07576 5600 07577 7350 4403 LIT / EIGHT/S INTERPRETER. ESI Page 138 4404 /GENERAL HASTINGS APPROXIMATION CALCULATOR. 4405 /INPUT: FAC -- INITIAL TERM 4406 / X -- VALUE FOR SERIES 4407 / RETURN+1 -- ADDRESS OF HASTINGS CONSTANTS IN BANK 1 4408 / RETURN+2 -- SERIES INDEX DECREMENT: -1, -2, ETC. 4409 / 8AC -- NUMBER OF TERMS IN SERIES. 4410 / 4411 /OUTPUT: FAC -- RESULT. 4412 / 8AC -- 0. 4413 / 4414 6707 *EP33 4415 06707 0000 HASTINGS, 0 4416 06710 3123 DCA QADVC /SAVE NUMBER OF TERMS IN SERIES. 4417 06711 1707 TAD I HASTINGS /PICK UP POINTER TO CONSTANTS AND SAVE. 4418 06712 2307 ISZ HASTINGS 4419 06713 3117 DCA ADVAC 4420 06714 1707 TAD I HASTINGS /PICK UP SERIES DECREMENT SWITCH. 4421 06715 2307 ISZ HASTINGS 4422 06716 3346 DCA HSWTCH 4423 06717 4774@ JMS PUSHAC /SAVE INITIAL TERM OF SERIES ON STACK. 4424 CPY [IR-1],AX0 /CLEAR THE INPUT REGISTER. 06720 1140 06721 3010 4425 CPY (-PREC-2),TMP 06722 1373 06723 3061 4426 06724 3410 DCA I AX0 4427 06725 2061 ISZ TMP 4428 06726 5324 JMP .-2 4429 06727 1117 HASLP, TAD ADVAC /PICK UP C(N) 4430 06730 6211 CDF 10 4431 06731 4565 JMS I [GETNUM] 4432 06732 4772@ JMS FAD / C(N) + PARTIAL SUM IN AC. 4433 06733 1117 TAD ADVAC 4434 06734 1167 TAD [NUMWD] /ADVANCE POINTER IN HASTINGS CONSTANTS. 4435 06735 3117 DCA ADVAC 4436 06736 4771@ JMS GETX 4437 06737 4770@ JMS FMU /PRODUCE C(N)+PARTIAL SUM *X 4438 06740 2123 ISZ QADVC /WAS THAT THE LAST TERM? 4439 06741 5346 JMP HSWTCH /NO, CONTINUE LOOP. 4440 06742 4574 SWP /YES, ADD IN INITIAL TEMR. 4441 06743 4767@ JMS POPAC 4442 06744 4772@ JMS FAD 4443 06745 5707 JMP I HASTINGS /EXIT TO CALLER. 4444 06746 7402 HSWTCH, HLT /MULTIPLY BY X OR X**2 SWITCH. 4445 06747 5353 JMP NOSQR /NO SQUARING, GO TO NEXT LOOP CYCLE. 4446 06750 4771@ JMS GETX /MULTIPLY AGAIN BY X. 4447 06751 4770@ JMS FMU 4448 06752 2123 ISZ QADVC /THIS CAN NEVER OVERFLOW! 4449 06753 4574 NOSQR, SWP /SWAP PARTIAL SUM INTO IR, 4450 06754 5327 JMP HASLP /AND ITERATE. 4451 6755 EP33=. 06767 0237 06770 4206 06771 7323 06772 5600 06773 7767 / EIGHT/S INTERPRETER. ESI Page 139 06774 0221 4452 LIT 4453 /CONSTANTS FOR FLOATING POINT ROUTINES. 4454 / 4455 6755 *EP33 4456 06755 0000 X, 0000 4457 6760 *X+NUMWD 4458 06760 0000 FPHALF, 0000 4459 06761 0000 0000 4460 06762 0005 0005 4461 06763 0000 Y, 0000 4462 6766 *Y+NUMWD 4463 7345 *EP35 4464 07345 0045 TENBASE, 0045 /LN 10 = 2.30258509 4465 07346 4122 4122 4466 07347 0062 0062 4467 07350 0046 PIBY2, 0046 /PI/2 = 1.570796326 4468 07351 4560 4560 4469 07352 3521 3521 4470 07353 0002 PIBY4, 0002 /PI/4 = .7853981633 4471 07354 4223 4223 4472 07355 2607 2607 4473 7536 *EP36 4474 07536 0050 SQRT10, 0050 /SQRT(10) = 3.16227766 4475 07537 3442 3442 4476 07540 3023 3023 4477 07541 0040 FP1, 0040 /1.0 4478 07542 0000 0000 4479 07543 0001 0001 4480 07544 0040 FP2, 0040 /2.0 4481 07545 0000 0000 4482 07546 0002 0002 4483 7726 *EP37 4484 07726 0040 FP4, 0040 /4.0 4485 07727 0000 0000 4486 07730 0004 0004 / EIGHT/S INTERPRETER. ESI Page 140 4487 /HASTINGS CONSTANTS FOR FP FUNCTIONS. 4488 / 00137 0007 00140 0040 00141 7700 00142 0036 00143 7770 00144 0006 00145 7772 00146 0077 00147 7766 00150 6471 00151 6444 00152 0012 00153 6645 00154 0020 00155 0027 00156 7771 00157 7776 00160 7777 00161 6551 00162 6517 00163 0010 00164 3777 00165 4000 00166 7775 00167 0003 00170 0002 00171 4303 00172 6000 00173 4200 00174 4616 00175 6305 00176 6272 00177 6252 4489 BANK 1 4490 0046 *HASCON 4491 /SIN/COS CONSTANTS. 4492 / 4493 10046 7642 SINCON, 7642 /0.00015148419 4494 10047 2204 2204 4495 10050 0521 0521 4496 10051 7726 7726 /-.00467376557 4497 10052 3163 3163 4498 10053 3544 3544 4499 10054 7750 7750 /.07968967928 4500 10055 3230 3230 4501 10056 3227 3227 4502 10057 0027 0027 /-.645963711 4503 10060 1551 1551 4504 10061 2506 2506 4505 10062 0046 0046 /1.570796318 4506 10063 4560 4560 4507 10064 3521 3521 4508 /LOGARITHM CONSTANTS. 4509 / 4510 10065 0007 LOGCON, 0007 /.191337714 / EIGHT/S INTERPRETER. ESI Page 141 4511 10066 3463 3463 4512 10067 0621 0621 4513 10070 7750 7750 /.094376476 4514 10071 2147 2147 4515 10072 1511 1511 4516 10073 0001 0001 /.177522071 4517 10074 1045 1045 4518 10075 3561 3561 4519 10076 0005 0005 /.289335524 4520 10077 2463 2463 4521 10100 4602 4602 4522 10101 0011 0011 /.868591918 4523 10102 0625 0625 4524 10103 4150 4150 4525 /EXPONENTIAL CONSTANTS 4526 / 4527 10104 7500 EXPCON, 7500 /69906E-7 4528 10105 0006 0006 4529 10106 0226 0226 4530 10107 7540 7540 /5.4302E-6 4531 10110 0040 0040 4532 10111 1505 1505 4533 10112 7640 7640 /1.71562E-J 4534 10113 1145 1145 4535 10114 0561 0561 4536 10115 7701 7701 /.0025913712 4537 10116 3461 3461 4538 10117 4522 4522 4539 10120 7750 7750 /.0312575832 4540 10121 2565 2565 4541 10122 1023 1023 4542 10123 0007 0007 /.24999868 4543 10124 4231 4231 4544 10125 4502 4502 4545 /ARCTANGENT CONSTANTS. 4546 / 4547 10126 7730 ARCCON, 7730 /-.004054058 4548 10127 2404 2404 4549 10130 2404 2404 4550 10131 7743 7743 /.0218612288 4551 10132 1026 1026 4552 10133 4022 4022 4553 10134 7771 7771 /-.0559098861 4554 10135 4220 4220 4555 10136 4525 4525 4556 10137 7744 7744 /.096420041 4557 10140 0002 0002 4558 10141 2151 2151 4559 10142 0023 0023 /-.1390853351 4560 10143 2600 2600 4561 10144 4461 4461 4562 10145 0004 0004 /-.1994653599 4563 10146 2544 2544 4564 10147 4621 4621 4565 10150 0026 0026 /-.33329856 4566 10151 4222 4222 4567 10152 1463 1463 / EIGHT/S INTERPRETER. ESI Page 142 4568 10153 0003 0003 /.9999993329 4569 10154 4631 4631 4570 10155 4631 4631 4571 / 4572 /EJECTION SEQUENCE 4573 10156 0212 JEQSEQ, 212; 212; 212; 212; 337; 337; 337; 337; 337 10157 0212 10160 0212 10161 0212 10162 0337 10163 0337 10164 0337 10165 0337 10166 0337 4574 10167 0215 CRLF3, 215 4575 10170 0212 LF3, 212; 212 10171 0212 4576 10172 0212 JLF, 212; 0000 10173 0000 No detected errors