mirror of
https://github.com/PDP-10/its.git
synced 2026-04-18 17:08:05 +00:00
We previously had HQM; CLOGO BIN dated 1975. When run, it announces itself as LOGO.44. RJL; LOGO 49 has a timestamp from 1973, but appears to be a later version including turtle graphics on the 340 display.
2392 lines
45 KiB
Plaintext
2392 lines
45 KiB
Plaintext
|
||
THING: MOVE A,(S)
|
||
|
||
THING2: MOVE B,VP
|
||
PUSHJ P,LOOKUP
|
||
JRST THING3 ;NOT A GLOBAL VARIABLE
|
||
JRST THING4
|
||
|
||
THING3: MOVE A,(S)
|
||
MOVEI B,MV
|
||
PUSHJ P,SYSLUK
|
||
MOVEI N,[W+WORDF\EMPTYF,,0]-1
|
||
MOVE A,1(N) ;MACHINE VARIABLES MUST BE CHECKED
|
||
JUMPL A,(A) ;THIS ONE MUST BE COMPUTED, (FLAG IS SIGN BIT)
|
||
THING4: MOVE A,1(N)
|
||
MOVEM A,(S)
|
||
POPJ P,
|
||
|
||
|
||
CCONTE: POP S,A ;COMPUTE /CONTENTS/
|
||
PUSHJ P,NEWSTR
|
||
TRZ F,TF\NWF
|
||
MOVEI C,0
|
||
MOVE D,RP
|
||
MOVNI E,1
|
||
CCNTE1: SKIPN A,(D) ;ANY MORE PROCEDURE NAMES?
|
||
JRST ENDST1 ;NO
|
||
MOVEI D,1(D)
|
||
CAMN E,(D) ;IS THIS ONE DEFINED?
|
||
AOJA D,CCNTE1 ;NO
|
||
MOVEI C,"
|
||
TRON F,TF ;FIRST ONE?
|
||
JRST .+3 ;YES
|
||
TRO F,NWF ;NOT FIRST
|
||
DPB C,B ;NO REPLACE EOM WITH SPACE
|
||
PUSHJ P,NEWSR0
|
||
PUSHJ P,COPYAB
|
||
AOJA D,CCNTE1
|
||
|
||
IFE LFLAG,[ ;SENTENCE OPERATIONs---NO LISTS
|
||
FIRST:
|
||
PUSHJ P,NEWOPS ;CHECK EMPTY,SET UP SRCBOT+NEWBOT
|
||
JRST FSTSNT ;NO, SENTENCE
|
||
|
||
ILDB C,A ;FIRST BYTE
|
||
IDPB C,B ;BOMBS HERE ON FULL WORKSPACE
|
||
|
||
MOVEI C,0 ;FILL ZEROES AND RETURN NEW ARG
|
||
JRST BTFCL1
|
||
|
||
FSTSNT: ILDB C,A ;FIRST OF SENTENCE
|
||
JUMPE C,FSTWD
|
||
CAIN C,"
|
||
JRST FSTWD
|
||
IDPB C,B ;COPY CHARACTERS TO END OF FIRST WORD
|
||
JRST FSTSNT
|
||
|
||
FSTWD: CAMN B,NEWBOT ;IS IT EMPTY?
|
||
SKIPA A,[W+WORDF\EMPTYF,,0]
|
||
|
||
HRLZI A,W+WORDF
|
||
HLLM A,0(S)
|
||
MOVEI C,0
|
||
JRST BTFCL1
|
||
|
||
|
||
BUTFIRST:
|
||
PUSHJ P,NEWOPS
|
||
JRST BTFSNT ;NOT A WORD OR EMPTY, IE SENTENCE
|
||
TRZ F,TF
|
||
IBP A ;BUTFIRST OF WORD, SKIP OVER FIRST CHAR
|
||
ILDB C,A ;THIS IS THE SECOND CHAR
|
||
JUMPN C,BTFCOP ;MORE THAN ONE CHAR, COPY TO END OF STRING
|
||
BTFEMW: SKIPA A,[W+WORDF\EMPTYF,,0]
|
||
|
||
BTFEMP: HRLZI A,W+SENTF\EMPTYF ;ONE OF THE MANY WAYS T
|
||
MOVEM A,(S) ;TO GET A POINTER TO EMPTY
|
||
POPJ P,
|
||
|
||
BTFSNT: ILDB C,A ;SKIP OVER FIRST WORD
|
||
JUMPE C,BTFEMP ;WAS ONLY WORD, RESULT IS EMPTY
|
||
CAIE C," ;END OF WORD?
|
||
JRST BTFSNT ;CONTINUE SKIPPING OVER FIRST WORD
|
||
|
||
BTFCP1: ILDB C,A
|
||
BTFCOP:
|
||
BTFCLO: JUMPE C,BTFCL1
|
||
IDPB C,B
|
||
JRST BTFCP1
|
||
|
||
BTFCL1: PUSHJ P,ENDSTR
|
||
POP S,A
|
||
HRRM A,(S) ;NEW STRING, OLD TYPE
|
||
POPJ P,
|
||
|
||
LAST:
|
||
PUSHJ P,NEWOPS
|
||
JRST LSTSNT
|
||
|
||
ILDB C,A
|
||
IDPB C,B ;COPY FIRST CHAR, BUMPING THE CHAR PTR IN B ONCE
|
||
|
||
ILDB C,A
|
||
JUMPE C,BTFCL1 ;DONE WITH THE WORD
|
||
DPB C,B ;PUT THIS CHAR ON TOP OF PREVIOUS ONE
|
||
JRST .-3
|
||
|
||
LSTSNT: MOVE E,A ;SAVE POINTER TO BEGINNING OF WORD
|
||
LSTSN2: ILDB C,A ;CONTINUE WITH THE CURRENT WORD
|
||
CAIN C,"
|
||
JRST LSTSNT ;END OF CURRENT WORD, NOT LAST ONE
|
||
JUMPN C,LSTSN2 ;NULL_END OF SENT, ELSE NOT END OF ANY WORD
|
||
|
||
MOVE A,E
|
||
JRST FSTSNT
|
||
|
||
BUTLAST:
|
||
PUSHJ P,NEWOPS
|
||
JRST BTLSNT
|
||
|
||
ILDB C,A ;BUTLAST OF WORD, COPY WORD AND CLOBBER LAST CHAR
|
||
IDPB C,B
|
||
ILDB C,A
|
||
JUMPE C,BTFEMW ;WAS A ONE CHAR WORD, MAKE AN EMPTY
|
||
IDPB C,B
|
||
ILDB C,A
|
||
JUMPN C,.-2 ;COPY REST OF WORD
|
||
BTLCLO: DPB C,B ;CLOBBER LAST CHAR
|
||
JRST BTFCL1 ;FILL TO END OF WORD
|
||
|
||
BTLSNT: MOVE E,A ;SAVE POINTER TO BEGINNING
|
||
BTLSN1: ILDB C,A ;STEP THRU FIRST WORD
|
||
JUMPE C,BTFEMW ;ALSO LAST, MAKE AN EMPTY
|
||
CAIE C,"
|
||
JRST BTLSN1 ;CONTINUE WITH FIRST WORD
|
||
|
||
BTLSN2: MOVE A,E
|
||
BTLSN9: ILDB C,A ;COPY STEPPED OVER WORD
|
||
IDPB C,B
|
||
CAIE C,"
|
||
JRST BTLSN9
|
||
|
||
MOVE E,A ;SAVE POINTER TO NEXT WORD
|
||
BTLSN4: ILDB C,A
|
||
JUMPE C,BTLCLO ;THIS IS END OF LAST WORD
|
||
CAIN C,"
|
||
JRST BTLSN2 ;END OF WORD, NOT LAST ONE, COPY IT
|
||
JRST BTLSN4 ;NOT END OF WORD, FIND IT
|
||
|
||
;END OF LFLAG=0 CONDITIONAL
|
||
]
|
||
|
||
PUSHJ P,NRMLOP
|
||
WORD:
|
||
WORDX:
|
||
HRLZI A,WORDF
|
||
TDNE A,0(S)
|
||
TDNN A,-1(S)
|
||
ERROR WRDERR ;YOU CAN'T MAKE A WORD OUT OF A SENTENCE
|
||
|
||
CONC: HRLZI C,EMPTYF
|
||
TDNN C,-1(S) ;IS FIRST ARG EMPTY?
|
||
JRST WORD0 ;NO
|
||
POP S,-1(S) ;YES, THEN SECOND ARG IS THE RESULT
|
||
POPJ P,
|
||
|
||
WORD0: TDNE C,(S)
|
||
JRST SPOPJ
|
||
PUSHJ P,NEWSTR ;SET UP B AND NEWBOT
|
||
PUSHJ P,NEWSR1 ;SET UP A TO -1(S) AND SRCBOT
|
||
|
||
ILDB C,A
|
||
JUMPE C,WORD2 ;DON'T COPY EOM FROM FIRST ARG
|
||
IDPB C,B
|
||
JRST .-3 ;COPY WHOLE FIRST ARG
|
||
|
||
WORD2: PUSHJ P,NEWSRC ;SET UP A TO 0(S) AND SRCBOT
|
||
ILDB C,A
|
||
JUMPE C,.+3
|
||
IDPB C,B
|
||
JRST WORD2+1
|
||
POP S,A ;FLUSH SECOND ARG
|
||
JRST BTFCL1 ;FILL ZEROES AND RETURN ONE ARG
|
||
|
||
PUSHJ P,NRMLOP
|
||
SENTENCE:
|
||
HRLZI E,EMPTYF
|
||
TDNE E,0(S)
|
||
TDNN E,-1(S)
|
||
JRST SENT1
|
||
HRLZI A,W+EMPTYF+SENTF
|
||
MOVEM A,-1(A)
|
||
|
||
SPOPJ: POP S,A ;BOTH EMPTY
|
||
POPJ P, ;RETURN EMPTY
|
||
|
||
SENT1: PUSHJ P,NEWSTR
|
||
PUSHJ P,NEWSR1
|
||
|
||
SENT2: ILDB C,A
|
||
JUMPE C,SENT3
|
||
IDPB C,B
|
||
JRST SENT2
|
||
|
||
SENT3: MOVEI C,"
|
||
PUSHJ P,NEWSRC
|
||
TDNN E,-1(S) ;IF FIRST ARG IS EMPTY, DON'T SPACE
|
||
|
||
SENT4: IDPB C,B
|
||
ILDB C,A
|
||
JUMPN C,SENT4
|
||
|
||
POP S,A ;FLUSH SECOND ARG
|
||
HRLZI A,W+SENTF ;CALL NEW THING A SENTENCE
|
||
HLLM A,0(S)
|
||
JRST BTFCL1
|
||
|
||
IFE LFLAG,[ ;NON-LIST OPERATIONS
|
||
|
||
|
||
COUNT: MOVE A,(S) ;THING TO COUNT
|
||
MOVEI B,0 ;COUNT INITIALLY ZERO
|
||
TLNE A,EMPTYF ;IS IT EMPTY?
|
||
JRST COUNT2 ;COUNT=0
|
||
TLNN A,WORDF ;IS IT A WORD?
|
||
AOJA B,COUNT1 ;NO, IT IS A NON-EMPTY SENTENCE
|
||
|
||
HRLI A,440700+W
|
||
MOVNI B,1
|
||
ADD B,@A ;NOW NUMBER OF WORDS -1
|
||
IMULI B,5 ;NUMBER OF CHARS IN ALL BUT LAST WORD
|
||
ADD A,@A ;NOW A POINTS AT LAST WORD
|
||
ILDB C,A ;WORD
|
||
JUMPE C,COUNT2
|
||
AOJA B,.-2
|
||
|
||
COUNT1: HRLI A,010700+W
|
||
COUNTL: ILDB C,A
|
||
JUMPE C,COUNT2
|
||
CAIN C,"
|
||
AOJA B,COUNTL ;COUNT WORDS OF SENT AT BEG OF WORD
|
||
JRST COUNTL ;MORE OF THE SAME WORD
|
||
|
||
COUNT2:
|
||
MOVE A,B ;ARG TO SNM IN A
|
||
PUSHJ P,SNM
|
||
MOVSI C,W+WORDF
|
||
HLLM C,(S)
|
||
JRST BTFCL1
|
||
|
||
|
||
RANDOM: MOVE C,[EXP 1000003]
|
||
IMULB C,RANNO
|
||
ADD C,CRTIM1
|
||
TLZ C,400000 ;MAKE IT +
|
||
MULI C,12
|
||
ADDI C,"0
|
||
JFCL 10,.+1
|
||
PUSHJ P,NEWSTR
|
||
IDPB C,B
|
||
JRST ENDSTR
|
||
] ;END OF LFLAG=0 CONDITIONAL
|
||
|
||
IFN LFLAG,[ ;LIST OPERATIONS
|
||
.INSRT LSTOPS >
|
||
]
|
||
|
||
IFN VFLAG,[ ;VECTOR OPERATIONS
|
||
.INSRT VECOPS >
|
||
]
|
||
|
||
|
||
IFN SNAPFL,[
|
||
CMSQRT: PUSHJ P,NUCONV ;LOGO COMMAND
|
||
MOVE A,E
|
||
PUSHJ P,FLOAT ;THIS IS WHAT HAPPENS WHEN PEOPLE ARE TOO LAZY TO WRITE
|
||
PUSHJ P,SQRT ;FIXED SQRT ROUTINES
|
||
PUSHJ P,FIX
|
||
JRST NUMRET
|
||
]
|
||
IFN SNAPFL+LFLAG,[
|
||
SQRT: MOVEM B,SB
|
||
MOVE B,A
|
||
SQRT1: JUMPLE B,SQ2
|
||
MOVEM C,SC
|
||
PUSH P,[FSC A,0]
|
||
ASHC B,-33
|
||
SUBI B,201
|
||
ROT B,-1
|
||
HRRM B,(P)
|
||
LSH B,-43
|
||
ASH C,-10
|
||
FSC C,177(B)
|
||
MOVEM C,A
|
||
FMP C,SQS1(B)
|
||
FAD C,SQS2(B)
|
||
MOVE B,A
|
||
FDV B,C
|
||
FAD C,B
|
||
FSC C,-1
|
||
FDV A,C
|
||
FADR A,C
|
||
SQ1: POP P,C
|
||
XCT C
|
||
SKIPA C,SC
|
||
SQ2: MOVEI A,0
|
||
MOVE B,SB
|
||
POPJ P,
|
||
]
|
||
EITHER: TROA F,TF
|
||
BOTH: TRZ F,TF
|
||
MOVE A,(S)
|
||
PUSHJ P,PREDIQ
|
||
ERROR PREDR2
|
||
MOVE A,-1(S)
|
||
PUSHJ P,PREDIQ
|
||
ERROR PREDR2
|
||
POP S,B ;SECOND ARG
|
||
MOVEI A,1 ;LENGTH OF "TRUE"
|
||
TRZN F,TF ;SKIP IF DOING EITHER
|
||
MOVEI A,2 ;LENGTH OF "FALSE"
|
||
CAMN A,@WSB ;COMPARE AGAINST LENGTH OF SECOND ARG
|
||
MOVEM B,(S) ;JAM IF EITHER AND TRUE OR BOTH AND FALSE
|
||
POPJ P,
|
||
|
||
NOT: MOVE A,(S)
|
||
PUSHJ P,PREDIQ
|
||
ERROR PREDR1
|
||
POP S,B
|
||
MOVE A,@WSB
|
||
CAIE A,1
|
||
JRST ISTRUE
|
||
JRST ISFALSE
|
||
|
||
EMPTYP: HRLZI A,EMPTYF
|
||
PREDS1: POP S,B
|
||
TDNN A,B
|
||
JRST ISFALSE
|
||
JRST ISTRUE
|
||
SENTP: HRLZI A,SENTF
|
||
JRST PREDS1
|
||
WORDP: HRLZI A,WORDF
|
||
JRST PREDS1
|
||
|
||
IS: POP S,A
|
||
POP S,B
|
||
IS1: MOVE C,@A
|
||
CAME C,@B
|
||
JRST ISFALSE
|
||
ADDI A,1
|
||
TRNE C,377
|
||
AOJA B,IS1
|
||
|
||
ISTRUE: SKIPA A,[XWD WORDF+W,TRUEV] ;POINTER TO "TRUE"
|
||
ISFALSE:MOVE A,[XWD WORDF+W,FALSEV] ;WS PTR TO "FALSE"
|
||
PUSH S,A
|
||
POPJ P,
|
||
|
||
NUMBRP: POP S,A
|
||
PUSHJ P,NUMBRQ
|
||
JRST ISFALSE
|
||
JRST ISTRUE
|
||
|
||
LESSP: MOVE A,(S)
|
||
EXCH A,-1(S)
|
||
MOVEM A,(S)
|
||
GRATRP: PUSH P,WTOP ;BOTH ARGS ARE NUMBERS, REMEMBER CURRENT TOP OF WS
|
||
PUSHJ P,DIFF ;GET THE DIFFERENCE
|
||
POP P,A ;GET THE OLD WTOP
|
||
CAIGE A,WTOP ;SKIP IF GC IN BETWEEN
|
||
MOVEM A,WTOP ;NO, FLUSH ALL GARBAGE GENERATED BY DIFF
|
||
POP S,A ;GET THE RESULT
|
||
HRLI A,010700+W
|
||
ILDB C,A ;GET THE SIGN OF THE RESULT
|
||
CAIE C,"0 ;IS IT ZERO?
|
||
CAIN C,"- ;IS IT NEGATIVE
|
||
JRST ISFALSE ;EITHER ZERO OF NEGATIVE, CANNOT BE GREATER
|
||
JRST ISTRUE
|
||
|
||
ZEROP: MOVE A,(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR ZERERR
|
||
POP S,A
|
||
HRLI A,010700+W
|
||
ILDB C,A ;GET THE FIRST CHAR
|
||
CAIE C,"+ ;IF A SIGN, GET ANOTHER CHAR
|
||
CAIN C,"-
|
||
ZEROP1: ILDB C,A
|
||
JUMPE C,ISTRUE ;NUMBRQ WOULD FAIL ON SIGN ONLY OR EMPTY
|
||
CAIN C,"0
|
||
JRST ZEROP1
|
||
JRST ISFALSE
|
||
|
||
|
||
PUSHJ P,NRMLOP
|
||
MAXIM: PUSH S,-1(S)
|
||
PUSH S,-1(S) ;COPY OF ARGS TO BE DESTROYED BY DIFF
|
||
JRST MINMAX
|
||
PUSHJ P,NRMLOP
|
||
MINIM: PUSH S,0(S)
|
||
PUSH S,-2(S) ;OPPOSITE ORDER FROM MAX
|
||
MINMAX: PUSHJ P,DIFF
|
||
POP S,A ;RESULT OF SUBTRACTION
|
||
POP S,B ;SECOND INPUT TO MIN OR MAX
|
||
HRLI A,010700+W
|
||
ILDB C,A ;GET SIGN OF RESULT
|
||
CAIN C,"- ;IF POSITIVE, THEN FIRST IS RESULT
|
||
MOVEM B,0(S) ; ELSE SECOND ARG IS THE ANSWER
|
||
POPJ P,
|
||
|
||
DIFF: TRO F,PMF
|
||
JRST SUM+1
|
||
PUSHJ P,NRMLOP
|
||
SUM: TRZ F,PMF
|
||
MOVE A,(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR SUMERR
|
||
MOVE A,-1(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR SUMERR
|
||
|
||
PUSHJ P,REVERS
|
||
CAIE D,"-
|
||
TRON F,PMF ;SKIP IF SECOND ARG + AND IS SUBTRACTION
|
||
TRON F,PMF ;SKIP IF ARG2 - & DIFF OR ARG2 + & SUM
|
||
PUSHJ P,TENCOM ;CALLED WITH PMF=1_FILL 9'S
|
||
|
||
MOVE A,(S)
|
||
EXCH A,-1(S)
|
||
MOVEM A,(S)
|
||
|
||
PUSHJ P,REVERS
|
||
CAIN D,"-
|
||
PUSHJ P,TENCOM
|
||
|
||
PUSHJ P,SUMMER
|
||
TRZ F,PMF
|
||
CAIN G,"9 ;RESULT NEG IFF HIGH ORDER DIG =9
|
||
PUSHJ P,TENCOM ;CALLED WITH PMF=0_PUT A "-" AT THE END
|
||
|
||
POP S,A ;FLUSH EXTRA LEADING ZEROES
|
||
HRLI A,350700+W ;SKIPPING OVER FIRST CHAR
|
||
AOJA A,.+2
|
||
SUM8: CAIE C,"0 ;CONSECUTIVE 0?
|
||
MOVE B,A ;NO, SAVE POINTER TO HIGHEST SIGNIFICANT DIG SO FAR
|
||
ILDB C,A
|
||
JUMPE C,.+4 ;END OF STRING
|
||
CAIE C,"- ;MINUS SIGN LIKE A TERMINATOR FOR NEG STRING
|
||
JRST SUM8
|
||
IDPB C,B ;PUT TERMINATOR (IN C) ABOVE MOST SIGNIFICANT DIGIT
|
||
PUSHJ P,ENDSTR
|
||
|
||
;FALL INTO REVERB - REVERSE BACK - AND EXIT FROM SUM FROM REVERB
|
||
|
||
|
||
REVERB: TROA F,TF ;REVERSING BACK, NO MODIFICATION TO STRING
|
||
REVERS: TRZ F,TF ;FIRST REVERSE OF NUMBER, FIDDLE WITH SIGNS
|
||
PUSHJ P,NEWSTR
|
||
PUSHJ P,NEWSRC
|
||
MOVE D,@A
|
||
ADDI A,(D) ;A POINTS AT LAST WORD
|
||
MOVEI G,2(D)
|
||
MOVE C,@A
|
||
TRNE C,77400 ;IS NEXT TO LAST CHAR EOM?
|
||
TRNN F,TF ;SKIP IF BOTH PENULT NON-ZERO AND ADDING A CHAR
|
||
MOVEI G,-1(G)
|
||
HRRZI C,@WTOP
|
||
ADDI C,(G)
|
||
MOVE G,LCORE
|
||
LSH G,12
|
||
SUBI G,1
|
||
CAMLE C,G
|
||
EXPAND WS
|
||
MOVE C,@A
|
||
MOVEI G,0
|
||
JUMPE C,REVERE
|
||
ROT C,6
|
||
ROT C,-7
|
||
TRNN C,177
|
||
AOJA G,.-2
|
||
ROT G,1 ;TIMES TWO
|
||
JRST .+4(G)
|
||
REVERL: SUBI A,1
|
||
MOVE C,@A
|
||
ROT C,-1 ;FLUSH BIT 35
|
||
IDPB C,B
|
||
ROT C,-7
|
||
IDPB C,B ;D
|
||
ROT C,-7
|
||
IDPB C,B ;C
|
||
ROT C,-7
|
||
IDPB C,B ;B
|
||
ROT C,-7
|
||
IDPB C,B ;A
|
||
REVERE: SOJG D,REVERL ;MORE WORDS TO REVERSE
|
||
TRNE F,TF
|
||
JRST REVERO
|
||
MOVEI D,177
|
||
ANDI D,(C) ;SAVE STATE OF SIGN IN D
|
||
MOVEI C,"0
|
||
CAIE D,"+
|
||
CAIN D,"-
|
||
DPB C,B ;REPLACE THE SIGN WITH A "0"
|
||
IDPB C,B ;PUT A ZERO FOR UNSIGNED NUMBERS
|
||
|
||
REVERO: SETZ C, ;SO THAT REST OF WORD WILL BE WIPED
|
||
JRST BTFCL1
|
||
|
||
|
||
TENCOM:
|
||
PUSHJ P,NEWSRC
|
||
PUSHJ P,NEWSTR
|
||
TRO F,TF ;SET CARRY INTO LOW ORDER DIGIT
|
||
ILDB C,A
|
||
JUMPE C,[ERROR]
|
||
NINECM: SUBI C,"0
|
||
MOVNS C
|
||
ADDI C,"9
|
||
TRZE F,TF ;WAS THERE A CARRY INTO THIS POSITION?
|
||
ADDI C,1 ;YES
|
||
CAIG C,"9 ;IS THERE A CARRY OUT OF THIS POS?
|
||
JRST .+3 ;NO
|
||
SUBI C,12
|
||
TRO F,TF
|
||
IDPB C,B
|
||
ILDB C,A
|
||
JUMPN C,NINECM
|
||
|
||
MOVEI D,"-
|
||
TRNN F,PMF
|
||
DPB D,B
|
||
JRST ENDSTP
|
||
|
||
SUMMER: MOVE L,-1(S)
|
||
TRZ F,TF\PMF
|
||
HRLI L,010700+W
|
||
MOVEM L,LINBOT
|
||
PUSHJ P,NEWSRC
|
||
PUSHJ P,NEWSTR
|
||
|
||
SUMMRL: ILDB C,A
|
||
JUMPE C,SUMMR2
|
||
SUBI C,"0
|
||
ILDB E,L
|
||
JUMPE E,SUMMR3
|
||
ADDI C,(E)
|
||
TRZE F,TF ;CARRY?
|
||
ADDI C,1 ;YES
|
||
CAIG C,"9 ;CARRY OUT OF THIS POSITION?
|
||
JRST .+3 ;NO
|
||
SUBI C,12
|
||
TRO F,TF
|
||
IDPB C,B
|
||
MOVEI G,(C)
|
||
JRST SUMMRL
|
||
|
||
SUMMR2: MOVE C,SRCBOT
|
||
EXCH C,LINBOT
|
||
MOVEM C,SRCBOT
|
||
EXCH A,L
|
||
IBP A
|
||
SUMMR3: SUBI L,1 ;UNDEX PTR IN L
|
||
REPEAT 3,IBP L
|
||
ILDB C,L ;GET PREVIOUS CHAR, (WAS 0 OR 9)
|
||
CAIN C,"9
|
||
TRO F,PMF ;NO, IT WAS TEN'S COMPLEMENT
|
||
LDB C,A
|
||
JUMPE C,SUMMR5
|
||
|
||
SUMMR4: TRZE F,TF
|
||
ADDI C,1
|
||
TRNE F,PMF ;WAS IT NEGATIVE?
|
||
ADDI C,11 ;YES, LEADING NINES
|
||
CAIG C,"9
|
||
JRST .+3
|
||
SUBI C,12
|
||
TRO F,TF
|
||
IDPB C,B
|
||
MOVEI G,(C)
|
||
ILDB C,A
|
||
JUMPN C,SUMMR4
|
||
|
||
SUMMR5: POP S,A
|
||
SETZM LINBOT
|
||
JRST BTFCL1
|
||
|
||
;NEGATE A NUMBER
|
||
MINUS: MOVE A,(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR MINERR
|
||
PUSHJ P,NEWSTR ;SET UP B AS DEST.
|
||
PUSHJ P,NEWSRC ;SET UP A AS SOURCE
|
||
ILDB C,A ;GET FIRST CHAR OF NUMBER
|
||
MOVEI D,"- ;SET TO STORE -
|
||
CAIN C,"- ;IS FIRST CHAR -?
|
||
JRST COREST ;YES, DROP IT AND COPY REST
|
||
IDPB D,B ;NO, # IS +, STORE A -
|
||
CAIE C,"+ ;IF FIRST CHAR IS +, DON'T STORE IT
|
||
IDPB C,B ;STORE FIRST DIGIT
|
||
COREST: ILDB C,A ;COPY REST
|
||
JUMPN C,.-2
|
||
JRST ENDSTP
|
||
|
||
PUSHJ P,NRMLOP
|
||
TIMES: TRZ F,PMF
|
||
JFCL 10,.+1 ;CLEAR OVERFLOW FLAG
|
||
MOVE A,(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR SUMERR
|
||
PUSHJ P,MNCON
|
||
POP S,A
|
||
PUSH P,D
|
||
MOVE A,(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR SUMERR
|
||
PUSHJ P,MNCON
|
||
POP S,A
|
||
POP P,A
|
||
TRNE F,PMF
|
||
POPJ P, ;RETURN TO QUOT1 OR REM1
|
||
IMUL D,A
|
||
JRST QT2
|
||
|
||
QUOT: TRO F,PMF
|
||
PUSHJ P,TIMES+1
|
||
QUOT1: JUMPE A,[ERROR DIVBY0]
|
||
IDIV D,A
|
||
QT2: JFCL 10,[ERROR QTOV]
|
||
JRST LNCON
|
||
|
||
REMAIN: TRO F,PMF
|
||
PUSHJ P,TIMES+1
|
||
REM1: JUMPE A,[ERROR DIVBY0]
|
||
IDIV D,A
|
||
MOVE D,E ;GET REMAINDER
|
||
JRST QT2
|
||
|
||
PUSHJ P,NRMLOP
|
||
STIMES: MOVE A,(S)
|
||
PUSHJ P,NUMBRQ
|
||
ERROR SUMERR
|
||
PUSH P,NUMCNT
|
||
PUSHJ P,REVERS
|
||
PUSH P,D
|
||
POP S,A
|
||
EXCH B,(S)
|
||
PUSH S,B
|
||
MOVE A,B
|
||
PUSHJ P,NUMBRQ
|
||
ERROR SUMMER
|
||
PUSH P,NUMCNT
|
||
PUSHJ P,REVERS
|
||
EXCH B,(S)
|
||
POP P,E
|
||
ADDM E,-1(P)
|
||
POP P,E
|
||
TRZ F,PMF
|
||
CAIN D,"-
|
||
TRC F,PMF
|
||
CAIN E,"-
|
||
TRC F,PMF
|
||
STIME2: MOVE E,(P)
|
||
HRRZI C,@WTOP
|
||
ADDI C,(E)
|
||
MOVE G,LCORE
|
||
LSH G,12
|
||
SUBI G,1
|
||
CAMGE C,G
|
||
JRST STIME1
|
||
TLZ F,GCF
|
||
EXPAND WS
|
||
JRST STIME2
|
||
|
||
STIME1: POP P,A
|
||
HRRZ B,WTOP
|
||
ADDI B,1
|
||
HRLI B,010700+W
|
||
MOVEM A,@B
|
||
ADDM A,WTOP
|
||
AOS WTOP
|
||
PUSH S,B
|
||
MOVEI G,1(B)
|
||
ADD G,W
|
||
MOVE A,-1(S)
|
||
PUSHJ P,BINIZE
|
||
MOVE A,-2(S)
|
||
PUSHJ P,BINIZE
|
||
MOVE A,-1(S)
|
||
HRLI A,010700+W
|
||
STIME3: ILDB C,A
|
||
CAIN C,177
|
||
JRST STIME5
|
||
JUMPE C,[AOJA G,STIME3]
|
||
STIME4: MOVE B,-2(S)
|
||
HRLI B,010700+W
|
||
MOVE D,G
|
||
SOJL C,[AOJA G,STIME3]
|
||
STIME6: ILDB E,B
|
||
CAIN E,177
|
||
JRST STIME4
|
||
JUMPE E,[AOJA D,STIME6]
|
||
ADDM E,(D)
|
||
AOJA D,STIME6
|
||
STIME5: MOVEI A,@(S)
|
||
MOVEI A,1(A)
|
||
MOVE D,A
|
||
ADD D,-1(A)
|
||
SUBI D,1
|
||
PUSH P,A
|
||
PUSH P,D
|
||
STIME7: MOVE E,(A)
|
||
IDIVI E,10.
|
||
MOVEM E+1,(A)
|
||
ADDM E,1(A)
|
||
CAIGE A,-1(D)
|
||
AOJA A,STIME7
|
||
JUMPN E,[ERROR]
|
||
JUMPN E+1,[ERROR]
|
||
POP P,D
|
||
POP P,A
|
||
MOVE B,-2(S)
|
||
MOVEM B,NEWBOT
|
||
HRLI B,010700+W
|
||
STIME9: MOVE E,(D)
|
||
JUMPN E,STIME8
|
||
CAIGE A,(D)
|
||
SOJA D,STIME9
|
||
MOVEI C,"0
|
||
IDPB C,B
|
||
JRST STIM10
|
||
STIME8: TRZN F,PMF
|
||
JRST STIM11
|
||
MOVEI C,"-
|
||
IDPB C,B
|
||
STIM11: ADDI E,60
|
||
IDPB E,B
|
||
SETZM (D)
|
||
SUBI D,1
|
||
MOVE E,(D)
|
||
CAIG A,(D)
|
||
JRST STIM11
|
||
STIM10: SUB S,[3,,3]
|
||
MOVEI A,@B
|
||
SETZM 1(A)
|
||
HRLI A,1(A)
|
||
ADDI A,2
|
||
BLT A,1(D)
|
||
JRST ENDSTR
|
||
|
||
BINIZE: HRLI A,010700+W
|
||
BINIZ1: ILDB C,A
|
||
JUMPE C,BINIZ2
|
||
SUBI C,60
|
||
DPB C,A
|
||
JRST BINIZ1
|
||
BINIZ2: MOVEI C,177
|
||
DPB C,A
|
||
POPJ P,
|
||
|
||
NUMRET: MOVE D,A
|
||
LNCON: MOVE A,D
|
||
PUSHJ P,SNM
|
||
JRST ENDSTR
|
||
NUCONV: MOVE A,(S) ;INPUT IS STRING ON S
|
||
PUSHJ P,NUMBRQ ;OUTPUT IS BINARY NUMBER IN E UNLESS STRING NOT NUMERIC
|
||
ERROR ZERERR
|
||
NUMVAL: EXCH D,E
|
||
PUSH P,[NUMVL1]
|
||
MNCON: PUSHJ P,NEWSRC
|
||
MOVEI D,0
|
||
TRZ F,TF ;SAW - SIGN
|
||
JFCL 10,MNCONL
|
||
JRST MNCONL
|
||
|
||
MNCON1: CAIN C,"- ;IS IT -?
|
||
TRO F,TF ;YES, NOTE
|
||
CAIL C,"0 ;IS IT DIGIT?
|
||
CAILE C,"9
|
||
JRST MNCONL ;NO, SIGN, GET NEXT
|
||
IMULI D,10. ;YES, BUILD DEC. #
|
||
ADDI D,-<"0>(C)
|
||
MNCONL: ILDB C,A ;GET DIGIT
|
||
JUMPN C,MNCON1 ;DONE?
|
||
TRNE F,TF ;SET SIGN
|
||
MOVN D,D
|
||
JFCL 10,[ERROR NUMBIG]
|
||
POPJ P, ;RESULT IN D
|
||
NUMVL1: EXCH D,E
|
||
SUB S,[1,,1] ;GET RID OF THE ARGUMENT
|
||
POPJ P,
|
||
|
||
|
||
;NUMERIC ARGUMENT.
|
||
; CALL WITH POINTER TO ARG IN A.
|
||
; IF NOT NUMERIC RETURNS.
|
||
; IF NUMERIC, SKIPS. RETURNS BINARY IN D.
|
||
POP S,A
|
||
NUMARG: PUSH P,A ;SAVE POINTER
|
||
PUSHJ P,NUMBRQ
|
||
POPJ P, ;NUMBRQ RETURNS HERE IF NOT NUMBER
|
||
SETZ D,
|
||
POP P,A ;RESTORE A
|
||
HRLI A,010700+W ;TURN INTO BYTE POINTER TO ARG.
|
||
AOS (P) ;SO RETURN WILL SKIP
|
||
JRST MNCON+1 ;CONVERT TO BINARY.
|
||
|
||
WAIT: .STATUS TYOC,A
|
||
TRNE A,2002
|
||
JRST SLEEP
|
||
MOVEI A,1
|
||
TLNE F,BREAKF
|
||
ERROR BREAK
|
||
.SLEEP A,
|
||
JRST WAIT
|
||
SLEEP: PUSHJ P,NUMVAL
|
||
SLEEP1: MOVEI A,3
|
||
SOJL E,COMEX
|
||
.SLEEP A,
|
||
TLNE F,BREAKF
|
||
ERROR BREAK
|
||
JRST SLEEP1
|
||
|
||
TIME: .RTIME G,
|
||
MOVEI C,":
|
||
PUT66: MOVE E,[440600,,G]
|
||
PUSHJ P,NEWSTR
|
||
PUT661: ILDB H,E
|
||
ADDI H,40
|
||
IDPB H,B
|
||
ILDB H,E
|
||
ADDI H,40
|
||
IDPB H,B
|
||
TLNN E,700000
|
||
JRST ENDSTR
|
||
MOVE H,C
|
||
JUMPE H,PUT661
|
||
IDPB H,B
|
||
JRST PUT661
|
||
CLOCK: .RDTIM A,
|
||
SUB A,TIMEC
|
||
IDIVI A,3
|
||
JRST NUMRET
|
||
.COMPU: .SUSET [.RRUNT,,A]
|
||
IDIVI A,250.
|
||
JRST NUMRET
|
||
RSET: .RDTIME E,
|
||
MOVEM E,TIMEC
|
||
JRST COMEX
|
||
DATE: .RDATE G,
|
||
ROT G,12.
|
||
MOVEI C,"/
|
||
JRST PUT66
|
||
|
||
LOGN: SKIPA G,UNAME
|
||
DIRN: MOVE G,TBL
|
||
MOVEI C,0
|
||
JRST PUT66
|
||
VERSN: MOVE G,VERS
|
||
JRST DIRN+1
|
||
|
||
;HERE FOLLOW THE COMMANDS
|
||
|
||
LF: MOVEI C,12
|
||
LF.1: PUSHJ P,TYO
|
||
JRST COMEX
|
||
CR: MOVEI C,15
|
||
JRST LF.1
|
||
BELL: MOVEI C,7
|
||
JRST LF.1
|
||
FRMFD: MOVEI C,14
|
||
JRST LF.1
|
||
BLNK: MOVEI C,40
|
||
JRST LF.1
|
||
QUOTX: MOVEI C,42
|
||
JRST LF.1
|
||
|
||
PUSHJ P,MULTCM ;FOR MULTIPLE INPUTS
|
||
TYPE: TRZ F,CRF ;DON'T DO CRLF AFTER TOS
|
||
JRST PRINT+1
|
||
PUSHJ P,MULTCM
|
||
PRINT: TRO F,CRF
|
||
POP S,A ;GET THE THING TO TYPE OR PRINT
|
||
PUSHJ P,PTOSS
|
||
TRZE F,CRF ;CALLED BY TYPE OR PRINT?
|
||
LISTXT: PUSHJ P,CRLF ;PRINT
|
||
JRST COMEX
|
||
|
||
ENND: TRZ F,FLUSHF ;IF PROD ALREADY DEFINED THEN WE'RE DONE FLUSHING IT
|
||
SKIPN A,TOPROD
|
||
ERROR ENDERR ;END WHAT? YOU ARE NOT DEFINING ANYTHING
|
||
TLNE F,GETF ;IN ANY CASE, IF GETTING
|
||
JRST ENND1 ;DO NOT TYPE "DEFINED"
|
||
MOVEI A,-1(A)
|
||
MOVE A,@RPA
|
||
PUSHJ P,PTOSS
|
||
MOVEI A,[ASCIZ / DEFINED/]
|
||
PUSHJ P,PTOSSM
|
||
PUSHJ P,CRLF
|
||
ENND1: SETZB A,TOPROD
|
||
PUSHJ P,MOVEMP
|
||
JRST COMEX
|
||
|
||
|
||
|
||
|
||
;COMMAND TO CHANGE CORMAX. CORMAX IS INITIALLY 15
|
||
.CORMX: POP S,A
|
||
PUSHJ P,NUMARG ;CONVERT TO BINARY
|
||
ERROR ZERERR ;RETURNS HERE IF NOT NUMBER.
|
||
MOVEM D,CORMAX ;D HAS NUMBER IN BINARY.
|
||
JRST COMEX
|
||
|
||
ABBREVIATE:
|
||
PUSHJ P,EVAL ;EVAL FIRST ARG
|
||
PUSHJ P,GNE
|
||
ERROR ERMSSG ;SOMETHING MISSING, IE SECOND ARG
|
||
SOS CPP
|
||
CAMN A,[XWD MPF,ASL+1] ;IS IT "AS"?
|
||
AOS CPP ;YES, SKIP IT
|
||
PUSHJ P,EVAL ;GET SECOND ARG
|
||
MOVE A,0(S) ;SECOND ARG, ABBREVIATION
|
||
MOVE B,UA ;USER ABBREVIATION TABLE
|
||
PUSHJ P,LOOKUP
|
||
JRST ABBRV1
|
||
POP S,A ;FOUND IT, FLUSH ABBREVIATION
|
||
POP S,1(N) ;SAVE ITS NEW VALUE
|
||
JRST COMEX
|
||
|
||
ABBRV1: MOVEI A,2(N) ;NOT FOUND, INSERT AT END OF TABLE
|
||
CAML A,UA+1 ;ROOM FOR TWO MORE WORDS AT END?
|
||
EXPAND UA ;NO, MAKE ROOM
|
||
POP S,0(N) ;ABBREVIATION FIRST
|
||
POP S,1(N) ;VALUE SECOND
|
||
SETZM 2(N) ;REPLACE END CONDITION
|
||
JRST COMEX
|
||
|
||
LOGIN: MOVEI D,H
|
||
PUSHJ P,GNE
|
||
ERROR NOTHER ;USER DIDN'T TYPE LOGIN NAME
|
||
PUSHJ P,FILGT1 ;CONVERT NAME TO SIXBIT
|
||
MOVEM H,DFILEI+1
|
||
MOVEM H,DFILEO+1
|
||
MOVEM H,TBL
|
||
MOVEM H,FILEO+1
|
||
MOVEM H,LFILEO+1
|
||
MOVEM H,UNAME
|
||
SKIPE MONITX
|
||
.VALUE VALRET
|
||
SKIPN UNAME
|
||
ERROR USEDNM
|
||
HRRZS FILEO
|
||
.SUSET [.SSNAM,,FSNAME]
|
||
.OPEN DCHN,FILEO
|
||
ERROR NOTHER
|
||
.CLOSE DCHN,
|
||
IFN 105,[
|
||
MOVE C,[[ASCIZ /LOGO/],,[ASCIZ /DUMP/]]
|
||
MOVEM C,TBL+1
|
||
MOVEI TA,TBL
|
||
PUSHJ P,READF
|
||
SKIPN A
|
||
TLO F,GETF\ERRORF
|
||
MOVEI A,NEOFIL
|
||
MOVEM A,EOFJMP
|
||
] .SUSET [.SSNAM,,DSNAME]
|
||
.OPEN CSC,DFILEI
|
||
JRST LOGIN2
|
||
.OPEN DRIBC,DFILEO
|
||
ERROR .
|
||
LOGIN1: .IOT CSC,C
|
||
SKIPL C
|
||
.IOT DRIBC,C
|
||
JUMPG C,LOGIN1
|
||
.CLOSE CSC,
|
||
SETOM DRIBX
|
||
MOVEI B,[ASCIZ \
|
||
WELCOME TO LOGO! \]
|
||
PUSHJ P,TOSS
|
||
PUSHJ P,VERSN
|
||
POP S,A
|
||
PUSHJ P,PTOSS
|
||
PUSHJ P,CRLF
|
||
PUSHJ P,TIME
|
||
POP S,A
|
||
PUSHJ P,PTOSS
|
||
PUSHJ P,CRLF
|
||
PUSHJ P,DATE
|
||
POP S,A
|
||
PUSHJ P,PTOSS
|
||
PUSHJ P,CRLF
|
||
JRST LOGIN3
|
||
LOGIN2: .CLOSE DRIBC,
|
||
SETZM DRIBX
|
||
LOGIN3: .SUSET [.SSNAM,,FSNAME] ;THESE TWO USELESS INSTRUCTIONS ARE
|
||
.OPEN DCHN,FILEO ;ARE NEEDED TO REOPEN DCHN WHICH IS
|
||
;IS CLOSED FOR SOME GOD AWFUL REASON ABOVE
|
||
ERROR NOTHER ;THIS ERROR SHOULDN'T EVER OCCUR
|
||
TLNE F,GETF
|
||
JRST LOGGET
|
||
JRST COMEX
|
||
|
||
GOODBY: SKIPN LFILEO+1
|
||
JRST GOODB1
|
||
IFN 105,[
|
||
MOVE C,[[ASCIZ /LOGO/],,[ASCIZ /DUMP/]]
|
||
MOVEM C,TBL+1
|
||
.SUSET [.SSNAM,,FSNAME]
|
||
PUSH P,[.+2]
|
||
JRST GBSAVE
|
||
]GOODB1: MOVEI B,[ASCIZ \
|
||
AND A PLEASANT DAY TO YOU!\]
|
||
PUSHJ P,TOSS
|
||
.VALUE [ASCIZ \:KILL :V \]
|
||
|
||
|
||
BUG: POP S,D ;SAVE NEW BUG MESG
|
||
PUSHJ P,LOGN ;GET LOGIN NAME
|
||
PUSHJ P,DATE
|
||
PUSHJ P,TIME
|
||
PUSHJ P,VERSN
|
||
PUSH S,[WORDF,,SKIPV(W)]
|
||
PUSH S,D
|
||
PUSH S,[WORDF,,SKIPV(W)] ;CR-LF
|
||
MOVEI N,6
|
||
PUSHJ P,SENTENCE
|
||
SOJG N,.-1
|
||
.SUSET [.SSNAM,,[SIXBIT \RJL\]]
|
||
.OPEN CSC,[SIXBIT \ DSKLOGO BUGS\]
|
||
JRST BUG1
|
||
PUSHJ P,NEWSTR
|
||
.IOT CSC,C
|
||
JUMPLE C,.+3
|
||
IDPB C,B
|
||
JRST .-3
|
||
PUSHJ P,ENDSTR
|
||
PUSHJ P,SENTENCE
|
||
BUG1: POP S,A
|
||
MOVEI A,@A
|
||
MOVN B,@A
|
||
ADDI A,1
|
||
HRL A,B
|
||
.OPEN CSC,[SIXBIT \ 'DSKLOGO BUGS\]
|
||
ERROR .
|
||
.IOT CSC,A
|
||
.CLOSE CSC,
|
||
JRST COMEX
|
||
|
||
NEWS: TRZ F,TF
|
||
PUSHJ P,PNEWS
|
||
JRST COMEX
|
||
|
||
PNEWS: .SUSET [.SSNAM,,[SIXBIT \LOGO\]]
|
||
.OPEN CSC,[SIXBIT \ DSKLOGO NEWS\]
|
||
POPJ P,
|
||
PNEW.1: .IOT CSC,C
|
||
JUMPLE C,PNEW.3 ;EOF
|
||
TRNE F,TF ;ON IF CALLED FROM LOGO
|
||
JRST PNEW.4
|
||
PNEW.5: CAIN C,14 ;^L?
|
||
JRST PNEW.2
|
||
PUSHJ P,TYO
|
||
TLNE F,BREAKF
|
||
ERROR BREAK
|
||
JRST PNEW.1
|
||
PNEW.2: .IOT CSC,C ;HAVE SEEN ^L
|
||
JUMPLE C,PNEW.3 ;WAS IT EOF?
|
||
PUSHJ P,CRLF
|
||
MOVEI B,[ASCIZ \CONTINUE?\]
|
||
PUSHJ P,TOSS
|
||
PUSHJ P,TYI ;NO, SHALL WE CONTINUE?
|
||
CAIE C,"Y
|
||
JRST PNEW.3
|
||
PUSHJ P,CRLF
|
||
JRST PNEW.1
|
||
PNEW.4: CAIE C,"% ;OUTPUT STUFF BETWEEN %'S
|
||
JRST PNEW.6
|
||
.IOT CSC,C
|
||
JUMPLE C,PNEW.3
|
||
TRC F,TISLF ;FIRST % MUST BE FIRST CHAR
|
||
PNEW.6: TRNE F,TISLF
|
||
JRST PNEW.5
|
||
PNEW.3: .CLOSE CSC,
|
||
POPJ P,
|
||
|
||
TEST: MOVE A,(S) ;DON'T POP IN CASE ERROR PREDR1
|
||
PUSHJ P,PREDIQ ;IS THE INPUT A PREDICATE?
|
||
ERROR PREDR1 ;NO
|
||
POP S,B ;NOW CAN POP
|
||
MOVEI B,0
|
||
SKIPN @A ;0 FOR "FALSE"; "TRUE" FOR "TRUE"
|
||
MOVNI B,1
|
||
MOVEM B,TRUTH
|
||
JRST COMEX
|
||
|
||
IF: PUSHJ P,GNE ;GET NEXT ELEMENT
|
||
ERROR ERMSSG
|
||
CAMN A,[XWD MPF,TRUEL+1]
|
||
JRST IFTRUE ;IF TRUE
|
||
CAME A,[XWD MPF,FALSEL+1]
|
||
JRST IFPRED
|
||
IFFALS: MOVE C,TRUTH
|
||
JUMPN C,IFX2 ;IF FALSE AND TRUTH=FALSE
|
||
IFXFLS: AOS A,CPP ;FLUSH THIS LINE
|
||
SKIPE @CSA
|
||
AOJA A,.-1
|
||
MOVEM A,CPP
|
||
JRST SCOMEX
|
||
|
||
IFTRUE: MOVE C,TRUTH
|
||
IFX1: JUMPN C,IFXFLS ;IF TRUE AND TRUTH=FALSE, FLUSH LINE
|
||
IFX2: POP P,0(P) ;DO REST OF LINE AS IF IF WASN'T THERE
|
||
JRST EXCTCM
|
||
|
||
IFPRED: SOS CPP ;BACK UP OFF PREDICATE
|
||
PUSHJ P,EVAL
|
||
MOVE A,(S) ;(SEE TEST, ABOVE)
|
||
PUSHJ P,PREDIQ
|
||
ERROR PREDR1
|
||
PUSH P,A ;SAVE RESULT OF PREDIQ
|
||
POP S,A
|
||
PUSHJ P,GNE ;LOOK AHEAD FOR "THEN"
|
||
JRST .+2 ;NO, EOL
|
||
CAME A,[MPF,,THENL+1] ;IF YES, SKIP OVER IT
|
||
SOS CPP ;NO, BACK UP
|
||
POP P,A
|
||
SKIPE @A
|
||
JRST IFX2 ;TRUE, DO REST OF LINE
|
||
PUSHJ P,GNE ;FALSE, SCAN DOWN TO "ELSE" OR EOL
|
||
JRST SCOMEX ;EOL, DO NOTHING
|
||
CAME A,[MPF,,ELSEL+1] ;IS IT ELSE?
|
||
JRST .-3 ;NO, TRY AGAIN
|
||
JRST IFX2 ;YES, DO ST OF LINE
|
||
|
||
IMAKE: SOS CPP ;INFIX MAKE
|
||
MAKE: MOVE A,-1(S)
|
||
TLNE A,EMPTYF
|
||
ERROR NMERR5 ;NAME NOT ALLOWED TO BE EMPTY
|
||
PUSHJ P,NUMBRQ
|
||
SKIPA
|
||
ERROR NMERR6
|
||
|
||
MOVE A,-1(S)
|
||
HRRZI B,MV
|
||
PUSHJ P,SYSLUK
|
||
JRST .+2
|
||
ERROR TOERR3 ;X IS USED BY LOGO
|
||
MOVE A,-1(S)
|
||
HRRZ B,VP
|
||
PUSHJ P,LOOKUP
|
||
PUSHJ P,MAKEN ;NOTA, MAKE A NEW GLOBAL
|
||
MAKE1: POP S,A
|
||
DPB A,[3600,,1(N)] ;PUT THE VALUE AWAY, DON'T CLOBBER GLOBAL BIT
|
||
POP S,A ;FLUSH THE NAME
|
||
JRST COMEX
|
||
|
||
MAKEN: MOVEI B,2(N)
|
||
CAMLE B,VP+1
|
||
EXPAND VP
|
||
MOVE A,[XWD W+WORDF\EMPTYF\GLOBLV\UNBOUN,0] ;INTIALLY
|
||
MOVEM A,1(N) ;CLOBBER(GLOBAL) VALUE TO EMPTY
|
||
MOVE A,-1(S)
|
||
MOVEM A,(N)
|
||
SETZM 2(N)
|
||
POPJ P,
|
||
|
||
|
||
|
||
LOCAL: SKIPN PRODNM
|
||
ERROR STOERR ;LOCAL CAN ONLY BE STORED
|
||
AOS CPP
|
||
LOCAL1: MOVE E,DTOP
|
||
MOVE D,DP+1
|
||
SUB D,DP ;END RELATIVE TO BEGINNING
|
||
CAIGE D,2(E) ;WILL ANOTHER ENTRY FIT
|
||
EXPAND DP ;NO
|
||
ADD E,DP ;MAKE ABSOLUTE
|
||
PUSH P,E
|
||
MOVE A,(S)
|
||
MOVEI B,MV
|
||
PUSHJ P,SYSLUK ;IS THE THING TRYING TO BE LOCALED A SYS VAR?
|
||
JRST .+2 ;NO
|
||
ERROR LCERR1
|
||
MOVE A,(S)
|
||
PUSH S,A ;FOR MAKEN
|
||
MOVE B,VP ;SEE IF ON GLOBAL LIST
|
||
PUSHJ P,LOOKUP
|
||
PUSHJ P,MAKEN ;NOT THERE, MAKE A NEW ONE
|
||
MOVE B,[XWD W+WORDF\EMPTYF\UNBOUN,0]
|
||
EXCH B,1(N) ;OLD VALUE
|
||
POP P,E
|
||
MOVEM B,1(E)
|
||
SUB N,VP
|
||
ADDI N,1
|
||
MOVEM N,(E)
|
||
SETZM 2(E) ;NEW END
|
||
MOVEI A,2
|
||
ADDM A,DTOP ;TOP OF LIST IS HIGHER
|
||
POP S,A
|
||
POP S,A
|
||
MOVE A,CPP
|
||
MOVE C,@CSA
|
||
JUMPE C,SCOMEX
|
||
TLNE C,COMMTF
|
||
JRST SCOMEX
|
||
CAME C,[XWD MPF,ANDL+1]
|
||
JRST LOCAL2
|
||
AOS A,CPP
|
||
MOVE C,@CSA
|
||
JUMPE C,[ERROR ERMSSG]
|
||
LOCAL2: PUSHJ P,INVAL
|
||
JRST LOCAL1
|
||
|
||
;HERE FOLLOWS ALL THERE IS TO USER DEFINED PROCEDURES
|
||
;DEFINING THEM, EXECUTING THEM, CHANGING TITLES AND TRACING
|
||
|
||
TITLEX: SKIPN TOPROD ;IS THERE A PROCEDURE OPEN?
|
||
ERROR NOEDIT ;NO, CANNOT RETITLE NO PROCEDURE
|
||
PUSHJ P,GNE
|
||
ERROR ERMSSG
|
||
CAME A,[XWD MPF,TOL+1] ;IS THE NEXT THING "TO"
|
||
ERROR TOERR6
|
||
TLO F,TITLEF
|
||
JRST TO0
|
||
TO: TLZ F,TITLEF
|
||
SKIPE TOPROD ;IS THERE A PROCEDURE ALREADY OPEN
|
||
ERROR TOERR4 ;YES
|
||
TO0: MOVE H,CPP
|
||
PUSHJ P,GNE ;NEXT NON-COMMENT ELEMENT
|
||
ERROR TOERR5 ;MUST HAVE A PROCEDURE NAME
|
||
TLNN A,UPRF
|
||
JRST TONG ;PROC. NAME NO GOOD, FIND OUT WHY
|
||
MOVEI E,(A)
|
||
MOVE G,@RPA
|
||
CAMN G,[EXP -1] ;IS THE PROCEDURE ALREADY DEFINED?
|
||
JRST TO1 ;NO, ALWAYS OK
|
||
TLNE F,GETF ;DOING A GET?
|
||
JRST TOGET ;YES
|
||
HRRZ B,TOPROD
|
||
TLNE F,TITLEF ;ARE WE DOING "TITLE"?
|
||
CAIE B,(A) ;YES, IS IT THIS PROCEDURE?
|
||
ERROR TOERR8 ;NO TO EITHER
|
||
TO1: SETZ M, ;COUNT OF DUMMIES ENCOUNTERED
|
||
PUSHJ P,GNE ;NEXT NON-COMMENT ELEMENT
|
||
JRST TOA ;NO DUMMIES
|
||
TO2: TLNN A,VARF ;IS IT A DUMMY?
|
||
ERROR TOERR2 ;NO
|
||
TLNE A,W
|
||
ERROR TOERR9
|
||
MOVEI M,1(M) ;YES, COUNT IT
|
||
TO3: PUSHJ P,GNE ;CHECK FOR "AND"
|
||
JRST TOA ;NOTHING, SO NO AND
|
||
CAME A,[XWD MPF,ANDL+1] ;IS IT "AND"?
|
||
JRST TO2 ;NOT AND, TRY DUMMY
|
||
PUSHJ P,GNE
|
||
ERROR ;"AND" LAST, NOT WELL FORMED
|
||
JRST TO2 ;IT MUST EXIST AND BE A VARIABLE
|
||
|
||
TONG: TLNN A,MPF
|
||
ERROR TOERR6
|
||
ERROR TOERR3
|
||
|
||
|
||
TOGET: TRO F,FLUSHF ;LOADING AN ALREADY DEFINED PROCEDURE
|
||
MOVEM A,TOPROD ;SO LET IT BE OPEN
|
||
MOVEI A,-1(A)
|
||
MOVE A,@RPA ;PROCEDURE NAME
|
||
PUSHJ P,PTOSS
|
||
MOVEI A,[ASCIZ / IS ALREADY DEFINED/]
|
||
PUSHJ P,PTOSSM
|
||
PUSHJ P,CRLF
|
||
JRST IFXFLS
|
||
|
||
TOA: TLNN F,TITLEF ;TITLE LINE NOW VALID
|
||
JRST TOB ;TO, NOT TITLE
|
||
MOVE A,TOPROD
|
||
MOVNI G,1
|
||
EXCH G,@RPA ;OLD PROCEDURE OPEN NOW UNDEFINED
|
||
HRLI G,-1(M) ;NO OF DUMMIES-1,LOC OF DIRECTORY
|
||
MOVEI A,(E)
|
||
MOVEM A,TOPROD ;NEW PROCEDURE NAME NOW OPEN
|
||
MOVEM G,@RPA ;AND DEFINED
|
||
|
||
|
||
MOVEI A,(G)
|
||
MOVEM M,@PSA ;NUMBER OF DUMMIES
|
||
MOVEI A,1(A)
|
||
PUSHJ P,TOLINH
|
||
JRST SCOMEX
|
||
|
||
TOB: MOVEM E,TOPROD ;PROCEDURE NOW OPEN
|
||
HRLZI G,-1(M)
|
||
HRR G,PTOP ;NEW DIRECTORY GOES HERE
|
||
MOVEI A,(E)
|
||
MOVEM G,@RPA ;PROCEDURE DEFINED
|
||
MOVEI A,(M)
|
||
PUSHJ P,MOVEMP
|
||
MOVEI G,(A) ;SAVE PSA PTR TO COMPILE CODE PTR
|
||
PUSHJ P,MOVEMP ;MAKE A HOLE
|
||
MOVEI A,(G) ;GET PSA PTR BACK
|
||
PUSHJ P,TOLINJ
|
||
JRST SCOMEX
|
||
|
||
MOVEMP: MOVE D,PTOP
|
||
MOVEM A,@PSD
|
||
AOS A,PTOP
|
||
MOVEI B,@PSA
|
||
CAML B,PS+1
|
||
EXPAND PS
|
||
SETZM @PSA
|
||
POPJ P,
|
||
|
||
|
||
TOFLUS: MOVE A,CBOT
|
||
MOVEM A,CTOP
|
||
POPJ P,
|
||
|
||
TOLINE: SKIPN TOPROD ;IS THERE A PROCEDURE OPEN
|
||
ERROR INERR3 ;LINE X OF WHAT PROCEDURE?
|
||
TRNE F,FLUSHF
|
||
JRST TOFLUS
|
||
MOVE A,CBOT ;POINTER TO BASE OF NEW COMPILED LINE
|
||
MOVEI H,1(A)
|
||
MOVE L,@CSA
|
||
HRLI L,010700+W
|
||
PUSHJ P,DNM
|
||
ERROR IOPERR ;I AM IN TROOUBLE
|
||
CAIL M,100000.
|
||
ERROR INERR2 ;LINE NO TOO LARGE
|
||
JUMPE M,[ERROR INERR4] ;LINE NO =0
|
||
|
||
; TLO F,TITLEF ;NOTE THAT FIRST WORD OF COMPILED LINE TO BE FLUSHED
|
||
HRRZ A,TOPROD
|
||
JSP C,SRCHL1
|
||
CAIGE B,(M)
|
||
JRST TOLING
|
||
|
||
CAIN B,(M) ;LINE NO ALREADY EXISTS?
|
||
AOJA A,TOLINH ;YES
|
||
|
||
TOLING: SETOM NXLINE ;CANNOT SAFELY ASSUME THAT THE PROCEDURE WE'RE IN
|
||
MOVEI B,2 ; HAS NOT MOVED
|
||
ADD B,PTOP
|
||
ADD B,PS
|
||
CAML B,PS+1 ;ROOM IN PS FOR ANOTHER 2 WORD ENTRY?
|
||
EXPAND PS ;NO
|
||
|
||
MOVE B,PTOP
|
||
ADD B,PS
|
||
MOVEI C,@PSA
|
||
|
||
MOVE D,(B) ;COPY EVERYTHING DOWN 2, UP TO PLACE TO INSERT
|
||
MOVEM D,2(B)
|
||
CAIE B,(C)
|
||
SOJA B,.-3
|
||
|
||
MOVEI B,2
|
||
ADDM B,PTOP
|
||
|
||
MOVEM M,(C) ;LINE NUMBER
|
||
AOJA A,TOLINJ
|
||
|
||
TOLINH: PUSHJ P,GCCS
|
||
|
||
TOLINJ:
|
||
; SETOM TLJF ;KLUDGE
|
||
AOS B,SEQNO ;PUTTING AWAY THE STEP, GIVE IT A NEW SEQUENCE NUMBER
|
||
HRL B,CDBOT ;WHAT IS THE POINTER TO THE NEW LINE
|
||
MOVSM B,@PSA ;XWD SEQNO,CBOT INTO PROCEDURE DIRECTORY
|
||
|
||
MOVE A,CTOP
|
||
MOVEI B,@CSA ;B_CTOP+CS
|
||
MOVE C,CBOT ;CBOT, BASE OF THIS LINE TO BE STORED
|
||
MOVE A,CDBOT
|
||
SUBI C,(A) ;C_CBOT-CDBOT, LENGTH OF OTHER DIRECT LINES
|
||
MOVEI A,@CSA ;A_CS+CDBOT, ABS LOC OF CDBOT
|
||
MOVEI E,(B)
|
||
ADDI E,(C) ;E_CS+CTOP+CBOT-CDBOT, END OF COPIED DIRECT LINES
|
||
CAML E,CS+1 ;IS THAT INSIDE CURRENT CS ALLOCATION
|
||
EXPAND C,CS ;NO, NEED AT LEAST ENOUGH ROOM FOR COPIED LINES
|
||
|
||
HRLZI D,(A) ;FROM BASE OF DIRECT LINES
|
||
HRRI D,(B) ;TO CURRENT END OF COMPILED CODE
|
||
BLT D,(E) ;ENDING WITH END OF ALL OTHER DIRECT LINES
|
||
|
||
MOVE D,CTOP
|
||
; TLZE F,TITLEF
|
||
; SOS D,CTOP ;IF DELETING "TITLE" OR A LINE NUMBER
|
||
; SUBI E,(D) ;CS+CBOT(+1)-CDBOT
|
||
; ADD E,CDBOT
|
||
; HRLI A,(E)
|
||
; BLT A,@CSD
|
||
; SUB D,CBOT
|
||
; ADDB D,CDBOT
|
||
SUBI D,(H)
|
||
ADDB D,CDBOT
|
||
ADDI D,(C)
|
||
MOVEM D,CTOP
|
||
ADD H,CS
|
||
HRLI A,(H)
|
||
BLT A,@CSD
|
||
MOVEM D,CBOT
|
||
MOVEI D,-1(D)
|
||
MOVEM D,CPP ;SO THAT COMEX CAN EXIT PROPERLY
|
||
POPJ P, ;R1 FROM COMPIL
|
||
|
||
|
||
HIDE: SKIPA B,[HIDEPF,,0]
|
||
TRACE: HRLZI B,TRACEF
|
||
PUSHJ P,GNE ;TRACE WHAT?
|
||
ERROR ERMSSG ;NOTHING
|
||
TLNN A,UPRF ;TRACE A USER PROCEDURE?
|
||
ERROR WHTERR ;CANNOT TRACE THAT
|
||
MOVEI A,-1(A) ;POINT AT FIRST WORD OF RP PAIR
|
||
IORM B,@RPA ;MARK THIS PROCEDURE AS TRACED
|
||
JRST COMEX
|
||
|
||
TAB==.
|
||
PTAB: MOVEI B,7
|
||
PUSHJ P,PSPACE
|
||
TDNE B,CHARNO
|
||
JRST .-2
|
||
POPJ P,
|
||
|
||
LINE: SETZM CHARNO
|
||
TLNE F,SAVEF
|
||
POPJ P, ;MAY BE REDUNDANT
|
||
PUSHJ P,CRLF ;TYPE CRLF AND SPACES USING C
|
||
INDENT: MOVE C,BCHAR
|
||
JUMPE C,CRLF
|
||
CAMN C,CHARNO
|
||
POPJ P,
|
||
MOVEI C,"
|
||
PUSHJ P,TYO
|
||
JRST INDENT
|
||
|
||
CRLF: MOVEI C,015
|
||
PUSHJ P,TYO
|
||
MOVEI C,012
|
||
PUSHJ P,TYO
|
||
MOVEI C,15
|
||
POPJ P,
|
||
|
||
|
||
REQUEST: TLO F,RQF
|
||
MOVEI B,[ASCIZ /</]
|
||
SKIPE CHARNO ;AT LEFT MARGIN?
|
||
MOVEI B,[EXP 0] ;NO, DON'T TYPE ANYTHING
|
||
PUSHJ P,TIS
|
||
JRST REQUEST
|
||
TLZ F,RQF
|
||
POPJ P,
|
||
|
||
|
||
PRETTY: PUSHJ P,NUCONV
|
||
CAMGE E,MINLNL
|
||
ERROR PRTER1
|
||
MOVEM E,LINEL
|
||
SUBI E,5
|
||
MOVEM E,LINRET
|
||
JRST COMEX
|
||
|
||
NTHCHA: PUSHJ P,NUMVAL
|
||
SUBI E,1
|
||
JUMPL E,[ERROR .]
|
||
PUSHJ P,NEWSRC
|
||
IDIVI E,5
|
||
CAML E,@A
|
||
ERROR .
|
||
MOVNS E+1
|
||
ADD A,E
|
||
JRST .+5(E+1)
|
||
REPEAT 5,ILDB C,A
|
||
POP S,A
|
||
MOVE A,C
|
||
PUSHJ P,SNM
|
||
JRST ENDSTR
|
||
|
||
LASTCH: MOVE C,LSTCH
|
||
.RESET TYIC,
|
||
JRST .+3
|
||
.TYI: TLO F,RQF
|
||
PUSHJ P,TYI
|
||
PUSHJ P,NEWSTR
|
||
IDPB C,B
|
||
TLZ F,RQF
|
||
JRST ENDSTR
|
||
|
||
TYI: TLZE F,BREAKF
|
||
ERROR BREAK
|
||
TLO F,TIF
|
||
TLNN F,GETF
|
||
JRST TYI1
|
||
TLZ F,TIF
|
||
SKIPN FILOX
|
||
JRST TYI2
|
||
PUSHJ P,READC
|
||
CAIN CH,ENDFIL
|
||
JRST @EOFJMP
|
||
POPJ P,
|
||
TYI2: .IOT TYIC,C
|
||
JUMPL C,@EOFJMP
|
||
POPJ P,
|
||
|
||
|
||
TYI1: .IOT TYIC,C
|
||
JUMPE C,TYI1
|
||
TLZ F,TIF
|
||
CAIN C,^W
|
||
POPJ P,
|
||
CAIN C,15
|
||
JRST TYI3
|
||
CAIE C,33
|
||
CAIN C,^Z
|
||
JRST TYI1
|
||
CAIN C,^_
|
||
JRST TYI1
|
||
CAIN C,177
|
||
POPJ P,
|
||
CAIL C,140
|
||
SUBI C,40
|
||
TLNN F,EDITF
|
||
JRST TYO
|
||
CAIE C,^N
|
||
CAIN C,^R
|
||
POPJ P,
|
||
JRST TYO
|
||
|
||
TYI3: PUSHJ P,CRLF
|
||
MOVEI C,15
|
||
POPJ P,
|
||
|
||
LISTE: .CALL LISCAL
|
||
MOVEI A,0
|
||
PUSHJ P,SNM
|
||
JRST ENDSTR
|
||
|
||
LISCAL: SETZ
|
||
SIXBIT /LISTEN/
|
||
[TYIC]
|
||
SETZ A(2000)
|
||
;CHARACTER OF.
|
||
CHAROF: PUSHJ P,NUMVAL
|
||
PUSHJ P,NEWSTR
|
||
IDPB E,B
|
||
TRZ F,NWF
|
||
PUSHJ P,ENDSTR
|
||
POPJ P,
|
||
|
||
|
||
.TYO: PUSHJ P,NUMVAL
|
||
MOVE C,E
|
||
PUSHJ P,TYOI
|
||
JRST COMEX
|
||
|
||
TYO: TLZE F,BREAKF
|
||
ERROR BREAK
|
||
IFE TBOX, PUSHJ P,TYOON
|
||
IFN TBOX, PUSHJ P,TTYON
|
||
TLNE F,SAVEF
|
||
JRST TYOF
|
||
CAIL C,40
|
||
JRST TYO3
|
||
CAIN C,2 ;CNTRL B
|
||
JRST TYO7 ;PRINT AS SPACE
|
||
CAIE C,7
|
||
CAIN C,12
|
||
JRST TYOI
|
||
CAIN C,^L
|
||
JRST TYOI
|
||
CAIN C,11
|
||
JRST TTAB
|
||
CAIN C,15
|
||
JRST TYO2
|
||
CAIN C,^H
|
||
JRST TYO6
|
||
CAIN C,^Z
|
||
JRST TYO8
|
||
CAIN C,^_
|
||
JRST TYO9
|
||
LSH C,10
|
||
TYOA: XORI C,<300_10>+"^
|
||
PUSHJ P,TYO3
|
||
LSH C,-10
|
||
JRST TYO3C
|
||
TYO3: PUSH P,C
|
||
MOVE C,CHARNO
|
||
SUB C,LINEL
|
||
JUMPLE C,TYO3A
|
||
CAIL C,10.
|
||
JRST TYO3B
|
||
MOVE C,(P)
|
||
CAIE C,40
|
||
JRST TYO3A
|
||
TYO3B: PUSHJ P,CRLF
|
||
TYO3A: POP P,C
|
||
TYO3C: AOSA CHARNO
|
||
TYO2: CLEARM CHARNO
|
||
TYOI: SKIPE DRIBX
|
||
.IOT DRIBC,C
|
||
TYOII: .IOT TYOC,C
|
||
TRZE C,200
|
||
ANDCMI C,100
|
||
POPJ P,
|
||
TYO6: SOS CHARNO
|
||
JRST TYOI
|
||
TTYON: PUSH P,C
|
||
MOVEI C,TTYDEV
|
||
CAMN C,TBXDEV
|
||
JRST POPCJ
|
||
MOVEM C,TBXDEV
|
||
MOVEI C,21
|
||
XCT TBXOUT
|
||
MOVEI C,TTYDEV
|
||
XCT TBXOUT
|
||
MOVEI C,22
|
||
XCT TBXOUT
|
||
POP P,C
|
||
POPJ P,
|
||
|
||
MUSTYO: PUSH P,C
|
||
MOVEI C,MUSDEV
|
||
JRST DEVSEL
|
||
PLTTYO: PUSH P,C
|
||
MOVEI C,PLTDEV
|
||
JRST DEVSEL
|
||
TURTYO: PUSH P,C
|
||
MOVEI C,TURDEV
|
||
DEVSEL: CAMN C,TBXDEV
|
||
JRST DEVSL1
|
||
MOVEM C,TBXDEV
|
||
PUSH P,C
|
||
MOVEI C,21
|
||
XCT TBXOUT
|
||
POP P,C
|
||
XCT TBXOUT
|
||
DEVSL1: POP P,C
|
||
XCT TBXOUT
|
||
POPJ P,
|
||
POPCJ: POP P,C
|
||
POPJ P,
|
||
|
||
OCTOUT: PUSH P,B
|
||
PUSH P,D
|
||
MOVE B,[110300,,D]
|
||
MOVE D,C
|
||
OCTOU1: ILDB C,B
|
||
ADDI C,60
|
||
XCT CHOUT
|
||
TLNE B,770000
|
||
JRST OCTOU1
|
||
MOVEI C,40
|
||
SOSG NOCTPR
|
||
JRST OCTOU3
|
||
OCTOU2: XCT CHOUT
|
||
MOVE C,D
|
||
POP P,D
|
||
POP P,B
|
||
POPJ P,
|
||
OCTOU3: MOVEI C,15
|
||
MOVEM C,NOCTPR
|
||
XCT CHOUT
|
||
MOVEI C,12
|
||
JRST OCTOU2
|
||
|
||
TYOON: SKIPG SILENT
|
||
POPJ P,
|
||
.IOT TYOC,TTYONC
|
||
SETOM SILENT
|
||
POPJ P,
|
||
|
||
TYO7: MOVEI C,40 ;SUBST SPACE FOR CNTRL B
|
||
PUSHJ P,TYO3
|
||
MOVEI C,2 ;RESTORE C
|
||
POPJ P,
|
||
|
||
TYO8: PUSH P,B
|
||
MOVEI B,[ASCIZ \
|
||
THING \]
|
||
TYO8A: PUSH P,C
|
||
PUSHJ P,TOSS
|
||
POP P,C
|
||
POP P,B
|
||
POPJ P,
|
||
TYO9: PUSH P,B
|
||
MOVEI B,[ASCIZ \
|
||
NAME \]
|
||
JRST TYO8A
|
||
|
||
TYOF: CAIL C,40
|
||
AOS CHARNO
|
||
CAIN C,15
|
||
CLEARM CHARNO
|
||
SKIPE FILOX
|
||
JRST WRITEC
|
||
.IOT TYOC,C
|
||
POPJ P,
|
||
|
||
TTAB: MOVEI C,40
|
||
PUSHJ P,TYO3
|
||
MOVE C,CHARNO
|
||
TRNE C,7
|
||
JRST TTAB
|
||
MOVEI C,11
|
||
POPJ P,
|
||
|
||
|
||
PTOSSM: HRLI A,440700 ;FOR MACHINE STRINGS
|
||
JRST PTOS
|
||
PTOSS: HRLI A,010700+W ;FOR GENERATED STRINGS
|
||
PTOS: PUSHJ P,PWORD
|
||
LDB C,A
|
||
JUMPN C,.-2
|
||
POPJ P,
|
||
|
||
TOSS: HRLI B,440700
|
||
TOS: ILDB C,B ;BYTE POINTER IN B USE C
|
||
JUMPE C,CPOPJ
|
||
PUSHJ P,TYO
|
||
JRST TOS
|
||
|
||
NUMBRQ: SETZM NUMCNT
|
||
TLNE A,EMPTYF ;IS IT EMPTY?
|
||
JRST CPOPJ ;YES
|
||
TRZ F,TF
|
||
HRLI A,010700+W
|
||
|
||
ILDB C,A
|
||
JUMPE C,CPOPJ ;EMPTY
|
||
AOS NUMCNT
|
||
CAIE C,"+
|
||
CAIN C,"-
|
||
NMBRQ1: ILDB C,A
|
||
JUMPE C,NMBRQ2
|
||
AOS NUMCNT
|
||
TRO F,TF ;HAVE SEEN A CHARACTER
|
||
CAIL C,"0
|
||
CAILE C,"9
|
||
POPJ P, ;NOT A DIGIT, FAIL
|
||
JRST NMBRQ1
|
||
|
||
NMBRQ2: TRZE F,TF ;ALL THE CHARS WE SAW WERE DIGITS, BUT WERE THERE ANY
|
||
AOS 0(P) ;SAW SOME DIGITS
|
||
POPJ P, ;SAW NO CHARACTERS
|
||
|
||
|
||
PREDIQ: MOVE B,@A
|
||
ADDI A,1
|
||
CAIE B,1 ;IS LENGTH OF TEXT 1?
|
||
JRST PREDQ1 ;NO, CANNOT BE "TRUE"
|
||
MOVE B,@A ;GET TEXT OF ONE WORD ELEMENT
|
||
CAME B,[ASCIZ /TRUE/]
|
||
POPJ P, ;NOT "TRUE"
|
||
JRST CPOPJ1 ;IS "TRUE"
|
||
PREDQ1: CAIE B,2 ;FALSE MUST BE TWO WORDS LONG
|
||
POPJ P, ;NOT "FALSE"
|
||
MOVE B,@A
|
||
ADDI A,1
|
||
CAMN B,[ASCII /FALSE/]
|
||
SKIPE @A ;NEXT WORD MUST BE 0 TERMINATOR FOR "FALSE"
|
||
POPJ P, ;R1, IS NOT "FALSE"
|
||
JRST CPOPJ1 ;R2
|
||
|
||
|
||
DNM: MOVEI M,0
|
||
TRZ F,PMF\NNUMF
|
||
HRLI L,010700+W ;ALL CALLS USE A COMPLETE STRING
|
||
ILDB C,L
|
||
CAIN C,"-
|
||
TRO F,PMF
|
||
CAIE C,"+
|
||
CAIN C,"-
|
||
DNM1: ILDB C,L
|
||
CAIL C,"0
|
||
CAILE C,"9
|
||
JRST DNM2
|
||
TRO F,NNUMF
|
||
IMULI M,12
|
||
ADDI M,-60(C)
|
||
JRST DNM1
|
||
DNM2: TRZE F,PMF
|
||
MOVNS M
|
||
TRNN F,NNUMF
|
||
POPJ P,
|
||
JRST CPOPJ1
|
||
|
||
|
||
DECPRT: SKIPA B,[12]
|
||
OCTPRT: MOVEI B,10
|
||
MOVEM B,CRADIX
|
||
ANYPRT: IDIV A,CRADIX
|
||
HRLM B,(P)
|
||
SKIPE A
|
||
PUSHJ P,ANYPRT
|
||
HLRZ C,(P)
|
||
ADDI C,"0
|
||
JRST TYO
|
||
|
||
SNM: TRO F,TF
|
||
SETZM SRCBOT
|
||
TRZ F,PMF
|
||
JUMPGE A,SNMA
|
||
MOVNS A
|
||
TRO F,PMF
|
||
SNMA: IDIVI A,12
|
||
HRLM B,(P)
|
||
SKIPE A
|
||
PUSHJ P,SNMA
|
||
TRZE F,TF ;ONLY SET UP B ONCE
|
||
PUSHJ P,NEWSTR
|
||
MOVEI C,"-
|
||
TRZE F,PMF
|
||
IDPB C,B
|
||
HLRZ C,(P)
|
||
ADDI C,"0
|
||
IDPB C,B
|
||
POPJ P,
|
||
|
||
COPYAB: ILDB C,A
|
||
IDPB C,B
|
||
JUMPN C,.-2
|
||
POPJ P,
|
||
|
||
|
||
;NEWOPS IS CALLED BY FIRST,LAST,BUTFIRST, AND BUTLAST
|
||
;ALL HAPPEN TO DO THE SAME THING
|
||
|
||
;NEWSTR IS USED BY ANYONE WHO GENERATES A NEW STRING
|
||
|
||
NEWOPS: MOVE A,0(S) ;GET ARG OFF S STACK WITHOUT DESTROYING IT
|
||
TLNE A,EMPTYF ;IS IT AN EMPTY STRING
|
||
ERROR EMPARG ;EMPTY ARGUMENTS ARE ILLEGAL(?)
|
||
TLNE A,WORDF
|
||
AOS 0(P) ;SKIP JUMP TO SENT IF A WORD
|
||
IFN LFLAG,[
|
||
TRZ F,TF
|
||
TLNE A,STRF ;STRING FLAG. WHEN SET,PARENS ARE TRETED AS NORMAL CHARS.
|
||
TRO F,TF
|
||
]
|
||
HRLI A,010700+W ;IN ANY CASE, MAKE A STRING PTR
|
||
MOVEM A,SRCBOT
|
||
NEWSTR: TLO F,GCF
|
||
HRRZ B,WTOP
|
||
ADD B,[010700,,1(W)] ;MUST BE EXACTLY THIS FOR TEST IN TBACK TO WORK
|
||
MOVEM B,NEWBOT
|
||
POPJ P,
|
||
|
||
|
||
|
||
;NEWSRC SETS UP A NEW SOURCE STRING FROM THE FIRST ARG ON THE PDL
|
||
;NEWSR1 DOES THE SAME FOR THE SECOND ARG BACK
|
||
|
||
NEWSR1: SKIPA A,-1(S)
|
||
NEWSRC: MOVE A,0(S)
|
||
NEWSR0: HRLI A,010700+W
|
||
MOVEM A,SRCBOT
|
||
POPJ P,
|
||
|
||
|
||
GNE: AOS A,CPP ;GET NEXT NON-COMMENT ELEMENT
|
||
MOVE A,@CSA
|
||
JUMPE A,CPOPJ ;END OF LINE, R1
|
||
TLNE A,COMMTF ;IS IT COMMENT
|
||
JRST GNE ;YES, SKIP IT
|
||
JRST CPOPJ1
|
||
|
||
ENDSTP: POP S,C ;FLUSH OLD INPUT FIRST BEFORE
|
||
ENDSTR: MOVEI C,0 ;FINISH UP THE NEW STRING
|
||
IDPB C,B
|
||
ENDST1: TLNE B,760000
|
||
JRST .-2
|
||
TLO F,GCF
|
||
MOVEM B,WTOP
|
||
SUB B,NEWBOT
|
||
HRRZM B,@NEWBOT
|
||
HRLZI B,W+WORDF
|
||
HRR B,NEWBOT
|
||
TRZE F,NWF
|
||
TLC B,WORDF\SENTF
|
||
PUSH S,B
|
||
PUSHJ P,WSCHEC
|
||
POPJ P,
|
||
|
||
GNARG: MOVE A,[W+WORDF,,DUMMYV]
|
||
CAMN A,(S)
|
||
POPJ P,
|
||
POP S,A
|
||
JRST CPOPJ1
|
||
|
||
MULTCM: PUSHJ P,REVARG
|
||
NRMLCM: MOVE A,[W+WORDF,,DUMMYV] ;NON REVERSING MULTIPLE ARG COMMAND
|
||
CAMN A,(S)
|
||
JRST MULCM1
|
||
MULCM0: PUSH P,[NRMLCM] ;ONLY REVERSE THE ARGS ONCE
|
||
JRST @-1(P)
|
||
|
||
MULCM1: POP P,A ;RETURN FROM COMMAND
|
||
POP S,A ;MARKER
|
||
JRST COMEX
|
||
|
||
MULTOP: PUSHJ P,REVARG
|
||
NRMLOP: MOVE A,[W+WORDF,,DUMMYV]
|
||
CAMN A,-1(S)
|
||
JRST MULOP1
|
||
CAMN A,(S)
|
||
ERROR .
|
||
PUSH P,[NRMLOP]
|
||
JRST @-1(P)
|
||
MULOP1: POP S,A
|
||
MOVEM A,(S)
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
REVARG: MOVE A,[W+WORDF,,DUMMYV]
|
||
MOVEI B,(S)
|
||
CAME A,(B)
|
||
SOJA B,.-1
|
||
MOVEI A,(S)
|
||
REVAR1: ADDI B,1
|
||
CAIG A,(B)
|
||
POPJ P,
|
||
MOVE C,(A)
|
||
EXCH C,(B)
|
||
MOVEM C,(A)
|
||
SOJA A,REVAR1
|
||
|
||
|
||
;ANOTHER REVERSING PROGRAM
|
||
;TURNS "A B C D E F" INTO "E F C D A B"
|
||
|
||
REVPR: MOVE M,P ;SAVE P
|
||
HRLZ C,P ;TO BE USED LATER IN A BLT
|
||
MOVE D,S ;SAVE S. ALSO USED LATER IN A BLT
|
||
MOVE E,[W+WORDF,,DUMMYV] ;LOGO PUTS THIS ON STACK TO MARK BOTTOM
|
||
|
||
REVPR1: POP S,A ;FIRST OF A PAIR
|
||
CAMN E,A ;DOES IT POINT TO BOTTOM OF STACK MARKER?
|
||
JRST REVPR2 ;YES, SO ALL THE ARGS HAVE BEEN COPIED ONTO P PDL
|
||
POP S,B ;SECOND OF A PAIR
|
||
CAMN E,B ;IF THIS ONE POINTS TO END OF STACK MARKER,
|
||
ERROR NOTPAR ;THEN THE ARGS WEREN'T PAIRED.
|
||
|
||
PUSH P,B ;COPY SECOND OF PAIR ONTO P PDL
|
||
PUSH P,A ;COPY FIRST OF PAIR ONTO P PDL
|
||
JRST REVPR1 ;GET ANOTHER PAIR
|
||
|
||
;ALL THE ARGS HAVE BEEN COPIED ONTO P PDL
|
||
;NOW COPY THEM IN THE ORDER THEY ARE IN BACK ONTO THE S PDL
|
||
REVPR2: PUSH S,A ;FIRST RETURN THE BOTTOM OF STACK MARKER
|
||
HRR C,S
|
||
AOBJP C,.+1 ;PLACE WHERE P WAS (SEE REVPR+1) IS 1 BEFORE
|
||
;LOCATION WHERE THE ARGS WERE COPIED
|
||
;PLACE WHERE S IS, IS 1 BEFORE LOCATION WHERE
|
||
;THE ARGS ARE TO RECOPIED NOW. HENCE THE AOBJ.
|
||
BLT C,(D) ;TRANSFER. D POINTS TO WHERE S POINTED BEFORE THE REVERSING BEGAN
|
||
MOVE P,M ;RESTORE P
|
||
MOVE S,D ;RESTORE S
|
||
|
||
JRST MULCM0
|
||
|
||
;STUFF TO B>HTE COPIED TO UNSHARED CORE AT START OF RUN
|
||
|
||
DEFINE TT A1,A2,A3
|
||
|
||
IFSE A3,,EXP A2
|
||
IFSN A3,,XWD A3,A2
|
||
TERMIN
|
||
ALOCTB: TABLES
|
||
|
||
DEFINE MM A1,A2
|
||
XWD A2,0
|
||
TERMIN
|
||
|
||
SPFRST: POINTR ;ALL THE LH'S OF THE INDEXED POINTERS
|
||
0?1?2 ;PTOP,CTOP,DTOP, IN THAT ORDER!
|
||
XWD W,.WTOP-.WBASE-1
|
||
EXP 1 ;CDBOT INITIALIZED THE SAME AS CTOP
|
||
1 ;CBOT SAME
|
||
XWD 525252,123456 ;AN INITIAL RANDOM BITS, FIX LATER
|
||
;SO THE STARTING POINT IS ALSO RANDOM
|
||
SPLLEN==.-SPFRST
|
||
|
||
|
||
|
||
DEFINE ELM1 NAME,VAL
|
||
NAME==.-.WBASE
|
||
1?VAL
|
||
TERMIN
|
||
|
||
.WBASE=.
|
||
ELM1 EMPTYV,0
|
||
ELM1 TRUEV,ASCIZ /TRUE/
|
||
FALSEV==.-.WBASE
|
||
EXP 2
|
||
ASCIZ /FALSE/
|
||
ELM1 LINEFV,012_29.
|
||
ELM1 CARETV,015_29.
|
||
ELM1 FORMFV,014_29.
|
||
ELM1 BLANKV,040_29.
|
||
ELM1 BELLV,007_29.
|
||
ELM1 QUOTEV,042_29.
|
||
ELM1 SKIPV,064240_18. ;BYTE (7) 15,12
|
||
ELM1 DUMMYV,0
|
||
.WTOP==.
|
||
|
||
;MACHINE DEFINED PROCEDURES
|
||
|
||
DEFINE MPM NAME,GOTO,NARG,TYPE,COND
|
||
IFN COND,[
|
||
WORDF,,[ASCIZ \NAME\]
|
||
<NARG-1>\TYPE,,GOTO]
|
||
TERMIN
|
||
|
||
DEFINE PAIR A,B,COND
|
||
IFN COND,[
|
||
[ASCIZ "A"]?[ASCIZ "B"]
|
||
]
|
||
TERMIN
|
||
|
||
DEFINE MVM A,B,C
|
||
EXP [ASCIZ "A"]
|
||
IFSN C,,XWD C,B
|
||
IFSE C,,XWD W+WORDF,B
|
||
TERMIN
|
||
|
||
|
||
$R==1 ;REGULAR (ALWAYS ASSEMBLE)
|
||
$D==NOVA+DFLAG ;ASSEMBLY FOR ANY DISPLAY FLAVOR
|
||
$N==NOVA ;ASSMBLE FOR NOVA ONLY
|
||
$S==SNAPFL ;ASSEMBLE SNAPS, ONLY IF NOVA
|
||
$3==DFLAG ;ASSEMBLE FOR 340 ONLY
|
||
$P==PHY ;PHYSICS HACK STUFF
|
||
$L==LFLAG ;LIST STUFF
|
||
$V==VFLAG ;VECTOR STUFF
|
||
$VN==0
|
||
$OM==OMFLAG ;OLD MUSIC, AS OPPOSED TO TERRY WINOGRAD AND JEANNE BAMBERGER SYSTEM
|
||
IFN NOVA IFN VFLAG $VN==1
|
||
$T==TURTAS
|
||
$NX==<1-TBOX>*TURTAS ;FOR TURTLE BUT NOT TBOX
|
||
$X==TBOX ;FOR TBOX ONLY
|
||
|
||
%FC==3_17 ;FIXED ARGS, COMMAND
|
||
%VC==1_17 ;VARIABLE ARGS, COMMAND
|
||
%FO==2_17 ;FIXED ARGS, OPERATION
|
||
%VO==0_17 ;VARIABLE ARGS, OPERATION
|
||
%FCS==34_14 ;FIXED COMMAND, TAKES SNAPS
|
||
%FOS==24_14 ;FIXED OPERATION, TAKES SNAPS
|
||
|
||
ABBT:
|
||
PAIR ABB,ABBREVIATION,$R
|
||
PAIR ABBS,ABBREVIATIONS,$R
|
||
PAIR ABT,ABBREVIATE,$R
|
||
PAIR BK,BACK,$T
|
||
PAIR B,BOTH,$R
|
||
PAIR BF,BUTFIRST,$R
|
||
PAIR BL,BUTLAST,$R
|
||
PAIR CONC,CONCATENATE,$L
|
||
PAIR C,COUNT,$R
|
||
PAIR CO,CONTROLLER,$R
|
||
PAIR CR,CARRIAGERETURN,$R
|
||
PAIR DIFF,DIFFERENCE,$R
|
||
PAIR D,DISPLAY,$D
|
||
PAIR ED,EDIT,$R
|
||
PAIR EDL,EDIT LINE,$R
|
||
PAIR EDT,EDIT TITLE,$R
|
||
PAIR EI,EITHER,$R
|
||
PAIR EP,EMPTYP,$R
|
||
PAIR ER,ERASE,$R
|
||
PAIR ERL,ERASE LINE,$R
|
||
PAIR F,FIRST,$R
|
||
PAIR FD,FORWARD,$T
|
||
PAIR LF,LINEFEED,$R
|
||
PAIR GP,GREATERP,$R
|
||
PAIR GTL,GO TO LINE,$R
|
||
PAIR GB,GOODBYE,$R
|
||
PAIR HD,HEADING,$D
|
||
PAIR HT,HIDETURTLE,$D
|
||
PAIR H,HOME,$D
|
||
PAIR IFF,IFFALSE,$R
|
||
PAIR IFT,IFTRUE,$R
|
||
PAIR LA,LAST,$R
|
||
PAIR L,LIST,$R
|
||
PAIR LC,LIST CONTENTS,$R
|
||
PAIR LE,LIST ENTRY,$R
|
||
PAIR LT,LEFT,$T
|
||
PAIR FF,FORMFEED,$R
|
||
PAIR LL,LIST LINE,$R
|
||
|
||
PAIR M,MAKE,$R
|
||
PAIR MAX,MAXIMUM,$R
|
||
PAIR MIN,MINIMUM,$R
|
||
PAIR NP,NUMBERP,$R
|
||
PAIR NOCO,NOCONTROLLER,$R
|
||
PAIR OP,OUTPUT,$R
|
||
PAIR PICK,PICKELEMENT,$L
|
||
PAIR PD,PENDOWN,$T
|
||
PAIR PU,PENUP,$T
|
||
PAIR P,PRINT,$R
|
||
PAIR PROD,PRODUCT,$R
|
||
PAIR PRS,PROCEDURES,$R
|
||
PAIR QUO,QUOTIENT,$R
|
||
PAIR RQ,REQUEST,$R
|
||
PAIR RT,RIGHT,$T
|
||
PAIR SHD,SETHEAD,$D
|
||
PAIR SETT,SETTURTLE,$R
|
||
PAIR S,SENTENCE,$R
|
||
PAIR SP,SENTENCEP,$R
|
||
PAIR ST,SHOWTURTLE,$D
|
||
PAIR T,TEST,$R
|
||
PAIR VADD,VECTORADD,$V
|
||
PAIR VEC,VECTOR,$V
|
||
PAIR VP,VECTORP,$V
|
||
PAIR W,WORD,$R
|
||
PAIR WP,WORDP,$R
|
||
PAIR ZP,ZEROP,$R
|
||
0
|
||
|
||
|
||
;MACHINE DEFINED VARIABLE NAMES
|
||
MV:
|
||
EXP [ASCIZ "EMPTY"]
|
||
XWD W+WORDF\EMPTYF,EMPTYV
|
||
[ASCIZ "EMPTYW"]
|
||
W+WORDF\EMPTYF,,EMPTYV
|
||
[ASCIZ "EMPTYS"]
|
||
W+SENTF\EMPTYF,,EMPTYV
|
||
MVM LINEFEED,LINEFV
|
||
MVM CARRIAGERETURN,CARETV
|
||
MVM FORMFEED,FORMFV
|
||
MVM BLANK,BLANKV
|
||
MVM BELL,BELLV
|
||
MVM QUOTE,QUOTEV
|
||
MVM SKIP,SKIPV
|
||
MVM CONTENTS,CCONTE,COMPUT
|
||
MVM ,DUMMYV
|
||
0
|
||
|
||
CMPT:
|
||
MPM ABBREVIATE,ABBREVIATE,0,%FC,$R
|
||
ABREVL: MPM ABBREVIATION,SPECWD,0,%FC,$R
|
||
ABRVSL: MPM ABBREVIATIONS,SPECWD,0,%FC,$R
|
||
ALLL: MPM ALL,SPECWD,0,%FC,$R
|
||
ANDL: MPM AND,SPECWD,0,%FC,$R
|
||
ASL: MPM AS,SPECWD,0,%FC,$R
|
||
MPM BACK,BACK,1,%FC,$T
|
||
MPM BELL,BELL,0,%FC,$R
|
||
MPM BIGTURTLE,BIGTURTLE,0,%FC,$NX
|
||
MPM BLANK,BLNK,0,%FC,$R
|
||
MPM BOTH,BOTH,2,%FO,$R
|
||
MPM BTOUCH,BTOUCH,0,%FO,$T
|
||
MPM BUG,BUG,1,%FC,$R
|
||
MPM BUTFIRST,BUTFIRST,1,%FO,$R
|
||
MPM BUTLAST,BUTLAST,1,%FO,$R
|
||
MPM CANCEL,RETTRN,0,%FC,$R
|
||
MPM CARRIAGERETURN,CR,0,%FC,$R
|
||
MPM CHAROF,CHAROF,1,%FO,$R
|
||
MPM CLOCK,CLOCK,0,%FO,$R
|
||
MPM COMPUTE,.COMPUTE,0,%FO,$R
|
||
MPM CONCATENATE,CONCAT,2,%VO,$L
|
||
MPM CONS,CONS,2,%VO,$L
|
||
CONTNL: MPM CONTENTS,SPECWD,0,%FC,$R
|
||
MPM CONTROLLER,CO,0,%FC,$NX
|
||
MPM CORMAX,.CORMX,1,%FC,$R
|
||
MPM COUNT,COUNT,1,%FO,$R
|
||
MPM DATE,DATE,0,%FO,$R
|
||
MPM DDT,CALDDT,0,%FC,$R
|
||
MPM DELETE,FDELETE,0,%FC,$R
|
||
MPM DIFFERENCE,DIFF,2,%FO,$R
|
||
MPM DIRNAME,DIRN,0,%FO,$R
|
||
MPM DISPLAY,DISPLAY,0,%FC,$N
|
||
MPM DISPLAY,DISPLAY,1,%FC,$3
|
||
MPM DISTANCE,DIST,2,%FO,$N
|
||
MPM DO,CALLDO,1,%FC,$R
|
||
MPM DOTPRODUCT,DOTPRD,2,%FO,$V
|
||
MPM EDIT,EDIT,0,%FC,$R
|
||
MPM EITHER,EITHER,2,%FO,$R
|
||
ELSEL: MPM ELSE,SPECWD,0,%FC,$R
|
||
MPM EMPTYP,EMPTYP,1,%FO,$R
|
||
MPM END,ENND,0,%FC,$R
|
||
MPM ENDSNAP,ESNAP,0,%FC,$S
|
||
ENTRYL: MPM ENTRY,SPECWD,0,%FC,$R
|
||
MPM ERASE,ERASE,0,%FC,$R
|
||
MPM EXIT,EXIT,1,%FC,$R
|
||
FALSEL: MPM FALSE,SPECWD,0,%FC,$R
|
||
FILEL: MPM FILES,SPECWD,0,%FC,$R
|
||
MPM FIRST,FIRST,1,%FO,$R
|
||
MPM FORMFEED,FRMFD,0,%FC,$R
|
||
MPM FORWARD,FORWARD,1,%FC,$T
|
||
MPM FRAME,FRAME,0,%FO,$N
|
||
MPM FTOUCH,FTOUCH,0,%FO,$X
|
||
MPM GENVEC,GENVEC,2,%FO,$V
|
||
MPM GET,GET,0,%FC,$R
|
||
MPM GO,GOTO,0,%FC,$R
|
||
MPM GOODBYE,GOODBYE,0,%FC,$R
|
||
|
||
MPM GREATERP,GRATRP,2,%FO,$R
|
||
MPM HEADING,HEADING,0,%FC,$D
|
||
MPM HIDETURTLE,HIDETURTLE,0,%FC,$D
|
||
MPM HOME,HOME,0,%FC,$N
|
||
MPM IF,IF,0,%FC,$R
|
||
MPM IFTRUE,IFTRUE,0,%FC,$R
|
||
MPM IFFALSE,IFFALS,0,%FC,$R
|
||
MPM INTERSECTION,INTERS,2,%VO,$L
|
||
MPM IS,IS,2,%FO,$R
|
||
MPM JOIN,CONCAT,2,%VO,$L
|
||
MPM LAMPOFF,LAMPOF,0,%FC,$T
|
||
MPM LAMPON,LAMPON,0,%FC,$T
|
||
MPM LAST,LAST,1,%FO,$R
|
||
MPM LASTCHAR,LASTCH,0,%FO,$R
|
||
MPM LEFT,LEFT,1,%FC,$T
|
||
MPM LESSON,LESSON,0,%FC,$R
|
||
MPM LESSP,LESSP,2,%FO,$R
|
||
MPM LEVEL,LEVEL,1,%FO,$L
|
||
LINELL: MPM LINE,SPECWD,0,%FC,$R
|
||
MPM LINEFEED,LF,0,%FC,$R
|
||
MPM LIST,LIST,0,%FC,$R
|
||
MPM LISTEN,LISTEN,0,%FO,$R
|
||
MPM LOCAL,LOCAL,1,%FC,$R
|
||
MPM LOGIN,LOGIN,0,%FC,$R
|
||
MPM LOGNAME,LOGN,0,%FO,$R
|
||
MPM LST,LST,1,%FO,$L
|
||
MPM LTOUCH,LTOUCH,0,%FO,$X
|
||
MPM LFTOUCH,LFTOUCH,0,%FO,$X
|
||
MPM LBTOUCH,LBTOUCH,0,%FO,$X
|
||
MACHIL: MPM MACHINE,SPECWD,0,%FC,$R
|
||
|
||
|
||
400000\WORDF,,[ASCIZ /MAKE/] ;SPECIAL TO COMPIL
|
||
<2-1>\%FC,,MAKE
|
||
LMAKL: 400000\WORDF,,[ASCIZ /MAKE/] ;MUST FOLLOW REGULAR MAKE
|
||
<2-1>\%FC,,MAKE
|
||
400000\WORDF,,[ASCIZ /MAKE
|
||
NAME: /]
|
||
<2-1>\%FC,,MAKE
|
||
MAKL2: MPM ,CPOPJ,1,%FC,$R
|
||
WORDF,,[ASCIZ /
|
||
THING: /]
|
||
<2-1>\%FC,,CPOPJ
|
||
MPM LTOUCH,LTOUCH,0,%FO,$X
|
||
MPM JR,JR,0,%FO,$P
|
||
MPM JS,JS,0,%FO,$P
|
||
MPM JVX,JVX,0,%FO,$P
|
||
MPM JVY,JVY,0,%FO,$P
|
||
MPM JX,JX,0,%FO,$P
|
||
MPM JY,JY,0,%FO,$P
|
||
MPM LR,LR,0,%FO,$P
|
||
MPM LS,LS,0,%FO,$P
|
||
MPM LVX,PX1VEL,0,%FO,$P
|
||
MPM LVY,PY1VEL,0,%FO,$P
|
||
MPM LX,PX1POS,0,%FO,$P
|
||
MPM LY,PY1POS,0,%FO,$P
|
||
|
||
MPM MAXIMUM,MAXIM,2,%VO,$R
|
||
MPM MBUFCLEAR,MBCLR,0,%FC,$NX
|
||
MPM MBUFCOUNT,MBCNT,0,%FO,$NX
|
||
MPM MBUFINIT,MBINIT,0,%FC,$NX
|
||
MPM MBUFNEXT,MBNXT,1,%FC,$NX
|
||
MPM MBUFOUT,MBOUT,0,%FC,$NX
|
||
MPM MBUFPUT,MBPUT,1,%FC,$NX
|
||
MPM MBUFSTART,MBSTRT,0,%FC,$NX
|
||
MPM MCLEAR,MCLEAR,0,%FC,$X
|
||
MPM MEMBERP,MEMBER,2,%FO,$L
|
||
MPM MINIMUM,MINIM,2,%VO,$R
|
||
MPM MLEN,MLEN,0,%FO,$X
|
||
MPM MOD,REMAIN,2,%FO,$R
|
||
MPM MOTOR,MOTOR,2,%FC,$R
|
||
NAMESL: MPM NAMES,SPECWD,0,%FC,$R
|
||
MPM NEWMUSIC,NEWMUS,0,%FC,$NX
|
||
MPM NEWS,NEWS,0,%FC,$R
|
||
MPM NOCONTROLLER,NOCO,0,%FC,$NX
|
||
MPM NOPHYSICS,NOPHY,0,%FC,$P
|
||
MPM NOT,NOT,1,%FO,$R
|
||
MPM NOTURTLE,NOTURT,0,%FC,$NX
|
||
MPM NTHCHAR,NTHCHA,2,%FO,$R
|
||
MPM NUMBERP,NUMBRP,1,%FO,$R
|
||
OFL: MPM OF,SPECWD,0,%FC,$R
|
||
MPM OLDMUSIC,OLDMUS,0,%FC,$NX
|
||
MPM OUTPUT,OUTPUT,1,%FC,$R
|
||
MPM PEN,PEN,1,%FC,$N
|
||
MPM PENDOWN,PENDOWN,0,%FC,$T
|
||
MPM PENUP,PENUP,0,%FC,$T
|
||
MPM PHYSICS,PHYSICS,0,%FC,$P
|
||
MPM PICK,PICKEL,2,%FO,$L
|
||
MPM PICKELEMENT,PICKEL,2,%FO,$L
|
||
MPM PLAY,PLAY,1,%FC,$OM
|
||
MPM PCLEAR,PCLEAR,0,%FC,$X
|
||
MPM PLOT,PLOT,0,%FC,$3
|
||
MPM PLOTDOWN,PLOTDO,0,%FC,$X
|
||
MPM PLOTXY,PLOTXY,2,%FC,$X
|
||
MPM PLOTUP,PLOTUP,0,%FC,$X
|
||
MPM PM,PM,0,%FC,$X
|
||
MPM PRETTY,PRETTY,1,%FC,$R
|
||
MPM PRINT,PRINT,1,%VC,$R
|
||
PROCDL: MPM PROCEDURES,SPECWD,0,%FC,$R
|
||
MPM PRODUCT,STIMES,2,%VO,$R
|
||
MPM PSCALE,PSCALE,1,%FC,$P
|
||
MPM PUSH,PUSHXY,2,%FC,$P
|
||
MPM PUSHA,PUSHA,2,%FC,$P
|
||
MPM QUOTE,QUOTX,0,%FC,$R
|
||
MPM QUOTIENT,QUOT,2,%FO,$R
|
||
MPM RTOUCH,RTOUCH,0,%FO,$X
|
||
MPM RBTOUCH,RBTOUC,0,%FO,$X
|
||
MPM RFTOUCH,RFTOUC,0,%FO,$X
|
||
MPM RANDOM,RANDOM,0,%FO,$R
|
||
MPM READ,READ,0,%FC,$R
|
||
MPM REMAINDER,REMAIN,2,%FO,$R
|
||
MPM REMEL,REMEL,2,%FC,$L
|
||
MPM REMOVESNAP,RSNAP,1,%FC,$S
|
||
MPM RESET,RSET,0,%FC,$R
|
||
MPM RESTART,RESTART,0,%FC,$D
|
||
MPM RIGHT,RIGHT,1,%FC,$T
|
||
MPM REQUEST,REQUEST,0,%FO,$R
|
||
MPM RR,PR,0,%FO,$P
|
||
MPM RS,RS,0,%FO,$P
|
||
MPM RV,RV,0,%FO,$P
|
||
MPM RVX,PXVEL,0,%FO,$P
|
||
MPM RVY,PYVEL,0,%FO,$P
|
||
MPM RX,PXPOS,0,%FO,$P
|
||
MPM RY,PYPOS,0,%FO,$P
|
||
MPM SAVE,SAVE,0,%FC,$R
|
||
MPM SCALARMUL,SCALRM,2,%FO,$V
|
||
MPM SCALARMULTIPLY,SCALRM,2,%FO,$V
|
||
MPM SCM,SCALRM,2,%FO,$V
|
||
MPM SENTENCE,SENTENCE,2,%VO,$R
|
||
MPM SENTENCEP,SENTP,1,%FO,$R
|
||
MPM SETHEAD,SETHEAD,1,%FC,$D
|
||
MPM SETTURTLE,SETTURTLE,0,%FC,$NX
|
||
MPM SETX,SETX,1,%FC,$D
|
||
MPM SETXY,SETXY,2,%FC,$N
|
||
MPM SETY,SETY,1,%FC,$D
|
||
MPM SHOWSNAP,SSNAP,1,%FCS,$S
|
||
MPM SHOWTURTLE,SHOWTURTLE,0,%FC,$D
|
||
MPM SING,SING,2,%VC,$R
|
||
MPM SLIDE,SLIDE,1,%FC,$VN
|
||
MPM SMALLTURTLE,SMALLTURTLE,0,%FC,$NX
|
||
MPM SNAP,SNAP,1,%FC,$S
|
||
MPM SQRT,CMSQRT,1,%FO,$V
|
||
MPM STEPNT,STEPNT,2,%FO,$V
|
||
MPM STOP,ESTOP,0,%FC,$R
|
||
MPM STR,STR,1,%FO,$L
|
||
MPM SUM,SUM,2,%VO,$R
|
||
MPM TBOXDEBUG,TBOXDEBUG,0,%FC,$X
|
||
MPM TBOXOFF,TBOXOF,0,%FC,$X
|
||
MPM TBOXON,TBOXON,0,%FC,$X
|
||
MPM TEST,TEST,1,%FC,$R
|
||
THENL: MPM THEN,SPECWD,0,%FC,$R
|
||
MPM THING,THING,1,%FO,$R
|
||
MPM TIME,TIME,0,%FO,$R
|
||
|
||
TITLEL: MPM TITLE,TITLEX,0,%FC,$R
|
||
TOL: MPM TO,TO,0,%FC,$R
|
||
MPM TOOT,WHISTL,1,%FC,$NX
|
||
MPM TOOT,TOOT,1,%FC,$X
|
||
TRACEL: MPM TRACE,TRACE,0,%FC,$R
|
||
TRACSL: MPM TRACES,SPECWD,0,%FC,$R
|
||
MPM TOWARDS,TWD,2,%FO,$N
|
||
TRUEL: MPM TRUE,SPECWD,0,%FC,$R
|
||
MPM TYI,.TYI,0,%FO,$R
|
||
MPM TYO,.TYO,1,%FC,$R
|
||
MPM TYPE,TYPE,1,%VC,$R
|
||
MPM UNION,UNION,2,%VO,$L
|
||
MPM USE,USE,0,%FC,$R
|
||
MPM VECTORADD,VADD,2,%FO,$V
|
||
MPM VECTORSUB,VSUB,2,%FO,$V
|
||
MPM VECTOR,VECTOR,2,%FO,$V
|
||
MPM VSUB,VSUB,2,%FO,$V
|
||
MPM VECTORP,VECTRP,1,%FO,$V
|
||
MPM VERSION,VERSN,0,%FO,$R
|
||
MPM VOICE,VOICE,1,%FC,$X
|
||
MPM VLEN,VLEN,0,%FO,$X
|
||
MPM VOICES,VOICES,1,%FC,$NX
|
||
MPM WAIT,WAIT,1,%FC,$R
|
||
MPM WIPE,WIPE,0,%FC,$N
|
||
MPM WORD,WORD,2,%VO,$R
|
||
MPM WORDP,WORDP,1,%FO,$R
|
||
MPM WRITE,WRITE,0,%FC,$R
|
||
MPM XCOR,XCOR,0,%FC,$D
|
||
MPM YCOR,YCOR,0,%FC,$D
|
||
MPM ZEROP,ZEROP,1,%FO,$R
|
||
DONTSH: 0 ;ALL TABLE SEARCHES TERMINATE ON A 0
|
||
|
||
|
||
;THESE ARE HERE FOR EASE IN LISTING AND EDITING
|
||
LPREN: MPM (,[[ERROR .]],0,%FO,$R
|
||
RPREN: MPM ),[[ERROR .]],0,%FO,$R
|
||
INMNSL: MPM -,DIFF,2,%FO,$R;NEXT 2 ENTRIES MUST BE IN ORDER (SEE GNSMNS)
|
||
PRMNSL: MPM -,MINUS,1,%FO,$R
|
||
INPLSL: MPM +,SUM,2,%FO,$R
|
||
PRPLSL: MPM +,CPOPJ,1,%FO,$R
|
||
INTMSL: MPM *,STIMES,2,%FO,$R
|
||
INDIVL: MPM /,QUOT,2,%FO,$R
|
||
INEQL: MPM =,IS,2,%FO,$R
|
||
INGRTL: MPM >,GRATRP,2,%FO,$R
|
||
INLSTL: MPM <,LESSP,2,%FO,$R
|
||
INCNKL: MPM &,CONC,2,%FO,$R
|
||
IMAKEL: MPM _,IMAKE,2,%FC,$R
|
||
|