| enum keys { |
| KEY_ESPRESSO, KEY_PLA_verify, KEY_check, KEY_contain, KEY_d1merge, |
| KEY_disjoint, KEY_dsharp, KEY_echo, KEY_essen, KEY_exact, KEY_expand, |
| KEY_gasp, KEY_intersect, KEY_irred, KEY_lexsort, KEY_make_sparse, |
| KEY_map, KEY_mapdc, KEY_minterms, KEY_opo, KEY_opoall, |
| KEY_pair, KEY_pairall, KEY_primes, KEY_qm, KEY_reduce, KEY_sharp, |
| KEY_simplify, KEY_so, KEY_so_both, KEY_stats, KEY_super_gasp, KEY_taut, |
| KEY_test, KEY_equiv, KEY_union, KEY_verify, KEY_MANY_ESPRESSO, |
| KEY_separate, KEY_xor, KEY_d1merge_in, KEY_fsm, |
| KEY_unknown |
| }; |
| |
| /* Lookup table for program options */ |
| struct { |
| char *name; |
| enum keys key; |
| int num_plas; |
| bool needs_offset; |
| bool needs_dcset; |
| } option_table [] = { |
| /* ways to minimize functions */ |
| "ESPRESSO", KEY_ESPRESSO, 1, TRUE, TRUE, /* must be first */ |
| "many", KEY_MANY_ESPRESSO, 1, TRUE, TRUE, |
| "exact", KEY_exact, 1, TRUE, TRUE, |
| "qm", KEY_qm, 1, TRUE, TRUE, |
| "single_output", KEY_so, 1, TRUE, TRUE, |
| "so", KEY_so, 1, TRUE, TRUE, |
| "so_both", KEY_so_both, 1, TRUE, TRUE, |
| "simplify", KEY_simplify, 1, FALSE, FALSE, |
| "echo", KEY_echo, 1, FALSE, FALSE, |
| |
| /* output phase assignment and assignment of inputs to two-bit decoders */ |
| "opo", KEY_opo, 1, TRUE, TRUE, |
| "opoall", KEY_opoall, 1, TRUE, TRUE, |
| "pair", KEY_pair, 1, TRUE, TRUE, |
| "pairall", KEY_pairall, 1, TRUE, TRUE, |
| |
| /* Ways to check covers */ |
| "check", KEY_check, 1, TRUE, TRUE, |
| "stats", KEY_stats, 1, FALSE, FALSE, |
| "verify", KEY_verify, 2, FALSE, TRUE, |
| "PLAverify", KEY_PLA_verify, 2, FALSE, TRUE, |
| |
| /* hacks */ |
| "equiv", KEY_equiv, 1, TRUE, TRUE, |
| "map", KEY_map, 1, FALSE, FALSE, |
| "mapdc", KEY_mapdc, 1, FALSE, FALSE, |
| "fsm", KEY_fsm, 1, FALSE, TRUE, |
| |
| /* the basic boolean operations on covers */ |
| "contain", KEY_contain, 1, FALSE, FALSE, |
| "d1merge", KEY_d1merge, 1, FALSE, FALSE, |
| "d1merge_in", KEY_d1merge_in, 1, FALSE, FALSE, |
| "disjoint", KEY_disjoint, 1, TRUE, FALSE, |
| "dsharp", KEY_dsharp, 2, FALSE, FALSE, |
| "intersect", KEY_intersect, 2, FALSE, FALSE, |
| "minterms", KEY_minterms, 1, FALSE, FALSE, |
| "primes", KEY_primes, 1, FALSE, TRUE, |
| "separate", KEY_separate, 1, TRUE, TRUE, |
| "sharp", KEY_sharp, 2, FALSE, FALSE, |
| "union", KEY_union, 2, FALSE, FALSE, |
| "xor", KEY_xor, 2, TRUE, TRUE, |
| |
| /* debugging only -- call each step of the espresso algorithm */ |
| "essen", KEY_essen, 1, FALSE, TRUE, |
| "expand", KEY_expand, 1, TRUE, FALSE, |
| "gasp", KEY_gasp, 1, TRUE, TRUE, |
| "irred", KEY_irred, 1, FALSE, TRUE, |
| "make_sparse", KEY_make_sparse, 1, TRUE, TRUE, |
| "reduce", KEY_reduce, 1, FALSE, TRUE, |
| "taut", KEY_taut, 1, FALSE, FALSE, |
| "super_gasp", KEY_super_gasp, 1, TRUE, TRUE, |
| "lexsort", KEY_lexsort, 1, FALSE, FALSE, |
| "test", KEY_test, 1, TRUE, TRUE, |
| 0, KEY_unknown, 0, FALSE, FALSE /* must be last */ |
| }; |
| |
| |
| struct { |
| char *name; |
| int value; |
| } debug_table[] = { |
| "", EXPAND + ESSEN + IRRED + REDUCE + SPARSE + GASP + SHARP + MINCOV, |
| "compl", COMPL, "essen", ESSEN, |
| "expand", EXPAND, "expand1", EXPAND1|EXPAND, |
| "irred", IRRED, "irred1", IRRED1|IRRED, |
| "reduce", REDUCE, "reduce1", REDUCE1|REDUCE, |
| "mincov", MINCOV, "mincov1", MINCOV1|MINCOV, |
| "sparse", SPARSE, "sharp", SHARP, |
| "taut", TAUT, "gasp", GASP, |
| "exact", EXACT, |
| 0, |
| }; |
| |
| |
| struct { |
| char *name; |
| int *variable; |
| int value; |
| } esp_opt_table[] = { |
| "eat", &echo_comments, FALSE, |
| "eatdots", &echo_unknown_commands, FALSE, |
| "fast", &single_expand, TRUE, |
| "kiss", &kiss, TRUE, |
| "ness", &remove_essential, FALSE, |
| "nirr", &force_irredundant, FALSE, |
| "nunwrap", &unwrap_onset, FALSE, |
| "onset", &recompute_onset, TRUE, |
| "pos", &pos, TRUE, |
| "random", &use_random_order, TRUE, |
| "strong", &use_super_gasp, TRUE, |
| 0, |
| }; |