1 TITLE MUDEX -- TENEX DEPENDANT MUDDLE CODE
\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
25 CTIME: JOBTM ; get run time in milli secs
\r
27 JSP A,BFLOAT ; Convert to floating
\r
28 FDVRI B,(1000.0) ; Change to units of seconds
\r
32 ; SET THE SNAME GLOBALLY
\r
36 ; READ THE GLOBAL SNAME
\r
40 ; KILL THE CURRENT JOB
\r
45 ; PASS STRING TO SUPERIOR (MONITOR?)
\r
50 ; LOGOUT OF SYSTEM (MUST BE "TOP LEVEL")
\r
55 ; GO TO SLEEP A WHILE
\r
57 %SLEEP: IMULI A,33. ; TO MILLI SECS
\r
73 ; HERE TO SEE IF WE ARE A TOP LEVEL JOB
\r
80 ; GET AN INFERIOR FOR THE GARBAGE COLLECTOR
\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
90 JRST %SHFNT ; AND FRONTIER
\r
92 ; HERE TO GET A PAGE FOR THE INFERIOR
\r
96 ; HERE TO SHARE WINDOW
\r
98 %SHWND: TDZA 0,0 ; FLAG SAYING WINDOW
\r
100 ; HERE TO SHARE FRONTIER
\r
106 MOVEI B,2*FRNP ; FRONTIER (REMEMBER TENEX PAGE SIZE)
\r
108 MOVEI B,2*WNDP ; NO,WINDOW
\r
112 MOVSI C,140000 ; READ AND WRITE ACCESS
\r
118 ASH B,9. ; POINT TO PAGE
\r
119 MOVES (B) ; CLOBBER TOP
\r
120 MOVES -1(B) ; AND UNDER
\r
126 ; HERE TO MAP INFERIOR BACK AND KILL SAME
\r
133 MOVE D,A ; POINT TO PAGES
\r
134 MOVE E,B ; FOR COPYING
\r
135 PUSH P,A ; SAVE FOR TOUCHING
\r
138 MOVSI C,120400 ; READ AND WRITE COPY
\r
146 ; HERE TO TOUCH PAGES TO INSURE KEEPING THEM (KLUDGE)
\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
161 ; HACK TO PRINT MESSAGE OF INTEREST TO USER
\r
163 MESOUT: MOVSI A,(JFCL)
\r
164 MOVEM A,MESSAG ; DO ONLY ONCE
\r
169 SETZ SP, ; HACK TO AVOID LOSSAGE WITH GARBAGE IN SP FIRST TIME
\r
171 PUSHJ P,PGINT ; INITIALIZE PAGE MAP
\r
174 SKIPE NOTTY ; HAVE A TTY?
\r
175 JRST RESNM ; NO, SKIP THIS STUFF
\r
181 MOVE B,[70000,,200000]
\r
186 MOVE D,B ; SAVE BYTE
\r
205 -1,,[ASCIZ /VEZZA/]
\r
206 -1,,[ASCIZ /MUDDLE/]
\r
207 -1,,[ASCIZ /MESSAG/]
\r
212 MUDINT: MOVSI 0,(JFCL) ; CLOBBER MUDDLE INIT SWITCH
\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
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
225 PUSH TP,IMQUOTE SNM
\r
230 PUSH TP,CHQUOTE READ
\r
232 PUSH TP,CHQUOTE MUDDLE.INIT
\r
239 MOVEI B,INITSTR ; TELL USER WHAT'S HAPPENING
\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
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
265 SUBM 0,B ; FINAL LENGTH IN BYTES TO B
\r
267 MOVEI A,4(B) ; TO WORDS
\r
269 PUSHJ P,IBLOCK ; GET STRING
\r
273 MOVE D,B ; COPY POINTER
\r
274 MOVE 0,(C) ; GET A WORD
\r
280 HRLI B,440700 ; MAKE INTO BYTER
\r
288 SETZ [SIXBIT /MUDSTA/]
\r
290 INITSTR: ASCIZ /MUDDLE INIT/
\r
297 MESSDM: 30,,(SIXBIT /IPC/)
\r
299 SIXBIT /MUDDLESTATIS/
\r
304 MESSAG: PUSHJ P,MESOUT ; MESSAGE SWITCH
\r
306 INITFL: PUSHJ P,MUDINT ; MUDDLE INIT SWITCH
\r