! Instrument Driver for the HP 8644A Signal generator
! Rev. A.00.01
! Copyright (C) Hewlett-Packard Co. 1989, 1994.  All rights reserved.


REVISION 1.00;

INITIALIZE RESET;
ERROR COMPONENT ERROR;

COMPONENT XSTRING;
    TYPE STRING 20;
END COMPONENT;

COMPONENT YSTRING;
    TYPE STRING 20;
END COMPONENT;

COMPONENT DONT_DO_ME;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
END COMPONENT;

COMPONENT RESET NOTSAVED;
    TYPE INTEGER;
    SET ACTIONS;
        CLEAR;
        OUTPUT STRING "*CLS";
        FLUSH;
        OUTPUT STRING "*RST";
        POKEINITIAL;
        GOSUB FM_LIMIT;
        GET DOUBLER_OPT;
        GET LOW_NOISE_OPT;
        GET SYNTH_OPT;
        GET OSC_CAL;
        GOSUB DISP_COND;
        GET STOP_FREQ;
        GET CENTRE_FREQ;
        GET SPAN;
    END ACTIONS;
    PANEL SET ACTIONS;
        HIDE MAIN,AM;
        HIDE MAIN,FM;
        HIDE MAIN,PHASE;
        HIDE MAIN,PULSE;
        HIDE MAIN,OPTION;
        HIDE MAIN,SWEEP;
        HIDE MAIN,STD_SOURCE;
        HIDE MAIN,SYNTH_SOURCE;
        HIDE MAIN,ABOUT;
        HIDE MAIN,STATUS;
        HIDE MAIN,OFFSET;
        HIDE MAIN,MISC;
        SHOW MAIN,CARRIER;
        SHOW MAIN,TOP;
        SHOW CARRIER,LOGAMP;
    END ACTIONS;
END COMPONENT;

COMPONENT CURRENTPANEL NOTSAVED NOGEN NOERRCHECK;
    TYPE DISCRETE;
    VALUES CARRIER,OPTION,AM,FM,PHASE,
    PULSE,SWEEP,STD_SOURCE,SYNTH_SOURCE,OFFSET,MISC,STATUS,ABOUT;
    INITIAL CARRIER;
    PANEL SET ACTIONS;
        HIDE MAIN,CARRIER;
        HIDE MAIN,AM;
        HIDE MAIN,FM;
        HIDE MAIN, PHASE;
        HIDE MAIN,PULSE;
        HIDE MAIN,SWEEP;
        HIDE SWEEP,SWEEPTOP;
        HIDE SWEEP,SWEEP1;
        HIDE SWEEP,SWEEP2;
        HIDE MAIN,STD_SOURCE;
        HIDE MAIN,SYNTH_SOURCE;
        HIDE SYNTH_SOURCE,SOURCETOP;
        HIDE SYNTH_SOURCE,SOURCE1;
        HIDE SYNTH_SOURCE,SOURCE2;
        HIDE SYNTH_SOURCE,AM_SOURCE;
        HIDE SYNTH_SOURCE,FM_SOURCE;
        HIDE SYNTH_SOURCE,PM_SOURCE;
        HIDE SYNTH_SOURCE,PULSE_SOURCE;
        HIDE MAIN,OFFSET;
        HIDE MAIN,MISC;
        HIDE MISC,MISCTOP;
        HIDE MISC,MISC1;
        HIDE MISC,MISC2;
        HIDE MISC,MISC3;
        HIDE MAIN,ABOUT;
        HIDE MAIN,OPTION;
        HIDE MAIN,STATUS;
        SELECT CURRENTPANEL;
        CASE CARRIER;
            SHOW MAIN,CARRIER;
        CASE OPTION;
            SHOW MAIN,OPTION;
        CASE AM;
            SHOW MAIN,AM;
        CASE FM;
            SHOW MAIN,FM;
        CASE PHASE;
            SHOW MAIN, PHASE;
        CASE PULSE;
            SHOW MAIN, PULSE;
        CASE SWEEP;
            FETCH 0;
            STORE SWEEPPANELS;
            SHOW MAIN,SWEEP;
            SHOW SWEEP,SWEEPTOP;
            SHOW SWEEP,SWEEP1;
        CASE STD_SOURCE;
            SHOW MAIN,STD_SOURCE;
        CASE SYNTH_SOURCE;
            FETCH 0;
            STORE SOURCEPANELS;
            SHOW MAIN,SYNTH_SOURCE;
            SHOW SYNTH_SOURCE,SOURCETOP;
            SHOW SYNTH_SOURCE,SOURCE1;
        CASE OFFSET;
            SHOW MAIN,OFFSET;
        CASE MISC;
            FETCH 0;
            STORE MISCPANELS;
            SHOW MAIN,MISC;
            SHOW MISC,MISCTOP;
            SHOW MISC,MISC1;
        CASE STATUS;
            SHOW MAIN,STATUS;
        CASE ELSE;
            SHOW MAIN,ABOUT;
        END SELECT;
    END ACTIONS;
END COMPONENT;

COMPONENT ERROR_STRING NOERRCHECK;
    TYPE STRING 56;
    INITIAL " ";
END COMPONENT;

COMPONENT ERROR NOERRCHECK;
    TYPE INTEGER;
    INITIAL 0;
    GET ACTIONS;
        OUTPUT STRING "SYST:ERR? STR";
        ENTER ERROR FORMAT "#,K";
        ENTER ERROR_STRING FORMAT "K";
    END ACTIONS;
END COMPONENT;


!*************************
!*** OFFSET COMPONENTS ***

COMPONENT FREQUENCY_MULTIPLIER;
    TYPE INTEGER;
    VALUES RANGE 0,10;
    INITIAL 1;
    SET ACTIONS;
        OUTPUT FREQUENCY_MULTIPLIER FORMAT '"FREQUENCY:MULTIPLIER ",K';
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                SET OFFSET_FREQUENCY;
                GOSUB FREQ_LIMITS;
                SET FREQUENCY; SET START_FREQ; SET STOP_FREQ; GET SPAN; GET CENTRE_FREQ; GET FM_DEV;
                SET MARKER1_FREQ; SET MARKER2_FREQ; SET MARKER3_FREQ;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        ELSE;
            GOSUB READ_FREQS;
            GET SPAN;
            GET FM_DEV;
            GOSUB FREQ_LIMITS;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:MULTIPLIER?";
        ENTER FREQUENCY_MULTIPLIER;
    END ACTIONS;
END COMPONENT;


COMPONENT OFFSET_FREQUENCY;
    TYPE CONTINUOUS;
    VALUES RANGE -50E9,50E9;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT OFFSET_FREQUENCY FORMAT '"FREQUENCY:OFFSET ",K,"HZ"';
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                SET FREQUENCY_MULTIPLIER;
                GOSUB FREQ_LIMITS;
                SET FREQUENCY; SET START_FREQ; SET STOP_FREQ;  GET SPAN; GET CENTRE_FREQ;
                SET MARKER1_FREQ; SET MARKER2_FREQ; SET MARKER3_FREQ;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        ELSE;
            GOSUB READ_FREQS;
            GOSUB FREQ_LIMITS;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:OFFSET?";
        ENTER OFFSET_FREQUENCY;
    END ACTIONS;
END COMPONENT;

ACTIONS READ_FREQS;
    GET FREQUENCY;
    GET START_FREQ;
    GET STOP_FREQ;
    GET CENTRE_FREQ;
    GET MARKER1_FREQ;
    GET MARKER2_FREQ;
    GET MARKER3_FREQ;
END ACTIONS;

COMPONENT AMPLITUDE_OFFSET;
    TYPE CONTINUOUS;
    VALUES RANGE -50,50 0.1;
    INITIAL 0;
    COUPLED AMPLITUDE;
    SET ACTIONS;
        GOSUB AMPL_LIMITS;
        OUTPUT AMPLITUDE_OFFSET  FORMAT '"AMPLITUDE:GAIN ",K,"DB"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "AMPLITUDE:GAIN?";
        ENTER AMPLITUDE_OFFSET;
    END ACTIONS;
END COMPONENT;

!*******************************************
!**** CARRIER PANEL COMPONENTS *************

COMPONENT FREQLO;
    TYPE CONTINUOUS;
    INITIAL 251.46485E3;
END COMPONENT;

COMPONENT FREQHI;
    TYPE CONTINUOUS;
    INITIAL 1030E6;
END COMPONENT;

COMPONENT FREQUENCY;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI,  0.01;
    INITIAL 100E6;
    SET ACTIONS;
        GOSUB CHECK_FM;
        IF STACK THEN;
            GET FREQUENCY;
        ELSE;
            OUTPUT FREQUENCY FORMAT '"FREQUENCY:CW ",K,"HZ"';
        END IF;
    END ACTIONS;
    PANEL SET ACTIONS;
        GOSUB FM_LIMIT;
    END ACTIONS;
    PANEL GET ACTIONS;
        GOSUB FM_LIMIT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:CW?";
        ENTER  FREQUENCY;
    END ACTIONS;
END COMPONENT;

COMPONENT DIVIDER NOGEN NOTSAVED;
    TYPE CONTINUOUS;
END COMPONENT;

COMPONENT AMPLO;
    TYPE CONTINUOUS;
    INITIAL -137;
END COMPONENT;

COMPONENT AMPHI;
    TYPE CONTINUOUS;
    INITIAL 19.9;
END COMPONENT;

COMPONENT EMF;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
END COMPONENT;

COMPONENT AMPLITUDE_UNITS;
    TYPE DISCRETE;
    VALUES dBm,dBuV,dB_emf_uV,V,emf_V;
    INITIAL dBm;
    SET ACTIONS;
        !
        ! convert AMPLITUDE, ampLow, and ampHi from OLDUNITS
        !    to AMPLITUDE_UNITS.
        !
        FETCH OLDUNITS;
        FETCH AMPLITUDE_UNITS;
        NE;
        IF STACK THEN;  ! only do this if the units change
            FETCH OLDUNITS;
            STORE FROMUNITS;
            FETCH AMPLITUDE_UNITS;
            STORE TOUNITS;

            FETCH AMPLITUDE;
            GOSUB convertUnits;
            STORE AMPLITUDE;

            FETCH AMPLO;
            GOSUB convertUnits;
            STORE AMPLO;

            FETCH AMPHI;
            GOSUB convertUnits;
            STORE AMPHI;

            FETCH AMPLITUDE_UNITS;
            STORE OLDUNITS;

            OUTPUT AMPLITUDE_UNITS TABLE "POWER:OUT:UNIT DBM","POWER:OUT:UNIT DBuV","POWER:SOURCE:UNIT DBuV",
            "POWER:OUT:UNIT V","POWER:SOURCE:UNIT V";

        END IF;
        IF RECALLING THEN;
            OUTPUT AMPLITUDE_UNITS TABLE "POWER:OUT:UNIT DBM","POWER:OUT:UNIT DBuV","POWER:SOURCE:UNIT DBuV",
            "POWER:OUT:UNIT V","POWER:SOURCE:UNIT V";
            SET AMPLITUDE;
        END IF;
    END ACTIONS;

    PANEL SET ACTIONS;      ! this is the best way to turn NOENGR on and off
        HIDE Carrier, LOGAMP;
        HIDE Carrier, LINAMP;
        SELECT AMPLITUDE_UNITS;
        CASE V;
            SHOW Carrier, LINAMP;
        CASE emf_V;
            SHOW Carrier, LINAMP;
        CASE ELSE;
            SHOW Carrier, LOGAMP;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "POWER:UNIT?";
        ENTER XSTRING FORMAT 'K';
        SELECT XSTRING;
        CASE "DBM";
            FETCH (AMPLITUDE_UNITS)dBm;

        CASE "V";
            IF EMF THEN;
                FETCH (AMPLITUDE_UNITS)emf_V;
            ELSE;
                FETCH (AMPLITUDE_UNITS)V;
            END IF;
        CASE ELSE;
            IF EMF THEN;
                FETCH (AMPLITUDE_UNITS)dB_emf_uV;
            ELSE;
                FETCH (AMPLITUDE_UNITS)dBuV;
            END IF;
        END SELECT;
        STORE AMPLITUDE_UNITS;
    END ACTIONS;
END COMPONENT;

COMPONENT AMPLITUDE;
    TYPE CONTINUOUS;
    VALUES RANGE AMPLO,AMPHI;
    INITIAL -137;
    COUPLED AM_DEPTH;
    SET ACTIONS;
        IF EMF THEN;
            OUTPUT AMPLITUDE FORMAT '"POWER:SOURCE ",K';
        ELSE;
            OUTPUT AMPLITUDE FORMAT '"POWER:OUT ",K';
        END IF;
        OUTPUT AMPLITUDE_UNITS TABLE "DBM","DBuV","DBuV","V","V";

        ! calculate maximum allowable AM_DEPTH with current AMPLITUDE setting.
        !  -->  AM(fract) <= (10**(maxAmplitude - Amplitude)/20)-1
        !

        ! set up the conversion values
        FETCH AMPLITUDE_UNITS;
        STORE FROMUNITS;
        FETCH (AMPLITUDE_UNITS)dBm;
        STORE TOUNITS;

        FETCH 19.9;
        FETCH AMPLITUDE;
        GOSUB convertUnits; ! convert amplitude to dbm.
        SUB;
        FETCH 20;
        DIV;
        EXP10;
        FETCH 1;
        SUB;
        FETCH 100;
        MUL;
        STORE AM_DEPTHMAX;

        FETCH AM_DEPTHMAX;
        FETCH 100;
        GE;
        IF STACK THEN;      ! limit am_depth to max allowed
            FETCH 100;
            STORE AM_DEPTHMAX;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        IF EMF THEN;
            OUTPUT STRING "POWER:SOURCE?";
        ELSE;
            OUTPUT STRING "POWER:OUT?";
        END IF;
        ENTER AMPLITUDE;
    END ACTIONS;
END COMPONENT;

COMPONENT OLDUNITS;
    TYPE DISCRETE;
    VALUES dBm,dBuV,dB_emf_uV,V,emf_V;
END COMPONENT;

COMPONENT FROMUNITS NOTSAVED;
    TYPE DISCRETE;
    VALUES dBm,dBuV,dB_emf_uV,V,emf_V;
END COMPONENT;

COMPONENT TOUNITS NOTSAVED;
    TYPE DISCRETE;
    VALUES dBm,dBuV,dB_emf_uV,V,emf_V;
END COMPONENT;

! convert number from the stack from FROMUNITS to TOUNITS
! convert to units of dBm

ACTIONS convertUnits;
    SELECT FROMUNITS;
    CASE dBm;
    CASE dBuV;          FETCH 107.0;    SUB;
    CASE dB_emf_uV;     FETCH 113.0;    SUB;
    CASE V;             LGT; FETCH 20.0; MUL; FETCH 13.0; ADD;
    CASE ELSE; !emf_V
        LGT; FETCH 20.0; MUL; FETCH 7.0;  ADD;
    END SELECT;
    FETCH(EMF)OFF; STORE EMF;
    !
    ! Convert from dBm to the current units
    !
    SELECT TOUNITS;
    CASE dBm;
    CASE dBuV;          FETCH 107.0;    ADD;
    CASE dB_emf_uV;     FETCH 113.0;    ADD;                     FETCH (EMF)ON; STORE EMF;
    CASE V;             FETCH 13.0; SUB; FETCH 20.0; DIV; EXP10;
    CASE ELSE;!emf_V
        FETCH 7.0;  SUB; FETCH 20.0; DIV; EXP10; FETCH (EMF)ON; STORE EMF;
    END SELECT;
END ACTIONS;

COMPONENT RF_OFF_ON;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT RF_OFF_ON;
        CASE OFF;
            OUTPUT STRING "POWER:STATE OFF";
        CASE ELSE;
            OUTPUT STRING "POWER:STATE ON";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "POWER:STATE?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "0";
            FETCH (RF_OFF_ON)OFF;
        CASE ELSE;
            FETCH (RF_OFF_ON)ON;
        END SELECT;
        STORE RF_OFF_ON;
    END ACTIONS;
END COMPONENT;

COMPONENT MODE;
    TYPE DISCRETE;
    VALUES AUTO,MODE1,MODE2,MODE3;
    INITIAL AUTO;
    COUPLED FM_DEV;
    SET ACTIONS;
        SELECT MODE;
        CASE MODE1;
            OUTPUT STRING "FREQUENCY:SYNTHESIS 1";
        CASE MODE2;
            GOSUB CHECK_FM_DEV;
            IF STACK THEN;
                NOTIFY "FM out of range for mode";
                GET MODE;
            ELSE;
                OUTPUT STRING "FREQUENCY:SYNTHESIS 2";
            END IF;
        CASE MODE3;
            GOSUB CHECK_FM_DEV;
            IF STACK THEN;
                NOTIFY "FM out of range for mode";
                GET MODE;
            ELSE;
                OUTPUT STRING "FREQUENCY:SYNTHESIS 3";
            END IF;
        CASE ELSE;
            OUTPUT STRING "FREQUENCY:SYNTHESIS:AUTO ON";
        END SELECT;
    END ACTIONS;
    PANEL SET ACTIONS;
        GOSUB FM_LIMIT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:SYNTHESIS:AUTO?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "1";
            FETCH (MODE)AUTO;
        CASE ELSE;
            OUTPUT STRING "FREQUENCY:SYNTHESIS?";
            ENTER YSTRING FORMAT "K";
            SELECT YSTRING;
            CASE "1";
                FETCH (MODE)MODE1;
            CASE "2";
                FETCH (MODE)MODE2;
            CASE ELSE;
                FETCH (MODE)MODE3;
            END SELECT;
        END SELECT;
        STORE MODE;
    END ACTIONS;
END COMPONENT;

ACTIONS CHECK_FM;
    IF FM THEN;
        FETCH FM_DEV;
        FETCH 10000E3;
        FETCH FREQUENCY;
        GOSUB GET_DIVIDER;
        DIV;
        SELECT MODE;
        CASE MODE2;
            FETCH 0.1;
        CASE MODE3;
            FETCH 0.01;
        CASE ELSE;
            FETCH 1;
        END SELECT;
        MUL;
        GT;
        IF STACK THEN;
            NOTIFY "Freq setting too low";
            FETCH 1;
        ELSE;
            FETCH FM_DEV;

            FETCH 100;
            FETCH FREQUENCY;
            GOSUB GET_DIVIDER;
            DIV;
            FETCH 1;
            LT;
            IF STACK THEN;
                FETCH 1;
            ELSE;
                FETCH 100;
                FETCH FREQUENCY;
                GOSUB GET_DIVIDER;
                DIV;
            END IF;
            LT;
            IF STACK THEN;
                NOTIFY "Freq setting too high";
                FETCH 1;
            ELSE;
                FETCH 0;
            END IF;
        END IF;
    ELSE;
        FETCH 0;
    END IF;
END ACTIONS;

ACTIONS CHECK_FM_DEV;
    FETCH FM_DEV;
    GOSUB CALC_FMHI;
    GT;
    IF STACK THEN;
        FETCH 1;
    ELSE;
        FETCH FM_DEV;
        GOSUB CALC_FMLO;
        LT;
        IF STACK THEN;
            FETCH 1;
        ELSE;
            FETCH 0;
        END IF;
    END IF;
END ACTIONS;





COMPONENT ALL_MOD;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT ALL_MOD;
        CASE ON;
            OUTPUT STRING "MODULATION:STATE ON";
            GOSUB GET_ALL;
        CASE ELSE;
            OUTPUT STRING "MODULATION:STATE OFF";
            GOSUB ALL_OFF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MODULATION:STATE?";
        ENTER ALL_MOD;
    END ACTIONS;
END COMPONENT;

!***********************************
!*** MODULATION PANEL COMPONENTS ***


COMPONENT AM_SOURCE;
    TYPE DISCRETE;
    VALUES OFF,INTERNAL,EXT_AC,EXT_DC;
    INITIAL INTERNAL;
    SET ACTIONS;
        SELECT AM_SOURCE;
        CASE OFF;
            OUTPUT STRING "AM:COUPLING GROUND";
        CASE INTERNAL;
            OUTPUT STRING "AM:SOURCE INTERNAL;COUPLING AC";
        CASE EXT_AC;
            OUTPUT STRING "AM:SOURCE EXTERNAL;COUPLING AC";
        CASE ELSE;
            OUTPUT STRING "AM:SOURCE EXTERNAL;COUPLING DC";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "AM:COUPLING?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "GRO";
            FETCH (AM_SOURCE)OFF;
        CASE "AC";
            OUTPUT STRING "AM:SOURCE?";
            ENTER YSTRING FORMAT "K";
            SELECT YSTRING;
            CASE "INT";
                FETCH (AM_SOURCE)INTERNAL;
            CASE ELSE;
                FETCH (AM_SOURCE)EXT_AC;
            END SELECT;
        CASE ELSE;
            OUTPUT STRING "AM:SOURCE?";
            ENTER YSTRING FORMAT "K";
            SELECT YSTRING;
            CASE "INT";
                FETCH (AM_SOURCE)INTERNAL;
            CASE ELSE;
                FETCH (AM_SOURCE)EXT_DC;
            END SELECT;
        END SELECT;
        STORE AM_SOURCE;
    END ACTIONS;
END COMPONENT;



COMPONENT AM;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF AM THEN;
            SELECT AM_SOURCE;
            CASE INTERNAL;
                OUTPUT STRING "AM:STATE ON";
                FETCH (AM)ON;
                IF SYNTH_OPT THEN;
                    STORE AUDIO;
                ELSE;
                    STORE STD_LFSOURCE;
                END IF;
            CASE ELSE;
                OUTPUT STRING "AM:STATE ON";
            END SELECT;
            FETCH (ALL_MOD)ON;
            STORE ALL_MOD;
        ELSE;
            OUTPUT STRING "AM:STATE OFF";
            GET ALL_MOD;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "AM:STATE?";
        ENTER AM;
    END ACTIONS;
END COMPONENT;


COMPONENT AM_DEPTHMAX;
    TYPE CONTINUOUS;
    INITIAL 100;
END COMPONENT;

COMPONENT AM_DEPTH;
    TYPE CONTINUOUS;
    VALUES RANGE 0,AM_DEPTHMAX 0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AM_DEPTH FORMAT '"AM:DEPTH ",K,"%"';

        ! calculate maximum allowable power with current am_depth setting.
        !  -->  Amplitude(dBm) <= maxPower(==19.9dBm) - 20*LOG(AM(fract)+1)

        ! set up the conversion values
        FETCH (AMPLITUDE_UNITS)dBm;
        STORE FROMUNITS;
        FETCH AMPLITUDE_UNITS;
        STORE TOUNITS;

        ! calculate the limited amplitude value
        FETCH 19.9;
        FETCH AM_DEPTH;
        FETCH 100;
        DIV;
        FETCH 1;
        ADD;
        LGT;
        FETCH 20;
        MUL;
        SUB;


        GOSUB convertUnits; ! convert new amplitude limit to current units.
        STORE AMPHI;

    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "AM:DEPTH?";
        ENTER AM_DEPTH;
    END ACTIONS;
END COMPONENT;

!***************************
!***** FM COMPONENTS *******

ACTIONS FM_LIMIT;

    FETCH FREQUENCY;
    GOSUB GET_DIVIDER;
    STORE DIVIDER;
    GOSUB CALC_FMHI;
    STORE FM_DEVMAX;
    GOSUB CALC_FMLO;
    STORE FM_DEVMIN;
END ACTIONS;

ACTIONS CALC_FMHI;
    FETCH 10000E3;
    FETCH DIVIDER;
    DIV;
    SELECT MODE;
    CASE MODE2;
        FETCH 0.1;
    CASE MODE3;
        FETCH 0.01;
    CASE ELSE;
        FETCH 1;
    END SELECT;
    MUL;
END ACTIONS;

ACTIONS CALC_FMLO;
    FETCH 100;
    FETCH DIVIDER;
    DIV;
    FETCH 1;
    LT;
    IF STACK THEN;
        FETCH 1;
    ELSE;
        FETCH 100;
        FETCH DIVIDER;
        DIV;
    END IF;
END ACTIONS;

ACTIONS GET_DIVIDER;
    SELECT STACK;
    CASE RANGE 1030E6 2060E6;
        FETCH 0.5;
    CASE RANGE 515E6 1030E6;
        FETCH 1;
    CASE RANGE 257.5E6 515E6;
        FETCH 2;
    CASE RANGE 128.75E6 257.5E6;
        FETCH 4;
    CASE RANGE 64.375E6 128.75E6;
        FETCH 8;
    CASE RANGE 32.1875E6 64.375E6;
        FETCH 16;
    CASE RANGE 16.09375E6 32.1875E6;
        FETCH 32;
    CASE RANGE 8.046875E6 16.09375E6;
        FETCH 64;
    CASE RANGE 4.0234375E6 8.046875E6;
        FETCH 128;
    CASE RANGE 2.01171875E6 4.0234375E6;
        FETCH 256;
    CASE RANGE 1.00585937E6 2.01171875E6;
        FETCH 512;
    CASE RANGE 0.50292968E6 1.00585937E6;
        FETCH 1024;
    CASE RANGE 0.25146485E6 0.50292968E6;
        FETCH 2048;
    END SELECT;
END ACTIONS;

COMPONENT FM_DIG_LIN;
    TYPE DISCRETE;
    VALUES LINEAR,DIGITIZED;
    INITIAL DIGITIZED;
    SET ACTIONS;
        IF FM_DIG_LIN THEN;
            OUTPUT STRING "FM:MODE DIGITIZED";
        ELSE;
            OUTPUT STRING "FM:MODE LINEAR";
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FM:MODE?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "DIG";
            FETCH (FM_DIG_LIN)DIGITIZED;
        CASE ELSE;
            FETCH (FM_DIG_LIN)LINEAR;
        END SELECT;
        STORE FM_DIG_LIN;
    END ACTIONS;
END COMPONENT;

COMPONENT FM_DELAY;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        IF FM_DELAY THEN;
            OUTPUT STRING  "FM:DELAY ON";
        ELSE;
            OUTPUT STRING  "FM:DELAY OFF";
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FM:DELAY?";
        ENTER FM_DELAY;
    END ACTIONS;
END COMPONENT;

COMPONENT PRE_EMPHASIS;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT PRE_EMPHASIS;
        CASE ON;
            OUTPUT STRING "FM:PREEMPHASIS:STATE ON";
        CASE ELSE;
            OUTPUT STRING "FM:PREEMPHASIS:STATE OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FM:PREEMPHASIS:STATE?";
        ENTER PRE_EMPHASIS;
    END ACTIONS;
END COMPONENT;

COMPONENT FM_SOURCE;
    TYPE DISCRETE;
    VALUES OFF,INTERNAL,EXT_AC,EXT_DC,INT_EXT_AC,INT_EXT_DC;
    INITIAL INTERNAL;
    SET ACTIONS;
        SELECT FM_SOURCE;
        CASE OFF;
            OUTPUT STRING "FM:COUPLING GROUND";
        CASE INTERNAL;
            OUTPUT STRING "FM:SOURCE INTERNAL;COUPLING AC";
        CASE EXT_AC;
            OUTPUT STRING "FM:SOURCE EXTERNAL;COUPLING AC";
        CASE EXT_DC;
            OUTPUT STRING "FM:SOURCE EXTERNAL;COUPLING DC";
        CASE INT_EXT_AC;
            OUTPUT STRING "FM:SOURCE INTERNAL,EXTERNAL;COUPLING AC";
        CASE ELSE;
            OUTPUT STRING "FM:SOURCE INTERNAL,EXTERNAL;COUPLING DC";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FM:COUPLING?";
        ENTER XSTRING FORMAT "K";
        OUTPUT STRING "FM:SOURCE?";
        ENTER YSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "GRO";
            FETCH (FM_SOURCE)OFF;
        CASE "AC";
            SELECT YSTRING;
            CASE "EXT";
                FETCH (FM_SOURCE)EXT_AC;
            CASE "INT,EXT";
                FETCH (FM_SOURCE)INT_EXT_AC;
            CASE ELSE;
                FETCH (FM_SOURCE)INTERNAL;
            END SELECT;
        CASE ELSE;
            SELECT YSTRING;
            CASE "EXT";
                FETCH (FM_SOURCE)EXT_DC;
            CASE "INT,EXT";
                FETCH (FM_SOURCE)INT_EXT_DC;
            CASE ELSE;
                FETCH (FM_SOURCE)INTERNAL;
            END SELECT;
        END SELECT;
    END ACTIONS;
END COMPONENT;



COMPONENT FM;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF FM THEN;
            SELECT FM_SOURCE;
            CASE INTERNAL;
                OUTPUT STRING "FM:STATE ON";
                FETCH (FM)ON;
                IF SYNTH_OPT THEN;
                    STORE AUDIO;
                ELSE;
                    STORE STD_LFSOURCE;
                END IF;
            CASE ELSE;
                OUTPUT STRING "FM:STATE ON";
            END SELECT;
            FETCH (ALL_MOD)ON;
            STORE ALL_MOD;
        ELSE;
            OUTPUT STRING "FM:STATE OFF";
            GET ALL_MOD;
        END IF;
        FETCH PM;
        FETCH FM;
        AND;
        IF STACK THEN;
            FETCH (FM)OFF; ! USE FM OFF SINCE PM NOT YET DECLARED
            STORE PM;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FM:STATE?";
        ENTER FM;
    END ACTIONS;
END COMPONENT;



COMPONENT FM_DEVMAX;
    TYPE CONTINUOUS;
    INITIAL 10E6;
END COMPONENT;

COMPONENT FM_DEVMIN;
    TYPE CONTINUOUS;
    INITIAL 200;
END COMPONENT;

COMPONENT FM_DEV;
    TYPE CONTINUOUS;
    VALUES RANGE FM_DEVMIN,FM_DEVMAX 1;
    INITIAL 1E3;
    COUPLED MODE;
    SET ACTIONS;
        OUTPUT FM_DEV FORMAT '"FM:DEV ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FM:DEV?";
        ENTER FM_DEV;
    END ACTIONS;
END COMPONENT;

!************************
!*** PULSE COMPONENTS ***

COMPONENT PULSE;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF PULSE THEN;
            OUTPUT STRING "PULSE:SOURCE EXT;COUPLING DC;STATE ON";
            FETCH (ALL_MOD)ON;
            STORE ALL_MOD;
        ELSE;
            OUTPUT STRING "PULSE:SOURCE EXT;COUPLING GRO;STATE OFF";
            GET ALL_MOD;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "PULSE:STATE?";
        ENTER PULSE;
    END ACTIONS;
END COMPONENT;

!***************************
!***** PM COMPONENTS *******
!

COMPONENT PM_SOURCE;
    TYPE DISCRETE;
    VALUES OFF,INTERNAL,EXT_AC,EXT_DC,INT_EXT_AC,INT_EXT_DC;
    INITIAL INTERNAL;
    SET ACTIONS;
        SELECT PM_SOURCE;
        CASE OFF;
            OUTPUT STRING "PM:COUPLING GROUND";
        CASE INTERNAL;
            OUTPUT STRING "PM:SOURCE INTERNAL;COUPLING AC";
        CASE EXT_AC;
            OUTPUT STRING "PM:SOURCE EXTERNAL;COUPLING AC";
        CASE EXT_DC;
            OUTPUT STRING "PM:SOURCE EXTERNAL;COUPLING DC";
        CASE INT_EXT_AC;
            OUTPUT STRING "PM:SOURCE INTERNAL,EXTERNAL;COUPLING AC";
        CASE ELSE;
            OUTPUT STRING "PM:SOURCE INTERNAL,EXTERNAL;COUPLING DC";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "PM:COUPLING?";
        ENTER XSTRING FORMAT "K";
        OUTPUT STRING "PM:SOURCE?";
        ENTER YSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "GRO";
            FETCH (PM_SOURCE)OFF;
        CASE "AC";
            SELECT YSTRING;
            CASE "EXT";
                FETCH (PM_SOURCE)EXT_AC;
            CASE "INT,EXT";
                FETCH (PM_SOURCE)INT_EXT_AC;
            CASE ELSE;
                FETCH (PM_SOURCE)INTERNAL;
            END SELECT;
        CASE ELSE;
            SELECT YSTRING;
            CASE "EXT";
                FETCH (PM_SOURCE)EXT_DC;
            CASE "INT,EXT";
                FETCH (PM_SOURCE)INT_EXT_DC;
            CASE ELSE;
                FETCH (PM_SOURCE)INTERNAL;
            END SELECT;
        END SELECT;
    END ACTIONS;
END COMPONENT;



COMPONENT PM;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF PM THEN;
            SELECT PM_SOURCE;
            CASE INTERNAL;
                OUTPUT STRING "PM:STATE ON";
                FETCH (PM)ON;
                IF SYNTH_OPT THEN;
                    STORE STD_LFSOURCE;
                ELSE;
                    STORE AUDIO;
                END IF;
            CASE ELSE;
                OUTPUT STRING "PM:STATE ON";
            END SELECT;
            FETCH (ALL_MOD)ON;
            STORE ALL_MOD;
        ELSE;
            OUTPUT STRING "PM:STATE OFF";
        END IF;
        FETCH FM;
        FETCH PM;
        AND;
        IF STACK THEN;
            FETCH (FM)OFF;
            STORE FM;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "PM:STATE?";
        ENTER PM;
    END ACTIONS;
END COMPONENT;



COMPONENT PHASE_INC;
    TYPE INTEGER;
    COUPLED PHASE_ADJUST;
    SET ACTIONS;
        OUTPUT STRING "PHASE:ADJUST UP";
    END ACTIONS;
END COMPONENT;

COMPONENT PHASE_DEC;
    TYPE INTEGER;
    COUPLED PHASE_ADJUST;
    SET ACTIONS;
        OUTPUT STRING "PHASE:ADJUST DOWN";
    END ACTIONS;
END COMPONENT;

COMPONENT PHASE_ADJUST;
    TYPE CONTINUOUS;
    VALUES RANGE -179.9, 180, 0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT PHASE_ADJUST FORMAT '"PHASE:ADJUST ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "PHASE:ADJUST?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE PHASE_ADJUST;
    END ACTIONS;
END COMPONENT;

COMPONENT PHASE_REF;
    TYPE INTEGER;
    COUPLED PHASE_ADJUST;
    SET ACTIONS;
        OUTPUT STRING "PHASE:REFERENCE";
    END ACTIONS;
END COMPONENT;

COMPONENT PHASE_STEP;
    TYPE CONTINUOUS;
    VALUES RANGE 0,180, 0.1;
    INITIAL 1;
    SET ACTIONS;
        OUTPUT PHASE_STEP FORMAT '"PHASE:STEP ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "PHASE:STEP?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE PHASE_STEP;
    END ACTIONS;
END COMPONENT;

!*******************************
!*** OPTION PANEL COMPONENTS ***

COMPONENT LOW_NOISE_OPT;! LOW NOISE 004
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT LOW_NOISE_OPT;
        CASE ON;
            ENABLE MODE,MODE3;
        CASE ELSE;
            DISABLE MODE,MODE3;
        END SELECT;
    END ACTIONS;
    GET ACTIONS Get_options;
END COMPONENT;

COMPONENT DOUBLER_OPT; ! DOUBLER 002
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT DOUBLER_OPT;
        CASE ON;
            FETCH 2060E6;
        CASE ELSE;
            FETCH 1030E6;
        END SELECT;
        STORE FREQHI;
    END ACTIONS;
    GET ACTIONS Get_options;
END COMPONENT;

COMPONENT SYNTH_OPT; ! SYNTHESISED AUDIO OSCILLATOR 007
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT SYNTH_OPT;
        CASE ON;
            DISABLE CURRENTPANEL,STD_SOURCE;
            ENABLE CURRENTPANEL,SYNTH_SOURCE;
        CASE ELSE;
            DISABLE CURRENTPANEL,SYNTH_SOURCE;
            ENABLE CURRENTPANEL,STD_SOURCE;
        END SELECT;
    END ACTIONS;
    GET ACTIONS Get_options;
END COMPONENT;



ACTIONS Get_options;
    IF LIVEMODE THEN;
        OUTPUT STRING "*OPT?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "DOUBLER,COMM_DISCR,SYNTH_AUDIO";
            FETCH (DOUBLER_OPT)ON;
            FETCH (LOW_NOISE_OPT)ON;
            FETCH (SYNTH_OPT)ON;
        CASE "DOUBLER,COMM_DISCR";
            FETCH (DOUBLER_OPT)ON;
            FETCH (LOW_NOISE_OPT)ON;
            FETCH (SYNTH_OPT)OFF;
        CASE "DOUBLER,SYNTH_AUDIO";
            FETCH (DOUBLER_OPT)ON;
            FETCH (LOW_NOISE_OPT)OFF;
            FETCH (SYNTH_OPT)ON;
        CASE "DOUBLER";
            FETCH (DOUBLER_OPT)ON;
            FETCH (LOW_NOISE_OPT)OFF;
            FETCH (SYNTH_OPT)OFF;
        CASE "COMM_DISCR,SYNTH_AUDIO";
            FETCH (DOUBLER_OPT)OFF;
            FETCH (LOW_NOISE_OPT)ON;
            FETCH (SYNTH_OPT)ON;
        CASE "COMM_DISCR";
            FETCH (DOUBLER_OPT)OFF;
            FETCH (LOW_NOISE_OPT)ON;
            FETCH (SYNTH_OPT)OFF;
        CASE "SYNTH_AUDIO";
            FETCH (DOUBLER_OPT)OFF;
            FETCH (LOW_NOISE_OPT)OFF;
            FETCH (SYNTH_OPT)ON;
        CASE ELSE; ! no options or unrecognized option
            FETCH (DOUBLER_OPT)OFF;
            FETCH (LOW_NOISE_OPT)OFF;
            FETCH (SYNTH_OPT)OFF;
        END SELECT;
    ELSE;           ! Not in LIVE mode, allow both options
        FETCH (DOUBLER_OPT)ON;
        FETCH (LOW_NOISE_OPT)ON;
        FETCH (SYNTH_OPT)ON;
    END IF;
    STORE SYNTH_OPT;
    STORE LOW_NOISE_OPT;
    STORE DOUBLER_OPT;

    SET DOUBLER_OPT;
    SET LOW_NOISE_OPT;
    SET SYNTH_OPT;
END ACTIONS;

!*******************************
!*** SOURCE PANEL COMPONENTS ***



COMPONENT KEEP_AUDIO_ON;
    TYPE DISCRETE;
    VALUES OFF,ON;
END COMPONENT;

COMPONENT STD_LFSOURCE;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT STD_LFSOURCE;
        CASE ON;
            OUTPUT STRING "LFSOURCE:STATE ON";
        CASE ELSE;
            FETCH (KEEP_AUDIO_ON)OFF;
            STORE KEEP_AUDIO_ON;
            IF AM THEN;
                SELECT AM_SOURCE;
                CASE INTERNAL;
                    FETCH (KEEP_AUDIO_ON)ON;
                    STORE KEEP_AUDIO_ON;
                CASE ELSE;
                END SELECT;
            END IF;
            IF FM THEN;
                SELECT FM_SOURCE;
                CASE OFF;
                CASE EXT_AC;
                CASE EXT_DC;
                CASE ELSE;
                    FETCH (KEEP_AUDIO_ON)ON;
                    STORE KEEP_AUDIO_ON;
                END SELECT;
            END IF;
            IF PM THEN;
                SELECT PM_SOURCE;
                CASE OFF;
                CASE EXT_AC;
                CASE EXT_DC;
                CASE ELSE;
                    FETCH (KEEP_AUDIO_ON)ON;
                    STORE KEEP_AUDIO_ON;
                END SELECT;
            END IF;
            IF KEEP_AUDIO_ON THEN;
                NOTIFY "INT Modulation Enabled";
                FETCH (STD_LFSOURCE)ON;
                STORE STD_LFSOURCE;
            ELSE;
                OUTPUT STRING "LFSOURCE:STATE OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:STATE?";
        ENTER STD_LFSOURCE;
    END ACTIONS;
END COMPONENT;

COMPONENT STD_LFSOURCE_FREQ;
    TYPE DISCRETE;
    VALUES Hz300,Hz400,KHz1,KHz3;
    INITIAL KHz1;
    SET ACTIONS;
        SELECT STD_LFSOURCE_FREQ;
        CASE KHz3;
            OUTPUT STRING "LFSOURCE:FREQUENCY 3KHZ";
        CASE KHz1;
            OUTPUT STRING "LFSOURCE:FREQUENCY 1KHZ";
        CASE Hz400;
            OUTPUT STRING "LFSOURCE:FREQUENCY 400HZ";
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:FREQUENCY 300HZ";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FREQUENCY?";
        ENTER XSTRING;
        SELECT XSTRING;
        CASE "3.000E+03";
            FETCH (STD_LFSOURCE_FREQ)KHz3;
        CASE "1.000E+03";
            FETCH (STD_LFSOURCE_FREQ)KHz1;
        CASE "400.0E+00";
            FETCH (STD_LFSOURCE_FREQ)Hz400;
        CASE ELSE;
            FETCH (STD_LFSOURCE_FREQ)Hz300;
        END SELECT;
    END ACTIONS;
END COMPONENT;

COMPONENT STD_LFSOURCE_LEVEL;
    TYPE CONTINUOUS;
    VALUES RANGE 0,2;
    INITIAL 1;
    SET ACTIONS;
        OUTPUT STD_LFSOURCE_LEVEL FORMAT '"LFSOURCE:LEVEL ",K,"V"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:LEVEL?";
        ENTER STD_LFSOURCE_LEVEL;
    END ACTIONS;
END COMPONENT;

COMPONENT SOURCEPANELS  NOTSAVED NOGEN NOERRCHECK;
    TYPE DISCRETE;
    VALUES SOURCE1,SOURCE2,AM_SOURCE,FM_SOURCE,
    PM_SOURCE,PULSE_SOURCE;
    INITIAL SOURCE1;
    PANEL SET ACTIONS;
        HIDE SYNTH_SOURCE,SOURCE1;
        HIDE SYNTH_SOURCE,SOURCE2;
        HIDE SYNTH_SOURCE,AM_SOURCE;
        HIDE SYNTH_SOURCE,FM_SOURCE;
        HIDE SYNTH_SOURCE,PM_SOURCE;
        HIDE SYNTH_SOURCE,PULSE_SOURCE;
        SHOW SYNTH_SOURCE,SOURCETOP;
        SELECT SOURCEPANELS;
        CASE SOURCE1;
            SHOW SYNTH_SOURCE,SOURCE1;
        CASE SOURCE2;
            SHOW SYNTH_SOURCE,SOURCE2;
        CASE AM_SOURCE;
            SHOW SYNTH_SOURCE,AM_SOURCE;
        CASE FM_SOURCE;
            SHOW SYNTH_SOURCE,FM_SOURCE;
        CASE PM_SOURCE;
            SHOW SYNTH_SOURCE,PM_SOURCE;
        CASE ELSE; ! PULSE_SOURCE;
            SHOW SYNTH_SOURCE,PULSE_SOURCE;
        END SELECT;
    END ACTIONS;
END COMPONENT;


ACTIONS CHECK_SOURCES;
    FETCH AUDIO2;
    FETCH AUDIO_AM;
    ADD;
    FETCH AUDIO_FM;
    ADD;
    FETCH AUDIO_PM;
    ADD;
    FETCH AUDIO_PULSE;
    ADD;
    FETCH 3;
    GT;
    IF STACK THEN;
        NOTIFY "Too many audio sources";
        FETCH 0;
    ELSE;
        FETCH 1;
    END IF;
END ACTIONS;

COMPONENT AUDIO;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT AUDIO;
        CASE ON;
            IF RECALLING THEN;
                IF DONT_DO_ME THEN;
                ELSE;
                    FETCH (DONT_DO_ME)ON;
                    STORE DONT_DO_ME;
                    OUTPUT STRING "LFSOURCE:STATE OFF;STATE2 OFF;AM:STATE OFF";
                    SET AUDIO1_LEVEL; SET AUDIO2_LEVEL; SET AUDIO_AM_DEPTH;
                    SET AUDIO2;       SET AUDIO_AM;
                    FETCH (DONT_DO_ME)OFF;
                    STORE DONT_DO_ME;
                END IF;
            END IF;
            GOSUB CHECK_SOURCES;
            IF STACK THEN;
                FETCH AUDIO2;
                FETCH AUDIO_AM;
                OR;
                IF STACK THEN;
                    FETCH AUDIO1_LEVEL;
                    IF AUDIO2 THEN;
                        FETCH AUDIO2_LEVEL;
                        ADD;
                    END IF;
                    IF AUDIO_AM THEN;
                        DUP;
                        FETCH AUDIO_AM_DEPTH;
                        FETCH 100;
                        DIV;
                        MUL;
                        ADD;
                    END IF;
                    FETCH 2;
                    GT;
                    IF STACK THEN;
                        NOTIFY "AUDIO LEVEL CONFLICT";
                        FETCH (AUDIO)OFF;
                        STORE AUDIO;
                    ELSE;
                        OUTPUT STRING "LFSOURCE:STATE ON";
                    END IF;
                ELSE;
                    OUTPUT STRING "LFSOURCE:STATE ON";
                END IF;
            ELSE;
                FETCH (AUDIO)OFF;
                STORE AUDIO;
            END IF;
        CASE ELSE;
            FETCH (KEEP_AUDIO_ON)OFF;
            STORE KEEP_AUDIO_ON;
            IF AM THEN;
                SELECT AM_SOURCE;
                CASE INTERNAL;
                    FETCH (KEEP_AUDIO_ON)ON;
                    STORE KEEP_AUDIO_ON;
                CASE ELSE;
                END SELECT;
            END IF;
            IF FM THEN;
                SELECT FM_SOURCE;
                CASE OFF;
                CASE EXT_AC;
                CASE EXT_DC;
                CASE ELSE;
                    FETCH (KEEP_AUDIO_ON)ON;
                    STORE KEEP_AUDIO_ON;
                END SELECT;
            END IF;
            IF PM THEN;
                SELECT PM_SOURCE;
                CASE OFF;
                CASE EXT_AC;
                CASE EXT_DC;
                CASE ELSE;
                    FETCH (KEEP_AUDIO_ON)ON;
                    STORE KEEP_AUDIO_ON;
                END SELECT;
            END IF;
            IF KEEP_AUDIO_ON THEN;
                FETCH (AUDIO)ON;
                STORE AUDIO;
                NOTIFY "INT Modulation Enabled";
                FETCH (AUDIO)ON;
                STORE AUDIO;
            ELSE;
                OUTPUT STRING "LFSOURCE:STATE OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:STATE?";
        ENTER AUDIO;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO1_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE 0.1,400E3;
    INITIAL 1E3;
    SET ACTIONS;
        OUTPUT AUDIO1_FREQ FORMAT '"LFSOURCE:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FREQUENCY?";
        ENTER AUDIO1_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO2;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT AUDIO2;
        CASE ON;
            IF RECALLING THEN;
                IF DONT_DO_ME THEN;
                ELSE;
                    FETCH (DONT_DO_ME)ON;
                    STORE DONT_DO_ME;
                    OUTPUT STRING "LFSOURCE:STATE OFF;STATE2 OFF;AM:STATE OFF";
                    SET AUDIO1_LEVEL;  SET AUDIO2_LEVEL; SET AUDIO_AM_DEPTH;
                    SET AUDIO;                           SET AUDIO_AM;
                    FETCH (DONT_DO_ME)OFF;
                    STORE DONT_DO_ME;
                END IF;
            END IF;
            IF AUDIO THEN;
                GOSUB CHECK_SOURCES;
            ELSE;
                FETCH 1;
            END IF;
            IF STACK THEN;
                FETCH AUDIO;
                FETCH AUDIO_AM;
                OR;
                IF STACK THEN;
                    FETCH AUDIO2_LEVEL;
                    IF AUDIO THEN;
                        FETCH AUDIO1_LEVEL;
                        ADD;
                    END IF;
                    IF AUDIO_AM THEN;
                        IF AUDIO_AM_DEPTH THEN;
                            DUP;
                            FETCH AUDIO_AM_DEPTH;
                            FETCH 100;
                            DIV;
                            MUL;
                            ADD;
                        END IF;
                    END IF;
                    FETCH 2;
                    GT;
                    IF STACK THEN;
                        NOTIFY "AUDIO LEVEL CONFLICT";
                        FETCH (AUDIO2)OFF;
                        STORE AUDIO2;
                    ELSE;
                        OUTPUT STRING "LFSOURCE:STATE2 ON";
                    END IF;
                ELSE;
                    OUTPUT STRING "LFSOURCE:STATE2 ON";
                END IF;
            ELSE;
                FETCH (AUDIO2)OFF;
                STORE AUDIO2;
            END IF;
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:STATE2 OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:STATE2?";
        ENTER AUDIO2;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO1_LEVEL;
    TYPE CONTINUOUS;
    VALUES RANGE 0,2;
    INITIAL 2;
    SET ACTIONS;
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                OUTPUT STRING "LFSOURCE:STATE OFF;STATE2 OFF;AM:STATE OFF";
                SET AUDIO2_LEVEL; SET AUDIO_AM_DEPTH;
                SET AUDIO;       SET AUDIO2;       SET AUDIO_AM;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        END IF;
        IF AUDIO THEN;
            FETCH AUDIO2;
            FETCH AUDIO_AM;
            OR;
            IF STACK THEN;
                FETCH AUDIO1_LEVEL;
                IF AUDIO2 THEN;
                    FETCH AUDIO2_LEVEL;
                    ADD;
                END IF;
                IF AUDIO_AM THEN;
                    DUP;
                    FETCH AUDIO_AM_DEPTH;
                    FETCH 100;
                    DIV;
                    MUL;
                    ADD;
                END IF;
                FETCH 2;
                GT;
                IF STACK THEN;
                    NOTIFY "AUDIO LEVEL CONFLICT";
                    FETCH 0;
                    STORE AUDIO1_LEVEL;
                ELSE;
                    OUTPUT AUDIO1_LEVEL FORMAT '"LFSOURCE:LEVEL ",K,"V"';
                END IF;
            ELSE;
                OUTPUT AUDIO1_LEVEL FORMAT '"LFSOURCE:LEVEL ",K,"V"';
            END IF;
        ELSE;
            OUTPUT AUDIO1_LEVEL FORMAT '"LFSOURCE:LEVEL ",K,"V"';
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:LEVEL?";
        ENTER AUDIO1_LEVEL;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO1_WAVE;
    TYPE DISCRETE;
    VALUES SIN,SQU,TRI,SAW,WGN;
    INITIAL SIN;
    SET ACTIONS;
        SELECT AUDIO1_WAVE;
        CASE WGN;
            OUTPUT STRING "LFSOURCE:WAVEFORM WGNOISE";
        CASE SQU;
            OUTPUT STRING "LFSOURCE:WAVEFORM SQUARE";
        CASE TRI;
            OUTPUT STRING "LFSOURCE:WAVEFORM TRIANGLE";
        CASE SAW;
            OUTPUT STRING "LFSOURCE:WAVEFORM SAWTOOTH";
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:WAVEFORM SIN";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:WAVEFORM?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "WGN";
            FETCH (AUDIO1_WAVE)WGN;
        CASE "SQU";
            FETCH (AUDIO1_WAVE)SQU;
        CASE "TRI";
            FETCH (AUDIO1_WAVE)TRI;
        CASE "SAWT";
            FETCH (AUDIO1_WAVE)SAW;
        CASE ELSE;
            FETCH (AUDIO1_WAVE)SIN;
        END SELECT;
        STORE AUDIO1_WAVE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO2_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE 0.1,400E3;
    INITIAL 400;
    SET ACTIONS;
        OUTPUT AUDIO2_FREQ FORMAT '"LFSOURCE:FREQUENCY2 ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FREQUENCY2?";
        ENTER AUDIO2_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO2_LEVEL;
    TYPE CONTINUOUS;
    VALUES RANGE 0,2;
    INITIAL 0.1;
    SET ACTIONS;
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                OUTPUT STRING "LFSOURCE:STATE OFF;STATE2 OFF;AM:STATE OFF";
                SET AUDIO1_LEVEL;                  SET AUDIO_AM_DEPTH;
                SET AUDIO;       SET AUDIO2;       SET AUDIO_AM;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        END IF;
        IF AUDIO2 THEN;
            FETCH AUDIO;
            FETCH AUDIO_AM;
            OR;
            IF STACK THEN;
                FETCH AUDIO2_LEVEL;
                IF AUDIO THEN;
                    FETCH AUDIO1_LEVEL;
                    ADD;
                END IF;
                IF AUDIO_AM THEN;
                    DUP;
                    FETCH AUDIO_AM_DEPTH;
                    FETCH 100;
                    DIV;
                    MUL;
                    ADD;
                END IF;
                FETCH 2;
                GT;
                IF STACK THEN;
                    NOTIFY "AUDIO LEVEL CONFLICT";
                    FETCH 0;
                    STORE AUDIO2_LEVEL;
                ELSE;
                    OUTPUT AUDIO2_LEVEL FORMAT '"LFSOURCE:LEVEL2 ",K,"V"';
                END IF;
            ELSE;
                OUTPUT AUDIO2_LEVEL FORMAT '"LFSOURCE:LEVEL2 ",K,"V"';
            END IF;
        ELSE;
            OUTPUT AUDIO2_LEVEL FORMAT '"LFSOURCE:LEVEL2 ",K,"V"';
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:LEVEL2?";
        ENTER AUDIO2_LEVEL;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO2_WAVE;
    TYPE DISCRETE;
    VALUES SIN,SQU,TRI,SAW,WGN;
    INITIAL SIN;
    SET ACTIONS;
        SELECT AUDIO2_WAVE;
        CASE WGN;
            OUTPUT STRING "LFSOURCE:WAVEFORM2 WGNOISE";
        CASE SQU;
            OUTPUT STRING "LFSOURCE:WAVEFORM2 SQUARE";
        CASE TRI;
            OUTPUT STRING "LFSOURCE:WAVEFORM2 TRIANGLE";
        CASE SAW;
            OUTPUT STRING "LFSOURCE:WAVEFORM2 SAWTOOTH";
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:WAVEFORM2 SIN";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:WAVEFORM2?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "WGN";
            FETCH (AUDIO2_WAVE)WGN;
        CASE "SQU";
            FETCH (AUDIO2_WAVE)SQU;
        CASE "TRI";
            FETCH (AUDIO2_WAVE)TRI;
        CASE "SAWT";
            FETCH (AUDIO2_WAVE)SAW;
        CASE ELSE;
            FETCH (AUDIO2_WAVE)SIN;
        END SELECT;
        STORE AUDIO2_WAVE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO2_PHASE;
    TYPE CONTINUOUS;
    VALUES RANGE -179,180  0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO2_PHASE FORMAT '"LFSOURCE:PHASE2 ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PHASE2?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE AUDIO2_PHASE;
    END ACTIONS;
END COMPONENT;

COMPONENT ENTERED_PHASE;
    TYPE CONTINUOUS;
END COMPONENT;

ACTIONS CONVERT_TO_DEGREES;
    FETCH 180;
    FETCH 3.14159265359;
    DIV;
    FETCH ENTERED_PHASE;
    MUL;
END ACTIONS;





COMPONENT AUDIO_AM;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT AUDIO_AM;
        CASE ON;
            IF RECALLING THEN;
                IF DONT_DO_ME THEN;
                ELSE;
                    FETCH (DONT_DO_ME)ON;
                    STORE DONT_DO_ME;
                    OUTPUT STRING "LFSOURCE:STATE OFF;STATE2 OFF;AM:STATE OFF";
                    SET AUDIO1_LEVEL; SET AUDIO2_LEVEL; SET AUDIO_AM_DEPTH;
                    SET AUDIO;        SET AUDIO2;
                    FETCH (DONT_DO_ME)OFF;
                    STORE DONT_DO_ME;
                END IF;
            END IF;
            IF AUDIO THEN;
                GOSUB CHECK_SOURCES;
            ELSE;
                FETCH 1;
            END IF;
            IF STACK THEN;
                FETCH AUDIO;
                FETCH AUDIO2;
                OR;
                IF STACK THEN;
                    IF AUDIO THEN;
                        FETCH AUDIO1_LEVEL;
                    END IF;
                    IF AUDIO2 THEN;
                        FETCH AUDIO2_LEVEL;
                        IF AUDIO THEN;
                            ADD;
                        END IF;
                    END IF;
                    DUP;
                    FETCH AUDIO_AM_DEPTH;
                    FETCH 100;
                    DIV;
                    MUL;
                    ADD;
                    FETCH 2;
                    GT;
                    IF STACK THEN;
                        NOTIFY "AUDIO/AM LEVEL CONFLICT";
                        FETCH (AUDIO_AM)OFF;
                        STORE AUDIO_AM;
                    ELSE;
                        OUTPUT STRING "LFSOURCE:AM:STATE ON";
                    END IF;
                ELSE;
                    OUTPUT STRING "LFSOURCE:AM:STATE ON";
                END IF;
            ELSE;
                FETCH (AUDIO_AM)OFF;
                STORE AUDIO_AM;
            END IF;
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:AM:STATE OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:AM:STATE?";
        ENTER AUDIO_AM;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_AM_DEPTH;
    TYPE CONTINUOUS;
    VALUES RANGE 0,100;
    INITIAL 0;
    SET ACTIONS;
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                OUTPUT STRING "LFSOURCE:STATE OFF;STATE2 OFF;AM:STATE OFF";
                SET AUDIO1_LEVEL; SET AUDIO2_LEVEL;
                SET AUDIO;       SET AUDIO2;       SET AUDIO_AM;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        END IF;
        IF AUDIO_AM THEN;
            FETCH AUDIO;
            FETCH AUDIO2;
            OR;
            IF STACK THEN;
                IF AUDIO THEN;
                    FETCH AUDIO1_LEVEL;
                END IF;
                IF AUDIO2 THEN;
                    FETCH AUDIO2_LEVEL;
                    IF AUDIO THEN;
                        ADD;
                    END IF;
                END IF;
                DUP;
                FETCH AUDIO_AM_DEPTH;
                FETCH 100;
                DIV;
                MUL;
                ADD;
                FETCH 2;
                GT;
                IF STACK THEN;
                    NOTIFY "AUDIO/AM LEVEL CONFLICT";
                    FETCH 0;
                    STORE AUDIO_AM_DEPTH;
                ELSE;
                    OUTPUT AUDIO_AM_DEPTH FORMAT '"LFSOURCE:AM:DEPTH ",K,"%"';
                END IF;
            ELSE;
                OUTPUT AUDIO_AM_DEPTH FORMAT '"LFSOURCE:AM:DEPTH ",K,"%"';
            END IF;
        ELSE;
            OUTPUT AUDIO_AM_DEPTH FORMAT '"LFSOURCE:AM:DEPTH ",K,"%"';
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:AM:DEPTH?";
        ENTER AUDIO_AM_DEPTH;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_AM_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE 0.1,400E3;
    INITIAL 100;
    SET ACTIONS;
        OUTPUT AUDIO_AM_FREQ FORMAT '"LFSOURCE:AM:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:AM:FREQUENCY?";
        ENTER AUDIO_AM_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_AM_WAVE;
    TYPE DISCRETE;
    VALUES SIN,SQU,TRI,SAW,WGN;
    INITIAL SIN;
    SET ACTIONS;
        SELECT AUDIO_AM_WAVE;
        CASE WGN;
            OUTPUT STRING "LFSOURCE:AM:WAVEFORM WGNOISE";
        CASE SQU;
            OUTPUT STRING "LFSOURCE:AM:WAVEFORM SQUARE";
        CASE TRI;
            OUTPUT STRING "LFSOURCE:AM:WAVEFORM TRIANGLE";
        CASE SAW;
            OUTPUT STRING "LFSOURCE:AM:WAVEFORM SAWTOOTH";
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:AM:WAVEFORM SIN";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:AM:WAVEFORM?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "WGN";
            FETCH (AUDIO_AM_WAVE)WGN;
        CASE "SQU";
            FETCH (AUDIO_AM_WAVE)SQU;
        CASE "TRI";
            FETCH (AUDIO_AM_WAVE)TRI;
        CASE "SAWT";
            FETCH (AUDIO_AM_WAVE)SAW;
        CASE ELSE;
            FETCH (AUDIO_AM_WAVE)SIN;
        END SELECT;
        STORE AUDIO_AM_WAVE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_AM_PHASE;
    TYPE CONTINUOUS;
    VALUES  RANGE -179,180  0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO_AM_PHASE FORMAT '"LFSOURCE:AM:PHASE ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:AM:PHASE?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE AUDIO_AM_PHASE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_FM;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT AUDIO_FM;
        CASE ON;
            IF AUDIO THEN;
                GOSUB CHECK_SOURCES;
            ELSE;
                FETCH 1;
            END IF;
            IF STACK THEN;
                OUTPUT STRING "LFSOURCE:FM:STATE ON";
            ELSE;
                FETCH (AUDIO_FM)OFF;
                STORE AUDIO_FM;
            END IF;
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:FM:STATE OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FM:STATE?";
        ENTER AUDIO_FM;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_FM_DEV;
    TYPE CONTINUOUS;
    VALUES RANGE 0,400E3;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO_FM_DEV FORMAT '"LFSOURCE:FM:DEVIATION ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FM:DEVIATION?";
        ENTER AUDIO_FM_DEV;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_FM_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE 0.1,400E3;
    INITIAL 100;
    SET ACTIONS;
        OUTPUT AUDIO_FM_FREQ FORMAT '"LFSOURCE:FM:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FM:FREQUENCY?";
        ENTER AUDIO_FM_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_FM_WAVE;
    TYPE DISCRETE;
    VALUES SIN,SQU,TRI,SAW,WGN;
    INITIAL SIN;
    SET ACTIONS;
        SELECT AUDIO_FM_WAVE;
        CASE WGN;
            OUTPUT STRING "LFSOURCE:FM:WAVEFORM WGNOISE";
        CASE SQU;
            OUTPUT STRING "LFSOURCE:FM:WAVEFORM SQUARE";
        CASE TRI;
            OUTPUT STRING "LFSOURCE:FM:WAVEFORM TRIANGLE";
        CASE SAW;
            OUTPUT STRING "LFSOURCE:FM:WAVEFORM SAWTOOTH";
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:FM:WAVEFORM SIN";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FM:WAVEFORM?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "WGN";
            FETCH (AUDIO_FM_WAVE)WGN;
        CASE "SQU";
            FETCH (AUDIO_FM_WAVE)SQU;
        CASE "TRI";
            FETCH (AUDIO_FM_WAVE)TRI;
        CASE "SAWT";
            FETCH (AUDIO_FM_WAVE)SAW;
        CASE ELSE;
            FETCH (AUDIO_FM_WAVE)SIN;
        END SELECT;
        STORE AUDIO_FM_WAVE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_FM_PHASE;
    TYPE CONTINUOUS;
    VALUES RANGE -179,180  0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO_FM_PHASE FORMAT '"LFSOURCE:FM:PHASE ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:FM:PHASE?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE AUDIO_FM_PHASE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PM;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT AUDIO_PM;
        CASE ON;
            IF AUDIO THEN;
                GOSUB CHECK_SOURCES;
            ELSE;
                FETCH 1;
            END IF;
            IF STACK THEN;
                OUTPUT STRING "LFSOURCE:PM:STATE ON";
            ELSE;
                FETCH (AUDIO_PM)OFF;
                STORE AUDIO_PM;
            END IF;
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:PM:STATE OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PM:STATE?";
        ENTER AUDIO_PM;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PM_DEV;
    TYPE CONTINUOUS;
    VALUES RANGE 0,179.9 0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO_PM_DEV FORMAT '"LFSOURCE:PM:DEVIATION ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PM:DEVIATION?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE AUDIO_PM_DEV;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PM_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE 0.1,400E3;
    INITIAL 100;
    SET ACTIONS;
        OUTPUT AUDIO_PM_FREQ FORMAT '"LFSOURCE:PM:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PM:FREQUENCY?";
        ENTER AUDIO_PM_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PM_WAVE;
    TYPE DISCRETE;
    VALUES SIN,SQU,TRI,SAW,WGN;
    INITIAL SIN;
    SET ACTIONS;
        SELECT AUDIO_PM_WAVE;
        CASE WGN;
            OUTPUT STRING "LFSOURCE:PM:WAVEFORM WGNOISE";
        CASE SQU;
            OUTPUT STRING "LFSOURCE:PM:WAVEFORM SQUARE";
        CASE TRI;
            OUTPUT STRING "LFSOURCE:PM:WAVEFORM TRIANGLE";
        CASE SAW;
            OUTPUT STRING "LFSOURCE:PM:WAVEFORM SAWTOOTH";
        CASE ELSE;
            OUTPUT STRING "LFSOURCE:PM:WAVEFORM SIN";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PM:WAVEFORM?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "WGN";
            FETCH (AUDIO_PM_WAVE)WGN;
        CASE "SQU";
            FETCH (AUDIO_PM_WAVE)SQU;
        CASE "TRI";
            FETCH (AUDIO_PM_WAVE)TRI;
        CASE "SAWT";
            FETCH (AUDIO_PM_WAVE)SAW;
        CASE ELSE;
            FETCH (AUDIO_PM_WAVE)SIN;
        END SELECT;
        STORE AUDIO_PM_WAVE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PM_PHASE;
    TYPE CONTINUOUS;
    VALUES RANGE -179,180  0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO_PM_PHASE FORMAT '"LFSOURCE:PM:PHASE ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PM:PHASE?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE AUDIO_PM_PHASE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PULSE;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT AUDIO_PULSE;
        CASE ON;
            IF AUDIO THEN;
                GOSUB CHECK_SOURCES;
            ELSE;
                FETCH 1;
            END IF;
            IF STACK THEN;
                OUTPUT STRING  "LFSOURCE:PULSE:STATE ON";
            ELSE;
                FETCH (AUDIO_PULSE)OFF;
                STORE AUDIO_PULSE;
            END IF;
        CASE ELSE;
            OUTPUT STRING  "LFSOURCE:PULSE:STATE OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PULSE:STATE?";
        ENTER AUDIO_PULSE;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PULSE_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE 0.1,50E3;
    INITIAL 100;
    SET ACTIONS;
        OUTPUT AUDIO_PULSE_FREQ FORMAT '"LFSOURCE:PULSE:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PULSE:FREQUENCY?";
        ENTER AUDIO_PULSE_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT AUDIO_PULSE_PHASE;
    TYPE CONTINUOUS;
    VALUES RANGE -179,180  0.1;
    INITIAL 0;
    SET ACTIONS;
        OUTPUT AUDIO_PULSE_PHASE FORMAT '"LFSOURCE:PULSE:PHASE ",K,"DEG"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "LFSOURCE:PULSE:PHASE?";
        ENTER ENTERED_PHASE;
        GOSUB CONVERT_TO_DEGREES;
        STORE AUDIO_PULSE_PHASE;
    END ACTIONS;
END COMPONENT;

!*************************
!*** SWEEP COMPONENTS ****

COMPONENT SWEEPPANELS  NOTSAVED NOGEN NOERRCHECK;
    TYPE DISCRETE;
    VALUES SWEEP1,SWEEP2;
    INITIAL SWEEP1;
    PANEL SET ACTIONS;
        HIDE SWEEP,SWEEP1;
        HIDE SWEEP,SWEEP2;
        SHOW SWEEP,SWEEPTOP;
        SELECT SWEEPPANELS;
        CASE SWEEP1;
            SHOW SWEEP,SWEEP1;
        CASE ELSE;
            SHOW SWEEP,SWEEP2;
        END SELECT;
    END ACTIONS;
END COMPONENT;

COMPONENT START_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI  0.01;
    INITIAL 251.46486E3;
    SET ACTIONS;
        OUTPUT START_FREQ FORMAT '"FREQUENCY:START ",K,"HZ"';
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                SET STOP_FREQ; GET SPAN; GET CENTRE_FREQ;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        ELSE;
            FETCH START_FREQ;
            FETCH STOP_FREQ;
            GE;
            IF STACK THEN;
                FETCH START_FREQ;
                STORE STOP_FREQ;
            END IF;
            GOSUB UPDATE_CENTRE;
            GOSUB UPDATE_SPAN;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:START?";
        ENTER START_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT STOP_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI  0.01;
    INITIAL 1030E6;
    SET ACTIONS;
        IF RECALLING THEN;
            IF DONT_DO_ME THEN;
            ELSE;
                FETCH (DONT_DO_ME)ON;
                STORE DONT_DO_ME;
                SET START_FREQ; GET SPAN; GET CENTRE_FREQ;
                FETCH (DONT_DO_ME)OFF;
                STORE DONT_DO_ME;
            END IF;
        ELSE;
            OUTPUT STOP_FREQ FORMAT '"FREQUENCY:STOP ",K,"HZ"';
            FETCH STOP_FREQ;
            FETCH START_FREQ;
            LT;
            IF STACK THEN;
                FETCH STOP_FREQ;
                STORE START_FREQ;
            END IF;
            GOSUB UPDATE_CENTRE;
            GOSUB UPDATE_SPAN;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:STOP?";
        ENTER STOP_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT CENTRE_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI 0.01;
    SET ACTIONS;
        IF RECALLING THEN;
            OUTPUT CENTRE_FREQ FORMAT '"FREQUENCY:CENTER ",K,"HZ"';
        ELSE;
            FETCH SPAN;
            FETCH 2;
            DIV;
            FETCH CENTRE_FREQ;
            ADD;
            FETCH FREQHI;
            GT;
            IF STACK THEN;
                NOTIFY "CENTRE FREQ TOO HIGH";
                FETCH 0;
            ELSE;
                FETCH CENTRE_FREQ;
                FETCH SPAN;
                FETCH 2;
                DIV;
                SUB;
                FETCH FREQLO;
                LT;
                IF STACK THEN;
                    NOTIFY "CENTRE FREQ TOO LOW";
                    FETCH 0;
                ELSE;
                    FETCH 1;
                END IF;
            END IF;
            IF STACK THEN;
                OUTPUT CENTRE_FREQ FORMAT '"FREQUENCY:CENTER ",K,"HZ"';
                GOSUB UPDATE_START;
                GOSUB UPDATE_STOP;
            ELSE;
                GET CENTRE_FREQ;
            END IF;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:CENTER?";
        ENTER CENTRE_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT SPAN;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI   0.01;
    SET ACTIONS;
        IF RECALLING THEN;
            OUTPUT SPAN FORMAT '"FREQUENCY:SPAN ",K,"HZ"';
        ELSE;
            FETCH SPAN;
            FETCH 2;
            DIV;
            FETCH CENTRE_FREQ;
            ADD;
            FETCH FREQHI;
            GT;
            IF STACK THEN;
                NOTIFY "SPAN TOO LARGE..stop>FREQHI";
                FETCH 0;
            ELSE;
                FETCH CENTRE_FREQ;
                FETCH SPAN;
                FETCH 2;
                DIV;
                SUB;
                FETCH FREQLO;
                LT;
                IF STACK THEN;
                    NOTIFY "SPAN TOO LARGE..start<FREQLO";
                    FETCH 0;
                ELSE;
                    FETCH 1;
                END IF;
            END IF;
            IF STACK THEN;
                OUTPUT SPAN FORMAT '"FREQUENCY:SPAN ",K,"HZ"';
                GOSUB UPDATE_START;
                GOSUB UPDATE_STOP;
            ELSE;
                GET SPAN;
            END IF;
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "FREQUENCY:SPAN?";
        ENTER SPAN;
    END ACTIONS;
END COMPONENT;

COMPONENT SWEEP_TIME;
    TYPE CONTINUOUS;
    VALUES RANGE 10E-3,1000 LOG 3,1;
    INITIAL 1;
    SET ACTIONS;
        OUTPUT SWEEP_TIME FORMAT '"SWEEP:TIME ",K,"S"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "SWEEP:TIME?";
        ENTER SWEEP_TIME;
    END ACTIONS;
END COMPONENT;

COMPONENT TIME_MAX;
    TYPE CONTINUOUS;
    INITIAL 500E-3;
END COMPONENT;

COMPONENT TIME_MIN;
    TYPE CONTINUOUS;
    INITIAL 500E-3;
END COMPONENT;

COMPONENT SWEEP_TYPE;
    TYPE DISCRETE;
    VALUES PHASE_CONT,DIGITAL_STEP;
    INITIAL DIGITAL_STEP;
    SET ACTIONS;
        SELECT SWEEP_TYPE;
        CASE PHASE_CONT;
            GOSUB CHECK_MOD_ON;
            IF STACK THEN;
                NOTIFY "MOD/AUDIO..sweep conflict";
                FETCH (SWEEP_TYPE)DIGITAL_STEP;
                STORE SWEEP_TYPE;
            ELSE;
                OUTPUT STRING "SWEEP:GENERATION ANALOG";
            END IF;
        CASE ELSE;
            OUTPUT STRING "SWEEP:GENERATION STEPPED";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "SWEEP:GENERATION?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "STEP";
            FETCH (SWEEP_TYPE)DIGITAL_STEP;
        CASE ELSE;
            FETCH (SWEEP_TYPE)PHASE_CONT;
        END SELECT;
        STORE SWEEP_TYPE;
    END ACTIONS;
END COMPONENT;

COMPONENT LIN_LOG;
    TYPE DISCRETE;
    VALUES LIN,LOG;
    INITIAL LIN;
    SET ACTIONS;
        SELECT LIN_LOG;
        CASE LOG;
            OUTPUT STRING "SWEEP:SPACING LOG";
        CASE ELSE;
            OUTPUT STRING "SWEEP:SPACING LIN";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "SWEEP:SPACING?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "LOG";
            FETCH (LIN_LOG)LOG;
        CASE ELSE;
            FETCH (LIN_LOG)LIN;
        END SELECT;
        STORE LIN_LOG;
    END ACTIONS;
END COMPONENT;

COMPONENT AUTO_SWEEP;
    TYPE DISCRETE;
    VALUES AUTO_OFF,AUTO_ON;
    SET ACTIONS;
        SELECT AUTO_SWEEP;
        CASE AUTO_ON;
            GOSUB CHECK_SWEEP;
            IF STACK THEN;
                OUTPUT STRING "INITIALIZE:ABORT";
                FLUSH;
                OUTPUT STRING "SWEEP:MODE AUTO";
                FLUSH;
                OUTPUT STRING "FREQUENCY:MODE SWEEP";
                FLUSH;
                OUTPUT STRING "INITIALIZE:MODE CONTINUOUS";
                FLUSH;
                OUTPUT STRING "INITIALIZE:IMMEDIATE";
            ELSE;
                FETCH (AUTO_SWEEP)AUTO_OFF;
                STORE AUTO_SWEEP;
            END IF;
        CASE ELSE;
            OUTPUT STRING "INITIALIZE:ABORT";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "INITIALIZE:STATE?";
        ENTER XSTRING FORMAT "K";
        SELECT XSTRING;
        CASE "RUN";
            OUTPUT STRING "INITIALIZE:MODE?";
            ENTER YSTRING FORMAT "K";
            SELECT YSTRING;
            CASE "CONT";
                FETCH (AUTO_SWEEP)AUTO_ON;
            CASE ELSE;
                FETCH (AUTO_SWEEP)AUTO_OFF;
            END SELECT;
        CASE ELSE;
            FETCH (AUTO_SWEEP)AUTO_OFF;
        END SELECT;
        STORE AUTO_SWEEP;
    END ACTIONS;
END COMPONENT;

COMPONENT SINGLE_SWEEP NOTSAVED;
    TYPE INTEGER;
    SET ACTIONS;
        GOSUB CHECK_SWEEP;
        IF STACK THEN;
            FETCH (AUTO_SWEEP)AUTO_OFF;
            STORE AUTO_SWEEP;
            OUTPUT STRING "TSWEEP";
        END IF;
    END ACTIONS;
END COMPONENT;

COMPONENT MARKER1;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF MARKER1 THEN;
            OUTPUT STRING "MARKER1:STATE ON";
        ELSE;
            OUTPUT STRING "MARKER1:STATE OFF";
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MARKER1:STATE?";
        ENTER MARKER1;
    END ACTIONS;
END COMPONENT;

COMPONENT MARKER1_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI   0.01;
    INITIAL 251.46486E3;
    SET ACTIONS;
        OUTPUT MARKER1_FREQ FORMAT '"MARKER1:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MARKER1:FREQUENCY?";
        ENTER MARKER1_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT MARKER2;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF MARKER2 THEN;
            OUTPUT STRING "MARKER2:STATE ON";
        ELSE;
            OUTPUT STRING "MARKER2:STATE OFF";
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MARKER2:STATE?";
        ENTER MARKER2;
    END ACTIONS;
END COMPONENT;

COMPONENT MARKER2_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI    0.01;
    INITIAL 251.46486E3;
    SET ACTIONS;
        OUTPUT MARKER2_FREQ FORMAT '"MARKER2:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MARKER2:FREQUENCY?";
        ENTER MARKER2_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT MARKER3;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        IF MARKER3 THEN;
            OUTPUT STRING "MARKER3:STATE ON";
        ELSE;
            OUTPUT STRING "MARKER3:STATE OFF";
        END IF;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MARKER3:STATE?";
        ENTER MARKER3;
    END ACTIONS;
END COMPONENT;

COMPONENT MARKER3_FREQ;
    TYPE CONTINUOUS;
    VALUES RANGE FREQLO,FREQHI     0.01;
    INITIAL 251.46486E3;
    SET ACTIONS;
        OUTPUT MARKER3_FREQ FORMAT '"MARKER3:FREQUENCY ",K,"HZ"';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "MARKER3:FREQUENCY?";
        ENTER MARKER3_FREQ;
    END ACTIONS;
END COMPONENT;

ACTIONS UPDATE_CENTRE;
    FETCH START_FREQ;
    FETCH STOP_FREQ;
    ADD;
    FETCH 2;
    DIV;
    STORE CENTRE_FREQ;
END ACTIONS;

ACTIONS UPDATE_SPAN;
    FETCH STOP_FREQ;
    FETCH START_FREQ;
    SUB;
    STORE SPAN;
END ACTIONS;

ACTIONS UPDATE_START;
    FETCH  CENTRE_FREQ;
    FETCH SPAN;
    FETCH 2;
    DIV;
    SUB;
    STORE START_FREQ;
END ACTIONS;

ACTIONS UPDATE_STOP;
    FETCH CENTRE_FREQ;
    FETCH SPAN;
    FETCH 2;
    DIV;
    ADD;
    STORE STOP_FREQ;
END ACTIONS;

ACTIONS UPDATE_TIME;
    SELECT SWEEP_TYPE;
    CASE PHASE_CONT;
        FETCH 10E-3;
        FETCH 10;
    CASE DIGITAL_STEP;
        FETCH 500E-3;
        FETCH 1000;
    END SELECT;
    STORE TIME_MAX;
    STORE TIME_MIN;
END ACTIONS;

COMPONENT SPAN_MIN;
    TYPE CONTINUOUS;
END COMPONENT;

COMPONENT SPAN_MAX;
    TYPE CONTINUOUS;
END COMPONENT;

COMPONENT SPAN_DIVIDER;
    TYPE INTEGER;
END COMPONENT;

ACTIONS SPAN_RANGE;
    SELECT SWEEP_TYPE;
    CASE PHASE_CONT;
        FETCH 20E6;
        FETCH CENTRE_FREQ;
        GOSUB GET_DIVIDER;
        DIV;
        FETCH 200;
        FETCH CENTRE_FREQ;
        GOSUB GET_DIVIDER;
        DIV;
    CASE ELSE;
        FETCH FREQHI;
        FETCH FREQLO;
    END SELECT;
    STORE SPAN_MIN;
    STORE SPAN_MAX;
END ACTIONS;

ACTIONS CHECK_SWEEP;
    GOSUB SPAN_RANGE;
    GOSUB UPDATE_TIME;
    SELECT SWEEP_TYPE;
    CASE PHASE_CONT;
        SELECT LIN_LOG;
        CASE LOG;
            NOTIFY "Log sweep not allowed";
            FETCH 0;
        CASE ELSE;
            FETCH 1;
        END SELECT;
    CASE ELSE;
        FETCH SPAN;
        FETCH SPAN_MIN;
        GE;
        FETCH SPAN;
        FETCH SPAN_MAX;
        LE;
        AND;
        IF STACK THEN;
            FETCH SWEEP_TIME;
            FETCH TIME_MIN;
            GE;
            FETCH SWEEP_TIME;
            FETCH TIME_MAX;
            LE;
            AND;
            IF STACK THEN;
                FETCH 1;
            ELSE;
                NOTIFY "Sweep time too large/small";
                FETCH 0;
            END IF;
        ELSE;
            NOTIFY "Span too large/small";
            FETCH 0;
        END IF;
    END SELECT;
END ACTIONS;

ACTIONS CHECK_MOD_ON;
    FETCH AM;
    FETCH FM;
    OR;
    FETCH PM;
    OR;
    FETCH PULSE;
    OR;
    FETCH AUDIO;
    OR;
    IF STACK THEN;
        FETCH 1;
    ELSE;
        FETCH 0;
    END IF;
END ACTIONS;

ACTIONS AMPL_LIMITS;
    IF AMPLITUDE_OFFSET THEN;
        FETCH AMPLITUDE_UNITS;
        STORE FROMUNITS;
        FETCH (AMPLITUDE_UNITS)dBm;
        STORE TOUNITS;

        FETCH AMPHI;
        GOSUB convertUnits;
        FETCH AMPLITUDE_OFFSET;
        ADD;

        FETCH AMPLO;
        GOSUB convertUnits;
        FETCH AMPLITUDE_OFFSET;
        ADD;

        FETCH (AMPLITUDE_UNITS)dBm;
        STORE FROMUNITS;
        FETCH AMPLITUDE_UNITS;
        STORE TOUNITS;

        GOSUB convertUnits;
        STORE AMPLO;

        GOSUB convertUnits;
        STORE AMPHI;
    END IF;
END ACTIONS;

ACTIONS FREQ_LIMITS;
    FETCH 251.46485E3;
    GOSUB MUL_OFFS;
    STORE FREQLO;
    IF DOUBLER_OPT THEN;
        FETCH 2060E6;
    ELSE;
        FETCH 1030E6;
    END IF;
    GOSUB MUL_OFFS;
    STORE FREQHI;
END ACTIONS;

ACTIONS MUL_OFFS;
    FETCH FREQUENCY_MULTIPLIER;
    MUL;
    FETCH OFFSET_FREQUENCY;
    ADD;
END ACTIONS;

!***********************
!*** MISC COMPONENTS ***

COMPONENT MISCPANELS  NOTSAVED NOGEN NOERRCHECK;
    TYPE DISCRETE;
    VALUES MISC1,MISC2,MISC3;
    INITIAL MISC1;
    PANEL SET ACTIONS;
        HIDE MISC,MISC1;
        HIDE MISC,MISC2;
        HIDE MISC,MISC3;
        SHOW MISC,MISCTOP;
        SELECT MISCPANELS;
        CASE MISC1;
            SHOW MISC,MISC1;
        CASE MISC2;
            SHOW MISC,MISC2;
        CASE ELSE;
            SHOW MISC,MISC3;
        END SELECT;
    END ACTIONS;
END COMPONENT;

COMPONENT DISPLAY_ALL;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT DISPLAY_ALL;
        CASE ON;
            OUTPUT STRING "DISPLAY:ANNOTATION:ALL ON";
        CASE ELSE;
            IF SECURITY THEN;
                NOTIFY "Command not available with SECURITY ON";
                FETCH (DISPLAY_ALL)ON;
                STORE DISPLAY_ALL;
            ELSE;
                OUTPUT STRING "DISPLAY:ANNOTATION:ALL OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "DISPLAY:ANNOTATION:ALL?";
        ENTER DISPLAY_ALL;
    END ACTIONS;
END COMPONENT;

COMPONENT DISPLAY_FREQ;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT DISPLAY_FREQ;
        CASE ON;
            OUTPUT STRING "DISPLAY:ANNOTATION:FREQUENCY ON";
        CASE ELSE;
            IF SECURITY THEN;
                NOTIFY "Command not available with SECURITY ON";
                FETCH (DISPLAY_FREQ)ON;
                STORE DISPLAY_FREQ;
            ELSE;
                OUTPUT STRING "DISPLAY:ANNOTATION:FREQUENCY OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING  "DISPLAY:ANNOTATION:FREQUENCY?";
        ENTER DISPLAY_FREQ;
    END ACTIONS;
END COMPONENT;

COMPONENT DISPLAY_MOD;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT DISPLAY_MOD;
        CASE ON;
            OUTPUT STRING "DISPLAY:ANNOTATION:MODULATION ON";
        CASE ELSE;
            IF SECURITY THEN;
                NOTIFY "Command not available with SECURITY ON";
                FETCH (DISPLAY_MOD)ON;
                STORE DISPLAY_MOD;
            ELSE;
                OUTPUT STRING "DISPLAY:ANNOTATION:MODULATION OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING  "DISPLAY:ANNOTATION:MODULATION?";
        ENTER DISPLAY_MOD;
    END ACTIONS;
END COMPONENT;

COMPONENT DISPLAY_AMPL;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT DISPLAY_AMPL;
        CASE ON;
            OUTPUT STRING "DISPLAY:ANNOTATION:AMPLITUDE ON";
        CASE ELSE;
            IF SECURITY THEN;
                NOTIFY "Command not available with SECURITY ON";
                FETCH (DISPLAY_AMPL)ON;
                STORE DISPLAY_AMPL;
            ELSE;
                OUTPUT STRING "DISPLAY:ANNOTATION:AMPLITUDE OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING  "DISPLAY:ANNOTATION:AMPLITUDE?";
        ENTER DISPLAY_AMPL;
    END ACTIONS;
END COMPONENT;

COMPONENT DISPLAY_SRC;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT DISPLAY_SRC;
        CASE ON;
            OUTPUT STRING "DISPLAY:ANNOTATION:LFSOURCE ON";
        CASE ELSE;
            IF SECURITY THEN;
                NOTIFY "Command not available with SECURITY ON";
                FETCH (DISPLAY_SRC)ON;
                STORE DISPLAY_SRC;
            ELSE;
                OUTPUT STRING "DISPLAY:ANNOTATION:LFSOURCE OFF";
            END IF;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING  "DISPLAY:ANNOTATION:LFSOURCE?";
        ENTER DISPLAY_SRC;
    END ACTIONS;
END COMPONENT;

COMPONENT RADIX;
    TYPE DISCRETE;
    VALUES US,EURO;
    INITIAL US;
    SET ACTIONS;
        SELECT RADIX;
        CASE EURO;
            OUTPUT STRING "DISPLAY:RADIX EUROPEAN";
        CASE ELSE;
            OUTPUT STRING "DISPLAY:RADIX US";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING   "DISPLAY:RADIX?";
        ENTER XSTRING;
        SELECT XSTRING;
        CASE "US";
            FETCH (RADIX)US;
        CASE ELSE;
            FETCH (RADIX)EURO;
        END SELECT;
        STORE RADIX;
    END ACTIONS;
END COMPONENT;

COMPONENT SECURITY;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL OFF;
    SET ACTIONS;
        SELECT SECURITY;
        CASE ON;
            OUTPUT STRING "SYSTEM:SECURITY ON";
        CASE ELSE;
            OUTPUT STRING "SYSTEM:SECURITY OFF";
            INVALIDATE ALL;
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING   "SYSTEM:SECURITY?";
        ENTER SECURITY;
    END ACTIONS;
END COMPONENT;

ACTIONS DISP_COND;
    GET DISPLAY_ALL;
    GET DISPLAY_FREQ;
    GET DISPLAY_AMPL;
    GET DISPLAY_MOD;
    GET DISPLAY_SRC;
    GET SECURITY;
END ACTIONS;

COMPONENT POWER_METER;
    TYPE CONTINUOUS;
    INITIAL -150;
    GET ACTIONS;
        OUTPUT STRING "PMETER:POWER?";
        ENTER POWER_METER;
    END ACTIONS;
END COMPONENT;

COMPONENT AC_DC;
    TYPE DISCRETE;
    VALUES DC,AC;
    INITIAL DC;
    SET ACTIONS;
        SELECT AC_DC;
        CASE AC;
            OUTPUT STRING "VMETER:MODE AC";
        CASE ELSE;
            OUTPUT STRING "VMETER:MODE DC";
        END SELECT;
    END ACTIONS;
END COMPONENT;

COMPONENT VOLTAGE;
    TYPE CONTINUOUS;
    GET ACTIONS;
        OUTPUT STRING "VMETER:VOLTAGE?";
        ENTER VOLTAGE;
    END ACTIONS;
END COMPONENT;

COMPONENT AMPLITUDE_CORR;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT AMPLITUDE_CORR;
        CASE ON;
            OUTPUT STRING "CALIBRATION:AMPLITUDE:STATE ON";
        CASE ELSE;
            OUTPUT STRING "CALIBRATION:AMPLITUDE:STATE OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "CALIBRATION:AMPLITUDE:STATE?";
        ENTER AMPLITUDE_CORR;
    END ACTIONS;
END COMPONENT;

COMPONENT ALC_BW;
    TYPE DISCRETE;
    VALUES WIDE,NARROW;
    INITIAL NARROW;
    SET ACTIONS;
        SELECT ALC_BW;
        CASE NARROW;
            OUTPUT STRING "AMPLITUDE:ALC:BANDWIDTH:AUTO ON";
        CASE ELSE;
            OUTPUT STRING "AMPLITUDE:ALC:BANDWIDTH:AUTO OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "AMPLITUDE:ALC:BANDWIDTH:AUTO?";
        ENTER XSTRING;
        SELECT XSTRING;
        CASE "1";
            FETCH(ALC_BW)NARROW;
        CASE ELSE;
            FETCH (ALC_BW)WIDE;
        END SELECT;
    END ACTIONS;
END COMPONENT;

COMPONENT AMPLITUDE_MUTING;
    TYPE DISCRETE;
    VALUES OFF,ON;
    INITIAL ON;
    SET ACTIONS;
        SELECT AMPLITUDE_MUTING;
        CASE ON;
            OUTPUT STRING "AMPLITUDE:MUTING ON";
        CASE ELSE;
            OUTPUT STRING "AMPLITUDE:MUTING OFF";
        END SELECT;
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "AMPLITUDE:MUTING?";
        ENTER AMPLITUDE_MUTING;
    END ACTIONS;
END COMPONENT;

COMPONENT REF_INT_EXT;
    TYPE DISCRETE;
    VALUES INT,EXT;
    GET ACTIONS;
        OUTPUT STRING "ROSCILLATOR:SOURCE?";
        ENTER XSTRING;
        SELECT XSTRING;
        CASE "EXT";
            FETCH (REF_INT_EXT)EXT;
        CASE ELSE;
            FETCH (REF_INT_EXT)INT;
        END SELECT;
        STORE REF_INT_EXT;
    END ACTIONS;
END COMPONENT;

COMPONENT OSC_CAL;
    TYPE INTEGER;
    VALUES RANGE 0,255;
    SET ACTIONS;
        OUTPUT OSC_CAL FORMAT '"ROSCILLATOR:CALIBRATION ",K';
    END ACTIONS;
    GET ACTIONS;
        OUTPUT STRING "ROSCILLATOR:CALIBRATION?";
        ENTER OSC_CAL;
    END ACTIONS;
END COMPONENT;

ACTIONS ALL_OFF;
    FETCH (AM)OFF;
    STORE AM;
    FETCH (FM)OFF;
    STORE FM;
    FETCH (PM)OFF;
    STORE PM;
    FETCH (PULSE)OFF;
    STORE PULSE;
    IF SYNTH_OPT THEN;
        FETCH (AUDIO)OFF;
        STORE AUDIO;
    ELSE;
        FETCH (STD_LFSOURCE)OFF;
        STORE STD_LFSOURCE;
    END IF;
END ACTIONS;

ACTIONS GET_ALL;
    GET FM;
    GET AM;
    GET PM;
    GET PULSE;
    IF SYNTH_OPT THEN;
        GET AUDIO;
    ELSE;
        GET STD_LFSOURCE;
    END IF;
END ACTIONS;







!***************
!*   PANELS    *
!***************

PANEL MAIN;

    LANGUAGE "USASCII";
    POSITION 0,0;
    SIZE 214,213;

    PANEL TOP;
        POSITION 0,182;
        SIZE 214,31;
        FOREGROUND(255,255,255),100;

        BUTTON RESET;
            POSITION 6,6;
            SIZE 55,19;
            BACKGROUND(0,130,70),0;
            LABEL "Reset";
        END BUTTON;

        DISCRETE CURRENTPANEL;
            POSITION 72,6;
            SIZE 136,19;
            BACKGROUND (75,0,240),0;
            LABEL "Carrier Panel","Option Panel","AM Panel","FM Panel","Phase Panel","Pulse Panel",
            "Sweep Panel","Source Panel","Source Panel","Offset Panel","Misc Panel","Status Panel","About Panel";
        END DISCRETE;

    END PANEL;

    PANEL CARRIER;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 05,160 "Freq";
        CONTINUOUS FREQUENCY;
            POSITION 65,160;
            SIZE 145,19;
            FORMAT '12 DIGITS';
        END CONTINUOUS;

        TEXT 05,135, "Power";
        PANEL LINAMP;
            POSITION 65,135;
            SIZE 145,19;
            CONTINUOUS AMPLITUDE;
                POSITION 0,0;
                SIZE 145,19;
                FORMAT  '4 DIGITS';
            END CONTINUOUS;
        END PANEL;

        PANEL LOGAMP;
            POSITION 65,135;
            SIZE 145,19;
            CONTINUOUS AMPLITUDE;
                POSITION 0,0;
                SIZE 145,19;
                STYLE "NOENGR";
                FORMAT "SDDD.D";
            END CONTINUOUS;
        END PANEL;

        TEXT 05,110, "Units";
        DISCRETE AMPLITUDE_UNITS;
            POSITION 65,110;
            SIZE 145,19;
            LABEL "dBm","dBuV","dB emf uV","V","emf V";
        END DISCRETE;

        TEXT 05,85, "Mode";
        DISCRETE MODE;
            POSITION 65,85;
            SIZE 145,19;
            LABEL "AUTO","Mode1","Mode2","Mode3";
        END DISCRETE;

        TEXT 05,60, "RF";
        TOGGLE RF_OFF_ON;
            POSITION 65,60;
            SIZE 145,19;
            LABEL "Off","On";
        END TOGGLE;

        TEXT 05,35 "Mod";
        TOGGLE ALL_MOD;
            POSITION 65,35;
            SIZE 145,19;
            LABEL "All Off","All On";
        END TOGGLE;

    END PANEL;! END OF PANEL CARRIER

    PANEL OPTION;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 05,140, "Low Noise";
        TOGGLE LOW_NOISE_OPT;
            POSITION 150,140;
            LABEL " ","X";
        END TOGGLE;

        TEXT 05,100, "Doubler";
        TOGGLE DOUBLER_OPT;
            POSITION 150,100;
            LABEL " ","X";
        END TOGGLE;

        TEXT 05,60, "LF Synthesiser";
        TOGGLE SYNTH_OPT;
            POSITION 150,60;
            LABEL " ","X";
        END TOGGLE;

    END PANEL;

    PANEL AM;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 05,150 "AM";
        TOGGLE AM;
            POSITION 100,150;
            SIZE 95,20;
            LABEL "Off","On";
        END TOGGLE;

        TEXT 05,125 "Depth";
        TEXT 200,125 "%";
        CONTINUOUS AM_DEPTH;
            POSITION 100,125;
            SIZE 95,20;
            STYLE "NOENGR";
            FORMAT "DDD.D";
        END CONTINUOUS;

        TEXT 05,100 "Source";
        DISCRETE AM_SOURCE;
            POSITION 100,100;
            SIZE 95,20;
            LABEL "Off","Internal","Ext_AC","Ext_DC";
        END DISCRETE;

    END PANEL;

    PANEL FM;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 05,150 "FM";
        TOGGLE FM;
            POSITION 100,150;
            SIZE 95,20;
            LABEL "Off","On";
        END TOGGLE;

        TEXT 05,125 "Deviation";
        CONTINUOUS FM_DEV;
            POSITION 100,125;
            SIZE 95,20;
        END CONTINUOUS;

        TEXT 05,100 "Source   ";
        DISCRETE FM_SOURCE;
            POSITION 100,100;
            SIZE 95,20;
            LABEL "Off","Internal","Ext_AC","Ext_DC","Int_Ext_AC","Int_Ext_DC";
        END DISCRETE;

        TEXT 05,75 "Lin/Dig FM";
        TOGGLE FM_DIG_LIN;
            POSITION 100,75;
            SIZE 95,20;
            LABEL "Linear","Digitized";
        END TOGGLE;

        TEXT 05,50 "Delay Eqlz";
        TOGGLE FM_DELAY;
            POSITION 100,50;
            SIZE 95,20;
            LABEL "Off","On";
        END TOGGLE;

        TEXT 05,25 "Pre-emphs";
        TOGGLE PRE_EMPHASIS;
            POSITION 100,25;
            SIZE 95,20;
            LABEL "Off","On";
        END TOGGLE;

    END PANEL;

    PANEL PHASE;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 05,150 "Phase Mod";
        TOGGLE PM;
            POSITION 100,150;
            SIZE 100,20;
            LABEL "Off","On";
        END TOGGLE;

        TEXT 05,125 "PM Source";
        DISCRETE PM_SOURCE;
            POSITION 100,125;
            SIZE 100,20;
            LABEL "Off","Internal","Ext_AC","Ext_DC","Int_Ext_AC","Int_Ext_DC";
        END DISCRETE;

        TEXT 05,100,"Phase Adj";
        CONTINUOUS PHASE_ADJUST;
            POSITION 100,100;
            SIZE 100,20;
            FORMAT "SDDD.D";
        END CONTINUOUS;

        TEXT 05,75,"Phase Step";
        CONTINUOUS PHASE_STEP;
            POSITION 100,75;
            SIZE 100,20;
            FORMAT "SDDD.D";
        END CONTINUOUS;

        TEXT 05,50, "Phase Ref";
        BUTTON PHASE_REF;
            POSITION 100,50;
            SIZE 100,20;
            LABEL "Phase Ref";
        END BUTTON;

        TEXT 05,25, "Phase   ";
        BUTTON PHASE_INC;
            POSITION 100,25;
            SIZE 40,20;
            LABEL "INC";
        END BUTTON;

        BUTTON PHASE_DEC;
            POSITION 160,25;
            SIZE 40,20;
            LABEL "DEC";
        END BUTTON;

    END PANEL;

    PANEL PULSE;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 5,140 "Pulse";
        TOGGLE PULSE;
            POSITION 100,140;
            SIZE 95,20;
            LABEL "Off","On";
        END TOGGLE;

    END PANEL;

    PANEL SWEEP;
        POSITION 0,0;
        SIZE 214,182;

        PANEL SWEEPTOP;
            POSITION 0,150;
            SIZE 213,31;
            FOREGROUND(255,255,255),100;

            TOGGLE SWEEPPANELS;
                POSITION 72,6;
                SIZE 136,19;
                BACKGROUND (75,0,240),0;
                LABEL "Sweep Panel 1","Sweep Panel 2";
            END TOGGLE;
        END PANEL;

        PANEL SWEEP1;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 05,130 "Sweep";
            TOGGLE  AUTO_SWEEP;
                POSITION 63,130;
                SIZE 145,17;
                LABEL "Auto/off","Auto/on";
            END TOGGLE;

            TEXT 05,110 "Sweep";
            BUTTON SINGLE_SWEEP;
                POSITION 63,110;
                SIZE 145,17;
                LABEL "Single";
            END BUTTON;

            TEXT 05,90 "Start";
            CONTINUOUS START_FREQ;
                POSITION 63,90;
                SIZE 145,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

            TEXT 05,70 "Stop";
            CONTINUOUS STOP_FREQ;
                POSITION 63,70;
                SIZE 145,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

            TEXT 05,50 "Centre";
            CONTINUOUS CENTRE_FREQ;
                POSITION 63,50;
                SIZE 145,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

            TEXT 05,30 "Span";
            CONTINUOUS SPAN;
                POSITION 63,30;
                SIZE 145,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

            TEXT 05,10 "Time";
            CONTINUOUS SWEEP_TIME;
                POSITION 63,10;
                SIZE 145,17;
                FORMAT '6 DIGITS';
            END CONTINUOUS;

        END PANEL;

        PANEL SWEEP2;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 05,125 "Lin/Log";
            TOGGLE LIN_LOG;
                POSITION 100,125;
                SIZE 105,17;
                LABEL "Lin","Log";
            END TOGGLE;

            TEXT 05,100 "Generation";
            TOGGLE SWEEP_TYPE;
                POSITION 100,100;
                SIZE 105,17;
                LABEL "Phase cont","Digtal step";
            END TOGGLE;

            TEXT 05,75 "Mrkr1";
            TOGGLE MARKER1;
                POSITION 60,75;
                LABEL "Off","On";
            END TOGGLE;

            CONTINUOUS MARKER1_FREQ;
                POSITION 100,75;
                SIZE 105,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

            TEXT 05,50 "Mrkr2";
            TOGGLE MARKER2;
                POSITION 60,50;
                LABEL "Off","On";
            END TOGGLE;

            CONTINUOUS MARKER2_FREQ;
                POSITION 100,50;
                SIZE 105,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

            TEXT 05,25 "Mrkr3";
            TOGGLE MARKER3;
                POSITION 60,25;
                LABEL "Off","On";
            END TOGGLE;

            CONTINUOUS MARKER3_FREQ;
                POSITION 100,25;
                SIZE 105,17;
                FORMAT '12 DIGITS';
            END CONTINUOUS;

        END PANEL;

    END PANEL;


    PANEL STD_SOURCE;
        POSITION 0,0;
        SIZE 214,182;

        TEXT 5,140 "Audio";
        TOGGLE STD_LFSOURCE;
            POSITION 100,140;
            SIZE 95,20;
            LABEL "Off","On";
        END TOGGLE;

        TEXT 5,100 "Level";
        CONTINUOUS STD_LFSOURCE_LEVEL;
            POSITION 100,100;
            SIZE 95,20;
        END CONTINUOUS;

        TEXT 5,60 "Freq";
        DISCRETE STD_LFSOURCE_FREQ;
            POSITION 100,60;
            SIZE 95,20;
            LABEL "300Hz","400Hz","1KHz","3KHz";
        END DISCRETE;

    END PANEL;

    PANEL SYNTH_SOURCE;
        POSITION 0,0;
        SIZE 214,182;

        PANEL SOURCETOP;
            POSITION 0,150;
            SIZE 213,31;
            FOREGROUND(255,255,255),100;

            DISCRETE SOURCEPANELS;
                POSITION 72,6;
                SIZE 136,19;
                BACKGROUND (75,0,240),0;
                LABEL "Source1 Panel","Source2 Panel","AMSource Panel",
                "FMSource Panel","PMSource Panel","Pulse Panel";
            END DISCRETE;
        END PANEL;

        PANEL SOURCE1;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 5,125 "Audio";
            TOGGLE AUDIO;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 5,100 "Waveform";
            DISCRETE AUDIO1_WAVE;
                POSITION 100,100;
                SIZE 95,20;
                LABEL "Sine","Square","Triangle","Sawtooth","W.G.Noise";
            END DISCRETE;

            TEXT 4,75 "Freq";
            CONTINUOUS AUDIO1_FREQ;
                POSITION 100,75;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,50 "Level";
            CONTINUOUS AUDIO1_LEVEL;
                POSITION 100,50;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

        PANEL SOURCE2;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 5,125 "Audio2";
            TOGGLE AUDIO2;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 5,100 "Waveform";
            DISCRETE AUDIO2_WAVE;
                POSITION 100,100;
                SIZE 95,20;
                LABEL "Sine","Square","Triangle","Sawtooth","W.G.Noise";
            END DISCRETE;

            TEXT 4,75 "Freq";
            CONTINUOUS AUDIO2_FREQ;
                POSITION 100,75;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,50 "Level";
            CONTINUOUS AUDIO2_LEVEL;
                POSITION 100,50;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,25 "Phase";
            CONTINUOUS AUDIO2_PHASE;
                POSITION 100,25;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

        PANEL AM_SOURCE;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 5,125 "AM";
            TOGGLE AUDIO_AM;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 5,100 "Waveform";
            DISCRETE AUDIO_AM_WAVE;
                POSITION 100,100;
                SIZE 95,20;
                LABEL "Sine","Square","Triangle","Sawtooth","W.G.Noise";
            END DISCRETE;

            TEXT 4,75 "Freq";
            CONTINUOUS AUDIO_AM_FREQ;
                POSITION 100,75;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,50 "Depth";
            CONTINUOUS AUDIO_AM_DEPTH;
                POSITION 100,50;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,25 "Phase";
            CONTINUOUS AUDIO_AM_PHASE;
                POSITION 100,25;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

        PANEL FM_SOURCE;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 5,125 "FM";
            TOGGLE AUDIO_FM;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 5,100 "Waveform";
            DISCRETE AUDIO_FM_WAVE;
                POSITION 100,100;
                SIZE 95,20;
                LABEL "Sine","Square","Triangle","Sawtooth","W.G.Noise";
            END DISCRETE;

            TEXT 4,75 "Freq";
            CONTINUOUS AUDIO_FM_FREQ;
                POSITION 100,75;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,50 "Deviation";
            CONTINUOUS AUDIO_FM_DEV;
                POSITION 100,50;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,25 "Phase";
            CONTINUOUS AUDIO_FM_PHASE;
                POSITION 100,25;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

        PANEL PM_SOURCE;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 5,125 "PM";
            TOGGLE AUDIO_PM;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 5,100 "Waveform";
            DISCRETE AUDIO_PM_WAVE;
                POSITION 100,100;
                SIZE 95,20;
                LABEL "Sine","Square","Triangle","Sawtooth","W.G.Noise";
            END DISCRETE;

            TEXT 4,75 "Freq";
            CONTINUOUS AUDIO_PM_FREQ;
                POSITION 100,75;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,50 "Deviation";
            CONTINUOUS AUDIO_PM_DEV;
                POSITION 100,50;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,25 "Phase";
            CONTINUOUS AUDIO_PM_PHASE;
                POSITION 100,25;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

        PANEL PULSE_SOURCE;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 5,125 "Pulse";
            TOGGLE AUDIO_PULSE;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 4,100 "Freq";
            CONTINUOUS AUDIO_PULSE_FREQ;
                POSITION 100,100;
                SIZE 95,20;
            END CONTINUOUS;

            TEXT 4,75 "Phase";
            CONTINUOUS AUDIO_PULSE_PHASE;
                POSITION 100,75;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

    END PANEL;

    PANEL OFFSET;
        POSITION 0, 0;
        SIZE 214,182;

        TEXT 03,150, "Amp Ofs";
        CONTINUOUS AMPLITUDE_OFFSET;
            POSITION 70,150;
            SIZE 140,20;
            STYLE "NOENGR";
            FORMAT "SDDD.D";
        END CONTINUOUS;

        TEXT 03,125, "Frq Mul";
        CONTINUOUS FREQUENCY_MULTIPLIER;
            POSITION 70,125;
            SIZE 140,20;
            FORMAT "12 DIGITS";
        END CONTINUOUS;

        TEXT 03,100, "Frq Ofs";
        CONTINUOUS OFFSET_FREQUENCY;
            POSITION 70,100;
            SIZE 140,20;
            FORMAT "12DIGITS";
        END CONTINUOUS;

    END PANEL;

    PANEL MISC;
        POSITION 0, 0;
        SIZE 214,182;

        PANEL MISCTOP;
            POSITION 0,150;
            SIZE 213,31;
            FOREGROUND(255,255,255),100;

            DISCRETE MISCPANELS;
                POSITION 72,6;
                SIZE 136,19;
                BACKGROUND (75,0,240),0;
                LABEL "Misc Panel 1","Misc Panel 2","Misc Panel 3";
            END DISCRETE;
        END PANEL;

        PANEL MISC1;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 05,125, "Display";
            TOGGLE DISPLAY_ALL;
                POSITION 100,125;
                SIZE 95,17;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,105 "Freq";
            TOGGLE DISPLAY_FREQ;
                POSITION 100,105;
                SIZE 95,17;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,85 "Ampl";
            TOGGLE DISPLAY_AMPL;
                POSITION 100,85;
                SIZE 95,17;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,65 "Mod";
            TOGGLE DISPLAY_MOD;
                POSITION 100,65;
                SIZE 95,17;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,45 "Source";
            TOGGLE DISPLAY_SRC;
                POSITION 100,45;
                SIZE 95,17;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,25 "Radix";
            TOGGLE RADIX;
                POSITION 100,25;
                SIZE 95,17;
                LABEL "US","European";
            END TOGGLE;

            TEXT 05,05 "Security";
            TOGGLE SECURITY;
                POSITION 100,05;
                SIZE 95,17;
                LABEL "Off","On";
            END TOGGLE;

        END PANEL;

        PANEL MISC2;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 05,125, "Ampl Corr";
            TOGGLE AMPLITUDE_CORR;
                POSITION 100,125;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,100, "ALC BW";
            TOGGLE ALC_BW;
                POSITION 100,100;
                SIZE 95,20;
                LABEL "Wide","Narrow";
            END TOGGLE;

            TEXT 05,75, "Ampl Mute";
            TOGGLE AMPLITUDE_MUTING;
                POSITION 100,75;
                SIZE 95,20;
                LABEL "Off","On";
            END TOGGLE;

            TEXT 05,50, "Ref Osc";
            DISPLAY REF_INT_EXT;
                POSITION 100,50;
                SIZE 95,20;
            END DISPLAY;

            TEXT 05,25, "Osc Cal";
            CONTINUOUS OSC_CAL;
                POSITION 100,25;
                SIZE 95,20;
            END CONTINUOUS;

        END PANEL;

        PANEL MISC3;
            POSITION 0,0;
            SIZE 213,149;

            TEXT 05,125, "PMeter";
            DISPLAY POWER_METER;
                POSITION 80,125;
                SIZE 95,20;
            END DISPLAY;

            TEXT 05,100, "VMeter";
            TOGGLE AC_DC;
                POSITION 80,100;
                SIZE 95,20;
                LABEL "DC","AC";
            END TOGGLE;

            TEXT 05,75, "Volts";
            DISPLAY VOLTAGE;
                POSITION 80,75;
                SIZE 95,20;
            END DISPLAY;

        END PANEL;

    END PANEL;

    PANEL STATUS;
        POSITION 0, 0;
        SIZE 214,182;

        TEXT 10,120, "Error";
        DISPLAY ERROR;
            POSITION 100,120;
            SIZE 80,19;
        END DISPLAY;

        DISPLAY ERROR_STRING;
            POSITION 5,65;
            SIZE 207, 20;
        END DISPLAY;

    END PANEL;

    PANEL ABOUT;
        POSITION 0,0;
        SIZE 214,182;

        TEXT "HP 8644A";
            POSITION 47,137;
            FONT 15,25;
        END TEXT;

        TEXT 34,125,    "Signal generator";
        TEXT 34,89,     "Revision A.00.01";
        TEXT 49,60,     "Copyright(C)";
        TEXT 23,43,     "Hewlett-Packard Co";
        TEXT 59,26,     "1989, 1994";
    END PANEL; ! END OF PANEL ABOUT

END PANEL;!END OF PANEL MAIN
