static char * test2() { int bflag1 = -4; int bflag2 = -5; int intv1 = -6; int intv2 = -7; int intv3 = -8; double fltv = -9.5; char* string = NULL; slls_t* plist = NULL; string_array_t* parray = NULL; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-t", &bflag1); ap_define_false_flag(pstate, "-f", &bflag2); ap_define_int_value_flag(pstate, "-100", 100, &intv1); ap_define_int_value_flag(pstate, "-200", 200, &intv2); ap_define_int_flag(pstate, "-i", &intv3); ap_define_float_flag(pstate, "-d", &fltv); ap_define_string_flag(pstate, "-s", &string); ap_define_string_list_flag(pstate, "-S", &plist); ap_define_string_array_flag(pstate, "-A", &parray); char* argv[] = { "test-verb", "-t", "-f", "-100", "-200", "-i", "555", "-d", "4.25", "-s", "hello", "-S", mlr_strdup_or_die("a,b,c,d,e"), "-A", mlr_strdup_or_die("x,y,z"), "do", "re", "mi", NULL }; int argc = compute_argc(argv); char* verb = argv[0]; int argi = 1; mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); mu_assert_lf(bflag1 == TRUE); mu_assert_lf(bflag2 == FALSE); mu_assert_lf(intv1 == 100); mu_assert_lf(intv2 == 200); mu_assert_lf(intv3 == 555); mu_assert_lf(fltv == 4.25); mu_assert_lf(string != NULL); mu_assert_lf(streq(string, "hello")); mu_assert_lf(plist != NULL); mu_assert_lf(slls_equals(plist, slls_from_line(mlr_strdup_or_die("a,b,c,d,e"), ',', FALSE))); mu_assert_lf(parray != NULL); mu_assert_lf(parray->length == 3); mu_assert_lf(streq(parray->strings[0], "x")); mu_assert_lf(streq(parray->strings[1], "y")); mu_assert_lf(streq(parray->strings[2], "z")); mu_assert_lf(argi == 15); ap_free(pstate); return 0; }
// ---------------------------------------------------------------- static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv) { char* verb = argv[(*pargi)++]; char* mlr_dsl_expression = NULL; int print_asts = FALSE; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-v", &print_asts); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_put_usage(argv[0], verb); return NULL; } if ((argc - *pargi) < 1) { mapper_put_usage(argv[0], verb); return NULL; } mlr_dsl_expression = argv[(*pargi)++]; // Linked list of mlr_dsl_ast_node_t*. sllv_t* pasts = put_dsl_parse(mlr_dsl_expression); if (pasts == NULL) { mapper_put_usage(argv[0], verb); return NULL; } if (print_asts) { for (sllve_t* pe = pasts->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_print(pe->pvdata); } return mapper_put_alloc(pasts); }
int main(int argc, char** argv) { int bflag = TRUE; int intv = 0; double dblv = 0.0; char* string = NULL; slls_t* plist = NULL; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-t", &bflag); ap_define_false_flag(pstate, "-f", &bflag); ap_define_int_value_flag(pstate, "-100", 100, &intv); ap_define_int_value_flag(pstate, "-200", 200, &intv); ap_define_int_flag(pstate, "-i", &intv); ap_define_double_flag(pstate, "-d", &dblv); ap_define_string_flag(pstate, "-s", &string); ap_define_string_list_flag(pstate, "-S", &plist); char* verb = "stub"; int argi = 1; if (ap_parse(pstate, verb, &argi, argc, argv) == TRUE) { printf("OK\n"); } else { printf("Usage!\n"); } printf("argi is %d\n", argi); printf("argc is %d\n", argc); printf("rest is"); for (; argi < argc; argi++) printf(" %s", argv[argi]); printf("\n"); printf("bflag is %d\n", bflag); printf("intv is %d\n", intv); printf("dblv is %g\n", dblv); if (string == NULL) { printf("string is null\n"); } else { printf("string is \"%s\"\n", string); } if (plist == NULL) { printf("list is null\n"); } else { char* out = slls_join(plist, ','); printf("list is %s\n", out); free(out); } ap_free(pstate); return 0; }
static char * test2() { int bflag1 = -4; int bflag2 = -5; int intv1 = -6; int intv2 = -7; int intv3 = -8; double dblv = -9.5; char* string = NULL; slls_t* plist = NULL; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-t", &bflag1); ap_define_false_flag(pstate, "-f", &bflag2); ap_define_int_value_flag(pstate, "-100", 100, &intv1); ap_define_int_value_flag(pstate, "-200", 200, &intv2); ap_define_int_flag(pstate, "-i", &intv3); ap_define_double_flag(pstate, "-d", &dblv); ap_define_string_flag(pstate, "-s", &string); ap_define_string_list_flag(pstate, "-S", &plist); char* argv[] = { "test-verb", "-t", "-f", "-100", "-200", "-i", "555", "-d", "4.25", "-s", "hello", "-S", strdup("a,b,c,d,e"), "do", "re", "mi", NULL }; int argc = compute_argc(argv); char* verb = argv[0]; int argi = 1; mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); mu_assert_lf(bflag1 == TRUE); mu_assert_lf(bflag2 == FALSE); mu_assert_lf(intv1 == 100); mu_assert_lf(intv2 == 200); mu_assert_lf(intv3 == 555); mu_assert_lf(dblv == 4.25); mu_assert_lf(string != NULL); mu_assert_lf(streq(string, "hello")); mu_assert_lf(plist != NULL); mu_assert_lf(slls_equals(plist, slls_from_line(strdup("a,b,c,d,e"), ',', FALSE))); mu_assert_lf(argi == 13); ap_free(pstate); return 0; }
static char * test1() { int bflag1 = -4; int bflag2 = -5; int intv1 = -6; int intv2 = -7; int intv3 = -8; double fltv = -9.5; char* string = NULL; slls_t* plist = NULL; string_array_t* parray = NULL; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-t", &bflag1); ap_define_false_flag(pstate, "-f", &bflag2); ap_define_int_value_flag(pstate, "-100", 100, &intv1); ap_define_int_value_flag(pstate, "-200", 200, &intv2); ap_define_int_flag(pstate, "-i", &intv3); ap_define_float_flag(pstate, "-d", &fltv); ap_define_string_flag(pstate, "-s", &string); ap_define_string_list_flag(pstate, "-S", &plist); ap_define_string_array_flag(pstate, "-A", &parray); char* argv[] = { "test-verb", NULL }; int argc = compute_argc(argv); char* verb = argv[0]; int argi = 1; mu_assert_lf(ap_parse(pstate, verb, &argi, argc, argv) == TRUE); mu_assert_lf(bflag1 == -4); mu_assert_lf(bflag2 == -5); mu_assert_lf(intv1 == -6); mu_assert_lf(intv2 == -7); mu_assert_lf(intv3 == -8); mu_assert_lf(fltv == -9.5); mu_assert_lf(string == NULL); mu_assert_lf(plist == NULL); mu_assert_lf(parray == NULL); mu_assert_lf(argi == 1); ap_free(pstate); return 0; }
// ---------------------------------------------------------------- static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv) { slls_t* pfield_name_list = NULL; int put_at_end = FALSE; char* verb = argv[(*pargi)++]; ap_state_t* pstate = ap_alloc(); ap_define_string_list_flag(pstate, "-f", &pfield_name_list); ap_define_true_flag(pstate, "-e", &put_at_end); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_reorder_usage(argv[0], verb); return NULL; } if (pfield_name_list == NULL) { mapper_reorder_usage(argv[0], verb); return NULL; } return mapper_reorder_alloc(pfield_name_list, put_at_end); }