home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / bpos2i.zip / KBDCALLS.PAS < prev    next >
Pascal/Delphi Source File  |  1994-05-31  |  14KB  |  380 lines

  1. (* ====================================================== *)
  2. (*                       KBDCALLS.PAS                     *)
  3. (*     Implementation of the funktionen of KBDCALLS.DLL   *)
  4. (*          Translation to Pascal by jb/toolbox mag       *)
  5. (* ====================================================== *)
  6. {$IFNDEF OS2}
  7.   Error: Wrong target/Compiler not patched
  8. {$ENDIF}
  9.  
  10. UNIT KbdCalls;
  11.  
  12. INTERFACE
  13.  
  14. USES
  15.   Os2Def;
  16.  
  17. (* Keyboard handling procedures. Most of these procedures *)
  18. (* are needed only for very special applications. You can *)
  19. (* read the keyboard simply by using KbdCharIn with a     *)
  20. (* handle of 0.                                           *)
  21.  
  22. (* The record type returned by KbdCharIn *)
  23.  
  24. CONST
  25.   KR_KBDCHARIN                = 1;
  26.   KR_KBDPEEK                  = 2;
  27.   KR_KBDFLUSHBUFFER           = 4;
  28.   KR_KBDGETSTATUS             = 8;
  29.   KR_KBDSETSTATUS             = $10;
  30.   KR_KBDSTRINGIN              = $20;
  31.   KR_KBDOPEN                  = $40;
  32.   KR_KBDCLOSE                 = $80;
  33.   KR_KBDGETFOCUS              = $100;
  34.   KR_KBDFREEFOCUS             = $200;
  35.   KR_KBDGETCP                 = $400;
  36.   KR_KBDSETCP                 = $800;
  37.   KR_KBDXLATE                 = $1000;
  38.   KR_KBDSETCUSTXT             = $2000;
  39.  
  40.   IO_WAIT     = 0;
  41.   IO_NOWAIT   = 1;
  42.  
  43.   KEYBOARD_AT_COMPATIBLE      = 1;
  44.   KEYBOARD_ENHANCED_101       = $0AB41;
  45.   KEYBOARD_ENHANCED_102       = $0AB41;
  46.   KEYBOARD_ENHANCED_122       = $0AB85;
  47.   KEYBOARD_SPACESAVER         = $0AB54;
  48.  
  49.  
  50. TYPE
  51.   KbdKeyInfo = RECORD
  52.     chChar      : CHAR;
  53.     chScan      : CHAR;
  54.     fbStatus    : CHAR;
  55.     bNlsShift   : CHAR;
  56.     fsState     : WORD;
  57.     time        : LongInt; (* LONGCARD *)
  58.   END;
  59.  
  60.   StringInBuf = RECORD
  61.     cb      : WORD;
  62.     cchIn   : WORD;
  63.   END;
  64.  
  65.   KbdHWid = RECORD
  66.     cb      : WORD;
  67.     idKbd   : WORD;
  68.     usRes1  : WORD;
  69.     usRes2  : WORD;
  70.   END;
  71.  
  72.   KbdTrans = RECORD
  73.     chChar          : CHAR;
  74.     chScan          : CHAR;
  75.     fbStatus        : CHAR;
  76.     bNlsShift       : CHAR;
  77.     fsState         : WORD;
  78.     time            : LongInt (* LONGCARD *);
  79.     fsDD            : WORD;
  80.     fsXlate         : WORD;
  81.     fsShift         : WORD;
  82.     sZero           : WORD;
  83.   END;
  84.  
  85.   KbdInfo = RECORD
  86.     cb              : WORD;
  87.     fsMask          : BYTE (* BITSET *);
  88.     chTurnAround    : WORD;
  89.     fsInterim       : WORD;
  90.     fsState         : BYTE (* BITSET *);
  91.   END;
  92.  
  93. (* This record type is used in the KbdGetStatus and *)
  94. (* KbdSetStatus procedures                          *)
  95.  
  96. TYPE
  97.   KbdStatus = RECORD
  98.     Size           : WORD;   (* size of structure,        *)
  99.                              (* including size            *)
  100.     Mask           : BYTE (* BITSET*); (* mode bits       *)
  101.     TurnaroundChar : WORD;   (* the RETURN char           *)
  102.     InterimFlags   : WORD;   (* 5 -> on-the-spot          *)
  103.                              (*      conversion req       *)
  104.                              (* 7 -> interim character    *)
  105.                              (*      flag                 *)
  106.                              (* 8..15 -> NLS Shift State  *)
  107.     ShiftState     : BYTE (*BITSET *); (* as above exc,   *)
  108.                                        (* only bits 0..7  *)
  109.   END;
  110.  
  111. (* the Mask field in above record has the following       *)
  112. (* bits defined                                           *)
  113.  
  114. CONST
  115.   EchoOn              = 0;
  116.   EchoOff             = 1;
  117.   RawMode             = 2;
  118.   CookedMode          = 3;
  119.   ModifyShiftState    = 4; (* set if shift state should   *)
  120.                            (* be modified                 *)
  121.   ModifyInterimFlags  = 5; (* set if interim flags should *)
  122.                            (* be modified                 *)
  123.   ModifyTurnaround    = 6; (* set if turnaround char      *)
  124.                            (* should be modified          *)
  125.   TurnaroundExtended  = 7; (* set if turnaround char is   *)
  126.                            (* extended char               *)
  127.  
  128. (* Bit definitions for ShiftState *)
  129.  
  130. CONST
  131.   RightShiftDown      = 0;
  132.   LeftShiftDown       = 1;
  133.   EitherControlDown   = 2;
  134.   EitherAltDown       = 3;
  135.   ScrollLockOn        = 4;
  136.   NumLockOn           = 5;
  137.   CapsLockOn          = 6;
  138.   InsertOn            = 7;
  139.   LeftControlDown     = 8;
  140.   LeftAltDown         = 9;
  141.   RightControlDown    = 10;
  142.   RightAltDown        = 11;
  143.   ScollLockDown       = 12;
  144.   NumLockDown         = 13;
  145.   CapsLockDown        = 14;
  146.   SysReqDown          = 15;
  147.  
  148.  
  149. (* Read a character from the keyboard *)
  150.  
  151. FUNCTION KbdCharIn(VAR Data     : KbdKeyInfo;
  152.                                      (* the returned info *)
  153.                        IOWait   : WORD;
  154.                                 (* 0 -> wait, 1 -> nowait *)
  155.                        KbdHandle: WORD) : WORD;
  156.                                (* logical keyboard handle *)
  157. FUNCTION Kbd16CharIn(VAR Data     : KbdKeyInfo;
  158.                                      (* the returned info *)
  159.                          IOWait   : WORD;
  160.                                 (* 0 -> wait, 1 -> nowait *)
  161.                          KbdHandle: WORD) : WORD;
  162.                                (* logical keyboard handle *)
  163.  
  164.  
  165.  
  166. (* Close a logical keyboard *)
  167. FUNCTION KbdClose(  Handle: WORD) : WORD;
  168. FUNCTION Kbd16Close(Handle: WORD) : WORD;
  169.                     (* logical keyboard handle *)
  170.  
  171.  
  172. (* De-register a keyboard subsystem *)
  173.  
  174. FUNCTION KbdDeRegister: WORD;
  175. FUNCTION Kbd16DeRegister: WORD;
  176.  
  177. (* Flush the keystroke buffer *)
  178.  
  179. FUNCTION KbdFlushBuffer(  KbdHandle: WORD) : WORD;
  180. FUNCTION Kbd16FlushBuffer(KbdHandle: WORD) : WORD;
  181.                            (* must be zero *)
  182.  
  183.  
  184. (* Release the keyboard focus *)
  185.  
  186. FUNCTION KbdFreeFocus(  KbdHandle: WORD) : WORD;
  187. FUNCTION Kbd16FreeFocus(KbdHandle: WORD) : WORD;
  188.                         (* logical keyboard handle *)
  189.  
  190.     
  191. (* Get the keyboard focus *)
  192.  
  193. FUNCTION KbdGetFocus(IOWait   : WORD; { 0 -> wait, 1 -> nowait  }
  194.                      KbdHandle: WORD  { logical keyboard handle }
  195.                                     ) : WORD;
  196. FUNCTION Kbd16GetFocus(IOWait   : WORD; { 0 -> wait, 1 -> nowait  }
  197.                        KbdHandle: WORD  { logical keyboard handle }
  198.                                       ) : WORD;
  199.  
  200. (* Get the keyboard status *)
  201.  
  202. FUNCTION KbdGetStatus(Status    : KbdInfo; (* the returned info *)
  203.                       KbdHandle : WORD     (* the keyboard handle *)
  204.                                ): WORD;
  205. FUNCTION Kbd16GetStatus(Status    : KbdInfo; (* the returned info *)
  206.                         KbdHandle : WORD     (* the keyboard handle *)
  207.                                  ): WORD;
  208.  
  209. (* Get the code page currently in use *)
  210.  
  211. FUNCTION KbdGetCP(    Reserved   : LongInt; (* must be zero *)
  212.                   VAR CodePageID : WORD;    (* the returned code page *)
  213.                       KbdHandle  : WORD     (* the logical keyboard handle *)
  214.                                  ): WORD;
  215. FUNCTION Kbd16GetCP(  Reserved   : LongInt; (* must be zero *)
  216.                   VAR CodePageID : WORD;    (* the returned code page *)
  217.                       KbdHandle  : WORD     (* the logical keyboard handle *)
  218.                                 ): WORD;
  219.  
  220. (* Open a logical keyboard *)
  221.  
  222. FUNCTION KbdOpen(VAR KbdHandle: WORD) : WORD;
  223.                  (*  ^^^ the returned handle *)
  224. FUNCTION Kbd16Open(VAR KbdHandle: WORD) : WORD;
  225.                    (*  ^^^ the returned handle *)
  226.  
  227.  
  228. (* Get keyboard data without removing it from the buffer *)
  229.  
  230. FUNCTION KbdPeek(VAR Data      : KbdKeyInfo; (* the returned character data *)
  231.                      KbdHandle : WORD        (* logical keyboard handle *)
  232.                              ) : WORD;
  233. FUNCTION Kbd16Peek(VAR Data      : KbdKeyInfo; (* the returned character data *)
  234.                        KbdHandle : WORD        (* logical keyboard handle *)
  235.                                ) : WORD;
  236.  
  237. (* Register a keyboard subsystem.  This allows you to specify a procedure *)
  238. (* in a dynamic link library that is called for various keyboard functions *)
  239.  
  240. FUNCTION KbdRegister(ModuleName  : pChar;   (* library module name *)
  241.                      EntryPoint  : pChar;   (* name of procedure to call *)
  242.                      FunctionMask: LongInt  (* LONGCARD *)
  243.                                             (* functions handled by procedure *)
  244.                                ) : WORD;
  245. FUNCTION Kbd16Register(ModuleName  : pChar;   (* library module name *)
  246.                        EntryPoint  : pChar;   (* name of procedure to call *)
  247.                        FunctionMask: LongInt  (* LONGCARD *)
  248.                                               (* functions handled by procedure *)
  249.                                  ) : WORD;
  250.  
  251. (* Associates a translate table with a logical keyboard *)
  252.  
  253. FUNCTION KbdSetCP(codepage  : Pointer; (* address of the translate table *)
  254.                   KbdHandle : WORD     (* logical keyboard handle        *)
  255.                            ): WORD;
  256. FUNCTION Kbd16SetCP(codepage  : Pointer; (* address of the translate table *)
  257.                     KbdHandle : WORD     (* logical keyboard handle        *)
  258.                              ): WORD;
  259.  
  260. (* Raise the priority of the foreground keyboard's thread.  To be *)
  261. (* used only by the keyboard subsystem, not an application *)
  262.  
  263. FUNCTION KbdSetFgnd  : WORD;
  264. FUNCTION Kbd16SetFgnd: WORD;
  265.  
  266. (* Set the keyboard status *)
  267.  
  268. FUNCTION KbdSetStatus(Status   : KbdInfo; (* the new status settings *)
  269.                       KbdHandle: WORD     (* the logical keyboard handle *)
  270.                               ): WORD;
  271. FUNCTION Kbd16SetStatus(Status   : KbdInfo; (* the new status settings *)
  272.                         KbdHandle: WORD     (* the logical keyboard handle *)
  273.                                 ): WORD;
  274.  
  275. (* Read a string from the keyboard *)
  276.  
  277. FUNCTION KbdStringIn(    CharBuffer : Pointer;  (* address of the string buffer *)
  278.                      VAR a          : StringInBuf;
  279.                          IOWait     : WORD;     (* 0 -> wait, 1 -> nowait *)
  280.                          KbdHandle  : WORD      (* Logical keyboard handle *)
  281.                                    ): WORD;
  282. FUNCTION Kbd16StringIn(    CharBuffer : Pointer;  (* address of the string buffer *)
  283.                        VAR a          : StringInBuf;
  284.                            IOWait     : WORD;     (* 0 -> wait, 1 -> nowait *)
  285.                            KbdHandle  : WORD      (* Logical keyboard handle *)
  286.                                      ): WORD;
  287.  
  288. (* Translate a scan code and shift state into a character *)
  289.  
  290. FUNCTION KbdXlate(VAR XlateRec  : KbdTrans; (* the above record *)
  291.                       KbdHandle : WORD      (* logical keyboard handle *)
  292.                               ) : WORD;
  293. FUNCTION Kbd16Xlate(VAR XlateRec  : KbdTrans; (* the above record *)
  294.                         KbdHandle : WORD      (* logical keyboard handle *)
  295.                                 ) : WORD;
  296.  
  297. FUNCTION KbdGetHWID(  VAR a : KbdHWid; b : WORD) : WORD;
  298. FUNCTION Kbd16GetHWID(VAR a : KbdHWid; b : WORD) : WORD;
  299.  
  300. FUNCTION KbdSetCustXt(VAR a : WORD; b : WORD) : WORD;
  301. FUNCTION Kbd16SetCustXt(VAR a : WORD; b : WORD) : WORD;
  302.  
  303.  
  304.  
  305. IMPLEMENTATION
  306.  
  307.   FUNCTION KbdSetCustXt;      EXTERNAL 'KbdCalls' INDEX   1;
  308.   FUNCTION Kbd16SetCustXt;    EXTERNAL 'KbdCalls' INDEX   1;
  309.  
  310. (* ====================================================== *)
  311.  
  312.   FUNCTION KbdGetCP;          EXTERNAL 'KbdCalls' INDEX   3;
  313.   FUNCTION Kbd16GetCP;        EXTERNAL 'KbdCalls' INDEX   3;
  314.  
  315.   FUNCTION KbdCharIn;         EXTERNAL 'KbdCalls' INDEX   4;
  316.   FUNCTION Kbd16CharIn;       EXTERNAL 'KbdCalls' INDEX   4;
  317.  
  318.   FUNCTION KbdSetCP;          EXTERNAL 'KbdCalls' INDEX   5;
  319.   FUNCTION Kbd16SetCP;        EXTERNAL 'KbdCalls' INDEX   5;
  320.  
  321. { nicht implementiert:
  322.   FUNCTION KbdSynch;          External 'KbdCalls' INDEX   7;
  323.   FUNCTION Kbd16Synch;        External 'KbdCalls' INDEX   7;
  324. }
  325.   FUNCTION KbdRegister;       EXTERNAL 'KbdCalls' INDEX   8;
  326.   FUNCTION Kbd16Register;     EXTERNAL 'KbdCalls' INDEX   8;
  327.  
  328.   FUNCTION KbdStringIn;       EXTERNAL 'KbdCalls' INDEX   9;
  329.   FUNCTION Kbd16StringIn;     EXTERNAL 'KbdCalls' INDEX   9;
  330.  
  331.   FUNCTION KbdGetStatus;      EXTERNAL 'KbdCalls' INDEX  10;
  332.   FUNCTION Kbd16GetStatus;    EXTERNAL 'KbdCalls' INDEX  10;
  333.  
  334.   FUNCTION KbdSetStatus;      EXTERNAL 'KbdCalls' INDEX  11;
  335.   FUNCTION Kbd16SetStatus;    EXTERNAL 'KbdCalls' INDEX  11;
  336.  
  337.   FUNCTION KbdGetFocus;       EXTERNAL 'KbdCalls' INDEX  12;
  338.   FUNCTION Kbd16GetFocus;     EXTERNAL 'KbdCalls' INDEX  12;
  339.  
  340.   FUNCTION KbdFlushBuffer;    EXTERNAL 'KbdCalls' INDEX  13;
  341.   FUNCTION Kbd16FlushBuffer;  EXTERNAL 'KbdCalls' INDEX  13;
  342.  
  343.   FUNCTION KbdXlate;          EXTERNAL 'KbdCalls' INDEX  14;
  344.   FUNCTION Kbd16Xlate;        EXTERNAL 'KbdCalls' INDEX  14;
  345.  
  346. (* ====================================================== *)
  347.  
  348.   FUNCTION KbdClose;          EXTERNAL 'KbdCalls' INDEX  17;
  349.   FUNCTION Kbd16Close;        EXTERNAL 'KbdCalls' INDEX  17;
  350.  
  351.   FUNCTION KbdFreeFocus;      EXTERNAL 'KbdCalls' INDEX  18;
  352.   FUNCTION Kbd16FreeFocus;    EXTERNAL 'KbdCalls' INDEX  18;
  353.  
  354. (* ====================================================== *)
  355.  
  356.   FUNCTION KbdDeRegister;     EXTERNAL 'KbdCalls' INDEX  20;
  357.   FUNCTION Kbd16DeRegister;   EXTERNAL 'KbdCalls' INDEX  20;
  358.  
  359.   FUNCTION KbdSetFgnd;        EXTERNAL 'KbdCalls' INDEX  21;
  360.   FUNCTION Kbd16SetFgnd;      EXTERNAL 'KbdCalls' INDEX  21;
  361.  
  362.   FUNCTION KbdPeek;           EXTERNAL 'KbdCalls' INDEX  22;
  363.   FUNCTION Kbd16Peek;         EXTERNAL 'KbdCalls' INDEX  22;
  364.  
  365.   FUNCTION KbdOpen;           EXTERNAL 'KbdCalls' INDEX  23;
  366.   FUNCTION Kbd16Open;         EXTERNAL 'KbdCalls' INDEX  23;
  367.  
  368.   FUNCTION KbdGetHWID;        EXTERNAL 'KbdCalls' INDEX  24;
  369.   FUNCTION Kbd16GetHWID;      EXTERNAL 'KbdCalls' INDEX  24;
  370.  
  371. {  not implemented:
  372.   FUNCTION KbdSetHWid;        External 'KbdCalls' INDEX  25;
  373.   FUNCTION Kbd16SetHWid;      External 'KbdCalls' INDEX  25;
  374. }
  375.  
  376. END.
  377.  
  378. (* ====================================================== *)
  379. (*                  Ende von KBDCALLS.PAS                 *)
  380.