Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244/* * 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 ******************************************************************/
VOIDPrintUsage(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");}
INTmain(INT argc, PCHAR* argv){ int i; ULONG 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 */