*DECK DLSM
USETEXT DLFPDEF 
USETEXT ABH 
USETEXT DIRTBL
USETEXT DIRTBLS 
USETEXT ERRMSG
USETEXT NHEADER 
USETEXT ZHRCD 
PROC DLSM(TEMPB2);           # SELECT SUPERVISORY MSG                  #
  
*IF DEF,IMS 
 #
*1DC  DLSM
* 
*     1. PROC NAME           AUTHOR              DATE 
*        DLSM                P.C.TAM             79/01/09 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        SELECT SUPERVISORY MESSAGES FOR OUTPUT 
* 
*     3. METHOD USED
*        IF AIP LOG FILE AND BLOCK TYPE IS LESS THAN
*        APPCMD, CLEAR CHOSEN FLAG. 
*        IF NIP LOG FILE AND BLOCK TYPE IS NETCMD, CLEAR CHOSEN FLAG. 
*        LOOP THROUGH SUPMSG PROCESSING TABLE, PROCESS EACH ENTRY.
*        AS FOLLOWS WHILE THE SELECT$ FLAG IS STILL SET OR
*        UNTIL EVERY ENTRY HAS BEEN PROCESSED.
*        E       CHECK IF ERROR BIT IS SET IN SUPERVISORY MESSAGE 
*                OF CURRENT MESSAGE, OTHERWISE CLEAR CHOSEN FLAG. 
*        R       CHECK IF RESPONSE BIT IS SET IN SUPERVISORY
*                MESSAGE OF CURRENT MESSAGE, OTHERWISE CLEAR CHOSEN 
*                FLAG.
*        CN      COMPARE THE CONNECTION NUMBER IN THE SUPERVISORY 
*                MESSAGE PROCESSING TABLE WITH ONE IN CURRENT TABLE.
*                IF NOT MATCH, CLEAR CHOSEN FLAG. 
*        PF      COMPARE THE PFC IN TABLE WITH ONE IN MESSAGE. IF 
*                NOT MATCH, CLEAR CHOSEN FLAG.
*        PS      COMPARE THE PFC/SFC IN TABLE WITH ONE IN MESSAGE. IF 
*                NOT MATCH, CLEAR CHOSEN FLAG.
* 
*     4. ENTRY PARAMETERS.
*        DIRTBLS             COMMON BLOCK WITH ALL SELECTION
*                            CRITERIA.
*        TEMPB2              CONTAINS TEXT
*        ZHRCD               COMMON BLOCK WHERE THE INPUT RECORD IS.
* 
*     5. EXIT PARAMETERS. 
*        CHOSEN              IN ZHRCD COMMON BLOCK
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS CALLED.
*        ABH       DIRTBL    DIRTBLS   DLFPDEF
*        ERRMSG    NP$DLA    NHEADER   SUPMSG 
*        ZHRCD
* 
*     7. ROUTINES CALLED. 
*        DLABEND             ABORT PROGRAM
*        DLDFM               ISSUE DAYFILE MESSAGE
* 
*     8. DAYFILE MESSAGES.
*        BAD DIRECTIVE TABLE ENTRY. 
* 
 #
*ENDIF
# 
      FORMAL PARAMETER
# 
      ARRAY TEMPB2; ;        # CONTAINS MESSAGE TEXT                   #
# 
      EXTERNAL PROCEDURES 
# 
      XREF
        BEGIN 
        PROC DLABEND;        # ABORT PROGRAM                           #
        PROC DLDFM;          # ISSUE DAYFILE MESSAGE                   #
        END 
  
# 
      LOCAL VARIABLES 
# 
      BASED ARRAY DATLINE P(4);         # AIP ENTRY TEMPLATE           #
*CALL NP$DLA
  
      BASED ARRAY SUPMS;
        BEGIN 
*CALL SUPMSG
        ITEM SUPCN U(0,24,12);# CONNECTION NUMBER IN SUP MSG           #
        END 
  
      SWITCH CRIT 
              ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR,ERR,
              ERR, ERR, ERR, ERR, CN$PROC, E$PROC, R$PROC, PF$PROC, 
              PS$PROC, ERR, ERR;
      ITEM
        I,                   # TEMPORARY VARIABLE                      #
        TEMP1;               # TEMPORARY VARIABLE                      #
  
# ******************************************************************** #
      BEGIN 
      P<NHEADER> = LOC(ZHWD1[0]) + BLKHSIZE;
      P<ABH> = P<NHEADER> + 1;
      P<SUPMS> = LOC(TEMPB2); 
      IF NOT NIP
      THEN
        BEGIN                # AIP LOG FILE                            #
        P<DATLINE> = LOC(TEMPB1); 
        IF DL$OPC[0] GQ OP$GETF AND DL$OPC[0] LQ OP$GTFL
        THEN
          P<SUPMS> = P<SUPMS> + 1;
  
        IF ABHABT[0] LS APPCMD
        THEN
          IF DIRNUMS GR 1 OR DIRSID[1] NQ ID$CN 
          THEN
            CHOSEN = FALSE; 
          ELSE
            GOTO DLSMX; 
  
        END 
      ELSE
        BEGIN                # NIP LOG FILE                            #
        IF BT[0] NQ NETCMD
        THEN
          IF DIRNUMS GR 1 OR DIRSID[1] NQ ID$CN 
          THEN               # ENTRY MUST BE SUP MSG                   #
            CHOSEN = FALSE;  # CURRENT ENTRY IS NOT SUP MSG            #
          ELSE               # DO NOT CHECK FOR VALID CN               #
            GOTO DLSMX; 
        END 
# 
      LOOP TO PROCESS ALL SELECTION REQUIREMENTS
# 
      FOR I = 1 STEP 1 WHILE CHOSEN AND I LQ DIRNUMS
      DO
        BEGIN 
        GOTO CRIT[DIRSID[I]]; 
E$PROC:                      # ERROR BIT PROCESSING                    #
        CHOSEN = EB[0]; 
        GOTO NEXT;
R$PROC:                      # RESPONSE BIT PROCESSING                 #
        CHOSEN = RB[0]; 
        GOTO NEXT;
CN$PROC:                     # CONNECTION NUMBER PROCESSING            #
        IF (ABHADR[0] EQ 0 AND SUPCN[0] NQ DIRSVAL[I] AND NOT NIP) OR 
           (CN[0] EQ 0 AND SUPCN[0] NQ DIRSVAL[I] AND NIP)
        THEN
          CHOSEN = FALSE; 
        GOTO NEXT;
PF$PROC:                     # PFC PROCESSING                          #
        IF PFC[0] NQ DIRSVAL[I] 
        THEN
          CHOSEN = FALSE; 
        GOTO NEXT;
PS$PROC:                     # PFC/SFC PROCESSING                      #
        TEMP1 = DIRSVAL[I]; 
        IF B<54,6>TEMP1 NQ SFC[0] OR
           B<44,8>TEMP1 NQ PFC[0] 
        THEN
          CHOSEN = FALSE; 
        GOTO NEXT;
ERR:  
        DLDFM(BAD$DNTRY);    # BAD DIRECTIVE TABLE ENTRY               #
        DLABEND;             # ABORT PROGRAM                           #
NEXT: 
        END 
DLSMX:  
      END 
TERM
