home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / header45.zip / vkbdpdd.h < prev    next >
C/C++ Source or Header  |  1999-03-15  |  17KB  |  482 lines

  1. /***    vkbdpdd.h
  2.  *
  3.  *
  4.  *      Keyboard PDD/VDD shared structures/constants
  5.  *      Copyright (c) 1992 IBM Corporation
  6.  *
  7.  */
  8.  
  9. /* NOINC */
  10. #if __IBMC__ || __IBMCPP__
  11.    #pragma info( none )
  12.       #ifndef __CHKHDR__
  13.          #pragma info( none )
  14.       #endif
  15.    #pragma info( restore )
  16. #endif
  17. /* INC */
  18.  
  19.  
  20. #ifndef __VKBDPDD__
  21. #define __VKBDPDD__
  22.  
  23.  
  24. /* KBD PDD component definitions */
  25.  
  26. #define KBD_NAME                "KBD$"
  27.  
  28.  
  29. /***    PDD function commands
  30.  *
  31.  *  Format:
  32.  *      (*fpfnPKVDDProc)(PKBDCMD_*, f16p1, f16p2);
  33.  *
  34.  *  PKBDCMD_REGISTER:
  35.  *      f16p1 == segment of 16:32 VDD entry point
  36.  *      f16p2 ==  offset of 16:32 VDD entry point
  37.  *
  38.  *  PKBDCMD_DEREGISTER:
  39.  *      f16p1 == F16PNULL
  40.  *      f16p2 == F16PNULL
  41.  *
  42.  *  PKBDCMD_VDMCREATED:
  43.  *      f16p1 -> KSGID      (see packet below)
  44.  *      f16p2 == F16PNULL
  45.  *
  46.  *  PKBDCMD_QUERYID:
  47.  *      f16p1 == F16PNULL
  48.  *      f16p2 -> KID        (see packet below)
  49.  *
  50.  *  PKBDCMD_QUERYINHIBIT:
  51.  *      f16p1 == F16PNULL
  52.  *      f16p2 -> KINH       (see packet below)
  53.  *
  54.  *  PKBDCMD_SETLEDS:
  55.  *      f16p1 -> KLEDS      (see packet below)
  56.  *      f16p2 == F16PNULL
  57.  *
  58.  *  PKBDCMD_SETREPEATRATE:
  59.  *      f16p1 -> KRPT       (see packet below)
  60.  *      f16p2 == F16PNULL
  61.  *
  62.  *  PKBDCMD_TRANSLATE:
  63.  *      f16p1 -> KXLT       (see packet below)
  64.  *      f16p2 == F16PNULL
  65.  *
  66.  *  PKBDCMD_VDMTERMINTED:
  67.  *      f16p1 -> KSGID      (see packet below)
  68.  *      f16p2 == F16PNULL
  69.  *
  70.  *  PKBDCMD_FOCUS:
  71.  *      f16p1 -> KFOCUS     (see packet below)
  72.  *      f16p2 == F16PNULL
  73.  *
  74.  *  PKBDCMD_QUERYREVXLATE:
  75.  *      f16p1 -> KQRX       (see packet below)
  76.  *      f16p2 == F16PNULL
  77.  *
  78.  *  PKBDCMD_QUERYTYPE:
  79.  *      f16p1 == F16PNULL
  80.  *      f16p2 -> KTYPE      (see packet below)
  81.  */
  82.  
  83. #define PKBDCMD_REGISTER        PDDCMD_REGISTER      /* register VDD              */
  84. #define PKBDCMD_DEREGISTER      (PKBDCMD_REGISTER+1) /* de-register VDD           */
  85. #define PKBDCMD_VDMCREATED      (PKBDCMD_REGISTER+2) /* notify VDM is created     */
  86. #define PKBDCMD_QUERYID         (PKBDCMD_REGISTER+3) /* query physical kbd ID     */
  87. #define PKBDCMD_QUERYINHIBIT    (PKBDCMD_REGISTER+4) /* query inhibit state       */
  88. #define PKBDCMD_SETLEDS         (PKBDCMD_REGISTER+5) /* set physical LEDs         */
  89. #define PKBDCMD_SETREPEATRATE   (PKBDCMD_REGISTER+6) /* set physical repeat rate  */
  90. #define PKBDCMD_TRANSLATE       (PKBDCMD_REGISTER+7) /* translate a scan code     */
  91. #define PKBDCMD_VDMTERMINATED   (PKBDCMD_REGISTER+8) /* notify VDM termination    */
  92. #define PKBDCMD_KFOCUS          (PKBDCMD_REGISTER+9) /* notify of focus change    */
  93. #define PKBDCMD_QUERYREVXLATE   (PKBDCMD_REGISTER+10)/* query reverse xlate table */
  94. #define PKBDCMD_HOTKEY          (PKBDCMD_REGISTER+11)/* notify of Hot Key setting */
  95. #define PKBDCMD_QUERYTYPE       (PKBDCMD_REGISTER+12)/* query KBD Type            */
  96. #define PKBDCMD_SETXMODE        (PKBDCMD_REGISTER+13)/* Set xlate mode            */
  97.  
  98. typedef struct ksgid_s {
  99.     USHORT  ksgid_len;                  /* length of packet (4)*/
  100.     SGID    ksgid_sgid;                 /* screen group ID     */
  101. } KSGID;
  102.  
  103. typedef KSGID *PKSGID;
  104.  
  105. /*c-begin*/
  106. #define KSGID_PKT_LEN   sizeof(KSGID)
  107. /*c-end*/
  108.  
  109.  
  110. typedef struct kid_s {
  111.     USHORT kid_len;                     /* length of packet (4)*/
  112.     USHORT kid_ID;                      /* keyboard ID         */
  113. } KID;
  114.  
  115. typedef KID *PKID;
  116.  
  117. /*c-begin*/
  118. #define KID_PKT_LEN     sizeof(KID)*/
  119. /*c-end*/
  120.  
  121.  
  122. typedef struct kinh_s {
  123.     USHORT kinh_len;                    /* length of packet (3)*/
  124.     BBOOL  kinh_fInhibited;             /* TRUE if inhibited, FALSE if not*/
  125. } KINH;
  126.  
  127. typedef KINH *PKINH;
  128.  
  129. /*c-begin*/
  130. #define KINH_PKT_LEN    sizeof(KINH)
  131. /*c-end*/
  132.  
  133.  
  134. typedef struct kled_s {
  135.     USHORT kled_len;                    /* length of packet (4)*/
  136.     USHORT kled_fsLEDs;                 /* bit0:SCROLL; bit1:NUM; bit2:CAPS*/
  137. } KLEDS;
  138.  
  139. typedef KLEDS *PKLEDS;
  140.  
  141. /*c-begin
  142. #define KLEDS_PKT_LEN   sizeof(KLEDS)
  143. /*c-end*/
  144. /*masm-begin*/
  145. /*KLEDS_PKT_LEN EQU     SIZE kled_s*/
  146. /*masm-end*/
  147.  
  148. typedef struct khotkey_s {
  149.     USHORT khk_len;
  150.     USHORT khk_action;
  151.     ULONG khk_hotkeys;
  152. } KHOTKEYS;
  153.  
  154. typedef KHOTKEYS *PKHOTKEYS;
  155.  
  156. /*c-begin*/
  157. #define KHOTKEYS_PKT_LEN   sizeof(KHOTKEYS)
  158. /*c-end*/
  159.  
  160. typedef struct krpt_s {
  161.     USHORT krpt_len;                    /* length of packet (6)*/
  162.     USHORT krpt_usDelay;                /* delay, in ms. (0 implies default)*/
  163.     USHORT krpt_usRate;                 /* rate, in cps (0 implies default)*/
  164. } KRPT;
  165.  
  166. typedef KRPT *PKRPT;
  167.  
  168. /*c-begin*/
  169. #define KRPT_PKT_LEN    sizeof(KRPT)
  170. /*c-end*/
  171.  
  172. typedef struct kkey_s {
  173.     UCHAR  key_len;                     /* length of packet (14)                */
  174.     UCHAR  key_chOrgScan;               /* original scan code                   */
  175.     UCHAR  key_chChar;                  /* ASCII code (output)                  */
  176.     UCHAR  key_chScan;                  /* scan code (input)                    */
  177.     UCHAR  key_fbStatus;                /* (output, normally KEYSTATUS_FINAL)   */
  178.     UCHAR  key_bNLSShift;               /* (reserved, set to zero on input)     */
  179.     USHORT key_fsState;                 /* shift states (input/output)          */
  180.     ULONG  key_time;                    /* timestamp (ignored)                  */
  181.     USHORT key_fsDDFlags;               /* device driver/monitor flags (output) */
  182. } KKEY;
  183.  
  184. typedef KKEY *PKKEY;
  185. typedef KKEY FAR16 *F16PKKEY;
  186.  
  187. /*c-begin*/
  188. #define KKEY_PKT_LEN    sizeof(KKEY)
  189. /*c-end*/
  190.  
  191.  
  192. typedef struct kxf_s {
  193.     USHORT kxf_len;                     /* length of packet (11)                */
  194.     UCHAR  kxf_fbXlate;                 /* translation flags                    */
  195.     UCHAR  kxf_fbKey;                   /* key flags                            */
  196.     UCHAR  kxf_fbSpec;                  /* multi-keypacket events               */
  197.     UCHAR  kxf_fbMode;                  /* input mode                           */
  198.     UCHAR  kxf_fbAltNum;                /* Alt-keypad accumulator               */
  199.     UCHAR  kxf_fbDshift;                /* Dshift down information              */
  200.     USHORT kxf_fsHotKey;                /* interrupt-time "hot key" shift state */
  201.     UCHAR  kxf_fbAccent;                /* DCR 1546 Extended Accent use         */
  202. } KXF;
  203.  
  204. typedef KXF *PKXF;
  205. typedef KXF FAR16 *F16PKXF;
  206.  
  207. /*c-begin*/
  208. #define KXF_PKT_LEN     sizeof(KXF)
  209. /*c-end*/
  210.  
  211.  
  212. typedef struct kxlt_s {
  213.     USHORT   kxlt_len;                  /* length of packet (16)            */
  214.     F16PKKEY kxlt_f16pKey1;             /* pointer to key pkt 1             */
  215.     F16PKKEY kxlt_f16pKey2;             /* pointer to key pkt 2             */
  216.     F16PKXF  kxlt_f16pKxf;              /* pointer to translation flags pkt */
  217.     USHORT   kxlt_usCodePage;           /* codepage to use                  */
  218. } KXLT;
  219.  
  220. typedef KXLT *PKXLT;
  221.  
  222. /*c-begin*/
  223. #define KXLT_PKT_LEN    sizeof(KXLT)
  224. /*c-end*/
  225.  
  226. typedef struct kfocus_s {
  227.     USHORT kf_len;                    /* length of packet (4)*/
  228.     USHORT kf_fsFocus;                /* TRUE (set) FALSE (free) focus*/
  229. } KFOCUS;
  230.  
  231. typedef KFOCUS *PKFOCUS;
  232.  
  233. /*c-begin*/
  234. #define KFOCUS_PKT_LEN sizeof(KFOCUS)
  235. /*c-end*/
  236.  
  237. typedef struct rxentry_s {
  238.     UCHAR   rx_chScan;
  239.     UCHAR   rx_fbRXFlags;
  240. } RXENTRY;
  241.  
  242. typedef RXENTRY *PRX;
  243. typedef RXENTRY FAR16 *F16PRX;
  244.  
  245. typedef struct shentry_s {
  246.     USHORT  sh_fsShift;
  247.     UCHAR   sh_scanShift;
  248.     UCHAR   sh_scanPrefix;
  249. } SHENTRY;
  250.  
  251. typedef SHENTRY *PSH;
  252. typedef SHENTRY FAR16 *F16PSH;
  253.  
  254. /*c-begin*/
  255. #define SHENTRY_SIZE sizeof(SHENTRY)
  256. /*c-end*/
  257.  
  258. typedef struct ktype_s {
  259.     USHORT kt_len;                      // length of packet (8)
  260.     USHORT kt_type;                     // keyboard type
  261.     UCHAR  kt_id1;                      // keyboard ID1
  262.     UCHAR  kt_id2;                      // keyboard ID2
  263.     UCHAR  kt_id3;                      // keyboard ID3
  264.     UCHAR  kt_res;                      // reserved 0
  265. } KTYPE;
  266.  
  267. typedef KTYPE *PKTYPE;
  268.  
  269. /*c-begin*/
  270. #define KT_PKT_LEN     sizeof(KTYPE)
  271. /*c-end*/
  272.  
  273. typedef struct pkmode_s {
  274.     USHORT pk_len;                    // length of packet (4)
  275.     USHORT pk_PMode;                  // physical keyboard mode
  276. } PKBDMODE;
  277.  
  278. /*c-begin*/
  279. #define PKMODE_PKT_LEN  sizeof(PKBDMODE)
  280. /*c-end*/
  281.  
  282. typedef UCHAR *PNUM;
  283. typedef UCHAR FAR16 *F16PNUM;
  284.  
  285. #define NUM_RXENTRIES   256     /*max. entries in rev. xlate table */
  286. #define NUM_SHENTRIES   6       /*max. entries in shift table      */
  287. #define NUM_NUMENTRIES  10      /*max. entries in num scan table   */
  288.  
  289. typedef RXENTRY RXTABLE[NUM_RXENTRIES];
  290. typedef SHENTRY SHTABLE[NUM_SHENTRIES];
  291. typedef UCHAR   NUMTABLE[NUM_NUMENTRIES];
  292.  
  293. /* RXFlags equates */
  294.  
  295. #define RXFLAGS_NONKEY          0
  296. #define RXFLAGS_LOWCASE         1
  297. #define RXFLAGS_UPCASE          2
  298. #define RXFLAGS_NOSHIFT         3
  299. #define RXFLAGS_SHIFT           4
  300. #define RXFLAGS_CTRL            5
  301.  
  302. /* Shift Table indexes */
  303.  
  304. #define SHINDX_LSHIFT   0
  305. #define SHINDX_LCTRL    1
  306. #define SHINDX_LALT     2
  307. #define SHINDX_RSHIFT   3
  308. #define SHINDX_RCTRL    4
  309. #define SHINDX_RALT     5
  310.  
  311. typedef struct kqrx_s {
  312.     USHORT  kqrx_len;                   /*length of packet (18)              */
  313.     USHORT  kqrx_usCodePage;            /*code page number                   */
  314.     USHORT  kqrx_hCodePage;             /*codepage table handle              */
  315.     F16PRX  kqrx_f16pRXTable;           /*pointer to rev. xlate table        */
  316.     F16PSH  kqrx_f16pShTable;           /*pointer to shift table             */
  317.     F16PNUM kqrx_f16pNumTable;          /*pointer to table for num pad scans */
  318. } KQRX;
  319.  
  320. typedef KQRX *PKQRX;
  321.  
  322. /*c-begin*/
  323. #define KQRX_PKT_LEN sizeof(KQRX)
  324. /*c-end*/
  325.  
  326.  
  327. /***    VDD function commands
  328.  *
  329.  *  Format:
  330.  *      (*fpfnVKPDDProc)(VKBDCMD_*, f16p1, f16p2);
  331.  *
  332.  *  VKBDCMD_INTEVENT:
  333.  *      f16p1 -> KINT       (see packet below)
  334.  *      f16p2 == NULL
  335.  *
  336.  *  VKBDCMD_CPCHANGED:
  337.  *      f16p1 -> KCPC       (see packet below)
  338.  *      f16p2 == NULL
  339.  *
  340.  *  VKBDCMD_HOTPLUG
  341.  *      f16p1 -> KHP        (see packet below)
  342.  *      f16p2 == NULL
  343.  */
  344.  
  345. #define VKBDCMD_INTEVENT        0x01    /* to notify of a scan code          */
  346. #define VKBDCMD_CPCHANGED       0x02    /* to notify of a codepage changed   */
  347. #define VKBDCMD_HOTPLUG         0x03    /* to notify of a hot plug occurance */
  348. #define VKBDCMD_ALTESC          0x04    /* to nofity of an ALT-ESC hotkey    */
  349.  
  350. typedef struct kint_s {
  351.     USHORT kint_len;                    /* length of packet */
  352.     USHORT kint_chScan;                 /* scan code        */
  353.     USHORT kint_usSGID;                 /* screen group ID  */
  354. } KINT;
  355.  
  356. typedef KINT *PKINT;
  357.  
  358. /*c-begin*/
  359. #define KINT_PKT_LEN    sizeof(KINT)
  360. /*c-end*/
  361.  
  362. typedef struct kcpc_s {
  363.     USHORT kcpc_len;                    /* length of packet        */
  364.     USHORT kcpc_usCodePage;             /* code page being changed */
  365.     USHORT kcpc_hCodePage;              /* code page handle        */
  366. } KCPC;
  367.  
  368. typedef KCPC *PKCPC;
  369.  
  370. /*c-begin*/
  371. #define KCPC_PKT_LEN    sizeof(KCPC)
  372. /*c-end*/
  373.  
  374. typedef struct khp_s {
  375.     USHORT khp_len;                     /* length of packet       */
  376.     USHORT khp_usKbdHWID;               /* current keyboard hw ID */
  377. } KHP;
  378.  
  379. typedef KHP *PKHP;
  380.  
  381. /*c-begin*/
  382. #define KHP_PKT_LEN    sizeof(KHP)
  383. /*c-end*/
  384.  
  385.  
  386. /* Flags for various fields in the XLTPKT structure */
  387.  
  388. #define KEYSTATUS_FINAL         0x40    /* key is final */
  389.  
  390. #define KEYSTATE_RIGHTSHIFT     BIOSKFLAG_RIGHTSHIFT
  391. #define KEYSTATE_LEFTSHIFT      BIOSKFLAG_LEFTSHIFT
  392. #define KEYSTATE_EITHERCTRL     BIOSKFLAG_CTRL
  393. #define KEYSTATE_EITHERALT      BIOSKFLAG_ALT
  394. #define KEYSTATE_SCROLLLOCK     BIOSKFLAG_SCROLLLOCK
  395. #define KEYSTATE_NUMLOCK        BIOSKFLAG_NUMLOCK
  396. #define KEYSTATE_CAPSLOCK       BIOSKFLAG_CAPSLOCK
  397. #define KEYSTATE_INSERT         BIOSKFLAG_INSERT
  398. #define KEYSTATE_LEDMASK        (KEYSTATE_SCROLLLOCK + \
  399.                                  KEYSTATE_NUMLOCK    + \
  400.                                  KEYSTATE_CAPSLOCK)
  401.  
  402. #define KEYSTATE_LEFTCTRL       (BIOSKFLAG1_LEFTCTRL   * 0x0100)
  403. #define KEYSTATE_LEFTALT        (BIOSKFLAG1_LEFTALT    * 0x0100)
  404. #define KEYSTATE_RIGHTCTRL      (BIOSKFLAG3_RIGHTCTRL  * 0x0100)
  405. #define KEYSTATE_RIGHTALT       (BIOSKFLAG3_RIGHTALT   * 0x0100)
  406. #define KEYSTATE_SCROLLDOWN     (BIOSKFLAG1_SCROLLDOWN * 0x0100)
  407. #define KEYSTATE_NUMDOWN        (BIOSKFLAG1_NUMDOWN    * 0x0100)
  408. #define KEYSTATE_CAPSDOWN       (BIOSKFLAG1_CAPSDOWN   * 0x0100)
  409. #define KEYSTATE_SYSREQDOWN     (BIOSKFLAG1_SYSSHIFT   * 0x2000)
  410.  
  411. #define KEYSTATE_LRSHIFTS       (KEYSTATE_LEFTSHIFT + KEYSTATE_RIGHTSHIFT + \
  412.                                  KEYSTATE_LEFTCTRL  + KEYSTATE_RIGHTCTRL  + \
  413.                                  KEYSTATE_LEFTALT   + KEYSTATE_RIGHTALT)
  414.  
  415. #define KEYSTATE_ALLSHIFTS      (KEYSTATE_LRSHIFTS + \
  416.                                  KEYSTATE_EITHERCTRL + KEYSTATE_EITHERALT)
  417.  
  418. #define KEYFLAGS_NORMAL         0x0000  /* any normal key                        */
  419. #define KEYFLAGS_ACK            0x0001  /* eg, SCAN_ACK                          */
  420. #define KEYFLAGS_SECPREFIX      0x0002  /* eg, 0E0h, 0E1h                        */
  421. #define KEYFLAGS_OVERRUN        0x0003  /* eg, SCAN_OVERRUN                      */
  422. #define KEYFLAGS_RESEND         0x0004  /* eg, SCAN_RESEND                       */
  423. #define KEYFLAGS_REBOOT         0x0005  /* never returned (PDD reboots)          */
  424. #define KEYFLAGS_DUMP           0x0006  /* eg, Ctrl-Alt-NumLock (ignore)         */
  425. #define KEYFLAGS_SHIFT          0x0007  /* eg, Shift, Ctrl, CapsLock, etc.       */
  426. #define KEYFLAGS_PAUSE          0x0008  /* eg, Pause or Ctrl-Numlock             */
  427. #define KEYFLAGS_PSPAUSE        0x0009  /* never returned (we're in RAW mode)    */
  428. #define KEYFLAGS_WAKEUP         0x000A  /* only after PAUSE, never PSPAUSE       */
  429. #define KEYFLAGS_BADACCENT      0x000B  /* eg, unaccentable key                  */
  430. #define KEYFLAGS_HOTKEY         0x000C  /*                                       */
  431. #define KEYFLAGS_READPEEK       0x000D  /*                                       */
  432. #define KEYFLAGS_ACCENT         0x0010  /*                                       */
  433. #define KEYFLAGS_BREAK          0x0011  /* eg, Ctrl-Break                        */
  434. #define KEYFLAGS_PSBREAK        0x0012  /* never returned (we're in RAW mode)    */
  435. #define KEYFLAGS_PRTSC          0x0013  /* eg, PrtSc                             */
  436. #define KEYFLAGS_PRTECHO        0x0014  /* eg, Ctrl-PrtSc                        */
  437. #define KEYFLAGS_PSPRTECHO      0x0015  /* never returned (we're in RAW mode)    */
  438. #define KEYFLAGS_PRTFLUSH       0x0016  /* eg, Ctrl-Alt-PrtSc                    */
  439. #define KEYFLAGS_SYSREQ         0x0017  /* eg, SysReq                            */
  440. #define KEYFLAGS_UNDEFINED      0x003F  /* undefined (we map ignored keys here)  */
  441. #define KEYFLAGS_TYPEMASK       0x003F  /* key type mask                         */
  442.  
  443. #define KEYFLAGS_RELEASED       0x0040  /* this was a release, not a press       */
  444. #define KEYFLAGS_SECONDARY      0x0080  /* key was preceded by SECPREFIX         */
  445. #define KEYFLAGS_MULTIMAKE      0x0100  /* ie, repeat of a "toggle" key          */
  446. #define KEYFLAGS_USEDACCENT     0x0200  /* key translated using previous accent  */
  447.  
  448. /* Flags for various fields in the KXF structure */                              rt
  449.  
  450. #define KXFXLATE_ACCENTMASK     0x07    /* previous accent # saved here          */
  451. #define KXFXLATE_SGPAUSED       0x08    /* session currently paused              */
  452. #define KXFXLATE_USECHAR3       0x10    /* use CHAR3 as index into accent tbl    */
  453. #define KXFXLATE_CTRLEMULATED   0x20    /* CTRL key emulated by enhanced kbd     */
  454. #define KXFXLATE_E1PREFIX       0x40    /* E1 prefix just seen                   */
  455. #define KXFXLATE_ACCENTINDEX3   0x80    /* chr3 of XlateTable index accent table */
  456.  
  457. #define KXFKEY_DUMPKEYONCE      0x01    /* dump key sequence has been hit once   */
  458. #define KXFKEY_PRTSCDOWN        0x02    /* PrtSc is down now                     */
  459. #define KXFKEY_SECPREFIX        0x04    /* E0 or E1 prefix just seen             */
  460. #define KXFKEY_NORMALALTDOWN    0x08    /* normal Alt down (not AltGraph)        */
  461.  
  462. #define KXFSPEC_ALT2PAC         0x01    /* alt-pad: use two xlation key packets  */
  463. #define KXFSPEC_E02PAC          0x02    /* E0: use two xlation key packets       */
  464. #define KXFSPEC_ACCENT2PAC      0x04    /* accent: use two xlation key packets   */
  465. #define KXFSPEC_ACCENT1PAC      0x08    /* accent: use one xlation key packets   */
  466. #define KXFSPEC_USE2PAC         0x80    /* use two xlation key packets           */
  467.  
  468. #define KXFMODE_SHIFTREPORT     0x01    /* not needed for VDM support            */
  469. #define KXFMODE_BINARY          0x80    /* set for normal VDM translation        */
  470.  
  471. #endif /* __VKBDPDD__ */
  472.  
  473. /* NOINC */
  474. #if __IBMC__ || __IBMCPP__
  475.    #pragma info( none )
  476.       #ifndef __CHKHDR__
  477.          #pragma info( restore )
  478.       #endif
  479.    #pragma info( restore )
  480. #endif
  481. /* INC */
  482.