示例#1
0
文件: freeze.c 项目: catseye/Kosheri
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);
}
示例#2
0
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;
}