home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Jason Aller Floppy Collection
/
189.img
/
TCS120S.ZIP
/
MODEM.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-03-22
|
3KB
|
144 lines
{$R-,S-,I-,D-,F+,V-,B-,N-,L+ }
{$M 65500,0,0 }
unit modem;
interface
uses crt,dos,configrt,general;
const RBR=$3F8; THR=$3F8; DLL=$3F8; DLM=$3F9; IER=$3F9;
IIR=$3FA; LCR=$3FB; MCR=$3FC; LSR=$3FD; MSR=$3FE;
intnum=255;
var icomoffset:integer;
procedure mfunc (var r:registers; ahval,alval:byte);
procedure sendchar (k:char);
function numchars:integer;
function getchar:char;
procedure gayger;
procedure hangup;
procedure setoutbuffer (size:integer);
procedure setparam (comnum:byte; baud:integer; parity:boolean);
function carrier:boolean;
function driverpresent:boolean;
procedure setterminalready (b:boolean);
procedure dontanswer;
procedure doanswer;
implementation
procedure mfunc (var r:registers; ahval,alval:byte);
begin
r.ax:=alval+(ahval shl 8);
intr (intnum,r)
end;
procedure sendchar (k:char);
var r:registers;
kkk:char;
function scramble (s:char):char;
var f:text;
x,y:char;
z:integer;
begin
scramble:=s;
if noscramble then exit;
if not scrambled then exit;
if not exist (forumdir+'Scramble.Dat') then exit;
if not (ord(s) in [65..90,97..122]) then exit;
assign (f,forumdir+'Scramble.Dat');
reset (f);
for z:=1 to ord(s) do
read (f,x);
scramble:=x;
close (f);
end;
begin
if scrambled then begin
kkk:=scramble (k);
end else kkk:=k;
mfunc (r,3,ord(kkk))
end;
function numchars:integer;
var r:registers;
begin
mfunc (r,1,0);
numchars:=r.ax
end;
function getchar:char;
var r:registers;
begin
mfunc (r,2,0);
getchar:=chr(r.ax and 255)
end;
procedure gayger;
var r:registers;
begin
mfunc (r,2,0);
end;
procedure hangup;
var r:registers;
begin
mfunc (r,6,0);
delay (200)
end;
procedure setoutbuffer (size:integer);
var r:registers;
begin
r.bx:=size;
mfunc (r,8,0)
end;
procedure setparam (comnum:byte; baud:integer; parity:boolean);
var r:registers;
p:byte;
begin
mfunc (r,0,comnum);
r.bx:=baud;
if parity then p:=1 else p:=0;
mfunc (r,7,p);
setoutbuffer (baud div 30);
case comnum of
1:icomoffset:=0;
2:icomoffset:=-256
end
end;
function carrier:boolean;
begin
carrier:=(port[msr+icomoffset] and 128)=128
end;
function driverpresent:boolean;
begin
driverpresent:=memw[memw[0:intnum*4+2]:memw[0:intnum*4]]=7686
end;
procedure setterminalready (b:boolean);
begin
port [icomoffset+mcr]:=ord(b) or 8
end;
procedure dontanswer;
begin
setterminalready (false)
end;
procedure doanswer;
begin
setterminalready (true)
end;
begin
end.