int main(int ac, char *av[]) { backend_t *b; /* backend info */ FILE *fin, *fout; int i; char *outfile; /* platform-specific initializations, e.g., set file i/o to binary */ platform_init(); /* process options */ dopts(ac, av); b = info.backend; if (b==NULL) { fprintf(stderr, ""POTRACE": internal error: selected backend not found\n"); exit(1); } /* fix some parameters */ /* if backend cannot handle opticurve, disable it */ if (b->opticurve == 0) { info.param->opticurve = 0; } /* there are several ways to call us: potrace -- stdin to stdout potrace -o outfile -- stdin to outfile potrace file... -- encode each file and generate outfile names potrace -o outfile file... -- concatenate files and write to outfile The latter form is only allowed one file for single-page backends. For multi-page backends, each file must contain 0 or more complete bitmaps. */ if (!info.some_infiles) { /* read from stdin */ fout = my_fopen_write(info.outfile); if (!fout) { fprintf(stderr, ""POTRACE": %s: %s\n", info.outfile ? info.outfile : "stdout", strerror(errno)); exit(2); } if (b->init_f) { TRY(b->init_f(fout)); } process_file(b, "stdin", info.outfile ? info.outfile : "stdout", stdin, fout); if (b->term_f) { TRY(b->term_f(fout)); } my_fclose(fout, info.outfile); free(info.outfile); potrace_param_free(info.param); return 0; } else if (!info.outfile) { /* infiles -> multiple outfiles */ for (i=0; i<info.infilecount; i++) { outfile = make_outfilename(info.infiles[i], b->ext); if (!outfile) { fprintf(stderr, ""POTRACE": %s\n", strerror(errno)); exit(2); } fin = my_fopen_read(info.infiles[i]); if (!fin) { fprintf(stderr, ""POTRACE": %s: %s\n", info.infiles[i], strerror(errno)); exit(2); } fout = my_fopen_write(outfile); if (!fout) { fprintf(stderr, ""POTRACE": %s: %s\n", outfile, strerror(errno)); exit(2); } if (b->init_f) { TRY(b->init_f(fout)); } process_file(b, info.infiles[i], outfile, fin, fout); if (b->term_f) { TRY(b->term_f(fout)); } my_fclose(fin, info.infiles[i]); my_fclose(fout, outfile); free(outfile); } potrace_param_free(info.param); return 0; } else { /* infiles to single outfile */ if (!b->multi && info.infilecount >= 2) { fprintf(stderr, ""POTRACE": cannot use multiple input files with -o in %s mode\n", b->name); exit(1); } if (info.infilecount == 0) { fprintf(stderr, ""POTRACE": cannot use empty list of input files with -o\n"); exit(1); } fout = my_fopen_write(info.outfile); if (!fout) { fprintf(stderr, ""POTRACE": %s: %s\n", info.outfile, strerror(errno)); exit(2); } if (b->init_f) { TRY(b->init_f(fout)); } for (i=0; i<info.infilecount; i++) { fin = my_fopen_read(info.infiles[i]); if (!fin) { fprintf(stderr, ""POTRACE": %s: %s\n", info.infiles[i], strerror(errno)); exit(2); } process_file(b, info.infiles[i], info.outfile, fin, fout); my_fclose(fin, info.infiles[i]); } if (b->term_f) { TRY(b->term_f(fout)); } my_fclose(fout, info.outfile); free(info.outfile); potrace_param_free(info.param); return 0; } /* not reached */ try_error: fprintf(stderr, ""POTRACE": %s\n", strerror(errno)); exit(2); }
int main(int ac, char *av[]) { FILE *fin, *fout; int i; char *outfile; /* platform-specific initializations, e.g., set file i/o to binary */ platform_init(); /* process options */ dopts(ac, av); /* there are several ways to call us: mkbitmap -- stdin to stdout mkbitmap -o outfile -- stdin to outfile mkbitmap file... -- encode each file and generate outfile names mkbitmap file... -o outfile -- concatenate files and write to outfile */ if (info.infilecount == 0 && info.outfile == NULL) { /* stdin to stdout */ process_file(stdin, stdout, "stdin", "stdout"); return 0; } else if (info.infilecount == 0) { /* stdin to outfile */ fout = my_fopen_write(info.outfile); if (!fout) { fprintf(stderr, "mkbitmap: %s: %s\n", info.outfile, strerror(errno)); exit(2); } process_file(stdin, fout, "stdin", info.outfile); my_fclose(fout, info.outfile); free(info.outfile); return 0; } else if (info.outfile == NULL) { /* infiles -> multiple outfiles */ for (i=0; i<info.infilecount; i++) { outfile = make_outfilename(info.infiles[i], info.outext); if (!outfile) { fprintf(stderr, "mkbitmap: %s\n", strerror(errno)); exit(2); } fin = my_fopen_read(info.infiles[i]); if (!fin) { fprintf(stderr, "mkbitmap: %s: %s\n", info.infiles[i], strerror(errno)); exit(2); } fout = my_fopen_write(outfile); if (!fout) { fprintf(stderr, "mkbitmap: %s: %s\n", outfile, strerror(errno)); exit(2); } process_file(fin, fout, info.infiles[i], outfile); my_fclose(fin, info.infiles[i]); my_fclose(fout, outfile); free(outfile); } return 0; } else { /* infiles to single outfile */ fout = my_fopen_write(info.outfile); if (!fout) { fprintf(stderr, "mkbitmap: %s: %s\n", info.outfile, strerror(errno)); exit(2); } for (i=0; i<info.infilecount; i++) { fin = my_fopen_read(info.infiles[i]); if (!fin) { fprintf(stderr, "mkbitmap: %s: %s\n", info.infiles[i], strerror(errno)); exit(2); } process_file(fin, fout, info.infiles[i], info.outfile); my_fclose(fin, info.infiles[i]); } my_fclose(fout, info.outfile); free(info.outfile); return 0; } /* not reached */ }