FTN4,L
      SUBROUTINE HFGSU(IUNIT,FKZ,FHZ,AMP,FAZE,IZ),
     +09580-16369  1926  790302 
C 
C-------------------------------------
C 
C  HP 3335A SYNTHESIZER GENERATOR 
C      (HFGSU)
C 
C  RELOCATABLE   09580-16369
C  SOURCE        09580-18369
C 
C  R.UNTALAN 780917 
C  R.UNTALAN 790302             
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 PROPRIETY    !
C  ! MATERIAL OF THE HEWLETT-PACKARD COMPANY.        !
C  !                                                 !
C  ! THIS SOURCE DATA SHALL BE USED SOLELY IN        !
C  ! CONJUCTION WITH ELECTRONIC COMPUTER SYSTEMS     !
C  ! SUPPLIED TO THE USER BY HEWLETT-PACKARD.        !
C  !                                                 !
C  ! THIS PROPRIETY 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 DEVICE SUBROUTINES ARE USED
C   TO PROGRAM THE HP3335A SYNTHESIZERGENERATOR.
C 
C  HARDWARE REQUIRED: 
C  ------------------ 
C    A. HP3325A PROGRAMMABLE PULSE GENERATOR. 
C    B. HP59310  BUSS 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    HFGSU(I,R,R,R,R,I), OV=XX,   ENT=HFGSU,   FIL=%HFGSU 
C    HFWID(I,R,R,I),    OV=XX,   ENT=HFWID,  FIL=%HFGSU 
C 
C  CONFIGURATION TABLE ENTRIES: 
C  ---------------------------- 
C 
C 
C    R  53,1,10 
C    U1 
C        0    ENTER 0 FOR STANDARD UNIT  OR  ENTER OPTION NUMBER
C        0    TEMPORARY STORAGE FOR IMPEDANCE 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C        0  TEMPORARY STORAGE FOR FREQUENCY 
C 
C 
C 
C 
C------------------------------------ 
C 
C  HFGSU(IUNIT,FKZ,FHZ,AMP,FAZE,IZ) 
C 
C    WHERE: 
C 
C       IUNIT = UNIT #
C 
C 
C       FKZ = FREQUENCY IN KILOHERTZ  (NOTE: TOTAL FREQUENCY = FKZ+FHZ) 
C 
C              0 KHZ   TO   MAXIMUM 
C 
C 
C           WHERE : MAXIMUM  DEPENDS ON THE IMPEDANCE SELECTED. 
C                   SEE FREQUENCY RANGES BELOW. 
C 
C 
C 
C       FHZ=FREQUENCY IN HERTZ
C 
C             0 HZ  TO  999,999 HZ
C             RESOLUTION OF .001HZ
C 
C  **NOTE: TOTAL FREQUENCY SETTING IS EQUAL TO FKZ+FHZ
C 
C     MINIMUM VALUE IS DETERMINE ON THE OPTION AND THE IMPEDANCE
C     SELECTED. 
C 
C    FREQUECY RANGE ARE AS FOLLOWS: 
C    =============================
C 
C    50 OHM AND 75 OHM : 200HZ  TO  80.999 999 999 MHZ
C 
C    124 OHM : 10KHZ  TO  10 MHZ
C 
C    135 OHM AND 150 OHM : 10KHZ  TO  2 MHZ 
C 
C 
C     AMP = AMPLITUDE 
C          SEE TABLE BELOW FOR AMPLITUDE RANGES.
C 
C     AMPLITUDE RANGES ARE AS FOLLOWS 
C     =============================== 
C 
C     50 OHM : +13.01 DBM  TO  -86.98 DBM 
C 
C     75 OHM : +11.25 DBM  TO  -88.74 DBM 
C 
C     124 OHM : +11.25 DBM  TO  -88.74 DBM
C 
C     135 OHM : +11.25 DBM  TO  -88.74 DBM
C 
C     150 OHM : +11.25 DBM  TO  -88.84 DBM
C 
C 
C 
C 
C   FAZE= PHASE SEETING 
C 
C      0 TO 360 DEGREES   WITH  .001 DEGREE RESOLUTION
C 
C 
C     IZ =  IMPEDANCE 
C 
C        0 = 50 OHM 
C        1 = 75 OHM 
C        2 = 124 OHM
C        3 = 135 OHM
C        4 = 150 OHM
C 
C 
C   ALTHOUGH THE IMPEDANCE CANNOT BE REMOTELY PROGRAMED,
C   THE IMPEDANCE SELECT WILL PREVENT THE OPERATOR FROM 
C   PROGRAMMING AN AMPLITUDE OR FREQUENCY THAT IS OUTSIDE 
C   THE RANGE OF THE OUTPUT IMPEDANCE SELECTED. 
C 
C 
C   THE OPERATOR SHOULD MAKE SURE THAT THE SELECTED IMPEDANCE 
C   MATCHES THE INSTRUMENT SELECTED IMPEDANCE BY THE FRONT PANEL
C   SWITCH. 
C 
C 
C------------------------------------ 
      DIMENSION IERMS(5)
      DATA IDTN / 53 /
      DATA IERMS / 10,5,2HHF,2HGE,2HN  /
C 
      IERMS=10
C 
C  FIND STATION AND LU #'S
C   ISTN = STATION #
C   LU1 = HP 3335A LU 
C   LUIB = 59310 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 XFGSU(LU1,LUIB,IERMS,IUNIT,FKZ,FHZ,AMP,FAZE,IZ)
      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 XFGSU(LU1,LUIB,IERR,IU,FKZ,FHZ,AMP,FAZE,IZ), 
     +09580-16369  1926  790302 
C---------------------------------------------
C 
C 
      DIMENSION IERMS(5),IERR(5),IFREQ(20),IREG(2)
      DIMENSION IOBUF(5),IBUF(10),IFBUF(5)
      EQUIVALENCE (REG,IREG,IA),(IREG(2),IB)
      EQUIVALENCE (IFREQ(9),IOBUF(1)),(IFREQ(16),IFBUF(1))
C 
C 
      IERR=0
C 
C 
C  ESTABLISH MIN. AND MAX. LIMITS 
C 
C 
      FKMAX=80999.0005
      HZMAX=999999.1
C 
      FKMIN=0 
      HZMIN=0 
C 
C 
C 
C 
C  RETRIEVE DATA  FROM CONFIGURATION TABLE
C 
      CALL TIM(53,IU,1,IBUF,10,IER) 
      IF(IER .NE. 0) RETURN 
C 
C 
C 
C 
C  CHECK IF IMPEDANCE SELECTED IS VALID ACCORDING TO THE OPTION 
C  ON UNIT. 
C 
      IF(IBUF .EQ. 0 .AND. IZ .GT. 1) GOTO 8000 
C 
      IF((IBUF .EQ. 2 .OR. IBUF .EQ. 4) .AND. (IZ .LT. 1
     +.OR. IZ .GT. 3)) GOTO 8000
C 
      IF(IBUF .EQ. 3 .AND. IZ .NE. 1 .AND. IZ .NE. 4) GOTO 8000 
C 
C 
C   SET MIN. AND MAX. LIMITS ACCORDING TO IMPEDANCE 
C 
      IF(FKZ .EQ. 0) HZMIN=200.0
      IF(FHZ .EQ. 0) FKMIN=.200 
C 
C 
C 
      IF(IZ .NE. 2) GOTO 300
C 
      FKMAX=10000.
      FKMIN=10. 
      HZMIN=10000.
C 
      IF(FKZ .GE. 10.0) HZMIN=0 
      IF(FHZ .GE. 10000.0) FKMIN=0
C 
C 
300   IF(IZ .LT. 3) GOTO 310
C 
      FKMAX=2000.0
      FKMIN=10.0
      HZMIN=10000.0 
C 
      IF(FKZ .GE. 10.0) HZMIN=0 
      IF(FKZ .GE. 10000.0) FKMIN=0
C 
C 
C  SET MIN. AND MAX. LIMITS FOR AMPLITUDE 
C 
C 
310   PMAX=13.01
      PMIN=-86.98 
C 
      IF(IZ .EQ. 0) GOTO 320
C 
      PMAX=11.25
      PMIN=-88.74 
C 
C 
C  CHECK PARAMETERS 
C 
C 
C 
320   IF(FKZ .GT. FKMAX .OR. FKZ .LT. FKMIN) GOTO 8000
C 
      IF(FHZ .GT. HZMAX .OR. FHZ .LT. HZMIN) GOTO 8000
C 
      IF(AMP .GT. PMAX .OR. AMP .LT. PMIN) GOTO 8000
C 
      IF(FAZE .GT. 360.0 .OR. FAZE .LT. 0.) GOTO 8000 
C 
C 
C 
C 
C 
C 
C BLANK BUFFERS 
C 
      DO 10 I=1,20
10    IFREQ(I)=2H 
C 
C 
C 
C   CALCULATE TOTAL FREQUENCY 
C 
      CALL FR2A(FHZ,FKZ,IFREQ)
C 
C 
C   CHECK IF TOTAL FREQUENCY EXCEEDS MAXIMUM
C 
C 
      CALL A2F(IFREQ,1,6,VAL1)
C 
      CALL A2F(IFREQ,7,13,VAL2) 
C 
C 
      IF(VAL1 .GT. FKMAX) GOTO 8000 
C 
C 
      IF(IZ .LE. 1) GOTO 330
C 
      IF(VAL1 .EQ. FKMAX .AND. VAL2 .NE. 0) GOTO 8000 
C 
C 
C  CHANGE IFREQ(8) TO XH  X= DIGIT 0 TO 9 
C 
330   INUM= IAND(177400B,IFREQ(8))
      IFREQ(8)=IOR(INUM,110B) 
C 
C 
C  PROCESS AMPLITUDE
C 
      CALL F4DA(AMP,IOBUF(1)) 
C 
      IOBUF(1)=2H A 
      ICHR=113B 
      IF(AMP .LT. 0) ICHR=115B
      IOBUF(4)=IOR(IOBUF(4),ICHR) 
C 
C 
C 
C  PROCESS FAZE SETTING 
C 
      IFAZE=INT(FAZE*10.0)
      FAZE=FLOAT(IFAZE)/10.0
C 
      CALL F2A(FAZE,IFBUF)
C 
C 
      IFREQ(15)=2HP 
      IFREQ(20)=2HH 
C 
C 
C 
C 
C  STORE IMPEDANCE AND FREQUENCY IN CONFIGURATION TABLE 
C 
      IBUF(2)=IZ
      IBUF(3)=IFREQ(2)
      IBUF(4)=IFREQ(3)
      IBUF(5)=IFREQ(4)
      IBUF(6)=IFREQ(5)
      IBUF(7)=IFREQ(6)
      IBUF(8)=IFREQ(7)
      IBUF(9)=IFREQ(8)
      IBUF(10)=IFREQ(9) 
C 
      CALL TIM(53,IU,2,IBUF,10,IER) 
      IF(IER .NE. 0) RETURN 
C 
C 
      IFREQ(1)=2H F 
C 
C 
C===================================
C 
C 
C 
C 
C  REMOTE ENABLE
C 
3000  CALL EXEC(100003B,1600B+LUIB) 
      GOTO 9000 
3010  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
      ICNT=20 
C 
3020  CALL REIO(100002B,LU1,IFREQ(1),ICNT,IDUMY,0)
      GOTO 9000 
3030  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C 
C     RETURN
C 
C 
      IERMS=0 
      RETURN
C 
C 
C 
C-----------------------------
C 
C ERROR EXIT
C 
8000  IERR=1
      GOTO 8800 
C 
C 
9000  IERR=9
      GOTO 8800 
8500  IERR=IAND(IREG,377B)+11 
8800  IERR(2)=5 
      IERR(3)=2HHF
      IERR(4)=2HSU
      IERR(5)=2H
      RETURN
      END 
C 
C 
C ============================================= 
C 
      SUBROUTINE HFWID(IUNIT,WKZ,WHZ,MODE), 
     +09580-16369  1926  790302 
C 
C============================================== 
C 
C  HFWID(IUNIT,WKZ,WHZ,MODE)
C 
C    WHERE: 
C 
C       IUNIT = UNIT #
C 
C 
C       WKZ = WID IN KILOHERTZ
C 
C              0 KHZ   TO   MAXIMUM FREQUENCY RANGE 
C 
C              1 KHZ RESOLUTION ON WKZ . FRACTIONAL PART WILL BE IGNORED. 
C 
C 
C 
C 
C 
C 
C       WHZ=WID IN HERTZ
C 
C             0 HZ  TO  999. HZ 
C 
C  **NOTE: TOTAL WIDTH SETTING IS EQUAL TO WKZ+WHZ
C 
C 
C    FREQUECY WIDTH  RANGE ARE AS FOLLOWS:
C    ==================================== 
C 
C    50 OHM AND 75 OHM : 200HZ  TO  80.999 999  MHZ 
C 
C    124 OHM : 200HZ  TO  10 MHZ
C 
C    135 OHM AND 150 OHM : 200 HZ  TO  2 MHZ
C 
C 
C 
C **NOTE: HALF OF THE SWEEP WIDTH WILL BE BELOW THE CENTER FREQUENCY
C         ESTABLISHING THE START FREQUENCY. 
C 
C    MODE = SWEEP MODE
C 
C        0= START SINGLE 10 SEC 
C        1= START SINGLE 50 SEC 
C        2= START AUTO
C        3= GO TO START 
C        4= STOP
C 
C 
C   NOTE: IF AUTO START IS SELECTED, THE UNIT WILL NOT
C         PROGRAM TO ANOTHER MODE UNLESS IT IS FIRST STOP.
C 
C 
C 
C 
C------------------------------------ 
      DIMENSION IERMS(5)
      DATA IDTN / 53 /
      DATA IERMS / 10,5,2HHF,2HWI,2HD  /
C 
      IERMS=10
C 
C  FIND STATION AND LU #'S
C   ISTN = STATION #
C   LU1 = HP 3335A LU 
C   LUIB = 59310 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 XFWID(LU1,LUIB,IERMS,IUNIT,WKZ,WHZ,MODE) 
      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 XFWID(LU1,LUIB,IERR,IU,WKZ,WHZ,MODE),
     +09580-16369  1926  790302 
C------------------------------------------------------ 
C 
C 
      DIMENSION IERMS(5),IERR(5),IREG(2)
      DIMENSION IWID(11),IBUF(10),IFBUF(10),IMODE(5)
      EQUIVALENCE (IBUF(2),IFBUF(1))
      DATA IMODE/ 2HX ,2HY ,2HZ ,2HG ,2HQ / 
C 
C 
      IERR=0
C 
C 
C  RETRIEVE DATA FROM CONFRIGURATION TABLE
C  CHECK CURRENT CENTER FREQ. AND IMPEDANCE SETTING 
C 
      CALL TIM(53,IU,1,IBUF,10,IER) 
      IF(IER .NE. 0) RETURN 
C 
C 
C 
C   SET MIN. AND MAX. LIMITS
C 
      WKMAX=80999.0 
      WHMAX=999.999 
      WKMIN=0 
      WHMIN=0 
C 
C    SET SWEEP MIN. AND MAX. ACCORDING TO CURRENT 
C    IMPEDANCE VALUE. 
C 
      IF(IBUF(2) .GT. 1) WKMIN=10.0 
C 
      IF(IBUF(2) .EQ. 2) WKMAX=10000.0
C 
      IF(IBUF(2) .GT. 2) WKMAX=2000.0 
C 
C 
C 
C 
      IF(WKZ .GT. WKMAX .OR. WKZ .LT. WKMIN) GOTO 8000
      IF(WHZ .GT. WHMAX .OR. WHZ .LT. WHMIN) GOTO 8000
      IF(WKZ .EQ. 0 .AND. WHZ .EQ. 0) GOTO 8000 
C 
C 
C 
      IF(MOD .GT. 3 .OR. MOD .LT. 0) GOTO 8000
C 
C 
C  ELIMINATE FRACTIONAL PART OF WKZ 
C 
      TEMP=WKZ
      ITEN=0
      IF(WKZ .LT. 32766.0) GOTO 88
C 
      ITEN=INT(WKZ/10000.)
      TEMP=WKZ-(FLOAT(ITEN)*10000.) 
C 
C 
88    WKZ=FLOAT(INT(TEMP))+FLOAT(ITEN)*10000. 
C 
C 
C 
C 
C 
C  FIND THE MIDPOINT OF FREQUENCY RANGE 
C  THE FHMID CAN ONLY BE A VALUE OF EITHER A 999.999 OR 0.0 
C  THE FKMID CAN TAKE THE FOLLOWING VALUES: 40499 OR 5000 OR 1000 
C 
C 
      FKMID=WKMAX/2.0 
      FHMID=WHMAX 
C 
      IF(FKMID .GT. 40497.) FKMID= FKMID+.50
      IF(WKMAX .LT. 80900.) FHMID=0 
C 
C 
C  FIND OUT IF CENTER FREQUENCY IS ABOVE OR BELOW THE 
C  MIDPOINT OF FRQUENCY RANGE. IF C.F. IS AT OR ABOVE 
C  THE MIDPOINT THEN  MAX.WID = (WKMAX+WHMAX- C.F.) * 2.0 
C 
C  IF C.F. IS BELOW THE MIDPOINT ,  MAX.WID=(C.F.-200HZ)*2.0
C 
C 
C  CONVERT C.F. TO FLOATING POINT 
C 
C 
C 
C 
C 
C 
      CALL A2F(IFBUF,1,6,CFKZ)
      CALL A2F(IFBUF,7,13,CFHZ) 
C 
C 
C  CHECK IF CENTER FREQ. IS ABOVE MIDDLE OF FREQ. RANGE 
C 
      IF(CFKZ .GE. FKMID) GOTO 200
C 
C 
C    CENTER FREQ. IS BELOW THE MIDDLE OF FREQ. RANGE
C 
      IF(CFHZ .GE. 200.0) GOTO 150
C 
      CFKZ=CFKZ-1.0 
      CFHZ=CFHZ+1000.0
C 
C 
150   WKDF=CFKZ 
      WHDF=CFHZ-200.0 
C 
      GOTO 250
C 
C   CENTER FREQ. IS ABOVE THE MIDDLE OF FREQ. RANGE 
C   FIND THE DIFFERENCE BETWEEN CENTER FREQ. AND MAXIMUM FREQ.RANGE 
C 
200   WKDF=WKMAX-CFKZ 
      WHDF=WHMAX-CFHZ 
C 
C 
C    ESTABLISH MAXIMUM LIMITS FOR SWEEP WIDTH.
C 
250   SWHZ=WHDF*2.0 
      SWKZ=WKDF*2.0 
C 
C     IF(SWHZ .LT. 1000) GOTO 300 
C 
      SWHZ=SWHZ-1000.0
      SWKZ=SWKZ+1.0 
C 
C 
C  CHECK IF SWEEP WIDTH IS WITHIN BOUNDS. 
C 
C 
300   IF(WKZ .GT. SWKZ) GOTO 8000 
      IF(WKZ .EQ. SWKZ .AND. WHZ .GT. SWHZ) GOTO 8000 
C 
C 
C 
C CONVERT SWEEP WIDTH TO ASCII
C 
      CALL FR2A(WHZ,WKZ,IWID) 
C 
      IWID(1)=2H W
      IWID(10)=IAND(177400B,IWID(10)) 
C 
C 
C    SET SWEEP MODE 
C 
      IWID(11)=IMODE(MODE+1)
C 
C 
C===================================
C 
C 
C 
C 
C  REMOTE ENABLE
C 
3000  CALL EXEC(100003B,1600B+LUIB) 
      GOTO 9000 
3010  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
      ICNT=11 
C 
3020  CALL REIO(100002B,LU1,IWID(1),ICNT,IDUMY,0) 
      GOTO 9000 
3030  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C 
C     RETURN
C 
C 
      IERMS=0 
      RETURN
C 
C 
C 
C-----------------------------
C 
C ERROR EXIT
C 
8000  IERR=1
      GOTO 8800 
C 
C 
9000  IERR=9
      GOTO 8800 
8500  IERR=IAND(IREG,377B)+11 
8800  IERR(2)=5 
      IERR(3)=2HHF
      IERR(4)=2HWI
      IERR(5)=2HD 
      RETURN
      END 
C 
C 
C 
C-------------------------------------------------
      SUBROUTINE F4DA(XNUM,ISTR),09580-16369 1926 790302
C 
C---------------------------------------------------- 
C 
C 
C 
C 
C    THIS SUBROUTINE WILL CONVERT A FOUR DIGIT NUMBER 
C    IN THE FORM XX.XX TO AN ASCII STRING . 
C 
C 
C   XNUM= A NUMBER RANGING FROM -99.99 TO 99.99 
C   ISTR= RETURNED ASCII STRING 
C 
C   IF ABSOLUTE VALUE OF XNUM IS GREATER THAN 99.99 
C   BLANKS WILL BE RETURNED IN THE STRING.
C 
C---------------------------------------------------- 
C 
C 
C 
      DIMENSION ISTR(4) 
C 
C 
C  BLANK BUFFR
C 
      DO 100 I=1,4
100   ISTR(I)=2H
C 
C 
C PROCESS NUMBER
C 
      ANUM=ABS(XNUM)
C 
      IF(ANUM .GT. 99.99) GOTO 1000 
      INUM=INT(ANUM)
      IZ1=INUM/10 
      IZ2=INUM-(IZ1*10) 
      IZ3=INT(ANUM*10.0)-(IZ1*100)-(IZ2*10) 
      IZ4=INT((ANUM*100.0)+.5)-(IZ1*1000)-(IZ2*100)-(IZ3*10)
C 
C 
      ID1=(IZ1*2**8)+30000B 
      ID2=IZ2+60B 
C 
      ID3=IZ3+60B 
      ID4=(IZ4*2**8)+30000B 
C 
      IDOT=27000B 
C 
C 
C 
      ISTR(1)=2H +
      IF(XNUM .LT. 0) ISTR(1)=2H -
C 
C 
      ISTR(2)= IOR(ID1,ID2) 
      ISTR(3)= IOR(IDOT,ID3)
      ISTR(4)= ID4
C 
C 
C 
1000  RETURN
      END 
C 
C 
C 
C=====================================================
      SUBROUTINE FR2A(FHZ,FKHZ,IFREQ),09580-16369  1926  790302 
C====================================================== 
C 
C 
C 
C 
C   R. UNTALAN   9/26/78
C 
C   THIS SUBROUTINE WILL CONVERT THE TOTAL FREQUENCY
C   INTO AN ASCII STRING . A TOTAL OF 15 DIGITS, DECIMAL
C   POINT,AND TWO ASCII CHARACTERS (HZ) ATTACH AT THE END.
C   THE BUFFER (IFREQ) SHOULD BE DIMENSION 10 WORDS BY THE
C   CALLING PROGRAM. THE STRING FORMAT IS AS FOLLOWS: 
C 
C   LEADING AND TRAILING ZEROES WILL BE PLACED IN THE STRING. 
C   EXAMPLE: IF TOTAL = 12345.987 
C            STRING =   BB000012345.987000HZ
C 
C   BBXXXXXXXXX.XXXXXXHZ
C 
C   WHERE X IS A DIGIT 0 TO 9 
C   AND BB ARE BLANKS 
C=======================================================
C 
C 
      DIMENSION IFREQ(10),ID(20)
C 
C 
C PRESET DIGITS TO ZERO 
C 
      DO 10 I=1,16
10    ID(I)=0 
C 
C   CHECK HOW MANY SIGNIFICANT DIGITS PAST THE DECIMAL
C 
C 
      DO 20 I=2,-1,-1 
      EXP=FLOAT(I)
      IF(FHZ .GE. 10.**EXP) GOTO 30 
20    CONTINUE
C 
C 
C 
30    IF(EXP .EQ. 2.0)FHZ=FHZ+.0005 
      IF(EXP .EQ. 1.0) FHZ=FHZ+.00005 
      IF(EXP .EQ. 0.0) FHZ=FHZ+.000005
      IF(EXP .LT. 0.0) FHZ=FHZ+.0000005 
C 
C 
C 
      IADD=0
      ITEN=0
      D1000=1000
C 
C 
C 
C 
C 
      IF(FKHZ .GE. 10000.0) GOTO 130
      TEMP=FKHZ 
      ITEN=0
      GOTO 125
C 
C 
C TEMPORARILY TRUNCATE THE TEN THOUSANDS DIGIT
C 
130   ITEN=INT(FKHZ/10000.) 
      TENT=FLOAT(ITEN)*10000.0
      TEMP=(FKHZ-TENT)
C 
C 
125   KHZ1=INT(TEMP)
C 
C 
      FKZ1=FLOAT(KHZ1)
C 
C 
C ISOLATE HZ COMPONENT OF FKHZ
C 
      AHZ1=(TEMP*1000.0)-(FKZ1*1000.0)
      FHZ1=FLOAT(INT(AHZ1+.5))
      IF(FKHZ .GE. 10000.)FHZ1=INT(FHZ1/100.)*100 
C 
C 
321   KHZ2=INT(FHZ/D1000) 
      CKHZ2=FLOAT(KHZ2) 
C 
C 
C  IF HZ<10 THEN DROP LAST 3 DIGITS AND PICK THEM UP LATER
C 
      THZ=FHZ 
      IF(FHZ .GT. 10.0) GOTO 677
C 
      LHZ=INT(FHZ*D1000)
      THZ=FLOAT(LHZ)/D1000
C 
C 
C 
C 
C 
C 
677   FHZ2=THZ-(CKHZ2*D1000)
C 
C 
C 
      CALL XSUM(KHZ1,FHZ1,KHZ2,FHZ2,KHZS,FHZS)
C 
C 
C 
C 
C 
C ***CONVERT KHZ AND HZ TO ASCII
C 
      IF(KHZS .LT. 10000) GOTO 109
C 
      KHZS=KHZS-10000 
      ITEN=ITEN+1 
C 
C 
109   ID(1)=ITEN/10 
      ID(2)=ITEN-ID(1)*10 
C 
C 
      ID(3)=KHZS/1000 
      ID(4)=(KHZS-ID(3)*1000)/100 
C 
C 
      ID(5)=(KHZS-(ID(3)*1000)-(ID(4)*100))/10
      ID(6)=KHZS-(ID(3)*1000)-(ID(4)*100)-(ID(5)*10)
C 
C 
      RD6=(FHZS/100.) 
C 
      ID(7)=INT(RD6)
C 
      RD7=(FHZS-FLOAT(ID(7)*100))/10. 
C 
      ID(8)=INT(RD7)
      RD8=FHZS-FLOAT(ID(7)*100)-FLOAT(ID(8)*10) 
C 
      ID(9)=INT(RD8)
C 
C 
      ID(10)=56B
C 
C 
C ISOLATE FRACTIONAL PART OF HZ 
C 
      FRAC=FHZS-FLOAT(ID(7)*100)-FLOAT(ID(8)*10)-FLOAT(ID(9)) 
C 
C 
      FRAC=FRAC+.00005
C 
C 
      ID(11)=INT(FRAC*10.)
C 
      ID(12)=INT(FRAC*100.)-(ID(11)*10) 
C 
      ID(13)=INT(FRAC*1000.)-(ID(11)*100)-(ID(12)*10) 
      IF(EXP .EQ. 2.0) GOTO 110 
C 
C 
C PROCESS LAST THREE DIGITS OF ORIGINAL HZ
C 
C 
      FRAC=FHZ*1000.
      IFHZ=INT(FRAC)
      WFHZ=FLOAT(IFHZ)
C 
C 
      FRAC=FRAC-WFHZ
C 
      ID(14)=INT(FRAC*10) 
      IF(ID(14) .LT. 0 .OR. ID(14) .GT. 9) ID(14)=0 
      IF(EXP .EQ. 1.) GOTO 110
C 
C 
C 
      ID(15)=INT(FRAC*100)-(ID(14)*10)
      IF(ID(15) .LT.0 .OR. ID(15) .GT. 9) ID(15)=0
      IF(EXP .EQ. 0.) GOTO 110
C 
C 
      ID(16)=INT(FRAC*1000)-(ID(14)*100)-(ID(15)*10)
      IF(ID(16) .LT. 0 .OR. ID(16) .GT. 9) ID(16)=0 
C 
C 
C STORE DIGITS IN OUTPUT BUFFER 
C 
110   IFREQ(1)=2H 
C 
C  STORE DIGITS IN OUTPUT BUFFER
C 
      J=1 
      DO 200 I=1,8
      IFREQ(I+1)=IASC(ID(J),ID(J+1))
200   J=J+2 
C 
      IFREQ(10)=2HHZ
C 
      RETURN
C 
C 
      END 
C 
C 
C==================================================== 
C 
      INTEGER FUNCTION IASC(IV1,IV2)
      IVA=(IOR(IV1,60B))*400B 
      IVB=IOR(IV2,60B)
      IF(IV2 .GT. 9)IVB=IV2 
      IF(IV1 .GT. 9)IVA=IV1 
      IASC=IOR(IVA,IVB) 
      RETURN
      END 
C 
C 
C=====================================================
C 
C 
C 
C************************************************** 
C 
      SUBROUTINE XSUM(KHZ1,FHZ1,KHZ2,FHZ2,KHZS,FHZS), 
     +09580-16369  1926  790302 
C 
C************************************************** 
C 
C 
C 
C 
C  *** DEFINE DECIMAL CONSTANT
C 
      D1000=1000
C 
C **** CALCULATE SUM
C 
      KHZS=KHZ1+KHZ2
      FHZS=FHZ1+FHZ2
C 
C 
C **** TEST IF CARRY NEEDED 
C 
      IF(FHZS-D1000) 600,500
C 
C 
C **** GENERATE CARRY 
C 
500   KHZS=KHZS+1 
      FHZS=FHZS-D1000 
      RETURN
C 
C 
C **** IS FHZS NEGATIVE?
C 
600   IF(FHZS)700,9000
C 
C 
C 
C **** GENERATE CARRY 
C 
700   KHZS=KHZS-1 
      FHZS=D1000+FHZS 
C 
C 
9000  RETURN
      END 
      END$
                                                                                                                                                                