*DECK DBGMSG
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
USETEXT COMAMCB 
PROC DBGMSG (HEADERADDR, TEXTADDR, NETPUTFLAG); 
# TITLE DBGMSG - WRITE DEBUG MESSAGE. # 
  
      BEGIN  # DBGMSG # 
  
# 
**    DBGMSG - WRITE DEBUG MESSAGE. 
* 
*     DBGMSG SENDS NETGET AND NETPUT MESSAGES TO THE DAYFILE IN OCTAL 
*     AND HEXADECIMAL FORMS.
* 
*     PROC DBGMSG (HEADERADDR, TEXTADDR, NETPUTFLAG)
* 
*     ENTRY   -  HEADERADDR - FWA OF HEADER WORD. 
*                TEXTADDR   - FWA OF TEXT AREA. 
*                NETPUTFLAG - TRUE IF NETPUT. 
*                             FALSE IF NETGET.
* 
*     EXIT    -  NONE.
* 
*     PROCESS -  IF HEADER WORD NON-ZERO: 
*                  SEND DAYFILE MESSAGE (HEADER WORD IN OCTAL). 
*                  WHILE NOT END OF TEXT (AND LT MAX TEXT LENGTH):  
*                    SEND DAYFILE MESSAGE (TEXT WORD IN OCTAL OR HEX).
# 
  
      ITEM HEADERADDR I;             # HEADER WORD #
      ITEM TEXTADDR   I;             # FIRST WORD OF TEXT AREA #
      ITEM NETPUTFLAG B;             # MESSAGE NETPUT-D FLAG #
  
# 
****  PROC DBGMSG - XREF LIST BEGIN.
# 
  
      XREF
        BEGIN 
        PROC CALLSYS;                # MAKES RA+1 CALLS # 
        FUNC HEXCHF     C(10);       #  HEX DISPLAY CODE #
        FUNC OCTCHF     C(10);       #  OCTAL DISPLAY CODE #
        END 
  
# 
****  PROC DBGMSG - XREF LIST END.
# 
      ARRAY [ACT60BIN:ACT6B10W] S(1);  # OCTFLAG/TEXT LENGTH FACTORS #
        BEGIN 
        ITEM ACTFACOCT  B(00,00,01) = [TRUE,FALSE,FALSE,TRUE];
        ITEM ACTFACADD  I(00,24,12) = [0,1,1,1];  # ADDEND #
        ITEM ACTFACDIV  I(00,36,12) = [1,15,5,10];  # DIVISOR # 
        ITEM ACTFACMUL  I(00,48,12) = [1,2,1,1];  # MULTIPLIER #
        END 
  
      ARRAY DBGMSGBUF [0:0] S(5);  # DAYFILE MESSAGE BUFFER # 
        BEGIN 
        ITEM DBG$MSG    C(00,00,20) = ["FIP NETPUT SUPR HDR "]; 
        ITEM DBG$MSGGP  C(00,42,03);  # "GET"/"PUT" # 
        ITEM DBG$MSGDS  C(01,06,04);  # "DATA"/"SUPR" # 
        ITEM DBG$MSGHT  C(01,36,03);  # "HDR"/"TXT" # 
        ITEM DBG$MSGOCU C(02,00,10);  # OCTAL DISPLAY, UPPER #
        ITEM DBG$MSGOCL C(03,00,10);  # OCTAL DISPLAY, LOWER #
        ITEM DBG$MSGWD3 U(03,00,60);
        ITEM DBG$MSGHXU C(02,00,10);  # HEX DISPLAY, UPPER 10 # 
        ITEM DBG$MSGHXL C(03,00,05);  # HEX DISPLAY, LOWER 5 #
        ITEM DBG$MSGEND U(04,42,18) = [0];  # TERMINATOR #
        END 
  
      BASED ARRAY TXTBUF [0:0] S(1);  # TEXT BUFFER # 
        BEGIN 
        ITEM TXT$BUFOCU U(00,00,30);  # OCTAL UPPER 10 #
        ITEM TXT$BUFOCL U(00,30,30);  # OCTAL LOWER 10 #
        ITEM TXT$BUFHXU U(00,00,40);  # HEX UPPER 10 #
        ITEM TXT$BUFHXL U(00,40,20);  # HEX LOWER 5 # 
        END 
  
      ITEM I          I;             # LOOP VARIABLE #
      ITEM LEN        I;             # COUNT OF CM WORDS OF TEXT AREA # 
      ITEM OCTFLAG    B;             # OCTAL CONVERSION FLAG #
                                               CONTROL EJECT; 
      P<HDRWORD> = HEADERADDR;
      IF HD$WORD NE 0              # IF HEADER NON-ZERO # 
      THEN
        BEGIN 
        IF HD$ABT[0] EQ SUPMSGBLK  # IF SUPERVISORY MESSAGE # 
        THEN
          BEGIN 
          DBG$MSGDS = "SUPR"; 
          END 
  
        ELSE
          BEGIN 
          DBG$MSGDS = "DATA"; 
          END 
  
        IF NETPUTFLAG              # IF SENDING MESSAGE # 
        THEN
          BEGIN 
          DBG$MSGGP = "PUT";
          END 
  
        ELSE
          BEGIN 
          DBG$MSGGP = "GET";
          END 
  
        LEN = HD$TLCU;             # TEXT LENGTH IN CHARACTERS #
        I = HD$ACT;                # CHARACTER TYPE # 
        IF I LT ACT60BIN
          OR I GT ACT6B10W
        THEN
          BEGIN 
          I = ACT60BIN;            # ASSUME 60-BIT CHARACTER #
          END 
  
        LEN = ((LEN*ACTFACMUL[I]) / ACTFACDIV[I]) + ACTFACADD[I]; 
        IF LEN GT MAXDBGMSGL       # IF TEXT TOO LONG # 
        THEN
          BEGIN 
          LEN = MAXDBGMSGL;        # USE MAX LENGTH # 
          END 
  
        OCTFLAG = ACTFACOCT[I];    # OCTAL CONVERSION FLAG #
        P<TXTBUF>  = P<HDRWORD>;   # SET TEXT POINTER (HEADER) #
        DBG$MSGHT = "HDR";
        MSG$BUFADR[0] = LOC(DBGMSGBUF); 
  
        SLOWFOR I = 0 STEP 1 UNTIL LEN
        DO
          BEGIN 
          IF I EQ 0                # IF HEADER WORD # 
            OR OCTFLAG             # OR OCTAL CONVERSION #
          THEN
            BEGIN 
            DBG$MSGOCU = OCTCHF(TXT$BUFOCU,10);  # CONVERT TO OCTAL # 
            DBG$MSGOCL = OCTCHF(TXT$BUFOCL,10);  # CONVERT TO OCTAL # 
            END 
  
          ELSE
            BEGIN 
            DBG$MSGWD3 = 0; 
            DBG$MSGHXU = HEXCHF(TXT$BUFHXU,10);  # CONVERT TO HEX # 
            DBG$MSGHXL = HEXCHF(TXT$BUFHXL,5);  # CONVERT TO HEX #
            END 
  
          MSG$STATUS[0] = 0;
          CALLSYS (MSGCALL);         # SEND DAYFILE MESSAGE # 
          P<TXTBUF> = TEXTADDR + I;  # NEXT TEXT WORD # 
          DBG$MSGHT = "TXT";         # TEXT WORD #
          END 
  
        END 
  
      END  # DBGMSG # 
  
      TERM
