ITS Muddle.
[pdp10-muddle.git] / MUDDLE / tentab.1
diff --git a/MUDDLE/tentab.1 b/MUDDLE/tentab.1
new file mode 100644 (file)
index 0000000..da346e9
--- /dev/null
@@ -0,0 +1,193 @@
+ ; TABLE OF POWERS OF TEN
+       TITLE TENTAB
+       1PASS
+       .LIBRA TENTAB,ITENTB
+       .GLOBA TENTAB,ITENTB
+
+TENTAB:        REPEAT 39. 10.0^<.RPCNT-1>
+
+MUM=1
+ITENTB:        REPEAT 11. 10.^<.RPCNT-1>
+
+END
+\f\ 3\f\ 3\ 3MENTED MODULES:
+;      GTUNIT - GETS A UNIT OF TEXT AND RETURNS VALUE
+;      CONVRT - DOES THE ACTUAL CONVERSION
+;      LXINIT - SETS UP LEXICON FILES
+;CHANNEL DEFS
+
+MLXCHN==1      ;CHANNEL FOR MAIN LEXICON
+ALXCHN==2      ;AUXILIARY LEXICON
+TYIC==3
+TTYIN==3
+TYOC==4
+TYOC1==4
+TTYOUT==4
+ALT==5
+NWCHN==6
+\f;SECTION TO START THE SYSTEM
+
+GO:    .OPEN   TYIC,[SIXBIT /   TTY/]
+       .VALUE
+       .OPEN   TYOC,[SIXBIT /  !TTY/]
+       .VALUE
+       PASCR   [ASCIZ /ENTER LEXICON NAMES/]
+       PUSHJ   P,LXINIT
+
+;CODE HERE FOR MAIN LOOP OF LEXICONTEXT (LISTENER)
+\f;SUBROUTINE TO INITIALIZE THE SYSTEM BY OPENING LEXICON FILES
+
+;FIRST FILE IS MAIN LEXICON
+;SECOND FILE IS AUXILIARY LEXICON
+;THIRD FILE IS NEW LCXICON; IF IT IS NOT FOUND, IT WILL BE CREATED
+       ;IF IT IS FOUND, NEW WORDS WILL BE APPENDED
+
+LXINIT:        PUSH    P,A     ;SAVE AC A
+       SKIPE   LXFMFL
+       JRST    LSETMN
+       PASC    [ASCIZ /MAIN LEXICON: /]
+LSETMN:        PUSHJ   P,RCMD  ;READ A FILE NAME
+       PUSHJ   P,SCNAME
+       SKIPN   A,SCN1  ;NO NAME GIVEN MEANS THERE IS NO MAIN LEXICON
+       JRST    AUXNM   ;AND JUST SKIP THIS STEP
+       MOVEM   A,MLXNM+1       ;SET UP FIRST NAME
+       SKIPN   A,SCN2  ;SEE IF ANY SECOND NAME GIVEN
+       MOVE    A,[SIXBIT /MAINLX/]     ;IF NOT SET UP DEFAULT SECOND NAME
+       MOVEM   A,MLXNM+2       ;SET UP SECOND NAME
+       .OPEN   MLXCHN,MLXNM    ;OPEN THE MAIN LEXICON FILE
+       .VALUE          ;REPLACE BY ERROR PROCEDURE EVENTUALLY
+AUXNM: SKIPE   LXFMFL
+       JRST    LSETAU
+       PASC    [ASCIZ /AUXILIARY LEXICON: /]
+       PUSHJ   P,RCMD  ;READ SECOND FILE NAME
+       PUSHJ   P,SCNAME
+LSETAU:        SKIPN   A,SCN1  ;NO AUXILIARY LEXICON?
+       JRST    NWNM    ;NO, JUST SET UP NEW LEXICON THEN
+       MOVEM   A,ALXNM+1       ;SET UP FIRST NAME
+       SKIPN   A,SCN2  ;SET UP SECOND NAME AS ABOVE
+       MOVE    A,[SIXBIT /AUXLEX/]
+       MOVEM   A,ALXNM+2
+       .OPEN   ALXCHN,ALXNM    ;OPEN AUXILIARY LEXICON FILE
+       .VALUE          ;REPLACE BY ERROR PROCEDURE
+\f;SECTION TO OPEN NEW LEXICON FILE
+
+NWNM:  SKIPE   LXFMFL
+       JRST    LSETNW
+       PASC    [ASCIZ /NEW LEXICON: /]
+       PUSHJ   P,RCMD  ;READ THIRD FILE NAME
+       PUSHJ   P,SCNAME
+LSETNW:        SKIPN   A,SCN1  ;ANY NAME GIVEN?
+       JRST    READY   ;NEW LEXICON WILL BE SET UP LATER
+       MOVEM   A,NWLXNM+1      ;SET UP NAME
+       SKIPN   A,SCN2
+       MOVE    A,[SIXBIT /NEWLEX/]
+       MOVEM   A,NWLXNM+2      ;SET UP SECOND NAME
+       MOVE    A,[SIXBIT /  &DSK/]     ;READ IMAGE BLOCK
+       MOVEM   A,NWLXNM
+       PUSHJ   P,NWLXOP        ;GO TELL CONVRT ABOUT NEW LEXICON FILE
+
+;SECTION TO READ IN B-BLOCKS
+
+READY: SKIPN   MLXNM+1 ;IS THERE A MAIN LEXICON?
+       JRST    RDAUXB  ;NO READ AUX B-BLOCKS THEN
+       .ACCES  MLXCHN,[0]
+       MOVE    A,[-26.,,MBBASE]
+       .IOT    MLXCHN,A        ;READ IN MAIN LEXICON B-BLOCK
+RDAUXB:        SKIPN   ALXNM+1
+       JRST    BLKSRD  ;ALL DONE
+       .ACCES  ALXCHN,[0]
+       MOVE    A,[-26.,,ABBASE]
+       .IOT    ALXCHN,A
+BLKSRD:        SETZM   MENMAP
+       SETZM   AENMAP
+       MOVE    A,[377777,,777777]
+       MOVEM   A,MBGMAP
+       MOVEM   A,ABGMAP
+       PASCR   [ASCIZ /READY/]
+       POP     P,A
+       POPJ    P,
+
+MLXNM: SIXBIT /  &DSK/
+       0
+       0
+ALXNM: SIXBIT /  &DSK/
+       0
+       0
+LXFMFL:        0
+\fTITLE GTUNIT - MODULE TO GET A UNIT OF TEXT FROM THE USER
+
+;INPUT MODULE - GETS INPUT AND RETURNS LEXICON VALUES
+;AS 36-BIT QUANTITIES
+;IF THE ITEM RECEIVED IS THE ESCAPE CHARACTER TO GO TO EDIT
+;MODE, RETURNS ARGP=0, OTHERWISE ARGP CONTAINS ACTUAL LEXICON
+;VALUE
+
+;CALLS CONVRT TO CONVRT AN ASCII STRING TO A VALUE IF A WORD
+;IS THE NEXT ITEM
+
+;BUILDS LITERALS FROM PUNCTUATION,,ETC. AND PACKS THEM
+;4 TO A WORD, 7BIT ASCII, IN FORMAT FOR BYTE MANIPULATION
+;LEFTMOST PART OF WORD CONTAINS TYPE CODE FOR A LITERAL
+;THIS MODULE MAKES A CALL UP TO A ROUTINE LITOUT
+;WHENEVER SUCH A LITERAL WORD SHOULD BE PLACED IN OUTPUT STREAM
+
+;USES REVISED GETITM ROUTINE WHICH TREATS SPACES AND C.R. AS PUNCT.
+;ASSUMES TTY CHANNELS OPEN ON CHANNELS TTYOUT, TTYIN
+
+;DEFINE THE ESCAPE CHARACTER
+ESCAPE==0
+
+\f;ENTER TO GET A UNIT OF TEXT AND RETURN A VALUE IN ARGP
+
+GTUNIT:        SAVEB   A,D
+GTCHNK:        CALL    GETITM,[0,ITYPE]        ;GET A CHUNK OF INPUT INTO B
+       CAIN    ITYPE,3         ;IS IT A STRING (WORD)
+       JRST    WRDGOT  ;YES, CONVERT TO LEXICON VALUE
+       CAIN    ITYPE,4 ;IS IT PUNCTUATION
+       JRST    PNCGOT  ;YES, GO BUILD LITERAL
+       JRST    GTCHNK  ;FOR NOW, IGNORE ALL OTHER TYPES
+
+WRDGOT:        PUSHJ   P,LITDMP        ;CLEAR ANY LITERAL BUFFER
+       MOVE    ARGP,A  ;SET UP POINTER TO HEAD OF THE CHARACTER STRING
+       SOS     A
+       PUSHJ   P,CONVRT        ;AND CONVERT TO A VALUE
+RRRET: RESTB   A,D     ;EXIT SEQUENCE
+       POPJ    P,      ;EXIT WITH VALUE IN ARGP
+
+PNCGOT:        CAIN    A,ESCAPE        ;IS IT THE ESCAPE CHARACTER?
+       JRST    MODCHG  ;YES, CHANGE MODE
+       PUSHJ   P,LITADD        ;ADD TO LITERAL BUFFER
+       JRST    RRRET   ;AND RETURN
+
+
+LITDMP:        CAMN    C,[350700,,D]   ;SEE IF BUFFER HAS ANYTHING IN IT
+       POPJ    P,      ;NO, JUST RETURN
+       MOVE    ARGP,D  ;YES, SEND OUT THE LITERAL
+       PUSHJ   P,LITOUT
+       MOVE    C,[350700,,D]   ;RESET BUFFER
+       POPJ    P,
+LITADD:        IDPB    A,D     ;PUT CHARACTER IN THE LITERAL BUFFER IN D
+CAMN   C,[000700,,D]   ;FULL?
+PUSHJ  P,LITDMP        ;YES, DUMP IT
+POPJ   P,
+
+;CODE HERE TO CHANGE MODES
+MODCHG:        .BREAK  ;FOR DEBUGGING
+\f      TITLE GETITM
+; THIS PROGRAM READS ITEMS FROM THE INPUT STREAM
+; RETURNING THEM ONE AT A TIME TO THE USER WITH
+; A TYPE CODE
+
+
+
+       .GLOBA READCH,TENTAB,ITENTB,FLUSHI,GETERR
+
+
+;THIS DEFINED FOR ACTUAL TTY ROUTINE
+
+
+
+; CODES FOR CHARACTER TYPES
+
+OCDIG=1
+DECDIG=2