      CALL LINE(IMAG,IX)
      GOTO 140
C----I/P SYNCHRONOUS FOR PAGE MODE
161   WRITE(LU,948) 
      GOTO 165
C-----O/P    DEC -LU
220   CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,905) 
      LUX=-LUX
      CALL CODE 
      WRITE(OPND,180)LUX
      CALL LINE(IMAG,IX)
      GOTO 140
C----O/P NO         END OF LIST 
900   CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,921) 
      CALL LINE(IMAG,IX)
C----TEST FOR SLC USAGE 
      IF(LU.NE.1)GOTO 1100
      WRITE(LU,941) 
1100  IF(RBIN(2HNO,2HYE,LU))GOTO 2000 
C----O/P EXT SLC
      CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,927) 
      CALL CODE 
      WRITE(OPND,942) 
      CALL LINE(IMAG,IX)
C----O/P JSB SLC
      CALL CODE 
      WRITE(IMAG,928) 
      CALL CODE 
      WRITE(OPND,942) 
      CALL LINE(IMAG,IX)
C----I/P LU 
1110  IF(LU.NE.1)GOTO 1115
      WRITE(LU,912) 
1115  READ(LU,115)IBUF
      IF(IBUF(1).EQ.2H/E)GOTO 2000
C----INCREMENT LU COUNT 
      LUCNT=LUCNT+1 
      CALL CODE 
      READ(IBUF,*)LUX 
C----I/P HALF/FULL DUPLEX 
      IF(LU.NE.1)GOTO 1120
      WRITE(LU,914) 
1120  IDUX=0
      IF(RBIN(2HFU,2HHA,LU))IDUX=IDUX+100000B 
      IF(LU.NE.1)GOTO 1121
      WRITE(LU,915) 
1121  IF(RBIN(2HYE,2HNO,LU))IDUX=IDUX+40000B
C----I/P BAUD RATE
      CALL IBAUD(LU,K,J)
      J=J+(400B*J)
C----I/P CODE TYPE,ASCII/EBCDIC 
      IBR=0 
      IF(LU.NE.1)GOTO 1125
      WRITE(LU,943) 
1125  CONTINUE
      ISYNC=50
      IDUX=IDUX+8 
      IF(RBIN(2HEB,2HAS,LU))GOTO 1130 
      ISYNC=22
      IDUX=IDUX-1 
      IF(LU.NE.1)GOTO 1126
      WRITE(LU,944) 
1126  IF(RBIN(2HVR,2HCR,LU))IBR=IBR+100000B 
C-----I/P CRR/VRC BLOCK CHECK 
1130  IF(LU.NE.1)GOTO 1135
      WRITE(LU,945) 
C----I/P HASP WORK STATION
1135  IF(RBIN(2HYE,2HNO,LU))IBR=IBR+10000B
1140  IF(LU.NE.1)GOTO  1145 
      WRITE(LU,946) 
C----I/P SWITCHED LINE
1145  IF(RBIN(2HYE,2HNO,LU))IBR=IBR+2 
C----I/P PRIMARY STATION
      IF(LU.NE.1)GOTO 1150
      WRITE(LU,947) 
1150  IF(RBIN(2HYE,2HNO,LU))IBR=IBR+1 
C----I/P CHARACTER TRACE LENGTH 
      IF(LU.NE.1)GOTO 1155
      WRITE(LU,960) 
1155  READ(LU,*)IC
C----I/P EVENT TRACE LENGTH 
      IF(LU.NE.1)GOTO 1156
      WRITE(LU,961) 
1156  READ(LU,*)IE
C----INSURE EVENT TRACE LENGTH = 3 OR MORE
      IF(IE.LT.3)IE=3 
      IL=76 
      ITRCE=IE+IC 
      IS=60 
      ITRCE=ITRCE+IL
C----O/P DEC ITRCE
      CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,905) 
      CALL CODE 
      WRITE(OPND,180)ITRCE
      CALL LINE(IMAG,IX)
C----O/P OCT IDUX 
      CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,906) 
      CALL CODE 
      WRITE(OPND,200)IDUX 
      CALL LINE(IMAG,IX)
C----O/P OCT ISYNC
      CALL CODE 
      WRITE(OPND,200)ISYNC
      CALL LINE(IMAG,IX)
C----O/P OCT BAUD RATE
      CALL CODE 
      WRITE(OPND,200)J
      CALL LINE(IMAG,IX)
C---- O/P OCT LU
      CALL CODE 
      WRITE(OPND,200)LUX
      CALL LINE(IMAG,IX)
C----O/P BSS IS-5 
      CALL CODE 
      WRITE(IMAG,920) 
      ISYNC=IS-5
      CALL CODE 
      WRITE(OPND,180)ISYNC
      CALL LINE(IMAG,IX)
C----O/P OCT IBR
      CALL CODE 
      WRITE(IMAG,906) 
      CALL CODE 
      WRITE(OPND,200)IBR
      CALL LINE(IMAG,IX)
C----O/P DEC IC 
      CALL CODE 
      WRITE(IMAG,905) 
      CALL CODE 
      WRITE(OPND,180)IC 
      CALL LINE(IMAG,IX)
C----O/P BSS ITRCE-IS 
      ITRCE=ITRCE-IS-2
      CALL CODE 
      WRITE(IMAG,920) 
      CALL CODE 
      WRITE(OPND,180)ITRCE
      CALL LINE(IMAG,IX)
      GOTO 1110 
C----O/P NOP     END OF LIST
2000  CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,921) 
      CALL LINE(IMAG,IX)
C----TEST FOR CONTROL BLOCK GENERATION
      IF(LU.NE.1)GOTO 2100
      WRITE(LU,952) 
2100  IF(RBIN(2HNO,2HYE,LU))GOTO 2500 
C----O/P ENT CB$
      CALL CODE 
      WRITE(IMAG,903) 
      CALL CODE 
      WRITE(OPND,956) 
      CALL LINE(IMAG,IX)
      CALL CODE 
      WRITE(IMAG,933) 
C----DEFINE START SEGMENT 
      CALL SEGDF(LU,ASCII)
C----O/P CB$  ASC 3,ABCDE 
      CALL CODE 
      WRITE(LABLE,956)
      CALL LINE(IMAG,IX)
C----I/P ACTIVE CONTROL BLOCKS
      IF(LU.NE.1)GOTO 2200
      WRITE(LU,953) 
2200  READ(LU,*)LQ
C----I/P RESERVE CONTROL BLOCKS 
2210  CONTINUE
      IF(LU.NE.1)GOTO 2300
      WRITE(LU,954) 
2300  READ(LU,*)KK
      IF(KK.LT.1)GOTO 2210
      KK=LQ+KK
C----I/P STACK LENGTH 
2310  IF(LU.NE.1)GOTO 2400
      WRITE(LU,955) 
2400  READ(LU,*)JS
      IF(JS.LT.4)GOTO 2310
C----O/P DEC LQ 
      CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,905) 
      CALL CODE 
      WRITE(OPND,180)LQ 
      CALL LINE(IMAG,IX)
C----O/P DEC KK 
      CALL CODE 
      WRITE(OPND,180)KK 
      CALL LINE(IMAG,IX)
C---O/P DEC LUCNT 
      CALL CODE 
      WRITE(OPND,180)LUCNT
      CALL LINE(IMAG,IX)
C----O/P DEC 18+2(JS) 
      JS=2*JS 
      J=JS+18 
      CALL CODE 
      WRITE(OPND,180)J
      CALL LINE(IMAG,IX)
C----O/P DEF *+1
      CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,957) 
      CALL LINE(IMAG,IX)
C----O/P BSS
      J=J*KK
      CALL CODE 
      WRITE(IMAG,920) 
      CALL CODE 
      WRITE(OPND,180)J
      CALL LINE(IMAG,IX)
2500  CONTINUE
C----O/P END
      CALL FLUSH(IMAG,40) 
      CALL CODE 
      WRITE(IMAG,908) 
      CALL LINE(IMAG,IX)
C----CLOSE DISK FILE
      CALL PACK(-1,-1)
C----SETUP JOB FILE FOR ASSEMBLER 
      JF=EXEC(18,FNAME,NSECT) 
      CALL IPUT(124B,JF)
      CALL IPUT(125B,JF)
      JS=IGET(161B) 
      CALL IPUT(177B,JS)
C----EXECUTE ASSEMBLER
      CALL EXEC(10,ASMB,2,99) 
      STOP
117   OPND(J)=2H,6
      OPND(J+1)=2H
      GOTO 119
118   OPND(J)=IOR(IAND(IBUF(J),177400B),54B)
      OPND(J+1)=2H6 
      OPND(J+2)=2H
      GOTO 119
      END 
      SUBROUTINE SEGDF(LU,INAM) 
C----GENERATE RELOCATABLE BINARY FOR START SEGMENT
      DIMENSION INAM(1) 
      DIMENSION IBIN(44)
      DATA IBIN/10400B,20000B,166456B,22123B,52122B,52040B,1,0, 
     -         0,5,143B,0,0,0,0,0,0,
     -         3400B,40001B,6246B,22123B,52122B,52000B,0, 
     -         4400B,100002B,0,0,0,0,51524B,51124B,20402B,
     -         3000B,60101B,176103B,0,100000B,16002B, 
     -         2000B,120001B,120001B,0,0/ 
C     ARRAY CONTAINS RELOCATABLE BINARY FOR FOLLOWIN
C     NAM $STRT,5 
C     ENT $STRT 
C     ENT MAIN
C     EXT STRT! 
CSTRT JSB STRT! 
C     END 
      CALL FLUSH(IBIN(28),3)
      IF(LU.NE.1)GOTO 10
      WRITE(LU,5) 
5     FORMAT("MAIN PROGRAM =_") 
10    READ(LU,15)(IBIN(J),J=28,30)
15    FORMAT(3A2) 
      IBIN(30)=IAND(IBIN(30),177400B)+1 
      IBIN(27)=IBIN(26) 
      DO 20 J=28,33 
20    IBIN(27)=IBIN(27)+IBIN(J) 
      CALL FLUSH(IBIN(4),3) 
      IF(LU.NE.1)GOTO 25
      WRITE(LU,26)
26    FORMAT("START SEGMENT=_") 
25    READ(LU,15)(IBIN(J),J=4,6)
      IBIN(3)=IBIN(2) 
      DO 40 J=4,17
40    IBIN(3)=IBIN(3)+IBIN(J) 
      INAM(1)=IBIN(4) 
      INAM(2)=IBIN(5) 
      INAM(3)=IBIN(6) 
      JBINC=IGET(102B)
      ITRK=IAND(JBINC,177400B)/400B 
      IF(ITRK.LT.0)ITRK=ITRK+400B 
      ISECT=IAND(JBINC,377B)
      CALL EXEC(-2,102B,IBIN,44,ITRK,ISECT) 
      ISECT=ISECT+1 
      IF(ISECT.LT.IGET(116B))GOTO 30
      ISECT=0 
      ITRK=ITRK-1 
30    J=ITRK*400B+ISECT 
      IF(J.EQ.IGET(160B))GOTO 999 
      CALL IPUT(102B,J) 
      RETURN
999   CALL IPUT(101B,-1)
      WRITE(1,1000) 
1000  FORMAT("JBIN OVERFLOW") 
      RETURN
      END 
      INTEGER FUNCTION FINDL(L1,L2,L3)
C     THIS FUNCTION FINDS THE FIRST ITEM IN ARRAY L1 WHICH
C     MATCHES L2. L3 CONTAINS THE NUMBER OF ITEMS IN L2.
C     THE RESULTANT IS THE INDEX INTO L2, ZERO INDICATES
C     NO FIND.
      DIMENSION L1(6,1),L2(3) 
      DO 1 J=1,L3 
      DO 2 K=1,3
      IF(L1(K,J).NE.L2(K))GOTO 1
2     CONTINUE
      FINDL=J 
      RETURN
1     CONTINUE
      FINDL=0 
      RETURN
      END 
      LOGICAL FUNCTION RBIN(L1,L2,LU) 
C     THIS FUNCTION READS 2 ASCII CHARACTERS FROM THE DEVICE
C     SPECIFIED BY LU. IF THE ANSWER MATCHES L1,THE RESULT IS 
C     TRUE. IF THE ANSWER MATCHES L2 THE ANSWER IS FALSE. IF
C     THE ANSWER MATCHES NEITHER,THE OPERATOR IS PROMPTED TO
C     INPUT CORRECT REPLIES.
1     READ(LU,10)IN 
10    FORMAT(A2)
      IF(IN.EQ.L1)GOTO 20 
      IF(IN.EQ.L2)GOTO 30 
      WRITE(1,40)L1,L2
40    FORMAT("INCORRECT INPUT"/"ENTER ",A2," OR "A2)
      IF(LU.NE.1)PAUSE
      GOTO 1
20    RBIN=.TRUE. 
      RETURN
30    RBIN=.FALSE.
      RETURN
      END 
      SUBROUTINE COMNT(L1,L2,L3,L4) 
C     THIS SUBROUTINE OUTPUTS COMMENTS TO THE SOURCE FILE.
C----L1= FORMAT 
C----L2=VARIABLE
C----L3=ARRAY LENGTH
C----L4=SECTOR INDEX
      DIMENSION IMAG(20),L2(1)
10    FORMAT("***LU ",I2) 
20    FORMAT("***",3A2) 
30    FORMAT("***",I4," BAUD")
40    FORMAT("*** FULL DUPLEX") 
50    FORMAT("*** SECONDARY CHAN.") 
60    FORMAT("*** ECHO")
70    FORMAT("*** SYNCHRONOUS") 
      CALL FLUSH(IMAG,20) 
      GOTO(1,2,3,4,5,6,7)L1 
1     CALL CODE 
      WRITE(IMAG,10)L2
900   CALL LINE(IMAG,L4)
      RETURN
2     CALL CODE 
      WRITE(IMAG,20)(L2(J),J=1,L3)
      GOTO 900
3     CALL CODE 
      WRITE(IMAG,30)L2
      GOTO 900
4     CALL CODE 
      WRITE(IMAG,40)
      GOTO 900
5     CALL CODE 
      WRITE(IMAG,50)
      GOTO 900
6     CALL CODE 
      WRITE(IMAG,60)
      GOTO 900
7     CALL CODE 
      WRITE(IMAG,70)
      GOTO 900
      END 
      SUBROUTINE IBAUD(LU,K,J)
C     THIS SUBROUTINE INPUTS BAUD RATE AND ENCODES IT. K CONTAINS 
C     THE BAUD RATE AS INPUT, AND J CONTAINS THE ENCODED RATE.
      INTEGER RATE(15)
      DATA RATE/110,134,150,220,300,440,600,880,
     *          1200,1760,2400,4800,
     *          3600,7200,9600/ 
913   FORMAT("BAUD RATE=_") 
914   FORMAT("INVALID BAUD RATE") 
1     CONTINUE
      IF(LU.NE. 1)GOTO 150
      WRITE(LU,913) 
150   READ(LU,*)IBR 
      K=IBR 
      IF(K.EQ.0)GOTO 200
C----ENCODE BAUD RATE 
      DO 190 J=1,15 
      IF(RATE(J).EQ.IBR)GOTO 195
190   CONTINUE
      J=0 
      WRITE(1,914)
      IF(LU.NE.1)PAUSE
      GOTO 1
195   RETURN
200   J=0 
      RETURN
      END 
      SUBROUTINE LINE(IL,IX)
C     THIS SUBROUTINE PACKS 20 CHARACTER SOURCE LINES.
      DIMENSION IL(1) 
      CALL PACK(5000B,IX) 
      DO 10 L=1,10
10    CALL PACK(IL(L),IX) 
      RETURN
      END 
      SUBROUTINE PACK(II,IX)
C     THIS SUBROUTINE BUILDS DISK FILE C$$$1. 
      INTEGER FNAME(3),DISK(128)
      INTEGER RSECT 
      IF(IX)900,100,200 
100   CALL CODE 
      WRITE(FNAME,110)
110   FORMAT("C$$$1 ")
      RSECT=0 
      IX=1
200   DISK(IX)=II 
      IF(IX.NE.128)GOTO 210 
      CALL EXEC(15,3,DISK,128,FNAME,RSECT)
      RSECT=RSECT+1 
      IX=0
210   IX=IX+1 
      IY=IX 
      RETURN
900   DISK(IY)=0
      DISK(IY+1)=-1 
      CALL EXEC(15,3,DISK,128,FNAME,RSECT)
      RSECT=RSECT+1 
      WRITE(1,910)RSECT 
910   FORMAT("SECTORS="I5)
      RETURN
      END 
      SUBROUTINE FLUSH(IT,L)
C     THIS SUBROUTINE FILLS ARRAY IT WITH SPACES. 
      DIMENSION IT(1) 
      DO 10 J=1,L 
10    IT(J)=2H
      RETURN
      END 
      END$
::
:ST,S,$TC17,5 
ASMB,L,C
      NAM IGET,7
      ENT IGET
IGET  NOP 
      LDB IGET,I
      ISZ IGET
      LDA IGET,I
      LDA A,I 
      LDA A,I 
      JMP B,I 
A     EQU 0 
B     EQU 1 
      END 
::
:ST,S,$TC18,5 
ASMB,L,C
      NAM IPUT,7
      ENT IPUT
      EXT .ENTR,EXEC
ADDR  NOP 
VALU  NOP 
IPUT  NOP 
      JSB .ENTR 
      DEF ADDR
      LDA VALU,I
      LDB ADDR,I
      JSB EXEC
      DEF *+2 
      DEF N19$
      JMP IPUT,I
N19$  DEC -19 
      END 
::
:CO MOUNT TAPE #12, TYPE :GO
:PA 
                                                                                                                                                                                                                                                        