Split up files.
[pdp10-muddle.git] / sumex / mudex.mcr030
diff --git a/sumex/mudex.mcr030 b/sumex/mudex.mcr030
new file mode 100644 (file)
index 0000000..5d0f7b9
--- /dev/null
@@ -0,0 +1,311 @@
+TITLE MUDEX -- TENEX  DEPENDANT MUDDLE CODE\r
+\r
+RELOCATABLE\r
+\r
+.INSRT MUDDLE >\r
+.INSRT STENEX >\r
+\r
+MFORK==400000\r
+\r
+MONITS==1\r
+\r
+.GLOBAL %SSNAM,%RSNAM,%KILLM,%LOGOU,%SLEEP,%VALRE,NOTTY,MSGTYP,TTYOP2\r
+.GLOBAL %UNAM,%JNAM,%RUNAM,%RJNAM,%GCJOB,%SHWND,%SHFNT,%GETIP,%INFMP\r
+.GLOBAL GCHN,WNDP,FRNP,MESSAG,INITFL,6TOCHS,SGSNAM,MTYO,PGINT,WHOAMI\r
+.GLOBAL %TOPLQ,IBLOCK,TMTNXS,TNXSTR,%HANG,ILLUUO,UUOH,IPCINI,CTIME,BFLOAT\r
+.GLOBAL GCRSET\r
+\r
+GCHN==0\r
+WRTP==1000,,100000\r
+GCHI==1000,,GCHN\r
+CRJB==1000,,400001\r
+FME==1000,,-1\r
+FLS==1000,,\r
+\r
+CTIME: JOBTM                           ; get run time in milli secs\r
+       MOVE    B,A\r
+       JSP     A,BFLOAT                ; Convert to floating\r
+       FDVRI   B,(1000.0)              ; Change to units of seconds\r
+       MOVSI   A,TFLOAT\r
+       POPJ    P,\r
+\r
+; SET THE SNAME GLOBALLY\r
+\r
+%SSNAM:        POPJ    P,\r
+\r
+; READ THE GLOBAL SNAME\r
+\r
+%RSNAM:        POPJ    P,\r
+\r
+; KILL THE CURRENT JOB\r
+\r
+%KILLM:        HALTF\r
+       POPJ    P,\r
+\r
+; PASS STRING TO SUPERIOR (MONITOR?)\r
+\r
+%VALRE:        HALTF\r
+       POPJ    P,\r
+\r
+; LOGOUT OF SYSTEM (MUST BE "TOP LEVEL")\r
+\r
+%LOGOU:        LGOUT\r
+       POPJ    P,\r
+\r
+; GO TO SLEEP A WHILE\r
+\r
+%SLEEP:        IMULI   A,33.           ; TO MILLI SECS\r
+       DISMS\r
+       POPJ    P,\r
+\r
+; HANG FOR EVER\r
+\r
+%HANG: WAIT\r
+\r
+; READ JNAME\r
+\r
+%RJNAM:        POPJ    P,\r
+\r
+; READ UNAME\r
+\r
+%RUNAM:        POPJ    P,\r
+\r
+; HERE TO SEE IF WE ARE A TOP LEVEL JOB\r
+\r
+%TOPLQ:        GJINF\r
+       SKIPGE  D\r
+       AOS     (P)\r
+       POPJ    P,\r
+\r
+; GET AN INFERIOR FOR THE GARBAGE COLLECTOR\r
+\r
+%GCJOB:        PUSH    P,A\r
+       MOVEI   A,200000        ; GET BITS FOR FORK\r
+       CFORK                   ; MAKE AN IFERIOR FORK\r
+       FATAL CANT GET GC FORK\r
+       MOVEM   A,GCFRK         ; SAVE HANDLE\r
+       POP     P,A             ; RESTORE PAGE\r
+       PUSHJ   P,%GETIP        ; GET IT THERE\r
+       PUSHJ   P,%SHWND\r
+       JRST    %SHFNT          ; AND FRONTIER\r
+\r
+; HERE TO GET A PAGE FOR THE INFERIOR\r
+\r
+%GETIP:        POPJ    P,\r
+\r
+; HERE TO SHARE WINDOW\r
+\r
+%SHWND:        TDZA    0,0             ; FLAG SAYING WINDOW\r
+\r
+; HERE TO SHARE FRONTIER\r
+\r
+%SHFNT:        MOVEI   0,1\r
+       PUSH    P,A\r
+       PUSH    P,B\r
+       PUSH    P,C\r
+       MOVEI   B,2*FRNP        ; FRONTIER (REMEMBER TENEX PAGE SIZE)\r
+       SKIPN   0\r
+       MOVEI   B,2*WNDP        ; NO,WINDOW\r
+       HRLI    B,MFORK\r
+       ASH     A,1             ; TIMES 2\r
+       HRL     A,GCFRK\r
+       MOVSI   C,140000        ; READ AND WRITE ACCESS\r
+\r
+       PMAP\r
+       ADDI    A,1\r
+       ADDI    B,1\r
+       PMAP\r
+       ASH     B,9.            ; POINT TO PAGE\r
+       MOVES   (B)             ; CLOBBER TOP\r
+       MOVES   -1(B)           ; AND UNDER\r
+       POP     P,C\r
+       POP     P,B\r
+       POP     P,A\r
+       POPJ    P,\r
+\r
+; HERE TO MAP INFERIOR BACK AND KILL SAME\r
+\r
+%INFMP:        PUSH    P,C\r
+       PUSH    P,D\r
+       PUSH    P,E\r
+       ASH     A,1\r
+       ASH     B,1\r
+       MOVE    D,A             ; POINT TO PAGES\r
+       MOVE    E,B             ; FOR COPYING\r
+       PUSH    P,A             ; SAVE FOR TOUCHING\r
+       MOVS    A,GCFRK\r
+       MOVSI   B,MFORK\r
+       MOVSI   C,120400        ; READ AND WRITE COPY\r
+\r
+LP1:   HRRI    A,(E)\r
+       HRRI    B,(D)\r
+       PMAP\r
+       ADDI    E,1\r
+       AOBJN   D,LP1\r
+\r
+; HERE TO TOUCH PAGES TO INSURE KEEPING THEM (KLUDGE)\r
+\r
+       POP     P,E             ; RESTORE MY FIRST PAGE #\r
+       MOVEI   A,(E)           ; COPY FOR LOOP\r
+       ASH     A,9.            ; TO WORD ADDR\r
+       MOVES   (A)             ; WRITE IT\r
+       AOBJN   E,.-3           ; FOR ALL PAGES\r
+\r
+       MOVE    A,GCFRK\r
+       KFORK\r
+       POP     P,E\r
+       POP     P,D\r
+       POP     P,C\r
+       POPJ    P,\r
+\r
+; HACK TO PRINT MESSAGE OF INTEREST TO USER\r
+\r
+MESOUT:        MOVSI   A,(JFCL)\r
+       MOVEM   A,MESSAG        ; DO ONLY ONCE\r
+       MOVEI   A,400000\r
+       MOVE    B,[1,,ILLUUO]\r
+       MOVE    C,[40,,UUOH]\r
+       SCVEC\r
+       SETZ    SP,             ; HACK TO AVOID LOSSAGE WITH GARBAGE IN SP FIRST TIME\r
+       PUSHJ   P,GCRSET\r
+       PUSHJ   P,PGINT         ; INITIALIZE PAGE MAP\r
+       RESET\r
+       PUSHJ   P,TTYOP2\r
+       SKIPE   NOTTY           ; HAVE A TTY?\r
+       JRST    RESNM           ; NO, SKIP THIS STUFF\r
+\r
+       MOVEI   A,MESBLK\r
+       MOVEI   B,0\r
+       GTJFN\r
+       JRST    RESNM\r
+       MOVE    B,[70000,,200000]\r
+       OPENF\r
+       JRST    RESNM\r
+\r
+MSLP:  BIN\r
+       MOVE    D,B             ; SAVE BYTE\r
+       GTSTS\r
+       TLNE    B,1000\r
+       JRST    RESNM\r
+       EXCH    D,A\r
+       CAIN    A,14\r
+       PBOUT\r
+       MOVE    A,D\r
+       JRST    MSLP\r
+\r
+RESNM2:        CLOSF\r
+       JFCL\r
+\r
+RESNM:\r
+RESNM1:        POPJ    P,\r
+\r
+MESBLK:        100000,,\r
+       377777,,377777\r
+       -1,,[ASCIZ /DSK/]\r
+       -1,,[ASCIZ /VEZZA/]\r
+       -1,,[ASCIZ /MUDDLE/]\r
+       -1,,[ASCIZ /MESSAG/]\r
+       0\r
+       0\r
+       0\r
+\r
+MUDINT:        MOVSI   0,(JFCL)        ; CLOBBER MUDDLE INIT SWITCH\r
+       MOVEM   0,INITFL\r
+\r
+       GJINF                   ; GET INFO NEEDED\r
+       PUSHJ   P,TMTNXS        ; MAKE A TEMP STRING FOR TENEX INFO (POINTER LEFT IN E)\r
+       HRROI   A,1(E)          ; TNX STRING POINTER\r
+       DIRST\r
+       FATAL   ATTACHED DIR DOES NOT EXIST\r
+       MOVEI   B,1(E)          ; NOW HAVE BOUNDS OF STRING\r
+       SUBM    P,E             ; RELATIVIZE E\r
+       PUSHJ   P,TNXSTR        ; MAKE THE STRING\r
+       SUB     P,E\r
+       PUSH    TP,$TATOM\r
+       PUSH    TP,IMQUOTE SNM\r
+       PUSH    TP,A\r
+       PUSH    TP,B\r
+       MCALL   2,SETG\r
+       PUSH    TP,$TCHSTR\r
+       PUSH    TP,CHQUOTE READ\r
+       PUSH    TP,$TCHSTR\r
+       PUSH    TP,CHQUOTE MUDDLE.INIT\r
+       MCALL   2,FOPEN\r
+       GETYP   A,A\r
+       CAIE    A,TCHAN\r
+       POPJ    P,\r
+       PUSH    TP,$TCHAN\r
+       PUSH    TP,B\r
+       MOVEI   B,INITSTR       ; TELL USER WHAT'S HAPPENING\r
+       SKIPE   WHOAMI\r
+       JRST    .+3\r
+       SKIPN   NOTTY\r
+       PUSHJ   P,MSGTYP\r
+       MCALL   1,MLOAD\r
+       POPJ    P,\r
+\r
+TMTNXS:        POP     P,D             ; SAVE RET ADDR\r
+       MOVE    E,P             ; BUILD A STRING SPACE ON PSTACK\r
+       MOVEI   0,20.           ; USE 20 WORDS (=100 CHARS)\r
+       PUSH    P,[0]\r
+       SOJG    0,.-1\r
+\r
+       JRST    (D)\r
+\r
+\r
+TNXSTR:        SUBI    B,(P)\r
+       PUSH    P,B\r
+       ADDI    B,-1(P)\r
+       SUBI    B,(A)           ; WORDS TO B\r
+       IMULI   B,5             ; TO CHARS\r
+       LDB     0,[360600,,A]   ; GET BYTE POSITION\r
+       IDIVI   0,7             ; TO  A REAL BYTE POSITION\r
+       MOVNS   0\r
+       ADDI    0,5\r
+       SUBM    0,B             ; FINAL LENGTH IN BYTES TO B\r
+       PUSH    P,B             ; SAVE IT\r
+       MOVEI   A,4(B)          ; TO WORDS\r
+       IDIVI   A,5\r
+       PUSHJ   P,IBLOCK        ; GET STRING\r
+       POP     P,A\r
+       POP     P,C\r
+       ADDI    C,(P)\r
+       MOVE    D,B             ; COPY POINTER\r
+       MOVE    0,(C)           ; GET A WORD\r
+       MOVEM   0,(D)\r
+       ADDI    C,1\r
+       AOBJN   D,.-3\r
+\r
+       HRLI    A,TCHSTR\r
+       HRLI    B,440700        ; MAKE INTO BYTER\r
+       POPJ    P,\r
+\r
+IPCINI:        JFCL\r
+IFN MONITS,[\r
+\r
+DEMS:  SETZ\r
+       SIXBIT /DEMSIG/\r
+       SETZ    [SIXBIT /MUDSTA/]\r
+]\r
+INITSTR:       ASCIZ /MUDDLE INIT/\r
+\r
+IMPURE\r
+\r
+GCFRK: 0\r
+\r
+IFN MONITS,[\r
+MESSDM:        30,,(SIXBIT /IPC/)\r
+       .+1\r
+       SIXBIT /MUDDLESTATIS/\r
+       1\r
+       1\r
+]\r
+\r
+MESSAG:        PUSHJ   P,MESOUT        ; MESSAGE SWITCH\r
+\r
+INITFL:        PUSHJ   P,MUDINT        ; MUDDLE INIT SWITCH\r
+\r
+PURE\r
+\r
+END\r
+\f\r