static void freeze_main(struct value *args, struct value *result) { struct process *p; struct scanner *sc; struct reporter *r; struct value term; struct value *termfile, *binfile; struct value termfile_sym, binfile_sym; value_symbol_new(&termfile_sym, "termfile", 8); value_symbol_new(&binfile_sym, "binfile", 7); termfile = value_dict_fetch(args, &termfile_sym); binfile = value_dict_fetch(args, &binfile_sym); r = reporter_new("Freezing", NULL, 1); /* * Parse. */ sc = scanner_new(r); if (!scanner_open(sc, value_symbol_get_token(termfile))) { value_integer_set(result, 1); return; } if (!value_discern(&term, sc)) { report(r, REPORT_ERROR, "Could not parse input term"); } /* * Write out. */ p = file_open(value_symbol_get_token(binfile), "w"); if (!value_save(p, &term)) { report(r, REPORT_ERROR, "Could not write term to '%s'", binfile); } stream_close(NULL, p); /* * Finish up. */ scanner_close(sc); scanner_free(sc); value_integer_set(result, reporter_has_errors(r) ? 1 : 0); reporter_free(r); }
int main (int argc, char **argv) { char *arg; program_init (argc, argv); arg = program_poparg (); if (arg == NULL) filter_lines (scanner_new (STDIN_FILENO)); while (arg) { if (filter_lines (scanner_open (arg)) != 0) error ("failed to open '%s'", arg); arg = program_poparg (); } return 0; }