File: FOC.PA of Tape: Sources/Focal/s9
(Source file text)
/OS8-FOCAL FOR 8EE/12K XLIST /&0 IFNDEF FOCLST <FOCLST=1> IFNDEF FLTLST <FLTLST=1> IFNDEF LIBLST <LIBLST=1> IFNDEF TXTLST <TXTLST=1> IFNZRO FOCLST+FLTLST <FFNASS=0> IFZERO FOCLST+FLTLST <FFNASS=1> IFNZRO LIBLST+TXTLST <LTNASS=0> IFZERO LIBLST+TXTLST <LTNASS=1> /PSEUDO FLOATING POINT INSTRUCTIONS FIXMRI FGET=0000 FIXMRI FADD=1000 FIXMRI FSUB=2000 FIXMRI FDIV=3000 FIXMRI FMUL=4000 FIXMRI FPOW=5000 FIXMRI FPUT=6000 FNOR=7000 FINT=JMS I 7 FENT=JMS I 7 FEXT=0 FXIT=0 /&1A /SYSTEM INSTRUCTIONS (NOT LISTED) /PERMANENT SYMBOLS FOR PAL8 /PDP8/E-SYMBOLS BSW=7002 MQL=7421 MQA=7501 SWP=7521 CAM=7621 SKON=6000 SRQ=6003 GTF=6004 RTF=6005 SGT=6006 CAF=6007 CINT=6204 SINT=6254 CUF=6264 SUF=6274 /VARIOUS 8E OR NEW INSTRUCTIONS KCF=6030 KIE=6035 TFL=6040 TSK=6045 RPE=6010 RIE=6013 /S/CL ERR. INT. (READER) RCR=6015 /CLEAR READER/PUNCH ERROR RSE=6017 /SKIP ERROR READER PCE=6020 PIE=6023 /S/CL ERR. INT. (PUNCH) PSK=6025 /SKIP ON READER OR PUNCH FLAG PSE=6027 /SKIP ERROR PUNCH /KE8-E (EAE)-SYMBOLS SWAB=7431 SWBA=7447 SKB=7671 SCA=7441 SCL=7403 MUY=7405 DVI=7407 NMI=7411 SHL=7413 ASR=7415 LSR=7417 ASC=7403 SAM=7457 DAD=7443 DLD=7663 DST=7445 DPIC=7573 DCM=7575 DPSZ=7451 /TIMER/COUNTER CODES TCEI=6570 TCSD=6571 TCSE=6572 TCCL=6573 TCME=6574 TCRB=6575 TCSF=6576 TCRF=6577 CTSI=6560 CTSA=6561 CTCB=6562 CTCT=6563 CTST=6564 CTRB=6565 CTSF=6566 CTRF=6567 /MAGNET CODES MARL=6170 MARH=6171 MARM=6172 MASD=6173 MACL=6174 MALM=6175 MALH=6176 MALL=6177 /DISPLAY PLOTTER CODES DLXA=6060 DLXB=6061 DLXC=6062 DLXD=6063 DSPA=6064 /PEN UP DSPB=6065 /PEN DOWN DINX=6066 DSC=6067 DLYA=6070 DLYB=6071 DLYC=6072 DLYD=6073 DCHS=6074 /SCOPE CHANNEL DCHP=6075 /PLOTTER CHANNEL DINY=6076 DCSI=6077 DIEN=6050 DSPD=6051 DSCD=6052 DSLP=6053 DSDF=6054 DRIS=6055 DSFF=6056 DCFF=6057 /BUFFERED DIGITAL I/O DBDI=6500 DBEI=6501 DBSK=6502 DBCI=6503 DBRI=6504 /FOR SECOND UNIT : DBRI 10 DBCO=6505 DBSO=6506 DBRO=6507 /DAC INSTRUCTIONS DAL1=6161 /LOAD DAC1 DAL2=6162 /LOAD DAC2 DAL3=6163 /LOAD DAC3 DASK=6164 /SKIP ON ANY DAC FLAG DARS=6165 /READ STATUS DALS=6166 /LOAD STATUS;CLEAR SELECTED FLAGS DACL=6167 /LOCAL INIT /DIGITAL INTEGRATOR INSTRS. INCF=6146 /CLEAR FLAG INSF=6141 /SKIP INLHI=6142 /LOAD HI,INHIBIT COUNT INLLO=6143 /LOAD LO,ENABLE COUNT INRHI=6144 /READ HI,INHIBIT BUFFER LOAD INRLO=6145 /READ LO,ENABLE BUFFER LOAD INIE=6147 /SET/CLEAR INT. ENABLE (DATA 11) FIXTAB /&1B /DEFINITIONS FOR LIB AND TXT IF NEEDED IFNZRO LTNASS < CMST=1000 DISFIL=5000 DISPL=0047 ENDTXT=4177 FELD=0200 FILEST=5540 FOUCC=642 FOUEXP=555 FOUJ0=600 FOUNJ=740 FOUSCS=755 FXLOW=506 ICHAR=5447 LIBFIL=0104 LINE0=0210 LINE1=0224 LOWLIB=6400 MPD2=5671 MPD3=5725 MPOPA=5746 MPUSHA=5646 NOCHAR=4253 PC0=0200 PDLSET=5755 XADC0=0400 > IFNZRO FOCLST <XLIST> IFZERO FFNASS < EJECT OS-8 FOCAL INTERPRETER /&2 FIELD 1 /MISCELLANEOUS ITEMS *0 ECHOP, ECHO TABC, 0 /TAB COUNTER CNTRX, 0 ATSW, 0 0 0 /FOR OD 0 T=40 /TEXT FIELD NO. DI=20 /DISPLAY FIELD P=10 /PROGRAM FIELD NO. L=00 /LIBRARY FIELD NO. FPNT /ADRESS OF FLOATING POINT(LOC*7) /AUTO INDEX REGISTERS AXIN, 0 /STORAGE INDEX(LOC*10) XRT, 0 /EXTRA XR XRT2, 0 /EXTRA XR MCOMA, -254 /LET'S HOPE IT IS NOT INDIRECTLY ADRESSED! FLTXR, IOBUF-1 /XR FOR FLOATING POINT FLTXR2, 0 /EXTRA FOR F.P. TELSW, 0 /CLEAR IN PROGRESS FLAG TEXTP=. /TEXT POINTERS(LOC*17) AXOUT, LINE1+13 /OUTPUT INDEX XCT, 7777 /UNPACK SWITCH;THESE 4 ARE PUSHED GTEM, 0 /UNPACK STORAGE PC, PC0 /PROGRAM COUNTER THISLN, 0 /LINE POINTER FROM 'FINDLN' THISOP, 0 /CURRENT 'EVAL' OPERATION LASTLN, 0 /BACK POINTER FROM 'FINDLN' DEBGSW, 1 /DEBUG SWITCH;NON ZERO FOR LITERAL PACKST, 0 /RUBOUT PROTECTION PT1, 0 /VARIABLE POINTER LASTV, STVAR /ADRESS OF LAST VARIABLE T1, 0 /TEMP. REGISTER - MAIN T3, 0 /TEMP. REGISTER FOR OUTPUT INBUF, 0 /KEYBOARD INPUT BUFFER BOTTOM, 4400-1 /LAST LOC. AVAILABLE IN FIELD 1 INSUB, 0 /0=GETC;#0=READC INDX, 0 /USED BY FCOM /&3 *40 /FLOATING POINT EX1, 0 /OPERAND STORAGE AC1H, 0 AC1L, 0 OVER1, 0 FLAC=. /FLOATING ACCUMULATOR EXP, 0 HORD, 0 LORD, 0 OVER2, 0 SIGNF, 0 /FLOATING SIGN MINSKI, ACMINS /NEGATE FLAC SUBROUTINE FISW, 0000 /OUTPUT FORMAT INTEGE, FIX /FIX FLAC *54 /VARIABLES - INITIALIZED FOR THE DIALOGUE CNTR, -20 /DELETE AND ERROR COUNTER(ALSO FP) EFOP, 0 /FUNCTION CODE;THESE 4 ARE PUSHED LASTOP, 0 /LAST OPERATION FOR EVAL SORTCN, 0 /NUMBER IN TABLE FROM SORTC BUFR, LINE1+11 /NEXT LOC. IN BUFFER=LAST LOC. IN TEXT ADD, 4300 /CHAR. BUF. IN;THESE 4 ARE RESTORED TOGETHER XCTIN, 0000 /PACK SWITCH OUTDEV, XOUTL /POINTER TO OUT. SUB.(OUTL FOR DEBUG.) INDEV, XI33 /POINTER TO IN. SUB.(I33 FOR DEBUG.) NAGSW, 0001 /4000=ONE;1=ALL;0=GROUP;ALSO PUSHED CHAR, 215 /THE MOST IMPORTANT REGISTER LINENO, 0000 /LINE NUMBER READ BY GETLN GINC, WORDS+2 /=6 FOR 4-WORD-CONSTANT LIST6=. /INPUT LIST FOR "SFOUND" 214 /F.F. (^L) 207 /BELL LIST7=. P337, 337 /LEFT ARROW CLF, 212 /L.F. LIST3=. /EXCRETION LIST CCR, 215 /LIST BRANCHER DMPSW, HLT /(SEARCH CHAR)-VARIABLE /=0000 FOR TRACE ON M20, -20 /ENDS LISTS P77, 77 /DON'T MOVE;AND P77=100!!! /&4 /CONSTANTS P13, 13 /USEFUL CONSTANT PER, 256 /PERIOD M77, -77 /EXTEND CODE TEST P177, 177 /STEP MASK P17, 17 /BCD MASK P277, 277 /"?" M2, -2 /CONSTANT MINUSA, -301 /CONSTANT C260, 260 /ASCII FOR ZERO M240, -240 /SPACE TEST MPER, -256 /PERIOD TEST MCR, -215 /C.R. TEST MFLT, -WORDS /=-4 FOR 4-WORD M5, -5 /PAREN TEST IOREST=. M11, -11 /PAREN TEST C200, 200 /CONSTANT OUTLP, XOUTL /THESE 4 ARE USED TO RESTORE I/O XI33P, XI33 /POINTERS ETC. T2, 0 /TEMP.REG.-FOR NEW INST. ROUTINES PDPTR, PDLSET /POINTER FOR PDL RESET FLARGP, FLARG /DATA ADRESS CFRSX, FLTZER /POINTER TO ZERO DATA & DOUBLE, MULT2 /MULTIPLY FLAC BY 2 FOUTPU, FLOUTP /FLOATING OUTPUT FINPUT, FLINTP /FLOATING INPUT LIBN, LIBFIL CFRS, LINE0 /ADRESS OF DUMMY LINE END, STVAR /FIRST LOCATION ENDT, LINE1 /START OF STORAGE AREA EFUN3I, EFUN3 /FUNCTION RETURN WORDS=4 /PDL INSTRUCTIONS POPA=JMS I . /RESTORE AC XPOPA PUSHJ=JMS I . /RECURSIVE SUB. CALL XPUSHJ POPJ=JMP I . /SUB. RETURN XPOPJ PUSHA=JMS I . /SAVE AC XPUSHA PUSHF=JMS I . /SAVE GROUP OF DATA PD2 POPF=JMS I . /RESTORE GROUP PD3 /&5 /NEW INSTRUCTIONS: GETC=JMS I . /UNPACK A CHARACTER UTRA PACKC=JMS I . /PACK A CHARACTER PACBUF SORTJ=JMS I . /SORT AND BRANCH ON AC OR CHAR SORTB SORTC=JMS I . /SORT CHAR XSORTC PRINTC=JMS I . /PRINT AC OR CHAR OUT READC=JMS I . /READ DATA INTO CHAR AND PRINT IT RDIV, CHIN PRNTLN=JMS I . /PRINT C(LINENO) XPRNT GETLN=JMS I . /UNPACK AND FORM A LINENUMBER XGETLN FINDLN=JMS I . /SEARCH FOR A GIVEN LINE XFIND SPNOR=JMS I . /IGNORE SPACES AND LEADING ZEROS XSPNOR TESTN=JMS I . /PERIOD;OTHER;NUMBER XTESTN TSTLPR=JMS I . /SKIP IF 5.L.SORTCN.L.E.11(I.E. AN L-PAR) LPRTST TSTGRP=JMS I . /SKIP IF G(AC)=G(LINENO) GRPTST TESTC=JMS I . /TERM;NUMBER;FUNCTION;LETTER- AND IGNORE SPACES XTESTC DELETE=JMS I . /REMOVE OLD TEXT LINE PSIN, XDELETE ERROR2=JMS I . /EXCESS SOMETHING ERROR ERROR3=JMS I . /MISCELLANEOUS ERROR ERROR4=JMS I . /FORMAT ERROR ERR2 /VARIOUS NEW POINTERS ETC. CHARLY, 0 /SUPERCHAR DISD, DISPL /DISPLAY POINTER DPC, PCD /PC DTHIS, THISD /THISLN DPT1, PT1D /PT1 DXRT, XRTD /(TAD I XRT) DAXIN, AXIND /(DCA I AXIN) DAXOUT, AXOUTD /(TAD I AXOUT) SECRTV, STSECR /FOR SECRET VARIABLES RECOVR-1 /&6 /FOCAL'S COMMAND/INPUT DRIVER *177 START, START1 /PROGRAM START FROM SELF (INDIRECT) JMP I 176 /CONSOLE START: SW=200 JMP I GOCHN /OS8 CHAIN ENTRY POINT START1, TAD C200 DCA PC /FOR COMMAND MODE IAC /USE ONE IN THE AC TO DCA DMPSW /INIT UNPACK AND TRACE SWITCH DCA DEBGSW /ENABLE TRACE FOR INPUT OF (?) TAD CSTAR /ANNOUNCE PRESENCE JMS I ECHOP /SHOULD WE PRINT A'*' IBAR, TAD BUFR /COMMAND INPUT BUFFER DCA AXIN /FOR UNPACKING DCA XCTIN TAD BUFR /RUBOUT PROTECTION DCA PACKST IGNOR, READC /READ COMMAND STRING SORTJ LIST7-1 INLIST-LIST7 PACKC /SAVE STRING CHARACTER JMP IGNOR CSTAR, 252 /ACKNOWLEDGE CHARACTER P7600, 7600 GOCHN, GOTO INPUTX, PUSHJ /PROCESS IMMEDIATE COMMAND PROC JMS I DPC /TAD I PC SNA /END OF PROGRM? JMP I START /YES DCA PC /SAVE NEW LINE NO TAD PC /START NEW LINE IAC JMP GONE /PROCESS OTHER COMMANDS /TEXT LINE BUFFER FORMAT /#1 : POINTER OR ZERO IN LAST /#2 : LINENO /#3 - #N+1 : TEXT /#N : C.R. /&7 /COMMAND/INPUT PROCESSOR IRETN, PACKC /START TO PACK C.R. PACKC /FINISH C.R. TAD BUFR /INITIALIZE FOR UNPACKING GONE, DCA AXOUT /SETUP CURRENT LINE DCA XCT GETC /READ FIRST CHARACTER CIF CDF L JMS I PDPTR /GO RESET PDL SPNOR /IGNOR LEADING BLANKC TESTN /DOES THE LINE BEGIN WITH 1-9? JMP GZERR /PERIOD =ILLEGAL GROUP ZERO USAGE JMP INPUTX /NO ISZ DEBGSW /YES, DISABLE TRACE FOR REPACKING GETLN /READ THIS LINE NUMBER CLA CLL CML RAR /TEST FOR SINGLE LINE TAD NAGSW SZA CLA ERROR3 /ILLEGAL LINE NUMBER ON INPUT TAD BUFR /SET POINTERS DCA AXIN DCA XCTIN TAD LINENO /SAVE LINE # JMS I DAXIN /DCA I AXIN SPNOR /IGNORE SPACES AFTER LINE NUMBER SKP GETC /READ 1ST AFTER LINENO TERMINATOR SRETN, PACKC /SAVE TEXT AND RESTORE DATA FIELD TAD CHAR /TEST FOR END OF INPUT STRING TAD MCR SZA CLA JMP .-5 DELETE /REMOVE OLD LINE, IF ANY CDF T /TERMINATE THE BUFFER LINE:OLD "ENDLN" TAD I LASTLN DCA I BUFR TAD BUFR /POINT TO NEW NEXT LINE DCA I LASTLN TAD ADD /CHECK FOR EXTRA INFO. SZA DCA I AXIN TAD AXIN /COMPUTE NEW END OF BUFFER IAC DCA BUFR GOKILL, CDF L DCA I LIBN /WE'VE CHANGED SOMETHING CDF P JMP I START /POINTERS MUST BE REINITIALIZED /&8 /LINE NUMBER FORMATION;RANGE OF ACCEPTIBLE LINE NUMBERS /=1.01 TO 31.99 FL100, 7 3100 0 FLP5, 0 P2000, 2000 0 0 XGETLN, 0 /COMPUTED LINE #'S SPNOR /IGNORE SPACES TAD CHAR /'A' IS SPECIAL TAD MINUSA SNA CLA JMP TESTA PUSHJ /EVALUATE NUMBER OR EXPRESSION EVAL JMS I INTEGER /GET GROUP PART TAD P7740 /CHECK IF TOO BIG SMA CLA ERROR2 /BAD GROUP # TAD LORD /GET GROUP AGAIN BSW CLL RAL DCA LINENO /SAVE IT JMS I MINSKI FENT FADD I FLARGP /GET FRACTION FMUL FL100 FADD FLP5 /ROUND UP FEXT JMS I INTEGER TAD LINENO /ADD GROUP TESTA, DCA LINENO CLA CLL TAD LINENO /CHECK FOR ERROR AND P7600 SZA CLA CML TAD LINENO AND P177 SNL SZA GZERR, ERROR2 /ILLEGAL GROUP ZERO USAGE P7740, SMA SZA CLA /SMA FOR 7740 TAD P2000 /SET NAGSW;GROUP=0,LINE=4000,ALL=1 CML RAL DCA NAGSW JMP I XGETLN /&9 /LIST OF FUNCTION ADDRESSES, (NAMES ARE IN "FNTABL") FNTABF=. XABS /ABS -ABSOLUTE VALUE XSGN /SGN -SIGN PART XINT /ITR -INTEGER PART XFX /FX -COMMON TO DIS CONVERSION FRAN /RAN -RANDOM NUMBER XADC /ADC -TIMER-COUNTER-DVM FUCTION ARTN /ATN - FEXP /EXP -EXPONENTIAL FUNCTIONS FLOG /LOG - FSIN /SIN -TRIG FUNCTIONS FCOS /COS - XSQRT /SQT -SQUARE ROOT FIN /INP -CHARACTER INPUT FOUT /OUT -CHARACTER OUTPUT MAGNET /FELD -BRUKER CONTROL XDYS /FDIS -DISPLAY COMMON FUNCTION XCOM /FCOM -FLOATING INTEGER COMMON FIOP /FIOP -INPUT OUTPUT FUCTION XXX /FOUR -AUTONOMOUS FOURIER FUNCTION DAC /FDAC -DAC FUNCTION LUX /FLUX -DIGITAL FLUX INTEGRATOR PD2, 0 CLA CMA TAD I PD2 ISZ PD2 CIF JMS I .+2 JMP I PD2 MPD2 PD3, 0 CLA CMA TAD I PD3 ISZ PD3 CIF JMS I .+2 JMP I PD3 MPD3 XPOPA, 0 CIF JMS I .+2 JMP I XPOPA MPOPA /&10 /RECURSIVE OPERATE, EXECUTE, OR CALL DO, GETLN /EXECUTE ONE LUNE, A GROUP, OR ALL PUSHF /SAVE REST OF THIS LINE TEXTP /ADDRESS OF TEXT POINTERS DGRP, PUSHF /SAVE NAGSW; CHAR; AND LINENO NAGSW TAD NAGSW /CHECK DATA FROM GETLN SPA CLA /SKIP IF GROUP OR ALL JMP DOONE /DO ONE LINE FINDLN /INIT FOR GROUP AND SET THISLN NOP TAD THISLN /TEST FOR GOOD GROUP NUMBER DCA XRT JMS I DXRT /TAD I XRT TSTGRP ERROR2 /NO SUCH GROUP NUMBER DGRP1, PUSHJ /EXECUTE OBJECT LINE AND SET PC PROCESS-2 POPF /RESTORE THE DATA NAGSW JMS I DPC /CHECK FOR END OF TEXT SNA JMP DCONT /ALL DONE IAC DCA PT1 /SAVE POINTER TO LINENO TAD NAGSW /CHECK FOR GROUP SMA SZA CLA JMP .+4 /DO ALL JMS I DPT1 /TEST GROUP TSTGRP JMP DCONT /NOT IN GROUP JMS I DPT1 /READ NEXT LINE NO DCA LINENO JMP DGRP /CONTINUE THE SUBROUTINE DOONE, FINDLN /FIND THE LINE ERROR2 /NO SUCH LINE NUMBER PUSHJ /EXECUTE IT PROCESS POPF /RESTORE CHAR NAGSW DCONT, POPF /RESTORE TEXT POINTERS TEXTP JMP I .+1 /CONTINUE PROCESSING THIS LINE PROC /&11 /DISPLAY FILE INTEGER STORAGE FUNCTION XDYS, JMS I INTEGER CLL TAD MLMIT /TEST OVERFLOW SZL CLA ERROR2 TAD LORD TAD NFILB /FILE START PUSHA TAD CHAR TAD MCOMA /2ND ARG? SZA CLA JMP FIND PUSHJ EVAL-1 POPA DCA INDX JMS I INTEGER CDF DI DCA I INDX JMP OUTDIS FIND, POPA DCA INDX CDF DI TAD I INDX DCA HORD DCA LORD DCA OVER2 TAD P13 DCA EXP OUTDIS, CDF P JMP I EFUN3I MLMIT, -2000 NFILB, DISFIL AXOUTD, 0 CDF T TAD I AXOUT CDF P JMP I AXOUTD PCD, 0 CDF T TAD I PC CDF P JMP I PCD /&12 INLIST=. /INPUT CONTROL CHARACTERS IBAR /B.A. = RESTART IGNOR /L.F. = IGNORE IRETN /C.R. = TERMINATE STRING FLIST2, FLIMIT /,=STANDARD FINFIN /;=SHORT FLIMIT-1 /CR=DUMB FLIST1, FINCR /,=STANDARD FORMAT PROCESS /;=SET;PLUS,.. PC1 /C.R.=SET COMMAND MF, -306 /USED BY TESTC /PRIMARY CONTROL AND TRANSFER GOTO, GETLN /READ THE LINE NUMBER REQUESTE FINDLN /LOCATE IT AND RESET TEXTP ERROR2 /NOT THERE TAD THISLN /SET PC DCA PC PROCESS,GETC /TEST FOR END OF LINE PROC, TAD CHAR /FIRST CHARACTER READY = USE PROC TAD MCR SNA CLA PC1, POPJ /EXIT "PROCESS" SORTC /IGNORE "SPACE",",", AND ";" GLIST-1 JMP PROCESS TAD CHAR /SAVE COMMAND CHARACTER AND P337 /EXECUTE LOWER CASE ALSO PUSHA GETC /GO TO TERMINATOR SORTC GLIST-1 SKP JMP .-4 POPA SORTJ /GO DO COMMAND COMLST-1 COMGO-COMLST ERROR2 /ILLEGAL COMMAND COMMENTS=PC1 /ALSO IS CONTINUE /&13 /OUTPUT COMMAND TEXT WRITE, GETLN /SET LINENO ISZ DEBGSW /DISABLE TRACE FINDLN /SEARCG FOR LINE NUMBER JMP WTESTG /NOT THERE OR GROUP TAD LINENO SZA CLA PRNTLN /PRINT LINE NUMBER AND A SPACE GETC PRINTC /PRINT TEXT OF A LINE TAD CHAR TAD MCR SZA CLA /SKIP IF END OF LINE JMP .-5 JMS I DTHIS /TEST FOR END OF TEXT WTEST2, SNA JMP WX-2 /EXIT;DO NEXT INDIRECT LINE IAC DCA PT1 /SAVE POINTER TO LINENO OF NEXT TAD NAGSW SMA CLA JMS I DPT1 TSTGRP /TRY NEXT LINENO FOR GROUP JMP WX WALL, JMS I DPT1 /SET LINENO DCA LINENO JMP WRITE+2 WTESTG, TAD THISLN /INIT GROUP PRINTOUT JMP WTEST2 DCA DEBGSW POPJ WX, TAD NAGSW SPA SNA CLA /SKIP IF ALL JMP WX-2 PRINTC /PRINT C.R. AGAIN JMP WALL /&14 XTESTC, 0 /TEST THE NATURE OF THE NEXT ALPHANUMERIC - "TESTC" SPNOR /IGNORE SPACES SORTC /TEST THE VARIABLE TERMINATORS TERMS-1 JMP I XTESTC /YES - SORTCN IS SET TAD CHAR /NO ISZ XTESTC TAD MF SNA CLA /TEST FOR "F" JMP XT3 TESTN JMP I XTESTC /. SKP /OTHER JMP I XTESTC /NUMBER ISZ XTESTC XT3, ISZ XTESTC /RETURNS:T;N;F;A JMP I XTESTC XSORTC, 0 /SORT CHAR AGAINST TABLE - "SORIC" TAD I XSORTC DCA XRT2 /1ST ARG IS LIST-1 TAD I XRT2 SPA /LIST IS ENDED BY A NEGATIVE NUMBER JMP SEXC /2AND EXIT = NOT IN LIST CIA TAD CHAR SZA CLA /COMPARE JMP .-6 TAD I XSORTC /COMPUTE INCREMENT : 0 - N CMA TAD XRT2 DCA SORTCN SKP /1ST EXIT = YES SEXC, ISZ XSORTC ISZ XSORTC MASK76, 7600 /CLA JMP I XSORTC /&15 GRPTST, 0 /AC VS LINENO - "TSTGRP" AND MASK76 CIA DCA T2 TAD LINENO AND MASK76 TAD T2 SNA CLA ISZ GRPTST JMP I GRPTST /INPUT FROM TEXT OR KEYBOARD; /IF BACK-ARROW, RESTART INPUT INPUT, 0 /INPUT A CHARACTER TAD INSUB /NON/ZERO FOR KEYBOARD SZA CLA JMP .+3 GETC JMP I INPUT READC SORTJ SPECIAL-1 INFIX-SPECIAL JMP I INPUT ILIST, IF1 /, PROCESS /; PC1 /CR /ENGLISH-FRENCH COMLST=. /COMMAND DECODING LIST "S /SET "F /FOR "I /IF "D /DO "G /GOTO "C /COMMENT "A /ASK "T /TYPE "L /LIBRARY "E /ERASE "W /WRITE "M /MODIFY "Q /QUIT "R /RETURN "O /OPEN /THIS COMMAND LIST IS SPEED OPTIMIZED /&16 /CONDITIONAL TRANSFER PROCESS IF, TESTC /IGNORE SPACES AND TEST JMS I IECALL /T POPA JMS I IPART /F-CHECK FOR PAREN MATCH TAD M2 /A DCA T1 TAD HORD /TEST -,0,+ SPA ISZ T1 /N-TO -1,-2,-3 SPA SNA CLA IF3, ISZ T1 /COUNT COMMAS SKP JMP I COMGO+4 /TRANSFER SORTJ /SEARCH TEXT UNTILL ,;C.R. TLIST-1 ILIST-TLIST GETC JMP .-4 IF1, GETC /MOVE PAST COMMA JMP IF3 IECALL, ECALL IPART, PARTEST /&17 /LOOP CONTROL STATEMENT SET=. /SUBSET OF "FOR" FOR, PUSHJ /LOOPS, ETC. GETARG /LOOK FOR "=" NEXT SPNOR TAD CHAR TAD MEQ SZA ERROR4 /LEFT OF "=" IN ERROR:'FOR' OR 'SET' TAD PT1 PUSHA /SAVE POINTER TO VARIABLE PUSHJ EVAL-1 /GET INITIAL VALUE EXPRESSION POPA DCA PT1 FINT /INITIALIZE NOW FPUT I PT1 FXIT SORTJ /TEST LAST CHAR FROM "EVAL" TLIST-1 FLIST1-TLIST ERROR4 /EXCESS R-PAR FINCR, TAD PT1 /SAVE VARIABLE ADRESS PUSHA PUSHJ /EVALUATE THE INCREMENT,IF ANY EVAL-1 SORTJ /TEST TERMINATORS TLIST-1 FLIST2-TLIST ERROR4 /ILLEGAL TERMINATOR IN 'FOR' FLIMIT, PUSHF /SAVE THE INCREMENT FLARG PUSHJ /GET THE LIMIT(NO ERROR DETECTION AFTER LIMIT) EVAL-1 FCONT, PUSHF /SAVE THE LIMIT FLARG PUSHF /SAVE TEXT OF OBJECT STATEMENTS TEXTP PUSHJ /DO THE OBJECT STATEMENTS PROCESS POPF /RESTORE REMAINING TEXT TEXTP POPF /GET LIMIT FLARG POPF /GET INCREMENT ITER1 POPA /GET VARIABLE ADRESS DCA PT1 /&18 FINT /INCREMENT AND TEST FGET I PT1 /LOAD THE VARIABLE FADD I FINKP /INCREMENT IT FPUT I PT1 /CHANGE IT FSUB I FLARGP /TEST IT FXIT TAD HORD SMA SZA CLA POPJ /END OF LOOP TAD PT1 PUSHA /SAVE ADRESS PUSHF /SAVE INCREMENT AGAIN FINKP, ITER1 JMP FCONT MEQ, -275 FINFIN, PUSHF /SET INCREMENT TO ONE FLTONE JMP FCONT /TRANSFER FUNCTION;FX("0 OR 1",REL.DIS START) /0:FCOM[0-255];1:FCOM[256-511];COMMON VARIABLES SCALED /TO DIS FORMAT;LARGEST EXP IS EVALUATED AND COMES BACK XFX, JMS I INTEGE SZA CLA /FIRST OR SECON HALF TAD FX1000 /SECOND HALF TAD FX1000 /FIRST HALF;DEPENDS ON COMMONSTART PUSHA PUSHJ EVAL-1 /EVALUATE SECOND ARGUMENT JMS I INTEGE TAD FXM140 /REL. START .L. 1400 SZL CLA /INTEGE RETURNS CLL ERROR2 CIF CDF L /GO TO FLD. 0 JMP I .+1 FXLOW FX1000, 1000 FXM140, -1400 /TAKE THE INTEGER PART XINT, JMS I INTEGER /(FIX) JMP I EFUN3I /&19 COMGO=. /COMMAND ROUTINE ADRESSES SET FOR IF DO GOTO /(REFERENCED)(IF3+2) COMMENT ASK TYPE LIB ERASE WRITE MODIFY START1 /RETURN TO COMMAND MODE VIA 'QUIT' RETRN FILER /OPEN /INPUT OUTPUT STATEMENTS ASK, CLA CMA /REMEMBER WHICH CALL TYPE, DCA ATSW TASK, DCA DEBGSW /RE-ENABLE THE TRACE SORTJ /SPECIAL CHARACTER? ALIST-1 ATLIST-ALIST ISZ ATSW /TEST QUOTE SWITCH JMP TYPE2 PUSHJ /DO ASK; SETUP PT1 GETARG TAD CHAR /SAVE IN LINE CHARACTER PUSHA TAD P77 /TYPE QUESTION MARK JMS I ECHOP ISZ INSUB /INDICATE 'READC' IAC /POINT PAST CHAR JMS I FINPUT /READ DATA AND SAVE POPA /RETEST LAST TERMINATOR DCA CHAR JMP ASK /CONTINUE PROCESSING TYPE2, PUSHJ /DO TYPE EVAL JMS I FOUTPUT /PRINT JMP TYPE /&20 TQUOT, ISZ DEBGSW /DISABLE TRACE GETC /TYPE LITERALS SORTJ TLIST2-1 TLIST3-TLIST2 PRINTC JMP TQUOT+1 TINTR, GETC /PAS PERCENT SIGN GETLN /READ FORMAT CONTROL: "%7.03" TAD LINENO DCA FISW /SAVE FORMAT CODE JMP TASK TCRLF2, TAD P15 /PRINT CR ONLY PRINTC /PRINTC HANDLES NULL FOR DELAY! JMP .+3 TCRLF, TAD CCR /EXCLAMATION POINT=CR,LF PRINTC TASK4, GETC /MOVE TO NEXT CHAR JMP TASK P15, 15 /IF DEBGSW=0 : ENABLE FLIP-FLOP "DMPSW" / #0:DISABLE AND RETURN ALL"?" 'S /IF DMPSW = 0: TRACE ON, IF ENABLED / #0: TRACE OFF /IF BOTH = 0 : PRINT TRACE /&21 /SEARCH ROUTINES MODIFY, GETLN /READ LINE NO. FINDLN /LOOK IT UP NOW ERROR2 /NOT THERE = BAD COMMAND UNLESS ZERO TAD BUFR /SET POINTERS DCA AXIN /FOR INPUT DCA XCTIN TAD LINENO /COPY THE SAME LINE NO. JMS I DAXIN /DCA I AXIN TAD AXIN /SAVE START OF NEW LINE DCA PACKST SCONT, JMS I INDEV /READ THE TELETYPE SILENTLY DCA LIST3+1 /SAVE SEARCH CHAR. ISZ DEBGSW /NO BREAKS SCHAR, GETC /TYPE+TEST-F.F. PRINTC /PLAYBACK THE TEXT SORTJ /LOOK FOR MATCH LIST3-1 LISTGO-LIST3 PACKC /SAVE NEW LINE JMP SCHAR SBAR, TAD BUFR /RESTART-B.A. IAC DCA AXIN /SET POINTERS DCA XCTIN SFOUND, READC /READ FROM KEYBOARD SORTJ /TEST LIST6-1 SRNLST-LIST6 SGOT, PACKC /PACK CHAR. JMP SFOUND /MORE /&22 SORTB, 0 /SORT AND BRANCH ROUTINE. - "SORTJ" SNA TAD CHAR /ASSUME CHAR IF AC=0 CIA DCA T2 /SAVE SORT ITEM TAD I SORTB /FIRST ARG IS LIST LESS ONE ISZ SORTB /2AND IS INTRA-LIST LENGTH DCA XRT2 TAD I XRT2 SPA /**LISTS ENDED BY NEGATIVE NUMBER** JMP SEX /READ EXIT TAD T2 /FIND ADRESS SZA CLA JMP .-5 TAD XRT2 /MATCH FOUND TAD I SORTB DCA T2 TAD I T2 DCA T2 /DEBUG: AC=ADRESS JMP I T2 SEX, ISZ SORTB /MATCH NOT FOUND CLA CLL JMP I SORTB /RETURN TO CALLING SEQUENCE OCHAR, 0 /OUTPUT A CHARACTER DCA T2 OUTECH, SKP /ECHO ON TELETYPE? JMP .+5 /NO TAD T2 /YES SNA CLA CLL CML RAR /LET HIM PRINT NULLS! JMS I OUTLP TAD T2 CIF L JMS I NOCARE /OUTPUT IT JMP I OCHAR NOCARE, NOCHAR /&23 EOF, 0 /TRYING TO READ FROM A FILE AFTER END TAD XI33P DCA INDEV /RESET POINTER TO TTY TAD P277 /PRINT A "?" JMS I OUTLP /ON THE TTY JMS I INDEV /READ A CHARACTER JMP I EOF SRNLST=. /'MODIFY' CONTROL CHARACTER TABLE SCHAR /F.F. = CONTINUE SCONT /BELL = CHANGE SEARCH CHAR SBAR /B.A. = RESTART SCONT+1 /L.F. = FINISH THE LINE AS BEFORE LISTGO=. SRETN /C.R. = END THE LINE HERE AS IT IS SGOT /CHAR = SEARCH CHAR ALIST=. /ASK/TYPE LIST OF CONTROLS ": "% 242 /" "! "# "$ GLIST=. SP, 240 /SPACE;REFERENCED! TLIST=. ", "; 215 /C.R. /THIS LIST IS ENDED BY 'TESTC' /&24 /FIND OR ENTER A VARIABLE IN THE LIST GETARG, TESTC /FIRST LETTER OF ARG TLIST2, 0242 /" 0215 /C.R. - FUNCTION OR NUMBER IS NOT AN ARG. ERROR4 /BAD ARGUMENT IN 'FOR','SET',OR 'ASK' GETVAR, DCA XCTIN /PACK INTO ADD. PACKC GETC /SECOND LETTER SORTC /TERMINATOR? TERMS-1 JMP GSERCH /YES TAD CHAR /NO AND P77 /SAVE 2AND LETTER OF NAME TAD ADD DCA ADD GETC /IGNORE THE REST SORTC TERMS-1 JMP GSERCH JMP .-4 GSERCH, TSTLPR /LOOK FOR SUBSCRIPT VIA SORTCN JMP GS1 /NOT SUBSCRIPTED BY L-PAR TAD ADD /SAVE NAME DCA EFOP /FOR RECURSIVE AND ERROR CHECK JMS I GECALL /TO EVAL POPA DCA ADD /RESTORE NAME JMS I PTEST /TEST PAREN MATCH, ETC. JMS I INTEGER /CONVERT TO 12-BIT NUMBER GS1, DCA SUBS /SAVE SUBSCRIPT TAD SECRTV /VARIABLE STARTS WITH SECRET VARIABLES GS3, DCA PT1 TAD PT1 CIA TAD LASTV /TEST FOR END OF LIST SPA SNA CLA JMP GS2 /END SEARCH TAD I PT1 /GET TABLE ENTRY CIA TAD ADD SNA CLA JMP GFND1 /FOUND XX GS4, TAD PT1 /TRY NEXT ONE TAD GINC JMP GS3 PTEST, PARTEST GECALL, ECALL /&25 GS2, TAD LASTV /ADD THE VARIABLE CIA CLL TAD BOTTOM /CHECK FOR OVERFLOW SNL CLA ERROR3 TAD LASTV /UPDATE THE LIST TAD GINC DCA LASTV TAD ADD /SAVE NAME DCA I PT1 ISZ PT1 /SAVE SUBSCRIPT TAD SUBS DCA I PT1 ISZ PT1 /SET PT1 FINT FGET I CFRSX FPUT I PT1 FXIT POPJ /EXIT GFND1, TAD PT1 /FOUND SAME DCA XRT /TEST SUBSCRIPTS TAD I XRT CIA TAD SUBS SZA CLA JMP GS4 /WRONG SUBSCRIPT ISZ PT1 /SET POINTER TO DATA ISZ PT1 POPJ /&26 SUBS=. XSPNOR, 0 /IGNORE LEADING SPACES - "SPNOR" TAD CHAR TAD M240 SZA CLA JMP I XSPNOR GETC JMP XSPNOR+1 XTESTN, 0 /RETURNS: .; OTHER; NUMBER - "TESTN" TAD CHAR TAD MPER SZA ISZ XTESTN TAD M2 DCA SORTCN /SAVE VALUE OF THE NUMBER TAD SORTCN /TEST IF REALLY A DIGIT SPA CLA JMP I XTESTN TAD SORTCN TAD M11 SPA SNA CLA ISZ XTESTN /IF A NUMBER JMP I XTESTN LGOSUB, CLA CLL PUSHJ /EXECUTE THE SUBROUTINE DO+1 TAD SP /LIBRARY SPACE = LIBRARY RETURN DCA CHAR JMP I .+1 LIB+1 RETRN, TAD C200 DCA PC XPOPJ, POPA DCA T2 JMP I T2 ATLIST=. XTAB /: - TABULATOR TINTR /% - FORMAT DELIMITER TQUOT /" - LITERAL DELIMITER TCRLF /! - CARRIAGE RETURN AND LINE FEED TCRLF2 /# - CARRIAGE RETURN ONLY TDUMP /$/- DUMP THE SYMBOL TABLE CONTENTS TASK4 /SP- TERMINATOR FOR NAMES TASK4 /, - TERMINATOR FOR EXPRESSIONS PROCESS /; - TERMINATOR FOR COMMANDS PC1 /C.R.TERMINATOR FOR STRINGS /$/ - FOR TDUMP TERMINATES THE COMMAND /&27 /EVALUATE AN EXPRESSION WHICH /TERMINATES WITH AN R-PAR, ; OR C.R. AND /LEAVE THE RESULT IN FLAC AND IN FLARG DIS1A, DIS ECALL, 0 /RECURSIVE CALL TO "EVAL" PUSHF /SAVE SORTCN,LASTOP,EFOP EFOP TAD ECALL /RETURN TO CALLING PUSHA /ADRESS AFTER NEXT POPJ GETC /MOVE PAST EXTRA CHAR EVAL, DCA LASTOP /EVALUATION CONTROLLER(CHECKPOINT?) JMS I DIS1A /REFRESH DISPLAY TAD CHAR DCA CHARLY /SUPERCHAR SUPERSTAR TESTC /TEST CHAR AND IGNORE SPACES JMP ETERM1 /TERMINATOR JMP ENUM /NUMBER JMP EFUN /FUNCTION PUSHJ /LETTER OF VARIABLE GETVAR /FIND OR CREATE VARIABLE;ALSO SET PT1 OPNEXT, TESTC /PT1 TO ARG JMP ETERMN /T ECHOLS, 0212 /N-ERROR IN FORMAT 0377 /F JMP ETERM+1 /'EVAL'FOUND A TERMINATOR WHICH WAS NOT AN OP. ETERM1, TAD CFRSX /SET PT1 DCA PT1 /TO POINT TO ZERO TAD M2 /TEST FOR UNARY OPERATIONS TAD SORTCN SNA JMP ETERM /CREATE DUMMY FOR UNARY MINUS IAC SNA CLA JMP ARGNXT /IGNORE UNARY PLUS TAD SORTCN /TEST FOR NULL PARENS TAD M11 SPA CLA JMP ELPAR /MIGHT BE AN L-PAR ETERMN, TSTLPR SKP ERROR4 /OPERATOR MISSING BEFORE PAREN ETERM, TAD SORTCN /SET FROM "TESTC"-"SORTC" DCA THISOP TAD THISOP TAD M11 SMA CLA /END? DCA THISOP /&28 ETERM2, TAD THISOP /COMPARE PRIORITIES CIA TAD LASTOP SPA CLA JMP EPAR /CONTINUE TAD LASTOP /FIND OPERATION CLL RTR RTR TAD OPTABL DCA FLOP TAD LASTOP SZA CLA /TEST FOR END OF DATA INTO FLOATING AC POPF /GET LAST DATA FLAC FINT FLOP, 00 /(FLOPR I PT1)+-*/ FPUT I FLARGP /SAVE RESULT FXIT TAD FLARGP DCA PT1 TAD THISOP TAD LASTOP /=0? SNA CLA POPJ /EXIT EVAL POPA /GET PRIOR OP DCA LASTOP JMP ETERM2 /COMPARE THIS OP EPAR, TSTLPR /TEST FOR SUB-EXPRESSION SKP JMP EPAR2 /GO EVALUATE EXPRESSION TAD LASTOP /CONTINUE READING THE EXPRESSION PUSHA /SAVE "LASTOP" TAD PT1 DCA .+2 PUSHF /SAVE LAST ARGUMENT 00 TAD THISOP /MORE TO COME DCA LASTOP ARGNXT, GETC /READ FIRST CHAR OF AN ARG. TESTC /DO SPECIAL CHECK JMP ELPAR JMP ENUM /N JMP EFUN /F JMP OPNEXT-2 /L OPTABL, FGET I PT1 /BASE FOR OPERATION COMPUTATION /&29 ENUM, PUSHF /TO PROCESS ANUMBER,SAVE AC FLAC TAD FLARGP /SET POINTER AS FOR A VARIABLE DCA PT1 DCA INSUB /POINT TO 'GETC' AND USE CHAR JMS I FINPUT /READ TEXT NUMBER INTO FLARG POPF /RESTORE THE AC FLAC JMP OPNEXT /CONTINUE EFUN, DCA EFOP /SET CODE GETC /READ FUNCTION NAME(1,2,3 LETTERS) SORTC /LOOK FOR TERMINATION CHAR TERMS-1 JMP EFUN2 /YES TAD EFOP /NO CLL RAL /MISH-MASH HASH CODE TAD CHAR JMP EFUN EFUN2, TSTLPR ERROR4 /MUST BE FOLLOWED BY PARENS TO SET ARGUMENT JMS ECALL /CALL "EVAL" TO COMPUTE ARGUMENT POPA /BRANCH ON FUNCTION CODE;RETURN VIA EFUN3I SORTJ FNTABL-1 FNTABF-FNTABL ELPAR, TSTLPR /LEFT PAREN OR FELL THROUGH FUNCTION TABLE ERROR4 /DOUBLE OPERATORS OR ILLEGAL FUNCTION NAME EPAR2, JMS ECALL /EVALUATE NESTED EXPRESSION POPA /DUMP EXTRA ARG JMP I EFUN3I /&30 TERMS=. /TERMINATOR TABLE FOR 'EVAL' AND 'GETARG' 240 /0 SPACE "+ /1 "- /2 "/ /3 "* /4 "^ /5 "( /6 "[ /7 274 /10 (LEFT ANGLE BRACKET) ") /11 "] /12 276 /13(RIGHT ANGLE BRACKET) ", /14 "; /15 215 /16 C.R. "= /17 TO END GETARG FROM 'SET' /THREE MINOR FUNCTIONS XADC, CIF CDF L JMP I .+1 XADC0 /FIELD 0 CONNECTOR XSGN, TAD HORD /REAL SIGNUM FUNCTION! SNA CLA JMP EFUN3 PUSHF FLTONE POPF FLAC XABS, TAD FLARG+1 /TAKE ABSOLUTE VALUE OF FLAC SPA CLA /SKIP TO CONTINUE JMS I MINSKI /CONTINUATION OF FUNCTION CALLS EFUN3, FINT FNOR /NORMALIZE FUNCTION RETURN FPUT FLARG /SAVE FUNCTION VALUE FXIT TAD FLARGP /SET POINTER DCA PT1 JMS PARTEST JMP I .+1 OPNEXT /&31 FLARG, 0 /DATA TEMPORARY STORAGE 0 0 0 P3, 3 LPRTST, 0 /SKIP IF LEFT PAREN. - 'TSTLPR' TAD SORTCN TAD M11 SMA CLA JMP I LPRTST TAD SORTCN TAD M5 SMA SZA CLA ISZ LPRTST JMP I LPRTST PARTES, 0 /TEST THE PAREN MATCHINGS POPA /RESTORE THE LAST OPERATION DCA LASTOP POPA TAD P3 /+3 TO COMPARE CODES CIA /CHECK FOR PAREN MATCH TAD SORTCN /(STILL SET FROM THE LAST 'EVAL') SZA CLA /SKIP IF MATCH ERROR4 /PAREN ERROR POPA /DUMP 'BUFR' FROM PUSHF EFOP CLA CLL GETC /MOVE PAST R-PAR JMP I PARTEST /&32 /THE DELETE ALINE ROUTINE XDELET, 0 /UNCHAIN A LINE AND RECOVER THE SPACE IOF /PROTECT POINTER CHANGES FROM INTERRUPTIONS FINDLN /SETS "THISLN" AND "LASTLN" JMP I XDELETE /ALREADY GONE ISZ DEBGSW /DISABLE TRACE GETC /MEASURE LENGTH TAD CHAR TAD MCR SZA CLA JMP .-4 TAD AXOUT /SAVE LAST ADRESS CMA TAD THISLN DCA CNTR /LENGTH .L. 0 TAD CFRS /IT IS ILLEGAL TO DELETE THE FIRST LINE CIA TAD THISLN SNA CLA JMP I START /JUST IGNORE SUCH COMMANDS CDF T /CHANGE DATA FIELD TO TEXT TAD I THISLN /DISCONNECT DCA I LASTLN TAD CFRS /START LIST AT TOP DOK, DCA T2 /EXAMINATION ADRESS TAD I T2 SNA /TEST FOR END JMP DONE /YES-WRAP UP ALL DCA T1 /SAVE NEXT ADRESS TAD THISLN /COMPARE LINE POSITIONS CIA CLL TAD T1 SZL CLA /SKIP IF THISLN .G. X TAD CNTR /CHANGE (X) TO ACCOUNT FOR TAD T1 /GARBAGE COLLECTION DCA I T2 TAD T1 /GET NEXT JMP DOK /&33 /GARBAGE COLLECTION DONE, CMA /BACKUP L FOR XR TAD THISLN DCA XRT TAD CNTR /SETUP END OF HOSE CMA TAD THISLN DCA XRT2 TAD CNTR /CORRECT END OF BUFFER POINTER TAD BUFR DCA BUFR TAD AXIN /COMPUTE COUNT CMA TAD XRT2 DCA T1 TAD AXIN TAD CNTR DCA AXIN TAD I XRT2 /SIPHON LOWER PART DCA I XRT ISZ T1 JMP .-3 JMP XDELETE+1 /RESET 'LASTLN','THISLN', AND DATA FIELD FNTABL=. 2533 /ABS 2650 /SGN 2636 /ITR 0330 /X 2630 /RAN 2517 /ADC 2572 /ATN 2624 /EXP 2625 /LOG 2654 /SIN /LIST OF CODED FUNCTION NAMES 2575 /COS 2702 /SQT 1140 /IN 2672 /OUT 2560 /(F)ELD 2565 /DIS 2567 /COM 2622 /IOP 2670 /(F)OUR 2525 /DAC 2662 /(F)LUX /TECO:^O^T+200*2UX^T+200+QX*2UX^T+200+QX=^D /&34 /ERASE SINGLE LINES, GROUPS, OR VARIABLES ERASE, TESTC /TEST THE SECOND WORD IF ANY JMP ERVX /ERASE THE VARIABLES JMP ERL /LINES OR GROUPS JMP .+4 /ERROR TAD CHAR /ALL TEXT TAD MINUSA SZA ERROR3 /BAD ARG FOR ERASE ERT, TAD ENDT /ERASE ALL TEXT DCA BUFR CDF T DCA I CFRS JMP I GOK /RESTART ERL, GETLN /ERASE LINES TAD BUFR /PROTECT REST OF TEXT DCA AXIN ERG, DELETE /EXTRACT ONE LINE ISZ THISLN TAD NAGSW SMA CLA JMS I DTHIS /(TAD I THISLN) TSTGRP /DONE ERASING GROUP?(SKIP) JMP I GOK /YES,ERASE 'CURRENT PROGRAM SAVED' FLAG JMS I DTHIS /(TAD I THISLN) DCA LINENO JMP ERG ERVX, TAD END /ZERO VARIABLES(BUT NOT SECRET VARIABLES) DCA LASTV /MAY BE INDIRECT COMMAND POPJ GOK, GOKILL /&35 /ROUTINE CALLED VIA "FINDLN": /SEARCH FOR A GIVEN LINE I.D. =[ "LINENO"] /1ST RETURN IF NOT FOUND, /2AND IF FOUND. /"THISLN" = FOUND LINE OR NEXT LARGER /"LASTLN" = LESSER AND/OR LAST /"TEXTP" IS SET XFIND, 0 TAD CFRS /INITIALIZE POINTERS TO FIRST LINE DCA LASTLN TAD CFRS FINDN, DCA THISLN /SAVE THIS ONE TAD THISLN DCA XRT TAD LINENO CLL CMA IAC /CLEAR LINK AND NEGATE LINENO JMS I DXRT /LINENO=0 WILL BE FOUND (X-MEM) SNA JMP FEND3-1 /FOUND IT SZL CLA JMP FEND3 /PASSED IT TAD THISLN /MOVE POINTERS DCA LASTLN JMS I DTHIS /END OF TEXT ? (X-MEM) SZA JMP FINDN /NOT YET SKP ISZ XFIND /2ND EXIT = FOUND FEND3, TAD THISLN /1ST RETURN = NOT FOUND IAC DCA AXOUT /SET "TEXTP" DCA XCT JMP I XFIND /&36 UTRA, 0 /UNPACK CHARACTER. - "GETC" JMS GET1 UTE, SPA CLA /NORM & EXTEND TAD GEND /300-337 & 340-376 TAD M137 /240-276 & 200-236 TAD CHAR SNA JMP UTX /"?" FOUND TAD P337 UTQ, DCA CHAR TAD DEBGSW TAD DMPSW SNA CLA /PRINT ONLY IF BOTH ARE ZERO PRINTC JMP I UTRA EXTR, JMS GET1 CMA JMP UTE UTX, TAD DEBGSW /TEST FOR TRACE-ENABLED M40, SMA SZA CLA /DEBGSW NEVER NEGATIVE JMP .+6 TAD DMPSW /FLIP THE TRACE FLOP SNA CLA IAC DCA DMPSW JMP UTRA+1 /GET NEXT CHARACTER INSTEAD TAD P277 /TRACE DISABLED = RETURN "?" JMP UTQ GET1, 0 /UNPACK 6 BITS ISZ XCT /STARTS=0 JMP GET3 TAD GTEM GEND, AND P77 DCA CHAR /SAVE TAD CHAR TAD M77 SNA CLA JMP EXTR /EXTENDED TAD CHAR TAD M40 JMP I GET1 GET3, JMS I DAXOUT /TAD I AXOUT DCA GTEM CMA DCA XCT TAD GTEM BSW JMP GEND M137, -137 /&37 XPUSHJ, 0 CLA CLL IAC TAD XPUSHJ /BUMP RETURN ADRESS PUSHA /SAVE IT ON STACK TAD I XPUSHJ /GET THE ADRESS DCA XPUSHJ /INDIRECT INDIRECT! JMP I XPUSHJ TLIST3=. TASK4 /" (LITERAL TERMINATORS) PC1 /C.R.=AUTOMATIC QUOTE MATCH INFIX=. /DATA CONTROL CHARACTERS FLINTP+2 /LEFT ARROW=KILL INPUT+1 /RUBOUT=IGNORE INPUT+1 /L.F.=IGNORE ENDFI+15 /ALT MODE=EXIT INPUT+1 /^L=IGNORE FLTONE, 0001 /(NO RELATIVE REFERENCES) 2000 FLTZER, 0000 0000 0000 0000 M12, -12 CHIN, 0 /READ IN A CHARAKTER SUBR. -"READC" JMS I INDEV DCA CHAR SORTC /L.F. OR RUBOUT ? ECHOLST-1 JMP I CHIN /YES PRINTC /ECHO THE INPUT JMP I CHIN ECHO, 0 ION /MAKE SURE! DCA CHAR /SAVE IN CHAR TAD ECHO DCA CHIN /PREPARE RETURN THRU CHIN JMP CHIN+6 /&38 XPRNT, 0 /PRINT A LINENUMBER -"PRINTLN" TAD LINENO AND MSK BSW RAR JMS PRNT /TWO DIGIT PART NUMBER TAD PER PRINTC TAD LINENO JMS PRNT /TWO DIGIT STEP NUMBER TAD SPC DCA CHAR /SAVE SPACE IN CHAR PRINTC /PRINT TRAILING SPACE JMP I XPRNT SPC, 240 VAL=T1 PRNT, 0 /PRINT TWO DEZIMAL DIGITS AND P177 DCA VAL TAD C260 DCA T3 JMP .+3 ISZ T3 XYZ, DCA VAL TAD VAL TAD M12 SMA JMP XYZ-1 MSK, 7600 /CLA TAD T3 PRINTC TAD VAL TAD C260 PRINTC JMP I PRNT /&39 /SYMBOL TABLE TYPEOUT ROUTINE TDUMP, TAD END /INIT POINTER FOR DUMP (DON'T DUMP SECRET VARIABLES) DCA PT1 TAD LASTV /TEST FOR END OF LIST CIA TAD PT1 SNA CLA POPJ TAD I PT1 /GET VARIABLE CDF T DCA I OP+1 CDF P TAD OP /SETUP UNPACK POINTERS DCA AXOUT DCA XCT GETC /READ AND PRINT "XX(" PRINTC GETC PRINTC GETC PRINTC ISZ PT1 TAD I PT1 /PRINT SUBSCRIPT TO 99 JMS I PRNT2 GETC /PRINT ")" PRINTC ISZ PT1 FINT /PICK UP VALUE FGET I PT1 FXIT JMS I FOUTPUT /PRINT VALUE TAD CCR PRINTC TAD GINC TAD M2 TAD PT1 JMP TDUMP+1 PRNT2, PRNT OP, PC0+3 PC0+4 /&40 OUT, 0 /OUTPUT A CHARACTER-"PRINTC" SNA /USE AC OR CHAR TAD CHAR TAD (-15 /7-BIT CR MEANS RETURN ONLY SNA JMP CRONLY TAD MSK /=-200;CHECK FOR CR SNA JMP NEWLIN /TYPE CR,LF TAD (215-240 SMA ISZ TABC /IT PRINTS, INCREMENT COUNT NOP TAD SPC OUTCLF, JMS I OUTDEV JMP I OUT CRONLY, TAD CCR JMS I OUTDEV /PRINT CRONLY DCA TABC TAD C200 /NULL FOR DELAY JMP OUT+3 NEWLIN, DCA TABC TAD CCR /CR JMS I OUTDEV TAD CLF /LF JMP OUTCLF CPRNT, 0 /CROSS-FIELD LINKS PRINTC CIF CDF L JMP I CPRNT PAGE /&41 /INTERRUPT PROCESSOR MBREAK, -220 /^P INTRPT, 0 TSF /GIVE OUTPUT PRIORITY JMP KINT TCF DCA TELSW /TURN OFF THE IN-PROGRESS-FLAG TAD I OPTRI SNA JMP KINT TPC /TYPE NEXT DCA TELSW /CLEAR AC AND TURN ON THE FLAG DCA I OPTRI /ZERO OUT THE DATA AREA TAD OPTRI IAC AND P17 TAD OPTR0 DCA OPTRI KINT, KSF /CHECK FOR KEYBOARD FIRST JMP EXIT KRS /INPUT CHARACTER KCF /CLEAR FLAG AND P177 /IGNORE BLANK AND L-T AND PARITY BIT SNA JMP EXIT-1 /GO INITIATE NEXT READ TAD C200 DCA I SIN TAD I SIN TAD MBREAK /MANUAL STOP ? SNA CLA JMP RECOVR+1 TAD I SIN DCA INBUF SKP KCC /INITIATE NEXT READ /&42 EXIT, TCSD /SKIP DVM JMP .+3 DCA I XNMBSG /CLEARS HORD OF VARIABLE "#" TCEI /TURN OFF INT.-DON'T CLEAR FLAG MASD /SKIP MAGNET JMP .+3 DCA I XEXCLA /VARIABLE "!" MACL /CLEAR FLAG DBSK /SKIP INPUT OUTPUT JMP .+3 DCA I XQUOTS /VARIABLE """ DBDI /DISABLE INTERRUPT INSF /SKIP FLUXMETER JMP .+3 DCA I XPERCT /VARIABLE "%" INCF PCF RCR /CLEAR OTHER FLAGS RRB CIF CDF L JMP I INTRPT SIN, DOLL XNMBSG, NMBSGN XEXCLA, EXCLA XQUOTS, QUOTS XPERCT, PERCEN IOBUF=7600 /&43 OPTR0, IOBUF /OUTPUT POINTER OPTRO, IOBUF OPTRI, IOBUF XI33, 0 /VIA (INDEV) JMS DIS /WHILE WAITING DISPLAY TAD INBUF /ANY INPUT ? SPA SNA JMP .-3 DCA XOUTL DCA INBUF /CLEAR INPUT BUFFER KCC /INITIATE NEXT READ TAD XOUTL JMP I XI33 XOUTL, 0 /VIA (OUTDEV) DCA XI33 /SAVE CURRENT CHAR. ION /BE SURE INT. IS ON JMS DIS /HERE ALSO TAD I OPTRO /ANY ROOM ? SZA CLA /A CHAR. IS NONZERO JMP .-3 /NO = WAIT IOF TAD TELSW /IN PROGRESS ? SZA CLA JMP .+5 TAD XI33 /NO TLS /TYPE CHAR DCA TELSW /SET IN PROGRESS FLAG JMP .+10 /RETURN TAD XI33 /SEND DATA DCA I OPTRO TAD OPTRO /SET POINTERS IAC AND P17 TAD OPTR0 DCA OPTRO ION JMP I XOUTL DIS, 0 /DISPLAY CONNECTOR CIF CDF DI JMS I DISD JMP I DIS /&44 /ERROR RECOVERY PROCEDURE ERR2, 0 ION TAD TELSW /WAIT FOR OUTPUT TO FINISH SZA CLA JMP .-2 CLA CLL CMA /PUT ERROR CODE IN 'LINENO' FOR 'PRNTLN' TAD ERR2 JMP .+3 DCA TELSW /RECOVR-1:START ENTRY RECOVR, TAD C200 DCA LINENO /RECOVR+1:BREAK ENTRY IOF TAD M20 /CLEAR OUTPUT BUFFER DCA CNTR SWAB /BE SURE IT IS IN MODE B CMA TAD OPTR0 DCA AXIN TAD OPTR0 DCA OPTRI TAD OPTR0 DCA OPTRO CDF P DCA I AXIN ISZ CNTR JMP .-2 DCA INBUF /AND INPUT BUFFER RECOVX, PUSHF IOREST /RESTORE I/O POPF ADD TAD .+6 DCA I PRNRES /IN CHIN TAD LINENO SNA CLA /REDUCE OUTPUT FOR BREAK JMP .+4 TAD P277 PRINTC /PRINT A '?' PRNTLN ISZ PC JMS I DPC SNA JMP .+6 DCA LINENO TAD .+2 PRINTC CLA CMA BSW IAC /!! PRNTLN TAD CCR PRINTC JMP I START PRNRES, CHIN+6 /&45 /CHARACTER REMOVAL ROUTINE RUB1, TAD XCTIN /RUBOUT ONE LETTER M140, SZA CLA JMP .+6 TAD AXIN CIA TAD PACKST P7700, SMA CLA /TEST NULL LINE JMP PACX TAD SPLAT /FOR A RUBOUT ACKNOWLEDGEMENT JMS I ECHOP /SHALL WE ECHO A "\" ? TAD AXIN DCA T2 CDF T ISZ XCTIN /TEST HALF JMP RUB2 TAD I T2 /"ADD" IS FULL AND P77 /REFERENCED TAD M77 SZA CLA /TEST FOR EXTEND JMP RUB4 RUB3, CMA /SET SWITCH DCA XCTIN CMA TAD AXIN DCA AXIN TAD I T2 /RESET ADD AND P7700 RUB4, DCA ADD JMP PACX RUB2, TAD I T2 /CHECK FOR EXTENDED AND P7700 TAD RUB3-4 /C=100 SZA CLA JMP RUB3 DCA I T2 /SAVE CORRECTION JMP RUB3+1 SPLAT, 334 /&46 PACBUF, 0 /PACK A CHAR. -"PACKC" TAD P277 CIA TAD CHAR SNA /CHANGE 277 TO 377 TAD P40 TAD P7700 SNA /TEST FOR RUBOUT JMP RUB1 TAD P377 DCA T2 /SAVE INPUT ITEM TAD T2 /SO THAT QUESTION DOESN'T MAKE AND C140 /CHAR LOOK LIKE A LEFT ARROW TAD M140 SZA /DATA WORD TAD C140 SNA CLA JMP ESCA /200-237 & 340-377 PA1, TAD T2 /240-337 AND P77 SZA /IGNORE 300 JMS PCK1 PACX, CDF P JMP I PACBUF ESCA, TAD P77 JMS PCK1 JMP PA1 PCK1, 0 ISZ XCTIN /=0 TO START JMP ROT TAD ADD JMS I DAXIN DCA ADD /CLEAR PACKING WORD CLL TAD TOP /END OF TEXT BUFFER(-) TAD AXIN SNL CLA JMP I PCK1 ERROR2 /FULL BUFFER TOP, -ENDTXT P40, 40 P377, 377 C140, 140 ROT, BSW DCA ADD CMA DCA XCTIN JMP I PCK1 /&47 FIN, DCA LORD /SINGLE CHAR. INPUT FUNCTION DCA OVER2 /CLEAR FLAC TAD SORTCN /IN CASE OF RUBOUT OR LF DCA FOUT-1 READC TAD CHAR /FLOAT IT DCA HORD TAD P13 DCA EXP TAD FOUT-1 DCA SORTCN JMP I EFUN3I 0 FOUT, JMS I INTEGE SNA /SINGLE CHAR, OUTPUT FUNCTION CLA CLL CML RAR /IN CASE IT'S ZERO PRINTC JMP I EFUN3I *3200 ICHARF, 0 /INPUT A CHARACTER FROM A FILE CIF CDF L JMS I .+2 JMP I ICHARF ICHAR *3206 /SECRET VARIABLES STSECR=. 4500 PERCEN=.+2 ZBLOCK 5 4400 DOLL=.+2 ZBLOCK 5 4300 NMBSGN=.+2 ZBLOCK 5 4200 QUOTS=.+2 ZBLOCK 5 4100 EXCLA=.+2 ZBLOCK 5 /INTRPT VARIABLES 2011 /SECRET PI 0000 0002 3110 3755 2421 STVAR=. PAGE > IFNZRO FOCLST <XLIST>