FTN4,L SUBROUTINE SFMWC(IUNIT,IFUN,ICWFM,MODE,IRES,IRATE), +09580-16449 REV.2001 791023 C C------------------------------------- C C HP 5342A MICROWAVE FREQUENCY COUNTER C C RELOCATABLE 09580-16449 C SOURCE 09580-18449 C C T. KONDO 790727 C BOB RICHARDS 791023 C C------------------------------------ C C !=================================================! C ! ! C ! (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979 ! C ! ALL RIGHTS RESERVED ! C ! ! C ! NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, ! C ! REPRODUCED OR TRANSLATED INTO ANOTHER PROGRAM ! C ! LANGUAGE WITHOUT THE PRIOR WRITTEN CONSENT OF ! C ! THE HEWLETT-PACKARD COMPANY. ! C ! ! C !-------------------------------------------------! C ! ! C ! TEST SYSTEM SOURCE SOFTWARE IS THE PROPRIETARY ! C ! MATERIAL OF THE HEWLETT-PACKARD COMPANY. ! C ! ! C ! THIS SOURCE DATA SHALL BE USED SOLELY IN ! C ! CONJUNCTION WITH ELECTRONIC COMPUTER SYSTEMS ! C ! SUPPLIED TO THE USER BY HEWLETT-PACKARD. ! C ! ! C ! THIS PROPRIETARY DATA SHALL NOT BE COPIED OR ! C ! OTHERWISE REPRODUCED WITHOUT THE PRIOR WRITTEN ! C ! CONSENT OF HEWLETT-PACKARD, EXCEPT THAT ONE ! C ! COPY MAY BE MADE AND RETAINED BY THE USER FOR ! C ! ARCHIVE PURPOSES. ! C ! ! C ! THE USER SHALL NOT DISCLOSE THIS DATA TO ANY ! C ! THIRD PARTIES WITHOUT THE PRIOR WRITTEN CONSENT ! C ! OF HEWLETT-PACKARD. IN ADDITION, THE USER SHALL ! C ! USE AT LEAST THE SAME CARE AND SAFEGUARDS TO ! C ! PROTECT THIS DATA FROM UNAUTHORIZED USE OR ! C ! DISCLOSURE AS THE USER USES TO PROTECT ITS OWN ! C ! PROPRIETARY DATA. ! C ! ! C !=================================================! C C GENERAL: C -------- C C THE FOLLOWING DEVICES ARE USED C TO PROGRAM THE HP 5342A MICROWAVE FREQUENCY COUNTER C C HARDWARE REQUIRED: C ------------------ C A. HP 5342A C B. HP59310 BUS INTERFACE KIT. C C JUMPER POSITION: C SW1-1 - 1 C SW1-2 TO SW1-8 - 0 C SW2-1 - 0 C SW2-2 - 0 C SW2-3 - 0 C SW2-4 - 0 C SW2-5 - 1 C SW2-6 - REN C SW2-7 - ICF C SW2-8 - CNX C C C. HP 21XX SERIES COMPUTER C C BRANCH AND MNEMONIC TABLE ENTRIES: C ---------------------------------- C C SFMWC(I,I,I,I,I,I), OV=XX, ENT=SFMWC, FIL=%SFMWC C OSMWC(I,I,I,R,R), OV=XX, ENT=OSMWC, FIL=%SFMWC C RDMWC(I,RV,RV), OV=XX, ENT=RDMWC, FIL=%SFMWC C C FOR OPTION 002: C RDMWC(I,RV,RV,RV), OV=XX, ENT=RDMWC, FIL=%SFMWC C C C C C------------------------------------ C C SUBROUTINE SFMWC(IUNIT,IFUN,ICWFM,MODE,IRES,IRATE) C C IUNIT = UNIT NUMBER C IFUNC = FUNCTION SELECT C 1 = 10HZ - 500MHZ C 2 = 500MHZ - 18GHZ C 3 = AMPLITUDE - OFF (OPT 002) C 4 = AMPLITUDE - ON (OPT 002) C 5 = CHECK MODE (75MHZ) C 6 = RESET COUNTER C C ICWFM = CW/FM MODE C 1 = CW C 2 = FM C C MODE = AUTO/MANUAL C 1 = AUTO C 2 = MANUAL (1 MHZ - 17999 MHZ) C C IRES = RESOLUTION C 0 = 1 HZ C 1 = 10 HZ C 2 = 100 HZ C 3 = 1 KHZ C 4 = 10 KHZ C 5 = 100 KHZ C 6 = 1 MHZ C C IRATE = SAMPLE RATE C 1 = FRONT PANEL SAMPLE RATE C 2 = HOLD C 3 = FAST SAMPLE (NO DELAY) C 4 = SAMPLE THEN HOLD C C NOTE: THE HPIB BASIC CALL "TRIGR(I)" MUST BE USED C WHEN EVER IRATE = 2. FOR EXAMPLE: C C 10 CALL SFMWC(1,2,1,1,3,2) C 20 WAIT (1000) C 30 LET I = ISN(0) C 40 LET L = LUDV(I,68,1) C 50 CALL TRIGR(L) C 60 CALL RDMWC(1,D1,D2) C 70 PRINT D1,D2 C 80 END C C------------------------------------------------------- C C C SUBROUTINE OSMWC(IUNIT,IFUNC,IOFON,OFFS1,OFFS2) C C IUNIT = UNIT NUMBER C IFUNC = FUNCTION C 1 = FREQUENCY C 2 = AMPLITUDE C C IOFON = OFFSET ON/OFF C 0 = OFF C 1 = ON C 2 = AUTOMATIC OFFSET C 3 = RESET C C OFFS1 = OFFSET VALUE C +- MHZ OR +- DB C OFFS2 = OFFSET VALUE C +- HZ C C C SUBROUTINE RDMWC(IUNIT,DAT1,DAT2,DAT3) C C IUNIT = UNIT NUMBER C DAT1 = MEASURED FREQUENCY (XXXXX.E+6 HZ) C DAT2 = MEASURED FREQUENCY (HZ) C DAT3 = AMPLITUDE C C C ----------------------------------- DIMENSION IERMS(5) DATA IDTN / 68 / DATA IERMS / 10,5,2HSF,2HMW,2HC / C IERMS=10 C C FIND STATION AND LU #'S C ISTN = STATION # C LU1 = HP 5342A LU C LUIB = HPIB LU C ISTN=ISN(DUMMY) LU1=LUDV(ISTN,IDTN,IUNIT) LUIB=IBLU0(LU1) IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 C C CALL X SUB C CALL XFMWC(LU1,LUIB,IERMS,IUNIT,IFUN,ICWFM,MODE,IRES,IRATE) IF(IERMS)800,20,800 C C EXIT C 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C--------------------------------------------- C SUBROUTINE OSMWC(IUNIT,IFUN,IOFON,OFF1,OFF2), +09580-16449 REV.2001 791023 DIMENSION IERMS(5) DATA IDTN / 68 / DATA IERMS / 10,5,2HOS,2HMW,2HC / C IERMS=10 C C FIND STATION AND LU #'S C ISTN = STATION # C LU1 = HP 5342A LU C LUIB = HPIB LU C ISTN=ISN(DUMMY) LU1=LUDV(ISTN,IDTN,IUNIT) LUIB=IBLU0(LU1) IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 C C CALL X SUB C CALL XSMWC(LU1,LUIB,IERMS,IUNIT,IFUN,IOFON,OFF1,OFF2) IF(IERMS)800,20,800 C C EXIT C 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C--------------------------------------------- C SUBROUTINE RDMWC(IUNIT,DAT1,DAT2,DAT3), +9580-16449 REV.2001 791023 DIMENSION IERMS(5) DATA IDTN / 68 / DATA IERMS / 10,5,2HRD,2HMW,2HC / C IERMS=10 C C FIND STATION AND LU #'S C ISTN = STATION # C LU1 = HP 5342A LU C LUIB = HPIB LU C ISTN=ISN(DUMMY) LU1=LUDV(ISTN,IDTN,IUNIT) LUIB=IBLU0(LU1) IF(LU1 .LE. 0 .OR. LUIB .LE. 0)GOTO 800 C C CALL X SUB C CALL XDMWC(LU1,LUIB,IERMS,DAT1,DAT2) IF(IERMS)800,20,800 C C EXIT C 20 RETURN C C ERROR EXIT C 800 CALL ERROR(IERMS,IERMS(2)) RETURN END C C--------------------------------------------- C SUBROUTINE XFMWC(LU1,LUIB,IERMS,IUNIT,IFUNC,ICWFM,MODE,IRES, +IRATE),09580-16449 REV.2001 791023 DIMENSION IERMS(5) DIMENSION IREG(2),IOBUF(10),NMBR(5) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) C C--------------------------------------------- C C C THE PARAMETERS IN THE CALLING SEGUENCE HAVE THE FOLLOWING C MEANINGS. C C LUIB = LU # OF HPIB. C LU1 = LU # OF HP5342A C C IERMS IS A FIVE WORD ARRAY WITH IERR(1) CONTAINING C THE ERROR CODE. C C 0 = NO ERROR C 1 = PARAMETER ERROR C C ERROR MESSAGES THAT PERTAIN TO THE HPIB. C C 9 = I/O CALL REJECTED C 10 = LUIB OR LU1 = 0 C 12 = I/O DEVICE TIME OUT C 13 = IFC DETECTED DURING I/O REQUEST C 14 = SRQ ABORTED C 15 = NON-EXISTENT ALARM PROGRAM C 16 = ILLEGAL CONTROL REQUEST C 17 = EQT EXTENSION AREA FULL C C IERMS(2) = ERROR MNEMONIC CHARACTER COUNT C IERMS(3) TO IERMS(5) = ERROR MNEMONIC C C C C CHECK PARAMETERS C IF(IFUNC.LT.1.OR.IFUNC.GT.6)GOTO 9900 IF(ICWFM.LT.1.OR.ICWFM.GT.2)GOTO 9900 IF(MODE.LT.0.OR.MODE.GT.17999)GOTO 9900 IF(IRES.LT.0.OR.IRES.GT.6)GOTO 9900 IF(IRATE.LT.1.OR.IRATE.GT.4)GOTO 9900 C IF(IFUNC.NE.6)GOTO 110 IOBUF = 2HRE NCHAR = 1 GOTO 2000 C 110 IOBUF = 2HAM IF(IFUNC.EQ.3.OR.IFUNC.EQ.4)GO TO 130 IF(IFUNC.EQ.5)IOBUF = 2HSR IF(IFUNC.EQ.1.AND.ICWFM.EQ.1)IOBUF = 2HLC IF(IFUNC.EQ.2.AND.ICWFM.EQ.1)IOBUF = 2HHC IF(IFUNC.EQ.1.AND.ICWFM.EQ.2)IOBUF = 2HLF IF(IFUNC.EQ.2.AND.ICWFM.EQ.2)IOBUF = 2HHF C IF(IFUNC.EQ.1.OR.IFUNC.EQ.5)GOTO 120 IOBUF(2) = 2HAU IF(MODE.NE.0)GOTO 150 C IOBUF(3) = 2HSR IOBUF(4) = IOR((IRES+63B)*256,124B) IOBUF(5) = ((IRATE-1)+60B)*256 NCHAR = -9 GOTO 2000 C C CHECK MODE C 120 IOBUF(2) = 30400B NCHAR = -3 GOTO 2000 C C AMPLITUDE (OPT 002) OFF/ON C 130 IOBUF(2) = (60B - (IFUNC-3)) * 256 NCHAR = -3 GOTO 2000 C C MANUAL CENTER FREQUENCY C 150 IOBUF(2) = 2HSM IF(IFUNC.EQ.1)GOTO 9900 C IFREQ = MODE C C CONVERT TO ASCII C CALL CNUMD(IFREQ,NMBR) C C FIND NUMBER OF DIGITS C NXM = 6 DO 170 I = 1 , 3 IDU = IAND(NMBR(I),177400B) IDL = IAND(NMBR(I),377B) IF(IDU.EQ.20000B)NXM = NXM - 1 IF(IDL.EQ.40B)NXM = NXM - 1 170 CONTINUE C IF(NXM.GT.4)GOTO 200 IF(NXM.LT.3)NMBR = NMBR(3) IF(NXM.LT.3)NMBR(2) = 0 IF(NXM.LT.3)GOTO 200 NMBR = NMBR(2) NMBR(2) = NMBR(3) NMBR(3) = 0 C 200 IFLG = 1 NMBR(4) = 0 IF(NXM.EQ.2.OR.NXM.EQ.4)IFLG = 0 C INX = 3 IDX = 1 IF(IFLG.NE.0)IOBUF(INX) = IAND(NMBR,377B) * 256 IF(IFLG.EQ.0)IOBUF(INX) = NMBR 210 CONTINUE IF(NMBR(IDX+1).EQ.0)GOTO 250 IDX = IDX + 1 IF(IDX.GT.3)GOTO 250 IF(IFLG.NE.0)NMBR = IAND(NMBR(IDX),177400B) / 256 IF(IFLG.NE.0)IOBUF(INX) = IOR(IOBUF(INX),NMBR) INX = INX + 1 IF(IFLG.NE.0)IOBUF(INX) = IAND(NMBR(IDX),377B) * 256 IF(IFLG.EQ.0)IOBUF(INX) = NMBR(IDX) GOTO 210 C 250 CONTINUE IF(IFLG.NE.0)IOBUF(INX) = IOR(IOBUF(INX),105B) INX = INX + 1 IF(IFLG.EQ.0)IOBUF(INX) = 2HES IF(IFLG.NE.0)IOBUF(INX) = 2HSR INX = INX + 1 C C RESOLUTION C IF(IFLG.EQ.0)IOBUF(INX) = IOR(51000B,63B+IRES) IF(IFLG.NE.0)IOBUF(INX) = IOR((63B+IRES)*256,124B) INX = INX + 1 C C SAMPLE RATE C IF(IFLG.EQ.0)IOBUF(INX) = IOR(52000B,IRATE+57B) IF(IFLG.NE.0)IOBUF(INX) = (IRATE + 57B) * 256 NCHAR = INX IF(IFLG.EQ.0)GOTO 2000 C NCHAR = 2*(INX-1) + 1 NCHAR = -NCHAR C C C C REMOTE ENABLE C 2000 CALL EXEC(100003B,1600B+LUIB) GOTO 9000 70 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C SEND OUTPUT BUFFER C CALL REIO(100002B,LU1,IOBUF(1),NCHAR,IDUMY,0) GOTO 9000 71 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C C RETURN C IERMS=0 RETURN C C ERROR EXIT C 8500 IERMS=IAND(IA,377B)+11 GOTO 8000 9000 IERMS=9 GOTO 8000 9900 IERMS = 1 8000 IERMS(2)=5 IERMS(3)=2HSF IERMS(4)=2HMW IERMS(5)=2HC RETURN END C C SUBROUTINE XSMWC(LU1,LUIB,IERMS,IUNIT,IFUNC,IOFON,OFFS1,OFFS2), + 9580-16449 REV.2001 791023 C C IUNIT = UNIT NUMBER C IFUNC = FUNCTION C 1 = FREQUENCY C 2 = AMPLITUDE C C IOFON = OFFSET ON/OFF C 0 = OFF C 1 = ON C 2 = AUTOMATIC OFFSET C 3 = RESET C C OFFS1 = OFFSET VALUE C +- MHZ OR +- DB C OFFS2 = OFFSET VALUE C +- HZ C DIMENSION IERMS(5) DIMENSION IREG(2),IBUFR(20),NMBR(6),IAR(6) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) C C CHECK PARAMETERS C IF(IFUNC.LT.1.OR.IFUNC.GT.2)GOTO 9900 IF(IOFON.LT.0.OR.IOFON.GT.3)GOTO 9900 C IBUFR = 2HRE INX = 1 IF(IOFON.EQ.3)GOTO 2000 C C OFFSET ON/OFF C IBUFR = 2HOM IF(IFUNC.EQ.2)IBUFR = 2HOB IBUFR(2) = 30000B INX = 2 IF(IOFON.EQ.0)GOTO 2000 C C AUTO OFFSET C IBUFR = 2HSO IF(IFUNC.EQ.1.AND.IOFON.EQ.2)IBUFR(2) = 2HMB IF(IFUNC.EQ.2.AND.IOFON.EQ.2)IBUFR(2) = 2HBB IF(IOFON.EQ.2)GOTO 2000 C C SET FREQ/AMPL OFFSET C IBUFR(2) = 2H1S IF(IFUNC.EQ.1)IBUFR(3) = 2HOM IF(IFUNC.EQ.2)IBUFR(3) = 2HOB INX = 4 C C SET OFFSET VALUE C VAL1 = OFFS1 IF(VAL1.LT.0.0)VAL1 = -OFFS1 IFLG = 0 IF(IFUNC.EQ.2)GOTO 300 C C FREQUENCY C VAL2 = OFFS2 IF(VAL2.LT.0.0)VAL2 = -OFFS2 IF(VAL1.GT.99999.)GOTO 9900 IF(VAL2.GT.999999.)GOTO 9900 ISIGN = 0 IF(OFFS1.LT.0.0.OR.OFFS2.LT.0.0)ISIGN = 1 INX = 4 IF(ISIGN.EQ.0)IBUFR(INX) = 20000B IF(ISIGN.EQ.1)IBUFR(INX) = 26400B C C CONVERT 'OFFS1' MHZ VALUE TO 5 ASCII DIGITS C IF(VAL1.EQ.0.0)GOTO 200 CALL GENF2(VAL1,NMBR) IF(NMBR.EQ.-1)GOTO 9900 C C FIND NUMBER OF DIGITS C NXM = 2 IF(NMBR.EQ.3.OR.NMBR.EQ.4)NXM = 3 IF(NMBR.LT.3)NXM = 4 IF(ISIGN.EQ.0)GOTO 180 C DO 175 I=NXM,4 IVAH = IAND(NMBR(I),177400B) / 256 IVLO = IAND(NMBR(I),377B) * 256 IBUFR(INX) = IOR(IBUFR(INX),IVAH) INX = INX + 1 175 IBUFR(INX) = IVLO C GOTO 200 C 180 CONTINUE DO 190 J = NXM, 4 IBUFR(INX) = NMBR(J) 190 INX = INX + 1 C IBUFR(INX) =27000B IF(VAL2.EQ.0.0)GOTO 2000 IFLG = 1 GOTO 210 C C C CONVERT 'OFFS2' HZ VALUE TO 6 ASCII DIGITS C 200 IF(VAL2.EQ.0.0)GOTO 2000 C C INSERT DECIMAL POINT C IBUFR(INX) = IOR(IBUFR(INX),56B) INX = INX + 1 IFLG = 0 210 CALL GENF2(VAL2,NMBR) IF(NMBR.EQ.-1)GOTO 9900 C C IF(IFLG.EQ.0)GOTO 260 C DO 250 J = 2 , 4 IVAH = IAND(NMBR(J),177400B) / 256 IVLO = IAND(NMBR(J),377B) * 256 IBUFR(INX) = IOR(IBUFR(INX),IVAH) INX = INX + 1 250 IBUFR(INX) = IVLO GOTO 2000 C 260 CONTINUE DO 270 J = 2, 4 IBUFR(INX) = NMBR(J) 270 INX = INX + 1 C INX = INX - 1 GOTO 2000 C C AMPLITUDE C 300 IF(VAL1.GT.99.9)GOTO 9900 ISIGN = 0 IF(OFFS1.LT.0.0)ISIGN = 1 IF(ISIGN.EQ.0)IBUFR(INX) = 25400B IF(ISIGN.EQ.1)IBUFR(INX) = 26400B C C CONVERT AMPLITUDE OFFSET VALUE TO ASCII DIGITS C IVAL = VAL1 VAL2 = IVAL CALL GENF2(VAL2,NMBR) IF(NMBR.EQ.-1)GOTO 9900 C NVAL = (VAL1-VAL2) * 10.0 IVHI = IAND(NMBR(4),177400B) / 256 IVLO = IAND(NMBR(4),377B) IF(IVAL.LT.10)GOTO 310 C IBUFR(INX) = IOR(IBUFR(INX),IVHI) INX = INX + 1 IBUFR(INX) = IOR(IVLO*256,56B) INX = INX + 1 IBUFR(INX) = (60B+NVAL) * 256 GOTO 2000 C 310 CONTINUE IF(IVLO.EQ.60B)IBUFR(INX) = IOR(IBUFR(INX),56B) IF(IVLO.EQ.60B)GOTO 320 IBUFR(INX) = IOR(IBUFR(INX),IVLO) INX = INX + 1 IBUFR(INX) = IOR(27000B,60B+NVAL) GOTO 2000 C 320 INX = INX + 1 IBUFR(INX) = (NVAL+60B)*256 C C REMOTE ENABLE C 2000 CALL EXEC(100003B,1600B+LUIB) GOTO 9000 70 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C SEND OUTPUT BUFFER C IVAL = IAND(IBUFR(INX),377B) NUM = INX IF(IVAL.EQ.0)NUM = -(2 * INX - 1) C CALL REIO(100002B,LU1,IBUFR(1),NUM,IDUMY,0) GOTO 9000 71 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C RETURN C IERMS=0 RETURN C C ERROR EXIT C 8500 IERMS=IAND(IA,377B)+11 GOTO 8000 9000 IERMS=9 GOTO 8000 9900 IERMS = 1 8000 IERMS(2)=5 IERMS(3)=2HOS IERMS(4)=2HMW IERMS(5)=2HC RETURN END C C SUBROUTINE XDMWC(LU1,LUIB,IERMS,DAT1,DAT2,DAT3), +09580-16449 REV.2001 791023 C DIMENSION IERMS(5),IREG(2),IOBUF(4) DIMENSION IBUF(20),IVAL(6) EQUIVALENCE (REG,IREG,IA),(IREG(2),IB) DATA IOBUF /2HST,2H1 / C C REMOTE ENABLE C 2000 CALL EXEC(100003B,1600B+LUIB) GOTO 9000 70 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C SEND OUTPUT BUFFER C INUM = -3 CALL REIO(100002B,LU1,IOBUF(1),INUM,IDUMY,0) GOTO 9000 71 CALL ABREG(IA,IB) IF(IB .LT. 0) GOTO 8500 C C READ DATA C CALL REIO(100001B,LU1,IBUF,18,IDUMY,0) GOTO 9000 72 CALL ABREG(IA,IB) IF(IB.LT.0)GOTO 8500 C C CHECK POSITION OF BUFFR C IFLD = IAND(IBUF,377B) ISTRT = 2 IF(IFLD.EQ.40B)ISTRT = 3 C IDX = 1 DO 2500 I = ISTRT, 5 IDX = IDX + 1 IVAL(IDX) = IBUF(I) IF(ISTRT.EQ.3)GOTO 2500 IVAL(IDX) = IAND(IVAL(IDX),377B) * 256 LCHR = IAND(IBUF(I+1),177400B) / 256 IVAL(IDX) = IOR(IVAL(IDX),LCHR) 2500 CONTINUE C C 2520 IVAL(5) = 2HE+ IVAL(6) = 2H06 IVAL = 10 LDG = IAND(IVAL(2),177400B) / 256 IF(LDG.NE.40B)GOTO 2530 LDG = IAND(IVAL(2),377B) IVAL(2) = IOR(25400B,LDG) 2530 IREG = A2F(IVAL,1,IVAL,DAT1) IF(IREG.LT.0)GOTO 8400 C C CONVERT HZ C IDX = 1 DO 2550 I = 6 , 9 IDX = IDX + 1 2550 IVAL(IDX) = IBUF(I) C IF(ISTRT.EQ.2)GOTO 2570 C DO 2560 I = 2 , 4 IVAL(I) = IAND(IVAL(I),377B) * 256 LDG = IAND(IVAL(I+1),177400B) / 256 2560 IVAL(I) = IOR(IVAL(I),LDG) C 2570 IVAL = 6 IVAL(5) = 2H IREG = A2F(IVAL,1,IVAL,DAT2) IF(IREG.LT.0)GOTO 8400 DAT3 = 0.0 IF(IB.LT.12)GOTO 5000 C C AMPLITUDE (OPTION 002) C IDX = 1 IF(ISTRT.EQ.3)GOTO 2590 C DO 2580 I=12, 15 IDX = IDX + 1 IVAL(IDX) = IAND(IBUF(I),377B) * 256 LDG = IAND(IBUF(I+1),177400B) / 256 2580 IVAL(INX) = IOR(IVAL(IDX),LDG) C GOTO 2700 C 2590 CONTINUE C DO 2595 I=13, 16 IDX = IDX + 1 2595 IVAL(IDX) = IBUF(I) C C 2700 IVAL = 8 IREG = A2F(IVAL,1,IVAL,DAT3) IF(IREG.LT.0)GOTO 8400 C C RETURN C 5000 IERMS=0 RETURN C C ERROR EXIT C 8400 IERMS = 4 GOTO 8000 C 8500 IERMS=IAND(IA,377B)+11 GOTO 8000 9000 IERMS=9 8000 IERMS(2)=5 IERMS(3)=2HRD IERMS(4)=2HMW IERMS(5)=2HC RETURN END C SUBROUTINE GENF2(FNUM,IFS),09580-16449 REV.2001 791023 C C C ON ENTRY, FNUM CONTAINS A FLOATING POINT NUMBER IN THE C THE RANGE 0.0 - 999999.0 (ANY F.P. FORMAT ACCEPTABLE TO C SUBROUTINE "F2A"). THE NUMBER MUST BE POSITIVE. C C ON RETURN, IFS(2-4) CONTAINS PACKED ASCII WITH LEADING C ZEROES, NO DECIMAL POINT, NO "E". IFS(5-6) CONTAINS C ASCII BLANKS (20040B). C C IFS(1) = -1 (INTEGER FORMAT) FOR ERROR RETURN. C C C DIMENSION IFS(6),JFS(10) C C C IF (FNUM .GE. 0.0 .OR. FNUM .LT. 1E6) GO TO 10 IFS(1) = -1 RETURN C C C 10 DO 100 I=1,6 IFS(I) = 20040B 100 CONTINUE C C CONVERT TO ASCII C C CALL F2A(FNUM,IFS(1)) IF(IAND(IFS(2),177400B) .NE. 37400B) GO TO 110 IFS(1) = -1 RETURN C C FIND "E" IF PRESENT C 110 IEFLG = 0 DO 150 I=2,6 IF (IAND(IFS(I),177400B) .EQ. 42400B) GO TO 130 IF (IAND(IFS(I),377B) .EQ. 105B) GO TO 120 GO TO 150 120 IENUM = (IAND(IFS(I+1),177400B))/256 GO TO 140 130 IF (I .EQ. 2) IEFLG = 1 IENUM = IAND(IFS(I),377B) 140 IENUM = IENUM - 60B GO TO 160 150 CONTINUE IENUM = 0 C C IENUM CONTAINS INTEGER VALUE OF "E" (0-6). C NOW UNPACK CHARACTERS. C 160 DO 200 I=1,5 N=(I*2)-1 JFS(N) = (IAND(IFS(I+1),177400B))/256 JFS(N) = IAND(JFS(N),377B) JFS(N+1) = IAND(IFS(I+1),377B) 200 CONTINUE IF (IEFLG .NE. 1) GO TO 210 JFS(1) = 61B JFS(2) = 40B IENUM = IENUM - 1 C C LOCATE THE DECIMAL POINT C 210 DO 220 ID=1,10 IF (JFS(ID) .EQ. 56B .OR. JFS(ID) .EQ. 40B) GO TO 230 IF (JFS(ID) .EQ. 105B) GO TO 225 220 CONTINUE IFS(1) = -1 RETURN C C VALID NUMBER BUT NO DECIMAL POINT C 225 JFS(ID+1) = 60B C C DELETE DECIMAL POINT, ADJUST E VALUE C 230 DO 250 I=ID,9 JFS(I) = JFS(I+1) IF (JFS(I) .EQ. 105B .OR. JFS(I) .EQ.40B) GO TO 240 GO TO 250 240 DO 245 J=I,10 JFS(J) = 60B 245 CONTINUE GO TO 260 250 CONTINUE C C SHIFT CHARACTERS AS NECESSARY C 260 ISHFT = 7 - (ID+IENUM) IF (ISHFT .EQ. 0) GO TO 300 DO 280 I=10,ISHFT+1,-1 JFS(I) = JFS(I-ISHFT) 280 CONTINUE C C ADD LEADING ZEROES C DO 290 I=1,ISHFT JFS(I) = 60B 290 CONTINUE C C PACK CHARACTERS C 300 DO 310 I=1,3 J = (I*2)-1 JFS(J) = JFS(J)*256 JFS(J) = IAND(JFS(J),177400B) JFS(J+1) = IAND(JFS(J+1),377B) IFS(I+1) = JFS(J)+JFS(J+1) 310 CONTINUE C C LOAD TRAILING BLANKS C DO 320 I=5,6 IFS(I) = 20040B 320 CONTINUE C C C RETURN END END$