ITS Muddle.
[pdp10-muddle.git] / MUDDLE / tentab.1
1  ; TABLE OF POWERS OF TEN
2         TITLE TENTAB
3         1PASS
4         .LIBRA TENTAB,ITENTB
5         .GLOBA TENTAB,ITENTB
6
7 TENTAB: REPEAT 39. 10.0^<.RPCNT-1>
8
9 MUM=1
10 ITENTB: REPEAT 11. 10.^<.RPCNT-1>
11
12 END
13 \f\ 3\f\ 3\ 3MENTED MODULES:
14 ;       GTUNIT - GETS A UNIT OF TEXT AND RETURNS VALUE
15 ;       CONVRT - DOES THE ACTUAL CONVERSION
16 ;       LXINIT - SETS UP LEXICON FILES
17 ;CHANNEL DEFS
18
19 MLXCHN==1       ;CHANNEL FOR MAIN LEXICON
20 ALXCHN==2       ;AUXILIARY LEXICON
21 TYIC==3
22 TTYIN==3
23 TYOC==4
24 TYOC1==4
25 TTYOUT==4
26 ALT==5
27 NWCHN==6
28 \f;SECTION TO START THE SYSTEM
29
30 GO:     .OPEN   TYIC,[SIXBIT /   TTY/]
31         .VALUE
32         .OPEN   TYOC,[SIXBIT /  !TTY/]
33         .VALUE
34         PASCR   [ASCIZ /ENTER LEXICON NAMES/]
35         PUSHJ   P,LXINIT
36
37 ;CODE HERE FOR MAIN LOOP OF LEXICONTEXT (LISTENER)
38 \f;SUBROUTINE TO INITIALIZE THE SYSTEM BY OPENING LEXICON FILES
39
40 ;FIRST FILE IS MAIN LEXICON
41 ;SECOND FILE IS AUXILIARY LEXICON
42 ;THIRD FILE IS NEW LCXICON; IF IT IS NOT FOUND, IT WILL BE CREATED
43         ;IF IT IS FOUND, NEW WORDS WILL BE APPENDED
44
45 LXINIT: PUSH    P,A     ;SAVE AC A
46         SKIPE   LXFMFL
47         JRST    LSETMN
48         PASC    [ASCIZ /MAIN LEXICON: /]
49 LSETMN: PUSHJ   P,RCMD  ;READ A FILE NAME
50         PUSHJ   P,SCNAME
51         SKIPN   A,SCN1  ;NO NAME GIVEN MEANS THERE IS NO MAIN LEXICON
52         JRST    AUXNM   ;AND JUST SKIP THIS STEP
53         MOVEM   A,MLXNM+1       ;SET UP FIRST NAME
54         SKIPN   A,SCN2  ;SEE IF ANY SECOND NAME GIVEN
55         MOVE    A,[SIXBIT /MAINLX/]     ;IF NOT SET UP DEFAULT SECOND NAME
56         MOVEM   A,MLXNM+2       ;SET UP SECOND NAME
57         .OPEN   MLXCHN,MLXNM    ;OPEN THE MAIN LEXICON FILE
58         .VALUE          ;REPLACE BY ERROR PROCEDURE EVENTUALLY
59 AUXNM:  SKIPE   LXFMFL
60         JRST    LSETAU
61         PASC    [ASCIZ /AUXILIARY LEXICON: /]
62         PUSHJ   P,RCMD  ;READ SECOND FILE NAME
63         PUSHJ   P,SCNAME
64 LSETAU: SKIPN   A,SCN1  ;NO AUXILIARY LEXICON?
65         JRST    NWNM    ;NO, JUST SET UP NEW LEXICON THEN
66         MOVEM   A,ALXNM+1       ;SET UP FIRST NAME
67         SKIPN   A,SCN2  ;SET UP SECOND NAME AS ABOVE
68         MOVE    A,[SIXBIT /AUXLEX/]
69         MOVEM   A,ALXNM+2
70         .OPEN   ALXCHN,ALXNM    ;OPEN AUXILIARY LEXICON FILE
71         .VALUE          ;REPLACE BY ERROR PROCEDURE
72 \f;SECTION TO OPEN NEW LEXICON FILE
73
74 NWNM:   SKIPE   LXFMFL
75         JRST    LSETNW
76         PASC    [ASCIZ /NEW LEXICON: /]
77         PUSHJ   P,RCMD  ;READ THIRD FILE NAME
78         PUSHJ   P,SCNAME
79 LSETNW: SKIPN   A,SCN1  ;ANY NAME GIVEN?
80         JRST    READY   ;NEW LEXICON WILL BE SET UP LATER
81         MOVEM   A,NWLXNM+1      ;SET UP NAME
82         SKIPN   A,SCN2
83         MOVE    A,[SIXBIT /NEWLEX/]
84         MOVEM   A,NWLXNM+2      ;SET UP SECOND NAME
85         MOVE    A,[SIXBIT /  &DSK/]     ;READ IMAGE BLOCK
86         MOVEM   A,NWLXNM
87         PUSHJ   P,NWLXOP        ;GO TELL CONVRT ABOUT NEW LEXICON FILE
88
89 ;SECTION TO READ IN B-BLOCKS
90
91 READY:  SKIPN   MLXNM+1 ;IS THERE A MAIN LEXICON?
92         JRST    RDAUXB  ;NO READ AUX B-BLOCKS THEN
93         .ACCES  MLXCHN,[0]
94         MOVE    A,[-26.,,MBBASE]
95         .IOT    MLXCHN,A        ;READ IN MAIN LEXICON B-BLOCK
96 RDAUXB: SKIPN   ALXNM+1
97         JRST    BLKSRD  ;ALL DONE
98         .ACCES  ALXCHN,[0]
99         MOVE    A,[-26.,,ABBASE]
100         .IOT    ALXCHN,A
101 BLKSRD: SETZM   MENMAP
102         SETZM   AENMAP
103         MOVE    A,[377777,,777777]
104         MOVEM   A,MBGMAP
105         MOVEM   A,ABGMAP
106         PASCR   [ASCIZ /READY/]
107         POP     P,A
108         POPJ    P,
109
110 MLXNM:  SIXBIT /  &DSK/
111         0
112         0
113 ALXNM:  SIXBIT /  &DSK/
114         0
115         0
116 LXFMFL: 0
117 \fTITLE GTUNIT - MODULE TO GET A UNIT OF TEXT FROM THE USER
118
119 ;INPUT MODULE - GETS INPUT AND RETURNS LEXICON VALUES
120 ;AS 36-BIT QUANTITIES
121 ;IF THE ITEM RECEIVED IS THE ESCAPE CHARACTER TO GO TO EDIT
122 ;MODE, RETURNS ARGP=0, OTHERWISE ARGP CONTAINS ACTUAL LEXICON
123 ;VALUE
124
125 ;CALLS CONVRT TO CONVRT AN ASCII STRING TO A VALUE IF A WORD
126 ;IS THE NEXT ITEM
127
128 ;BUILDS LITERALS FROM PUNCTUATION,,ETC. AND PACKS THEM
129 ;4 TO A WORD, 7BIT ASCII, IN FORMAT FOR BYTE MANIPULATION
130 ;LEFTMOST PART OF WORD CONTAINS TYPE CODE FOR A LITERAL
131 ;THIS MODULE MAKES A CALL UP TO A ROUTINE LITOUT
132 ;WHENEVER SUCH A LITERAL WORD SHOULD BE PLACED IN OUTPUT STREAM
133
134 ;USES REVISED GETITM ROUTINE WHICH TREATS SPACES AND C.R. AS PUNCT.
135 ;ASSUMES TTY CHANNELS OPEN ON CHANNELS TTYOUT, TTYIN
136
137 ;DEFINE THE ESCAPE CHARACTER
138 ESCAPE==0
139
140 \f;ENTER TO GET A UNIT OF TEXT AND RETURN A VALUE IN ARGP
141
142 GTUNIT: SAVEB   A,D
143 GTCHNK: CALL    GETITM,[0,ITYPE]        ;GET A CHUNK OF INPUT INTO B
144         CAIN    ITYPE,3         ;IS IT A STRING (WORD)
145         JRST    WRDGOT  ;YES, CONVERT TO LEXICON VALUE
146         CAIN    ITYPE,4 ;IS IT PUNCTUATION
147         JRST    PNCGOT  ;YES, GO BUILD LITERAL
148         JRST    GTCHNK  ;FOR NOW, IGNORE ALL OTHER TYPES
149
150 WRDGOT: PUSHJ   P,LITDMP        ;CLEAR ANY LITERAL BUFFER
151         MOVE    ARGP,A  ;SET UP POINTER TO HEAD OF THE CHARACTER STRING
152         SOS     A
153         PUSHJ   P,CONVRT        ;AND CONVERT TO A VALUE
154 RRRET:  RESTB   A,D     ;EXIT SEQUENCE
155         POPJ    P,      ;EXIT WITH VALUE IN ARGP
156
157 PNCGOT: CAIN    A,ESCAPE        ;IS IT THE ESCAPE CHARACTER?
158         JRST    MODCHG  ;YES, CHANGE MODE
159         PUSHJ   P,LITADD        ;ADD TO LITERAL BUFFER
160         JRST    RRRET   ;AND RETURN
161
162
163 LITDMP: CAMN    C,[350700,,D]   ;SEE IF BUFFER HAS ANYTHING IN IT
164         POPJ    P,      ;NO, JUST RETURN
165         MOVE    ARGP,D  ;YES, SEND OUT THE LITERAL
166         PUSHJ   P,LITOUT
167         MOVE    C,[350700,,D]   ;RESET BUFFER
168         POPJ    P,
169 LITADD: IDPB    A,D     ;PUT CHARACTER IN THE LITERAL BUFFER IN D
170 CAMN    C,[000700,,D]   ;FULL?
171 PUSHJ   P,LITDMP        ;YES, DUMP IT
172 POPJ    P,
173
174 ;CODE HERE TO CHANGE MODES
175 MODCHG: .BREAK  ;FOR DEBUGGING
176 \f       TITLE GETITM
177 ; THIS PROGRAM READS ITEMS FROM THE INPUT STREAM
178 ; RETURNING THEM ONE AT A TIME TO THE USER WITH
179 ; A TYPE CODE
180
181
182
183         .GLOBA READCH,TENTAB,ITENTB,FLUSHI,GETERR
184
185
186 ;THIS DEFINED FOR ACTUAL TTY ROUTINE
187
188
189
190 ; CODES FOR CHARACTER TYPES
191
192 OCDIG=1
193 DECDIG=2