*DECK GETCWIP 
USETEXT COMCBEG 
USETEXT COMMCOM 
USETEXT COMMGET 
USETEXT COMRRTN 
    PROC GETCWIP; 
# TITLE GETCWIP - GET CONTROLWARE INITIALIZATION PARAMETERS. #
  
      BEGIN  # GETCWIP #
  
# 
**    GETCWIP - GET CONTROLWARE INITIALIZATION PARAMETERS.
* 
*     FETCHES THE CONTROLWARE INITIALIZATION PARAMETERS FROM THE
*     CONFIGURATION FILE (RCFXXX).
* 
*     PROC GETCWIP. 
* 
*     ENTRY   -  IPNAM = NAME OF I.P. RECORD (1-7 CHARS). 
*                      = 0 (GET 1ST I.P. RECORD). 
*                IPADR = FWA OF BUFFER TO RECEIVE I.P. RECORD.
*                IPLEN = LENGTH OF BUFFER.
*                HOSTPID = PID OF HOST. 
* 
*     EXIT    -  IPNAM = NAME OF INITIALIZATION PARAMETER RECORD. 
*                IPADR = FWA OF INITIALIZATION PARAMETERS.
*                CWNAMC = NAME OF CONTROLWARE RECORD. 
*                IPLEN = LENGTH OF INITIALIZATION PARAMETERS. 
* 
*                IF ERROR ENCOUNTERED,
*                IPADR = -1, RECORD NOT FOUND ON CONFIGURATION FILE.
*                         OR NO I.P. RECORDS ON CONFIGURATION FILE. 
*                         OR NO CONFIGURATION FILE FOUND. 
*                      = -2, FAULTY PARAMETER (IPADR/IPLEN).
*                (IPLEN, CWNAMC NOT CHANGED.) 
* 
*     PROCESS -  IF IPADR OR IPLEN INVALID
*                  SET IPADR = -2 (FAULTY PARAMETER)
*                ELSE 
*                  CALL ATTFIL TO ATTACH RHF CONFIGURATION FILE 
*                  IF CONGURATION FILE NOT FOUND
*                    SET IPADR = -1 (NO FILE FOUND).
*                  ELSE 
*                    SKIP 1ST RECORD (NDT)
*                    READ 2D RECORD (1ST I.P. RECORD) 
*                    IF END OF FILE 
*                      SET IPADR = -1 (NO I.P. RECORDS ON FILE) 
*                    ELSE 
*                      IF IPNAM NOT SPECIFIED (= 0) 
*                        SET IPNAM = NAME OF 1ST I.P. RECORD. 
*                      SEARCH FILE FOR RECORD NAME = IPNAM
*                      IF MATCHING RECORD FOUND 
*                        SET IPADR = FWA OF INIT PARAMETERS.
*                        SET CWNAMC = NAME OF C/W RECORD. 
*                        SET IPLEN = LENGTH OF INIT PARAMETERS. 
*                      ELSE 
*                        SET IPADR = -1 
*                RETURN.
* 
* 
# 
  
# 
****  PROC GETCWIP - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        LABEL FETADR;              # ADDRESS OF FET FOR CIO CALL #
        PROC ATTFIL;               # ATTACH PERMANENT FILE #
        PROC CALLSYS;              # CALL SYSTEM VIA RA+1 # 
        PROC DBGNAME;              # DEBUG - DAYFILE MESSAGE #
        END 
  
# 
****  PROC GETCWIP - XREF LIST END
# 
  
  
      BASED ARRAY CWIPR [0:0] S(6); 
        BEGIN 
        ITEM CWIPR$TABT U(00,00,12);  # TABLE TYPE #
        ITEM CWIPR$TABL U(00,12,12);  # TABLE LENGTH #
        ITEM CWIPR$BINL U(00,42,18);  # BINARY LENGTH # 
        ITEM CWIPR$NAME C(01,00,07);  # IP RECORD NAME #
        ITEM CWIPR$CWN  C(05,00,07);  # CONTROLWARE RECORD NAME # 
        END 
  
      ARRAY [0:0] S(1);            # ATTFIL PARAMETER WORD #
        BEGIN 
        ITEM ATTFILPAR  U(00,00,60);
        ITEM ATTFILPFN  C(00,00,03) = [RCFNAME];  # CHARS 1-3 # 
        ITEM ATTFILPID  C(00,18,03) = ["   "];    # CHARS 4-6, PID #
        ITEM ATTFILFIL  U(00,36,24) = [0];        # ZERO FILL # 
        END 
  
CONTROL EJECT;
  
      $BEGIN
      DBGNAME ("GETCWIP");         # DEBUG MESSAGE #
      $END
  
      IF IPADR LT 65               # IF INVALID BUFFER FWA/LENGTH # 
        OR IPLEN LE ONEPRU
      THEN
        BEGIN 
        IPADR = -CWIPERR$MX;       # ERROR, FAULTY PARAMETER #
        END 
  
      ELSE
        BEGIN 
  
        ATTFILPID = HOSTPID;       # PUT HOST PID IN FILE NAME #
  
        P<FET> = LOC(FETADR);      # SET UP FET FOR SKIP/READ # 
  
        FET$WORD0 = ATTFILPAR;     # FILE NAME FOR ATTACH # 
  
        $BEGIN                     # DEBUG CODE # 
        DBGNAME ("ATTFIL"); 
        $END
  
        ATTFIL;                    # ATTACH CONFIGURATION FILE #
  
        IF FET$PFMERR NE 0         # IF RCF FILE NOT ATTACHED # 
        THEN
          BEGIN 
          IPADR = -CWIPERR$NM;     # ERROR, NO RCF FILE # 
          END 
  
        ELSE
          BEGIN 
          FET$WORD1 = 0;
          FET$EPBIT = TRUE; 
          FET$WORD4 = 0;
          FET$FIRST = IPADR;
          FET$IN = FET$FIRST; 
          FET$OUT = FET$FIRST;
          FET$LIMIT = FET$FIRST + ONEPRU + 1; 
          P<CWIPR> = FET$FIRST; 
  
          IPADR = 0;               # CLEAR ADDR PARAMETER # 
  
          FET$CODES = CIORQ$SKPF;  # SKIP 1ST RECORD ON FILE #
          CIOFETADDR = LOC(FETADR); 
          CALLSYS (CIOCALL);
  
          IF FET$LEVEL NE 0        # IF EOF/EOI # 
          THEN
            BEGIN 
            IPADR = -CWIPERR$NM;   # ERROR, NO CWIP RECORD ON FILE #
            END 
  
          ASLONGAS IPADR EQ 0 
          DO
            BEGIN 
            FET$IN = FET$FIRST;    # READ NEXT CWIP RECORD #
            FET$CODES = CIORQ$READ; 
            CALLSYS (CIOCALL);
  
            IF FET$LEVEL NE 0      # IF EOF/EOI # 
            THEN
              BEGIN 
              IPADR = -CWIPERR$NM;  # ERROR, CWIP RECORD NOT FOUND #
              END 
  
            ELSE
              BEGIN 
              IF (FET$IN-FET$FIRST) GE CWIPMINL77  # IF VALID SIZE #
              THEN
                BEGIN 
                IF IPNAMU EQ 0     # IF NO CWIP NAME GIVEN #
                THEN
                  BEGIN 
                  IPNAM = CWIPR$NAME;  # USE NAME OF 1ST CWIP RECORD #
                  END 
  
                IF IPNAM EQ CWIPR$NAME  # IF CWIP MATCHES GIVEN NAME #
                THEN
                  BEGIN 
                  P<CWIPR> = P<CWIPR> + CWIPR$TABL +1;
  
                  IF CWIPR$NAME EQ "NADCWIP"  # IF NAME MATCHES # 
                    AND CWIPR$TABT EQ O"5200"   # AND 52 TABLE #
                    AND CWIPR$BINL GE CWIPMINL52  # AND MINIMUM SIZE #
                  THEN
                    BEGIN 
                    IPADR = P<CWIPR> + CWIPHDRL52 + 1;  # I.P. FWA #
                    IPLEN = CWIPMINL52 - CWIPHDRL52;  # LENGTH #
                    CWNAMC = CWIPR$CWN;   # CONTROLWARE RECORD NAME # 
                    END 
  
                  ELSE
                    BEGIN 
                    P<CWIPR> = FET$FIRST;  # RESET POINTER #
                    IPNAMU = 0;    # CLEAR CWIP NAME #
                    END 
                  END 
                END 
              END 
            END 
  
          FET$CODES = CIORQ$CLRT;  # RETURN CONFIGURATION FILE #
          CALLSYS (CIOCALL);
          END 
        END 
      END  # GETCWIP #
  
    TERM
