236 lines
6.5 KiB
Plaintext
236 lines
6.5 KiB
Plaintext
|
|
{*******************************************************}
|
|
{ }
|
|
{ Turbo Pascal Version 6.0 }
|
|
{ Turbo Vision Unit }
|
|
{ }
|
|
{ Copyright (c) 1990 Borland International }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit Drivers;
|
|
|
|
{$F+,S-}
|
|
|
|
interface
|
|
|
|
uses Objects;
|
|
|
|
{ ******** EVENT MANAGER ******** }
|
|
|
|
const
|
|
|
|
{ Event codes }
|
|
|
|
evMouseDown = $0001;
|
|
evMouseUp = $0002;
|
|
evMouseMove = $0004;
|
|
evMouseAuto = $0008;
|
|
evKeyDown = $0010;
|
|
evCommand = $0100;
|
|
evBroadcast = $0200;
|
|
|
|
{ Event masks }
|
|
|
|
evNothing = $0000;
|
|
evMouse = $000F;
|
|
evKeyboard = $0010;
|
|
evMessage = $FF00;
|
|
|
|
{ Extended key codes }
|
|
|
|
kbEsc = $011B; kbAltSpace = $0200; kbCtrlIns = $0400;
|
|
kbShiftIns = $0500; kbCtrlDel = $0600; kbShiftDel = $0700;
|
|
kbBack = $0E08; kbCtrlBack = $0E7F; kbShiftTab = $0F00;
|
|
kbTab = $0F09; kbAltQ = $1000; kbAltW = $1100;
|
|
kbAltE = $1200; kbAltR = $1300; kbAltT = $1400;
|
|
kbAltY = $1500; kbAltU = $1600; kbAltI = $1700;
|
|
kbAltO = $1800; kbAltP = $1900; kbCtrlEnter = $1C0A;
|
|
kbEnter = $1C0D; kbAltA = $1E00; kbAltS = $1F00;
|
|
kbAltD = $2000; kbAltF = $2100; kbAltG = $2200;
|
|
kbAltH = $2300; kbAltJ = $2400; kbAltK = $2500;
|
|
kbAltL = $2600; kbAltZ = $2C00; kbAltX = $2D00;
|
|
kbAltC = $2E00; kbAltV = $2F00; kbAltB = $3000;
|
|
kbAltN = $3100; kbAltM = $3200; kbF1 = $3B00;
|
|
kbF2 = $3C00; kbF3 = $3D00; kbF4 = $3E00;
|
|
kbF5 = $3F00; kbF6 = $4000; kbF7 = $4100;
|
|
kbF8 = $4200; kbF9 = $4300; kbF10 = $4400;
|
|
kbHome = $4700; kbUp = $4800; kbPgUp = $4900;
|
|
kbGrayMinus = $4A2D; kbLeft = $4B00; kbRight = $4D00;
|
|
kbGrayPlus = $4E2B; kbEnd = $4F00; kbDown = $5000;
|
|
kbPgDn = $5100; kbIns = $5200; kbDel = $5300;
|
|
kbShiftF1 = $5400; kbShiftF2 = $5500; kbShiftF3 = $5600;
|
|
kbShiftF4 = $5700; kbShiftF5 = $5800; kbShiftF6 = $5900;
|
|
kbShiftF7 = $5A00; kbShiftF8 = $5B00; kbShiftF9 = $5C00;
|
|
kbShiftF10 = $5D00; kbCtrlF1 = $5E00; kbCtrlF2 = $5F00;
|
|
kbCtrlF3 = $6000; kbCtrlF4 = $6100; kbCtrlF5 = $6200;
|
|
kbCtrlF6 = $6300; kbCtrlF7 = $6400; kbCtrlF8 = $6500;
|
|
kbCtrlF9 = $6600; kbCtrlF10 = $6700; kbAltF1 = $6800;
|
|
kbAltF2 = $6900; kbAltF3 = $6A00; kbAltF4 = $6B00;
|
|
kbAltF5 = $6C00; kbAltF6 = $6D00; kbAltF7 = $6E00;
|
|
kbAltF8 = $6F00; kbAltF9 = $7000; kbAltF10 = $7100;
|
|
kbCtrlPrtSc = $7200; kbCtrlLeft = $7300; kbCtrlRight = $7400;
|
|
kbCtrlEnd = $7500; kbCtrlPgDn = $7600; kbCtrlHome = $7700;
|
|
kbAlt1 = $7800; kbAlt2 = $7900; kbAlt3 = $7A00;
|
|
kbAlt4 = $7B00; kbAlt5 = $7C00; kbAlt6 = $7D00;
|
|
kbAlt7 = $7E00; kbAlt8 = $7F00; kbAlt9 = $8000;
|
|
kbAlt0 = $8100; kbAltMinus = $8200; kbAltEqual = $8300;
|
|
kbCtrlPgUp = $8400; kbNoKey = $0000;
|
|
|
|
{ Keyboard state and shift masks }
|
|
|
|
kbRightShift = $0001;
|
|
kbLeftShift = $0002;
|
|
kbCtrlShift = $0004;
|
|
kbAltShift = $0008;
|
|
kbScrollState = $0010;
|
|
kbNumState = $0020;
|
|
kbCapsState = $0040;
|
|
kbInsState = $0080;
|
|
|
|
{ Mouse button state masks }
|
|
|
|
mbLeftButton = $01;
|
|
mbRightButton = $02;
|
|
|
|
type
|
|
|
|
{ Event record }
|
|
|
|
PEvent = ^TEvent;
|
|
TEvent = record
|
|
What: Word;
|
|
case Word of
|
|
evNothing: ();
|
|
evMouse: (
|
|
Buttons: Byte;
|
|
Double: Boolean;
|
|
Where: TPoint);
|
|
evKeyDown: (
|
|
case Integer of
|
|
0: (KeyCode: Word);
|
|
1: (CharCode: Char;
|
|
ScanCode: Byte));
|
|
evMessage: (
|
|
Command: Word;
|
|
case Word of
|
|
0: (InfoPtr: Pointer);
|
|
1: (InfoLong: Longint);
|
|
2: (InfoWord: Word);
|
|
3: (InfoInt: Integer);
|
|
4: (InfoByte: Byte);
|
|
5: (InfoChar: Char));
|
|
end;
|
|
|
|
const
|
|
|
|
{ Initialized variables }
|
|
|
|
ButtonCount: Byte = 0;
|
|
MouseEvents: Boolean = False;
|
|
MouseReverse: Boolean = False;
|
|
DoubleDelay: Word = 8;
|
|
RepeatDelay: Word = 8;
|
|
|
|
var
|
|
|
|
{ Uninitialized variables }
|
|
|
|
MouseIntFlag: Byte;
|
|
MouseButtons: Byte;
|
|
MouseWhere: TPoint;
|
|
|
|
{ Event manager routines }
|
|
|
|
procedure InitEvents;
|
|
procedure DoneEvents;
|
|
procedure ShowMouse;
|
|
procedure HideMouse;
|
|
procedure GetMouseEvent(var Event: TEvent);
|
|
procedure GetKeyEvent(var Event: TEvent);
|
|
|
|
{ ******** SCREEN MANAGER ******** }
|
|
|
|
const
|
|
|
|
{ Screen modes }
|
|
|
|
smBW80 = $0002;
|
|
smCO80 = $0003;
|
|
smMono = $0007;
|
|
smFont8x8 = $0100;
|
|
|
|
const
|
|
|
|
{ Initialized variables }
|
|
|
|
StartupMode: Word = $FFFF;
|
|
|
|
var
|
|
|
|
{ Uninitialized variables }
|
|
|
|
ScreenMode: Word;
|
|
ScreenWidth: Byte;
|
|
ScreenHeight: Byte;
|
|
HiResScreen: Boolean;
|
|
CheckSnow: Boolean;
|
|
ScreenBuffer: Pointer;
|
|
CursorLines: Word;
|
|
|
|
{ Screen manager routines }
|
|
|
|
procedure InitVideo;
|
|
procedure DoneVideo;
|
|
procedure SetVideoMode(Mode: Word);
|
|
procedure ClearScreen;
|
|
|
|
{ ******** SYSTEM ERROR HANDLER ******** }
|
|
|
|
type
|
|
|
|
{ System error handler function type }
|
|
|
|
TSysErrorFunc = function(ErrorCode: Integer; Drive: Byte): Integer;
|
|
|
|
{ Default system error handler routine }
|
|
|
|
function SystemError(ErrorCode: Integer; Drive: Byte): Integer;
|
|
|
|
const
|
|
|
|
{ Initialized variables }
|
|
|
|
SysErrorFunc: TSysErrorFunc = SystemError;
|
|
SysColorAttr: Word = $4E4F;
|
|
SysMonoAttr: Word = $7070;
|
|
CtrlBreakHit: Boolean = False;
|
|
SaveCtrlBreak: Boolean = False;
|
|
SysErrActive: Boolean = False;
|
|
|
|
{ System error handler routines }
|
|
|
|
procedure InitSysError;
|
|
procedure DoneSysError;
|
|
|
|
{ ******** UTILITY ROUTINES ******** }
|
|
|
|
{ Keyboard support routines }
|
|
|
|
function GetAltChar(KeyCode: Word): Char;
|
|
function GetAltCode(Ch: Char): Word;
|
|
function CtrlToArrow(KeyCode: Word): Word;
|
|
|
|
{ String routines }
|
|
|
|
procedure FormatStr(var Result: String; Format: String; var Params);
|
|
procedure PrintStr(S: String);
|
|
|
|
{ Buffer move routines }
|
|
|
|
procedure MoveBuf(var Dest; var Source; Attr: Byte; Count: Word);
|
|
procedure MoveChar(var Dest; C: Char; Attr: Byte; Count: Word);
|
|
procedure MoveCStr(var Dest; Str: String; Attrs: Word);
|
|
procedure MoveStr(var Dest; Str: String; Attr: Byte);
|
|
function CStrLen(S: String): Integer;
|