*DECK SSIDDIS 
USETEXT TEXTATS 
      PROC SSIDDIS (CODE, MSGTYPE); 
*CALL COPYRITE
# TITLE SSIDDIS - DEBUG DISPLAY                                        #
  
      BEGIN                            # SSIDDIS                       #
# 
****  SSIDDIS - DEBUG DISPLAY 
* 
*     THIS PROCEDURE DISPLAYS THE CURRENT STATUS OF *ATF*.
* 
*     ENTRY    CODE    = COMMAND EXECUTING OR INTERNMSG$. 
*              MSGTYPE = REQUEST/ACK/FINAL OR INTERNAL INDICATION.
* 
*     EXIT     MESSAGE ISSUED REVEALING CURRENT TASK BEING PERFORMED. 
* 
*     METHOD   ISSUE DAYFILE INDICATING THE TASK BEING PERFORMED. 
*              IF CODE IS A DEVICE COMMAND, INCLUDE THE DEVICE IN THE 
*              DAYFILE MESSAGE.  IF THE MESSAGE IS THE RESULT OF A
*              REQUEST BEING SENT BETWEEN THE DRIVER APPLICATION AND
*              *ATF*, DISPLAY THE REQUEST.
# 
  
# 
****  PROC SSIDDIS - XREF LIST. 
# 
  
      XREF
        BEGIN 
        PROC MESSAGE;    # ISSUE DAYFILE MESSAGE                       #
        FUNC XCDD C(10); # CONVERT TO DECIMAL DISPLAY, RIGHT JUSTIFIED #
        PROC XWHD;       # CONVERT HEX TO DISPLAY                      #
        PROC XWOD;       # CONVERT OCTAL TO DISPLAY                    #
        END 
  
# 
**
# 
      DEF STASIZE         # 12 #;      # STA$MSG SIZE                  #
      DEF INTSIZE          # 2 #;      # INT$MSG SIZE                  #
  
      ITEM CODE                I;      # COMMAND BEING PROCESSED       #
      ITEM MSGTYPE             I;      # MESSAGE TYPE                  #
  
      ITEM REQTYPE             I;      # REQUEST OR REPLY              #
      ITEM RESULT          C(10);      # CHARACTER RESULT OF VALUE CONV#
      ITEM VALUE               I;      # INTEGER TO CONVERT TO DISPLAY #
  
# 
****  THIS ARRAY DEFINES ALL COMMAND MESSAGES.
# 
      ARRAY STA$MSG [00:STASIZE] S(4);
        BEGIN 
        ITEM STA$TEXT   C(00,00,34) = 
          ["*** UNDEFINED ERROR.              ",
           "*** MOUNT REQUEST ISSUED.         ",
           "*** FORCE DISMOUNT REQUEST ISSUED.",
           "*** DISMOUNT REQUEST ISSUED.      ",
           "*** QUERY REQUEST ISSUED.         ",
           "*** MOUNT ACK RECEIVED.           ",
           "*** FORCE DISMOUNT ACK RECEIVED.  ",
           "*** DISMOUNT ACK RECEIVED.        ",
           "*** QUERY ACK RECEIVED.           ",
           "*** MOUNT REPLY RECEIVED.         ",
           "*** FORCE DISMOUNT REPLY RECEIVED.",
           "*** DISMOUNT REPLY RECEIVED.      ",
           "*** QUERY REPLY RECEIVED.         ",
                                                ];
        ITEM STA$ZBYTE  U(03,24,36) = [0, STASIZE(0)];
        END 
# 
****  THIS ARRAY DEFINES ALL INTERNAL DEBUG MESSAGES. 
# 
      ARRAY INT$MSG [00:INTSIZE] S(4);
        BEGIN 
        ITEM INT$TEXT   C(00,00,34) = 
          ["*** SUBSYSTEM REQUEST PROCESSED.  ",
           "*** SUBSYSTEM RESPONSE SENT.      ",
           "*** SUBSYSTEM NOT RESPONDING.     ",
                                                ];
        ITEM INY$ZBYTE  U(03,24,36) = [0,INTSIZE(0)]; 
        END 
  
# 
****  THIS ARRAY DEFINES THE DRIVE MESSAGE FOR COMMANDS.
# 
      ARRAY DRV$MSG [00:00] S(2); 
        BEGIN 
        ITEM DRV$TEXT   C(00,00,17) = ["***** DRIVE =   ."];
        ITEM DRV$NUM    C(01,24,02);
        ITEM DRV$ZBYTE  U(01,42,18) = [0];
        END 
CONTROL EJECT;
      PROC DISMWD (BUF, LNG); 
      BEGIN                            # DISMWD                        #
# 
*     THIS PROCEDURE DISPLAYS A SPECIFIED NUMBER OF CYBER WORDS 
*     BEGINNING AT LOCATION *BUF*.
# 
  
      ITEM BUF           U;            # LOCATION TO DISPLAY           #
      ITEM LNG           I;            # NUMBER OF WORDS TO DISPLAY    #
  
      ITEM I             U;            # LOOP COUNTER                  #
      ITEM K             U;            # LOOP COUNTER                  #
# 
**
# 
      BASED ARRAY BUFFER [0:0] S(1);   # ACN ENTRY                     #
        BEGIN 
        ITEM BUF$WRD  U(00,00,60);     # WORD REFERENCE                #
        END 
  
      ARRAY MSGTXT [00:00] S(2);
        BEGIN 
        ITEM MSG$TEXT    C(00,00,20); 
        END 
  
      ARRAY DISMSGTXT [00:00] S(5); 
        BEGIN 
        ITEM DIS$OCT     C(00,00,20); 
        ITEM DIS$SP      C(02,00,01)   = [" "]; 
        ITEM DIS$HEX     C(02,06,20); 
        ITEM DIS$ZBYTE   U(04,06,54)   = [0]; 
        END 
  
# 
****  START DISMWD
# 
      P<BUFFER> = BUF;
      FOR I = 0 STEP 1 UNTIL (LNG - 1) DO 
        BEGIN                          # CONVERT WORD OF SM FOR DAYFILE#
        XWOD (BUF$WRD [I], MSGTXT); 
        DIS$OCT = MSG$TEXT; 
        XWHD (BUF$WRD [I], MSGTXT); 
        DIS$HEX = MSG$TEXT; 
        MESSAGE (DISMSGTXT, 0); 
        END                            # CONVERT WORD OF SM FOR DAYFILE#
  
      RETURN; 
  
      END                              # DISMWD                        #
CONTROL EJECT;
# 
****  START MAIN PROCEDURE
# 
  
      IF CODE EQ CSIDISMOUNT$ 
      THEN
        BEGIN                          # DISMOUNT, CHECK IF FORCE      #
        IF MSGTYPE EQ DEBUGREQ$ 
        THEN
          REQTYPE = REQUEST$; 
        ELSE
          REQTYPE = REPLY$; 
  
        IF MSG$MESOPT [REQTYPE] EQ FORCEOPT$
        THEN
          CODE = FORCEDIS$; 
        ELSE
          CODE = DISMOUNT$; 
        END                            # DISMOUNT, CHECK IF FORCE      #
  
      ELSE IF CODE EQ CSIMOUNT$ 
      THEN
        CODE = MOUNT$;
  
      ELSE IF CODE EQ CSIQUERY$ 
      THEN
        CODE = SERVERQUERY$;
  
      ELSE IF CODE EQ INTERNMSG$
      THEN
        BEGIN                          # INTERNAL, NON-COMMAND ERROR   #
        MESSAGE (INT$MSG [MSGTYPE], 0); 
  
        IF MSGTYPE EQ DEBUGREC$ 
        THEN
          DISMWD (LOC (REQBUF [0]), 3); 
        ELSE IF MSGTYPE EQ DEBUGSND$
        THEN
          DISMWD (LOC (REPBUF [NEXTREAD]), 3);
  
        RETURN; 
        END                            # INTERNAL, NON-COMMAND ERROR   #
  
      ELSE
        RETURN; 
  
      MESSAGE (STA$MSG [CODE + MSGTYPE * LASTCOMMAND$], 0); 
  
      IF (MSGTYPE NQ DEBUGACK$) AND 
         (CODE NQ SERVERQUERY$) 
      THEN
        BEGIN                          # INCLUDE DRIVE NUMBER          #
        IF MSGTYPE EQ DEBUGREQ$ 
        THEN
          VALUE = CMD$DRIVE [REQUEST$]; 
        ELSE IF MSGTYPE EQ DEBUGFINAL$
        THEN
          VALUE = CMD$DRIVE [REPLY$]; 
  
        RESULT = XCDD (VALUE);
        DRV$NUM [0] = C<8,2>RESULT; 
        MESSAGE (DRV$MSG [0], 0); 
        END                            # INCLUDE DRIVE NUMBER          #
  
      END                              # SSIDDIS                       #
      TERM
