home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Tools / ean2real / ean2real.c next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  4.0 KB  |  233 lines

  1. /* ean2real.c: convert ean funny representation to real P1 */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Tools/ean2real/RCS/ean2real.c,v 6.0 1991/12/18 20:30:18 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Tools/ean2real/RCS/ean2real.c,v 6.0 1991/12/18 20:30:18 jpo Rel $
  9.  *
  10.  * $Log: ean2real.c,v $
  11.  * Revision 6.0  1991/12/18  20:30:18  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "util.h"
  19. #include <varargs.h>
  20. void advise();
  21.  
  22.  
  23.  
  24.  
  25. /* ---------------------  Begin  Routines  -------------------------------- */
  26. char    *myname;
  27. int    process ();
  28. int    skiphdr = 0;
  29.  
  30. main (argc, argv, envp)
  31. int     argc;
  32. char  **argv,
  33.       **envp;
  34. {
  35.     extern char    *optarg;
  36.     extern int    optind;
  37.     int    opt;
  38.     register char  *cp;
  39.     register    FILE * fp;
  40.     int         status = 0;
  41.  
  42.     myname = argv[0];
  43.     while((opt = getopt(argc, argv, "ils")) != EOF)
  44.     switch (opt) {
  45.     case 'i':
  46.         ps_len_strategy = PS_LEN_INDF;
  47.         break;
  48.     case 'l':
  49.         ps_len_strategy = PS_LEN_LONG;
  50.         break;
  51.     case 's':
  52.         skiphdr = 1;
  53.         break;
  54.     default:
  55.         fprintf (stderr, "Usage: %s [-s] [file...]", myname);
  56.         break;
  57.     }
  58.     argc -= optind;
  59.     argv += optind;
  60.  
  61.     if (argc == 0)
  62.     status = process ("(stdin)", stdin);
  63.     else
  64.     while (cp = *argv++) {
  65.         if ((fp = fopen (cp, "r")) == NULL) {
  66.         advise (cp, "unable to read");
  67.         status++;
  68.         continue;
  69.         }
  70.         status += process (cp, fp);
  71.         (void) fclose (fp);
  72.     }
  73.  
  74.     exit (status);
  75. }
  76.  
  77.  
  78.  
  79. /* ---------------------  Static  Routines  ------------------------------- */
  80.  
  81.  
  82.  
  83. static int  process (file, fp)
  84. register char *file;
  85. register FILE *fp;
  86. {
  87.     register PE     pe, pe2;
  88.     register PS     ps;
  89.  
  90.     if (skiphdr) {
  91.     int i;
  92.     for (i = 0; i < 12; i++)
  93.         (void) getc (fp);    /* remove junk */
  94.     }
  95.  
  96.  
  97.     if ((ps = ps_alloc (std_open)) == NULLPS) {
  98.     advise ("process", "ps_alloc");
  99.     return 1;
  100.     }
  101.     if (std_setup (ps, fp) == NOTOK) {
  102.     advise (NULLCP, "%s: std_setup loses", file);
  103.     return 1;
  104.     }
  105.  
  106.     if ((pe = ps2pe (ps)) == NULLPE) {
  107.     if (ps -> ps_errno) 
  108.         advise (NULLCP, "ps2pe: %s", ps_error(ps -> ps_errno));
  109.     ps_free (ps);
  110.     return 1;
  111.     }
  112.     pe = prim2seq (pe);
  113.     if ((pe2 = ps2pe(ps)) == NULLPE) {
  114.     if (ps -> ps_errno)
  115.         advise (NULLCP, "ps2pe: %s", ps_error(ps -> ps_errno));
  116.     ps_free (ps);
  117.     return 1;
  118.     }
  119.     ps_free (ps);
  120.  
  121.     if ((ps = ps_alloc(str_open)) == NULLPS) {
  122.     advise ("process", "ps_alloc");
  123.     return 1;
  124.     }
  125.     if (str_setup (ps, NULLCP, 0, 0) == NOTOK) {
  126.     advise (NULLCP, "str_setup loses");
  127.     return 1;
  128.     }
  129.     if (pe2ps (ps, pe2) == NOTOK) {
  130.     if (ps -> ps_errno)
  131.         advise (NULLCP, "ps2pe: %s", ps_error(ps -> ps_errno));
  132.     ps_free (ps);
  133.     return 1;
  134.     }
  135.     pe_free (pe2);
  136.     if((pe2 = oct2prim (ps -> ps_base, ps -> ps_ptr - ps -> ps_base)) == NULLPE ||
  137.        seq_add (pe, pe2, NOTOK) == NOTOK) {
  138.     advise (NULLCP, "Can't build new pe");
  139.     return 1;
  140.     }
  141.  
  142.     ps_free (ps);
  143.     if ((ps = ps_alloc (std_open)) == NULLPS) {
  144.     advise ("process", "ps_alloc");
  145.     return 1;
  146.     }
  147.     if (std_setup (ps, stdout) == NOTOK) {
  148.     advise (NULLCP, "%s: std_setup loses", file);
  149.     return 1;
  150.     }
  151.  
  152.     (void) ps_get_abs (pe);
  153.     if (pe2ps (ps, pe) == NOTOK) {
  154.     if (ps -> ps_errno)
  155.         advise (NULLCP, "ps2pe: %s", ps_error(ps -> ps_errno));
  156.     ps_free (ps);
  157.     return 1;
  158.     }
  159.     ps_free (ps);
  160.     pe_free (pe);
  161.     return 0;
  162. }
  163.  
  164. #ifndef    lint
  165. void    _advise ();
  166.  
  167.  
  168. void    adios (va_alist)
  169. va_dcl
  170. {
  171.     va_list ap;
  172.  
  173.     va_start (ap);
  174.  
  175.     _advise (ap);
  176.  
  177.     va_end (ap);
  178.  
  179.     _exit (1);
  180. }
  181. #else
  182. /* VARARGS */
  183.  
  184. void    adios (what, fmt)
  185. char   *what,
  186.        *fmt;
  187. {
  188.     adios (what, fmt);
  189. }
  190. #endif
  191.  
  192.  
  193. #ifndef    lint
  194. void    advise (va_alist)
  195. va_dcl
  196. {
  197.     va_list ap;
  198.  
  199.     va_start (ap);
  200.  
  201.     _advise (ap);
  202.  
  203.     va_end (ap);
  204. }
  205.  
  206.  
  207. static void  _advise (ap)
  208. va_list    ap;
  209. {
  210.     char    buffer[BUFSIZ];
  211.  
  212.     asprintf (buffer, ap);
  213.  
  214.     (void) fflush (stdout);
  215.  
  216.     fprintf (stderr, "%s: ", myname);
  217.     (void) fputs (buffer, stderr);
  218.     (void) fputc ('\n', stderr);
  219.  
  220.     (void) fflush (stderr);
  221. }
  222. #else
  223. /* VARARGS */
  224.  
  225. void    advise (what, fmt)
  226. char   *what,
  227.        *fmt;
  228. {
  229.     advise (what, fmt);
  230. }
  231. #endif
  232.  
  233.