home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / c / caty16.zip / LOADY150.PAS < prev    next >
Pascal/Delphi Source File  |  1991-09-14  |  7KB  |  176 lines

  1. {$R-,V-,S-} (*Range, Var-String, Stack checking all off *)
  2. PROGRAM LOADY; (* Load Yaesu FT-767GX memories from command line file *)
  3.                (* Version 1.50 accomodates MARS freqs. *)
  4.                (* 07/19/91 D. J. Wilke N3HGQ *)
  5. (*═══════════════════════════════════════════════════════════════════════*)
  6.  
  7. USES
  8.    CRT, DOS,                    (* Unit files for general functions *)
  9.    CATYGLO, CATYUTIL, CATYCOMM; (* Specific to this pgm *)
  10.  
  11. (*═══════════════════════════════════════════════════════════════════════*)
  12. PROCEDURE SendIt(Inst : STRING5; SUS : INTEGER);
  13.  
  14. VAR
  15.   Index : INTEGER;
  16.  
  17. BEGIN
  18.   FOR Index := 1 to LENGTH(Inst) DO BEGIN
  19.      OutChar(Inst[Index],RComBase);
  20.      DELAY(20);                              (* 20 mSec delay *)
  21.   END;
  22.   DELAY(SUS * 15);                            (* Wait for buffer to fill *)
  23. END; (* SendIt *)
  24.  
  25. (*═══════════════════════════════════════════════════════════════════════*)
  26. PROCEDURE CatSend(Param : String5; StatusUpdateSize : INTEGER);
  27. (* Send Instruction string to 767, get Echo & send ACKnowledge *)
  28.  
  29. VAR
  30.    Temp : STRING[86];
  31.    Ch   : CHAR;
  32.  
  33. BEGIN (* CatSend *)
  34.    Inst := Param;                           (* Inform Global variable *)
  35.    Echo := '     ';
  36.    SendIt(Param,15);                        (* Send Instruction to 767 *)
  37. (* Get 5 character echo from 767, if a match, send ACK string to 767 *)
  38.    IF Test THEN
  39.       FOR Index := 1 TO 5 DO
  40.    Echo[Index] := Inst[Index]               (* Simulate 767 echo *)
  41.    ELSE FOR Index := 1 TO 5 DO
  42.       Echo[Index] := RInChar;                (* Get real echo from 767 *)
  43.    IF (Echo = Inst) AND (NOT Test) THEN BEGIN
  44.       (* If Test was TRUE, UPDATE.DAT provided a simulated Update *)
  45.       SendIt(AckString,StatusUpdateSize);    (* Echo matches, send ACK *)
  46.       FOR Index := 1 TO StatusUpdateSize DO
  47.          Lifo[Index] := RInChar;             (* Get real Update from 767 *)
  48.          (* Update stream from 767 is sent last byte first *)
  49.       Temp := Fifo(Lifo);                    (* Convert LIFO to FIFO *)
  50.       Update := Temp;
  51.    END (* IF Echo *)
  52.    ELSE IF Echo <> Inst THEN BEGIN
  53.       WRITELN;
  54.       WRITELN('Bad echo from radio');        (* Issue command error warning *)
  55.       FlushRBuffer;                          (* Clear buffer of trash *)
  56.    END; (* ELSE IF *)
  57. END; (* CatSend *)
  58.  
  59. (*═══════════════════════════════════════════════════════════════════════*)
  60. PROCEDURE LoadMemories(CmdLineStr : STRING);
  61.  
  62. VAR
  63.    RecNo,
  64.    DotPos,
  65.    Result,
  66.    BCDin       : INTEGER;
  67.    Ok          : BOOLEAN;
  68.    FreqChr     : STRING;
  69.    Tone        : STRING[2];
  70.    SerString   : STRING[3];
  71.    DispFreq    : STRING[7];
  72.    FreqSet     : STRING[8];
  73.    FreqString,
  74.    LSDFreq     : STRING[10];
  75.    FNString    : STRING[12];
  76.    Desc        : STRING[50];
  77.    FreqTune    : REAL;
  78.    Mode        : CHAR;
  79.  
  80. BEGIN (* LoadMemories *)
  81.    SerString := '';
  82.    FNString  := '';
  83.    FOR Index := 1 TO LENGTH(CmdLineStr) DO
  84.       SerString := SerString + UPCASE(CmdLineStr[Index]);
  85.    FNString  := 'Y767' + SerString + '.MEM';
  86.    ASSIGN(Y767MemDataFile,FNString);
  87.    {$I-} RESET(Y767MemDataFile) {$I+} ;
  88.    Ok := (IOResult = 0);
  89.    IF NOT Ok THEN BEGIN
  90.       WRITELN('Cannot find memory data file.');
  91.       WRITELN('Memory channels will NOT be loaded.');
  92.       DELAY(1000);
  93.    END (* IF NOT Ok *)
  94.    ELSE BEGIN
  95.       RecNo   := 0;
  96.       FreqString := '';
  97.       WRITELN('DataFile: ',FNString);
  98.       CatSend(Nul3String+CHR(0)+CHR(9),5); (* Load into VFO A *)
  99.       FOR Index := 1 TO 9 DO BEGIN
  100.          READLN(Y767MemDataFile);         (* Read past column titles *)
  101.       END; (* FOR Index *)
  102.       WHILE RecNo < 10 DO BEGIN
  103.          FreqString    := '';
  104.          LSDFreq       := '';
  105.          FreqSet       := '';
  106.          READLN(Y767MemDataFile,Y767MemFileParams);
  107.          IF LENGTH(Y767MemFileParams) > 26 THEN BEGIN
  108.             FreqString := COPY(Y767MemFileParams,1,8);
  109.             Tone       := COPY(Y767MemFileParams,10,2);
  110.             Mode       := Y767MemFileParams[13];
  111.             DispFreq   := COPY(Y767MemFileParams,15,7);
  112.             Desc       := COPY(Y767MemFileParams,25,50);
  113.             VAL(FreqString,FreqTune,Result);
  114.             FreqTune   := FreqTune/100000.0;
  115.             CheckFreq(FreqTune);             (* Check if valid Freq *)
  116.             LSDFreq    := MakeLSDMSD(FreqString,8);
  117.             FreqSet    := FreqParm(LSDFreq,8);
  118.             WRITE('                                     ',CHR($0D));
  119.             WRITE('Loading ',FreqTune:8:5,' MHz. to memory ',RecNo);
  120.             IF NOT FreqErrorFlag THEN BEGIN  (* Send the Freq to 767 *)
  121.                CatSend(MultString(3,NUL)+CHR(RecNo)+CHR($A),8); (*Sel Mem ch *)
  122.                CatSend(FreqSet+CHR(8),5);   (* Set the frequency *)
  123.                CASE Mode OF
  124.                   'L' : Mode := CHR($10);
  125.                   'U' : Mode := CHR($11);
  126.                   'C' : Mode := CHR($12);
  127.                   'A' : Mode := CHR($13);
  128.                   'F' : Mode := CHR($14);
  129.                   'K' : Mode := CHR($15);
  130.                END; (* CASE *)
  131.                CatSend(Nul3String+Mode+CHR($A),8); (* Set Mem Mode *)
  132.                CatSend(Nul3String+CHR($60)+CHR($A),86); (* Move to Mem *)
  133.             END; (* IF NOT *)
  134.          END; (* IF LENGTH *)
  135.          INC(RecNo);
  136.       END; (* WHILE RecNo *)
  137.       CatSend(Nul3String+CHR(2)+CHR(9),5); (* Now, turn on MR *)
  138.       WRITE(CHR($0D),'                                     ');
  139.    END; (* ELSE *)
  140. END; (* LoadMemories *)
  141.  
  142. (*═══════════════════════════════════════════════════════════════════════*)
  143. PROCEDURE SetupFT767; (* Set up basic program functions *)
  144.  
  145. BEGIN (* SetupFT767 *)
  146.    IF PARAMCOUNT > 0 THEN                    (* Command line parameters *)
  147.    RadioPort       := 1;                     (* Default is COM1: *)
  148.    RComVec         := $0C;
  149.    RComBase        := $3F8;
  150.    RIRQM           := $10;
  151.       IF (PARAMSTR(2) = '/2') THEN BEGIN     (* Values for COM2: *)
  152.          RadioPort := 2;
  153.          RComVec   := $0B;
  154.          RComBase  := $2F8;
  155.          RIRQM     := $08;
  156.       END; (* IF PARAMSTR(2) *)
  157.    IF mem[$0040:$0049] = 7 THEN              (* Get video parameters *)
  158.       ScreenSeg    := $B000                  (* Mono display addressing *)
  159.    ELSE ScreenSeg  := $B800;                 (* CGA/EGA display addressing *)
  160.    DirectVideo     := TRUE;                  (* Don't use BIOS for video *)
  161.    Repeater        := FALSE;                 (* Default is simplex *)
  162.    TNC             := FALSE;
  163.    SetupSerialPort(RadioRate,RadioPort,RComVec,RComBase,RIRQM,'R');
  164. END; (* SetupFT767 *)
  165.  
  166. BEGIN (*================= MAINLINE CONTROL ROUTINE ========================*)
  167.    WRITELN(CHR($0A),'Yaesu FT-767GX memory loader');
  168.    ZeroVariables;                            (* Initialize all globals *)
  169.    SetupFT767;                               (* Set up housekeeping *)
  170.    CatSend(CatOn,86);
  171.    LoadMemories(PARAMSTR(1));
  172.    CatSend(CatOff,86);
  173.    WRITE(CHR($0D),'LoadY Finished.',CHR($0A));
  174.    WRITELN;
  175. END. (* MAINLINE CONTROL ROUTINE and LOADY.PAS *)
  176.