home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / driver / print / amiga / PrintOpt.c < prev    next >
C/C++ Source or Header  |  1995-03-15  |  13KB  |  392 lines

  1. /*
  2. **    This file generated by localize 2.9 (AmigaDOS 2.1) from PrintOpt.c
  3. */
  4. /* externally define -dTEST to compile a standalone version    */
  5. /* otherwise, link to DVIprint                    */
  6.  
  7. #ifdef TEST
  8. #define MAIN
  9. #endif
  10.  
  11. #define TEX
  12.  
  13. #include "defines.h"
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <stddef.h>
  18. #include <string.h>
  19. #include <dos.h>
  20.  
  21. #include "globals.h"
  22. #ifdef TEST
  23. #include <clib/dos_protos.h>
  24. #include <pragmas/dos_pragmas.h>
  25. extern struct DosLibrary    *DOSBase;
  26. #endif
  27.  
  28.  
  29. #include "muiprint.h"
  30. #include "GetOpt.h"
  31. #include "GetOpt.i"
  32. #include "globals.i"
  33. #include "PrintOpt.i"
  34. #ifndef TEST
  35. #include "prhelp.h"
  36. #include "prhelp.i"
  37. #endif
  38.  
  39.  
  40. /*
  41.  * Fuer die locale-Library:
  42.  *
  43.  * Hier duerfen *nur* die MSG_#? Nummern eingebunden werden!
  44.  * Achtung:
  45.  * Es muss/sollte 'multiple-include' erlaubt sein!
  46.  */
  47. #include "local.i"
  48.  
  49. #undef  CATCOMP_ARRAY
  50. #undef  CATCOMP_BLOCK
  51. #undef  CATCOMP_STRINGS
  52. #define CATCOMP_NUMBERS
  53. #include "localstr.h"
  54.  
  55.  
  56.  
  57. #ifdef TEST
  58. extern char *_ProgramName;
  59. #endif /* TEST */
  60.  
  61.  
  62. static void PrintHelp(struct Options opt[], short long_hlp);
  63.  
  64. static long help        = FALSE;
  65. static long o_nlogging        = FALSE;
  66. static long odd            = FALSE;
  67. static long even        = FALSE;
  68. static char *resolution_str = NULL;
  69. static char *filenameptr    = NULL;
  70. static long skip_formfeed   = FALSE;
  71. static char *g_paper        = NULL;
  72.  
  73.  
  74. START_PARAM(opt)
  75.   /* req?      key-name     abbrev  type         variable       help-txt */
  76.   NOREQ_PARAM ("HELP",        "?",  OPT_HELP,    &help,            MSG_OPTIONS_HELP, 0)
  77.   NOREQ_PARAM ("GUI",         NULL, OPT_BOOLEAN, &usegui,           MSG_OPTIONS_GUI, 0)
  78.   NOREQ_PARAM ("FONTDir",     "-a", OPT_STRING,  &PXLpath,        MSG_OPTIONS_FONTDIR, 0)
  79.   NOREQ_PARAM ("FONTMem",     "-b", OPT_LONG,    &fontmemsize,        MSG_OPTIONS_FONTMEM, 0)
  80.   NOREQ_PARAM ("MAXBITMem",   "-m", OPT_LONG,     &maxbitmapsize,    MSG_OPTIONS_MAXBITMEM,MSG_OPTIONS_MAXBITMEM2)
  81.   NOREQ_PARAM ("PRTBUFfer",   "-e", OPT_LONG,     &bufflen,        MSG_OPTIONS_PRTBUFFER, 0)
  82.   NOREQ_PARAM ("From",        "-f", OPT_LONG,    &FirstPage,        MSG_OPTIONS_FROM, 0)
  83.   NOREQ_PARAM ("To",          "-t", OPT_LONG,    &LastPage,        MSG_OPTIONS_TO, 0)
  84.   NOREQ_PARAM ("Number",      "-n", OPT_LONG,     &NrOfPagesToPrint, MSG_OPTIONS_NUMBER, 0)
  85.   NOREQ_PARAM ("ODD",         "-1", OPT_BOOLEAN, &odd,            MSG_OPTIONS_ODD, 0)
  86.   NOREQ_PARAM ("EVEN",        "-2", OPT_BOOLEAN, &even,              MSG_OPTIONS_EVEN, 0)
  87.   NOREQ_PARAM ("PHYsical",    "-y", OPT_BOOLEAN, &PhyPageNumbers,   MSG_OPTIONS_PHYSICAL, 0)
  88.   NOREQ_PARAM ("HOFFset",     "-h", OPT_TEX_DIM, &hoffset_in_fix,   MSG_OPTIONS_HOFFSET,MSG_OPTIONS_HVOFFSET2)
  89.   NOREQ_PARAM ("VOFFset",     "-v", OPT_TEX_DIM, &voffset_in_fix,   MSG_OPTIONS_VOFFSET,MSG_OPTIONS_HVOFFSET2)
  90.   NOREQ_PARAM ("Printer",     "-d", OPT_STRING,  &o_printer_name,   MSG_OPTIONS_PRINTER, 0)
  91.   NOREQ_PARAM ("OPTimize",    "-o", OPT_BOOLEAN, &o_optimize,        MSG_OPTIONS_OPTIMIZE,0)
  92.   NOREQ_PARAM ("DRAft",       NULL, OPT_BOOLEAN, &draft,        MSG_OPTIONS_DRAFT, 0)
  93.   NOREQ_PARAM ("DENsity",     "-O", OPT_LONG,    &o_density,        MSG_OPTIONS_DENSITY,MSG_OPTIONS_DENSITY2)
  94.   NOREQ_PARAM ("UNIdirect",   "-u", OPT_BOOLEAN, &unidirect,        MSG_OPTIONS_UNIDIRECT, 0)
  95.   NOREQ_PARAM ("COPies",      "-c", OPT_LONG,    &ncopies,          MSG_OPTIONS_COPIES, 0)
  96.   NOREQ_PARAM ("LANDscape",   "-g", OPT_BOOLEAN, &landscape,        MSG_OPTIONS_LANDSCAPE, 0)
  97.   NOREQ_PARAM ("TWOup",       NULL, OPT_BOOLEAN, &twopage,          MSG_OPTIONS_TWOPAGE, 0)
  98.   NOREQ_PARAM ("MOFFset",     NULL, OPT_TEX_DIM, &moffset_in_fix,   MSG_OPTIONS_MOFFSET,MSG_OPTIONS_HVOFFSET2)
  99.   HIDDEN_PARAM("BOOK",        NULL, OPT_BOOLEAN, &bookmode,         MSG_OPTIONS_BOOK, 0)
  100.   NOREQ_PARAM ("IFF",         "-i", OPT_BOOLEAN, &iffprint,        MSG_OPTIONS_IFF, 0)
  101.   NOREQ_PARAM ("SKIPformfeed","-x", OPT_BOOLEAN, &skip_formfeed,    MSG_OPTIONS_SKIPFORMFEED, 0)
  102.   NOREQ_PARAM ("REVerse",     "-r", OPT_BOOLEAN, &Reverse,        MSG_OPTIONS_REVERSE, 0)
  103.   NOREQ_PARAM ("RESolution",  "-z", OPT_STRING,  &resolution_str,   MSG_OPTIONS_RESOLUTION,MSG_OPTIONS_RESOLUTION2)
  104.   NOREQ_PARAM ("WIDTH",       NULL, OPT_TEX_DIM, &user_paper_width_in,  MSG_OPTIONS_WIDTH, 0)
  105.   NOREQ_PARAM ("HEIGHT",      NULL, OPT_TEX_DIM, &user_paper_height_in, MSG_OPTIONS_HEIGHT, 0)
  106.   NOREQ_PARAM ("PAPERSIZE",   NULL, OPT_STRING,  &g_paper,          MSG_OPTIONS_PAPER, MSG_OPTIONS_PAPER2)
  107.   NOREQ_PARAM ("PUBscreen",   NULL, OPT_STRING,  &ArgPubname,       MSG_OPTIONS_PUBSCREEN, 0)
  108.   NOREQ_PARAM ("PREload",     "-p", OPT_BOOLEAN, &PreLoad,        MSG_OPTIONS_PRELOAD, 0)
  109.   HIDDEN_PARAM("FAST",        "-T", OPT_BOOLEAN, &turbo_mode,        MSG_OPTIONS_FAST,MSG_OPTIONS_FAST2)
  110.   NOREQ_PARAM ("MARK",        NULL, OPT_BOOLEAN, &mark_fonts,       MSG_OPTIONS_MARK, 0)
  111.   NOREQ_PARAM ("STATistic",   "-s", OPT_BOOLEAN, &Stats,        MSG_OPTIONS_STATISTIC, 0)
  112.   HIDDEN_PARAM("DEBUGStat",   "-S", OPT_BOOLEAN, &DebugStats,        MSG_OPTIONS_DEBUGSTAT, 0)
  113.   NOREQ_PARAM ("NOLog",       "-l", OPT_BOOLEAN, &o_nlogging,        MSG_OPTIONS_NOLOG, 0)
  114.   NOREQ_PARAM ("OUTto",       "->", OPT_STRING,  &output_file_name, MSG_OPTIONS_OUTTO,MSG_OPTIONS_OUTTO2)
  115.   NOREQ_PARAM ("LOGName",     NULL, OPT_STRING,  &g_Logname,        MSG_OPTIONS_LOGNAME, 0)
  116.   NOREQ_PARAM ("SHOWPrinters",NULL, OPT_BOOLEAN, &o_showprinter,    MSG_OPTIONS_SHOWPRINTERS, 0)
  117.   NOREQ_PARAM ("ACCounting",  NULL, OPT_BOOLEAN, &do_accounting,    MSG_OPTIONS_ACCOUNTING, 0)
  118.   NOREQ_PARAM ("PRIOrity",    NULL, OPT_LONG,    &task_priority,    MSG_OPTIONS_PRIORITY, 0)
  119.   NOREQ_PARAM ("SPECIALhost", NULL, OPT_BOOLEAN, &start_specialhost,MSG_OPTIONS_SPECIALHOST, 0)
  120.   HIDDEN_PARAM("PRINTAUTHOR", NULL, OPT_BOOLEAN, &g_authors,        MSG_OPTIONS_PRINTAUTHOR, 0)
  121.   NOREQ_PARAM (NULL,          NULL, OPT_OPTIONSTRING, &filenameptr, MSG_OPTIONS_DVIFILE, 0)
  122. END_PARAM
  123.  
  124.  
  125.  
  126.  
  127. void DecodeArgs(int argc, char *argv[])
  128. {
  129.   BOOL error;
  130.   char pri;
  131.  
  132. #ifdef TEST
  133.   o_printer_name= "generic";
  134. #else /* TEST */
  135.   o_printer_name= default_printer_name;
  136. #endif /* TEST */
  137.  
  138.   /*  PXLpath = FONTAREA;  */        /* default font area    */
  139.   hoffset_in_fix  = HOFFSET_IN;        /* inch */
  140.   hoffset_is_true = TRUE;        /* true inch? */
  141.   voffset_in_fix  = VOFFSET_IN;        /* inch */
  142.   voffset_is_true = TRUE;        /* true inch? */
  143.   
  144.   moffset_in_fix  = MOFFSET_IN;        /* twopage mid-offset */
  145.   moffset_is_true = TRUE;
  146.   
  147.   twopage = leftpage = FALSE;
  148.  
  149.   mark_fonts = FALSE;
  150.  
  151.   GetOneOpt(&hoffset_in_fix, opt)->special = 1;
  152.   GetOneOpt(&voffset_in_fix, opt)->special = 1;
  153.  
  154.   o_optimize    = TRUE;
  155.   unidirect    = TRUE;            /* safe default        */
  156.   fontmemsize    = FONTMEMSIZE;
  157.   maxbitmapsize    = MAXBITMAPSIZE;    /* maximal size of bitmap    */
  158.   FirstPage    =-1000000L;    /* first page to print (uses count0)    */
  159.   LastPage    = 1000000L;    /* last page to print            */
  160.   bufflen    = 10240L;    /* printer buffer            */
  161.   do_accounting = FALSE;    /* default: no accounting        */
  162.   ncopies       = 1;        /* default: one copy            */
  163.   NrOfPagesToPrint = 1000000L;    /* default: viele viele Seiten drucken  */
  164.   PhyPageNumbers   = FALSE;
  165.   usegui = FALSE;        /* default: kein GUI             */
  166.  
  167.  
  168.   /*----------------------------------------------------------------*/
  169.   error = GetOpt(argc, argv, "DVIprint", TRUE, opt);
  170.   /*----------------------------------------------------------------*/
  171.   
  172.   if (error) {
  173.     PrintHelp(opt, FALSE);
  174.     AbortRun(5);    /* Programm Ende */
  175.   }
  176.   if (help) {
  177.     PrintHelp(opt, TRUE);
  178.     AbortRun(0);
  179.   }
  180.   
  181.  
  182.   if (g_paper) {
  183.     int i;
  184.     
  185.     for (i=0; psizes[i].name; i++) {
  186.       if (!stricmp(g_paper, psizes[i].name)) {
  187.         // Papiergroesse *inklusive* dem Offset!
  188.         if (abs(user_paper_width_in+13.13)  > 0.01) Warning(MSG_PAPER_WIDTH_HEIGHT_ERR, "WIDTH");
  189.         if (abs(user_paper_height_in+13.13) > 0.01) Warning(MSG_PAPER_WIDTH_HEIGHT_ERR, "HEIGHT");
  190.         user_paper_width_in  = psizes[i].width;
  191.         user_paper_height_in = psizes[i].height;
  192.         break;
  193.       }
  194.     }
  195.     if (!psizes[i].name) {
  196.       Fatal(5, MSG_UNKNOWN_PAPER_SIZE, g_paper);
  197.     }
  198.   }
  199.  
  200.   
  201.   if (Reverse && twopage) {
  202.     Fatal(1, MSG_REVERSE_TWOUP_ERR);
  203.   }
  204.  
  205.  
  206.   /* Now we can check the arguments */
  207.   g_logging    = o_nlogging ? -1 : 0;
  208.   last_form_feed= !skip_formfeed;
  209.   if (Reverse)        PreLoad = TRUE;
  210.   if (DebugStats)    Stats = 2L;
  211.   if (landscape || iffprint)    full_page_in_ram = TRUE;
  212.  
  213.   pri = (char)task_priority;
  214.   if (task_priority > 10 || task_priority < -10) {
  215.     task_priority = 0;
  216.   }
  217.   else {
  218.     task_priority = 0;
  219.     task_priority |= (unsigned long)((unsigned char)pri);
  220.   }
  221.  
  222.   if (ncopies <= 0 || ncopies > 99) {
  223.     Fatal(5,MSG_WRONG_NUM_COPIES);
  224.   }
  225.   
  226.   if (NrOfPagesToPrint < 1) {
  227.     Fatal(5,MSG_PRINT_AT_LEAST_ONE_PAGE);
  228.   }
  229.  
  230.   /* true Flags setzen (die Flags sind nicht mehr von Interesse (IMMER true)) */
  231.   hoffset_is_true = GetOneOpt(&hoffset_in_fix, opt)->special;
  232.   voffset_is_true = GetOneOpt(&voffset_in_fix, opt)->special;
  233.   moffset_is_true = GetOneOpt(&moffset_in_fix, opt)->special;
  234.  
  235.   if ( 0 < CheckOpt_Given(&resolution_str,opt)) {
  236.      if (2 != sscanf(resolution_str, "%d/%d%*c ", &hconvresolution, &vconvresolution)) {
  237.         if (1 != sscanf(resolution_str, "%d%*c ", &resolution)) {
  238.        Fatal(5,MSG_WRONG_RESO_FORMAT, resolution_str);
  239.     }
  240.     else hconvresolution = vconvresolution = resolution;    /* 1 */
  241.      }
  242.      else resolution = 0;                    /* 2 */
  243.   }
  244.   
  245.   if (twopage) {
  246.     leftpage = TRUE;    // bei zweiseiten fangen wir immer links an :)
  247.   }
  248.  
  249.   /* bufflen testen ? */
  250.  
  251.   /*    check incoherencies    */
  252.   if (odd && even) {
  253.     Fatal(5,MSG_NO_ODD_NO_EVEN);
  254.   }
  255.   if (odd)    print_page_numbers = 1;
  256.   if (even)    print_page_numbers = 2;
  257.  
  258.   /* density testen */
  259.   if (0 < CheckOpt_Given(&o_density,opt)) {
  260.     if (o_density < 1 || o_density > 7) {
  261.       Fatal(5,MSG_DENSITY_RANGE);
  262.     }
  263.   }
  264.  
  265.   if (maxbitmapsize != 0L && maxbitmapsize < MINBITMAPSIZE) {
  266.     maxbitmapsize = MINBITMAPSIZE;
  267.     Warning(MSG_BITMAP_MEM_MINIMUM,maxbitmapsize);
  268.   }
  269.   if (turbo_mode && (iffprint || output_file_name)) {
  270.     turbo_mode = FALSE;    /*    Aber kein Fehler    */
  271.   }
  272.  
  273.   if (iffprint)        ToDo |= DO_NOZERO;
  274.   if (output_file_name)    ToDo |= DO_OUTFILE | DO_NOZERO;
  275.   if (!iffprint && !output_file_name)    ToDo |= DO_REALPRINT;
  276.  
  277.   /* und DO_NOZERO fuer HP und SLM ... ?    */
  278.   /* *KEIN* DO_NOZERO fuer Generic        */
  279.  
  280.   /* output_file_name ? */
  281.  
  282.   if (0 == CheckOpt_Given(&o_printer_name,opt)) no_printer_given = 1;
  283.  
  284.  
  285.   if (0 < CheckOpt_Given(&filenameptr,opt)) {
  286. #if 0 /*    allgemeines Modell    */
  287.     char *p1,*p2;
  288.     p1 = strchr(filename, ':');
  289.     p2 = strrchr(p1 ? p1+1 : filename, '/');
  290.     p1 = strrchr(p2 ? p2+1 : p1+1, '.');
  291.     if (NULL == p1 || 0 != stricmp(p1,".dvi"))
  292.     strcat(filename, ".dvi");
  293.     else ; /* .tex wird nicht getestet */
  294. #else
  295.     strcpy(filename, filenameptr);
  296.  
  297.     if (getfa(filenameptr) != 1) {        // also KEIN Directory
  298.       char *p;
  299.       p = strrchr(filename, '.');
  300.       if (p) {
  301.         if (!stricmp(p, ".tex")) {
  302.           strcpy(p, ".dvi");            // .tex durch .dvi ersetzen
  303.         }
  304.       }
  305.       if (!p || stricmp(p,".dvi")) {        // kein . oder kein .dvi
  306.     if (getfa(filenameptr) ==  0) {        // File gibt es wohl so nicht
  307.           strcat(filename, ".dvi");        // dann haengen wir .dvi an
  308.         }
  309.       }
  310.     }
  311. #endif
  312.   }
  313.   else {
  314.     filename[0]='\0';
  315.     if (no_printer_given) {
  316.       if (!o_showprinter && !usegui) {
  317.         Warning(MSG_TRY_HELP_SHOWP,
  318.         g_progname, g_progname);
  319.     AbortRun(5);
  320.       }
  321. #if defined(LOESUNG)
  322.       else {
  323.         o_printer_name = "";        /* soll nicht nur "generic" anzeigen!! (hes) */
  324.       }
  325. #endif
  326.     }
  327.   }
  328.   
  329.   if (usegui) {
  330.     MUImainwin();
  331.   }
  332. }
  333.  
  334.  
  335. static void PrintHelp(struct Options opt[], short long_hlp)
  336. {
  337.   char * hlp;
  338.   
  339.   hlp = xmalloc(100);
  340.  
  341.   MessageStr(NULL);
  342.   Message(MSG_COPYRIGHT,__DATE__);
  343.  
  344.   sprintf(hlp, GetTeXString(MSG_USAGE), g_progname);
  345.   GetOptShortHelp(hlp, 73, opt);
  346.   
  347.   xfree(hlp);
  348.  
  349.   if (long_hlp) {
  350.     MessageStr("");
  351.     GetOptHelp(opt);  
  352.   }
  353.   
  354. }
  355.  
  356. #ifdef TEST
  357. void main(int argc, char *argv[])
  358. {
  359.   g_progname = 0 == argc ? _ProgramName : argv[0];
  360.   g_Logname = DVIPRINT_LOGFILE;
  361.  
  362.   DecodeArgs(argc, argv);
  363.   
  364.   printf("help:           '%ld'\n", help);
  365.   printf("PXLpath:        '%s'\n",  PXLpath);
  366.   printf("fontmemsize:    '%ld'\n", fontmemsize);
  367.   printf("maxbitmapsize:  '%ld'\n", maxbitmapsize);
  368.   printf("FirstPage:      '%ld'\n", FirstPage);
  369.   printf("LastPage:       '%ld'\n", LastPage);
  370.   printf("hoffset_in_fix: '%f'\n",  hoffset_in_fix);
  371.   printf("voffset_in_fix: '%f'\n",  voffset_in_fix);
  372.   printf("PreLoad:        '%ld'\n", PreLoad);
  373.   printf("Reverse:        '%ld'\n", Reverse);
  374.   printf("unidir:         '%ld'\n", unidirect);
  375.   printf("resolution:     '%d'\n",  resolution);
  376.   printf("hresolution:    '%d'\n",  hconvresolution);
  377.   printf("vresolution:    '%d'\n",  vconvresolution);
  378.   printf("optimize:       '%ld'\n", o_optimize);
  379.   printf("Stats:          '%ld'\n", Stats);
  380.   printf("DebugStats:     '%ld'\n", DebugStats);
  381.   printf("logging:        '%ld'\n", !o_nlogging);
  382.   printf("g_authors:      '%ld'\n", g_authors);
  383.   printf("Printer:        '%s'\n",  o_printer_name);
  384.   printf("Logfile:        '%s'\n",  g_Logname);
  385.   printf("Filename:       '%s'\n",  filename);
  386.  
  387.   if (argc == 0) {
  388.     Delay(200);
  389.   }
  390. }
  391. #endif /* TEST */
  392.