diff options
Diffstat (limited to 'windows/XP')
-rw-r--r-- | windows/XP/kbdneo2/buildchk_wxp_x86.log | 117 | ||||
-rw-r--r-- | windows/XP/kbdneo2/kbdneo2.c | 496 | ||||
-rw-r--r-- | windows/XP/kbdneo2/kbdneo2.def | 4 | ||||
-rw-r--r-- | windows/XP/kbdneo2/kbdneo2.h | 105 | ||||
-rw-r--r-- | windows/XP/kbdneo2/kbdneo2.rc | 11 | ||||
-rw-r--r-- | windows/XP/kbdneo2/makefile | 15 | ||||
-rw-r--r-- | windows/XP/kbdneo2/makefile.inc | 1 | ||||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/_objects.mac | 18 | ||||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.dll | bin | 0 -> 7168 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.exp | bin | 0 -> 766 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.lib | bin | 0 -> 1762 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.obj | bin | 0 -> 22890 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.pdb | bin | 0 -> 52224 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.res | bin | 0 -> 1040 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/objchk_wxp_x86/i386/vc80.pdb | bin | 0 -> 53248 bytes | |||
-rw-r--r-- | windows/XP/kbdneo2/sources | 2 |
16 files changed, 769 insertions, 0 deletions
diff --git a/windows/XP/kbdneo2/buildchk_wxp_x86.log b/windows/XP/kbdneo2/buildchk_wxp_x86.log new file mode 100644 index 0000000..ca9d1ed --- /dev/null +++ b/windows/XP/kbdneo2/buildchk_wxp_x86.log @@ -0,0 +1,117 @@ +BUILD: Computing Include file dependencies:
+BUILD: Examining c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2 directory for files to compile.
+skipping post pass 0 command
+Compiling c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2 *************
+'nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS1 NOLINK=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR=src\input\layout\all_kbds\kbdneo2'
+BUILDMSG: _NT_TARGET_VERSION SET TO WINXP
+ cl.exe @c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\cl.rsp
+Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.278 for 80x86
+Copyright (C) Microsoft Corporation. All rights reserved.
+cl /Fo"c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386/"
+ /FC
+ /Ii386
+ /I.
+ /I..\..\inc
+ /Ic:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386
+ /IC:\WinDDK\6001.17051\inc\api
+ /IC:\WinDDK\6001.17051\inc\api
+ /IC:\WinDDK\6001.17051\inc\crt
+ /D_X86_=1
+ /Di386=1
+ /DSTD_CALL
+ /DCONDITION_HANDLING=1
+ /DNT_INST=0
+ /DWIN32=100
+ /D_NT1X_=100
+ /DWINNT=1
+ /D_WIN32_WINNT=0x0501
+ /DWINVER=0x0501
+ /D_WIN32_IE=0x0603
+ /DWIN32_LEAN_AND_MEAN=1
+ /DDEVL=1
+ /DDBG=1
+ /D__BUILDMACHINE__=WinDDK
+ /DFPO=0
+ /DNDEBUG
+ /DDEPRECATE_DDK_FUNCTIONS=1
+ /DMSC_NOOPT
+ /DNTDDI_VERSION=0x05010200
+ /c
+ /Zc:wchar_t-
+ /Zl
+ /Zp8
+ /Gy
+ /Gm-
+ /W3
+ /Gz
+ /hotpatch
+ /EHs-c-
+ /GR-
+ /GF
+ /GS-
+ /Zi
+ /Od
+ /Oi
+ /Oy-
+ /Zi
+ /Fdc:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\
+ /DKMDF_MAJOR_VERSION=01
+ /DKMDF_MINOR_VERSION=007
+ /FIC:\WinDDK\6001.17051\inc\api\warning.h
+ .\kbdneo2.c
+kbdneo2.c
+ link.exe /lib /out:c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.lib @c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\lib.rsp
+Microsoft (R) Library Manager Version 8.00.50727.278
+Copyright (C) Microsoft Corporation. All rights reserved.
+/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221
+/WX
+/nodefaultlib
+/machine:ix86
+/def:kbdneo2.def
+c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.obj
+ Creating library c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.lib and object c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.exp
+Linking for c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2 *************
+'nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDLL=1 MAKEDIR_RELATIVE_TO_BASEDIR=src\input\layout\all_kbds\kbdneo2'
+BUILDMSG: _NT_TARGET_VERSION SET TO WINXP
+ rc -l 409 -DSXS_PROCESSOR_ARCHITECTURE="""x86""" -DSXS_TARGET="""kbdneo2.dll""" -DSYSTEM_COMPATIBLE_ASSEMBLY_NAME="""Microsoft.Windows.SystemCompatible""" -DLSYSTEM_COMPATIBLE_ASSEMBLY_NAME=L"""Microsoft.Windows.SystemCompatible""" -DSXS_ASSEMBLY_VERSION="""""" /r /fo c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.res /D_X86_=1 /Di386=1 /DSTD_CALL /DCONDITION_HANDLING=1 /DNT_INST=0 /DWIN32=100 /D_NT1X_=100 /DWINNT=1 /D_WIN32_WINNT=0x0501 /DWINVER=0x0501 /D_WIN32_IE=0x0603 /DWIN32_LEAN_AND_MEAN=1 /DDEVL=1 /DDBG=1 /D__BUILDMACHINE__=WinDDK /DFPO=0 /DNDEBUG /DDEPRECATE_DDK_FUNCTIONS=1 /DMSC_NOOPT /DNTDDI_VERSION=0x05010200 /I..\..\inc /Ic:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386 /IC:\WinDDK\6001.17051\inc\api /IC:\WinDDK\6001.17051\inc\api /IC:\WinDDK\6001.17051\inc\crt .\kbdneo2.rc
+Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
+Copyright (C) Microsoft Corporation. All rights reserved.
+ link.exe /out:c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.dll /machine:ix86 @c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\lnk.rsp
+Microsoft (R) Incremental Linker Version 8.00.50727.278
+Copyright (C) Microsoft Corporation. All rights reserved.
+-merge:.edata=.data
+-merge:.rdata=.data
+-merge:.text=.data
+-merge:.bss=.data
+-section:.data,re
+/ignore:4254
+/MERGE:_PAGE=PAGE
+/MERGE:_TEXT=.text
+/SECTION:INIT,d
+/OPT:REF
+/OPT:ICF
+/IGNORE:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221
+/INCREMENTAL:NO
+/release
+/NODEFAULTLIB
+/WX
+/debug
+/debugtype:cv,fixup,pdata
+/version:6.0
+/osversion:6.0
+/functionpadmin:5
+/safeseh
+/opt:nowin98
+/nxcompat
+/pdbcompress
+/dynamicbase
+/STACK:0x40000,0x1000
+/dll
+/base:@C:\WinDDK\6001.17051\bin\coffbase.txt,kbdneo2
+/subsystem:native,5.01
+/noentry
+c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.exp
+c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.res
+c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2\objchk_wxp_x86\i386\kbdneo2.obj
+c:\winddk\6001.17051\lib\wxp\i386\int64.lib
+c:\winddk\6001.17051\lib\wxp\i386\sehupd.lib
diff --git a/windows/XP/kbdneo2/kbdneo2.c b/windows/XP/kbdneo2/kbdneo2.c new file mode 100644 index 0000000..5d55513 --- /dev/null +++ b/windows/XP/kbdneo2/kbdneo2.c @@ -0,0 +1,496 @@ +/***************************************************************************\
+* Module Name: KBDNEO2.C
+*
+* keyboard layout for German
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbd.h"
+#include "kbdneo2.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for German
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ T37 | KBDMULTIVK, // numpad_* + Shift/Alt -> SnapShot
+
+ T38, T39, T3A, T3B, T3C, T3D, T3E,
+ T3F, T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F, T70, T71, T72, T73,
+ T74, T75, T76, T77, T78, T79, T7A, T7B,
+ T7C, T7D, T7E
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* German Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT , KBDSHIFT },
+ { VK_CONTROL , KBDCTRL },
+ { VK_MENU , KBDALT },
+ { VK_KANA , KBDKANA },
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 9,
+ {
+ // Modification# // Keys Pressed
+ // ============= // =============
+ 0, //
+ 1, // Shift
+ 6, // Control
+ 7, // Shift + Control
+ SHFT_INVALID, // Menu
+ SHFT_INVALID, // Shift + Menu
+ 2, // Control + Menu
+ 3, //Shift+Control+Menu
+ 4, //Kana
+ 5 //Kana+Shift
+ }
+};
+
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+* aVkToWch5[] - Virtual Key to WCHAR translation for 5 shift states
+* aVkToWch6[] - Virtual Key to WCHAR translation for 6 shift states
+* aVkToWch7[] - Virtual Key to WCHAR translation for 7 shift states
+* aVkToWch8[] - Virtual Key to WCHAR translation for 8 shift states
+* aVkToWch9[] - Virtual Key to WCHAR translation for 9 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Special values for VirtualKey (column 1)
+* 0xff - dead chars for the previous entry
+* 0 - terminate the list
+*
+* Special values for Attributes (column 2)
+* CAPLOK bit - CAPS-LOCK affect this key like SHIFT
+*
+* Special values for wch[*] (column 3 & 4)
+* WCH_NONE - No character
+* WCH_DEAD - Dead Key (diaresis) or invalid (US keyboard has none)
+* WCH_LGTR - Ligature (generates multiple characters)
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = {
+// | | Shift |
+// |=========|=========|
+ {VK_DECIMAL ,0 ,',' ,',' },
+ {VK_ADD ,0 ,'+' ,'+' },
+ {VK_DIVIDE ,0 ,'/' ,'/' },
+ {VK_MULTIPLY ,0 ,'*' ,'*' },
+ {VK_SUBTRACT ,0 ,'-' ,'-' },
+ {0 ,0 ,0 ,0 }
+};
+
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS5 aVkToWch5[] = {
+// | | SHIFT | ALT+CTRL | ALT+CTL+S | KANA |
+// | |===============|================|===============|===============|
+{'1' ,CAPLOK ,'1' ,0x00b0 ,0x00B9 ,0x2640 ,0x2022 },
+{'3' ,CAPLOK ,'3' ,0x00a7 ,0x00b3 ,0x2640 ,WCH_NONE },
+{'K' ,CAPLOK ,'k' ,'K' ,'!' ,0x03BA ,0x00A1 },
+{'N' ,CAPLOK ,'n' ,'N' ,'(' ,0x03BD ,'4' },
+{'R' ,CAPLOK ,'r' ,'R' ,')' ,0x03C1 ,'5' },
+{'T' ,CAPLOK ,'t' ,'T' ,'-' ,0x03C4 ,'6' },
+{VK_OEM_5 ,CAPLOK ,0x00FC ,0x00DC ,'#' ,WCH_NONE ,0x001b },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
+// | | SHIFT | ALT+CTRL | ALT+CTL+S | KANA | KANA+SHFT |
+// | |===============|================|===============|===============|================|
+{VK_OEM_1 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD },
+{0xff ,0 ,0x0302 ,0x030C ,0x0306 ,0x0335 ,0x00B7 ,0x0323 },
+{'4' ,CAPLOK ,'4' ,0x00bb ,0x203A ,WCH_NONE ,0x2573 ,0x2573 }, //?PgUp? ,?PgUp?
+{'5' ,CAPLOK ,'5' ,0x00ab ,0x2039 ,WCH_NONE ,WCH_NONE ,0x21D2 },
+{'7' ,CAPLOK ,'7' ,0x20AC ,0x0025 ,0x00A5 ,WCH_NONE ,0x00AC },
+{'8' ,CAPLOK ,'8' ,0x201E ,0x201A ,WCH_NONE ,0x002F ,0x2203 },
+{'9' ,CAPLOK ,'9' ,0x201C ,0x2018 ,WCH_NONE ,0x002A ,0x2200 },
+{'0' ,CAPLOK ,'0' ,0x201D ,0x2019 ,WCH_NONE ,0x002D ,0x2228 },
+{VK_OEM_MINUS ,0 ,'-' ,0x2013 ,0x2014 ,0x00AD ,0X2011 ,0x2227 },
+{VK_OEM_2 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD },
+{0xff ,0 ,0x0301 ,0x0300 ,0x0327 ,0x0328 ,0x0307 ,0x030a },
+{VK_TAB ,0 ,'\t' ,'\t' ,'\t' ,'\t' ,'\t' ,'\t' },
+{'X' ,CAPLOK ,'x' ,'X' ,'@' ,0x03BE ,WCH_NONE ,0x039E },
+{'V' ,CAPLOK ,'v' ,'V' ,'_' ,WCH_NONE ,'\b' ,0x039B },
+{'L' ,CAPLOK ,'l' ,'L' ,'[' ,0x03BB ,0x2573 ,0x2573 }, //?Pfeil h? ,?Pfeil h?
+{'C' ,CAPLOK ,'c' ,'C' ,']' ,0x03C7 ,'\t' ,'\t' },
+{'W' ,CAPLOK ,'w' ,'W' ,0x005E ,WCH_NONE ,0x2573 ,0x2573 }, //?Einfg? ,?Einfg?
+{'H' ,CAPLOK ,'h' ,'H' ,'<' ,0x03C8 ,'7' ,0x03A8 },
+{'G' ,CAPLOK ,'g' ,'G' ,'>' ,0x03B3 ,'8' ,0x0393 },
+{'F' ,CAPLOK ,'f' ,'F' ,'=' ,0x03C6 ,'9' ,0x03A6 },
+{'Q' ,CAPLOK ,'q' ,'Q' ,'&' ,0x0278 ,'+' ,0x2202 },
+{'U' ,CAPLOK ,'u' ,'U' ,'\\' ,WCH_NONE ,0x2573 ,0x2573 }, //?Pos1? ,?Pos1?
+{'I' ,CAPLOK ,'i' ,'I' ,'/' ,0x03B9 ,0x2573 ,0x2573 }, //?Pfeil l? ,?Pfeil l?
+{'A' ,CAPLOK ,'a' ,'A' ,'{' ,0x03B1 ,0x2573 ,0x2573 }, //?Pfeil u? ,?Pfeil u?
+{'E' ,CAPLOK ,'e' ,'E' ,'}' ,0x03B5 ,0x2573 ,0x2573 }, //?Pfeil r? ,?Pfeil r?
+{'O' ,CAPLOK ,'o' ,'O' ,'*' ,0x03C9 ,0x2573 ,0x2573 }, //?Ende? ,?Ende?
+{'S' ,CAPLOK ,'s' ,'S' ,'?' ,0x03C3 ,0x00BF ,0x03A3 },
+{'D' ,CAPLOK ,'d' ,'D' ,':' ,0x03B4 ,',' ,0x0394 },
+{VK_OEM_6 ,CAPLOK ,0x00F6 ,0x00D6 ,'$' ,WCH_NONE ,0x007f ,0x007f },
+{VK_OEM_7 ,CAPLOK ,0x00E4 ,0x00C4 ,'|' ,0x03B7 ,0x2573 ,0x2573 }, //?PgDn? ,?PgDn?
+{'P' ,CAPLOK ,'p' ,'P' ,'~' ,0x03C0 ,'\r' ,0x03A0 },
+{'Z' ,CAPLOK ,'z' ,'Z' ,'`' ,0x03B6 ,WCH_NONE ,0x03A9 },
+{'B' ,CAPLOK ,'b' ,'B' ,'+' ,0x03B2 ,WCH_NONE ,0x221E },
+{'M' ,CAPLOK ,'m' ,'M' ,'%' ,0x00b5 ,'1' ,0x222B },
+{VK_OEM_COMMA ,0 ,',' ,';' ,'\'' ,0x03F1 ,'2' ,0x221A },
+{VK_OEM_PERIOD ,0 ,'.' ,0x2026 ,'\"' ,0x03B8 ,'3' ,0x0398 },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS7 aVkToWch7[] = {
+// | | SHIFT | ALT+CTRL | ALT+CTL+S | KANA | KANA+SHFT | Control |
+// | |===============|================|===============|===============|================|===============|
+{VK_OEM_3 ,CAPLOK ,0x00df ,0x1E9E ,0x017F ,0x03C2 ,0x0259 ,0x018F ,0x001b },
+{VK_OEM_4 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,0x001d },
+{0xff ,0 ,0x0303 ,0x0304 ,0x0308 ,0x030B ,0x0337 ,0x0326 ,0 },
+{'Y' ,CAPLOK ,'y' ,'Y' ,WCH_NONE ,0x03C5 ,0x00FE ,0x00DE ,0x001c },
+{VK_SPACE ,0 ,' ' ,' ' ,0x00A0 ,' ' ,'0' ,0x2009 ,' ' },
+{VK_BACK ,0 ,'\b' ,'\b' ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x007f },
+{VK_ESCAPE ,0 ,0x001b ,0x001b ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x001b },
+{VK_RETURN ,0 ,'\r' ,'\r' ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,'\n' },
+{VK_CANCEL ,0 ,0x0003 ,0x0003 ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x0003 },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
+// | | SHIFT | ALT+CTRL | ALT+CTL+S | KANA | KANA+SHFT | Control | Control+Shift |
+// | |===============|================|===============|===============|================|===============|===============|
+{'2' ,CAPLOK ,'2' ,0x2116 ,0x00b2 ,0x26A5 ,0x2023 ,WCH_NONE ,WCH_NONE ,0x0000 },
+{'6' ,CAPLOK ,'6' ,0x0024 ,0x00A3 ,0x00A4 ,WCH_NONE ,0x21D4 ,WCH_NONE ,0x001e },
+{'J' ,CAPLOK ,'j' ,'J' ,';' ,0x03D1 ,'.' ,0x2207 ,WCH_NONE ,0x001f },
+{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch5) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = {
+ { VK_NUMPAD0 , 0 , '0' },
+ { VK_NUMPAD1 , 0 , '1' },
+ { VK_NUMPAD2 , 0 , '2' },
+ { VK_NUMPAD3 , 0 , '3' },
+ { VK_NUMPAD4 , 0 , '4' },
+ { VK_NUMPAD5 , 0 , '5' },
+ { VK_NUMPAD6 , 0 , '6' },
+ { VK_NUMPAD7 , 0 , '7' },
+ { VK_NUMPAD8 , 0 , '8' },
+ { VK_NUMPAD9 , 0 , '9' },
+ { 0 , 0 , '\0' }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch5, 5, sizeof(aVkToWch5[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch7, 7, sizeof(aVkToWch7[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
+ { NULL, 0, 0 },
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Virtual Scancode to Key Name tables
+*
+* Table attributes: Ordered Scan (by scancode), null-terminated
+*
+* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
+* (Keys producing printable characters are named by that character)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"ESC",
+ 0x0e, L"R\x00DC" L"CK",
+ 0x0f, L"TABULATOR",
+ 0x1c, L"EINGABE",
+ 0x1d, L"STRG",
+ 0x2a, L"UMSCHALT",
+ 0x36, L"UMSCHALT RECHTS",
+ 0x37, L" (ZEHNERTASTATUR)",
+ 0x38, L"ALT",
+ 0x39, L"LEER",
+ 0x3a, L"FESTSTELL",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"PAUSE",
+ 0x46, L"ROLLEN-FESTSTELL",
+ 0x47, L"7 (ZEHNERTASTATUR)",
+ 0x48, L"8 (ZEHNERTASTATUR)",
+ 0x49, L"9 (ZEHNERTASTATUR)",
+ 0x4a, L"- (ZEHNERTASTATUR)",
+ 0x4b, L"4 (ZEHNERTASTATUR)",
+ 0x4c, L"5 (ZEHNERTASTATUR)",
+ 0x4d, L"6 (ZEHNERTASTATUR)",
+ 0x4e, L"+ (ZEHNERTASTATUR)",
+ 0x4f, L"1 (ZEHNERTASTATUR)",
+ 0x50, L"2 (ZEHNERTASTATUR)",
+ 0x51, L"3 (ZEHNERTASTATUR)",
+ 0x52, L"0 (ZEHNERTASTATUR)",
+ 0x53, L"KOMMA (ZEHNERTASTATUR)",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"EINGABE (ZEHNERTASTATUR)",
+ 0x1d, L"STRG-RECHTS",
+ 0x35, L" (ZEHNERTASTATUR)",
+ 0x37, L"DRUCK",
+ 0x38, L"ALT GR",
+ 0x45, L"NUM-FESTSTELL",
+ 0x46, L"UNTBR",
+ 0x47, L"POS1",
+ 0x48, L"NACH-OBEN",
+ 0x49, L"BILD-NACH-OBEN",
+ 0x4b, L"NACH-LINKS",
+ 0x4d, L"NACH-RECHTS",
+ 0x4f, L"ENDE",
+ 0x50, L"NACH-UNTEN",
+ 0x51, L"BILD-NACH-UNTEN",
+ 0x52, L"EINFG",
+ 0x53, L"ENTF",
+ 0x54, L"<00>",
+ 0x56, L"HILFE",
+ 0x5b, L"LINKE WINDOWS",
+ 0x5c, L"RECHTE WINDOWS",
+ 0x5d, L"ANWENDUNG",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = {
+ L"\x00b4" L"AKUT",
+ L"`" L"GRAVIS",
+ L"^" L"ZIRKUMFLEX",
+ NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = {
+ DEADTRANS( L'a' , L'^' , 0x00e2 , 0x0000),
+ DEADTRANS( L'e' , L'^' , 0x00ea , 0x0000),
+ DEADTRANS( L'i' , L'^' , 0x00ee , 0x0000),
+ DEADTRANS( L'o' , L'^' , 0x00f4 , 0x0000),
+ DEADTRANS( L'u' , L'^' , 0x00fb , 0x0000),
+ DEADTRANS( L'A' , L'^' , 0x00c2 , 0x0000),
+ DEADTRANS( L'E' , L'^' , 0x00ca , 0x0000),
+ DEADTRANS( L'I' , L'^' , 0x00ce , 0x0000),
+ DEADTRANS( L'O' , L'^' , 0x00d4 , 0x0000),
+ DEADTRANS( L'U' , L'^' , 0x00db , 0x0000),
+ DEADTRANS( L' ' , L'^' , L'^' , 0x0000),
+
+ DEADTRANS( L'a' , 0x00b4 , 0x00e1 , 0x0000),
+ DEADTRANS( L'e' , 0x00b4 , 0x00e9 , 0x0000),
+ DEADTRANS( L'i' , 0x00b4 , 0x00ed , 0x0000),
+ DEADTRANS( L'o' , 0x00b4 , 0x00f3 , 0x0000),
+ DEADTRANS( L'u' , 0x00b4 , 0x00fa , 0x0000),
+ DEADTRANS( L'y' , 0x00b4 , 0x00fd , 0x0000),
+ DEADTRANS( L'A' , 0x00b4 , 0x00c1 , 0x0000),
+ DEADTRANS( L'E' , 0x00b4 , 0x00c9 , 0x0000),
+ DEADTRANS( L'I' , 0x00b4 , 0x00cd , 0x0000),
+ DEADTRANS( L'O' , 0x00b4 , 0x00d3 , 0x0000),
+ DEADTRANS( L'U' , 0x00b4 , 0x00da , 0x0000),
+ DEADTRANS( L'Y' , 0x00b4 , 0x00dd , 0x0000),
+ DEADTRANS( L' ' , 0x00b4 , 0x00b4 , 0x0000),
+
+ DEADTRANS( L'a' , L'`' , 0x00e0 , 0x0000),
+ DEADTRANS( L'e' , L'`' , 0x00e8 , 0x0000),
+ DEADTRANS( L'i' , L'`' , 0x00ec , 0x0000),
+ DEADTRANS( L'o' , L'`' , 0x00f2 , 0x0000),
+ DEADTRANS( L'u' , L'`' , 0x00f9 , 0x0000),
+ DEADTRANS( L'A' , L'`' , 0x00c0 , 0x0000),
+ DEADTRANS( L'E' , L'`' , 0x00c8 , 0x0000),
+ DEADTRANS( L'I' , L'`' , 0x00cc , 0x0000),
+ DEADTRANS( L'O' , L'`' , 0x00d2 , 0x0000),
+ DEADTRANS( L'U' , L'`' , 0x00d9 , 0x0000),
+ DEADTRANS( L' ' , L'`' , L'`' , 0x0000),
+
+ 0, 0
+};
+
+static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics
+ */
+ aDeadKey,
+
+ /*
+ * Names of Keys
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ aKeyNamesDead,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * Locale-specific special processing
+ */
+ MAKELONG(KLLF_ALTGR, KBD_VERSION),
+
+ /*
+ * Ligatures
+ */
+ 0,
+ 0,
+ NULL
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables;
+}
diff --git a/windows/XP/kbdneo2/kbdneo2.def b/windows/XP/kbdneo2/kbdneo2.def new file mode 100644 index 0000000..6207414 --- /dev/null +++ b/windows/XP/kbdneo2/kbdneo2.def @@ -0,0 +1,4 @@ +LIBRARY KBDNEO2
+
+EXPORTS
+ KbdLayerDescriptor @1
diff --git a/windows/XP/kbdneo2/kbdneo2.h b/windows/XP/kbdneo2/kbdneo2.h new file mode 100644 index 0000000..730f514 --- /dev/null +++ b/windows/XP/kbdneo2/kbdneo2.h @@ -0,0 +1,105 @@ +/****************************** Module Header ******************************\
+* Module Name: KBDNEO2.H
+*
+* keyboard layout header for NEO German
+*
+* Various defines for use by keyboard input code.
+*
+* History: Ver 0.1
+*
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 4
+
+/*
+* Include the basis of all keyboard table values
+*/
+#include "kbd.h"
+#include <dontuse.h>
+/***************************************************************************\
+* The table below defines the virtual keys for various keyboard types where
+* the keyboard differ from the US keyboard.
+*
+* _EQ() : all keyboard types have the same virtual key for this scancode
+* _NE() : different virtual keys for this scancode, depending on kbd type
+*
+* +------+ +----------+----------+----------+----------+----------+----------+
+* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
+* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
+\****+-------+_+----------+----------+----------+----------+----------+----------+*/
+
+#undef T0D
+#define T0D _EQ( OEM_2 )
+#undef T10
+#define T10 _EQ( 'X' )
+#undef T11
+#define T11 _EQ( 'V' )
+#undef T12
+#define T12 _EQ( 'L' )
+#undef T13
+#define T13 _EQ( 'C' )
+#undef T14
+#define T14 _EQ( 'W' )
+#undef T15
+#define T15 _EQ( 'K' )
+#undef T16
+#define T16 _EQ( 'H' )
+#undef T17
+#define T17 _EQ( 'G' )
+#undef T18
+#define T18 _EQ( 'F' )
+#undef T19
+#define T19 _EQ( 'Q' )
+#undef T1A
+#define T1A _EQ( OEM_3 )
+#undef T1B
+#define T1B _EQ( OEM_4 )
+#undef T1E
+#define T1E _EQ( 'U' )
+#undef T1F
+#define T1F _EQ( 'I' )
+#undef T20
+#define T20 _EQ( 'A' )
+#undef T21
+#define T21 _EQ( 'E' )
+#undef T22
+#define T22 _EQ( 'O' )
+#undef T23
+#define T23 _EQ( 'S' )
+#undef T24
+#define T24 _EQ( 'N' )
+#undef T25
+#define T25 _EQ( 'R' )
+#undef T26
+#define T26 _EQ( 'T' )
+#undef T27
+#define T27 _EQ( 'D' )
+#undef T28
+#define T28 _EQ( 'Y' )
+#undef T29
+#define T29 _EQ( OEM_1 )
+#undef T2B
+#define T2B _EQ( RMENU )
+#undef T2C
+#define T2C _EQ( OEM_5 )
+#undef T2D
+#define T2D _EQ( OEM_6 )
+#undef T2E
+#define T2E _EQ( OEM_7 )
+#undef T2F
+#define T2F _EQ( 'P' )
+#undef T30
+#define T30 _EQ( 'Z' )
+#undef T31
+#define T31 _EQ( 'B' )
+#undef T35
+#define T35 _EQ( 'J' )
+#undef T3A
+#define T3A _EQ( RMENU )
+#undef X38
+#define X38 _EQ( KANA )
+#undef T56
+#define T56 _EQ( KANA )
\ No newline at end of file diff --git a/windows/XP/kbdneo2/kbdneo2.rc b/windows/XP/kbdneo2/kbdneo2.rc new file mode 100644 index 0000000..ec83d64 --- /dev/null +++ b/windows/XP/kbdneo2/kbdneo2.rc @@ -0,0 +1,11 @@ +#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_DRV_KEYBOARD
+#define VER_FILEDESCRIPTION_STR "NEO2 German ergonomic Keyboard Layout"
+#define VER_INTERNALNAME_STR "kbdneo2"
+#define VER_ORIGINALFILENAME_STR "kbdneo2.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
diff --git a/windows/XP/kbdneo2/makefile b/windows/XP/kbdneo2/makefile new file mode 100644 index 0000000..23d6985 --- /dev/null +++ b/windows/XP/kbdneo2/makefile @@ -0,0 +1,15 @@ +#
+# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
+# file to this component. This file merely indirects to the real make file
+# that is shared by all the components of NT OS/2
+#
+!IF DEFINED(_NT_TARGET_VERSION)
+! IF $(_NT_TARGET_VERSION)>=0x501
+! INCLUDE $(NTMAKEENV)\makefile.def
+! ELSE
+! message BUILDMSG: Warning : The sample "$(MAKEDIR)" is not valid for the current OS target.
+! ENDIF
+!ELSE
+! INCLUDE $(NTMAKEENV)\makefile.def
+!ENDIF
+
diff --git a/windows/XP/kbdneo2/makefile.inc b/windows/XP/kbdneo2/makefile.inc new file mode 100644 index 0000000..fdf82aa --- /dev/null +++ b/windows/XP/kbdneo2/makefile.inc @@ -0,0 +1 @@ +!INCLUDE ..\..\makefile.inc
diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/_objects.mac b/windows/XP/kbdneo2/objchk_wxp_x86/i386/_objects.mac new file mode 100644 index 0000000..5f103a4 --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/_objects.mac @@ -0,0 +1,18 @@ +
+
+386_OBJECTS=\
+ $(OBJ_PATH)\$O\kbdneo2.obj \
+
+
+_RES_FILE=$(OBJ_PATH)\$O\kbdneo2.res
+
+
+
+# lowercased
+BASEDIR=c:\winddk\6001.17051
+OBJECT_ROOT=c:\winddk\6001.17051
+MAKEDIR_LOWERCASE=c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2
+MAKEDIR_RELATIVE_TO_BASEDIR=src\input\layout\all_kbds\kbdneo2
+OBJ_PATH=c:\winddk\6001.17051\src\input\layout\all_kbds\kbdneo2
+CONCURRENT_MIDL=0
+CONCURRENT_MANIFEST_BUILD=0
diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.dll b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.dll Binary files differnew file mode 100644 index 0000000..eabe715 --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.dll diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.exp b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.exp Binary files differnew file mode 100644 index 0000000..a66b0d5 --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.exp diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.lib b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.lib Binary files differnew file mode 100644 index 0000000..0f6c9e9 --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.lib diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.obj b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.obj Binary files differnew file mode 100644 index 0000000..7463f0e --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.obj diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.pdb b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.pdb Binary files differnew file mode 100644 index 0000000..e20572c --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.pdb diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.res b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.res Binary files differnew file mode 100644 index 0000000..b606b74 --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/kbdneo2.res diff --git a/windows/XP/kbdneo2/objchk_wxp_x86/i386/vc80.pdb b/windows/XP/kbdneo2/objchk_wxp_x86/i386/vc80.pdb Binary files differnew file mode 100644 index 0000000..16af315 --- /dev/null +++ b/windows/XP/kbdneo2/objchk_wxp_x86/i386/vc80.pdb diff --git a/windows/XP/kbdneo2/sources b/windows/XP/kbdneo2/sources new file mode 100644 index 0000000..a4d98f3 --- /dev/null +++ b/windows/XP/kbdneo2/sources @@ -0,0 +1,2 @@ +TARGETNAME=kbdneo2
+!INCLUDE ..\..\sources.inc
|