SPL,L,O,T 
! 
      NAME ISA03(5) "92413-16022 REV.1644"
! 
!     SOURCE: 92413-18022 REV.1644  
!     RELOC:  92413-16022 REV.1644  
! 
! 
      LET SWPRT BE LABEL,EXTERNAL 
ISA03:GOTO SWPRT
! 
! 
      LET CMDIN BE SUBROUTINE, EXTERNAL ! FETCHES NEXT COMMAND
      LET WSAW BE PSEUDO,EXTERNAL,DIRECT ! WORK SPACE COMMAND 
      LET GETCH BE FUNCTION,EXTERNAL
      LET INWS BE PSEUDO,EXTERNAL,DIRECT
      LET STPRG BE PSEUDO,EXTERNAL,DIRECT ! RELEASE WORK SPACE
      LET WSAA  BE PSEUDO,EXTERNAL,DIRECT ! WORK SPACE _ ARRAY
      LET GCHR,FCHR BE INTEGER,FUNCTION,DIRECT
      LET WRITE BE SUBROUTINE,EXTERNAL,DIRECT ! WRITE ROUTINE 
      LET BUFFR BE INTEGER, EXTERNAL ! COMMAND INPUT BUFFER 
      LET RDNM BE INTEGER,FUNCTION,DIRECT 
      LET CMCNT, CHCNT, CMPTR BE INTEGER,EXTERNAL 
      LET CWSAW BE SUBROUTINE,DIRECT
! 
! "GAINA" IS A TABLE OF THE POSSIBLE GAINS FOR THE LOW LEVEL
! MULTIPLEXER 
      LET GAINA(16) BE INTEGER
         INITIALIZE GAINA TO "1000",      \ "1000"
                             "50",30012K, \ "500" 
                             "25",30012K, \ "250" 
                             "12",32412K, \ "125" 
                             "10",30012K, \ "100" 
                             "50",5012K, \ "50" 
                             "25",5012K, \ "25" 
                             "12.5"       \ "12.5"
! 
!  ALL MESSAGES TO BE PRINTED DEFINED HERE
! 
      LET M1(7),M2(15),M3(3),M5(6),M6(7),M7(7),M8(5), \ 
      M15(9) BE INTEGER 
! 
         INITIALIZE M1 TO 12,"# OF 2313'S?" 
         INITIALIZE M2 TO 28," SUBSYSTEM #00 CONFIGURATION" 
         INITIALIZE M3 TO 3,"LU?" 
         INITIALIZE M5 TO 10,"# HL - SE?" 
         INITIALIZE M6 TO 11,"# HL - DIF?"
         INITIALIZE M7 TO 11,"# LL, GAIN?"
         INITIALIZE M8 TO 7,"# DACS?" 
         INITIALIZE M15 TO 16,"ILLEGAL RESPONSE"
! 
      LET ENT23 BE INTEGER(9) ! ENTRY POINT RECORD FOR 2313 
         INITIALIZE ENT23 TO 8,"..AD",41400K,0,"..DA",41400K,0
      LET N2313 BE INTEGER(18) ! 2313 NAM RECORD
         INITIALIZE N2313 TO 17,10400K,20000K,0,"..ADC ", \ 
                             100001K,0,0,6,7(0) 
! 
C2313: SUBROUTINE(W1,W2,W3,W4) GLOBAL 
      CALL WRITE(M1) ! WRITE # OF SUBSYS MESSAGE
C10:  IF [LSUBS_RDNM(64)] = 0 THEN RETURN ! IF NONE RETURN
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C10]
         NDACS,NCHN,W1,W2,W3,W4_0 
         WSAW(W1)_1 ! FIRST WORD OF TABLE 
         WSAW(W1)_1 !  IS A DEF *+1 
         CALL CWSAW(LSUBS)  ! 2ND WORD IS NUMBER OF SUBSYSTEMS
         WSPNT_6
      FOR SUBS_1 TO LSUBS DO THRU E2313 
         ONES_SUBS-10*[TENS_SUBS/10] ! GENERATE AND 
         M2(8)_"00"+ONES+(TENS-<8)   !  PRINT SUBSYSTEM 
         CALL WRITE(M2)              !   NUMBER MESSAGE 
         WORDS_0
         SLOT_2 
         CALL CWSAW(0)
! 
      CALL WRITE(M3) ! PRINT "LU?" AND
C20:  LU _ RDNM(64)              ! READ IN LOGICAL UNIT NUMBER
      IF FCHR = "-" OR LU < 7 THEN [CALL WRITE(M15); GOTO C20]
      CALL CWSAW(LU)
! 
      CALL CWSAW(0) ! RESERVE SPACE FOR LAST CHANL IN SUBSYS. 
! 
      CALL WRITE(M5)  ! INPUT NUMBER OF 
      HLSE: K1_RDNM(1056)    ! HIGH LEVEL SINGLE ENDED CHANNELS 
         IF K1 # 16 THEN [ IF K1 AND 37K THEN [ \  MUST BE 16 OR
            CALL WRITE(M15) ; \ MULTIPLE OF 32, OTHERWISE 
            GO TO HLSE ]]  ! GIVE ERROR AND TRY AGAIN 
! 
      CALL CWSAW(K1)  ! RECORD NUMBER OF HLSE CHANNELS
! 
      HLCH,NCHN_NCHN+N
      SLOT_SLOT+(N >- 5)
! 
      CALL WRITE(M6)  ! INPUT NUMBER OF HIGH LEVEL
      HLDF: K1_RDNM(528)     ! DIFFERENTIAL INPUT CHANNELS
         IF K1 # 8 THEN [ IF K1 AND 17K THEN [ \ MUST BE 8 OR 
            CALL WRITE(M15) ;\ A MULTIPLE OF 16 
            GO TO HLDF ]] ! OTHERWISE GIVE ERROR
! 
                    CALL CWSAW(K1) ! RECORD NUMBER HLDF CHANNELS
      NCHN_NCHN+N 
! 
! GENERATE LOW LEVEL GAIN ENTRIES 
! 
      CALL WRITE(M7) ! PRINT LOW LEVEL MESSAGE
RDLL: IF RDNM(528) = 0 THEN GO TO RDLL1 ! IF LAST ENTRY GO TO END 
      IF GCHR = "-"  \ IF GAIN IS NEGATIVE USE SINGLE 
         THEN [ ENTRY_N; \ CHANNEL ENTRIES
            N_1; \
            CALL GCHR ] \ FETCH NEXT CHARACTER
         ,ELSE ENTRY_1  ! USE ONE MULTIPLE CHAN ENTRY 
      WD1_CHAR -< 8 OR GCHR ! FETCH GAIN ENTRY
      WD2_GCHR -< 8 OR GCHR ! TO COMPARE WITH TABLE 
      FOR G_1 TO 15 BY 2 DO [ \ SEARCH TABLE
         IF WD1=GAINA(G) AND WD2=GAINA(G+1) THEN GO TO FGAIN ]
         CALL WRITE(M15) ! IF GAIN NOT FOUND GIVE ERROR 
         GO TO RDLL ! AND TRY AGAIN 
! 
      FGAIN: REPEAT ENTRY TIMES DO [\ 
         CALL CWSAW((G-1 -> 4) OR N); \ RECORD GAIN ENTRY 
         NCHN_NCHN+N ] ! UPDATE SUM OF CHANNELS 
            GO TO RDLL
RDLL1: INWS(W1,WSPNT+4)_NCHN ! RECORD LAST CHAN. IN SUBSYS. 
      INWS(W1,WSPNT)_WORDS>-1 ! RECORD TOTAL WORDS IN SUBSYS ENTRY
! 
! GENERATE DAC ENTRIES
! 
      LU_(LU AND 77K) -< 10 ! MOVE LU TO UPPER 6 BITS 
      SLOT_SLOT+((NCHN-HLCH)>-4)  ! COMPUTE CURRENT SLOT POSITION 
! 
      CALL WRITE(M8)   ! OUTPUT "# DACS?" MESSAGE 
C30:  DAC _ RDNM(64)             ! INPUT RESPONSE AND UPDATE DAC CNTR 
      IF (DAC AND 1K) THEN [WRITE(M15);GOTO C30]
      IF FCHR = "-" THEN [CALL WRITE(M15); GOTO C30]
      NDACS _ NDACS + DAC 
! 
      FOR N_1 TO DAC>-1 DO [ \ GENERATE ENTRY FOR EACH CARD 
         WSAW(W4)_ LU OR  \ LOGICAL UNIT NUMBER IN BITS  10-15
            (SLOT+N)/12 -< 7 OR \ BOX NUMBER IN BITS 7-9
            $1 -< 3 OR   \ SLOT NUMBER IN BITS 3-6
            1 ]       \ NUMBER OF CHNLS ON CARD -1 IN BITS 0-2
! 
E2313: WSPNT_WSPNT+WORDS ! UPDATE WORK SPACE POINTER
      WSAW(W1)_1                   ! PUT DEF *+1 AT BEGINNING 
      ENT23(9)_[WSAW(W1)_(WSPNT>-1)]-1  !  OF DAC TABLE 
      CALL CWSAW(NDACS) !  FOLLOWED BY NUMBER OF DACS 
! MOVE DAC TABLE TO END OF ADC TABLE
      I_0 
      ALWAYS DO [ \ 
         I_I+1; \ 
         CALL CWSAW(INWS(W4,I)?[GO TO REL]) ] 
! 
! MOVE NAM AND ENTRY RECORDS INTO A WORK SPACE AND OUTPUT 
!  THE RELOCATABLE CODE 
! 
REL:  WSAA(W2)_@N2313 
      WSAA(W3)_@ENT23 
      RETURN
      END C2313 
! 
RDNM: FUNCTION(LIMIT) INTEGER,DIRECT
      RDCMD: CALL CMDIN(BUFFR,ERR)
      N _ 0 
! 
! FETCH NEXT COMMAND CHARACTER. IF AT EOL, RETURN 
! 
NXCHR: IF [CHAR_GCHR] = 10 OR CHAR =54K \ 
        THEN [IF N > LIMIT  \ IF FINAL VALUE GREATER THAN 
         THEN [CALL WRITE(M15);  \ LIMIT GIVE ERROR AND 
          GOTO RDCMD]  \ TRY AGAIN
           , ELSE RETURN N] 
! 
! CONVERT ASCII TO NUMERIC, IF NOT NUMERIC GIVE ERROR 
! 
      IF [N1_CHAR-60K]<0 OR N1>9 \
         THEN [CALL WRITE(M15); \ IF CHARACTER IS NOT A NUMBER
               GO TO RDCMD]  \ GIVE ERROR AND TRY AGAIN 
         ,ELSE N_N*10+N1 ! UPDATE RUNNING SUM 
      GO TO NXCHR ! GO FETCH NEXT CHARACTER 
      END RDNM
! 
CWSAW: SUBROUTINE(WORD)DIRECT 
      WSAW(W1)_0
      WSAW(W1)_WORD 
      WORDS_WORDS+2 
      RETURN
      END CWSAW 
! 
GCHR: FUNCTION DIRECT        ! GET NEXT CHARACTER ROUTINE 
GCHR1:IF GETCH(CHAR)=40K \
         THEN GO TO GCHR1 \ 
         ,ELSE RETURN CHAR
      END GCHR
! 
FCHR: FUNCTION DIRECT        ! FIRST CHARACTER ROUTINE
      CHCNT _ 0 
      CMPTR _ CMPTR - CMCNT/2 
FCHR1:IF GETCH(CHAR)=40K \
         THEN GO TO FCHR1 \ 
         ,ELSE RETURN CHAR
      END FCHR
! 
      END ISA03 
      END$
  