FTN4,L
      SUBROUTINE SFGEN(IUNIT,FKHZ,FHZ), 
     +09580-16310 1926 790502 
C 
C-------------------------------------
C 
C  HP 3325A SYNTHESIZER*FUNCTION GENERATOR
C      (SFGEN)
C 
C  RELOCATABLE 09580-16310  
C  SOURCE      09580-18310  
C 
C  R.UNTALAN 780917    REV. A 
C  BOB RICHARDS 790502
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 HP3325A SYNTHESIZER*FUNCTION GENERATOR.
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    SFGEN(I,R,R), OV=XX,   ENT=SFGEN,   FIL=%SFGEN 
C    SFSWP(I,I,R,R,R,R,R,R,R),  OV=XX,   ENT=SFSWP,  FIL=%SFGEN 
C 
C 
C 
C  CONFIGURATION TABLE ENTRIES: 
C  ---------------------------- 
C 
C 
C    R  29,1,4
C    U1 
C        0    ENTER 0 FOR STANDARD UNIT  OR  1 FOR OPT.002
C        0    TEMPORARY STORAGE FOR WAVE FORM FUNCTION
C        0.0  TEMPORARY STORAGE FOR DC-OFFSET 
C 
C 
C 
C 
C 
C 
C------------------------------------ 
C 
C  SFGEN(IUNIT,FKHZ,FHZ)
C 
C    WHERE: 
C 
C       IUNIT = UNIT #
C 
C 
C       FKHZ = FREQUENCY IN KILOHERTZ  (NOTE: TOTAL FREQUENCY = FKHZ+FHZ) 
C 
C       ALL WAVEFORMS 1HZ RESOLUTION (.001KHZ)
C       DIGITS BEYOND THE ONE THOUSANDTH PLACE ARE NOT ACCEPTED.
C 
C             SINE FUNCTION 
C             ------------- 
C             0 KHZ  TO  20,999kHZ
C 
C 
C             SQUARE FUNCTION 
C             --------------- 
C             0 KHZ  TO  10,999kHZ
C 
C 
C             TRIANGLE/RAMPS FUNCTION 
C             ----------------------- 
C             0 KHZ  TO  10.999kHZ
C 
C 
C 
C      FHZ= FREQUENCY IN HERTZ
C 
C           SINE FUNCTION 
C           ------------- 
C           0 Hz  TO  999,999Hz 
C 
C 
C           SQUARE FUNCTION 
C           --------------- 
C           0 Hz  TO 999,999Hz
C 
C 
C           TRIANGLE/RAMPS FUNCTION 
C           0 H  TO  10,999Hz 
C 
C 
C 
C 
C  **NOTE: TOTAL FREQUENCY SETTING IS EQUAL TO FKHZ+FHZ 
C 
C 
C    FREQUECY RANGE ARE AS FOLLOWS: 
C    =============================
C 
C    Sine: 1uHz  TO  20.999 999 999 MHz 
C    Square: 1uHz  TO  10.999 999 999 MHz 
C    Triangle/Ramps: 1uHz  TO  10.999 999 999 kHz 
C 
C 
C 
C 
C 
C------------------------------------ 
      DIMENSION IERMS(5)
      DATA IDTN / 29 /
      DATA IERMS / 10,5,2HSF,2HGE,2HN  /
C 
      IERMS=10
C 
C  FIND STATION AND LU #'S
C   ISTN = STATION #
C   LU1 = HP 3325A 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 XFGEN(LU1,LUIB,IERMS,IUNIT,FKHZ,FHZ) 
      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 XFGEN(LU1,LUIB,IERR,IU,FKHZ,FHZ),
     +09580-16310 1926 790502 
C---------------------------------------------
C 
C 
      DIMENSION IERMS(5),IERR(5),IFREQ(20),ISTR(5),IREG(2)
      DIMENSION IBUF(4),IOBUF(10) 
      EQUIVALENCE (REG,IREG,IA),(IREG(2),IB),(IOBUF(1),IFREQ(1))
C 
C 
      IERR=0
C 
C 
C  ESTABLISH MIN. AND MAX. LIMITS 
C 
C 
      HZMAX=1000
      HZMIN=0 
C 
      FKMAX=21000 
      FKMIN=HZMIN 
C 
C 
C 
C 
C  RETRIEVE CURRENT WAVEFORM FUNCTION FROM CONFIGURATION TABLE
C 
      CALL TIM(29,IU,1,IBUF,4,IER)
      IF(IER .NE. 0) RETURN 
C 
C 
      IF(IBUF(2) .EQ. 1) FKMAX=11000
C 
      IF(IBUF(2) .GT. 1) FKMAX=11 
C 
      IF(IBUF(2) .GT. 1) HZMAX=11000
C 
C 
C 
C 
C 
C 
C 
C 
C  CHECK PARAMETERS 
C 
      FHZ=FHZ+.00000005 
      FKHZ=FKHZ+.000005 
C 
C 
C 
C 
      IF(FKHZ .LT. FKMIN .OR. FKHZ .GE. FKMAX) GOTO 8000
C 
      IF(FHZ .LT. HZMIN .OR. FHZ .GE. HZMAX) GOTO 8000
C 
C 
C 
C BLANK BUFFERS 
C 
      DO 10 I=1,17
10    IFREQ(1+I)=2H 
C 
      DO 22 I=1 ,5
22    ISTR(I)=2H
C 
C 
C 
C 
      CALL FR2A(FHZ,FKHZ,IFREQ) 
C 
C 
C   CHECK IF TOTAL FREQUENCY EXCEEDS MAXIMUM
C 
      IFR=1 
      ILST=6
C 
      IF(IBUF(2) .LT. 2) GOTO 900 
C 
      IFR=4 
C 
900   CALL A2F(IFREQ,IFR,ILST,VALU) 
C 
C 
C 
C 
      IF(VALU .GE. FKMAX) GOTO 8000 
C 
C 
C 
C 
      IOBUF(1)=2HFR 
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=10 
C 
3020  CALL REIO(100002B,LU1,IOBUF(1),ICNT,IDUMY,0)
      GOTO 9000 
3030  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C 
C     RETURN
C 
C 
C CLEAR SRQ 
C 
C 
      CALL EXEC(100003B,600B+LU1) 
      GOTO 9000 
3100  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
      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)=2HSF
      IERR(4)=2HGE
      IERR(5)=2HN 
      RETURN
      END 
C 
C 
C 
      SUBROUTINE SFSWP(IU,ISWP,TSWP,STKZ,STHZ,SPKZ,SPHZ,SMKZ,SMHZ), 
     +09580-16310 1926 790502 
C 
C------------------------------------ 
C 
C  SFSWP(IU,ISWP,TSWP,STKZ,STHZ,SPKZ,SPHZ,SMKZ,SMHZ)
C 
C    WHERE: 
C 
C       IU = UNIT # 
C 
C      ISWP= SWEEP MODE 
C          0= LINEAR /RESET AND START  SINGLE SWEEP 
C          1= LINEAR /RESET AND START  CONTINUOS SWEEP
C          2= LOG /RESET AND START SINGLE SWEEP 
C          3= LOG /RESET AND START CONTINUOUS SWEEP 
C          4= RESET TO START FREQUENCY ONLY (STOPS SWEEP) 
C 
C     NOTE: IF UNIT IS CURRENTLY SWEEPING ,IT IS NECESSARY TO 
C           RESET THE UNIT FIRST (ISWP=4) BEFORE STARTING ANOTHER 
C           TYPE OF SWEEP. ANOTHER ALTERNATIVE IS TO REPEAT THE 
C           CALL TWICE. 
C 
C 
C      TSWP= SWEEP TIME 
C 
C           FOR LINEAR SWEEP
C           ----------------
C           .01 SEC. TO  99.99 SEC
C 
C           FOR LOG SWEEP 
C           ----------------
C           SINGLE : 2 SEC TO 99.99 SEC 
C           CONTINUOUS : .1 SEC TO 99.99 SEC
C 
C       STKZ= START FREQUENCY IN KILOHERTZ
C       SPKZ= STOP FREQUENCY IN KILOHERTZ 
C       SMKZ= MARKER FREQUENCY IN KILOHERTZ 
C 
C       RESOLUTION FOR THE KHZ PARAMETER IS 1 HZ (.001 KHZ) 
C       ANY DIGIT PASS THE  ONE THOUSANDTH PLACE IS NOT ACCEPTED. 
C 
C 
C              FREQUENCY IN KILOHERTZ  (NOTE: TOTAL FREQUENCY =  KHZ+ HZ) 
C              FOR LOG SWEEP MINIMUM FREQUECY IS 1 HZ.
C 
C             SINE FUNCTION 
C             ------------- 
C             0 kHZ  TO  20,999kHZ
C 
C 
C             SQUARE FUNCTION 
C             --------------- 
C             0 kHZ  TO  10,999kHZ
C 
C 
C             TRIANGLE/RAMPS FUNCTION 
C             ----------------------- 
C             0 kHZ  TO  10.999kHZ
C 
C 
C       STHZ=START FREQUENCY IN HERTZ 
C       SPHZ=STOP FREQUENCY IN HERTZ
C       SMHZ=MARKER FREQUENCY IN HERTZ
C 
C 
C      RESOLUTION IS 1 UHZ (.000001HZ) .
C 
C 
C           FREQUENCY IN HERTZ
C 
C           SINE FUNCTION 
C           ------------- 
C           0 HZ  TO  999 HZ
C 
C 
C           SQUARE FUNCTION 
C           --------------- 
C           0 Hz  TO 999 HZ 
C 
C 
C           TRIANGLE/RAMPS FUNCTION 
C           0 HZ TO  999 HZ 
C 
C 
C 
C 
C  **NOTE: TOTAL FREQUENCY SETTING IS EQUAL TO FKHZ+FHZ 
C          TOTAL FREQUENCY CANNOT NOT BE LESS THAN 1 UHZ. 
C          ********************************************** 
C 
C 
C    FREQUECY RANGE ARE AS FOLLOWS: 
C    =============================
C 
C    Sine: 1uHz  TO  20.999 999 999 MHz 
C    Square: 1uHz  TO  10.999 999 999 MHz 
C    Triangle/Ramps: 1uHz  TO  10.999 999 999 kHz 
C 
C 
C 
C 
C 
C------------------------------------ 
      DIMENSION IERMS(5)
      DATA IDTN / 29 /
      DATA IERMS / 10,5,2HSF,2HGE,2HN  /
C 
      IERMS=10
C 
C  FIND STATION AND LU #'S
C   ISTN = STATION #
C   L1 = HP 3325A LU
C   L2 = 59310 LU 
C 
      ISTN=ISN(DUMMY) 
      L1=LUDV(ISTN,IDTN,IU) 
      L2=IBLU0(L1)
      IF(L1 .LE. 0 .OR. L2 .LE. 0)GOTO 800
C 
C  CALL X SUB 
C 
      CALL XFSWP(L1,L2,IERMS,IU,ISWP,TSWP,STKZ,STHZ,SPKZ,SPHZ,SMKZ,SMHZ)
      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 XFSWP(L1,L2,IERR,IU,ISWP,TSWP,STKZ,STHZ,SPKZ,SPHZ, 
     +SMKZ,SMHZ),09580-16310 1926 790502
C---------------------------------------------
C 
C 
      DIMENSION IERR(5),IFREQ(10),IREG(2) 
      DIMENSION IBUF(4),IWBUF(10),IOBUF(10),IQBUF(10) 
      DIMENSION IPBUF(10),ITBUF(10),IMBUF(10) 
      EQUIVALENCE (REG,IREG,IA),(IREG(2),IB)
C 
C 
      IERR=0
C 
C 
C  ESTABLISH MIN. AND MAX. LIMITS 
C 
C 
      HZMAX=1000
      HZMIN=0 
      SZMIN=HZMIN 
      ZMIN=HZMIN
C 
      FKMAX=21000 
      FKMIN=.001
      SKMIN=FKMIN 
      RKMIN=FKMIN 
C 
C 
C 
C  RETRIEVE CURRENT WAVEFORM FUNCTION FROM CONFIGURATION TABLE
C 
      CALL TIM(29,IU,1,IBUF,4,IER)
      IF(IER .NE. 0) RETURN 
C 
C 
C 
      IF(IBUF(2) .GT. 1) FKMAX=11 
C 
      IF(IBUF(2) .GT. 1) HZMAX=11000
C 
C 
      IF(STHZ .GT. 0.0) FKMIN=0.0 
      IF(SPHZ .GT. 0.0) SKMIN=0.0 
      IF(SMHZ .GT. 0.0) RKMIN=0.0 
C 
C 
C 
      IF(STKZ .EQ. 0)HZMIN=.000001
      IF(SPKZ .EQ. 0)SZMIN=.000001
      IF(SMKZ .EQ. 0) ZMIN=.000001
C 
C 
C 
C  ESTABLISH MINIMUM SWEEP WIDTH FOR EACH WAVEFORM
C  AND SWEEP TIME . LINEAR MODE 
C  RMIN= RESOLUTION IN MILIHERTZ
C 
      IF(IBUF(2) .EQ. 0) RMIN=.100
C 
      IF(IBUF(2) .EQ. 1) RMIN=.050
C 
      IF(IBUF(2) .EQ. 2) RMIN=.005
C 
      IF(IBUF(2) .GT. 2) RMIN= .010 
C 
C 
C  FMIN=MINIMU SWEEP WIDTH IN MILIHERTZ (LINEAR MODE ONLY)
C 
      FMIN=TSWP*100.0*RMIN
C 
C 
C 
C 
C  CHECK PARAMETERS 
C 
      STHZ=STHZ+.00000005 
      SPHZ=SPHZ+.00000005 
      STKZ=STKZ+.000005 
      SPKZ=SPKZ+.000005 
C 
C 
C 
C 
C 
      IF(SMKZ .EQ. 0.0 .AND. SMHZ .EQ. 0.0) GOTO 5
C 
      IF(SMKZ .LT. RKMIN .OR. SMKZ .GE. FKMAX) GOTO 8000
      IF(SMHZ .LT. ZMIN  .OR. SMHZ .GE. HZMAX) GOTO 8000
C 
C 
C 
5     IF(STKZ .LT. FKMIN .OR. STKZ .GE. FKMAX) GOTO 8000
      IF(SPKZ .LT. SKMIN .OR. SPKZ .GE. FKMAX) GOTO 8000
C 
      IF(STHZ .LT. HZMIN .OR. STHZ .GE. HZMAX) GOTO 8000
      IF(SPHZ .LT. SZMIN .OR. SPHZ .GE. HZMAX) GOTO 8000
C 
C 
C 
C 
C 
C CHECK SWEEP MODE AND SWEEP TIME 
C 
      IF(ISWP .LT. 0 .OR. ISWP .GT. 4) GOTO 8000
C 
C ESTABLISH MINIMUM SWEEP SWEEP TIME
C 
      IF(ISWP .LT. 2) TMIN=.01
C 
      IF(ISWP .EQ. 3) TMIN=.1 
C 
      IF(ISWP  .EQ.2) TMIN=2.0
C 
C 
      TMAX=99.99
C 
C 
      IF(TSWP .LT. TMIN .OR. TSWP .GT. TMAX) GOTO 8000
C 
C 
C 
C ----------------------------------------------- 
C 
C PROCESS START AND STOP FREQUENCIES
C 
C 
C BLANK BUFFERS 
C 
C 
      DO 11 I=1,10
      IPBUF(I)=2H 
      ITBUF(I)=2H 
      IWBUF(I)=2H 
11    IOBUF(I)=2H 
C 
C 
C 
      DO 1100 M=1,3 
C 
      IF(M - 2) 94,95,96
C 
94    FHZ=STHZ
      FKHZ=STKZ 
C 
      GOTO 15 
C 
95    FHZ=SPHZ
      FKHZ=SPKZ 
C 
      GOTO 15 
C 
C 
C IF MARKER NOT DESIRED SKIP PROCESSING.
96    IF(SMKZ .EQ. 0 .AND. SMHZ .EQ. 0) GOTO 1100 
      FHZ=SMHZ
      FKHZ=SMKZ 
C 
C 
15    DO 12 I=1,10
12    IFREQ(I)=2H 
C 
C 
C CONVERT TOTAL FREQUENCY TO ASCII
C 
      CALL FR2A(FHZ,FKHZ,IFREQ) 
C 
C 
C  CHECK IF FREQUENCY EXCEEDS MAXIMUM 
C 
      IFR=1 
      ILST=6
C 
      IF(IBUF(2) .LT. 2) GOTO 1180
C 
C 
      IFR=4 
C 
1180  CALL A2F(IFREQ,IFR,ILST,VALU) 
C 
C 
C 
C 
C 
      IF(VALU .GE. FKMAX) GOTO 8000 
C 
C 
C 
C 
C 
C 
C 
      IF(M - 2) 1190,1200,1210
C 
C 
C START FREQUENCY BUFFER
C 
1190  ITBUF(1)=2HST 
      ITBUF(2)=IFREQ(2) 
      ITBUF(3)=IFREQ(3) 
      ITBUF(4)=IFREQ(4) 
      ITBUF(5)=IFREQ(5) 
      ITBUF(6)=IFREQ(6) 
      ITBUF(7)=IFREQ(7) 
      ITBUF(8)=IFREQ(8) 
      ITBUF(9)=IFREQ(9) 
      ITBUF(10)=IFREQ(10) 
C 
      GOTO 1100 
C 
C 
C  STOP FREQUENCY BUFFER
C 
1200  IPBUF(1)=2HSP 
      IPBUF(2)=IFREQ(2) 
      IPBUF(3)=IFREQ(3) 
      IPBUF(4)=IFREQ(4) 
      IPBUF(5)=IFREQ(5) 
      IPBUF(6)=IFREQ(6) 
      IPBUF(7)=IFREQ(7) 
      IPBUF(8)=IFREQ(8) 
      IPBUF(9)=IFREQ(9) 
      IPBUF(10)=IFREQ(10) 
C 
      GOTO 1100 
C 
C 
C MARKER FREQUENCY BUFFER 
C 
1210  IMBUF(1)=2HMF 
      IMBUF(2)=IFREQ(2) 
      IMBUF(3)=IFREQ(3) 
      IMBUF(4)=IFREQ(4) 
      IMBUF(5)=IFREQ(5) 
      IMBUF(6)=IFREQ(6) 
      IMBUF(7)=IFREQ(7) 
      IMBUF(8)=IFREQ(8) 
      IMBUF(9)=IFREQ(9) 
      IMBUF(10)=IFREQ(10) 
C 
1100  CONTINUE
C 
C 
C 
C 
C  PROCESS  SWEEP MODE AND SWEEP TIME 
C 
C 
      IOBUF(1)=2HSM 
      IOBUF(2)=2H1
      IF(ISWP .GT. 1 )IOBUF(2)=2H2
C 
C 
C 
C PROCESS SWEEP TIME
C 
      ITS=INT(TSWP) 
      IZ1=ITS/10
      IZ2=ITS-(IZ1*10)
      IZ3=INT(TSWP*10.0)-(IZ1*100)-(IZ2*10) 
      IZ4=INT((TSWP*100.0)+.5)-(IZ1*1000)-(IZ2*100)-(IZ3*10)
C 
C 
      IDT1=(IZ1*2**8)+30000B
      IDT2=IZ2+60B
C 
      IDT3=IZ3+60B
      IDT4=(IZ4*2**8)+30000B
C 
      IDOT=27000B 
C 
C 
      IOBUF(3)=2HTI 
      IOBUF(4)=IOR(IDT1,IDT2) 
      IOBUF(5)=IOR(IDOT,IDT3) 
      IOBUF(6)=IDT4 
C 
C 
      IOBUF(7)=2HSE 
C 
C 
C 
      IOBUF(8)=2HSS 
      IF(ISWP .EQ. 1 .OR. ISWP .EQ. 3) IOBUF(9)=2HSC
C 
      IF(ISWP .EQ. 0 .OR. ISWP .EQ. 2) IOBUF(9)=2HSS
C 
      IF(ISWP .EQ. 4) IOBUF(9)=2H 
C 
C 
C 
C 
C 
C 
C 
C=============================================
C 
C  CHECK IF MINIMUM SWEEP WIDTH IS IN SPEC
C 
C  EXAMINE FIRST 6 DIGITS OF START AND STOP BUFFER
C 
C 
      PVAL2=0 
      TVAL2=0 
C 
      CALL A2F(IPBUF,2,7,PVAL)
      CALL A2F(ITBUF,2,7,TVAL)
C 
C 
C 
C 
C 
      IF(PVAL-TVAL)790,789,790
C 
789   CALL A2F(IPBUF,8,9,PVAL2) 
      CALL A2F(ITBUF,8,9,TVAL2) 
C 
C 
C 
      IF(PVAL2-TVAL2) 790,791,790 
C 
C 
C IN LINEAR SWEEP, IF ANY OF THE FIRST 8 DIGITS IS DIFFERENT THEN 
C MINIMUM SWEEP WIDTH IS MET.(PASS CONDITION) 
C 
C 
790   IF(ISWP .LT. 2) GOTO 3000 
C 
C 
C 
C  IN LOG SWEEP, THE STOP FREQUENCY CANNOT BE GREATER THAN THE
C  START FREQUENCY. 
C 
C 
791   IF((PVAL .LT. TVAL) .OR. (PVAL2 .LT. TVAL2)) GOTO 8000
C 
C 
      IF(ISWP .GT. 1) GOTO 800
C 
C*************************************************************
C  IF SWEEP MODE IS LINEAR AND THE FIRST 8 DIGITS OF
C  START AND STOP BUFFER WERE EQUAL , THEN CHECK LAST 6 DIGITS
C 
C 
C 
C 
      CALL A2F(IPBUF,11,16,PNUM)
      CALL A2F(ITBUF,11,16,TNUM)
C 
C  CALCULATE SWEEP WIDTH FOR LINEAR MODE
C 
C 
C 
C  RESCALE TO MILIHERTZ 
      FDIF=(PNUM-TNUM)/1000.
C 
C 
C 
      IF(ABS(FDIF) .LT. FMIN) GOTO 8000 
C 
C 
      GOTO 3000 
C*************************************************************
C 
C 
C CHECK IF START AND STOP FREQ. ARE  ON THE SAME RANGE
C IF THEY ARE,THEN MINIMUM LOG SWEEP IS NOT MET (FAILED MIN. SPEC)
C 
C IN LOG SWEEP, STOP FREQ. MUST BE AT LEAST 10 TIMES GREATER THAN 
C THE START FREQ.(ONLY SWEEP UPWARD IS ALLOWED) 
C 
C 
C CHECK MINIMUM START FREQUENCY IF IT IS AT LEAST 1 HZ
C 
C 
C 
800   IF(STKZ .EQ. 0  .AND.  STHZ .LT. 1) GOTO 8000 
C 
C 
C 
      CALL A2F(ITBUF,1,9,XVAL)
      CALL A2F(IPBUF,1,9,YVAL)
C 
C 
      ZLIM=10000000.0 
      DO 810 I=1,7
      IF(YVAL .GE. ZLIM) GOTO 820 
      ZLIM=ZLIM/10.0
810   CONTINUE
C 
C 
C 
C 
820   IF(XVAL .GE. ZLIM) GOTO 8000
C 
C 
C 
      IF(YVAL/10.0 .LT. XVAL) GOTO 8000 
C 
C 
C 
C 
C 
C 
C===================================
C 
C 
C 
C 
C  REMOTE ENABLE
C 
3000  CALL EXEC(100003B,1600B+L2) 
      GOTO 9000 
3010  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
      ICNT=10 
C 
C 
C 
C OUPUT START FREQUENCY 
C 
C 
3040  CALL REIO(100002B,L1,ITBUF(1),ICNT,IDUMY,0) 
      GOTO 9000 
3050  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C OUTPUT STOP FREQUENCY 
C 
3060  CALL REIO(100002B,L1,IPBUF(1),ICNT,IDUMY,0) 
      GOTO 9000 
3070  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C OUTPUT MARKER FREQUENCY 
C 
3080  IF(SMKZ .EQ. 0.0 .AND. SMHZ .EQ. 0.0) GOTO 3090 
      CALL REIO(100002B,L1,IMBUF(1),ICNT,IDUMY,0) 
3085  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C OUTPUT SWEEP MODE 
C 
3090  CALLREIO(100002B,L1,IOBUF(1),ICNT,IDUMMY,0) 
      GOTO 9000 
3092  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
C 
C 
C 
C CLEAR SRQ 
C 
C 
3095  CALL EXEC(100003B,600B+L1)
      GOTO 9000 
3100  CALL ABREG(IA,IB) 
      IF(IB .LT. 0) GOTO 8500 
      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)=2HSF
      IERR(4)=2HSW
      IERR(5)=2HP 
      RETURN
      END 
      SUBROUTINE FR2A(FHZ,FKHZ,IFREQ),09580-16310 1926 790502 
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-16310 1926 790502 
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$
                                                                                                                                                            