kdfbr2.asm
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:53k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. ;/*                      Microsoft Confidential
  2. ; *                      Copyright (C) Microsoft Corporation 1991
  3. ; *                      All Rights Reserved.
  4. ; */
  5. ;; XT section enabled
  6. ;; ************* CNS 12/18/86
  7. PAGE    ,132
  8. TITLE   MS-DOS 5.0 Keyboard Definition File
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. ;; MS-DOS 5.0 - NLS Support - Keyboard Defintion File
  11. ;;
  12. ;; This file contains the keyboard tables for Brazil
  13. ;;
  14. ;; Linkage Instructions:
  15. ;;      Refer to KDF.ASM.
  16. ;;
  17. ;; Author:     BILL DEVLIN  - IBM Canada Laboratory - May 1986
  18. ;;             Adapted for Brazil by Mihindu Senanayake (Microsoft) - Oct 1990
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  20.        ;;
  21. INCLUDE KEYBSHAR.INC           ;;
  22. INCLUDE POSTEQU.INC            ;;
  23. INCLUDE KEYBMAC.INC            ;;
  24.        ;;
  25. PUBLIC BR2_LOGIC               ;;
  26. PUBLIC BR2_437_XLAT            ;;
  27. PUBLIC BR2_850_XLAT            ;;
  28. ;;
  29. CODE    SEGMENT PUBLIC 'CODE'          ;;
  30. ASSUME CS:CODE,DS:CODE         ;;
  31.        ;;
  32. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  33. ;; Standard translate table options are a linear search table
  34. ;; (TYPE_2_TAB) and ASCII entries ONLY (ASCII_ONLY)
  35. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  36.        ;;
  37. STANDARD_TABLE      EQU   TYPE_2_TAB+ASCII_ONLY
  38.        ;;
  39. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  40. ;; BR State Logic
  41. ;;***************************************
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43.        ;;
  44. BR2_LOGIC:
  45.    DW  LOGIC_END-$                     ;; length
  46.        ;;
  47.    DW  0                               ;; special features
  48.        ;;
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; COMMANDS START HERE
  50. ;; OPTIONS:  If we find a scan match in
  51. ;; an XLATT or SET_FLAG operation then
  52. ;; exit from INT 9.
  53. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  54.        ;;
  55.    OPTION EXIT_IF_FOUND                ;;
  56.        ;;
  57. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  58. ;;  Dead key definitions must come before
  59. ;;  dead key translations to handle
  60. ;;  dead key + dead key.
  61. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  62.        ;;
  63.    IFF  EITHER_ALT,NOT                 ;;
  64.    ANDF EITHER_CTL,NOT                 ;;
  65.       IFF EITHER_SHIFT                 ;;
  66.   IFF CIRCUMFLEX                   ;;
  67.       RESET_NLS                    ;;
  68.       XLATT CIRCUMFLEX_CIRCUMFLEX  ;;
  69.       SET_FLAG DEAD_UPPER          ;;
  70.       GOTO CIRCUMFLEX_ON           ;;
  71.   ENDIFF                           ;;
  72.   IFF TILDE                        ;;
  73.       RESET_NLS                ;;
  74.       XLATT TILDE_TILDE  ;;
  75.       SET_FLAG DEAD_UPPER          ;;
  76.       GOTO TILDE_ON         ;;
  77.   ENDIFF                       ;;
  78.   IFF DIARESIS                 ;;
  79.       RESET_NLS                ;;
  80.       XLATT DIARESIS_DIARESIS  ;;
  81.       SET_FLAG DEAD_UPPER          ;;
  82.       GOTO DIARESIS_ON         ;;
  83.   ENDIFF                       ;;
  84.   SET_FLAG DEAD_UPPER          ;;
  85.       ELSEF
  86.   IFF GRAVE                        ;;
  87.       RESET_NLS                    ;;
  88.       XLATT GRAVE_GRAVE            ;;
  89.       SET_FLAG DEAD_LOWER
  90.       GOTO GRAVE_ON                ;;
  91.   ENDIFF                           ;;
  92.   IFF ACUTE                 ;;
  93.      RESET_NLS              ;;
  94.      XLATT ACUTE_ACUTE      ;;
  95.      SET_FLAG DEAD_LOWER
  96.      GOTO ACUTE_ON          ;;
  97.   ENDIFF                    ;;
  98.   SET_FLAG DEAD_LOWER
  99.       ENDIFF                           ;;
  100.    ENDIFF                              ;;
  101.        ;;
  102. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  103. ;; ACUTE ACCENT TRANSLATIONS
  104. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  105.        ;;
  106. ACUTE_PROC:
  107.        ;;
  108.    IFF ACUTE,NOT                       ;;
  109.       GOTO DIARESIS_PROC               ;;
  110.       ENDIFF                           ;;
  111.        ;;
  112.       RESET_NLS                        ;;
  113. ACUTE_ON:                              ;;
  114.       IFF R_ALT_SHIFT,NOT              ;;
  115.  XLATT ACUTE_SPACE             ;;
  116.       ENDIFF                           ;;
  117.       IFF EITHER_CTL,NOT               ;;
  118.       ANDF EITHER_ALT,NOT              ;;
  119.  IFF EITHER_SHIFT              ;;
  120.     IFF CAPS_STATE             ;;
  121.        XLATT ACUTE_LOWER       ;;
  122.     ELSEF                      ;;
  123.        XLATT ACUTE_UPPER       ;;
  124.     ENDIFF                     ;;
  125.  ELSEF                         ;;
  126.     IFF CAPS_STATE             ;;
  127.        XLATT ACUTE_UPPER       ;;
  128.     ELSEF                      ;;
  129.        XLATT ACUTE_LOWER       ;;
  130.     ENDIFF                     ;;
  131.  ENDIFF                        ;;
  132.       ENDIFF                           ;;
  133.        ;;
  134. INVALID_ACUTE:                         ;;
  135.       PUT_ERROR_CHAR ACUTE_LOWER       ;; If we get here then either the XLATT
  136.       BEEP                             ;; failed or we are ina bad shift state.
  137.       GOTO NON_DEAD                    ;; Either is invalid so BEEP and fall
  138.        ;; through to generate the second char.
  139.        ;; Note that the dead key flag will be
  140.        ;; reset before we get here.
  141.        ;;
  142. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  143. ;; DIARESIS ACCENT TRANSLATIONS
  144. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  145.        ;;
  146. DIARESIS_PROC:                         ;;
  147.        ;;
  148.    IFF DIARESIS,NOT                    ;;
  149.       GOTO GRAVE_PROC                  ;;
  150.       ENDIFF                           ;;
  151.        ;;
  152.       RESET_NLS                        ;;
  153. DIARESIS_ON:                           ;;
  154.       IFF R_ALT_SHIFT,NOT              ;;
  155.  XLATT DIARESIS_SPACE          ;;
  156.       ENDIFF                           ;;
  157.       IFF EITHER_CTL,NOT               ;;
  158.       ANDF EITHER_ALT,NOT              ;;
  159.  IFF EITHER_SHIFT              ;;
  160.     IFF CAPS_STATE             ;;
  161.        XLATT DIARESIS_LOWER    ;;
  162.     ELSEF                      ;;
  163.        XLATT DIARESIS_UPPER    ;;
  164.     ENDIFF                     ;;
  165.  ELSEF                         ;;
  166.     IFF CAPS_STATE             ;;
  167.        XLATT DIARESIS_UPPER    ;;
  168.     ELSEF                      ;;
  169.        XLATT DIARESIS_LOWER    ;;
  170.     ENDIFF                     ;;
  171.  ENDIFF                        ;;
  172.       ENDIFF                           ;;
  173.        ;;
  174. INVALID_DIARESIS:                      ;;
  175.       PUT_ERROR_CHAR DIARESIS_LOWER    ;; standalone accent
  176.       BEEP                             ;; Invalid dead key combo.
  177.       GOTO NON_DEAD                    ;;
  178.        ;;
  179. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  180. ;; GRAVE ACCENT TRANSLATIONS
  181. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  182.        ;;
  183. GRAVE_PROC:                            ;;
  184.        ;;
  185.    IFF GRAVE,NOT                       ;;
  186.       GOTO TILDE_PROC                  ;;
  187.       ENDIFF                           ;;
  188.        ;;
  189.       RESET_NLS                        ;;
  190. GRAVE_ON:                              ;;
  191.       IFF R_ALT_SHIFT,NOT              ;;
  192.  XLATT GRAVE_SPACE             ;;
  193.       ENDIFF                           ;;
  194.       IFF EITHER_CTL,NOT               ;;
  195.       ANDF EITHER_ALT,NOT              ;;
  196. IFF EITHER_SHIFT               ;;
  197.    IFF CAPS_STATE              ;;
  198.       XLATT GRAVE_LOWER        ;;
  199.    ELSEF                       ;;
  200.       XLATT GRAVE_UPPER        ;;
  201.    ENDIFF                      ;;
  202. ELSEF                          ;;
  203.    IFF CAPS_STATE,NOT          ;;
  204.       XLATT GRAVE_LOWER        ;;
  205.    ELSEF                       ;;
  206.       XLATT GRAVE_UPPER        ;;
  207.    ENDIFF                      ;;
  208. ENDIFF                         ;;
  209.       ENDIFF                           ;;
  210.        ;;
  211. INVALID_GRAVE:                         ;;
  212.       PUT_ERROR_CHAR GRAVE_LOWER       ;; standalone accent
  213.       BEEP                             ;; Invalid dead key combo.
  214.       GOTO NON_DEAD                    ;;
  215.        ;;
  216. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  217. ;; TILDE ACCENT TRANSLATIONS
  218. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  219. TILDE_PROC:                            ;;
  220.        ;;
  221.    IFF TILDE,NOT                       ;;
  222.       GOTO CIRCUMFLEX_PROC             ;;
  223.       ENDIFF                           ;;
  224.        ;;
  225.       RESET_NLS                        ;;
  226. TILDE_ON:                              ;;
  227.       IFF R_ALT_SHIFT,NOT              ;;
  228.  XLATT TILDE_SPACE             ;;
  229.       ENDIFF                           ;;
  230.       IFF EITHER_CTL,NOT               ;;
  231.       ANDF EITHER_ALT,NOT              ;;
  232. IFF EITHER_SHIFT               ;;
  233.    IFF CAPS_STATE              ;;
  234.       XLATT TILDE_LOWER        ;;
  235.    ELSEF                       ;;
  236.       XLATT TILDE_UPPER        ;;
  237.    ENDIFF                      ;;
  238. ELSEF                          ;;
  239.    IFF CAPS_STATE              ;;
  240.       XLATT TILDE_UPPER        ;;
  241.    ELSEF                       ;;
  242.       XLATT TILDE_LOWER        ;;
  243.    ENDIFF                      ;;
  244. ENDIFF                         ;;
  245.       ENDIFF                           ;;
  246.        ;;
  247. INVALID_TILDE:                         ;;
  248.       PUT_ERROR_CHAR TILDE_LOWER       ;; standalone accent
  249.       BEEP                             ;; Invalid dead key combo.
  250.       GOTO NON_DEAD                    ;;
  251.        ;;
  252. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  253. ;; CIRCUMFLEX ACCENT TRANSLATIONS
  254. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  255.        ;;
  256. CIRCUMFLEX_PROC:                       ;;
  257.        ;;
  258.    IFF CIRCUMFLEX,NOT                  ;;
  259.       GOTO NON_DEAD                    ;;
  260.       ENDIFF                           ;;
  261.        ;;
  262.       RESET_NLS                        ;;
  263. CIRCUMFLEX_ON:                         ;;
  264.       IFF R_ALT_SHIFT,NOT              ;;
  265.  XLATT CIRCUMFLEX_SPACE        ;;
  266.       ENDIFF                           ;;
  267.       IFF EITHER_CTL,NOT               ;;
  268.       ANDF EITHER_ALT,NOT              ;;
  269. IFF EITHER_SHIFT               ;;
  270.    IFF CAPS_STATE              ;;
  271.       XLATT CIRCUMFLEX_LOWER   ;;
  272.    ELSEF                       ;;
  273.       XLATT CIRCUMFLEX_UPPER   ;;
  274.    ENDIFF                      ;;
  275. ELSEF                          ;;
  276.    IFF CAPS_STATE,NOT          ;;
  277.       XLATT CIRCUMFLEX_LOWER   ;;
  278.    ELSEF                       ;;
  279.       XLATT CIRCUMFLEX_UPPER   ;;
  280.    ENDIFF                      ;;
  281. ENDIFF                         ;;
  282.       ENDIFF                           ;;
  283.        ;;
  284. INVALID_CIRCUMFLEX:                    ;;
  285.       PUT_ERROR_CHAR CIRCUMFLEX_LOWER  ;; standalone accent
  286.       BEEP                             ;; Invalid dead key combo.
  287.       GOTO NON_DEAD                    ;;
  288.        ;;
  289. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  290. ;; Upper, lower and third shifts
  291. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  292.        ;;
  293. NON_DEAD:                              ;;
  294.    IFKBD G_KB+P12_KB+XT_KB             ;; Avoid accidentally translating
  295.    ANDF LC_E0                          ;;  the "/" on the numeric pad of the
  296.       EXIT_STATE_LOGIC                 ;;   G keyboard
  297.    ENDIFF                              ;;
  298.        ;;
  299.    IFF  EITHER_ALT,NOT                 ;; Lower and upper case.  Alphabetic
  300.    ANDF EITHER_CTL,NOT                 ;; keys are affected by CAPS LOCK.
  301.       IFF EITHER_SHIFT                 ;; Numeric keys are not.
  302. ; <verav>: support for numeric pad comma/del key         ;;
  303.   iff NUM_STATE,NOT                              ;;
  304.       xlatt NUMERIC_PAD                          ;;
  305.   endiff                                         ;;
  306. ; <verav>                                                ;;
  307.   XLATT NON_ALPHA_UPPER        ;;
  308.   IFF CAPS_STATE               ;;
  309.       XLATT ALPHA_LOWER        ;;           
  310.   ELSEF                        ;;
  311.       XLATT ALPHA_UPPER        ;;
  312.   ENDIFF                       ;;
  313.       ELSEF                            ;;
  314. ; <verav>: support for numeric pad comma/del key         ;;
  315.   iff NUM_STATE                                  ;;
  316.       xlatt NUMERIC_PAD                          ;;
  317.   endiff                                         ;;
  318. ; <verav>                                                ;;
  319.   XLATT NON_ALPHA_LOWER        ;;
  320.   IFF CAPS_STATE               ;;
  321.      XLATT ALPHA_UPPER         ;;
  322.   ELSEF                        ;;
  323.      XLATT ALPHA_LOWER         ;;
  324.   ENDIFF                       ;;
  325.       ENDIFF                           ;;
  326.    ELSEF                               ;;
  327. ;      IFF EITHER_SHIFT,NOT             ;;
  328. ;          IFKBD XT_KB+AT_KB            ;;
  329. ;              IFF  EITHER_CTL          ;;
  330. ;              ANDF ALT_SHIFT           ;;
  331. ;                  XLATT THIRD_SHIFT    ;;
  332. ;              ENDIFF                   ;;
  333. ;          ELSEF                        ;;
  334.       IFF EITHER_CTL,NOT       ;;
  335.       ANDF R_ALT_SHIFT         ;;
  336.   XLATT THIRD_SHIFT    ;;
  337.       ENDIFF                   ;;
  338. ;           ENDIFF                      ;;
  339. ;      ENDIFF                           ;;
  340.    ENDIFF                              ;;
  341. ;**************************************;;
  342. ; IFF EITHER_SHIFT,NOT                  ;;
  343. ;   IFKBD XT_KB+AT_KB                   ;;
  344. ;     IFF EITHER_CTL                    ;;
  345. ;     ANDF ALT_SHIFT                    ;;
  346. ;       XLATT ALT_CASE                  ;;
  347. ;     ENDIFF                            ;;
  348. ;   ENDIFF                              ;;
  349. ;   IFKBD G_KB+P12_KB                   ;;     retirei o bloco
  350. ;     IFF EITHER_CTL                    ;;
  351. ;     ANDF ALT_SHIFT                    ;;
  352. ;       IFF R_ALT_SHIFT,NOT             ;;
  353. ;         XLATT ALT_CASE                ;;
  354. ;       ENDIFF                          ;;
  355. ;     ENDIFF                            ;;
  356. ;   ENDIFF                              ;;
  357. ; ENDIFF                                ;;
  358. ;**************************************;;
  359. ; IFKBD AT_KB+XT_KB               ;;
  360. ;      IFF EITHER_CTL,NOT               ;;
  361. ;         IFF ALT_SHIFT                 ;; ALT - case
  362. ;            XLATT ALT_CASE             ;;
  363. ;         ENDIFF                        ;;
  364. ;      ELSEF                            ;;
  365. ;         IFF EITHER_ALT,NOT            ;; CTRL - case
  366. ;
  367. ;            XLATT CTRL_CASE            ;;
  368. ;         ENDIFF                        ;;
  369. ;      ENDIFF                           ;;
  370. ; ENDIFF                                ;;
  371.        ;;
  372. ; IFKBD G_KB+P12_KB                     ;;
  373. ;      IFF EITHER_CTL,NOT               ;;
  374. ;         IFF ALT_SHIFT                 ;; ALT - case
  375. ;         ANDF R_ALT_SHIFT,NOT          ;;
  376. ;            XLATT ALT_CASE             ;;
  377. ;         ENDIFF                        ;;
  378. ;      ELSEF                            ;;
  379.  IFF EITHER_ALT,NOT            ;; CTRL - case
  380.   andf EITHER_CTL              ;; Cuidado!!!!!!
  381.     XLATT CTRL_CASE            ;;
  382.  ENDIFF                        ;;
  383. ;      ENDIFF                           ;;
  384. ;      IFF EITHER_CTL                   ;;
  385. ;      ANDF ALT_SHIFT                   ;;
  386. ;      ANDF R_ALT_SHIFT,NOT             ;;
  387. ;           XLATT ALT_CASE              ;;
  388. ;      ENDIFF                           ;;
  389. ; ENDIFF                                ;;
  390.        ;;
  391.  EXIT_STATE_LOGIC                      ;;
  392.        ;;
  393. LOGIC_END:                             ;;
  394.        ;;
  395. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  396. ;; BR Common Translate Section
  397. ;; This section contains translations for the lower 128 characters
  398. ;; only since these will never change from code page to code page.
  399. ;; In addition the dead key "Set Flag" tables are here since the
  400. ;; dead keys are on the same keytops for all code pages.
  401. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  402.        ;;
  403.  PUBLIC BR2_COMMON_XLAT                 ;;
  404. BR2_COMMON_XLAT:                        ;;
  405.        ;;
  406.    DW    COMMON_XLAT_END-$             ;; length of section
  407.    DW    -1                            ;; code page
  408.        ;;
  409.        ;;
  410. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  411. ;; CODE PAGE: Common
  412. ;; STATE: Lower Shift Dead Key
  413. ;; KEYBOARD TYPES: Any
  414. ;; TABLE TYPE: Flag Table
  415. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  416.        ;;
  417.    DW    COM_DK_LO_K1_END-$               ;; length of state section
  418.    DB    DEAD_LOWER                    ;; State ID
  419.    DW    ANY_KB             ;; Keyboard Type
  420.    DB    -1,-1                         ;; Buffer entry for error character
  421.        ;; Set Flag Table
  422.    DW    2                             ;; number of entries
  423.    DB    1ah                           ;; scan code     
  424.    FLAG  ACUTE                         ;; flag bit to set
  425.    DB    28H                           ;;               <verav 12/91>
  426.    FLAG  TILDE                         ;;
  427. COM_DK_LO_K1_END:                         ;;
  428.        ;;
  429. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  430. ;; CODE PAGE: Common
  431. ;; STATE: Upper Shift Dead Key
  432. ;; KEYBOARD TYPES: Any,
  433. ;; TABLE TYPE: Flag Table
  434. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  435.        ;;
  436.    DW    COM_DK_UP_K1_END-$               ;; length of state section
  437.    DB    DEAD_UPPER                    ;; State ID
  438.    DW    ANY_KB             ;; Keyboard Type
  439.    DB    -1,-1                         ;; Buffer entry for error character
  440.        ;; Set Flag Table
  441.    DW    3                             ;; number of entries
  442.    DB    28h                           ;; scan code         <verav 12/91>
  443.    FLAG  CIRCUMFLEX                    ;; flag bit to set
  444.    DB    7                             ;;         <verav 12/91>
  445.    FLAG  DIARESIS                      ;;
  446.    DB    1ah                           ;;         <verav 12/91>
  447.    FLAG  GRAVE                         ;;               
  448.        ;;
  449. COM_DK_UP_K1_END:                      ;;
  450.        ;;
  451. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  452. ;; CODE PAGE: Common
  453. ;; STATE: Grave Lower
  454. ;; KEYBOARD TYPES: Any,
  455. ;; TABLE TYPE: Translate
  456. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  457.        ;;
  458.    DW    COM_GR_LO_END-$               ;; length of state section
  459.    DB    GRAVE_LOWER                   ;; State ID
  460.    DW    ANY_KB             ;; Keyboard Type
  461.    DB    96,0                          ;; error character = standalone accent
  462.        ;;
  463.    DW    COM_GR_LO_T1_END-$            ;; Size of xlat table
  464.    DB    STANDARD_TABLE+ZERO_SCAN      ;; xlat options:
  465.    DB    5                             ;; number of scans
  466.    DB    18,'