!************
!*  moth6s  *
!* 14.jul.81*
!************

control  1
include  "deimosperm"


begin 

     recordformat  pf(byteinteger  service, reply, integer  a1, a2, a3)
     record  (pf)p


     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)
         d1_x = 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);  space; octal(p_a3); 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