[Back to COMM SWAG index] [Back to Main SWAG index] [Original]
{
Since there has been a couple people asking for COMM routines here, I
thought I would post my source code from my DOOR game GRUNT! They are
FOSSIL routines that will work well with BNU.
}
(*
ÚÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³*³³ÜÛÛÛÛÛÜ ÛÛÛÛÛÛÜ ÛÛ ÛÛ ÜÛÛÛÛÛÜ ÛÛÛÛÛÛÛ ³
³*³³ÛÛ ÜÜÜ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÞÛÝ ³
³*³³ÛÛ ÛÛ ÛÛÛÛÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÞÛÝ ³
³*³³ßÛÛÛÛÛß ÛÛ ßÛÛ ßÛÛÛÛÛß ÛÛ ÛÛ ÞÛÝ ³
ÀÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ÚÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³*³³ (c)1995 by Michael S. Hoenie - All Rights Reserved. ³
ÀÄÙÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
*)
unit fossil;
{$S-,V-,R-}
interface uses dos;
type
fossildatatype = record
strsize: word;
majver: byte;
minver: byte;
ident: pointer;
ibufr: word;
ifree: word;
obufr: word;
ofree: word;
swidth: byte;
sheight: byte;
baud: byte;
end;
var
port_num: integer;
fossildata: fossildatatype;
procedure fossil_send(ch: char);
procedure fossil_send_string(S:STRING);
function fossil_receive(var ch: char): boolean;
function fossil_carrier_drop: boolean;
function fossil_carrier_present: boolean;
function fossil_buffer_check: boolean;
function fossil_init_fossil: boolean;
procedure fossil_deinit_fossil;
procedure fossil_flush_output;
procedure fossil_purge_output;
procedure fossil_purge_input;
procedure fossil_set_dtr(state: boolean);
procedure fossil_watchdog_on;
procedure fossil_watchdog_off;
procedure fossil_warm_reboot;
procedure fossil_cold_reboot;
procedure fossil_Set_baud(n: integer);
procedure fossil_set_flow(SoftTran,Hard,SoftRecv: boolean);
procedure fossil_Buffer_Status(var Insize,Infree,OutSize,Outfree: word);
implementation
procedure fossil_send(ch: char);
var
regs: registers;
begin;
regs.al:=ord(ch);
regs.dx:=port_num;
regs.ah:=1;
intr($14,regs);
end;
procedure fossil_send_string(S:STRING);
var
a: integer;
begin;
for a:=1 to length(s) do fossil_send(s[a]);
end;
function fossil_receive(var ch: char): boolean;
var
regs: registers;
begin;
ch:=#0;
regs.ah:=3;
regs.dx:=port_num;
intr($14,regs);
if (regs.ah and 1)=1 then begin;
regs.ah:=2;
regs.dx:=port_num;
intr($14,regs);
ch:=chr(regs.al);
fossil_receive:=true;
end else fossil_receive:=false;
end;
function fossil_carrier_drop: boolean;
var
regs: registers;
begin;
regs.ah:=3;
regs.dx:=port_num;
intr($14,regs);
if (regs.al and $80)<>0 then
fossil_carrier_drop:=false
else fossil_carrier_drop:=true;
end;
function fossil_carrier_present: boolean;
var
regs: registers;
begin;
regs.ah:=3;
regs.dx:=port_num;
intr($14,regs);
if (regs.al and $80)<>0 then
fossil_carrier_present:=true else
fossil_carrier_present:=false;
end;
function fossil_buffer_check: boolean;
var
regs: registers;
begin;
regs.ah:=3;
regs.dx:=port_num;
intr($14,regs);
if (regs.ah and 1)=1 then fossil_buffer_check:=true else
fossil_buffer_check:=false;
end;
function fossil_init_fossil: boolean;
var
regs: registers;
begin;
regs.ah:=4;
regs.bx:=0;
regs.dx:=port_num;
intr($14,regs);
if regs.ax=$1954 then fossil_init_fossil:=true else
fossil_init_fossil:=false;
end;
procedure fossil_deinit_fossil;
var
regs: registers;
begin;
regs.ah:=5;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_set_dtr(state: boolean);
var
regs: registers;
begin;
regs.ah:=6;
if state then regs.al:=1 else regs.al:=0;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_flush_output;
var
regs: registers;
begin;
regs.ah:=8;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_purge_output;
var
regs: registers;
begin;
regs.ah:=9;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_purge_input;
var
regs: registers;
begin;
regs.ah:=$0a;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_watchdog_on;
var
regs: registers;
begin;
regs.ah:=$14;
regs.al:=01;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_watchdog_off;
var
regs: registers;
begin;
regs.ah:=$14;
regs.al:=00;
regs.dx:=port_num;
intr($14,regs);
end;
procedure fossil_warm_reboot;
var
regs: registers;
begin;
regs.ah:=$17;
regs.al:=01;
intr($14,regs);
end;
procedure fossil_cold_reboot;
var
regs: registers;
begin;
regs.ah:=$17;
regs.al:=00;
intr($14,regs);
end;
procedure fossil_set_baud(n: integer);
var
regs: registers;
begin;
regs.ah:=00;
regs.al:=3;
regs.dx:=port_num;
case n of
300: regs.al:=regs.al or $40;
1200: regs.al:=regs.al or $80;
2400: regs.al:=regs.al or $A0;
4800: regs.al:=regs.al or $C0;
9600: regs.al:=regs.al or $E0;
19200: regs.al:=regs.al or $00;
else regs.al:=regs.al or $00;
end;
intr($14,regs);
end;
procedure fossil_set_flow(SoftTran,Hard,SoftRecv: boolean);
var
regs: registers;
begin;
regs.ah:=$0F;
regs.al:=00;
if softtran then regs.al:=regs.al or $01;
if Hard then regs.al:=regs.al or $02;
if SoftRecv then regs.al:=regs.al or $08;
regs.al:=regs.al or $F0;
Intr($14,regs);
end;
procedure fossil_get_fossil_data;
var
regs: registers;
begin;
regs.ah:=$1B;
regs.cx:=sizeof(fossildata);
regs.dx:=port_num;
regs.es:=seg(fossildata);
regs.di:=ofs(fossildata);
intr($14,regs);
end;
procedure fossil_Buffer_Status(var Insize,Infree,OutSize,Outfree: word);
begin;
fossil_get_fossil_data;
insize:=fossildata.ibufr;
infree:=fossildata.ifree;
outsize:=fossildata.obufr;
outfree:=fossildata.ofree;
end;
end.
[Back to COMM SWAG index] [Back to Main SWAG index] [Original]