C PROGRAM MCDSPEC.FT C ---------------------- C C C C **SUBROUTINE M C D S P E C * C C C C P. LEMKIN AND G. GROSFELD C NATIONAL INSTITUTES OF HEALTH C BETHESDA, MD 20014 C C C AUG 12, 1976 - ADDED TEST FOR * AND ? IN CD.4. C REVISED AND RENAMED AUB 2, 1976 - LEMKIN C JULY 16, 1975 C REVISED JAN 11, 1976 C C C PURPOSE C ------- C DECODE THE COMMAND DECODER LINE REQUESTED IN "SPECIAL MODE" C SUCH THAT IF THE FILE IS A NUMBER THEN A CORRESPONDING VALUE C IS STORED INTO ICNUM[1:5] FOR THE FIVE INPUT FILES. THE OUTPUT C FILE IS STORED IN KOUTFILE[1:4] AND THE FIRST INPUT C FILE IN KINFILE[1:4]. THE INPUT AND OUTPUT DEVICES ASSOCIATED C WITH THE FILE NAMES ARE STORED IN KDEVOUT AND KDEVIN RESPECTIVELY. C THE SWITCHES ARE STORED IN VARIABLES ISW[1:36]. C C C VARIABLES C --------- C ICNUM[1:5] - CONVERTED NUMBERS FROM EQU. FILE NAMES (DEC. NAMES) C KOUTFILE[1:4] - OUTPUT FILE C KDEVOUT - OUTPUT DEVICE C KINFILE[1:20] - INPUT FILE C KDEVIN[5] - INPUT FILE DEVICES C ISW[1:36] - SWITCH ARRAY A,B,C...Z,0,1,2,3,4,5,6,7,8,9. C MCD[1:40] - IS A COPY OF THE CD AREA AFTER SPEC. CD IS CALLED C MCD[1] = OUTPUT DEVICE C MCD[2:5] = OUTPUT FILE NAME AND EXTENSION C MCD[6] = INPUT SPEC #1 DEVICE C MCD[7:10] = INPUT SPEC #1 FILE NAME AND EXTENSION C MCD[11] = INPUT SPEC #2 DEVICE C MCD[12:15] = INPUT SPEC #2 FILE NAME AND EXTENSION C MCD[16] = INPUT SPEC #3 DEVICE C MCD[17:20] = INPUT SPEC #3 FILE NAME AND EXTENSION C MCD[21] = INPUT SPEC #4 DEVICE C MCD[22:25] = INPUT SPEC #4 FILE NAME AND EXTENSION C MCD[26] = INPUT SPEC #5 DEVICE C MCD[27:30] = INPUT SPEC #5 FILE NAME AND EXTENSION C MCD[38:40] = SWITCHES /A/B/C.../9 C C C C C C C C C C S CPAGE 2 S ENTRY MCDSP S MCDSP, BLOCK 2 /ENTRY C C [CD.1] CALL THE COMMAND DECODER S CPAGE 3 S JMS 45 /CDFSKP S NOP S 6212 /CIF 10 S CPAGE 5 S JMS 7700 /JMS USR S 5 /COMMAND DECODER S 5200 /.* USED TO DENOTE SPECIAL MODE S 0000 /PRESERVE ALL TENTATIVE FILES C C C C [CD.1.1] RESET THE TTY: OUTPUT FLAG FOR LATER FORTRAN C I/O SO THAT WE DO NOT HANG THERE... S TLS /OUTPUT A NULL... S FIXUP, TSF S JMP FIXUP C C C [CD.2] COPY THE CD AREA TO MCD[1:40] DO 1700 I=1,40 S TAD (7577 S TAD \I S DCA 7 S 6211 /CDF 7 S 1407 /TADI 7 S CPAGE 3 S JMS 45 /CDFSKP S NOP S DCA \ICD 1700 MCD(I)=ICD C C C [CD.3] SET OUTPUT FILE NAME DO 1703 I=1,4 1703 KOUTFILE(I)=MCD(I+1) KDEVOUT=MCD(1) S TAD \KDEVOUT S AND (0017 S DCA \KDEVOUT C C C C C C C C [CD.4] SCAN THE 5 INPUT FILES FOR DIGIT NAMES AND PUT C INTO ARRAY ICNUM[1:5]. C ZERO THE INPUT FILE NAMES DO 1807 I=1,20 1807 KINFILE(I)=0 C ZERO THE ICNUM ARRAY DO 1705 N=1,5 ICNUM(N)=0 C ALSO ZERO THE INPUT FILE DEVICES KDEVIN(N)=0 C TEST IF FILE NAME IS DIGITS AND THEN CONVERT. C COMPUTE THE INDEX OF MCD INPUT FILE FOR N'TH INPUT FILE. J=(N-1)*5+7 C IF FIRST CHARS="*@" THEN DEOCODE AS ASCII NAME J1=MCD(J) S TAD \J1 S TAD (-5200 /"*@" S SNA CLA S JMP \1805 /ASCII C C TEST FOR ? IN FIRST CHAR OF WORD S TAD \J1 S AND (7700 S TAD (-7700 /"?@" S SNA CLA S JMP \1805 /ASCII C C IF < 0 THEN 60+DIGIT ==> NUMBER DECODE. IF(J1) 1706,1805,1805 C C C [CD.4.1] IT IS AN ASCII NAME, PUT IT INTO KINFILE ARRAY 1805 DO 1806 I=1,4 L=(N-1)*4+I C ALSO COPY THE DEVICE NUMBER INTO KDEVIN ARRAY J1=MCD(J-1) S TAD \J1 S AND (0017 S DCA \J1 KDEVIN(N)=J1 1806 KINFILE(L)=MCD(J+I-1) GOTO 1705 C C C [CD.5.2] IT IS DIGITS, CONVERT AND PACKK INT ICNUM ARRAY 1706 DO 1707 I=1,2 K=MCD(J+I-1) DO 1707 K2=1,2 S TAD \K S BSW S DCA \K S TAD \K S AND (0077 S SNA /TEST IF DONE S JMP \1708 S TAD (-0060 S DCA \KK 1707 ICNUM(N)=ICNUM(N)*10+KK 1708 CONTINUE 1705 CONTINUE C C C [CD.5] CONVERT THE SWITCHES I=0 DO 1709 N=36,38 K=MCD(N) DO 1709 J=1,12 S TAD \K S RAL S DCA \K S RAL S DCA \KSW /SAVE 0000 OR 0001 EQV OF SWITCH I=I+1 1709 ISW(I)=KSW C C C C [CD.6] RETURN S RETRN MCDSP C C END