Exemple #1
0
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
    );
  }
}
Exemple #2
0
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 );
}
Exemple #3
0
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);
    }
  }
}