SIS
Symmetric Index Structures
/Users/dbr/ma/src/bas/lml/command.c
Go to the documentation of this file.
00001 #include "base.h"
00002 
00003 static void GetCmd( Command * cmd, const S8 * arg );
00004 
00005 Command * CommandInit(){
00006     Command * cmd;
00007 
00008     cmd = (Command *)Malloc( 1, sizeof(Command) );
00009     cmd->cmd = NO;
00010     cmd->arguments = NULL;
00011     cmd->numberOfArguments = NO;
00012     return cmd;
00013 }
00014 
00015 void CommandFree( Command * cmd ){
00016     Free( cmd );
00017 }
00018 
00019 void CommandParse( Command * cmd, UINT argc, S8** argv ){
00020     if( argc < 2 ){
00021         Throw( "Bad input parameters: command is not specified." );
00022     }
00023     GetCmd( cmd, argv[1] );
00024     if( cmd->numberOfArguments == 0 ){
00025         return;
00026     }
00027     if( argc - 2 < cmd->numberOfArguments ){
00028         Throw( "Bad input parameters: the specified command requires more arguments." );
00029     }
00030     cmd->arguments = argv + 2;
00031 }
00032 
00033 static void GetCmd( Command * cmd, const S8 * arg ){
00034     if( strcmp( arg, "reverse_and_sort" ) == 0 ){
00035         cmd->cmd = CMD_REVERSE_AND_SORT;
00036         cmd->numberOfArguments = 4;
00037     }
00038     else if( strcmp( arg, "build_suffix_tree" ) == 0 ){
00039         cmd->cmd = CMD_BUILD_SUFFIX_TREE;
00040         cmd->numberOfArguments = 5;
00041     }
00042     else if( strcmp( arg, "generate_suffixes" ) == 0 ){
00043         cmd->cmd = CMD_GENERATE_SUFFIXES;
00044         cmd->numberOfArguments = 4;
00045     }
00046     else if( strcmp( arg, "compressed_automaton_lang" ) == 0 ){
00047         cmd->cmd = CMD_COMPRESSED_AUTOMATON_LANG;
00048         cmd->numberOfArguments = 3;
00049     }
00050     else if( strcmp( arg, "build_cdawg" ) == 0 ){
00051         cmd->cmd = CMD_BUILD_CDAWG;
00052         cmd->numberOfArguments = 5;
00053     }
00054     else if( strcmp( arg, "compressed_automaton_stat" ) == 0 ){
00055         cmd->cmd = CMD_COMPRESSED_AUTOMATON_STAT;
00056         cmd->numberOfArguments = 2;
00057     }
00058     else if( strcmp( arg, "build_scdawg" ) == 0 ){
00059         cmd->cmd = CMD_BUILD_SCDAWG;
00060         cmd->numberOfArguments = 5;
00061     }
00062     else if( strcmp( arg, "scdawg_left_lang" ) == 0 ){
00063         cmd->cmd = CMD_SCDAWG_LEFT_LANG;
00064         cmd->numberOfArguments = 3;
00065     }
00066     else if( strcmp( arg, "compressed_automaton_gv" ) == 0 ){
00067         cmd->cmd = CMD_COMPRESSED_AUTOMATON_GV;
00068         cmd->numberOfArguments = 3;
00069     }
00070     else if( strcmp( arg, "scdawg_stat" ) == 0 ){
00071         cmd->cmd = CMD_SCDAWG_STAT;
00072         cmd->numberOfArguments = 2;
00073     }
00074     else if( strcmp( arg, "scdawg_gv" ) == 0 ){
00075         cmd->cmd = CMD_SCDAWG_GV;
00076         cmd->numberOfArguments = 3;
00077     }
00078     else if( strcmp( arg, "scdawg_gv" ) == 0 ){
00079         cmd->cmd = CMD_SCDAWG_GV;
00080         cmd->numberOfArguments = 3;
00081     }
00082     else if( strcmp( arg, "help" ) == 0 ){
00083         cmd->cmd = CMD_HELP;
00084         cmd->numberOfArguments = 0;
00085     }
00086     else{
00087         S8 msg[MAX_INPUT_STRING_SIZE];
00088         sprintf( msg, "Unknown command: %s", arg );
00089         Throw( msg );
00090     }
00091 }
00092 
00093 void CommandExecute( Command * cmd ){
00094     switch( cmd->cmd ){
00095         case CMD_REVERSE_AND_SORT:
00096             {
00097                 UINT encoding;
00098                 U32 bitsPerSymbol;
00099 
00100                 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol );
00101                 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00102                 CmdReverseAndSort( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding );
00103             }
00104             break;
00105         case CMD_BUILD_SUFFIX_TREE:
00106             {
00107                 UINT encoding;
00108                 U32 bitsPerSymbol;
00109                 boolean tarjanTable;
00110 
00111                 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol );
00112                 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00113                 tarjanTable = ( strcmp( cmd->arguments[4], "y" ) == 0 );
00114                 CmdBuildSuffixTree( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding, tarjanTable );
00115             }
00116             break;
00117         case CMD_GENERATE_SUFFIXES:
00118             {
00119                 UINT encoding;
00120                 U32 bitsPerSymbol;
00121 
00122                 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol );
00123                 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00124                 CmdGenerateSuffixes( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding );
00125             }
00126             break;
00127         case CMD_COMPRESSED_AUTOMATON_LANG:
00128             {
00129                 UINT encoding;
00130 
00131                 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00132                 CmdCompressedAutomatonLang( cmd->arguments[0], cmd->arguments[1], encoding );
00133             }
00134             break;
00135         case CMD_BUILD_CDAWG:
00136             {
00137                 UINT encoding;
00138                 U32 bitsPerSymbol;
00139                 boolean tarjanTable;
00140 
00141                 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol );
00142                 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00143                 tarjanTable = ( strcmp( cmd->arguments[4], "y" ) == 0 );
00144                 CmdBuildCDAWG( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding, tarjanTable );
00145             }
00146             break;
00147         case CMD_COMPRESSED_AUTOMATON_STAT:
00148             CmdCompressedAutomatonStat( cmd->arguments[0], cmd->arguments[1] );
00149             break;
00150         case CMD_BUILD_SCDAWG:
00151             {
00152                 UINT encoding;
00153                 U32 bitsPerSymbol;
00154                 boolean tarjanTable;
00155 
00156                 sscanf( cmd->arguments[2], "%u", &bitsPerSymbol );
00157                 encoding = ( strcmp( cmd->arguments[3], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00158                 tarjanTable = ( strcmp( cmd->arguments[4], "y" ) == 0 );
00159                 CmdBuildSCDAWG( cmd->arguments[0], cmd->arguments[1], bitsPerSymbol, encoding, tarjanTable );
00160             }
00161             break;
00162         case CMD_SCDAWG_LEFT_LANG:
00163             {
00164                 UINT encoding;
00165 
00166                 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00167                 SCDAWGLeftLang( cmd->arguments[0], cmd->arguments[1], encoding );
00168             }
00169             break;
00170         case CMD_COMPRESSED_AUTOMATON_GV:
00171             {
00172                 UINT encoding;
00173 
00174                 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00175                 CmdCompressedAutomatonDumpGV( cmd->arguments[0], cmd->arguments[1], encoding );
00176             }
00177             break;
00178         case CMD_SCDAWG_STAT:
00179             CmdSCDAWGStat( cmd->arguments[0], cmd->arguments[1] );
00180             break;
00181         case CMD_SCDAWG_GV:
00182             {
00183                 UINT encoding;
00184 
00185                 encoding = ( strcmp( cmd->arguments[2], "UTF-8" ) == 0 ) ? ENCODING_UTF8 : ENCODING_PLAIN;
00186                 CmdSCDAWGDumpGV( cmd->arguments[0], cmd->arguments[1], encoding );
00187             }
00188             break;
00189     }
00190 }