void bmeps_set_cfg(BmepsConfiguration *bcp) { if(bcp) { bmeps_setup( bcp->psl, bcp->col, bcp->a85, bcp->rl, bcp->fl, bcp->alpha, bcp->trans, bcp->altrig, bcp->mix, bcp->specbg, bcp->bg_red, bcp->bg_green, bcp->bg_blue, bcp->dsc_show ); } }
int main(int argc, char *argv[]) { int i; int exval = 0; int pslevel; int colored; int enc_a85; int enc_rl; int enc_fl; int is_draft; int bbonly; int show_usage; int show_version; int alpha; int trans; int altrig; int mix; int specbg; int bg_red; int bg_green; int bg_blue; int show_dsc; char *inname; char *outname; char *ptr, **lfdptr; /* Configure from environment */ bmeps_configure(); /* Retrieve defaults */ pslevel = bmeps_get_pslevel(); colored = bmeps_get_colored(); enc_a85 = bmeps_get_enc_a85(); enc_rl = bmeps_get_enc_rl(); enc_fl = bmeps_get_enc_fl(); is_draft = bmeps_get_draft(); alpha = bmeps_get_alpha(); trans = bmeps_get_trans(); altrig = bmeps_get_altrig(); mix = bmeps_get_mix(); specbg = bmeps_get_specbg(); show_dsc = bmeps_get_dsc_comm(); bg_red = bmeps_get_bg_red(); bg_green = bmeps_get_bg_green(); bg_blue = bmeps_get_bg_blue(); bbonly = 0; show_version = show_usage = 0; inname = outname = NULL; /* Process options */ if(argc > 1) { i = 1; lfdptr = argv; lfdptr++; while(i < argc) { ptr = *lfdptr; if(*ptr == '-') { ptr++; switch(*ptr) { case 'p': { ptr++; if(!(*ptr)) { lfdptr++; i++; if(i < argc) { ptr = *lfdptr; } } if(*ptr) { switch(*ptr) { case '1': pslevel = 1; break; case '2': pslevel = 2; break; case '3': pslevel = 3; break; } } } break; case 'c': { colored = 1; } break; case 'g': { colored = 0; } break; case 'a': { alpha = 1; ptr++; if(!(*ptr)) { lfdptr++; i++; if(i < argc) { ptr = *lfdptr; } } if(*ptr) { int digit, digstate; digit = digstate = trans = altrig = 0; while(*ptr) { switch(*ptr) { case 't' : trans = 1; break; case 'o' : trans = 0; break; case 'l' : altrig = 1; break; case 'm' : mix = 1; break; case 's' : specbg = 1; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { digit = digit_for_char(*ptr); if(digstate == 0) { bg_red = bg_green = bg_blue = 0; digstate = 1; } switch(digstate) { case 1: bg_red = 10 * bg_red + digit; break; case 2: bg_green = 10 * bg_green + digit; break; case 3: bg_blue = 10 * bg_blue + digit; break; } } break; case ',' : { if(digstate == 0) { bg_red = bg_green = bg_blue = 0; } digstate += 1; } break; } ptr++; } } } break; case 'm' : { mix = 1; ptr++; if(!(*ptr)) { lfdptr++; i++; if(i < argc) { ptr = *lfdptr; } } if(*ptr) { int digit, digstate; digit = digstate = trans = altrig = 0; while(*ptr) { switch(*ptr) { case 't' : trans = 1; break; case 'o' : trans = 0; break; case 'l' : altrig = 1; break; case 's' : specbg = 1; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { digit = digit_for_char(*ptr); if(digstate == 0) { bg_red = bg_green = bg_blue = 0; digstate = 1; } switch(digstate) { case 1: bg_red = 10 * bg_red + digit; break; case 2: bg_green = 10 * bg_green + digit; break; case 3: bg_blue = 10 * bg_blue + digit; break; } } break; case ',' : { if(digstate == 0) { bg_red = bg_green = bg_blue = 0; } digstate += 1; } break; } ptr++; } } } break; case 'e': { ptr++; if(!(*ptr)) { lfdptr++; i++; if(i < argc) { ptr = *lfdptr; } } if(*ptr) { enc_a85 = enc_fl = enc_rl = 0; while(*ptr) { switch(*ptr) { case '8': enc_a85 = 1; break; case 'f': enc_fl = 1; break; case 'r': enc_rl = 1; break; } ptr++; } } } break; case 'v': { show_version = 1; } break; case 'h': { show_usage = 1; } break; case 's': { show_dsc = 1; } break; case 'd': { is_draft = 1; } break; case 'b': { bbonly = 1; } break; case 't': { ptr++; if(!(*ptr)) { lfdptr++; i++; if(i < argc) { ptr = *lfdptr; } } if(*ptr) { if(strcmp(ptr, "bmp") == 0) { dummy_filename = dummy_bmp; } #if HAVE_PNG_H if(strcmp(ptr, "png") == 0) { dummy_filename = dummy_png; } #endif #if HAVE_JPEGLIB_H if(strcmp(ptr, "jpg") == 0) { dummy_filename = dummy_jpg; } if(strcmp(ptr, "jpeg") == 0) { dummy_filename = dummy_jpg; } #endif #if HAVE_PNM_H if(strcmp(ptr, "pnm") == 0) { dummy_filename = dummy_pnm; } #endif #if HAVE_TIFF_H if(strcmp(ptr, "tif") == 0) { dummy_filename = dummy_tif; } if(strcmp(ptr, "tiff") == 0) { dummy_filename = dummy_tif; } #endif } } break; case '-': { /* Long option */ size_t lgt, lgt1; int done; char str_version[] = { "version" }; char str_help[] = { "help" }; char str_pslevel[] = { "pslevel=" }; char str_colored[] = { "color" }; char str_grayscale[] = { "grayscale" }; char str_encoding[] = { "encoding=" }; char str_draft[] = { "draft" }; char str_bb[] = { "boundingbox" }; char str_ft[] = { "filetype=" }; char str_alpho[] = { "alpha=" }; char str_alpha[] = { "alpha" }; ptr++; done = 0; lgt = strlen(ptr); lgt1 = strlen(str_version); if(lgt >= lgt1) { if(strncmp(ptr, str_version, lgt1) == 0) { done = 1; show_version = 1; } } if(!done) { lgt1 = strlen(str_alpho); if(lgt >= lgt1) { if(strncmp(ptr, str_alpho, lgt1) == 0) { alpha = done = 1; ptr = &(ptr[lgt1]); while(*ptr) { switch(*ptr) { case 'o': trans = 0 ; break; case 't': trans = 1 ; break; case 'l': altrig = 1; break; } ptr++; } } } } if(!done) { lgt1 = strlen(str_alpha); if(lgt >= lgt1) { if(strncmp(ptr, str_alpho, lgt1) == 0) { alpha = 1; done = 1; } } } if(!done) { lgt1 = strlen(str_help); if(lgt >= lgt1) { if(strncmp(ptr, str_help, lgt1) == 0) { done = 1; show_usage = 1; } } } if(!done) { lgt1 = strlen(str_pslevel); if(lgt >= lgt1) { if(strncmp(ptr, str_help, lgt1) == 0) { ptr = &(ptr[lgt1]); done = 1; switch(*ptr) { case '1': pslevel = 1; break; case '2': pslevel = 2; break; case '3': pslevel = 3; break; } } } } if(!done) { lgt1 = strlen(str_colored); if(lgt >= lgt1) { if(strncmp(ptr, str_colored, lgt1) == 0) { done = 1; colored = 1; } } } if(!done) { lgt1 = strlen(str_grayscale); if(lgt >= lgt1) { if(strncmp(ptr, str_grayscale, lgt1) == 0) { done = 1; colored = 0; } } } if(!done) { lgt1 = strlen(str_encoding); if(lgt >= lgt1) { if(strncmp(ptr, str_encoding, lgt1) == 0) { done = 1; ptr = &(ptr[lgt1]); enc_a85 = enc_fl = enc_rl = 0; while(*ptr) { switch(*ptr) { case '8': enc_a85 = 1 ; break; case 'r': enc_rl = 1 ; break; case 'f': enc_fl = 1 ; break; } ptr++; } } } } if(!done) { lgt1 = strlen(str_draft); if(lgt >= lgt1) { if(strncmp(ptr, str_draft, lgt1) == 0) { done = is_draft = 1; } } } if(!done) { lgt1 = strlen(str_bb); if(lgt >= lgt1) { if(strncmp(ptr, str_bb, lgt1) == 0) { done = bbonly = 1; } } } if(!done) { lgt1 = strlen(str_ft); if(lgt >= lgt1) { if(strncmp(ptr, str_ft, lgt1) == 0) { done = 1; ptr = &(ptr[lgt1]); #if HAVE_PNG_H if(strcmp(ptr, "png") == 0) { dummy_filename = dummy_png; } #endif #if HAVE_JPEGLIB_H if(strcmp(ptr, "jpg") == 0) { dummy_filename = dummy_jpg; } if(strcmp(ptr, "jpeg") == 0) { dummy_filename = dummy_jpg; } #endif } } } } break; } } else { if(inname) { if(!outname) { outname = ptr; } else { show_usage = 1; } } else { inname = ptr; } } lfdptr++; i++; } } /* Configure bmeps module */ bmeps_setup( pslevel, colored, enc_a85, enc_rl, enc_fl, alpha, trans, altrig, mix, specbg, bg_red, bg_green, bg_blue, show_dsc ); bmeps_set_draft(is_draft); /* Start work */ if(show_version || show_usage) { if(show_version) { print_version(); } if(show_usage) { print_usage(); } } else { if(inname) { FILE *infile; infile = fopen(inname, "rb"); if(infile) { if(outname) { FILE *outfile; outfile = fopen(outname, "w"); if(outfile) { if(bbonly) { exval = bmeps_run_bb(outfile, infile, inname); } else { exval = bmeps_run(outfile, infile, inname); } fclose(outfile); } else { fprintf(stderr, "%s ERROR - Failed to write to file %s\n", progname, outname ); } } else { if(bbonly) { exval = bmeps_run_bb(stdout, infile, inname); } else { exval = bmeps_run(stdout, infile, inname); } } fclose(infile); } else { fprintf(stderr, "%s ERROR - Failed to read from file %s\n", progname, inname ); } } else { if(dummy_filename) { #if !defined( __UNIX__ ) int m, f, r; m = f = 0; /* Get the file descriptor number */ f = fileno(stdin); /* Set the mode type. */ m = O_BINARY; /* Change mode type for file descriptor. */ r = setmode(f,m); if(r == -1) { fprintf(stderr, "setmode(): Failed to establish binary mode for stdin!\n"); } #if DEBUG else { fprintf(stderr, "setmode(): Binary mode established.\n"); } #endif #endif /* Now the descriptor is set up if necessary. */ if(bbonly) { exval = bmeps_run_bb(stdout, stdin, dummy_filename); } else { exval = bmeps_run(stdout, stdin, dummy_filename); } } else { fprintf(stderr, "%s ERROR - Need a file type when processing standard input\n", progname ); } } } /* Exit program */ exval = (exval ? 0 : 1); return( exval ); }
void bmeps_configure(void) { char *ptr; if(!is_configured) { is_configured = 1; ptr = options; if(!ptr) { ptr = getenv("EPSOUTPUT"); } if(ptr) { int psl; int col; int a85; int rl; int fl; int dr; int f; int alpha; int trans; int altrig; int mix; int specbg; int bg_red; int bg_green; int bg_blue; int digit; int digstate; int dsc_show; digstate = 0; dsc_show = show_dsc_comments; bg_red = bmeps_bg_red; bg_green = bmeps_bg_green; bg_blue = bmeps_bg_blue; specbg = bmeps_specbg; mix = bmeps_mix; psl = bmeps_pslevel; col = bmeps_color; a85 = bmeps_enc_a85; rl = bmeps_enc_rl; fl = bmeps_enc_fl; dr = bmeps_is_draft; alpha = bmeps_alpha; trans = bmeps_trans; altrig = bmeps_altrig; f = 1; while(*ptr) { switch(*ptr) { case 'x' : dsc_show = 1; break; case 'c' : col = 1; break; case 'g' : col = 0; break; case 'r' : if(f) { f = a85 = fl = rl = 0; } rl = 1; break; case 'f' : if(f) { f = a85 = fl = rl = 0; } fl = 1; break; case 'd' : dr = 1; break; case 'p' : dr = 0; break; case 'a' : { alpha = 1; } break; case 'b' : alpha = 0; break; case 't' : trans = 1; break; case 'o' : trans = 0; break; case 'l' : altrig = 1; break; case 'm' : mix = 1; break; case 's' : specbg = 1; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { digit = digit_for_char(*ptr); switch(digstate) { case 0: { if(alpha || mix) { bg_green = bg_blue = 0; digstate = 1; bg_red = digit; } else { if((digit >= 1) && (digit <=3)) { psl = digit; } if(digit == 8) { if(f) { f = a85 = fl = rl = 0; } a85 = 1; } } } break; case 1: bg_red = 10 * bg_red + digit; break; case 2: bg_green = 10 * bg_green + digit; break; case 3: bg_blue = 10 * bg_blue + digit; break; } } break; case ',' : { if(digstate == 0) { bg_red = bg_green = bg_blue = 0; } digstate += 1; } break; } ptr++; } bmeps_setup( psl,col,a85,rl,fl, alpha,trans,altrig,mix,specbg,bg_red,bg_green,bg_blue,dsc_show ); bmeps_set_draft(dr); } } }