:ST,S,$TC16,5 FTN4,L,T PROGRAM TCGEN C TERMINAL CONFIGURATION PROGRAM (TCS/B) - 9/74 C C REV B SUPPORTS MULTIPLE LOGICAL DRIVERS, SPECIFICALLY C ATD01 AND ATD02. TERMINALS SUPPORTED INCLUDE C 1) H2600 - HP 2600 C 2) H2615 - HP 2615 C 3) H2749 - HP 2749 C 4) H2762 - HP 2762 C 5) G1200 - GE TERMINET 1200 C 6) P2616 - HP 2616 PAGE MODE (PMT01) C 7) P2640 - HP2640 PAGE MODE (PMT02) C 8) H2640 - HP2640 CHAR. MODE (ATD01) C 9) H7260 - HP7260 GRENOBLE MS CARD READER C (ACR01) C C REV B ALSO SUPPORTS THE SYNCHRONOUS LINE CONTROL C PACKAGE AND TCS INITIALIZATION. C C C THIS PROGRAM GENERATES (WITH THE AID OF THE DOS ASSEMBLER) A C RELOCATABLE TABLE FOR USE WITH THE CONFIGURATION SUBROUTINE C "CNFIG". THE PROGRAM PROVIDES FOR OPERATION WITH TCS AND C ATD01. PARAMETER INPUT MAY BE FROM THE SYSTEM CONSOLE OR C FROM A BATCH DEVICE. THE PROGRAM REQUIRES THAT AN ASCII FILE C "C$$$1" BE SETUP FOR STORING THE SOURCE GENERATED. 50 SECTORS C SHOULD BE SUFFICIENT. C C TO OPERATE C :CL C :PR,TCGEN[,L] L=LOGICAL UNIT FOR INPUT,0 OR 1 FOR CONSOLE C C DIMENSION IBUF(3) DIMENSION IMAG(40),LABLE(3) DIMENSION LINK(6,9) DIMENSION LINKX(6,9) INTEGER ASMB(3),FNAME(3) INTEGER EXEC INTEGER FINDL INTEGER OPND(3),TERM(3) INTEGER ASCII(3) LOGICAL RBIN EQUIVALENCE (LINKX(1,1),LINK(4,1)) EQUIVALENCE(ASCII(1),IMAG(7)) EQUIVALENCE(LABLE(1),IMAG(1)) EQUIVALENCE(OPND(1),IMAG(6)) DATA ASMB/2HAS,2HMB,2H / DATA FNAME/2HC$,2H$$,2H1 / 901 FORMAT("ASMB,L") 902 FORMAT(6X,"NAM") 903 FORMAT(6X,"ENT") 904 FORMAT(6X,"EQU *") 905 FORMAT(6X,"DEC") 906 FORMAT(6X,"OCT") 920 FORMAT(6X,"BSS") 907 FORMAT(6X,"EXT") 908 FORMAT(6X,"END") 910 FORMAT("CONFIGURATION NAME=_") 911 FORMAT("TERMINAL USED=_") 912 FORMAT("LU=_") 914 FORMAT("HALF/FULL DUPLEX=_") 915 FORMAT("SECONDARY CHANNEL?_") 916 FORMAT("ECHO?_") 917 FORMAT("TRACE LENGTH=_") 918 FORMAT("TERMINAL TYPE=_") 919 FORMAT(6X,"DEF") 921 FORMAT(6X,"NOP") 922 FORMAT("TCS USED?_") 923 FORMAT("QUEUE LENGTH=_") 924 FORMAT("FILE NAME=_") 925 FORMAT("FILE NO.=_") 926 FORMAT("SEGMENT NAME=_") 927 FORMAT(6X,"EXT TCS") 928 FORMAT(6X,"JSB TCS") 929 FORMAT(6X,"DEF PQ$") 930 FORMAT(6X,"DEF SG$") 931 FORMAT(6X,"ABS S$") 932 FORMAT(6X,"DEF DR$") 933 FORMAT(6X,"ASC 3,") 934 FORMAT(6X,"DEF T") 935 FORMAT("PQ$ BSS") 936 FORMAT("SG$ EQU *") 937 FORMAT("S$ EQU") 938 FORMAT("DR$ BSS") 939 FORMAT("T EQU *") 940 FORMAT("PRIVILEGED TERMINAL?_") 941 FORMAT("SLC USED?_") 942 FORMAT("SLC") 943 FORMAT("ASCII/EBCDIC CODE?_") 944 FORMAT("CRC/VRC BLOCK CHECK?_") 945 FORMAT("HASP STATION?_") 946 FORMAT("SWITCHED LINE?_") 947 FORMAT("PRIMARY STATION?_") 948 FORMAT("SYNCHRONOUS?_") 949 FORMAT("MTO USED?_") 951 FORMAT("MTO") 950 FORMAT(2X,3A2,2X,"IS NOT DEFINED AS A TERMINAL") 952 FORMAT("GENERATE CONTROL BLOCKS?_") 953 FORMAT("ACTIVE CONTROL BLOCKS=_") 954 FORMAT("RESERVE CONTROL BLOCKS=_") 955 FORMAT("STACK LENGTH=_") 956 FORMAT("CB$") 957 FORMAT(6X,"DEF *+1") 958 FORMAT("MAX NO. OF FILES=_") 959 FORMAT(6X,"DEF *+",I6) 960 FORMAT("CHARACTER TRACE LENGTH=_") 961 FORMAT("EVENT TRACE LENGTH=_") 1000 FORMAT("H2600 ATD01 H2615 ATD01 H2749 ATD01 H2762 ATD01 ", * "G1200 ATD02 P2616 PMT01 P2640 PMT02 H2640 ATD01 ", * "H7260 ACR01 ") CALL RMPAR(IMAG) C----SET NUMBER OF DEVICES IN LINK ND = 9 C----FILL LINK TABLE WITH TERMINAL&DRIVER CALL CODE WRITE(LINK,1000) LU=IMAG(1) C----DEFAULT TO CONSOLE IF NO INPUT SPECIFIED IF(LU.EQ.0)LU=1 C----INITIALIZE SECTOR INDEX IX=0 C----CLEAR LU COUNT LUCNT=0 C----O/P ASMB,L CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,901) CALL LINE(IMAG,IX) C----I/P CONFIGURATION NAME IF(LU.NE.1)GOTO 110 WRITE(LU,910) 110 READ(LU,115)IBUF 115 FORMAT(3A2) C----O/P NAM XXXX,6 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,902) DO 116 J=1,3 IF(IBUF(J).EQ.2H )GOTO 117 IF(IAND(IBUF(J),377B).EQ.40B)GOTO 118 116 OPND(J)=IBUF(J) 119 CONTINUE CALL LINE(IMAG,IX) C----O/P ENT XXXX CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,903) OPND(1)=IBUF(1) OPND(2)=IBUF(2) OPND(3)=IBUF(3) CALL LINE(IMAG,IX) C----O/P XXXX EQU * CALL FLUSH (IMAG,40) CALL CODE WRITE(IMAG,904) DO 120 J=1,3 120 LABLE(J)=IBUF(J) CALL LINE(IMAG,IX) C----CLEAR MTO FLAG MTFLG=0 C----MTO OPERATION? IF(LU.NE.1)GOTO 125 WRITE(LU,949) 125 IF(RBIN(2HNO,2HYE,LU))GOTO 126 C----O/P EXT MTO CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,927) CALL CODE WRITE(OPND,951) CALL LINE(IMAG,IX) C----O/P JSB MTO CALL CODE WRITE(IMAG,928) CALL CODE WRITE(OPND,951) C----SET MTO FLAG MTFLG=1 GOTO 305 C----TCS OPERATION 126 CONTINUE IF(LU.NE.1)GOTO 300 WRITE(LU,922) 300 IF(RBIN(2HNO,2HYE,LU))GOTO 310 C----O/P EXT TCS CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,927) CALL LINE(IMAG,IX) C----O/P JSB TCS CALL CODE WRITE (IMAG,928) 305 CALL LINE(IMAG,IX) C-----O/P DEF PQ$ CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,929) CALL LINE(IMAG,IX) C----I/P QUEUE LENGTH 315 IF(LU.NE.1)GOTO 320 WRITE(LU,923) 320 READ(LU,*)LQ IF(LQ)315,315,325 325 CALL FLUSH(IMAG,40) C----O/P DEC N CALL CODE WRITE(IMAG,905) CALL CODE WRITE(OPND,180)LQ CALL LINE(IMAG,IX) C----O/P DEF SG$ CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,930) CALL LINE(IMAG,IX) C----O/P ABS S$ CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,931) CALL LINE(IMAG,IX) C----O/P DEF DR$ CALL CODE WRITE(IMAG,932) CALL LINE(IMAG,IX) C----IF MTO GET FILE DIRECTORY SIZE IF(MTFLG.EQ.0)GOTO 326 328 IF(LU.NE.1)GOTO 327 WRITE(LU,958) 327 READ(LU,*)MTFLG IF(MTFLG.LT.0)GOTO 328 C----O/P DEC N (N=0 IF TCS) 326 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,905) CALL CODE WRITE(OPND,180)MTFLG CALL LINE(IMAG,IX) C----O/P DEF *+6N+1 IF(MTFLG.EQ.0)GOTO 330 J=MTFLG*6+1 CALL CODE WRITE(IMAG,959)J CALL LINE(IMAG,IX) C----O/P BSS 6N J=J-1 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,920) CALL CODE WRITE(OPND,180)J CALL LINE(IMAG,IX) C----I/P FILES TO BE OPENED 330 IF(LU.NE.1)GOTO 335 WRITE(LU,924) 335 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,933) READ(LU,115)ASCII IF(ASCII(1).EQ.2H/E)GOTO 350 CALL LINE(IMAG,IX) C----O/P ASC 6,ABCDE 345 IF(LU.NE.1)GOTO 340 WRITE(LU,925) 340 CALL FLUSH(IMAG,40) C----I/P FILE # READ(LU,*)NF IF(NF.LT.1)GOTO 345 IF(NF.GT.16) GOTO 345 C----O/P DEC F CALL CODE WRITE(IMAG,905) CALL CODE WRITE(OPND,180)NF CALL LINE(IMAG,IX) GOTO 330 C----O/P NOP 350 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,921) CALL LINE(IMAG,IX) C----O/P DEF T CALL CODE WRITE(IMAG,934) CALL LINE(IMAG,IX) C----O/P PQ$ BSS LQ*9 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,935) LQ=9*LQ CALL CODE WRITE(OPND,180)LQ CALL LINE(IMAG,IX) C----O/P SG$ EQU * CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,936) CALL LINE(IMAG,IX) NS=0 C----I/P SEGMENTS 360 IF(LU.NE.1)GOTO 365 WRITE(LU,926) 365 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,933) READ(LU,115)ASCII IF(ASCII(1).EQ.2H/E)GOTO 370 NS=NS+1 CALL LINE(IMAG,IX) C----O/P ASC 6,ABCDE GOTO 360 C----O/P S$ EQU NS 370 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,937) CALL CODE WRITE(OPND,180)NS CALL LINE(IMAG,IX) C----O/P DR$ BSS 11*NS NS=11*NS CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,938) CALL CODE WRITE(OPND,180)NS CALL LINE(IMAG,IX) C---O/P T EQU * CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,939) CALL LINE(IMAG,IX) GOTO 130 C----O/P NOP 310 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,921) CALL LINE(IMAG,IX) GOTO 130 C----I/P TERMINAL USED 130 IF(LU.NE.1)GOTO 135 WRITE(LU,911) 135 CALL FLUSH(IBUF,3) READ(LU,115)IBUF IF(IBUF(1).EQ.2H/E)GOTO 140 C----O/P EXT XXXX CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,907) DO 136 J=1,3 136 OPND(J)=IBUF(J) CALL LINE(IMAG,IX) C----FIND TERMINAL IN LINK ARRAY J=FINDL(LINK,IBUF,ND) IF(J.NE.0)GOTO 131 WRITE(1,950)IBUF PAUSE GOTO 130 C----O/P EXT ATDXX C----IF ENTRY ALREADY FLAGGED BYPASS 131 IF(IAND(LINK(6,J),377B).NE.40B)GOTO 130 DO 132 K=1,3 KK=K+3 132 OPND(K)=LINK(KK,J) CALL LINE(IMAG,IX) C----FLAG ALL MATCHING ENTRIES 133 J=FINDL(LINKX,OPND,ND) IF(J.EQ.0)GOTO 130 LINKX(3,J)=LINKX(3,J)+1 GOTO 133 C----I/P LU 140 IF(LU.NE.1) GOTO 145 WRITE(LU,912) 145 READ(LU,115)IBUF IF(IBUF(1).EQ.2H/E) GOTO 900 C----INCREMENT LU COUNT LUCNT=LUCNT+1 CALL CODE READ(IBUF,*)LUX CALL COMNT(1,LUX,1,IX) C-----TEST FOR PRIVILEGED TERMINAL IF(LU.NE.1)GOTO 143 WRITE(LU,940) 143 IF(RBIN(2HNO,2HYE,LU))GOTO 220 C----I/P TERMINAL TYPE IF(LU.NE.1)GOTO 146 WRITE(LU,918) 146 CALL FLUSH(TERM,3) READ(LU,115)TERM CALL COMNT(2,TERM,3,IX) C----FIND TERMINAL IN LINK ARRAY JJ=FINDL(LINK,TERM,ND) IF(JJ.NE.0)GOTO 147 WRITE(1,950)TERM STOP 147 CONTINUE C----I/P BAUD RATE CALL IBAUD(LU,IBR,J) CALL COMNT(3,IBR,1,IX) IDUX=0 C----I/P HALF/FULL DUPLEX IF(LU.NE.1) GOTO 155 WRITE(LU,914) 155 IF(RBIN(2HFU,2HHA,LU))IDUX=4 C----I/P SECONDARY CHANNEL IF(LU.NE.1) GOTO 160 WRITE(LU,915) 160 IF(RBIN(2HYE,2HNO,LU))IDUX=IDUX+2 C----I/P ECHO KK=6 IF(LU.NE.1)GOTO 165 IF(LINK(4,JJ).EQ.2HPM)GOTO 161 WRITE(LU,916) 165 IF(RBIN(2HYE,2HNO,LU))IDUX=IDUX+1 IF(IAND(IDUX,4).EQ.4)CALL COMNT(4,1,1,IX) IF(IAND(IDUX,2).EQ.2)CALL COMNT(5,1,1,IX) IF(LINK(4,JJ).EQ.2HPM)KK=7 IF(IAND(IDUX,1).EQ.1)CALL COMNT(KK,1,1,IX) C----I/P TRACE LENGTH IF(LU.NE.1)GOTO 170 WRITE(LU,917) 170 READ(LU,*)ITRCE C----INSURE TRACE TABLE LENGTH IS MULTIPLE OF 4 ITRCE = (ITRCE/4)*4 ITRCE=ITRCE+27 C----EQT EXT LENGTH FOR ACR01 = 31 IF(LINK(4,JJ) .EQ. 2HAC) ITRCE=ITRCE+4 C----I/P DEC XX EXTENSION LENGTH CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,905) CALL CODE WRITE(OPND,180)ITRCE 180 FORMAT(I6) CALL LINE(IMAG,IX) 195 IDUX=IDUX+(8*J) IDUX=LUX+(1000B*IDUX) C----O/P OCT BBA0LL (BB=BAUD RATE, A=LINE,LL=LU) CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,906) CALL CODE WRITE(OPND,200)IDUX 200 FORMAT(@6) CALL LINE(IMAG,IX) C----O/P DEC XXXX TERMINAL TYPE CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,919) DO 210 J=1,3 210 OPND(J)=TERM(J) CALL LINE(IMAG,IX) C----O/P JSB ATDXX 205 CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,928) DO 206 K=1,3 KK=K+3 206 OPND(K)=LINK(KK,JJ) C----REMOVE FLAG BIT OPND(3)=IOR(IAND(OPND(3),177400B),40B) CALL LINE(IMAG,IX) C---- O/P OCT TYPE C---- ASYNCH. TERMINAL = 0 IF(OPND(1).EQ.2HAT)J=0 IF(OPND(1) .EQ. 2HAC) J=0 C---- PAGE MODE TERMINAL = 1 IF(OPND(1).EQ.2HPM)J=1 CALL CODE WRITE(IMAG,906) CALL CODE WRITE(OPND,200)J CALL LINE(IMAG,IX) C----O/P BSS XX RESERVE EXTENSION CALL FLUSH(IMAG,40) CALL CODE WRITE(IMAG,920) ITRCE=ITRCE-5 CALL CODE WRITE(OPND,180)ITRCE