int em_parse_error(int err, struct bstr *args, struct bstr *carg, struct ematch_util *e, char *fmt, ...) { va_list a; va_start(a, fmt); vfprintf(stderr, fmt, a); va_end(a); if (ematch_err) fprintf(stderr, ": %s\n... ", ematch_err); else fprintf(stderr, "\n... "); while (ematch_argc < begin_argc) { if (ematch_argc == (begin_argc - 1)) fprintf(stderr, ">>%s<< ", *begin_argv); else fprintf(stderr, "%s ", *begin_argv); begin_argv++; begin_argc--; } fprintf(stderr, "...\n"); if (args) { fprintf(stderr, "... %s(", e->kind); while (args) { fprintf(stderr, "%s", args == carg ? ">>" : ""); bstr_print(stderr, args, 1); fprintf(stderr, "%s%s", args == carg ? "<<" : "", args->next ? " " : ""); args = args->next; } fprintf(stderr, ")...\n"); } if (e == NULL) { fprintf(stderr, "Usage: EXPR\n" \ "where: EXPR := TERM [ { and | or } EXPR ]\n" \ " TERM := [ not ] { MATCH | '(' EXPR ')' }\n" \ " MATCH := module '(' ARGS ')'\n" \ " ARGS := ARG1 ARG2 ...\n" \ "\n" \ "Example: a(x y) and not (b(x) or c(x y z))\n"); } else e->print_usage(stderr); return -err; }
/* * Print the info contained within the given partition block */ static void print_part_info(struct partition_block *p) { struct amiga_part_geometry *g; g = (struct amiga_part_geometry *)&(p->environment); bstr_print(p->drive_name); printf("%6d\t%6d\t", g->low_cyl * g->block_per_track * g->surfaces , (g->high_cyl - g->low_cyl + 1) * g->block_per_track * g->surfaces - 1); print_disk_type(g->dos_type); printf("\t%5d\n", g->boot_priority); }