(*²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²*)
(* Program:     Y767.GLO - Global declarations (Part of CATY767.PAS)        *)
(* Author:      Donald J. Wilke, N3HGQ@KA3QAC                               *)
(* Start Date:  July 12, 1989                                               *)
(* Last Update: February 4, 1990                                            *)
(* Purpose:     Control program for Yaesu FT-767GX Transceiver.             *)
(*              Requires RS-232 interface between computer & FT-767GX.      *)
(* Usage:       Compile to .EXE file using Turbo Pascal and execute the     *)
(*              .EXE file by typing CATY767 at the DOS prompt.              *)
(* Needs:       Y767.GLO, Y767GLO.PAS, Y767UTIL.PAS, Y767DISP.PAS,          *)
(*              Y767RTC.PAS, Y767INST.PAS and Y767COMM.PAS.                 *)
(* Remarks:     This program originally written in QuickBasic Version 4.5   *)
(*              and translated for TURBO PASCAL Version 5.5                 *)
(*²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²*)

CONST

    (* Compile-time conditionals, set to match configuration *)

    Credit : STRING[20]
           = 'Vers. 1.0  by N3HGQ';  (* For evolutionary record *)
    Test         : BOOLEAN = FALSE;  (* True if testing w/o comport *)
    SetSel       : BOOLEAN = TRUE;   (* False to simulate KBD input *)
    ToneEnc      : BOOLEAN = FALSE;  (* True if CTCSS board installed *)
    Module6      : BOOLEAN = TRUE;   (* True if 6M module installed *)
    Module2      : BOOLEAN = TRUE;   (* True if 2M module installed *)
    Module70A    : BOOLEAN = FALSE;  (* True if 430-440 mod installed *)
    Module70B    : BOOLEAN = FALSE;  (* True if 440-450 mod installed *)
    Parity       : INTEGER = $00;    (* 0 = No parity *)
    DataBits     : INTEGER = $03;    (* 3 = Use full 8 bits per character *)
    StopBits     : INTEGER = $04;    (* 4 = Yaesu uses 2 stop bits *)
    DLAB         : INTEGER = $80;    (* 8250 Divisor Latch Access Bit *)
    DTR          : INTEGER = $01;    (* Value for Data Terminal Ready *)
    RTS          : INTEGER = $02;    (* value for Ready To Send *)
    OUT2         : INTEGER = $08;    (* Bit that enables adapter ints *)
    OCW1         : INTEGER = $21;    (* 8259 Operation Control Word 1 *)
    OCW2         : INTEGER = $20;    (* 8259 Operation Control Word 2 *)
    IRQT         : INTEGER = $01;    (* Mask to turn Timer ints on/off *)
    TimerInt     : INTEGER = $1C;    (* Timer Control interrupt # *)
    TimeZone     : INTEGER = 5;      (* Hours behind UTC *)
    ClockFlag    : BOOLEAN = TRUE;   (* False disables clock during Comm *)
    FreqErrorFlag: BOOLEAN = FALSE;  (* Freq out of range flag *)
    Nul          : CHAR    = CHR(0); (* Used to build null strings *)
    TZ           : STRING  = ' EST ';(* Default Timezone *)
    Divisor      : WORD    = 24;     (* Value for 4800 baud operation *)
    ScreenSeg    : WORD    = 0000;   (* Storage for video memory addr *)
    SaveCSeg     : WORD    = 0000;   (* Storage for Code segment addr *)
    ComBase      : WORD    = $2F8;   (* Base address of COM ports *)

    (* Define foreground, background colors, character attributes *)
    DFG          : INTEGER = 3;      (* Default FG color - CYAN *)
    DBG          : INTEGER = 0;      (* Default BG color - BLACK *)
    PFG          : INTEGER = 14;     (* Parameter FG color - YELLOW *)
    RFG          : INTEGER = 2;      (* Requested param FG color - GRN *)
    SFG          : INTEGER = 15;     (* Status FG color - HI WHITE *)
    EFG          : INTEGER = 31;     (* Error FG color - HI WHT + BLNK *)
    EBG          : INTEGER = 4;      (* Error BG color - RED *)
    SBA          : INTEGER = 4;      (* Border FG/BG attrib - RED/BLK *)
    CLA          : INTEGER = 31;     (* Clock FG/BG attr - HI WHT/BLUE *)
    FKA          : INTEGER = 31;     (* FKey line FG/BG attr - HI WHT/BLUE *)
    COA          : INTEGER = 79;     (* CAT Off FG/BG att - HI WHT/RED *)
    BFG          : INTEGER = 0;      (* Select bar FG color - BLK *)
    BBG          : INTEGER = 15;     (* Select bar BG color - WHT *)

    (* Define FT-767 Instructions & general purpose string constants *)
    CatOn        : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR(0);
    CatOff       : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(1)+CHR(0);
    Check        : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR(1);
    Up10Hz       : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR(2);
    Dn10Hz       : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR(3);
    BandUp       : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR(6);
    BandDn       : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR(7);
    SplitTog     : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR($30)+CHR($A);
    ClarTog      : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR($40)+CHR($A);
    MtoV         : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR($50)+CHR($A);
    VtoM         : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR($60)+CHR($A);
    Swap         : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR($70)+CHR($A);
    Aclr         : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR($80)+CHR($A);
    AckString    : STRING[5]  = CHR(0)+CHR(0)+CHR(0)+CHR(0)+CHR($B);
    Nul3String   : STRING[3]  = CHR(0)+CHR(0)+CHR(0);
    Title        : STRING[44] = 'CATY Transceiver Control Program';
    FreqErr      : STRING[17] = ' Frequency error ';
    CmdErr       : STRING[17] = '  Command error  ';
    MemErr       : STRING[17] = '  Memory error   ';
    TimerErr     : STRING[40] = '  Restoring the normal Timer interrupt  ';
    TfileErr     : STRING[26] = '  Cannot find UPDATE.DUM  ';

(*²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²*)
TYPE
    String5      = STRING[5];        (* Used for FT-767 Instructions, Echos *)
    String86     = STRING[86];       (* To hold FT-767 Status Update stream *)
    CircBuffer   =
        ARRAY[0..1024] OF Char;      (* COMM serial input buffer *)

(*²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²*)
VAR
    Zero1             : BYTE;        (* For initialization purposes *)
    Clearit           : BYTE;        (* Dummy variable *)
    TicCount          : BYTE;        (* Used to calc seconds for clock *)
    CommChar          : CHAR;        (* Character from the COM_ port *)
    Buffer            : CircBuffer;  (* Incoming serial character buffer *)
    LastRead,                        (* Index of the last character read *)
    LastSaved,                       (* Index of the last character stored *)
    Index             : INTEGER;     (* General purpose counter variable *)
    ComPort           : INTEGER;     (* Serial port - COM1: or COM2: *)
    ComVec            : INTEGER;     (* Vector # for COM_: (IRQ_) *)
    IRQM              : INTEGER;     (* Mask to turn IRQ_ ints on/off *)
    CharsInBuf        : INTEGER;     (* No of chars in serial buffer *)
    OldComVec         : POINTER;     (* Global storage for old COM Int vect *)
    OldVector         : POINTER;     (* Holds old clock interrupt vector *)
    CAT               : BOOLEAN;     (* CAT active/inactive flag *)
    MR,Cl,Fk          : BOOLEAN;     (* Mem Recall, Clarif, Func key flags *)
    DownFlag          : BOOLEAN;     (* Step Dn/Up flag *)
    QuitFlag          : BOOLEAN;     (* Quit to DOS flag *)
    Quit              : BOOLEAN;     (* Flag for exiting the program *)
    Inst              : String5;     (* Global FT-767 Instruction code *)
    Update            : String86;    (* Global FT-767 Update stream *)
    UpdateFile        : TEXT;        (* Test file contains dummy Update *)
    Y767MemDataFile   : TEXT;        (* Filename for memory data file *)
    Y767VFODataFile   : TEXT;        (* Filename for VFO database file *)
    Y767MemFileParams : STRING[76];  (* Length of MemFile record *)
    Echo  : ARRAY[1..5] OF CHAR;     (* Global FT-767 Echo code *)
    Lifo  : ARRAY[1..86] OF CHAR;    (* Global LIFO Update stream *)
    Zero2             : BYTE;        (* For initialization purposes *)
    MemArray :
        ARRAY[1..100] OF STRING[70]; (* For VFO datafile Memory array *)

(*²²²²²²²²²²²²²²²²²²²²²²²²²²²²² End of Globals ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²*)
