100 / DEFINITIONS FROM FOCAL, 1969 (ORIGINAL PAPER-TAPE VERSION). 110 120 CHAR= 0066 /FOCAL'S CHARACTER BUFFER 130 EFUN3I= 0136 /FUNCTION RETURN POINTER 140 ERROR5= 2725 /ERROR FUNCTION 150 EVAL= 1613 /EVALUATOR ROUTINE 160 FLAC= 0044 /FLOATING AC 170 FNTABF= 0374 /FUNCTION ADDRESS TABLE 180 FNTABL= 2165 /HASHED FUNCTION NAME TABLE 190 GETC= JMS I 0145 /GET A CHARACTER 200 INDEV= 0064 /INPUT ROUTINE POINTER 210 INTEGER=0053 /FLOATING TO FIXED CONVERSION POINTER 220 OUTDEV= 0063 /OUTPUT ROUTINE POINTER 230 PDLXR= 0013 /PUSHDOWN LIST AUTO-INDEX REGISTER 240 PUSHA= JMS I 0142 /PUSH WORD ONTO STACK 250 RETURN= JMP I EFUN3I /FUNCTION RETURN INSTRUCTION 260 XDYS= 1142 /FDIS FUNCTION ADDRESS 270 XINT= 1160 /INTEGER PART ROUTINE 280 290 / DEFINITIONS FROM P?S/8 AND THE P?S/8 FOCAL OVERLAY. 300 310 BEOFZAP=7505 /BINARY LOADER ZAP WORD 320 BONCE= 3600 /OVERLAY ONCE-ONLY ADDRESS 330 PRGFLD= 0000 /PROGRAM FIELD 340 SWAPBLK=2417 /SWAP BLOCK 350 SWMX= 7605 /SWITCHES /M-/X 360 SWY9= 7606 /SWITCHES /Y, /Z, /0-9 370 380 / NUMERIC LOAD DEFINITIONS. 390 400 NL0001= CLA IAC /LOAD AC WITH 0001 410 NL7777= CLA CMA /LOAD AC WITH 7777 420 430 / CHARACTER DEFINITIONS. 440 450 ESC= 033 / CHARACTER 460 FS= "\&37 / CHARACTER 470 US= 037 / CHARACTER 480 EJECT 490 FIELD 0 /ENSURE FIELD ZERO 500 510 *FNTABF+3 /OVER FUNCTION ADDRESS TABLE 520 530 XDIS /POINT TO DISPLAY FUNCTION 540 550 *FNTABF+14 /OVER FNEW ADDRESS 560 570 XIO /POINT TO INPUT/OUTPUT FUNCTION 580 590 *XDYS /OVER EXISTING XDIS CODE 600 610 / FIO FUNCTION. 620 630 XIO, JMS I INTEGER /GET LOW-ORDER FROM FIXED FLAC 640 SMA CLA /SKIP IF INPUT 650 JMP XOUT /JUMP IF OUTPUT 660 JMS I INDEV /GET A CHARACTER 670 680 / AC WILL BE NON-ZERO IF FIO(NEGATIVE), ZERO IF FDIS(XX). 690 700 / FDIS FUNCTION ENTERS HERE WITH CLEAR AC. 710 720 XDIS, CIF DFIELD /GOTO CODE FIELD 730 JMP XIOMORE /CINTINUE THERE 740 750 / COMES HERE IF FIN(POSITIVE). 760 770 XOUT, TAD FLAC+2 /GET LOW-ORDER AGAIN 780 JMS I OUTDEV /PRINT THE CHARACTER 790 XRET, RETURN /RETURN TO FOCAL 800 810 / FIELD ZERO FLOATING TO FIX CALL. 820 830 INTPUSH,SNA /ANY PASSED VALUE? 840 JMS I INTEGER /NO, GET LOW-ORDER FROM FIXED FLAC 850 PUSHA /PUSH EITHER WAY 860 EVALRET,CIF DFIELD /GOTO CODE FIELD 870 JMP PUSHMORE /CONTINUE THERE 880 890 ZBLOCK XINT-. /EMPTY SPACE 900 910 XINT= . /UPPER LIMIT FOR DISPLAY CODE 920 930 *FNTABL+3 /OVER HASHED NAME TABLE 940 950 "D^2+"I^2+"S /MAKE SURE FDIS FUNCTION IS PRESENT 960 970 *FNTABL+14 /OVER FNEW 980 990 "I^2+"O /ENTER FIO FUNCTION HASHED NAME 1000 EJECT 1010 *SWAPBLK+3 /OVER EMPTY SPACE PAST SWAPPER 1020 1030 / FIELD ZERO GETC CALL. 1040 1050 DOGETC, GETC /GET LATEST CHARACTER 1060 CIF DFIELD /GOTO CODE FIELD 1070 JMP DOGETBACK /CONTINUE THERE 1080 EJECT 1090 FIELD DFIELD%10 /IN (FIRST) BUFFER FIELD 1100 1110 *0 /START AT THE BEGINNING 1120 1130 ROTATE, .-. /ROTATE VALUE 1140 SIZE, .-. /CHARACTER SIZE 1150 STKTMP, .-. /TEMPORARY FOR STACK OPERATIONS 1160 STRPTR, .-. /STRING BUFFER POINTER 1170 1180 / FIX THE FLAC AND PUSH ROUTINE. 1190 1200 FIXPUSH,.-. /FIX AND PUSH ROUTINE 1210 CIF CDF PRGFLD /GOING TO FIELD ZERO 1220 JMP I [INTPUSH] /CONTINUE THERE 1230 1240 / COMES BACK HERE WHEN THROUGH. 1250 1260 PUSHMOR,JMP I FIXPUSH /RETURN 1270 1280 *10 /GET TO AUTO-INDEX AREA 1290 1300 CASE, .-. /LATEST ALPHA CASE 1310 LATCHAR,.-. /LATEST STRING CHARACTER 1320 PREVCHA,.-. /PREVIOUS STRING CHARACTER 1330 TERMTMP,.-. /TERMINAL OUTPUT TEMPORARY 1340 X, .-. /"X" COORDINATE 1350 Y, .-. /"Y" COORDINATE 1360 1370 *20 /GET PAST AUTO-INDEX AREA