spiegel-keyman/developer/kmcompx/include/Compfile.h
Marc Durdin 6c12bbc6cd refactor(developer): fixup path to tests
tidied up +removed unnecessary files
checked contents of files+included a few new functions needed for myVersion
changed datatypes in CheckForDuplicates
tidy up more paths
CheckFileConsistency: not able to fully adapt for use of char16_t on non windows p.
	-> used char16_t + commented out some AddWarning().
2022-07-20 17:49:17 +02:00

391 lines
12 KiB
C

/*
Name: Compfile
Copyright: Copyright (C) SIL International.
Documentation:
Description:
Create Date: 25 Jan 2007
Modified Date: 25 May 2010
Authors: mcdurdin
Related Files:
Dependencies:
Bugs:
Todo:
Notes:
History: 25 Jan 2007 - mcdurdin - Add GLOBAL_BUFSIZE, enlarge LINESIZE
25 May 2010 - mcdurdin - I1632 - Keyboard Options
- Sabine: 25.Nov.21:
- doubled all structs and consts; renamed them: struct FILE_STORE ---> struct KMX_FILE_STORE
- New structs are needed for gradually exchanging variables in Compiler.cpp etc
- after all variables in compiler.cpp etc are replaced these structs will be renamed again:
- struct FILE_STORE <--- struct KMX_FILE_STORE
*/
#ifndef _COMPFILE_H
#define _COMPFILE_H
#include "compiler.h"
#define LINESIZE 8192
#define GLOBAL_BUFSIZE 4096
#define SZMAX_STORENAME 80
#define SZMAX_GROUPNAME 80
#define SZMAX_DEADKEYNAME 80
#define SZMAX_ERRORTEXT 512
#define SZMAX_VKDICTIONARYNAME 80
#define MAX_WARNINGS 100
#define T_COMMENT 1 // A comment line
#define T_KEYTOKEY 2 // A rule line
#define T_BLANK 3 // A blank line
#define T_W_START 4 // Start of easily matched line types
#define T_STORE 4 // A store line
#define T_VERSION 5 // A 'VERSION 3.2/3.1/3.0' line
#define T_NAME 6 // A 'NAME "xxxx"' line
#define T_BITMAP 7 // A 'BITMAP bmpfile' line
#define T_HOTKEY 8 // A 'HOTKEY "^%+C"' line
#define T_BEGIN 9 // A 'begin > use(xxxx)' line
#define T_GROUP 10 // A 'group(xxxx)' line
#define T_MATCH 11 // A 'match > "XXXX"' line
#define T_NOMATCH 12 // A 'nomatch > "XXXX"' line
#define T_SHIFT 13 // A 'SHIFT FREES CAPS' line
#define T_CAPSON 14 // A 'CAPS ON ONLY' line
#define T_CAPSOFF 15 // A 'CAPS ALWAYS OFF' line
#define T_LANGUAGE 16 // A 'LANGUAGE xxxh, xxh' line
#define T_LAYOUT 17 // A 'LAYOUT xxxxh' line
#define T_COPYRIGHT 18 // A 'COPYRIGHT "so and so"' line
#define T_MESSAGE 19 // A 'MESSAGE "so and so"' line
#define T_LANGUAGENAME 20 // A 'LANGUAGENAME "xxxx"' line
#define T_BITMAPS 21 // An unused 'BITMAPS' line (version 3.x)
#define T_W_END 21 // End of easily matched rule types
#define T_UNKNOWN 99 // Unrecognized line type (illegal line)
#define GDS_CUTLEAD 0x01 // GetDelimitedString: cut leading spaces
#define GDS_CUTFOLL 0x02 // GetDelimitedString: cut following spaces
#define GXS_LINE 0x00 // GetExtendedString error: in a "line"
#define GXS_RULE 0x01 // GetExtendedString error: in a "rule"
#define GXS_STORE 0x02 // GetExtendedString error: in a "store"
enum FileStoreType { FST_STORE, FST_OPTION, FST_RESERVED };
struct FILE_STORE {
KMX_DWORD dwSystemID;
KMX_WCHAR szName[SZMAX_STORENAME]; // the name of the store
PKMX_WCHAR dpString; // from start of store structure
//FileStoreType fstType;
KMX_BOOL fIsStore;
KMX_BOOL fIsReserved;
KMX_BOOL fIsOption;
KMX_BOOL fIsDebug;
KMX_BOOL fIsCall;
int line;
};
typedef FILE_STORE * PFILE_STORE;
struct FILE_KEY {
KMX_WCHAR Key; // WCHAR for consistency; only a byte used however
KMX_DWORD Line;
KMX_DWORD ShiftFlags;
PKMX_WCHAR dpOutput; // from start of key structure
PKMX_WCHAR dpContext; // from start of key structure
};
typedef FILE_KEY *PFILE_KEY;
struct FILE_GROUP {
KMX_WCHAR szName[SZMAX_GROUPNAME];
PFILE_KEY dpKeyArray; // address of first item in key array, from start of group structure
PKMX_WCHAR dpMatch; // from start of group structure
PKMX_WCHAR dpNoMatch; // from start of group structure
KMX_DWORD cxKeyArray; // in array items
KMX_BOOL fUsingKeys; // group(xx) [using keys] <-- specified or not
KMX_BOOL fReadOnly; // group(xx) [readonly] <-- specified or not
KMX_DWORD Line;
};
typedef FILE_GROUP *PFILE_GROUP;
struct FILE_DEADKEY
{
KMX_WCHAR szName[SZMAX_DEADKEYNAME];
};
typedef FILE_DEADKEY *PFILE_DEADKEY;
struct FILE_VKDICTIONARY
{
KMX_WCHAR szName[SZMAX_VKDICTIONARYNAME];
};
typedef FILE_VKDICTIONARY *PFILE_VKDICTIONARY;
struct FILE_KEYBOARD {
KMX_DWORD KeyboardID; // as stored in HKEY_LOCAL_MACHINE//system//currentcontrolset//control//keyboard layouts
KMX_DWORD version; // keyboard file version with VERSION keyword
PFILE_STORE dpStoreArray; // address of first item in store array, from start of store structure
PFILE_GROUP dpGroupArray; // address of first item in group array, from start of group structure
KMX_DWORD cxStoreArray; // in number of items
KMX_DWORD cxGroupArray; // in number of items
KMX_DWORD StartGroup[2]; // index of starting groups [ANSI=0, Unicode=1]
KMX_DWORD dwHotKey; // standard windows hotkey (hiword=shift/ctrl/alt stuff, loword=vkey)
KMX_WCHAR szName[SZMAX_KEYBOARDNAME]; // Keyboard layout name
KMX_WCHAR szLanguageName[SZMAX_LANGUAGENAME]; // Language name
KMX_WCHAR szCopyright[SZMAX_COPYRIGHT]; // Copyright information
KMX_WCHAR szMessage[SZMAX_MESSAGE]; // General information about the keyboard
PKMX_BYTE lpBitmap;
KMX_DWORD dwBitmapSize;
KMX_DWORD dwFlags; // Flags for the keyboard file
KMX_DWORD currentGroup; // temp - current processing group
KMX_DWORD currentStore; // temp - current processing store
KMX_DWORD cxDeadKeyArray;
PFILE_DEADKEY dpDeadKeyArray; // temp - dead key array
KMX_DWORD cxVKDictionary;
PFILE_VKDICTIONARY dpVKDictionary; // temp - virtual key dictionary
};
typedef FILE_KEYBOARD *PFILE_KEYBOARD;
/*
These size values are used in unit tests to ensure
that the structure sizes correspond precisely across
compilers (pas and c++).
*/
const KMX_DWORD sz_FILE_STORE = sizeof(FILE_STORE);
const KMX_DWORD sz_FILE_KEY = sizeof(FILE_KEY);
const KMX_DWORD sz_FILE_GROUP = sizeof(FILE_GROUP);
const KMX_DWORD sz_FILE_DEADKEY = sizeof(FILE_DEADKEY);
const KMX_DWORD sz_FILE_VKDICTIONARY = sizeof(FILE_VKDICTIONARY);
const KMX_DWORD sz_FILE_KEYBOARD = sizeof(FILE_KEYBOARD);
struct COMPMSG {
KMX_CHAR szText[SZMAX_ERRORTEXT];
KMX_DWORD Line;
KMX_DWORD dwMsgCode;
};
typedef COMPMSG *PCOMPMSG;
struct COMPILEMESSAGES {
int nMessages;
int nErrors;
PCOMPMSG cm;
KMX_DWORD fatalCode;
KMX_CHAR szFatalText[SZMAX_ERRORTEXT];
KMX_DWORD currentLine;
};
typedef COMPILEMESSAGES *PCOMPILEMESSAGES;
/*
struct TVersion
{
//int MinVersion; // 0x0500 usually
//int CompilerVersion[4];
//int MinCompilerVersion[4];
int KeyboardVersion; // 0x0500 usually
};
extern TVersion FVersionInfo;
*/
/*
#define bstrcpy(c,d) (LPBYTE)strcpy((LPSTR)(c),(LPSTR)(d))
#define bstrlen(c) strlen((LPSTR)(c))
#define bstrcmp(c,d) strcmp((LPSTR)(c),(LPSTR)(d))
#define bstrncmp(c,d,n) strncmp((LPSTR)(c),(LPSTR)(d),(n))
#define bstrnicmp(c,d,n) strnicmp((LPSTR)(c),(LPSTR)(d),(n))
#define bstricmp(c,d) stricmp((LPSTR)(c),(LPSTR)(d))
#define bstrchr(c,ch) (LPBYTE)strchr((LPSTR)(c),(char)ch)
#define bstrncpy(c,d,n) (LPBYTE)strncpy((LPSTR)(c),(LPSTR)(d),(n))
#define bstrtok(c,d) (LPBYTE)strtok((LPSTR)(c),(LPSTR)(d))
#define bstrcat(c,d) (LPBYTE)strcat((LPSTR)(c),(LPSTR)(d))
#define bstrncat(c,d,n) (LPBYTE)strncat((LPSTR)(c),(LPSTR)(d),(n))
#define bstrrev(c) (LPBYTE)strrev((LPSTR)(c))
#define batoi(c) atoi((LPSTR)(c))
#define bstrtol(c,d,n) strtol((LPSTR)(c),(LPSTR *)(d),(n))
*/
#endif // _COMPFILE_H
//------------------- old -----------------------------
/*
enum FileStoreType { FST_STORE, FST_OPTION, FST_RESERVED };
struct FILE_STORE {
DWORD dwSystemID;
WCHAR szName[SZMAX_STORENAME]; // the name of the store
PWSTR dpString; // from start of store structure
//FileStoreType fstType;
BOOL fIsStore;
BOOL fIsReserved;
BOOL fIsOption;
BOOL fIsDebug;
BOOL fIsCall;
int line;
};
typedef FILE_STORE *PFILE_STORE;
struct FILE_KEY {
WCHAR Key; // WCHAR for consistency; only a byte used however
DWORD Line;
DWORD ShiftFlags;
PWSTR dpOutput; // from start of key structure
PWSTR dpContext; // from start of key structure
};
typedef FILE_KEY *PFILE_KEY;
struct FILE_GROUP {
WCHAR szName[SZMAX_GROUPNAME];
PFILE_KEY dpKeyArray; // address of first item in key array, from start of group structure
PWSTR dpMatch; // from start of group structure
PWSTR dpNoMatch; // from start of group structure
DWORD cxKeyArray; // in array items
BOOL fUsingKeys; // group(xx) [using keys] <-- specified or not
};
typedef FILE_GROUP *PFILE_GROUP;
struct FILE_DEADKEY
{
WCHAR szName[SZMAX_DEADKEYNAME];
};
typedef FILE_DEADKEY *PFILE_DEADKEY;
struct FILE_VKDICTIONARY
{
WCHAR szName[SZMAX_VKDICTIONARYNAME];
};
typedef FILE_VKDICTIONARY *PFILE_VKDICTIONARY;
struct FILE_KEYBOARD {
DWORD KeyboardID; // as stored in HKEY_LOCAL_MACHINE//system//currentcontrolset//control//keyboard layouts
DWORD version; // keyboard file version with VERSION keyword
PFILE_STORE dpStoreArray; // address of first item in store array, from start of store structure
PFILE_GROUP dpGroupArray; // address of first item in group array, from start of group structure
DWORD cxStoreArray; // in number of items
DWORD cxGroupArray; // in number of items
DWORD StartGroup[2]; // index of starting groups [ANSI=0, Unicode=1]
DWORD dwHotKey; // standard windows hotkey (hiword=shift/ctrl/alt stuff, loword=vkey)
WCHAR szName[SZMAX_KEYBOARDNAME]; // Keyboard layout name
WCHAR szLanguageName[SZMAX_LANGUAGENAME]; // Language name
WCHAR szCopyright[SZMAX_COPYRIGHT]; // Copyright information
WCHAR szMessage[SZMAX_MESSAGE]; // General information about the keyboard
PBYTE lpBitmap;
DWORD dwBitmapSize;
DWORD dwFlags; // Flags for the keyboard file
DWORD currentGroup; // temp - current processing group
DWORD currentStore; // temp - current processing store
DWORD cxDeadKeyArray;
PFILE_DEADKEY dpDeadKeyArray; // temp - dead key array
DWORD cxVKDictionary;
PFILE_VKDICTIONARY dpVKDictionary; // temp - virtual key dictionary
};
typedef FILE_KEYBOARD *PFILE_KEYBOARD;
//
//These size values are used in unit tests to ensure
//that the structure sizes correspond precisely across
//compilers (pas and c++).
//
const DWORD sz_FILE_STORE = sizeof(FILE_STORE);
const DWORD sz_FILE_KEY = sizeof(FILE_KEY);
const DWORD sz_FILE_GROUP = sizeof(FILE_GROUP);
const DWORD sz_FILE_DEADKEY = sizeof(FILE_DEADKEY);
const DWORD sz_FILE_VKDICTIONARY = sizeof(FILE_VKDICTIONARY);
const DWORD sz_FILE_KEYBOARD = sizeof(FILE_KEYBOARD);
struct COMPMSG {
char szText[SZMAX_ERRORTEXT];
DWORD Line;
DWORD dwMsgCode;
};
typedef COMPMSG *PCOMPMSG;
struct COMPILEMESSAGES {
int nMessages;
int nErrors;
PCOMPMSG cm;
DWORD fatalCode;
char szFatalText[SZMAX_ERRORTEXT];
DWORD currentLine;
};
typedef COMPILEMESSAGES *PCOMPILEMESSAGES;
//
//struct TVersion
//{
// //int MinVersion; // 0x0500 usually
// //int CompilerVersion[4];
// //int MinCompilerVersion[4];
// int KeyboardVersion; // 0x0500 usually
//};
//
//extern TVersion FVersionInfo;
*/
/*
#define bstrcpy(c,d) (LPBYTE)strcpy((LPSTR)(c),(LPSTR)(d))
#define bstrlen(c) strlen((LPSTR)(c))
#define bstrcmp(c,d) strcmp((LPSTR)(c),(LPSTR)(d))
#define bstrncmp(c,d,n) strncmp((LPSTR)(c),(LPSTR)(d),(n))
#define bstrnicmp(c,d,n) strnicmp((LPSTR)(c),(LPSTR)(d),(n))
#define bstricmp(c,d) stricmp((LPSTR)(c),(LPSTR)(d))
#define bstrchr(c,ch) (LPBYTE)strchr((LPSTR)(c),(char)ch)
#define bstrncpy(c,d,n) (LPBYTE)strncpy((LPSTR)(c),(LPSTR)(d),(n))
#define bstrtok(c,d) (LPBYTE)strtok((LPSTR)(c),(LPSTR)(d))
#define bstrcat(c,d) (LPBYTE)strcat((LPSTR)(c),(LPSTR)(d))
#define bstrncat(c,d,n) (LPBYTE)strncat((LPSTR)(c),(LPSTR)(d),(n))
#define bstrrev(c) (LPBYTE)strrev((LPSTR)(c))
#define batoi(c) atoi((LPSTR)(c))
#define bstrtol(c,d,n) strtol((LPSTR)(c),(LPSTR *)(d),(n))
*/
/*#endif // _COMPFILE_H*/