C HIORT C HYBRID INTERFACE OPERATIONAL READINESS TEST PROGRAM C AUGUST,1968 C C. L. CROSS C HYBRID COMPUTATION LABORATORY C CARNEGIE-MELLON UNIVERSITY INTEGER ANSWER,ERROR,HAXIS,HAXIT,OU,VAXIS,VAXIT LOGICAL ABSVAL,RSAC,TEST REAL INAME,NO DIMENSION INAME(2),ONAME(2) DIMENSION IHAXIS(12),HAXIS(12) DIMENSION IHAXIT(11),HAXIT(11) DIMENSION IVAXIS(48),VAXIS(48) DIMENSION IVAXIT(11),VAXIT(11) DIMENSION RAXIS(48) DIMENSION IAT(99) DIMENSION IADC(15),IETAB(47,11) COMMON/A/ANSWER DATA IHAXIT(1),IHAXIT(2),IHAXIT(3),IHAXIT(4),IHAXIT(5),IHAXIT(6), 1IHAXIT(7),IHAXIT(8),IHAXIT(9),IHAXIT(10),IHAXIT(11)/-9999,-8000, 2-6000,-4000,-2000,0,2000,4000,6000,8000,9999/ DATA HAXIT(1),HAXIT(2),HAXIT(3),HAXIT(4),HAXIT(5),HAXIT(6),HAXIT(7 1),HAXIT(8),HAXIT(9),HAXIT(10),HAXIT(11)/-131071,-104858,-78643, 2-52429,-26214,0,26214,52429,78643,104858,131071/ DATA IVAXIT(1),IVAXIT(2),IVAXIT(3),IVAXIT(4),IVAXIT(5),IVAXIT(6), 1IVAXIT(7),IVAXIT(8),IVAXIT(9),IVAXIT(10),IVAXIT(11)/9999,1000,60, 210,6,0,-6,-10,-60,-1000,-9999/ DATA VAXIT(1),VAXIT(2),VAXIT(3),VAXIT(4),VAXIT(5),VAXIT(6),VAXIT(7 1),VAXIT(8),VAXIT(9),VAXIT(10),VAXIT(11)/131071,13107,786,131,79,0, 2-79,-131,-786,-13107,-131071/ DATA NO,YES/2HNO,3HYES/ C INITIALIZATION CIU=5 CALL INIT(ERROR) IF (ERROR.EQ.0) GO TO 10 WRITE(4,12000) STOP C CONTINUATION DIRECTIVE 10 WRITE(4,10010) 20 IF (RSAC(0)) GO TO 21 WRITE(4,10020) GO TO 22 21 WRITE(4,10021) 22 WRITE(4,10000) READ(4,11000) I IF (I-1) 30,40,50 C TERMINATE 30 STOP C ABSOLUTE TEST 40 TEST=.TRUE.  GO TO 100 C 50 IF (I-2) 60,70,60 C ILLEGAL CONTINUATION DIRECTIVE 60 WRITE(4,12010) GO TO 20 C RELATIVE TEST 70 TEST=.FALSE. C OUTPUT UNIT 100 IF (RSAC(0)) GO TO 101 WRITE(4,10030) GO TO 102 101 WRITE(4,10031) 102 WRITE(4,10000) READ(4,11000) I IF (I-1) 110,120,130 C ILLEGAL OUTPUT UNIT 110 WRITE(4,12030) GO TO 100 C TELETYPE 120 OU=4 GO TO 200 C 130 IF (I-3) 140,160,180 C PAPER TAPE 140 OU=6 GO TO 200 C DECTAPE 160 IF (RSAC(0)) GO TO 161 WRITE(4,10040) WRITE(4,10050) GO TO 162 161 WRITE(4,10051) 162 WRITE(4,10000) READ (4,11040) OU,ONAME IF (OU.NE.0.AND.OU.LT.4) GO TO 170 C ILLEGAL OUTPUT UNIT WRITE (4,12030) GO TO 160 C 170 CALL ENTER(OU,ONAME) GO TO 200 C 180 IF (I-4) 110,190,110 C DCT-2000 LINE PRINTER 190 OU=8 C TEST DIRECTIVE 200 IF (RSAC(0)) GO TO 201 WRITE(4,10060) GO TO 202 201 WRITE(4,10061) 202 WRITE (4,10000) READ(4,11000) I IF (I-1) 210,220,260 C RESTART 210 IF (OU.LT.4) CALL CLOSE(OU) GO TO 10 C STANDARD DATA 220 IF (TEST) GO TO 240 C RELATIVE DATA NVB=11 NHB=11 DO 230 I=1,11 IHAXIS(I)=IHAXIT(I) HAXIS(I)=HAXIT(I) IVAXIS(I)=IVAXIT(I) 230 VAXIS(I)=VAXIT(I) GO TO 1000 C ABSOLUTE DATA 240 NT=33 IAT(1)=0 J=-1 DO 250 I=2,33 J=J+4096 250 IAT(I)=J GO TO 800 C 260 IF (I-2) 270,300,270 C ILLEGAL TEST DIRECTIVE 270 WRITE(4,12040) GO TO 200 C READ DATA C SPECIFYING INPUT UNIT 300 IF (RSAC(0)) GO TO 301 WRITE(4,10070) GO TO 302 301 WRITE(4,10071) 302 WRITE(4,10000) READ(4,11000) I IF (I-1) 310,320,330 C ILLEGAL INPUT UNIT 310 WRITE(4,12020) GO TO 300 C TELETYPE 320 IU=4 GO TO 400 C 330 IF (I-3) 340,360,380 C PAPER TAPE 340 IU=5 GO TO 400 C DECTAPE 360 IF (RSAC(0)) GO TO 361 WRITE(4,10080) WRITE(4,10050) GO TO 362 361 WRITE(4,10051) 362 WRITE(4,10000) READ(4,11040) IU,INAME IF (IU.NE.0.AND.IU.LT.4) GO TO 370 C ILLEGAL INPUT UNIT WRITE(4,12020) GO TO 360 C 370 CALL SEEK(IU,INAME) GO TO 400 C 380 IF (I-4) 310,390,310 C DCT-2000 CARD READER 390 IF (OU.NE.8) GO TO 395 C BOTH IU AND OU ARE THE DCT-2000 WRITE(4,12045) GO TO 200 395 IU=7 C INPUT PARAMETERS 400 IF (TEST) GO TO 690 C RELATIVE TEST C VERTICAL BREAKPOINTS 410 WRITE(4,10100) WRITE(4,10000) READ(4,11050) YESNO IF (YESNO.EQ.NO) GO TO 412 IF (YESNO.EQ.YES) GO TO 416 C YES-NO-MAYBE? WRITE(4,12120) GO TO 410 C STANDARD VERTICAL BREAKPOINTS 412 NVB=11 DO 414 I=1,11 IVAXIS(I)=IVAXIT(I) 414 VAXIS(I)=VAXIT(I) GO TO 550 C READ NEW VERTICAL BREAKPOINTS 416 WRITE(4,10105) WRITE(4,10000) READ(4,11010) NVB IF (NVB.GT.1.AND.NVB.LE.48) GO TO 420 C ILLEGAL NVB WRITE(4,12060) GO TO 416 C 420 J=(NVB-1)/12+1 IF (IU.EQ.4) WRITE(4,10180) DO 430 I=1,J M=(I-1)*12+1 N=MIN0(M+11,NVB) IF (IU.EQ.4) WRITE(4,10000) 430 READ(IU,11070) (RAXIS(K),K=M,N) C DESCENDING ORDER DO 440 I=1,NVB J=NVB-I+1 M=ABS(RAXIS(J))*10000.+0.5 IF (RAXIS(J).LT.0.) M=-M 440 IVAXIS(I)=M M=IVAXIS(1) DO 490 I=2,NVB N=IVAXIS(I) IF (N.LT.M) GO TO 490 450 WRITE(4,12130) WRITE(4,12140) WRITE(4,10000) READ(4,11050) YESNO IF (YESNO.EQ.NO) GO TO 416 IF (YESNO.EQ.YES) GO TO 460 C YES-NO-MAYBE? WRITE(4,12120) GO TO 450 C REORDER VERTICAL BREAKPOINTS 460 II=NVB-1 DO 480 I=1,II M=IVAXIS(I) K=I JJ=I+1 DO 470 J=JJ,NVB N=IVAXIS(J) IF (N.LT.M) GO TO 470 M=N K=J 470 CONTINUE IVAXIS(K)=IVAXIS(I) 480 IVAXIS(I)=M GO TO 500 490 M=N C CHECK FOR REDUNDANCY 500 M=IVAXIS(1) N=0 DO 530 I=2,NVB IF (IVAXIS(I).NE.M) GO TO 520 N=N+1 NVB=NVB-1 DO 510 J=I,NVB K=J+1 510 IVAXIS(J)=IVAXIS(K) GO TO 530 520 M=IVAXIS(I) 530 CONTINUE IF (N.NE.0) WRITE(4,12160) N C NORMALIZED VALUES DO 540 I=1,NVB 540 VAXIS(I)=FLOAT(IVAXIS(I))*13.1072 C HORIZONTAL BREAKPOINTS 550 WRITE(4,10110) WRITE(4,10000) READ(4,11050) YESNO IF (YESNO.EQ.NO) GO TO 552 IF (YESNO.EQ.YES) GO TO 556 C YES-NO-MAYBE? WRITE(4,12120) GO TO 550 C STANDARD HORIZONTAL BREAKPOINTS 552 NHB=11 DO 554 I=1,11 IHAXIS(I)=IHAXIT(I) 554 HAXIS(I)=HAXIT(I) GO TO 685 C READ NEW HORIZONTAL BREAKPOINTS 556 WRITE(4,10115) WRITE(4,10000) READ(4,11010) NHB IF (NHB.GT.1.AND.NHB.LE.12) GO TO 570 C ILLEGAL NHB WRITE(4,12070) GO TO 556 C 570 IF (IU.NE.4) GO TO 575 WRITE(4,10180) WRITE(4,10000) 575 READ (IU,11070) (RAXIS(K),K=1,NHB) C ASCENDING ORDER DO 580 I=1,NHB M=ABS(RAXIS(I))*10000.+0.5 IF (RAXIS(I).LT.0.) M=-M 580 IHAXIS(I)=M M=IHAXIS(1) DO 630 I=2,NHB N=IHAXIS(I) IF (N.GT.M) GO TO 630 590 WRITE(4,12130) WRITE(4,12140) WRITE(4,10000) READ(4,11050) YESNO IF (YESNO.EQ.NO) GO TO 556 IF (YESNO.EQ.YES) GO TO 600 C YES-NO-MAYBE WRITE(4,12120) GO TO 590 C REORDER HORIZONTAL BREAKPOINTS 600 II=NHB-1 DO 620 I=1,II M=IHAXIS(I) K=I JJ=I+1 DO 610 J=JJ,NHB N=IHAXIS(J) IF (N.GT.M) GO TO 610 M=N K=J 610 CONTINUE IHAXIS(K)=IHAXIS(I) 620 IHAXIS(I)=M GO TO 640 630 M=N C CHECK FOR REDUNDANCY 640 M=IHAXIS(1) N=0 DO 670 I=2,NHB IF (IHAXIS(I).NE.M) GO TO 660 N=N+1 NHB=NHB-1 DO 650 J=I,NHB K=J+1 650 IHAXIS(J)=IHAXIS(K)  GO TO 670 660 M=IHAXIS(I) 670 CONTINUE IF (N.NE.0) WRITE(4,12160) N C NORMALIZED VALUES DO 680 I=1,NHB 680 HAXIS(I)=FLOAT(IHAXIS(I))*13.1072 685 IF (IU.LT.4) CALL CLOSE(IU) GO TO 1000 C ABSOLUTE TEST 690 WRITE(4,10090) WRITE(4,10000) READ(4,11010) NT IF (NT.GT.0) GO TO 700 C ILLEGAL NT WRITE(4,12050) GO TO 690 C 700 J=(NT-1)/12+1 IF (IU.EQ.4) WRITE(4,10170) DO 710 I=1,J M=(I-1)*12+1 N=MIN0(M+11,NT) IF (IU.EQ.4) WRITE(4,10000) 710 READ(IU,11060) (IAT(K),K=M,N) IF (IU.LT.4) CALL CLOSE(IU) C TEST EXECUTION C ABSOLUTE TEST 800 NADC=0 IF (RSAC(0)) GO TO 801 WRITE(4,10120) GO TO 810 801 WRITE(4,10121) 810 WRITE(4,10000) READ(4,11010) I IF (I.EQ.99) GO TO 840 IF (I.GE.0.AND.I.LE.14) GO TO 820 C ILLEGAL ADC WRITE(4,12090) GO TO 810 C 820 IF (NADC.EQ.15) GO TO 830 NADC=NADC+1 IADC(NADC)=I GO TO 810 C ADC LIST FULL 830 WRITE(4,12220) IF(CIU.EQ.4) WRITE(4,10000) READ(CIU,11000) I IF (I.EQ.0) GO TO 800 C ADC ABSOLUTE ERROR TEST C MAIN LOOP 840 IF (NADC.EQ.0) GO TO 200 WRITE(OU,13000) N=1 DO 950 I=1,NT J=FLOAT(IAT(I))/13.1072 850 CALL TAVA(J,ERROR) IF (ERROR.EQ.0) GO TO 900 IF (ERROR-4) 860,870,880 C NEGATIVE IAT VALUE 860 WRITE(4,12230) I GO TO 950 C RCDAC MALFUNCTION 870 WRITE(4,12170) GO TO 890 C KEYBOARD INTERFERENCE 880 WRITE(4,12180) 890 CALL HIORTD IF (ANSWER-1) 210,900,850 900 CALL CRAC(IADC(N),IVAL,ERROR) WRITE(OU,13040) IAT(I),IVAL,IADC(N) IF (ERROR.NE.4) GO TO 940 C ADC MALFUNCTION WRITE(4,12200) CALL HIORTD IF (ANSWER-1) 210,940,900 940 N=N+1 IF (N.GT.NADC) N=1 950 CONTINUE WRITE(OU,13080) GO TO 200 C RELATIVE TEST 1000 IF (RSAC(0)) GO TO 1001 IF(CIU.EQ.4) WRITE(4,10130) GO TO 1002 1001 IF(CIU.EQ.4) WRITE(4,10131) 1002 IF(CIU.EQ.4) WRITE(4,10000) READ(CIU,11010) NADC IF (NADC.EQ.99) GO TO 200 IF (NADC.GE.0.AND.NADC.LE.14) GO TO 1010 C ILLEGAL ADC WRITE(4,12090) GO TO 1000 C 1010 IF(CIU.EQ.4) WRITE(4,10140) IF(CIU.EQ.4) WRITE(4,10000) READ(CIU,11010) NDAC IF (NDAC.GE.0.AND.NDAC.LE.11) GO TO 1020 C ILLEGAL DAC WRITE(4,12100) GO TO 1010 C 1020 IF(CIU.EQ.4) WRITE(4,10150) IF(CIU.EQ.4)WRITE(4,10000) READ(CIU,11030) NVHBP IF (NVHBP.GT.0) GO TO 1030 C ILLEGAL NVHBP WRITE(4,12110) GO TO 1020 C 1030 IF (RSAC(0)) GO TO 1031 IF(CIU.EQ.4) WRITE(4,10160) GO TO 1032 1031 IF(CIU.EQ.4)WRITE(4,10161) 1032 IF(CIU.EQ.4) WRITE(4,10000) READ(CIU,11050) YESNO IF (YESNO.EQ.YES) GO TO 1040 IF (YESNO.EQ.NO) GO TO 1050 C YES-NO-MAYBE? WRITE(4,12120) GO TO 1030 C ABSOLUTE ERROR DIFFERENCES 1040 ABSVAL=.TRUE. GO TO 1060 C SIGNED ERROR DIFFERENCES 1050 ABSVAL=.FALSE. C ADC/DAC RELATIVE ERROR TEST C SET ST MODE 1060 CALL SAMO(3,II) C 15 MILLISECOND PAUSE DO 1062 JJ=1,1100 1062 CONTINUE IF (II.EQ.0) GO TO 1065 C MODE FAILED TO SET WRITE(4,12250) PAUSE C MAIN LOOP C HORIZONTAL AXIS 1065 II=NHB-1 JJ=NVB-1 DO 1140 I=1,II C ZERO OUT COUNTERS DO 1070 J=1,JJ 1070 IETAB(J,I)=0 C CALCULATE HORIZONTAL STEP IVAL=HAXIS(I) IDELT=IABS(HAXIS(I+1)-HAXIS(I))/NVHBP IF (IDELT) 1072,1072,1074 C IDELT LESS THAN 1 1072 WRITE(4,12240) IDELT=1 C CONVERSION LOOP 1074 DO 1140 M=1,NVHBP IVAL=IVAL+IDELT CALL LTDA(NDAC,IVAL,ERROR) 1080 CALL CRAC(NADC,IVALT,ERROR) IF (ERROR.NE.4) GO TO 1120 C ADC MALFUNCTION WRITE (4,12200) CALL HIORTD IF (ANSWER-1) 210,1140,1080 C CALCULATE AND TABULATE RELATIVE ERROR 1120 IDIF=FLOAT(IVAL-IVALT)/13.1072 IF (ABSVAL) IDIF=IABS(IDIF) DO 1130 J=2,NVB IF (IDIF.LT.VAXIS(J)) GO TO 1130 IETAB(J-1,I)=IETAB(J-1,I)+1 GO TO 1140 1130 CONTINUE 1140 CONTINUE C OUTPUT RELATIVE TEST RESULTS WRITE (OU,13010) NADC,NDAC WRITE (OU,13020) WRITE(OU,13030) NVHBP IF (ABSVAL) WRITE(OU,13090) WRITE (OU,13050) IVAXIS(1) M=NHB-1 N=NVB-1 DO 1150 I=1,N WRITE (OU,13060) (IETAB(I,J),J=1,M) 1150 WRITE (OU,13050) IVAXIS(I+1) WRITE (OU,13070) (IHAXIS(I),I=1,NHB) WRITE(OU,13080) GO TO 1000 10000 FORMAT(1H ,1H$) 10010 FORMAT(1H1,5HHIORT) 10020 FORMAT(1H ,76HTYPE CONTINUATION DIRECTIVE- 0-TERMINATE, 1-ABSOLUTE 1, 2-RELATIVE,3-CHANGE IU) 10021 FORMAT(1H ,13HCONTINUATION-) 10030 FORMAT(1H ,68HTYPE OUTPUT DIRECTIVE- 1-TTY, 2-PAPER TAPE, 3-DECTAP 1E,4-LINE PRINTER) 10031 FORMAT(1H ,3HOU-) 10040 FORMAT(1H ,17HMOUNT OUTPUT TAPE) 10050 FORMAT(1H ,42HTYPE HANDLER NUMBER, FILE NAME- NFILENMEXT) 10051 FORMAT(1H ,11HNFILENMEXT-) 10060 FORMAT(1H ,56HTYPE TEST DIRECTIVE- 0-RESTART, 1-STD. DATA, 2-READ 1DATA) 10061 FORMAT(1H ,15HTEST DIRECTIVE-) 10070 FORMAT(1H ,66HTYPE INPUT DIRECTIVE- 1-TTY, 2-PAPER TAPE, 3-DECTAPE 1,4-CARD READER) 10071 FORMAT(1H ,3HIU-) 10080 FORMAT(1H ,16HMOUNT INPUT TAPE) 10090 FORMAT(1H ,21HNUMBER OF VALUES(I2)=) 10100 FORMAT(1H ,21HVERTICAL BREAKPOINTS-) 10105 FORMAT(1H ,8HNVB(I2)=) 10110 FORMAT(1H ,23HHORIZONTAL BREAKPOINTS-) 10115 FORMAT(1H ,8HNHB(I2)=) 10120 FORMAT(1H ,41HTYPE ADC CHANNELS 1 PER LINE, 99 TO STOP-) 10121 FORMAT(1H ,11H1 PER LINE-) 10130 FORMAT(1H ,23HTYPE ADC OR 99 TO QUIT-) 10131 FORMAT(1H ,4HADC=) 10140 FORMAT(1H ,4HDAC=) 10150 FORMAT(1H ,10HNVHBP(I6)=) 10160 FORMAT(1H ,16HABSOLUTE VALUES-) 10161 FORMAT(1H ,7HABSVAL-) 10170 FORMAT(1H ,13H(12I6 FORMAT)) 10180 FORMAT(1H ,15H(12F6.4 FORMAT)) C 11000 FORMAT(I1) 11010 FORMAT(I2) 11030 FORMAT(I6) 11040 FORMAT(I1,A5,A4) 11050 FORMAT(A3) 11060 FORMAT(12I6) 11070 FORMAT(12F6.4) C 12000 FORMAT(1H ,51HCONSOLE DID NOT SELECT- RETURN TO KEYBOARD MONITOR) 12010 FORMAT(1H ,32H**ILLEGAL CONTINUATION DIRECTIVE) 12020 FORMAT(1H ,12H**ILLEGAL IU) 12030 FORMAT(1H ,12H**ILLEGAL OU) 12040 FORMAT(1H ,24H**ILLEGAL TEST DIRECTIVE) 12045 FORMAT(1H ,39H**IU AND OU CANNOT BOTH BE THE DCT-2000) 12050 FORMAT(1H ,12H**ILLEGAL NT) 12060 FORMAT(1H ,13H**ILLEGAL NVB) 12070 FORMAT(1H ,13H**ILLEGAL NHB) 12090 FORMAT(1H ,13H**ILLEGAL ADC) 12100 FORMAT(1H ,13H**ILLEGAL DAC) 12110 FORMAT(1H ,15H**ILLEGAL NVHBP) 12120 FORMAT(1H ,19H**SPECIFY YES OR NO) 12130 FORMAT(1H ,35HBREAKPOINTS NOT IN ASCENDING ORDER.) 12140 FORMAT(1H ,15HSHALL I REORDER) 12150 FORMAT(1H ,2HOK) 12160 FORMAT(1H ,I2,22H REDUNDANT BREAKPOINTS) 12170 FORMAT(1H ,19H//RCDAC MALFUNCTION) 12180 FORMAT(1H ,34H//KEYBOARD INTERFERENCE WITH RCDAC) 12200 FORMAT(1H ,17H//ADC MALFUNCTION) 12220 FORMAT(1H ,72HADC LIST FULL- TYPE 0 TO RETYPE LIST, GREATER THAN 0 1 TO BEGIN ABS. TEST-) 12230 FORMAT(1H ,6H//IAT(,I3,29H) LESS THAN 0- VALUE IGNORED.) 12240 FORMAT(1H ,38H//NVHBP TOO LARGE - STEP OF 1 ASSUMED.) 12250 FORMAT(1H ,57H//ST MODE FAILED TO SET - SET IT MANUALLY AND TYPE C 1TRL P) C 13000 FORMAT(1H0,23HADC ABSOLUTE ERROR TEST/22H DAC ADC CHANNEL) 13010 FORMAT(1H0,4HADC ,I2,5H/DAC ,I2,20H RELATIVE ERROR TEST) 13020 FORMAT(1H0,53HABCISSA IS CONVERSION RANGE - ORDINATE IS ERROR RANG 1E) 13030 FORMAT(1H0,I6,33H TEST VALUES PER CONVERSION RANGE) 13040 FORMAT(1H ,I6,1H ,I6,4X,I2) 13050 FORMAT(1H ,I5) 13060 FORMAT(1H ,1X,11I6) 13070 FORMAT(1H ,12I6) 13080 FORMAT(1H1) 13090 FORMAT(1H0,38HERRORS ARE COMPUTED AS ABSOLUTE VALUES) END