!************
!*  MOTH6S  *
!* 27.NOV.79*
!************

CONTROL  K'101011'
PERMINTEGERFNSPEC  SVC(INTEGER  EP, R0, R1)


BEGIN 

     SYSTEMROUTINESPEC  LINKIN(INTEGER  SER)
     SYSTEMROUTINESPEC  MAP HWR(INTEGER  TOSEG)

     RECORDFORMAT  PF(BYTEINTEGER  SERVICE, REPLY, INTEGER  A1, A2, A3)
     RECORD  (PF)P

     CONSTINTEGER  MAP PSECT = 16;     ! SUPERVISOR CALL

     CONSTINTEGERNAME  SR0 = K'117572'
                                       ! INDEXED INTO SEG 4
     CONSTINTEGERNAME  SR2 = K'117576'

     ROUTINESPEC  OCTAL(INTEGER  N)

     RECORDFORMAT  PSECTF(INTEGER  Q, C 
        BYTEINTEGER  STATE, ID, BYTEINTEGERARRAY  C 
       NAME(0:4))

     CONSTINTEGER  MESS LIM = 7
     CONSTSTRING  (13) ARRAY  FLTS(0:MESS LIM) = 'NOT READY!', 
     'BAD SEGMENT', 'ADDRESS ERROR', 'ILLEGAL INSTR', 
     'BPT TRAP', 'ILLEGAL SVC', 'BAD SER', 'TIME FAULT'

     SWITCH  SW(0:MESS LIM)

     RECORDFORMAT  D1F(INTEGER  X)
     RECORDFORMAT  D2F(RECORD  (PSECTF) NAME  X)

     RECORD  (D1F)D1
     RECORD  (D2F) NAME  D2

     RECORD  (PSECTF) NAME  PST

     INTEGER  I, J, K, FAULT, ID
     D2 == D1
     LINKIN(-4);                       ! ADDRESS ERROR
     MAP HWR(4);                       ! TO SEGMENT 4
     CYCLE 
        P_SERVICE = 0
        POFF(P)
        IF  P_SERVICE = 7 START 
           ID = P_REPLY;  FAULT = 0
        ELSE 
           IF  P_SERVICE # (-4)&X'FF' START 
              PRINTSTRING('??
')
              CONTINUE 
           FINISH 
           ID = P_A2;  FAULT = P_A3
        FINISH 
        D1_X = SVC(MAP PSECT, ID, 3)
        PST == D2_X
        PRINTSTRING("***")
        PRINTSYMBOL(PST_NAME(I)) FOR  I = 0, 1, 3;  PRINTSYMBOL(':')
        PRINTSTRING(FLTS(FAULT))
        -> SW(FAULT)

SW(2):SW(3):SW(4):SW(5):SW(7):
        NEWLINE
        CONTINUE 

SW(0):                                 ! NOT READY
SW(6):                                 ! BAD SER
        SPACE
        OCTAL(P_A1);  NEWLINE
        CONTINUE 

SW(1):                                 ! SEGMENTATION TRAP
        SPACE
        OCTAL(SR0);  OCTAL(SR2);  SR0 = 1;  NEWLINE;  CONTINUE 

     REPEAT 


     ROUTINE  OCTAL(INTEGER  N)
        INTEGER  I
        PRINTSYMBOL((N >> I)&7+'0') FOR  I = 15, -3, 0
        SPACE
     END 
ENDOFPROGRAM