home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol072
/
crt.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
3KB
|
123 lines
{ Donated by Warren Smith, Feb 1982 }
Module CRT_Televideo;
{ This set of routines is designed to support a Televideo 912/920 type }
{ of terminal. If you have trouble adapting it to your terminal, give }
{ me a call. }
Const
Direct_IO = 6 ;
Crt_Status_Port = $5D; { Godbout System Support 1 serial status port }
Char_Rcvd_Bit = 2; { may be unique to the Signetics 2651 U/SART }
{ This is an external function supplied with Pascal MT+ which gives }
{ you a hook into CPM. }
External Function @BDOS (Func, Parm : integer) : integer;
Function Con_In : char ; { non-echoed input from the console }
Const
Parm = 255;
Begin { Con_In }
Con_In := chr(@BDOS(Direct_IO, Parm))
end ; { Con_In }
Procedure Con_Out (Out_Char : char) ;
Var
Dummy : integer ;
Begin { Con_Out }
Dummy := @BDOS(Direct_IO, ord(Out_Char))
end ; { Con_Out }
Function KeyPressed : Boolean ;
Begin { KeyPressed }
KeyPressed := Tstbit (Inp[$5D], 1) { Specific to System Support board }
end ; { KeyPressed }
Function Get_Console : char ; { waits for a single character from the }
{ console. }
Begin { Get_Console }
While not KeyPressed do;
Get_Console := Con_In
end ; { Get_Console }
Procedure GoToXY (X, Y : integer) ;
Const X_PLAC = 4 ;
Y_PLAC = 3 ;
MAX_X = 80 ;
MAX_Y = 24 ;
X_OFF = 31 ;
Y_OFF = 31 ;
Var BUFFER : array [1..4] of char ;
Begin { GoToXY }
BUFFER [1] := chr(27) ;
BUFFER [2] := '=' ;
If X < 1 Then
BUFFER [X_PLAC] := chr(X_OFF)
else
If X > MAX_X then
BUFFER [X_PLAC] := chr(MAX_X + X_OFF)
else
BUFFER [X_PLAC] := chr(X + X_OFF) ;
If Y < 1 then
BUFFER [Y_PLAC] := chr(Y_OFF)
else
If Y > MAX_Y then
BUFFER [Y_PLAC] := chr(MAX_Y + Y_OFF)
else
BUFFER [Y_PLAC] := chr(Y + Y_OFF) ;
Con_Out(Buffer[1]) ;
Con_Out(Buffer[2]) ;
Con_Out(Buffer[3]) ;
Con_Out(Buffer[4])
end ; { GoToXY }
Procedure Home ;
Begin { Home }
Con_Out (chr($1E))
end ; { Home }
Procedure ScreenClr ;
Begin { ScreenClr }
Con_Out (chr(26))
end ; { ScreenClr }
Procedure LineClr;
Begin { LineClr }
Con_Out (chr(27));
Con_Out ('t')
end; { LineClr }
Procedure Read_Cursor (Var X, Y : integer);
Var
Discard : char;
begin { Read_Cursor }
{ request cursor coordinates from TeleVideo 912 or 920 }
ConOut (chr(27));
ConOut ('?');
While not KeyPressed do;
Y := ord(ConIn) - $1F;
While not KeyPressed do;
X := ord(ConIn) - $1F;
While not KeyPressed do;
Discard := ConIn { this last character is supposed to be a CR }
end; { Read_Cursor }
ModEnd.