/** * dict_display_word_info() - display the information about the given word. */ void dict_display_word_info(Dictionary dict, const char * s) { Dict_node *dn, *dn_head; Disjunct * d1, * d2; int len; dn_head = dictionary_lookup_list(dict, s); if (dn_head == NULL) { printf(" \"%s\" matches nothing in the dictionary.\n", s); return; } printf("Matches:\n"); for (dn = dn_head; dn != NULL; dn = dn->right) { len = 0; d1 = build_disjuncts_for_dict_node(dn); for(d2 = d1 ; d2 != NULL; d2 = d2->next) { len++; } free_disjuncts(d1); printf(" "); left_print_string(stdout, dn->string, " "); printf(" %5d disjuncts ", len); if (dn->file != NULL) { printf("<%s>", dn->file->file); } printf("\n"); } free_lookup_list(dn_head); return; }
void resources_print_total_space(int verbosity, Resources r) { if (verbosity > 1) { printf("++++"); left_print_string(stdout, "Total space", " "); printf("%d bytes (%d max)\n", space_in_use, max_space_in_use); } }
void resources_print_time(int verbosity, Resources r, char * s) { /* print out the cpu ticks since this was last called */ double new_t; new_t = current_usage_time(); if (verbosity > 1) { printf("++++"); left_print_string(stdout, s, " "); printf("%7.2f seconds\n", new_t - r->when_last_called); } r->when_last_called = new_t; }
/** print out the cpu ticks since this was last called */ void resources_print_time(int verbosity, Resources r, const char * s) { double new_t; new_t = current_usage_time(); if (verbosity > 1) { printf("++++"); left_print_string(stdout, s, " "); printf("%7.2f seconds\n", new_t - r->when_last_called); } r->when_last_called = new_t; }
void resources_print_total_time(int verbosity, Resources r) { /* print out the cpu ticks since this was last called */ double new_t; new_t = current_usage_time(); r->cumulative_time += (new_t - r->time_when_parse_started) ; if (verbosity > 0) { printf("++++"); left_print_string(stdout, "Time", " "); printf("%7.2f seconds (%.2f total)\n", new_t - r->time_when_parse_started, r->cumulative_time); } r->time_when_parse_started = new_t; }
/** * dict_display_word_expr() - display the connector info for a given word. */ void dict_display_word_expr(Dictionary dict, const char * s) { Dict_node *dn, *dn_head; dn_head = dictionary_lookup_list(dict, s); if (dn_head == NULL) { printf(" \"%s\" matches nothing in the dictionary.\n", s); return; } printf("\nExpressions:\n"); for (dn = dn_head; dn != NULL; dn = dn->right) { printf(" "); left_print_string(stdout, dn->string, " "); print_expression(dn->exp); printf("\n\n"); } free_lookup_list(dn_head); return; }
static int x_issue_special_command(const char * line, Command_Options *copts, Dictionary dict) { char *s, myline[1000], *x, *y; int i, count, j, k; Switch * as = default_switches; Parse_Options opts = copts->popts; strncpy(myline, line, sizeof(myline)); myline[sizeof(myline)-1] = '\0'; clean_up_string(myline); s = myline; j = k = -1; count = 0; /* Look for boolean flippers */ for (i=0; as[i].string != NULL; i++) { if ((Bool == as[i].param_type) && strncasecmp(s, as[i].string, strlen(s)) == 0) { count++; j = i; } } /* Look for abbreviations */ for (i=0; user_command[i].s != NULL; i++) { if (strncasecmp(s, user_command[i].s, strlen(s)) == 0) { count++; k = i; } } if (count > 1) { printf("Ambiguous command. Type \"!help\" or \"!variables\"\n"); return -1; } else if (count == 1) { /* flip boolean value */ if (j >= 0) { setival(as[j], (0 == ival(as[j]))); printf("%s turned %s.\n", as[j].description, (ival(as[j]))? "on" : "off"); return 0; } else { /* Found an abbreviated command, but it wasn't a boolean */ /* Replace the abbreviated command by the full one */ /* Basically, this just fixes !v and !h for use below. */ strcpy(s, user_command[k].s); } } if (strcmp(s, "variables") == 0) { printf(" Variable Controls Value\n"); printf(" -------- -------- -----\n"); for (i = 0; as[i].string != NULL; i++) { printf(" "); left_print_string(stdout, as[i].string, " "); left_print_string(stdout, as[i].description, " "); if (Float == as[i].param_type) { /* Float point print! */ printf("%5.2f", *((double *)as[i].ptr)); } else if ((Bool == as[i].param_type) || Int == as[i].param_type) { printf("%5d", ival(as[i])); } else if (String == as[i].param_type) { printf("%s", *(char **)as[i].ptr); } if (Bool == as[i].param_type) { if (ival(as[i])) printf(" (On)"); else printf(" (Off)"); } printf("\n"); } printf("\n"); printf("Toggle a boolean variable as in \"!batch\"; "); printf("set a variable as in \"!width=100\".\n"); return 0; } if (strcmp(s, "help") == 0) { printf("Special commands always begin with \"!\". Command and variable names\n"); printf("can be abbreviated. Here is a list of the commands:\n\n"); for (i=0; user_command[i].s != NULL; i++) { printf(" !"); left_print_string(stdout, user_command[i].s, " "); left_print_string(stdout, user_command[i].str, " "); printf("\n"); } printf(" !!<string> Print all the dictionary words that matches <string>.\n"); printf(" A wildcard * may be used to find multiple matches.\n"); printf("\n"); printf(" !<var> Toggle the specified boolean variable.\n"); printf(" !<var>=<val> Assign that value to that variable.\n"); return 0; } if (s[0] == '!') { dict_display_word_info(dict, s+1, opts); dict_display_word_expr(dict, s+1, opts); return 0; } #ifdef USE_REGEX_TOKENIZER if (s[0] == '/') { int rc = regex_tokenizer_test(dict, s+1); if (0 != rc) printf("regex_tokenizer_test: rc %d\n", rc); return 0; } #endif /* Test here for an equation i.e. does the command line hold an equals sign? */ for (x=s; (*x != '=') && (*x != '\0') ; x++) ; if (*x == '=') { *x = '\0'; y = x+1; x = s; /* now x is the first word and y is the rest */ /* Figure out which command it is .. it'll be the j'th one */ j = -1; for (i=0; as[i].string != NULL; i++) { if (strncasecmp(x, as[i].string, strlen(x)) == 0) { j = i; count ++; } } if (j<0) { printf("There is no user variable called \"%s\".\n", x); return -1; } if (count > 1) { printf("Ambiguous variable. Type \"!help\" or \"!variables\"\n"); return -1; } if ((as[j].param_type == Int) || (as[j].param_type == Bool)) { int val = -1; if (is_numerical_rhs(y)) val = atoi(y); if ((0 == strcasecmp(y, "true")) || (0 == strcasecmp(y, "t"))) val = 1; if ((0 == strcasecmp(y, "false")) || (0 == strcasecmp(y, "f"))) val = 0; if (val < 0) { printf("Invalid value %s for variable %s Type \"!help\" or \"!variables\"\n", y, as[j].string); return -1; } setival(as[j], val); printf("%s set to %d\n", as[j].string, val); return 0; } else if (as[j].param_type == Float) { double val = -1.0; val = atof(y); if (val < 0.0) { printf("Invalid value %s for variable %s Type \"!help\" or \"!variables\"\n", y, as[j].string); return -1; } *((double *) as[j].ptr) = val; printf("%s set to %5.2f\n", as[j].string, val); return 0; } else if (as[j].param_type == String) { *((char **) as[j].ptr) = y; printf("%s set to %s\n", (char *)as[j].string, y); return 0; } else { printf("Internal error: Unknown variable type %d\n", as[j].param_type); return -1; } } /* Look for valid commands, but ones that needed an argument */ j = -1; count = 0; for (i = 0; as[i].string != NULL; i++) { if ((Bool != as[i].param_type) && strncasecmp(s, as[i].string, strlen(s)) == 0) { j = i; count++; } } if (0 < count) { printf("Variable \"%s\" requires a value. Try \"!help\".\n", as[j].string); return -1; } printf("I can't interpret \"%s\" as a command. Try \"!help\".\n", myline); return -1; }
void x_issue_special_command(char * line, Parse_Options opts, Dictionary dict) { char *s, myline[1000], *x, *y; int i, count, j, k; Switch * as = default_switches; strncpy(myline, line, sizeof(myline)); myline[sizeof(myline)-1] = '\0'; clean_up_string(myline); s = myline; j = k = -1; count = 0; for (i=0; as[i].string != NULL; i++) { if (as[i].isboolean && strncasecmp(s, as[i].string, strlen(s)) == 0) { count++; j = i; } } for (i=0; user_command[i].s != NULL; i++) { if (strncasecmp(s, user_command[i].s, strlen(s)) == 0) { count++; k = i; } } if (count > 1) { printf("Ambiguous command. Type \"!help\" or \"!variables\"\n"); return; } else if (count == 1) { if (j >= 0) { *as[j].p = !(*as[j].p); printf("%s turned %s.\n", as[j].description, (*as[j].p)? "on" : "off"); return; } else { /* replace the abbreviated command by the full one */ strcpy(s, user_command[k].s); } } if (strcmp(s, "variables")==0) { printf(" Variable Controls Feature_value\n"); printf(" -------- -------- -----\n"); for (i=0; as[i].string != NULL; i++) { printf(" "); left_print_string(stdout, as[i].string, " "); left_print_string(stdout, as[i].description, " "); printf("%5d", *as[i].p); if (as[i].isboolean) { if (*as[i].p) printf(" (On)"); else printf(" (Off)"); } printf("\n"); } printf("\n"); printf("Toggle a boolean variable as in \"!batch\"; "); printf("set a variable as in \"!width=100\".\n"); return; } if (strcmp(s, "help")==0) { printf("Special commands always begin with \"!\". Command and variable names\n"); printf("can be abbreviated. Here is a list of the commands:\n\n"); for (i=0; user_command[i].s != NULL; i++) { printf(" !"); left_print_string(stdout, user_command[i].s, " "); left_print_string(stdout, user_command[i].str, " "); printf("\n"); } printf(" !!<string> Print all the dictionary words matching <string>.\n"); printf(" Also print the number of disjuncts of each.\n"); printf("\n"); printf(" !<var> Toggle the specified boolean variable.\n"); printf(" !<var>=<val> Assign that value to that variable.\n"); return; } if(s[0] == '!') { dict_display_word_info(dict, s+1); return; } /* test here for an equation */ for (x=s; (*x != '=') && (*x != '\0') ; x++) ; if (*x == '=') { *x = '\0'; y = x+1; x = s; /* now x is the first word and y is the rest */ if (is_numerical_rhs(y)) { for (i=0; as[i].string != NULL; i++) { if (strcmp(x, as[i].string) == 0) break; } if (as[i].string == NULL) { printf("There is no user variable called \"%s\".\n", x); } else { *(as[i].p) = atoi(y); printf("%s set to %d\n", x, atoi(y)); } return; } } printf("I can't interpret \"%s\" as a command. Try \"!help\".\n", myline); }