*COMDECK COMMCOM
#     COMMCOM - ITEM AND ARRAY DECLARATIONS AND DEFINITIONS.     #
                                               CONTROL NOLIST;
                                               CONTROL IFEQ LISTCON,1;
                                               CONTROL LIST;
                                               CONTROL ENDIF; 
# 
***   COMMCOM - ITEM AND ARRAY DECLARATIONS AND DEFINITIONS.
* 
*     COMMCOM CONTAINS THE COMMON ITEM AND ARRAY DECLARATIONS AND 
*     DEFINITIONS USED BY MHF.
# 
  
    BEGIN  # COMMCOM COMDECK #
  
      DEF MHFVER     # "MHF    1.4" #;  # MHF VERSION # 
CONTROL ENDIF;
CONTROL IFEQ OS$NOS;
      DEF OSID       # "NOS 2     " #;  # O/S IDENTIFIER #
CONTROL ENDIF;
CONTROL IFEQ OS$NOSBE;
      DEF OSID       # "NOS/BE 1  " #;  # O/S IDENTIFIER #
CONTROL ENDIF;
  
      DEF BMLHDRLEN  # 3#;         # BML HEADER LENGTH #
      DEF CEFMSGLEN  # 6#;         # CERFILE MESSAGE LENGTH # 
      DEF DST$LENBYT #24#;         # DETAILED STATUS TABLE LENGTH # 
      DEF NEL$LENBYT # 9#;         # NAD ERROR LOG ENTRY LENGTH # 
      DEF NEL$MAXENT #21#;         # MAX NAD ERROR LOG ENTRIES #
  
      DEF ONEPRU     #64#;         # PRU LENGTH # 
  
      DEF MSG$DAYF   # 0#;         # FLAG - DAYFILE MESSAGE # 
      DEF MSG$BDIS   # 1#;         # FLAG - DAYFILE MESSAGE # 
      DEF MSG$BML    # O"11"#;     # FLAG - BML MESSAGE (NOS) # 
      DEF MSG$CERF   # 4#;         # FLAG - CERFILE MESSAGE (NOS/BE) #
  
      DEF DLDELAYTIM #60#;         # DUMP/LOAD DELAY (SECS) # 
      DEF DLRTYLIM   #   3#;       # DUMP/LOAD RETRY LIMIT (.LT. 7) # 
      DEF DUMPDELAY  #   5#;       # DUMP RETRY DELAY (SEC) (.LE. 63) # 
      DEF DUMPLIMIT  #   3#;       # MAXIMUM NAD DUMPS (.LT. 7) # 
      DEF LOADDELAY  #   2#;       # LOAD RETRY DELAY (SEC) (.LE. 63) # 
      DEF ELIDLEDLY  #  60#;       # ERROR LOG DELAY (SEC) NAD IDLE # 
      DEF ELACTIVDLY # 300#;       # ERROR LOG DELAY (SEC) NAD ACTIVE # 
      DEF ELWRITEDLY #3600#;       # ERROR LOG BML/CERFILE DELAY (SEC) #
# 
*     NAD DUMP PERMANENT FILE NAME = "NDFPID" 
*                                        PID = HOST PID (3 CHARS).
* 
*     NAD DUMP RECORD NAME = "NDMPXYY"
*                                 X   = "L"/"R" (LOCAL/REMOTE NAD). 
*                                  YY = CHANNEL NUMBER (LOCAL). 
*                                     = NAD ADDRESS (REMOTE). 
* 
*     RHF CONFIGURATION FILE NAME = "RCFPID"
*                                       PID = HOST PID (3 CHARS). 
# 
  
      DEF NDFNAME    # "NDF" #;    # NAD DUMP PERM FILE NAME, CHS 1-3 # 
      DEF NDRNAME    # "NDMP" #;   # NAD DUMP RECORD NAME, CHARS 1-4 #
      DEF RCFNAME    # "RCF" #;  # RHF CONFIG. FILE NAME, CHARS 1-3 # 
  
# 
*     DEFAULT VALUES FOR NAD CONTROLWARE INITIALIZATION PARAMETERS. 
# 
      DEF CWIP$BHSZ  # X"0010" #;  # NAD BUFFER HEADER SIZE # 
      DEF CWIP$CMBS  # X"0020" #;  # CTL MSG BUFFER SIZE #
  
      DEF CWIP$NDVAL # 12 #;       # NUMBER OF DEFAULT VALUES # 
  
      DEF CWIP$V00   # X"7FFF" #;  # NAD MEMORY SIZE #
      DEF CWIP$V01   # X"000F" #;  # TCU ENABLES #
      DEF CWIP$V03   # X"0019" #;  # MAX NUMBER OF NADS # 
      DEF CWIP$V04   # X"0023" #;  # MAX NUMBER OF PATHS #
      DEF CWIP$V06   # X"0024" #;  # INTERNAL BUFFER COUNT #
      DEF CWIP$V08   # X"0023" #;  # CONTROL MSG BUFFER COUNT # 
      DEF CWIP$V11   # X"0810" #;  # TYPE 1 BUFFER SIZE # 
      DEF CWIP$V12   # X"0002" #;  # TYPE 1 BUFFER COUNT #
      DEF CWIP$V19   # X"001E" #;  # CTL MSG RCV QUEUE LIMIT #
      DEF CWIP$V20   # X"001E" #;  # CTL MSG SEND QUEUE LIMIT # 
      DEF CWIP$V21   # X"0002" #;  # PATH RECEIVE QUEUE LIMIT # 
      DEF CWIP$V22   # X"0002" #;  # PATH SEND QUEUE LIMIT #
  
# 
*     NAD INITIALIZATION PARAMETER AND CONTROLWARE RECORD CONSTANTS.
# 
  
      DEF CWSIZE     # 12000 #;  # 170 NAD C/W SIZE # 
      DEF CW170      # "170" #;  # 170 NAD C/W TYPE # 
CONTROL IFEQ OS$NOS;
      DEF DEFCWN     # O"34423300000000" #;  # DEFAULT C/W NAME # 
CONTROL ENDIF;
CONTROL IFEQ OS$NOSBE;
      DEF DEFCWN     # O"16010446344233" #;  # DEFAULT C/W NAME # 
CONTROL ENDIF;
  
      DEF CWIPMINL52  #O"24"#;       # MIN LENGTH OF CWIP 52-TABLE #
      DEF CWIPHDRL52  #O"10"#;       # LENGTH OF 52-TABLE HEADER #
      DEF CWIPMINL77  #O"44"#;       # MIN LENGTH OF CWIP RECORD #
  
# 
*     GETNCW ERROR CODES. 
# 
      DEF CWERROR$NM  #  1 #;      # NO MATCHING C/W FOUND #
      DEF CWERROR$NG  #  2 #;      # FAULTY C/W FOUND # 
      DEF CWERROR$MX  #  3 #;      # MAXIMUM C/W ERROR CODE # 
  
# 
*     GETCWIP ERROR CODES.
# 
      DEF CWIPERR$NM  #  1 #;      # MISSING I.P. RECORD #
      DEF CWIPERR$MX  #  2 #;      # MAXIMUM I.P. ERROR CODE #
  
# 
*     NADDUMP ERROR CODES.
# 
      DEF NDERROR$MX  # 2 #;       # MAXIMUM NAD DUMP ERROR CODE #
  
  
# 
*     NETON ERROR CODES.
# 
      DEF NETNERR$MX  #  8 #;      # MAXIMUM NETON ERROR CODE # 
  
# 
*     NLD FUNCTION CODES. 
# 
      DEF NLD$FCLOAD # 1 #;        # LOAD NAD # 
      DEF NLD$FCDUMP # 2 #;        # DUMP NAD # 
      DEF NLD$FCSTAT # 3 #;        # NAD STATUS (ERROR LOG) # 
      DEF NLD$FCESTE # 4 #;        # CHANGE NAD EST STATUS #
  
      COMMON COMMCOM; 
      BEGIN  # COMMCOM COMMON AREA #
  
# 
*     NETON PARAMETERS
# 
  
      ITEM ANAME      C(7) = "MHF"; 
  
      ARRAY NSUP [0:0] S(1);
        BEGIN 
        ITEM NSUP$WORD  U(00,00,60) = [0];  # SUP MSG STATUS #
        ITEM NSUP$IBIT  B(00,03,01);        # DATA BLOCK AVAIL #
        ITEM NSUP$SBIT  B(00,04,01);        # ASYNCH MSG AVAIL #
        END 
  
      ITEM STAT       I = 0;
      ITEM MINACN     I = 1;
      ITEM MAXACN     I = 1;
  
# 
*     MHF COMMON PARAMETERS 
# 
      ITEM CMMGRP     U = 0;       # CMM GROUP IDENTIFIER # 
      ITEM CURRTIM    I = 1;       # CURRENT TIME (HHMMSS) #
      ITEM ERROR      B = FALSE;   # GLOBAL ERROR FLAG #
  
      ARRAY [0:0] S(1); 
        BEGIN 
        ITEM HOSTPID    C(00,00,03) = ["   "];  # HOST PID #
        ITEM MFID       U(00,06,12);  # MAINFRAME IDENT # 
        END 
  
      ITEM NDTBUF     I = 0;       # FWA OF NDT BUFFER #
      ITEM NDTLEN     I = 0;       # LENGTH OF NDT #
      ITEM NDTBIAS    I = 0;       # MHF/RHF NDT OFFSET # 
      ITEM NDTLNT     I = 0;       # FWA OF LOCAL NAD TABLES #
      ITEM TIMER      I = 0;       # NAD ERROR-LOG-RETRIEVAL  # 
  
      ARRAY [0:0] S(2);            # NAD DUMP AND LOAD PARAMETERS # 
        BEGIN 
        ITEM DLPARAM0   U(00,00,60) = [0];  # PRESET #
        ITEM DLCHKNDT   B(00,00,01);  # CHECK NDT FOR NAD LOAD/DUMP # 
        ITEM DLRMTNAD   B(00,01,01);  # REMOTE NAD FLAG # 
        ITEM DLCVLR     B(00,02,01);  # MAINTENANCE ACCESS (CVL) #
        ITEM DLRETRY    U(00,03,03);  # RETRY COUNT # 
        ITEM DLSTATE    U(00,06,06);  # NAD STATE # 
        ITEM DLTRACE    U(00,12,02);  # TRACE OPTION #
        ITEM DLRMTADR   I(00,24,18);  # REMOTE NAD ENTRY ADDR # 
        ITEM DLNADADR   I(00,42,18);  # LOCAL NAD ENTRY ADDR #
        ITEM DLPARAM1   U(01,00,60) = [0];  # PRESET #
        ITEM DLDELAY    U(01,00,60);  # DUMP/LOAD DELAY TIME #
        END 
  
      ARRAY [0:0] S(2);            # NAD ERROR LOG PARAMETERS # 
        BEGIN 
        ITEM ELPARAM0   U(00,00,60) = [0];  # PRESET #
        ITEM ELGETLOG   B(00,00,01);  # GET NAD ERROR LOG # 
        ITEM ELRMTNAD   B(00,01,01);  # REMOTE NAD #
        ITEM ELPTHADR   I(00,06,18);  # PATH ENTRY ADDR # 
        ITEM ELRMTADR   I(00,24,18);  # REMOTE NAD ENTRY ADDR # 
        ITEM ELNADADR   I(00,42,18);  # LOCAL NAD ENTRY ADDR #
        ITEM ELPARAM1   U(01,00,60) = [0];  # PRESET #
        ITEM ELDELAY    U(01,00,60);  # ERROR LOG DELAY TIME #
        END 
  
# 
*     NAD LOADING PARAMETERS. 
# 
      ITEM CWADR      I;           # FWA OF C/W (DATA) #
      ITEM CWBUF      I = 0;       # FWA OF C/W BUFFER #
      ITEM CWLEN      I;           # LENGTH OF C/W #
      ARRAY CWNAM S(1); 
        BEGIN 
        ITEM CWNAMC     C(00,00,07);  # NAME OF C/W ON SYSTEM # 
        ITEM CWNAMU     U(00,00,42);  # C/W NAME (BINARY) # 
        END 
  
      ITEM CWTYP      C(3);        # TYPE OF C/W #
  
      ITEM IPADR      I;           # FWA OF I/P (DATA) #
      ITEM IPBUF      I = 0;       # FWA OF I/P BUFFER #
      ITEM IPLEN      I;           # LENGTH OF I/P BUFFER # 
  
      ARRAY [0:0] S(1); 
        BEGIN 
        ITEM IPNAMU     U(00,00,42) = [0];  # NAME OF I/P RECORD #
        ITEM IPNAM      C(00,00,07);        # NAME OF I/P RECORD #
        END 
  
# 
*     NAD DUMPING PARAMETERS. 
# 
  
      ARRAY [0:0] S(1); 
        BEGIN 
        ITEM NDFNAMC    C(00,00,06);  # NAD DUMP PERM FILE NAME # 
        ITEM NDFNAMU    U(00,00,60);  # FILE NAME FOR FET # 
        ITEM NDFNAM$123 C(00,00,03) = [NDFNAME];  # CHARS 1-3 # 
        ITEM NDFNAM$456 C(00,18,03);  # CHARS 4-6 # 
        ITEM NDFNAM$Z   U(00,36,24) = [0];  # ZERO FILL # 
        END 
  
      ARRAY [0:0] S(1); 
        BEGIN 
        ITEM NDNAMC     C(00,00,07);  # NAD DUMP RECORD NAME #
        ITEM NDNAMU     U(00,00,60);  # NAME FOR PRFX TABLE # 
        ITEM NDNAM$1234 C(00,00,04) = [NDRNAME];  # CHS 1-4 # 
        ITEM NDNAM$5    C(00,24,01);  # 5TH CHAR #
        ITEM NDNAM$67   C(00,30,02);  # 6TH - 7TH CHAR #
        ITEM NDNAM$Z    U(00,42,18) = [0];  # ZERO FILL # 
        END 
  
# 
*     FET FOR READING RCFILE AND WRITING NDFILE 
# 
  
      BASED ARRAY FET [0:0] S(5); 
        BEGIN 
        ITEM FET$WORD0  U(00,00,60);
        ITEM FET$NAME   U(00,00,42);
        ITEM FET$NAMEC  C(00,00,07);
        ITEM FET$CODES  U(00,42,18);
        ITEM FET$PFMERR U(00,42,08);  # PFM ERROR CODE #
        ITEM FET$LEVEL  U(00,42,04);
        ITEM FET$ERRCOD U(00,46,05);
        ITEM FET$CDSTAT U(00,51,09);
        ITEM FET$CMPLT  B(00,59,01);
        ITEM FET$WORD1  I(01,00,60);
        ITEM FET$EPBIT  B(01,14,01);
        ITEM FET$FIRST  I(01,42,18);
        ITEM FET$IN     I(02,00,60);
        ITEM FET$OUT    I(03,00,60);
        ITEM FET$WORD4  I(04,00,60);
        ITEM FET$LIMIT  I(04,42,18);
        END 
  
# 
*     DEFAULT VALUES OF VARIABLE CONTROLWARE INITIALIZATION PARAMETERS. 
# 
  
      ARRAY [1:CWIP$NDVAL] S(1);
        BEGIN                    # CWIP WORD ORDINALS # 
  
        ITEM CWIP$W     U(00,36,06) = 
                    [00,         # NAD MEMORY SIZE #
                     01,         # TCU ENABLES #
                     03,         # MAX NO. OF NADS #
                     04,         # MAX NO. OF PATHS # 
                     06,         # SYSTEM BUFFER COUNT #
                     08,         # CONTROL MESSAGE BUFFER COUNT # 
                     11,         # TYPE 1 BUFFER SIZE # 
                     12,         # TYPE 1 BUFFER COUNT #
                     19,         # CONTROL MESSAGE RECV QUEUE LIMIT # 
                     20,         # CONTROL MESSAGE SEND QUEUE LIMIT # 
                     21,         # PATH RECEIVE QUEUE LIMIT # 
                     22];        # PATH SEND QUEUE LIMIT #
  
                                 # DEFAULT VALUES # 
  
        ITEM CWIP$V     U(00,44,16) = 
                    [CWIP$V00,   # NAD MEMORY SIZE #
                     CWIP$V01,   # TCU ENABLES #
                     CWIP$V03,   # MAX NO. OF NADS #
                     CWIP$V04,   # MAX NO. OF PATHS # 
                     CWIP$V06,   # SYSTEM BUFFER COUNT #
                     CWIP$V08,   # CONTROL MESSAGE BUFFER COUNT # 
                     CWIP$V11,   # TYPE 1 BUFFER SIZE # 
                     CWIP$V12,   # TYPE 1 BUFFER COUNT #
                     CWIP$V19,   # CONTROL MESSAGE RECV QUEUE LIMIT # 
                     CWIP$V20,   # CONTROL MESSAGE SEND QUEUE LIMIT # 
                     CWIP$V21,   # PATH RECEIVE QUEUE LIMIT # 
                     CWIP$V22];  # PATH SEND QUEUE LIMIT #
        END 
  
# 
*     GETNCW ERROR MESSAGES 
# 
      ARRAY [1:CWERROR$MX] S(4);
        BEGIN 
        ITEM CWERRORMSG C(00,00,38) = 
             ["MHF,       NAD C/W MISSING -  XXXXXXX.", 
              "MHF,       NAD C/W FAULTY  -  XXXXXXX.", 
              "MHF,       ERROR IN ROUTINE GETNCW.   "];
        ITEM CWERRORNAM C(03,00,07);
        ITEM CWERROREND U(03,48,12) = [CWERROR$MX(0)];
        END 
  
# 
*     GETCWIP ERROR MESSAGES
# 
      ARRAY [1:CWIPERR$MX] S(5);
        BEGIN 
        ITEM CWIPERRMSG C(00,00,48) = 
             ["MHF,       INIT PARAMETER RECORD MISSING XXXXXXX", 
              "MHF,       ERROR IN ROUTINE GETCWIP             "];
        ITEM CWIPERRNAM C(04,06,07);
        ITEM CWIPERREND U(04,48,12) = [CWIPERR$MX(0)];
        END 
  
# 
*     GETSUPM ERROR MESSAGES
# 
      ARRAY [0:0] S(4); 
        BEGIN 
        ITEM GETSUPMSG  C(00,00,38) = 
             ["MHF,       ERROR IN ROUTINE GETSUPM.  "];
        ITEM GETSUPMSGT U(03,48,12) = [0];
        END 
  
# 
*     MHF MESSAGES
# 
      ARRAY [0:2] S(2); 
        BEGIN 
        ITEM MHFMESSAGE C(00,00,18) = 
             ["MHF, STARTED      ", 
              "MHF, STOPPED      ", 
              "MHF, ABORTED      "];
        ITEM MHFMESSAGT U(01,48,12) = [3(0)]; 
        END 
  
# 
*     NETON ERROR MESSAGES
# 
      ARRAY [1:NETNERR$MX] S(5);
        BEGIN 
        ITEM NETNERRMSG C(00,00,48) = 
             ["MHF, NETON REJECT - RHF UNAVAILABLE.            ", 
              "MHF, NETON REJECT - MHF ALREADY ACTIVE.         ", 
              "MHF, NETON REJECT - MHF DISABLED.               ", 
              "MHF, NETON REJECT - MHF UNKNOWN TO RHF.         ", 
              "MHF, NETON REJECT - MHF UNAUTHORIZED.           ", 
              "MHF, NETON REJECT - INVALID VALUE FOR ACN.      ", 
              "MHF, NETON REJECT - MHF NETTED ON ALREADY.      ", 
              "MHF, NETON REJECT - UNRECOGNIZED ERROR.         "];
        ITEM NETNERREND U(04,48,12) = [NETNERR$MX(0)];
        END 
  
# 
*     RECNAD MESSAGES.
# 
  
      ARRAY [0:0] S(4); 
        BEGIN 
        ITEM RECNADMSG  C(00,00,38) = 
             [" MHF, NAD ON CHANNEL XX       DISABLED"];
  
        ITEM RECNADMSGB C(01,00,10);  # "ON CHANNEL"/"(REMOTE)" # 
        ITEM RECNADMSGC C(02,06,02);  # CHANNEL/NAD ADDR #
        ITEM RECNADMSGD C(03,00,08);  # "DISABLED/DUMPED/LOADED" #
        ITEM RECNADMSGZ U(03,48,12) = [0];  # ZERO-BYTE # 
        END 
  
# 
*     NLD PARAMETER BLOCK 
# 
  
      ARRAY PBLOCK[0:0] S(6); 
        BEGIN  # ARRAY PBLOCK # 
        ITEM PB$WD0     U(00,00,60) = [0];
        ITEM PB$CH      U(00,06,06);  # CHANNEL NUMBER #
        ITEM PB$ESTO    U(00,12,12);  # EST ORD OF NAD SET BY NLD # 
        ITEM PB$SUBFCN  U(00,24,12);  # SUBFUNCTION CODE #
        ITEM PB$RC      U(00,48,06);  # RESPONSE CODE SET BY NLD #
        ITEM PB$CMPLT   B(00,59,01);  # COMPLETE BIT #
  
        ITEM PB$FIRST   U(01,42,18);  # BUFFER FIRST POINTER #
        ITEM PB$IN      U(02,42,18);  # BUFFER IN POINTER # 
        ITEM PB$OUT     U(03,42,18);  # BUFFER OUT POINTER #
        ITEM PB$LIMIT   U(04,42,18);  # BUFFER LIMIT POINTER #
  
        ITEM PB$WD5     U(05,00,60) =[0];# WORD 5 OF PBLOCK # 
        ITEM PB$DEAD    U(05,12,16);  # NAD DEAD CODE (RC=10B) #
        ITEM PB$AC      U(05,28,16);  # ACCESS CODE # 
        ITEM PB$ND      U(05,44,08);  # REMOTE NAD ADDRESS #
        ITEM PB$RT      U(05,52,04);  # REMOTE TCU ENABLES #
        ITEM PB$LT      U(05,56,04);  # LOCAL TCU ENABLES # 
        END  # ARRAY PBLOCK # 
  
# 
*     CALL BLOCK FOR "ABT"
# 
  
      ARRAY ABTCALL[0:0] S(1);
        BEGIN  # ARRAY ABTCALL #
        ITEM ABT$NAME   C(00,00,03) = ["ABT"];
        END 
  
# 
*     CALL BLOCK FOR "CIO"
# 
  
      ARRAY CIOCALL[0:0] S(1);
        BEGIN 
        ITEM CIONAME    C(00,00,03) = ["CIO"];
        ITEM CIORECALL  B(00,19,01) = [TRUE]; 
        ITEM CIOFETADDR I(00,42,18);
        END 
  
# 
*     CALL BLOCK FOR "MSG"
# 
  
      ARRAY MSGCALL [0:0] S(2); 
        BEGIN 
        ITEM MSG$WORD0  C(00,00,04) = ["MSGP"];  # MSG CALL # 
        ITEM MSG$DSPLAY U(00,24,12) = [MSG$DAYF];  # DESTINATION #
        ITEM MSG$STATWD U(00,42,18);
        ITEM MSG$BUFADR U(01,00,30);
        ITEM MSG$STATUS U(01,30,30);
        END 
  
# 
*     CALL BLOCK FOR "NLD"
# 
  
      ARRAY NLDCALL[0:0] S(1);
        BEGIN  # ARRAY NLDCALL #
        ITEM NLD$NAME   C(00,00,03) = ["NLD"];
        ITEM NLD$RCL    B(00,19,01) = [TRUE]; 
        ITEM NLD$FC     U(00,24,12) = [3];
        ITEM NLD$PBLK   U(00,42,18);
        END  # ARRAY NLDCALL #
  
# 
*     CALL BLOCK FOR "RCL"
# 
  
      ARRAY RCLCALL [0:0] S(1); 
        BEGIN 
        ITEM RCL$WORD0  C(00,00,04) = ["RCLP"];  # RECALL # 
        ITEM RCLRECALL  B(00,19,01);  # AUTO-RECALL # 
        ITEM RCLPARAMAD U(00,42,18);  # ADDR #
        END 
  
CONTROL IFEQ OS$NOSBE;
  
      ARRAY CEF [0:0] S(CEFMSGLEN);  # CERFILE MESSAGE BUFFER # 
        BEGIN  # ARRAY CEF$BUF #
        ITEM CEF$WORD0  U(00,00,60);  # 1ST WORD #
        ITEM CEF$RT     U(00,00,06) = [O"35"];  # RECORD TYPE # 
        ITEM CEF$EC     U(00,06,06) = [0];      # ERROR CODE #
        ITEM CEF$EST    U(00,12,12) = [0];      # EST ORDINAL # 
        ITEM CEF$N1     U(00,24,06) = [O"77"];  # PP NUMBER # 
        ITEM CEF$N2     U(00,30,06);            # CHANNEL # 
        ITEM CEF$SC     U(00,36,02);            # SUB-CODE #
        ITEM CEF$HUI    U(00,48,12);            # HUI # 
  
        ITEM CEF$GDWD1  U(01,00,60);  # GENERAL DETAIL STATUS WORD 1 #
        ITEM CEF$GDWD2  U(02,00,60);  # GENERAL DETAIL STATUS WORD 2 #
        ITEM CEF$GDWD3  U(03,00,60);  # GENERAL DETAIL STATUS WORD 3 #
        ITEM CEF$GDWD4  U(04,00,24);  # GENERAL DETAIL STATUS WORD 4 #
  
        ITEM CEF$LOGWD1 U(01,00,60);  # CERFILE WORD 1 #
        ITEM CEF$LOGTSQ U(01,00,16);  # ERROR LOG ENTRY TYPE/SEQ #
        ITEM CEF$LOGWD2 U(02,00,60);  # CERFILE WORD 2 #
        ITEM CEF$LOGWD3 U(03,00,60);  # CERFILE WORD 3 #
        ITEM CEF$LOGWD4 U(04,00,60);  # CERFILE WORD 4 #
        ITEM CEF$LOGWD5 U(05,00,60) = [0];  # CERFILE WORD 5 #
        END  # ARRAY CEF$BUF #
  
CONTROL ENDIF;
CONTROL IFEQ OS$NOS;
  
      ARRAY BML [0:0] S(BMLHDRLEN);  # BML MESSAGE HEADER # 
        BEGIN 
        ITEM BML$WORD0  U(00,00,60); # 1ST WORD # 
        ITEM BML$LENGTH U(00,00,12); # LENGTH OF BML MESSAGE #
        ITEM BML$WORD1  U(01,00,60); # 2D WORD #
        ITEM BML$MSGID  U(01,00,12); # MESSAGE ID # 
        ITEM BML$SYMPT  U(01,12,12); # SYMPTOM CODE # 
        ITEM BML$N1TON6 U(01,24,36); # PARAMETERS N1 TO N6 #
        ITEM BML$WORD2  U(02,00,60); # 3D WORD #
        ITEM BML$MFID   U(02,36,12); # MAINFRAME ID # 
        ITEM BML$HUI    U(02,48,12); # HARDWARE UNIQUE IDENTIFIER # 
        END 
  
# 
* 
*     ***  NOTE. ARRAY *BML* MUST IMMEDIATELY PRECEDE ARRAY *BUFFER*
* 
# 
  
CONTROL ENDIF;
  
      ARRAY BUFFER[1:ONEPRU] S(1);
        BEGIN  # ARRAY BUFFER # 
        ITEM BUFWD      U(00,00,60);
        ITEM BUF$NADMSU U(00,52,08);  # ACTUAL NAD MEMORY (UPPER) # 
        ITEM BUF$NADMSL U(00,00,08);  # ACTUAL NAD MEMORY (LOWER) # 
        ITEM BUF$NADUM  U(00,12,16);  # UNUSED NAD MEMORY # 
        END  # ARRAY BUFFER # 
# 
*     BASED ARRAY *ELB* IS EQUATED TO ARRAY *BUFFER*
*     FOR PROCESSING NAD ERROR LOG ENTRIES. 
# 
  
      BASED ARRAY ELB [1:ONEPRU] S(1);  # NAD ERROR LOG BUFFER #
        BEGIN 
        ITEM ELB$WORD   U(00,00,60);  # FULL WORD # 
        ITEM ELB$NAD    U(00,00,08);  # REMOTE NAD ADDR (1) # 
        ITEM ELB$HUI    U(00,04,08);  # H/W-UNIQUE-IDENTIFIER (4) # 
  
CONTROL IFEQ OS$NOSBE;
  
        ITEM ELB$GDA    U(00,00,24);  # LAST PART OF GDST (7) # 
  
CONTROL ENDIF;
  
        END  # ARRAY ELB #
  
# 
*     BASED ARRAYS FOR MOVING TABLES AND DATA.
# 
  
      BASED ARRAY BUF1 [0:0] S(1);
        BEGIN 
        ITEM BUF1WORD   U(00,00,60);
        END 
  
      BASED ARRAY BUF2 [0:0] S(1);
        BEGIN 
        ITEM BUF2WORD   U(00,00,60);
        END 
  
  
      END  # COMMCOM COMMON AREA #
  
    END  # COMMCOM COMDECK #
                                               CONTROL LIST;
