Split up files.
[pdp10-muddle.git] / sumex / mudex.mcr030
1 TITLE MUDEX -- TENEX  DEPENDANT MUDDLE CODE\r
2 \r
3 RELOCATABLE\r
4 \r
5 .INSRT MUDDLE >\r
6 .INSRT STENEX >\r
7 \r
8 MFORK==400000\r
9 \r
10 MONITS==1\r
11 \r
12 .GLOBAL %SSNAM,%RSNAM,%KILLM,%LOGOU,%SLEEP,%VALRE,NOTTY,MSGTYP,TTYOP2\r
13 .GLOBAL %UNAM,%JNAM,%RUNAM,%RJNAM,%GCJOB,%SHWND,%SHFNT,%GETIP,%INFMP\r
14 .GLOBAL GCHN,WNDP,FRNP,MESSAG,INITFL,6TOCHS,SGSNAM,MTYO,PGINT,WHOAMI\r
15 .GLOBAL %TOPLQ,IBLOCK,TMTNXS,TNXSTR,%HANG,ILLUUO,UUOH,IPCINI,CTIME,BFLOAT\r
16 .GLOBAL GCRSET\r
17 \r
18 GCHN==0\r
19 WRTP==1000,,100000\r
20 GCHI==1000,,GCHN\r
21 CRJB==1000,,400001\r
22 FME==1000,,-1\r
23 FLS==1000,,\r
24 \r
25 CTIME:  JOBTM                           ; get run time in milli secs\r
26         MOVE    B,A\r
27         JSP     A,BFLOAT                ; Convert to floating\r
28         FDVRI   B,(1000.0)              ; Change to units of seconds\r
29         MOVSI   A,TFLOAT\r
30         POPJ    P,\r
31 \r
32 ; SET THE SNAME GLOBALLY\r
33 \r
34 %SSNAM: POPJ    P,\r
35 \r
36 ; READ THE GLOBAL SNAME\r
37 \r
38 %RSNAM: POPJ    P,\r
39 \r
40 ; KILL THE CURRENT JOB\r
41 \r
42 %KILLM: HALTF\r
43         POPJ    P,\r
44 \r
45 ; PASS STRING TO SUPERIOR (MONITOR?)\r
46 \r
47 %VALRE: HALTF\r
48         POPJ    P,\r
49 \r
50 ; LOGOUT OF SYSTEM (MUST BE "TOP LEVEL")\r
51 \r
52 %LOGOU: LGOUT\r
53         POPJ    P,\r
54 \r
55 ; GO TO SLEEP A WHILE\r
56 \r
57 %SLEEP: IMULI   A,33.           ; TO MILLI SECS\r
58         DISMS\r
59         POPJ    P,\r
60 \r
61 ; HANG FOR EVER\r
62 \r
63 %HANG:  WAIT\r
64 \r
65 ; READ JNAME\r
66 \r
67 %RJNAM: POPJ    P,\r
68 \r
69 ; READ UNAME\r
70 \r
71 %RUNAM: POPJ    P,\r
72 \r
73 ; HERE TO SEE IF WE ARE A TOP LEVEL JOB\r
74 \r
75 %TOPLQ: GJINF\r
76         SKIPGE  D\r
77         AOS     (P)\r
78         POPJ    P,\r
79 \r
80 ; GET AN INFERIOR FOR THE GARBAGE COLLECTOR\r
81 \r
82 %GCJOB: PUSH    P,A\r
83         MOVEI   A,200000        ; GET BITS FOR FORK\r
84         CFORK                   ; MAKE AN IFERIOR FORK\r
85         FATAL CANT GET GC FORK\r
86         MOVEM   A,GCFRK         ; SAVE HANDLE\r
87         POP     P,A             ; RESTORE PAGE\r
88         PUSHJ   P,%GETIP        ; GET IT THERE\r
89         PUSHJ   P,%SHWND\r
90         JRST    %SHFNT          ; AND FRONTIER\r
91 \r
92 ; HERE TO GET A PAGE FOR THE INFERIOR\r
93 \r
94 %GETIP: POPJ    P,\r
95 \r
96 ; HERE TO SHARE WINDOW\r
97 \r
98 %SHWND: TDZA    0,0             ; FLAG SAYING WINDOW\r
99 \r
100 ; HERE TO SHARE FRONTIER\r
101 \r
102 %SHFNT: MOVEI   0,1\r
103         PUSH    P,A\r
104         PUSH    P,B\r
105         PUSH    P,C\r
106         MOVEI   B,2*FRNP        ; FRONTIER (REMEMBER TENEX PAGE SIZE)\r
107         SKIPN   0\r
108         MOVEI   B,2*WNDP        ; NO,WINDOW\r
109         HRLI    B,MFORK\r
110         ASH     A,1             ; TIMES 2\r
111         HRL     A,GCFRK\r
112         MOVSI   C,140000        ; READ AND WRITE ACCESS\r
113 \r
114         PMAP\r
115         ADDI    A,1\r
116         ADDI    B,1\r
117         PMAP\r
118         ASH     B,9.            ; POINT TO PAGE\r
119         MOVES   (B)             ; CLOBBER TOP\r
120         MOVES   -1(B)           ; AND UNDER\r
121         POP     P,C\r
122         POP     P,B\r
123         POP     P,A\r
124         POPJ    P,\r
125 \r
126 ; HERE TO MAP INFERIOR BACK AND KILL SAME\r
127 \r
128 %INFMP: PUSH    P,C\r
129         PUSH    P,D\r
130         PUSH    P,E\r
131         ASH     A,1\r
132         ASH     B,1\r
133         MOVE    D,A             ; POINT TO PAGES\r
134         MOVE    E,B             ; FOR COPYING\r
135         PUSH    P,A             ; SAVE FOR TOUCHING\r
136         MOVS    A,GCFRK\r
137         MOVSI   B,MFORK\r
138         MOVSI   C,120400        ; READ AND WRITE COPY\r
139 \r
140 LP1:    HRRI    A,(E)\r
141         HRRI    B,(D)\r
142         PMAP\r
143         ADDI    E,1\r
144         AOBJN   D,LP1\r
145 \r
146 ; HERE TO TOUCH PAGES TO INSURE KEEPING THEM (KLUDGE)\r
147 \r
148         POP     P,E             ; RESTORE MY FIRST PAGE #\r
149         MOVEI   A,(E)           ; COPY FOR LOOP\r
150         ASH     A,9.            ; TO WORD ADDR\r
151         MOVES   (A)             ; WRITE IT\r
152         AOBJN   E,.-3           ; FOR ALL PAGES\r
153 \r
154         MOVE    A,GCFRK\r
155         KFORK\r
156         POP     P,E\r
157         POP     P,D\r
158         POP     P,C\r
159         POPJ    P,\r
160 \r
161 ; HACK TO PRINT MESSAGE OF INTEREST TO USER\r
162 \r
163 MESOUT: MOVSI   A,(JFCL)\r
164         MOVEM   A,MESSAG        ; DO ONLY ONCE\r
165         MOVEI   A,400000\r
166         MOVE    B,[1,,ILLUUO]\r
167         MOVE    C,[40,,UUOH]\r
168         SCVEC\r
169         SETZ    SP,             ; HACK TO AVOID LOSSAGE WITH GARBAGE IN SP FIRST TIME\r
170         PUSHJ   P,GCRSET\r
171         PUSHJ   P,PGINT         ; INITIALIZE PAGE MAP\r
172         RESET\r
173         PUSHJ   P,TTYOP2\r
174         SKIPE   NOTTY           ; HAVE A TTY?\r
175         JRST    RESNM           ; NO, SKIP THIS STUFF\r
176 \r
177         MOVEI   A,MESBLK\r
178         MOVEI   B,0\r
179         GTJFN\r
180         JRST    RESNM\r
181         MOVE    B,[70000,,200000]\r
182         OPENF\r
183         JRST    RESNM\r
184 \r
185 MSLP:   BIN\r
186         MOVE    D,B             ; SAVE BYTE\r
187         GTSTS\r
188         TLNE    B,1000\r
189         JRST    RESNM\r
190         EXCH    D,A\r
191         CAIN    A,14\r
192         PBOUT\r
193         MOVE    A,D\r
194         JRST    MSLP\r
195 \r
196 RESNM2: CLOSF\r
197         JFCL\r
198 \r
199 RESNM:\r
200 RESNM1: POPJ    P,\r
201 \r
202 MESBLK: 100000,,\r
203         377777,,377777\r
204         -1,,[ASCIZ /DSK/]\r
205         -1,,[ASCIZ /VEZZA/]\r
206         -1,,[ASCIZ /MUDDLE/]\r
207         -1,,[ASCIZ /MESSAG/]\r
208         0\r
209         0\r
210         0\r
211 \r
212 MUDINT: MOVSI   0,(JFCL)        ; CLOBBER MUDDLE INIT SWITCH\r
213         MOVEM   0,INITFL\r
214 \r
215         GJINF                   ; GET INFO NEEDED\r
216         PUSHJ   P,TMTNXS        ; MAKE A TEMP STRING FOR TENEX INFO (POINTER LEFT IN E)\r
217         HRROI   A,1(E)          ; TNX STRING POINTER\r
218         DIRST\r
219         FATAL   ATTACHED DIR DOES NOT EXIST\r
220         MOVEI   B,1(E)          ; NOW HAVE BOUNDS OF STRING\r
221         SUBM    P,E             ; RELATIVIZE E\r
222         PUSHJ   P,TNXSTR        ; MAKE THE STRING\r
223         SUB     P,E\r
224         PUSH    TP,$TATOM\r
225         PUSH    TP,IMQUOTE SNM\r
226         PUSH    TP,A\r
227         PUSH    TP,B\r
228         MCALL   2,SETG\r
229         PUSH    TP,$TCHSTR\r
230         PUSH    TP,CHQUOTE READ\r
231         PUSH    TP,$TCHSTR\r
232         PUSH    TP,CHQUOTE MUDDLE.INIT\r
233         MCALL   2,FOPEN\r
234         GETYP   A,A\r
235         CAIE    A,TCHAN\r
236         POPJ    P,\r
237         PUSH    TP,$TCHAN\r
238         PUSH    TP,B\r
239         MOVEI   B,INITSTR       ; TELL USER WHAT'S HAPPENING\r
240         SKIPE   WHOAMI\r
241         JRST    .+3\r
242         SKIPN   NOTTY\r
243         PUSHJ   P,MSGTYP\r
244         MCALL   1,MLOAD\r
245         POPJ    P,\r
246 \r
247 TMTNXS: POP     P,D             ; SAVE RET ADDR\r
248         MOVE    E,P             ; BUILD A STRING SPACE ON PSTACK\r
249         MOVEI   0,20.           ; USE 20 WORDS (=100 CHARS)\r
250         PUSH    P,[0]\r
251         SOJG    0,.-1\r
252 \r
253         JRST    (D)\r
254 \r
255 \r
256 TNXSTR: SUBI    B,(P)\r
257         PUSH    P,B\r
258         ADDI    B,-1(P)\r
259         SUBI    B,(A)           ; WORDS TO B\r
260         IMULI   B,5             ; TO CHARS\r
261         LDB     0,[360600,,A]   ; GET BYTE POSITION\r
262         IDIVI   0,7             ; TO  A REAL BYTE POSITION\r
263         MOVNS   0\r
264         ADDI    0,5\r
265         SUBM    0,B             ; FINAL LENGTH IN BYTES TO B\r
266         PUSH    P,B             ; SAVE IT\r
267         MOVEI   A,4(B)          ; TO WORDS\r
268         IDIVI   A,5\r
269         PUSHJ   P,IBLOCK        ; GET STRING\r
270         POP     P,A\r
271         POP     P,C\r
272         ADDI    C,(P)\r
273         MOVE    D,B             ; COPY POINTER\r
274         MOVE    0,(C)           ; GET A WORD\r
275         MOVEM   0,(D)\r
276         ADDI    C,1\r
277         AOBJN   D,.-3\r
278 \r
279         HRLI    A,TCHSTR\r
280         HRLI    B,440700        ; MAKE INTO BYTER\r
281         POPJ    P,\r
282 \r
283 IPCINI: JFCL\r
284 IFN MONITS,[\r
285 \r
286 DEMS:   SETZ\r
287         SIXBIT /DEMSIG/\r
288         SETZ    [SIXBIT /MUDSTA/]\r
289 ]\r
290 INITSTR:        ASCIZ /MUDDLE INIT/\r
291 \r
292 IMPURE\r
293 \r
294 GCFRK:  0\r
295 \r
296 IFN MONITS,[\r
297 MESSDM: 30,,(SIXBIT /IPC/)\r
298         .+1\r
299         SIXBIT /MUDDLESTATIS/\r
300         1\r
301         1\r
302 ]\r
303 \r
304 MESSAG: PUSHJ   P,MESOUT        ; MESSAGE SWITCH\r
305 \r
306 INITFL: PUSHJ   P,MUDINT        ; MUDDLE INIT SWITCH\r
307 \r
308 PURE\r
309 \r
310 END\r
311 \f\r