mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 22:23:01 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
242
sdk/tools/kbdtool/main.c
Normal file
242
sdk/tools/kbdtool/main.c
Normal file
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Build Tools [Keyboard Layout Compiler]
|
||||
* LICENSE: BSD - See COPYING.BSD in the top level directory
|
||||
* FILE: tools/kbdtool/main.c
|
||||
* PURPOSE: Main Logic Loop
|
||||
* PROGRAMMERS: ReactOS Foundation
|
||||
*/
|
||||
|
||||
/* INCLUDES *******************************************************************/
|
||||
|
||||
#include "kbdtool.h"
|
||||
|
||||
/* GLOBALS ********************************************************************/
|
||||
|
||||
/* Internal tool data */
|
||||
ULONG gVersion = 3;
|
||||
ULONG gSubVersion = 40;
|
||||
|
||||
/* Input file */
|
||||
PCHAR gpszFileName;
|
||||
FILE* gfpInput;
|
||||
|
||||
/* Command-line parameters */
|
||||
BOOLEAN UnicodeFile, Verbose, NoLogo, FallbackDriver, SanityCheck, SourceOnly;
|
||||
ULONG BuildType;
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
VOID
|
||||
PrintUsage(VOID)
|
||||
{
|
||||
/* This is who we are */
|
||||
printf("\nKbdTool v%d.%02d - convert keyboard text file to C file or a keyboard layout DLL\n\n",
|
||||
gVersion, gSubVersion);
|
||||
|
||||
/* This is what we do */
|
||||
printf("Usage: KbdTool [-v] [-n] [-w] [-k] [-n] [-u|a] [-i|x|m|o|s] FILE\n\n");
|
||||
printf("\t[-?] display this message\n");
|
||||
printf("\t[-n] no logo or normal build information displayed\n\n");
|
||||
printf("\t[-a] Uses non-Unicode source files (default)\n");
|
||||
printf("\t[-u] Uses Unicode source files\n\n");
|
||||
printf("\t[-v] Verbose diagnostics (and warnings, with -w)\n");
|
||||
printf("\t[-w] display extended Warnings\n\n");
|
||||
printf("\t[-x] Builds for x86 (default)\n");
|
||||
printf("\t[-i] Builds for IA64\n");
|
||||
printf("\t[-m] Builds for AMD64\n");
|
||||
printf("\t[-o] Builds for WOW64\n");
|
||||
printf("\t[-s] Generate Source files (no build)\n\n");
|
||||
printf("\tFILE The source keyboard file (required)\n\n");
|
||||
|
||||
/* Extra hints */
|
||||
printf("\t-u/-a are mutually exclusive; kbdutool will use the last one if you specify more than one.\n");
|
||||
printf("\t-i/-x/-m/-o-s will exhibit the same behavior when than one of them is specified.\n\n");
|
||||
|
||||
/* Quit */
|
||||
exit(1);
|
||||
printf("should not be here");
|
||||
}
|
||||
|
||||
INT
|
||||
main(INT argc,
|
||||
PCHAR* argv)
|
||||
{
|
||||
ULONG i, ErrorCode, FailureCode;
|
||||
CHAR Option;
|
||||
PCHAR OpenFlags;
|
||||
CHAR BuildOptions[16] = {0};
|
||||
|
||||
/* Loop for parameter */
|
||||
for (i = 1; i < argc; ++i)
|
||||
{
|
||||
if (argv[i][0] != '/' && argv[i][0] != '-')
|
||||
break;
|
||||
|
||||
if (argv[i][1] && !argv[i][2])
|
||||
Option = argv[i][1];
|
||||
else
|
||||
Option = 0;
|
||||
|
||||
/* Check supported options */
|
||||
switch (Option)
|
||||
{
|
||||
/* ASCII File */
|
||||
case 'A':
|
||||
case 'a':
|
||||
UnicodeFile = 0;
|
||||
break;
|
||||
|
||||
/* UNICODE File */
|
||||
case 'U':
|
||||
case 'u':
|
||||
UnicodeFile = 1;
|
||||
break;
|
||||
|
||||
/* Verbose */
|
||||
case 'V':
|
||||
case 'v':
|
||||
Verbose = 1;
|
||||
break;
|
||||
|
||||
/* No logo */
|
||||
case 'N':
|
||||
case 'n':
|
||||
NoLogo = 1;
|
||||
break;
|
||||
|
||||
/* Fallback driver */
|
||||
case 'K':
|
||||
case 'k':
|
||||
FallbackDriver = 1;
|
||||
break;
|
||||
|
||||
/* Sanity Check */
|
||||
case 'W':
|
||||
case 'w':
|
||||
SanityCheck = 1;
|
||||
break;
|
||||
|
||||
/* Itanium */
|
||||
case 'I':
|
||||
case 'i':
|
||||
BuildType = 1;
|
||||
break;
|
||||
|
||||
/* X86 */
|
||||
case 'X':
|
||||
case 'x':
|
||||
BuildType = 0;
|
||||
break;
|
||||
|
||||
/* AMD64 */
|
||||
case 'M':
|
||||
case 'm':
|
||||
BuildType = 2;
|
||||
break;
|
||||
|
||||
/* WOW64 */
|
||||
case 'O':
|
||||
case 'o':
|
||||
BuildType = 3;
|
||||
break;
|
||||
|
||||
/* Source only */
|
||||
case 'S':
|
||||
case 's':
|
||||
SourceOnly = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* If you got here, the options are invalid or missing */
|
||||
PrintUsage();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do we have no options? */
|
||||
if (i == argc) PrintUsage();
|
||||
|
||||
/* Should we announce ourselves? */
|
||||
if (!NoLogo)
|
||||
{
|
||||
/* This is who we are */
|
||||
printf("\nKbdTool v%d.%02d - convert keyboard text file to C file or a keyboard layout DLL\n\n",
|
||||
gVersion, gSubVersion);
|
||||
}
|
||||
|
||||
/* Save the file name */
|
||||
gpszFileName = argv[i];
|
||||
|
||||
/* Open either as binary or text */
|
||||
OpenFlags = "rb";
|
||||
if (!UnicodeFile) OpenFlags = "rt";
|
||||
|
||||
/* Open a handle to the file */
|
||||
gfpInput = fopen(gpszFileName, OpenFlags);
|
||||
if (!gfpInput)
|
||||
{
|
||||
/* Couldn't open it */
|
||||
printf("Unable to open '%s' for read.\n", gpszFileName);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Should we print out what we're doing? */
|
||||
if (!NoLogo)
|
||||
{
|
||||
/* Are we only building the source files? */
|
||||
if (SourceOnly)
|
||||
{
|
||||
/* Then there's no target architecture */
|
||||
strcpy(BuildOptions, "source files");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Take a look at the target architecture*/
|
||||
switch (BuildType)
|
||||
{
|
||||
/* Print the appropriate message depending on what was chosen */
|
||||
case 0:
|
||||
strcpy(BuildOptions, "i386/x86");
|
||||
break;
|
||||
case 1:
|
||||
strcpy(BuildOptions, "ia64");
|
||||
break;
|
||||
case 2:
|
||||
strcpy(BuildOptions, "amd64/x64");
|
||||
break;
|
||||
case 3:
|
||||
strcpy(BuildOptions, "wow64");
|
||||
break;
|
||||
default:
|
||||
strcpy(BuildOptions, "unknown purpose");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now inform the user */
|
||||
printf("Compiling layout information from '%s' for %s.\n", gpszFileName, BuildOptions);
|
||||
}
|
||||
|
||||
/* Now parse the keywords */
|
||||
FailureCode = DoParsing();
|
||||
|
||||
/* Should we build? */
|
||||
if (!(SourceOnly) && !(FallbackDriver)) ErrorCode = 0;//DoBuild();
|
||||
|
||||
/* Did everything work? */
|
||||
if (FailureCode == 0)
|
||||
{
|
||||
/* Tell the user, if he cares */
|
||||
if (!NoLogo) printf("All tasks completed successfully.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Print the failure code */
|
||||
printf("\n %13d\n", FailureCode);
|
||||
}
|
||||
|
||||
/* Return the error code */
|
||||
return ErrorCode;
|
||||
}
|
||||
|
||||
/* EOF */
|
Loading…
Add table
Add a link
Reference in a new issue