; Copyright 2008 Castle Technology Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
;     http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; This header file is autogenerated from the files maintained by the
; RISC OS allocations manager and should not be edited by anyone else.

        SUBT    > &.Hdr.Keyboard


; Header file for Keyboard interface.


OldOpt  SETA    {OPT}
        OPT     OptNoList+OptNoP1List


; ***********************************
; ***    C h a n g e   L i s t    ***
; ***********************************


; Date       Who  Description
; ----       ---  -----------
; 25-Aug-99  SBF  Created: all known keyboard IDs, KeyV reason codes, KeyV flags and low-level key numbers included
; 01-Sep-02  amg  Added two extra for wheel mice
;


; Keyboard IDs.
KeyboardID_A500                 * 0
KeyboardID_Archimedes           * 1
KeyboardID_PC                   * 2
KeyboardID_A4                   * KeyboardID_PC
KeyboardID_RCMM                 * 3
KeyboardID_Pandora              * 4
KeyboardID_None                 * &FF


; KeyV reason codes.
KeyV_KeyboardPresent            * 0
KeyV_KeyUp                      * 1
KeyV_KeyDown                    * 2
KeyV_NotifyLEDState             * 3
KeyV_EnableDrivers              * 4
KeyV_PseudoEnable               * 5
KeyV_PseudoDisable              * 6
KeyV_PseudoIntMask              * 7
KeyV_PseudoRXInt                * 8
KeyV_PseudoTXInt                * 9
KeyV_PortInfo                   * 10
KeyV_DummyKeyboard              * 11
KeyV_KeyboardRemoved            * 16


; Flags in R1 of KeyV_NotifyLEDState (PRM volume 5 is *wrong*)
KeyV_LED_CapsLock               * 1
KeyV_LED_NumLock                * 2
KeyV_LED_ScrollLock             * 4


; Keyboard handler layout
                            ^ 0
KeyHandler_KeyTran          # 4
KeyHandler_KeyTranSize      # 4
KeyHandler_InkeyTran        # 4
KeyHandler_ShiftingList     # 4
KeyHandler_SpecialList      # 4
KeyHandler_SpecialCodeTable # 4
KeyHandler_Init             # 4
KeyHandler_PendingAltCode   # 4
KeyHandler_Flags            # 4 ; Optional flags word
KeyHandler_Size             * :INDEX: @

KeyHandler_HasFlags         * &80000000 ; Flag bit in KeyHandler_KeyTranSize to indicate flags word present

KeyHandler_Flag_Wide        * &00000001 ; Uses wide (16bit) key numbers


; Low-level key numbers (KeyV and key events).
; Note that the symbol names have been assigned based upon the interpretation
; of the key when an Archimedes UK layout is selected.
                                       ; Internal key number equivalent
KeyNo_Escape                    * &00  ; 112
KeyNo_Function1                 * &01  ; 113
KeyNo_Function2                 * &02  ; 114
KeyNo_Function3                 * &03  ; 115
KeyNo_Function4                 * &04  ; 20
KeyNo_Function5                 * &05  ; 116
KeyNo_Function6                 * &06  ; 117
KeyNo_Function7                 * &07  ; 22
KeyNo_Function8                 * &08  ; 118
KeyNo_Function9                 * &09  ; 119
KeyNo_Function10                * &0A  ; 30
KeyNo_Function11                * &0B  ; 28
KeyNo_Function12                * &0C  ; 29
KeyNo_Print                     * &0D  ; 32
KeyNo_ScrollLock                * &0E  ; 31
KeyNo_Break                     * &0F  ; 44
KeyNo_BackTick                  * &10  ; 45
KeyNo_Digit1                    * &11  ; 48
KeyNo_Digit2                    * &12  ; Archimedes/PC: 49 (preferred) and 71 (compatibility). Pandora: 49
KeyNo_Digit3                    * &13  ; 17
KeyNo_Digit4                    * &14  ; 18
KeyNo_Digit5                    * &15  ; 19
KeyNo_Digit6                    * &16  ; 52 (preferred) and 24 (compatibility)
KeyNo_Digit7                    * &17  ; 36
KeyNo_Digit8                    * &18  ; 21
KeyNo_Digit9                    * &19  ; Archimedes/PC: 38. Pandora: 38 (preferred) and 56 (compatibility)
KeyNo_Digit0                    * &1A  ; Archimedes/PC: 39. Pandora: 39 (preferred) and 88 (compatibility)
KeyNo_Minus                     * &1B  ; Archimedes/PC: 23 (preferred) and 40 (compatibility). Pandora: 23
KeyNo_Equals                    * &1C  ; 93
KeyNo_Pound                     * &1D  ; 46
KeyNo_BackSpace                 * &1E  ; Archimedes/PC: 47. Pandora: 47 (preferred) and 89 (compatibility)
KeyNo_Insert                    * &1F  ; 61
KeyNo_Home                      * &20  ; 62
KeyNo_PageUp                    * &21  ; 63
KeyNo_NumLock                   * &22  ; 77
KeyNo_NumPadSlash               * &23  ; 74
KeyNo_NumPadStar                * &24  ; 91
KeyNo_NumPadHash                * &25  ; 90
KeyNo_Tab                       * &26  ; 96
KeyNo_LetterQ                   * &27  ; 16
KeyNo_LetterW                   * &28  ; 33
KeyNo_LetterE                   * &29  ; 34
KeyNo_LetterR                   * &2A  ; 51
KeyNo_LetterT                   * &2B  ; 35
KeyNo_LetterY                   * &2C  ; 68
KeyNo_LetterU                   * &2D  ; 53
KeyNo_LetterI                   * &2E  ; 37
KeyNo_LetterO                   * &2F  ; 54
KeyNo_LetterP                   * &30  ; 55
KeyNo_OpenSquare                * &31  ; 56
KeyNo_CloseSquare               * &32  ; 88
KeyNo_BackSlash                 * &33  ; 120 (is # post-Archimedes)
KeyNo_Delete                    * &34  ; 89
KeyNo_Copy                      * &35  ; 105 (is End post-Archimedes)
KeyNo_PageDown                  * &36  ; 77
KeyNo_NumPad7                   * &37  ; 27
KeyNo_NumPad8                   * &38  ; 42
KeyNo_NumPad9                   * &39  ; 43
KeyNo_NumPadMinus               * &3A  ; 59
KeyNo_CtrlLeft                  * &3B  ; 1 and 4
KeyNo_LetterA                   * &3C  ; 65
KeyNo_LetterS                   * &3D  ; 81
KeyNo_LetterD                   * &3E  ; 50
KeyNo_LetterF                   * &3F  ; 67
KeyNo_LetterG                   * &40  ; 83
KeyNo_LetterH                   * &41  ; 84
KeyNo_LetterJ                   * &42  ; 69
KeyNo_LetterK                   * &43  ; 70
KeyNo_LetterL                   * &44  ; 86
KeyNo_SemiColon                 * &45  ; Archimedes/PC: 87 (preferred) and 72 (compatibility). Pandora: 87
KeyNo_Tick                      * &46  ; 79
KeyNo_Return                    * &47  ; 73
KeyNo_NumPad4                   * &48  ; 122
KeyNo_NumPad5                   * &49  ; 123
KeyNo_NumPad6                   * &4A  ; 26
KeyNo_NumPadPlus                * &4B  ; 58
KeyNo_ShiftLeft                 * &4C  ; 0 and 3
KeyNo_NotFittedLeft             * &4D  ; 94 (is \ post-Archimedes)
KeyNo_LetterZ                   * &4E  ; 97
KeyNo_LetterX                   * &4F  ; 66
KeyNo_LetterC                   * &50  ; 82
KeyNo_LetterV                   * &51  ; 99
KeyNo_LetterB                   * &52  ; 100
KeyNo_LetterN                   * &53  ; 85
KeyNo_LetterM                   * &54  ; 101
KeyNo_Comma                     * &55  ; 102
KeyNo_Dot                       * &56  ; 103
KeyNo_Slash                     * &57  ; 104
KeyNo_ShiftRight                * &58  ; 0 and 6
KeyNo_CursorUp                  * &59  ; 57
KeyNo_NumPad1                   * &5A  ; 107
KeyNo_NumPad2                   * &5B  ; 124
KeyNo_NumPad3                   * &5C  ; 108
KeyNo_CapsLock                  * &5D  ; 64
KeyNo_AltLeft                   * &5E  ; 2 and 5
KeyNo_Space                     * &5F  ; 98
KeyNo_AltRight                  * &60  ; 2 and 8
KeyNo_CtrlRight                 * &61  ; 1 and 7
KeyNo_CursorLeft                * &62  ; 25
KeyNo_CursorDown                * &63  ; 41
KeyNo_CursorRight               * &64  ; 121
KeyNo_NumPad0                   * &65  ; 106
KeyNo_NumPadDot                 * &66  ; 76
KeyNo_NumPadEnter               * &67  ; 60
KeyNo_AcornLeft                 * &68  ; 125
KeyNo_AcornRight                * &69  ; 126
KeyNo_Menu                      * &6A  ; 127
KeyNo_NoConvert                 * &6B  ; 109
KeyNo_Convert                   * &6C  ; 110
KeyNo_Kana                      * &6D  ; 111
KeyNo_NotFittedRight            * &6E  ; 95
KeyNo_FN                        * &6F  ; 12
KeyNo_LeftMouse                 * &70  ; 9
KeyNo_CentreMouse               * &71  ; 10
KeyNo_RightMouse                * &72  ; 11
KeyNo_Mouse1			* &73  ; No equivalent
KeyNo_Mouse2			* &74  ; No equivalent
KeyNo_CommercialAt              * &200 ; 71 (preferred) and 15
KeyNo_LeftParenthesis           * &201 ; 271
KeyNo_RightParenthesis          * &202 ; 527
KeyNo_ExclamationMark           * &203 ; 783
KeyNo_LowLine                   * &204 ; 40 (preferred) and 1039
KeyNo_BrightnessDown            * &205 ; 1295
KeyNo_BrightnessUp              * &206 ; 1551
KeyNo_QuotationMark             * &207 ; 1807
KeyNo_PlusSign                  * &208 ; 2063
KeyNo_AcuteAccent               * &209 ; 2319
KeyNo_YenSign                   * &20A ; 2575
KeyNo_Colon                     * &20B ; 72 (preferred) and 2831
KeyNo_QuestionMark              * &20C ; 3087
KeyNo_VerticalLine              * &20D ; 3343
KeyNo_DollarSign                * &20E ; 3599
KeyNo_EuroSign                  * &20F ; 3855
KeyNo_LidClosed                 * &210 ; 4111
KeyNo_Power                     * &211 ; 4367

; Internal key numbers (OS_Byte 121, 122, 129, BASIC negative INKEY)
; Note that the symbol names have been assigned based upon the interpretation
; of the key when an Archimedes UK layout is selected.
; For OS_Bytes, the LSB of these numbers is bits 0-6 of R1, and the MSB is bits 0-7 of R2
                                       ; INKEY  Low-level equivalent
KeyScan_ShiftEither             * 0    ; -1     &4C or &58
KeyScan_CtrlEither              * 1    ; -2     &3B or &61
KeyScan_AltEither               * 2    ; -3     &5E or &60
KeyScan_ShiftLeft               * 3    ; -4     &4C
KeyScan_CtrlLeft                * 4    ; -5     &3B
KeyScan_AltLeft                 * 5    ; -6     &5E
KeyScan_ShiftRight              * 6    ; -7     &58
KeyScan_CtrlRight               * 7    ; -8     &61
KeyScan_AltRight                * 8    ; -9     &60
KeyScan_LeftMouse               * 9    ; -10    &70
KeyScan_CentreMouse             * 10   ; -11    &71
KeyScan_RightMouse              * 11   ; -12    &72
KeyScan_FN                      * 12   ; -13    &6F
; 13 is used to encode modifier and mouse keys that use R2 as well as R1
; 14 reserved
; 15 is used to encode character-generating keys that use R2 as well as R1
KeyScan_LetterQ                 * 16   ; -17    &27
KeyScan_Digit3                  * 17   ; -18    &13
KeyScan_Digit4                  * 18   ; -19    &14
KeyScan_Digit5                  * 19   ; -20    &15
KeyScan_Function4               * 20   ; -21    &04
KeyScan_Digit8                  * 21   ; -22    &18
KeyScan_Function7               * 22   ; -23    &07
KeyScan_Minus                   * 23   ; -24    &1B
KeyScan_CircumflexAccent        * 24   ; -25    &16 (compatibility)
KeyScan_CursorLeft              * 25   ; -26    &62
KeyScan_NumPad6                 * 26   ; -27    &4A
KeyScan_NumPad7                 * 27   ; -28    &37
KeyScan_Function11              * 28   ; -29    &0B
KeyScan_Function12              * 29   ; -30    &0C
KeyScan_Function10              * 30   ; -31    &0A
KeyScan_ScrollLock              * 31   ; -32    &0E
KeyScan_Print                   * 32   ; -33    &0D
KeyScan_LetterW                 * 33   ; -34    &28
KeyScan_LetterE                 * 34   ; -35    &29
KeyScan_LetterT                 * 35   ; -36    &2B
KeyScan_Digit7                  * 36   ; -37    &17
KeyScan_LetterI                 * 37   ; -38    &2E
KeyScan_Digit9                  * 38   ; -39    &19
KeyScan_Digit0                  * 39   ; -40    &1A
KeyScan_LowLine                 * 40   ; -41    Archimedes/PC: &1B (compatibility). Pandora: &204
KeyScan_CursorDown              * 41   ; -42    &63
KeyScan_NumPad8                 * 42   ; -43    &38
KeyScan_NumPad9                 * 43   ; -44    &39
KeyScan_Break                   * 44   ; -45    &0F
KeyScan_BackTick                * 45   ; -46    &10
KeyScan_Pound                   * 46   ; -47    &1D
KeyScan_BackSpace               * 47   ; -48    &1E
KeyScan_Digit1                  * 48   ; -49    &11
KeyScan_Digit2                  * 49   ; -50    &12
KeyScan_LetterD                 * 50   ; -51    &3E
KeyScan_LetterR                 * 51   ; -52    &2A
KeyScan_Digit6                  * 52   ; -53    &16
KeyScan_LetterU                 * 53   ; -54    &2D
KeyScan_LetterO                 * 54   ; -55    &2F
KeyScan_LetterP                 * 55   ; -56    &30
KeyScan_OpenSquare              * 56   ; -57    Archimedes/PC: &31. Pandora: &19 (compatibility)
KeyScan_CursorUp                * 57   ; -58    &59
KeyScan_NumPadPlus              * 58   ; -59    &4B
KeyScan_NumPadMinus             * 59   ; -60    &3A
KeyScan_NumPadEnter             * 60   ; -61    &67
KeyScan_Insert                  * 61   ; -62    &1F
KeyScan_Home                    * 62   ; -63    &20
KeyScan_PageUp                  * 63   ; -64    &21
KeyScan_CapsLock                * 64   ; -65    &5D
KeyScan_LetterA                 * 65   ; -66    &3C
KeyScan_LetterX                 * 66   ; -67    &4F
KeyScan_LetterF                 * 67   ; -68    &3F
KeyScan_LetterY                 * 68   ; -69    &2C
KeyScan_LetterJ                 * 69   ; -70    &42
KeyScan_LetterK                 * 70   ; -71    &43
KeyScan_CommercialAt            * 71   ; -72    Archimedes/PC: &12 (compatibility). Pandora: &200
KeyScan_Colon                   * 72   ; -73    Archimedes/PC: &45 (compatibility). Pandora: &20B
KeyScan_Return                  * 73   ; -74    &47
KeyScan_NumPadSlash             * 74   ; -75    &23
KeyScan_NumPadDelete            * 75   ; -76    BBC only
KeyScan_NumPadDot               * 76   ; -77    &66
KeyScan_NumLock                 * 77   ; -78    &22
KeyScan_PageDown                * 78   ; -79    &36
KeyScan_Tick                    * 79   ; -80    &46
KeyScan_ShiftLock               * 80   ; -81    BBC only
KeyScan_LetterS                 * 81   ; -82    &3D
KeyScan_LetterC                 * 82   ; -83    &50
KeyScan_LetterG                 * 83   ; -84    &40
KeyScan_LetterH                 * 84   ; -85    &41
KeyScan_LetterN                 * 85   ; -86    &53
KeyScan_LetterL                 * 86   ; -87    &44
KeyScan_SemiColon               * 87   ; -88    &45
KeyScan_CloseSquare             * 88   ; -89    Archimedes/PC: &32. Pandora: &1A (compatibility)
KeyScan_Delete                  * 89   ; -90    Archimedes/PC: &34. Pandora: &1E (compatibility)
KeyScan_NumPadHash              * 90   ; -91    Archimedes: &25
KeyScan_NumPadStar              * 91   ; -92    &24
KeyScan_NumPadComma             * 92   ; -93    BBC only
KeyScan_Equals                  * 93   ; -94    &1C
KeyScan_NotFittedLeft           * 94   ; -95    &4D
KeyScan_NotFittedRight          * 95   ; -96    &6E
KeyScan_Tab                     * 96   ; -97    &26
KeyScan_LetterZ                 * 97   ; -98    &4E
KeyScan_Space                   * 98   ; -99    &5F
KeyScan_LetterV                 * 99   ; -100   &51
KeyScan_LetterB                 * 100  ; -101   &52
KeyScan_LetterM                 * 101  ; -102   &54
KeyScan_Comma                   * 102  ; -103   &55
KeyScan_Dot                     * 103  ; -104   &56
KeyScan_Slash                   * 104  ; -105   &57
KeyScan_Copy                    * 105  ; -106   &35
KeyScan_NumPad0                 * 106  ; -107   &65
KeyScan_NumPad1                 * 107  ; -108   &5A
KeyScan_NumPad3                 * 108  ; -109   &5C
KeyScan_NoConvert               * 109  ; -110   &6B
KeyScan_Convert                 * 110  ; -111   &6C
KeyScan_Kana                    * 111  ; -112   &6D
KeyScan_Escape                  * 112  ; -113   &00
KeyScan_Function1               * 113  ; -114   &01
KeyScan_Function2               * 114  ; -115   &02
KeyScan_Function3               * 115  ; -116   &03
KeyScan_Function5               * 116  ; -117   &05
KeyScan_Function6               * 117  ; -118   &06
KeyScan_Function8               * 118  ; -119   &08
KeyScan_Function9               * 119  ; -120   &09
KeyScan_BackSlash               * 120  ; -121   &33
KeyScan_CursorRight             * 121  ; -122   &64
KeyScan_NumPad4                 * 122  ; -123   &48
KeyScan_NumPad5                 * 123  ; -124   &49
KeyScan_NumPad2                 * 124  ; -125   &5B
KeyScan_AcornLeft               * 125  ; -126   &68
KeyScan_AcornRight              * 126  ; -127   &69
KeyScan_Menu                    * 127  ; -128   &6A
KeyScan_NoKey                   * 255
KeyScan_CommercialAt_Alt        * 15   ; -16    &200
KeyScan_LeftParenthesis         * 271  ; -272   &201
KeyScan_RightParenthesis        * 527  ; -528   &202
KeyScan_ExclamationMark         * 783  ; -784   &203
KeyScan_LowLine_Alt             * 1039 ; -1040  &204
KeyScan_BrightnessDown          * 1295 ; -1296  &205
KeyScan_BrightnessUp            * 1551 ; -1552  &206
KeyScan_QuotationMark           * 1807 ; -1808  &207
KeyScan_PlusSign                * 2063 ; -2064  &208
KeyScan_AcuteAccent             * 2319 ; -2320  &209
KeyScan_YenSign                 * 2575 ; -2576  &20A
KeyScan_Colon_Alt               * 2831 ; -2832  &20B
KeyScan_QuestionMark            * 3087 ; -3088  &20C
KeyScan_VerticalLine            * 3343 ; -3344  &20D
KeyScan_DollarSign              * 3599 ; -3600  &20E
KeyScan_EuroSign                * 3855 ; -3856  &20F
KeyScan_LidClosed               * 4111 ; -4112  &210
KeyScan_Power                   * 4367 ; -4368  &211


        OPT     OldOpt
        END

