home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vp11demo.zip / rtlsrc.rar / tv / DRIVERS.PAS < prev    next >
Pascal/Delphi Source File  |  1996-10-08  |  9KB  |  289 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 7.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1992 Borland International        }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. { Drivers unit has been rewritten completely.           }
  12. { OS/2 system error handler is used, so SysErrorFunc,   }
  13. { SystemError,SysColorAttr,SysMonoAttr and SaveInt09    }
  14. { are not available. MouseIntFlag variable is not       }
  15. { supported also.                                       }
  16. { New services are introduced to support keystroke      }
  17. { macros.                                               }
  18. {$PureInt+}
  19. unit Drivers;
  20.  
  21. {$X+,I-,S-,P-,Cdecl-}
  22.  
  23. interface
  24.  
  25. uses Objects, Use32;
  26.  
  27. { ******** EVENT MANAGER ******** }
  28.  
  29. const
  30.  
  31. { Event codes }
  32.  
  33.   evMouseDown = $0001;
  34.   evMouseUp   = $0002;
  35.   evMouseMove = $0004;
  36.   evMouseAuto = $0008;
  37.   evKeyDown   = $0010;
  38.   evCommand   = $0100;
  39.   evBroadcast = $0200;
  40.  
  41. { Event masks }
  42.  
  43.   evNothing   = $0000;
  44.   evMouse     = $000F;
  45.   evKeyboard  = $0010;
  46.   evMessage   = $FF00;
  47.  
  48. { Extended key codes }
  49.  
  50.   kbEsc       = $011B;  kbAltSpace  = $0200;  kbCtrlIns   = $0400;
  51.   kbShiftIns  = $0500;  kbCtrlDel   = $0600;  kbShiftDel  = $0700;
  52.   kbBack      = $0E08;  kbCtrlBack  = $0E7F;  kbShiftTab  = $0F00;
  53.   kbTab       = $0F09;  kbAltQ      = $1000;  kbAltW      = $1100;
  54.   kbAltE      = $1200;  kbAltR      = $1300;  kbAltT      = $1400;
  55.   kbAltY      = $1500;  kbAltU      = $1600;  kbAltI      = $1700;
  56.   kbAltO      = $1800;  kbAltP      = $1900;  kbCtrlEnter = $1C0A;
  57.   kbEnter     = $1C0D;  kbAltA      = $1E00;  kbAltS      = $1F00;
  58.   kbAltD      = $2000;  kbAltF      = $2100;  kbAltG      = $2200;
  59.   kbAltH      = $2300;  kbAltJ      = $2400;  kbAltK      = $2500;
  60.   kbAltL      = $2600;  kbAltZ      = $2C00;  kbAltX      = $2D00;
  61.   kbAltC      = $2E00;  kbAltV      = $2F00;  kbAltB      = $3000;
  62.   kbAltN      = $3100;  kbAltM      = $3200;  kbF1        = $3B00;
  63.   kbF2        = $3C00;  kbF3        = $3D00;  kbF4        = $3E00;
  64.   kbF5        = $3F00;  kbF6        = $4000;  kbF7        = $4100;
  65.   kbF8        = $4200;  kbF9        = $4300;  kbF10       = $4400;
  66.   kbHome      = $4700;  kbUp        = $4800;  kbPgUp      = $4900;
  67.   kbGrayMinus = $4A2D;  kbLeft      = $4B00;  kbRight     = $4D00;
  68.   kbGrayPlus  = $4E2B;  kbEnd       = $4F00;  kbDown      = $5000;
  69.   kbPgDn      = $5100;  kbIns       = $5200;  kbDel       = $5300;
  70.   kbShiftF1   = $5400;  kbShiftF2   = $5500;  kbShiftF3   = $5600;
  71.   kbShiftF4   = $5700;  kbShiftF5   = $5800;  kbShiftF6   = $5900;
  72.   kbShiftF7   = $5A00;  kbShiftF8   = $5B00;  kbShiftF9   = $5C00;
  73.   kbShiftF10  = $5D00;  kbCtrlF1    = $5E00;  kbCtrlF2    = $5F00;
  74.   kbCtrlF3    = $6000;  kbCtrlF4    = $6100;  kbCtrlF5    = $6200;
  75.   kbCtrlF6    = $6300;  kbCtrlF7    = $6400;  kbCtrlF8    = $6500;
  76.   kbCtrlF9    = $6600;  kbCtrlF10   = $6700;  kbAltF1     = $6800;
  77.   kbAltF2     = $6900;  kbAltF3     = $6A00;  kbAltF4     = $6B00;
  78.   kbAltF5     = $6C00;  kbAltF6     = $6D00;  kbAltF7     = $6E00;
  79.   kbAltF8     = $6F00;  kbAltF9     = $7000;  kbAltF10    = $7100;
  80.   kbCtrlPrtSc = $7200;  kbCtrlLeft  = $7300;  kbCtrlRight = $7400;
  81.   kbCtrlEnd   = $7500;  kbCtrlPgDn  = $7600;  kbCtrlHome  = $7700;
  82.   kbAlt1      = $7800;  kbAlt2      = $7900;  kbAlt3      = $7A00;
  83.   kbAlt4      = $7B00;  kbAlt5      = $7C00;  kbAlt6      = $7D00;
  84.   kbAlt7      = $7E00;  kbAlt8      = $7F00;  kbAlt9      = $8000;
  85.   kbAlt0      = $8100;  kbAltMinus  = $8200;  kbAltEqual  = $8300;
  86.   kbCtrlPgUp  = $8400;  kbAltBack   = $0800;  kbNoKey     = $0000;
  87.  
  88. { Additional keyboard codes that Borland forgot to define }
  89.  
  90.  kbCtrlA      = $1E01;  kbCtrlB     = $3002;  kbCtrlC     = $2E03;
  91.  kbCtrlD      = $2004;  kbCtrlE     = $1205;  kbCtrlF     = $2106;
  92.  kbCtrlG      = $2207;  kbCtrlH     = $2308;  kbCtrlI     = $1709;
  93.  kbCtrlJ      = $240A;  kbCtrlK     = $250B;  kbCtrlL     = $260C;
  94.  kbCtrlM      = $320D;  kbCtrlN     = $310E;  kbCtrlO     = $180F;
  95.  kbCtrlP      = $1910;  kbCtrlQ     = $1011;  kbCtrlR     = $1312;
  96.  kbCtrlS      = $1F13;  kbCtrlT     = $1414;  kbCtrlU     = $1615;
  97.  kbCtrlV      = $2F16;  kbCtrlW     = $1117;  kbCtrlX     = $2D18;
  98.  kbCtrlY      = $1519;  kbCtrlZ     = $2C1A;
  99.  
  100. { 101-key AT keyboard }
  101.  
  102.  kbAltTab     = $A500; kbAltDel     = $A300;  kbAltIns    = $A200;
  103.  kbAltPgDn    = $A100; kbAltDown    = $A000;  kbAltEnd    = $9F00;
  104.  kbAltRight   = $9D00; kbAltLeft    = $9B00;  kbAltPgUp   = $9900;
  105.  kbAltUp      = $9800; kbAltHome    = $9700;  kbCtrlTab   = $9400;
  106.  kbCtrlGreyPlus=$9000; kbCtrlCenter = $8F00;  kbCtrlMinus = $8E00;
  107.  kbCtrlUp     = $8D00; kbAltF12     = $8C00;  kbAltF11    = $8B00;
  108.  kbCtrlF12    = $8A00; kbCtrlF11    = $8900;  kbShiftF12  = $8800;
  109.  kbShiftF11   = $8700; kbF12        = $8600;  kbF11       = $8500;
  110.  kbAltGrayPlus= $4E00; kbCenter     = $4C00;  kbAltGreyAst= $3700;
  111.  kbAltSlash   = $3500; kbAltPeriod  = $3400;  kbAltComma  = $3300;
  112.  kbAltBackSlash=$2B00; kbAltOpQuote = $2900;  kbAltQuote  = $2800;
  113.  kbAltSemicolon=$2700; kbAltRgtBrack= $1B00;  kbAltLftBrack=$1A00;
  114.  kbAltEsc     = $0100; kbCtrlDown   = $9100;
  115.  
  116. { Special keys }
  117.  
  118. kbAltShiftBack = $0900;
  119.  
  120. { Keyboard state and shift masks }
  121.  
  122.   kbRightShift  = $0001;
  123.   kbLeftShift   = $0002;
  124.   kbCtrlShift   = $0004;
  125.   kbAltShift    = $0008;
  126.   kbScrollState = $0010;
  127.   kbNumState    = $0020;
  128.   kbCapsState   = $0040;
  129.   kbInsState    = $0080;
  130.  
  131. { Mouse button state masks }
  132.  
  133.   mbLeftButton  = $01;
  134.   mbRightButton = $02;
  135.  
  136. type
  137.  
  138. { Event record }
  139.  
  140.   PEvent = ^TEvent;
  141.   TEvent = record
  142.     What: Word;
  143.     case Word of
  144.       evNothing: ();
  145.       evMouse: (
  146.         Buttons: Byte;
  147.         Double: Boolean;
  148.         Where: TPoint);
  149.       evKeyDown: (
  150.         case Integer of
  151.           0: (KeyCode: SmallWord;
  152.               ShiftState: Byte);
  153.           1: (CharCode: Char;
  154.               ScanCode: Byte));
  155.       evMessage: (
  156.         Command: Word;
  157.         case Word of
  158.           0: (InfoPtr: Pointer);
  159.           1: (InfoLong: Longint);
  160.           2: (InfoWord: Word);
  161.           3: (InfoInt: Integer);
  162.           4: (InfoByte: Byte);
  163.           5: (InfoChar: Char));
  164.   end;
  165.  
  166.   TShiftStateHandler = function(var ShiftState: Byte): Boolean;
  167.   TCtrlBreakAction = procedure;
  168.  
  169. const
  170.  
  171. { Initialized variables }
  172.  
  173.   ButtonCount: Byte = 0;
  174.   MouseEvents: Boolean = False;
  175.   MouseReverse: Boolean = False;
  176.   DoubleDelay: Word = 8;
  177.   RepeatDelay: Word = 8;
  178.   GetShiftStateHandler: TShiftStateHandler = nil;
  179.   CtrlBreakAction: TCtrlBreakAction = nil;
  180.   KeyDownMask: Word = evKeyDown;
  181.   NonStandardModes = True;
  182.  
  183. var
  184.   MouseButtons: Byte;
  185.   MouseWhere: TPoint;
  186.   MouseEventMask: SmallWord;
  187.   PrevXcptProc: Pointer;
  188.  
  189. { Event manager routines }
  190.  
  191. procedure InitEvents;
  192. procedure DoneEvents;
  193. { These procedures are called from BASM code, }
  194. { so they should not change registers         }
  195. {$SAVES ALL}
  196. procedure ShowMouse;
  197. procedure HideMouse;
  198. procedure UpdateMouseWhere;
  199. {$SAVES ebx,esi,edi}
  200. procedure GetMouseEvent(var Event: TEvent);
  201. procedure GetKeyEvent(var Event: TEvent);
  202. function GetShiftState: Byte;
  203.  
  204. { ******** SCREEN MANAGER ******** }
  205.  
  206. const
  207.  
  208. { Screen modes }
  209.  
  210.   smBW80        = $0002;
  211.   smCO80        = $0003;
  212.   smMono        = $0007;
  213.   smNonStandard = $00FF;
  214.   smFont8x8     = $0100;
  215.  
  216. const
  217.  
  218. { Initialized variables }
  219.  
  220.   StartupMode: Word = $FFFF;
  221.   CheckSnow: Boolean = False;   { not used }
  222.   TVVioHandle: Word = 0;
  223.  
  224. var
  225.  
  226. { Uninitialized variables }
  227.  
  228.   ScreenMode: Word;
  229.   ScreenWidth: Byte;
  230.   ScreenHeight: Byte;
  231.   HiResScreen: Boolean;
  232.   ScreenBuffer: Pointer;
  233.   CursorLines: SmallWord;
  234.   ScreenMirror: array[0..16383] of Byte;
  235.  
  236. { Screen manager routines }
  237.  
  238. procedure InitVideo;
  239. procedure DoneVideo;
  240. procedure SetVideoMode(Mode: Word);
  241. procedure ClearScreen;
  242.  
  243. { Keyboard }
  244.  
  245. procedure InitKeyboard;
  246.  
  247. { Initialized variables }
  248.  
  249. const
  250.   CtrlBreakHit: Boolean = False;
  251.   SaveCtrlBreak: Boolean = False;       { not used }
  252.   SysErrActive: Boolean = False;
  253.   FailSysErrors: Boolean = False;       { not used }
  254.  
  255. { System error handler routines }
  256.  
  257. procedure InitSysError;
  258. procedure DoneSysError;
  259.  
  260. { ******** UTILITY ROUTINES ******** }
  261.  
  262. { Keyboard support routines }
  263.  
  264. function GetAltChar(KeyCode: Word): Char;
  265. function GetAltCode(Ch: Char): Word;
  266. function GetCtrlChar(KeyCode: Word): Char;
  267. function GetCtrlCode(Ch: Char): Word;
  268. function CtrlToArrow(KeyCode: Word): Word;
  269.  
  270. { String routines }
  271.  
  272. procedure FormatStr(var Result: String; const Format: String; var Params);
  273. procedure PrintStr(const S: String);
  274.  
  275. { Buffer move routines }
  276.  
  277. procedure MoveBuf(var Dest; var Source; Attr: Byte; Count: Word);
  278. procedure MoveChar(var Dest; C: Char; Attr: Byte; Count: Word);
  279. procedure MoveCStr(var Dest; const Str: String; Attrs: Word);
  280. procedure MoveStr(var Dest; const Str: String; Attr: Byte);
  281. function CStrLen(const S: String): Integer;
  282.  
  283. implementation
  284.  
  285. uses Dos, Os2Def, Os2Base;
  286.  
  287. begin
  288. end.
  289.