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 >
Wrap
Pascal/Delphi Source File
|
1991-09-14
|
7KB
|
176 lines
{$R-,V-,S-} (*Range, Var-String, Stack checking all off *)
PROGRAM LOADY; (* Load Yaesu FT-767GX memories from command line file *)
(* Version 1.50 accomodates MARS freqs. *)
(* 07/19/91 D. J. Wilke N3HGQ *)
(*═══════════════════════════════════════════════════════════════════════*)
USES
CRT, DOS, (* Unit files for general functions *)
CATYGLO, CATYUTIL, CATYCOMM; (* Specific to this pgm *)
(*═══════════════════════════════════════════════════════════════════════*)
PROCEDURE SendIt(Inst : STRING5; SUS : INTEGER);
VAR
Index : INTEGER;
BEGIN
FOR Index := 1 to LENGTH(Inst) DO BEGIN
OutChar(Inst[Index],RComBase);
DELAY(20); (* 20 mSec delay *)
END;
DELAY(SUS * 15); (* Wait for buffer to fill *)
END; (* SendIt *)
(*═══════════════════════════════════════════════════════════════════════*)
PROCEDURE CatSend(Param : String5; StatusUpdateSize : INTEGER);
(* Send Instruction string to 767, get Echo & send ACKnowledge *)
VAR
Temp : STRING[86];
Ch : CHAR;
BEGIN (* CatSend *)
Inst := Param; (* Inform Global variable *)
Echo := ' ';
SendIt(Param,15); (* Send Instruction to 767 *)
(* Get 5 character echo from 767, if a match, send ACK string to 767 *)
IF Test THEN
FOR Index := 1 TO 5 DO
Echo[Index] := Inst[Index] (* Simulate 767 echo *)
ELSE FOR Index := 1 TO 5 DO
Echo[Index] := RInChar; (* Get real echo from 767 *)
IF (Echo = Inst) AND (NOT Test) THEN BEGIN
(* If Test was TRUE, UPDATE.DAT provided a simulated Update *)
SendIt(AckString,StatusUpdateSize); (* Echo matches, send ACK *)
FOR Index := 1 TO StatusUpdateSize DO
Lifo[Index] := RInChar; (* Get real Update from 767 *)
(* Update stream from 767 is sent last byte first *)
Temp := Fifo(Lifo); (* Convert LIFO to FIFO *)
Update := Temp;
END (* IF Echo *)
ELSE IF Echo <> Inst THEN BEGIN
WRITELN;
WRITELN('Bad echo from radio'); (* Issue command error warning *)
FlushRBuffer; (* Clear buffer of trash *)
END; (* ELSE IF *)
END; (* CatSend *)
(*═══════════════════════════════════════════════════════════════════════*)
PROCEDURE LoadMemories(CmdLineStr : STRING);
VAR
RecNo,
DotPos,
Result,
BCDin : INTEGER;
Ok : BOOLEAN;
FreqChr : STRING;
Tone : STRING[2];
SerString : STRING[3];
DispFreq : STRING[7];
FreqSet : STRING[8];
FreqString,
LSDFreq : STRING[10];
FNString : STRING[12];
Desc : STRING[50];
FreqTune : REAL;
Mode : CHAR;
BEGIN (* LoadMemories *)
SerString := '';
FNString := '';
FOR Index := 1 TO LENGTH(CmdLineStr) DO
SerString := SerString + UPCASE(CmdLineStr[Index]);
FNString := 'Y767' + SerString + '.MEM';
ASSIGN(Y767MemDataFile,FNString);
{$I-} RESET(Y767MemDataFile) {$I+} ;
Ok := (IOResult = 0);
IF NOT Ok THEN BEGIN
WRITELN('Cannot find memory data file.');
WRITELN('Memory channels will NOT be loaded.');
DELAY(1000);
END (* IF NOT Ok *)
ELSE BEGIN
RecNo := 0;
FreqString := '';
WRITELN('DataFile: ',FNString);
CatSend(Nul3String+CHR(0)+CHR(9),5); (* Load into VFO A *)
FOR Index := 1 TO 9 DO BEGIN
READLN(Y767MemDataFile); (* Read past column titles *)
END; (* FOR Index *)
WHILE RecNo < 10 DO BEGIN
FreqString := '';
LSDFreq := '';
FreqSet := '';
READLN(Y767MemDataFile,Y767MemFileParams);
IF LENGTH(Y767MemFileParams) > 26 THEN BEGIN
FreqString := COPY(Y767MemFileParams,1,8);
Tone := COPY(Y767MemFileParams,10,2);
Mode := Y767MemFileParams[13];
DispFreq := COPY(Y767MemFileParams,15,7);
Desc := COPY(Y767MemFileParams,25,50);
VAL(FreqString,FreqTune,Result);
FreqTune := FreqTune/100000.0;
CheckFreq(FreqTune); (* Check if valid Freq *)
LSDFreq := MakeLSDMSD(FreqString,8);
FreqSet := FreqParm(LSDFreq,8);
WRITE(' ',CHR($0D));
WRITE('Loading ',FreqTune:8:5,' MHz. to memory ',RecNo);
IF NOT FreqErrorFlag THEN BEGIN (* Send the Freq to 767 *)
CatSend(MultString(3,NUL)+CHR(RecNo)+CHR($A),8); (*Sel Mem ch *)
CatSend(FreqSet+CHR(8),5); (* Set the frequency *)
CASE Mode OF
'L' : Mode := CHR($10);
'U' : Mode := CHR($11);
'C' : Mode := CHR($12);
'A' : Mode := CHR($13);
'F' : Mode := CHR($14);
'K' : Mode := CHR($15);
END; (* CASE *)
CatSend(Nul3String+Mode+CHR($A),8); (* Set Mem Mode *)
CatSend(Nul3String+CHR($60)+CHR($A),86); (* Move to Mem *)
END; (* IF NOT *)
END; (* IF LENGTH *)
INC(RecNo);
END; (* WHILE RecNo *)
CatSend(Nul3String+CHR(2)+CHR(9),5); (* Now, turn on MR *)
WRITE(CHR($0D),' ');
END; (* ELSE *)
END; (* LoadMemories *)
(*═══════════════════════════════════════════════════════════════════════*)
PROCEDURE SetupFT767; (* Set up basic program functions *)
BEGIN (* SetupFT767 *)
IF PARAMCOUNT > 0 THEN (* Command line parameters *)
RadioPort := 1; (* Default is COM1: *)
RComVec := $0C;
RComBase := $3F8;
RIRQM := $10;
IF (PARAMSTR(2) = '/2') THEN BEGIN (* Values for COM2: *)
RadioPort := 2;
RComVec := $0B;
RComBase := $2F8;
RIRQM := $08;
END; (* IF PARAMSTR(2) *)
IF mem[$0040:$0049] = 7 THEN (* Get video parameters *)
ScreenSeg := $B000 (* Mono display addressing *)
ELSE ScreenSeg := $B800; (* CGA/EGA display addressing *)
DirectVideo := TRUE; (* Don't use BIOS for video *)
Repeater := FALSE; (* Default is simplex *)
TNC := FALSE;
SetupSerialPort(RadioRate,RadioPort,RComVec,RComBase,RIRQM,'R');
END; (* SetupFT767 *)
BEGIN (*================= MAINLINE CONTROL ROUTINE ========================*)
WRITELN(CHR($0A),'Yaesu FT-767GX memory loader');
ZeroVariables; (* Initialize all globals *)
SetupFT767; (* Set up housekeeping *)
CatSend(CatOn,86);
LoadMemories(PARAMSTR(1));
CatSend(CatOff,86);
WRITE(CHR($0D),'LoadY Finished.',CHR($0A));
WRITELN;
END. (* MAINLINE CONTROL ROUTINE and LOADY.PAS *)