*DECK GETNCW
          IDENT  GETNCW 
          TITLE  GETNCW - GET NAD CONTROLWARE 
          ENTRY  GETNCW 
          SST 
**        GETNCW - GET NAD CONTROLWARE
* 
*         THIS ROUTINE OBTAINS NAD CONTROLWARE FROM THE SYSTEM LIBRARY. 
* 
*         FORMAT OF SYMPL CALL = GETNCW(CWNAME,CWFWA,CWLEN) 
* 
*         ENTRY     A1 = FWA OF LIST OF PARAMETER ADDRESSES.
*                        CWNAME = CONTROLWARE NAME (LEFT-JUSTIFIED, 
*                                  ZERO-FILLED).
*                        CWFWA  = FWA OF BUFFER.
*                        CWLEN  = LENGTH OF BUFFER. 
* 
*         EXIT           CWNAME = CONTROLWARE NAME. 
*                        CWFWA  = FWA OF CONTROLWARE. 
*                        CWLEN  = LENGTH OF CONTROLWARE.
* 
*                        IF ERROR ENCOUNTERED - 
*                        CWLEN  = UNCHANGED.
*                        CWFWA  = -1, IF CONTROLWARE NOT FOUND. 
*                               = -2, IF NO 77/52 TABLE FOUND,
*                               =     OR LENGTH MISMATCH. 
*                               = -3, IF INVALID CWFWA, CWLEN, OR 
*                                        INTERNAL LOAD ERROR. 
* 
*         USES      A - 1, 2, 3, 6. 
*                   X - 0, 1, 2, 3, 5, 6, 7.
*                   B - 1, 2, 3, 4, 6.
* 
*         MACROS    ASSIGN, READ, RFILEB, SKIPB, SKIPEI.
  
  
*CALL COMCMAC 
  
 GETNC01  SA1    PARADR            RETURN PARAMETERS
          SA2    CWNAME            CONTROLWARE NAME 
          SA1    X1 
          SB2    B1 
          BX6    X2 
          SA6    X1 
 GETNC02  SA2    A2+B1             CWFWA / CWLEN
          SA1    A1+B1
          BX6    X2 
          SB2    B2-B1
          SA6    X1 
          GE     B2,B0,GETNC02     IF NOT DONE
  
 NOS      IFEQ   OS$NOS 
          RETURN SYSFET,R          RETURN SYSTEM FILE 
 NOS      ENDIF 
  
 GETNCW   SUBR                     ENTRY/EXIT 
          SX6    A1                ADDR OF PARAMETER LIST 
          SB1    1
          SA1    X1                CONTROLWARE NAME 
          SA2    X6+B1             ADDR OF CWFWA
          SA6    PARADR            SAVE ADDR OF PARAMETER LIST
          SA3    A2+B1             ADDR OF CWLEN
          NZ     X1,GETNC03        IF CONTROLWARE NAME GIVEN
          SA1    DEFCWN            USE DEFAULT
 GETNC03  MX0    42 
          BX6    X0*X1
          SA6    CWNAME            SAVE CONTROLWARE NAME
  
 NOSBE    IFNE   OS$NOS 
  
          SA6    LDRPB             SET LOADER PARAMETER WORD 0
  
 NOSBE    ENDIF 
  
          SA2    X2                CWFWA
          SA3    X3                CWLEN
          BX2    -X0*X2 
          BX3    -X0*X3 
          MX6    -6 
          BX7    X6*X2
          BX6    X6*X3
          ZR     X7,GETNC07        IF CWFWA INVALID (.LT.100B)
          ZR     X6,GETNC07        IF CWLEN INVALID 
  
 NOS      IFEQ   OS$NOS 
  
          SB2    SYSFET-SYSTEM     INITIALIZE FET 
 GETNC04  SB2    B2-B1
          SA1    SYSTEM+B2
          BX6    X1 
          SA6    SYSFET+B2
          GT     B2,B0,GETNC04     IF NOT DONE
  
          SB2    B1+B1             SET FIRST = IN = OUT = CWFWA 
 GETNC05  SA1    A6+B1
          BX6    X0*X1
          BX6    X6+X2
          SB2    B2-B1
          SA6    A1 
          PL     B2,GETNC05        IF NOT DONE
  
          SA1    A1+B1             SET LIMIT = CWFWA + CWLEN
          IX6    X2+X3
          BX1    X0*X1
          BX6    X6+X1
          SA6    A1 
  
          ASSIGN SYSFET 
          SKIPEI SYSFET,R          SKIP TO END
          SKIPB  SYSFET,2,R        FIND DIRECTORY 
  
          READ   SYSFET,R          READ DIRECTORY 
          SA2    SYSFET+2          IN-POINTER 
          SA3    SYSFET+1          FIRST
          SB3    X2                LWA+1 OF DIRECTORY 
          SB2    X3                77-TABLE 
          SA3    X3                77-TABLE WORD
          SA2    CWNAME            CONTROLWARE NAME 
          LX3    24                77-TABLE LENGTH
          SB2    X3+B2             ADDR OF 1ST DIRECTORY ENTRY
          MX7    42 
  
*         SEARCH DIRECTORY FOR CONTROLWARE NAME.
  
 GETNC06  SA1    B2                NEXT ENTRY 
          GE     B2,B3,GETNC08     IF END OF DIRECTORY
          BX3    X7*X1             MASK NAME
          SB2    B2+2 
          BX3    X3-X2
          NZ     X3,GETNC06        IF NO MATCH
          BX1    -X7*X1 
          SX1    X1-10
          NZ     X1,GETNC06        IF INCORRECT TYPE
  
*         SET UP FET FOR READING CONTROLWARE RECORD.
  
          SA1    A1+B1             GET RANDOM ADDRESS 
          MX7    29 
          SA2    SYSFET+6 
          BX6    -X7*X1 
          BX2    X7*X2
          BX6    X6+X2
          SA6    A2                SET RANDOM ADDRESS 
  
          SA2    SYSFET+1          RESET IN = FIRST 
          SA1    A2+B1
          MX7    -18
          BX2    -X7*X2 
          BX1    X7*X1
          BX6    X1+X2
          SA6    A1 
  
          READ   SYSFET,R          READ CONTROLWARE RECORD
  
*         LOOK FOR 77-TABLE.
  
          SA1    SYSFET+2          READ IN
          SA2    A1+B1             READ OUT 
          SB6    X1                IN 
          SB2    X2 
          MX5    12 
          SA3    B2 
          MX1    6
          BX2    X5*X3             CHECK FOR 77 TABLE 
          BX1    X1-X2
          NZ     X1,GETNC11        IF NOT 77 TABLE
  
*         LOOK FOR 52-TABLE.
  
          MX5    -12
          LX3    24                LENGTH OF 77 TABLE 
          BX2    -X5*X3 
          SB3    X2+B1             CHECK FOR 52 TABLE 
          SA2    B2+B3             EXPECTED 52 TABLE
          SX6    A2+B1             FWA OF CONTROLWARE 
          SA6    CWFWA
  
          SB2    X6                FWA OF CONTROLWARE 
          SX6    X2-1 
          LX2    12 
          SB4    X6 
          BX2    -X5*X2 
          SX2    X2-5200B 
          NZ     X2,GETNC11        IF NOT 52 TABLE
          SB6    B6-B2
          NE     B6,B4,GETNC11     IF 52-TABLE-LENGTH .NE. FET
  
 NOS      ELSE
  
          SX6    X2+B1
          SB2    X3                BUFFER LENGTH
          SA6    CWFWA             CWFWA = ADDR OF 50-TABLE + 1 
          BX6    X3                BUFFER LENGTH
          SA6    A6+B1             CWLEN = BUFFER LENGTH
          MX6    -1 
 GETNC20  SB2    B2-B1
          SA6    X2+B2             SET BUFFER TO -1 
          GE     B2,B1,GETNC20
  
          SA1    LDRFLGS           LOADER FLAGS 
          IX6    X2+X3             LWA+1 OF BUFFER
          BX1    X1+X2             24/FLAGS,18/0,18/FWA 
          LX6    18                24/0,18/LWA+1,18/0 
          BX6    X6+X1             24/FLAGS,18/LWA+1,18/FWA 
          SA6    LDRPB+1           SET LOADER PARAMETER WORD 1
  
          LOADREQ LDRPB,RCL,DATA   GET CONTROLWARE FROM SYSTEM
  
          SA1    LDRPB             CHECK STATUS 
          SX1    X1 
          AX1    1                 REMOVE COMPLETE FLAG 
          ZR     X1,GETNC21        IF NO ERROR
          AX1    2
          ZR     X1,GETNC08        IF CONTROLWARE NOT FOUND 
          AX1    1
          ZR     X1,GETNC11        IF LENGTH ERROR
          EQ     GETNC07           INTERNAL ERROR 
  
 GETNC21  SA1    CWFWA             BUFFER FWA+1 
          SA2    CWLEN             BUFFER LENGTH
          IX6    X1+X2             BUFFER LWA+2 
          SA2    X6-2              IF NOT END 
 GETNC22  SA2    A2-B1             FIND END OF C/W
          NG     X2,GETNC22 
          SX6    A2+B1             LWA+1 OF CONTROLWARE 
          IX6    X6-X1             CONTROLWARE LENGTH 
          NG     X6,GETNC11        IF LENGTH ERROR
          ZR     X6,GETNC11 
  
 NOS      ENDIF 
  
          SA6    CWLEN             SAVE LENGTH OF CONTROLWARE 
          EQ     GETNC01           RETURN 
  
*         ERROR PROCESSING
  
 GETNC07  SX6    -3                ERROR 3, CWFWA/CWLEN INVALID 
          EQ     GETNC12
  
 GETNC08  SX6    -1                ERROR 1, CONTROLWARE NOT FOUND 
          EQ     GETNC12
  
 GETNC11  SX6    -2                ERROR 2, 77/52 TABLE OR LENGTH ERROR 
*         EQ     GETNC12
  
 GETNC12  SA6    CWFWA             SET FWA = ERROR CODE 
          EQ     GETNC01           RETURN 
  
*         PARAMETER WORDS.
*         *** NOTE - CWNAME, CWFWA, AND CWLEN MUST BE CONTIGUOUS. *** 
  
 PARADR   BSS    1                 PARAMETER ADDRESS
 CWNAME   BSS    1                 CONTROLWARE NAME 
 CWFWA    BSS    1                 CONTROLWARE FWA
 CWLEN    BSS    1                 CONTROLWARE LENGTH 
  
 NOS      IFEQ   OS$NOS 
  
 DEFCWN   CON    0L170             DEFAULT CONTROLWARE NAME 
  
*         FET FOR SYSTEM FILE READ. 
  
 SYSTEM   RFILEB SYSFET,1,(FET=9)  DATA FOR INITIALIZING *SYSFET* 
  
 SYSFET    BSS    *-SYSTEM         FET FOR READING *SYSTEM* FILE
  
 NOS      ELSE
  
 DEFCWN   CON    7LNAD-170         DEFAULT NAD CONTROLWARE NAME 
  
*         LOADER PARAMETER WORDS FOR FETCHING CONTROLWARE FROM SYSTEM.
  
 LDRFLGS  CON    1S54+1S48+1S42+1S41  L1, L2, U, V
  
 LDRPB    BSS    2                 LOADER PARAMETERS
  
 NOS      ENDIF 
  
          END 
