summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfm/dvipdfm.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipdfm/dvipdfm.c')
-rw-r--r--Build/source/texk/dvipdfm/dvipdfm.c649
1 files changed, 0 insertions, 649 deletions
diff --git a/Build/source/texk/dvipdfm/dvipdfm.c b/Build/source/texk/dvipdfm/dvipdfm.c
deleted file mode 100644
index 02b81ad906b..00000000000
--- a/Build/source/texk/dvipdfm/dvipdfm.c
+++ /dev/null
@@ -1,649 +0,0 @@
-/* $Header$
-
- This is dvipdfm, a DVI to PDF translator.
- Copyright (C) 1998, 1999, 2007, 2008 by Mark A. Wicks
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- The author may be contacted via the e-mail address
-
- mwicks@kettering.edu
-*/
-
-
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-#include "config.h"
-#include "system.h"
-#include "mem.h"
-#include "mfileio.h"
-#include "dvi.h"
-#include "pdfdoc.h"
-#include "pdfdev.h"
-#include "encodings.h"
-#include "type1.h"
-#include "ttf.h"
-#include "colorsp.h"
-#include "pdfspecial.h"
-#include "pdfparse.h"
-#include "vf.h"
-#include "pkfont.h"
-#include "thumbnail.h"
-#include "psimage.h"
-#include "tfm.h"
-
-struct rect
-{
- double width;
- double height;
-};
-typedef struct rect rect;
-
-struct
-{
- char *s;
- struct rect data;
-} paper_sizes[] = {
- {"letter" , { 612.0, 792.0}},
- {"legal" , { 612.0, 1008.0}},
- {"ledger" , { 1224.0, 792.0}},
- {"tabloid" , { 792.0, 1224.0}},
- {"a5" , { 420.91, 595.27}},
- {"a4" , { 595.27, 841.82}},
- {"a3" , { 841.82, 1190.16}}};
-
-static rect get_paper_size (char *string)
-{
- int i;
- for (i=0; i<sizeof(paper_sizes)/sizeof(paper_sizes[0]); i++) {
- if (!strcmp (string, paper_sizes[i].s))
- break;
- }
- if (i == sizeof(paper_sizes)/sizeof(paper_sizes[0]))
- ERROR ("Paper size is invalid");
- return paper_sizes[i].data;
-}
-
-
-char *dvi_filename = NULL, *pdf_filename = NULL;
-static void set_default_pdf_filename(void)
-{
- const char *dvi_base;
-#ifdef HAVE_XBASENAME
- dvi_base = xbasename (dvi_filename);
-#else
- dvi_base = basename (dvi_filename);
-#endif
- if (strlen (dvi_base) < 5 || strncmp (".dvi", dvi_base+strlen(dvi_base)-4, 4))
- {
- pdf_filename = NEW (strlen(dvi_base)+5, char);
- strcpy (pdf_filename, dvi_base);
- strcat (pdf_filename, ".pdf");
- } else
- {
- pdf_filename = NEW (strlen(dvi_base)+1, char);
- strncpy (pdf_filename, dvi_base, strlen(dvi_base)-4);
- strcpy (pdf_filename+strlen(dvi_base)-4, ".pdf");
- }
-}
-static void usage (void)
-{
- fprintf (stdout, "\n%s, version %s, Copyright (C) 1998, 1999, 2007 by Mark A. Wicks\n", PACKAGE, VERSION);
- fprintf (stdout, "dvipdfm comes with ABSOLUTELY NO WARRANTY.\n");
- fprintf (stdout, "This is free software, and you are welcome to redistribute it\n");
- fprintf (stdout, "under certain conditions. Details are distributed with the software.\n");
- fprintf (stdout, "\nUsage: dvipdfm [options] dvifile\n");
- fprintf (stdout, "-c \tIgnore color specials (for B&W printing)\n");
- fprintf (stdout, "-f filename\tSet font map file name [t1fonts.map]\n");
- fprintf (stdout, "-o filename\tSet output file name [dvifile.pdf]\n");
- fprintf (stdout, "-l \t\tLandscape mode\n");
- fprintf (stdout, "-m number\tSet additional magnification\n");
- fprintf (stdout, "-p papersize\tSet papersize (letter, legal,\n");
- fprintf (stdout, " \tledger, tabloid, a4, or a3) [letter]\n");
- fprintf (stdout, "-r resolution\tSet resolution (in DPI) for raster fonts [600]\n");
- fprintf (stdout, "-s pages\tSelect page ranges (-)\n");
- fprintf (stdout, "-t \tEmbed thumbnail images\n");
- fprintf (stdout, "-d \tRemove thumbnail images when finished\n");
- fprintf (stdout, "-x dimension\tSet horizontal offset [1.0in]\n");
- fprintf (stdout, "-y dimension\tSet vertical offset [1.0in]\n");
- fprintf (stdout, "-e \tDisable partial font embedding [default is enabled])\n");
- fprintf (stdout, "-z number\tSet compression level (0-9) [default is 9])\n");
- fprintf (stdout, "-v \tBe verbose\n");
- fprintf (stdout, "-vv \tBe more verbose\n");
- fprintf (stdout, "\nAll dimensions entered on the command line are \"true\" TeX dimensions.\n");
- fprintf (stdout, "Argument of \"-s\" lists physical page ranges separated by commas, e.g., \"-s 1-3,5-6\"\n\n");
- exit(1);
-}
-
-static double paper_width = 612.0, paper_height = 792.0;
-static char landscape_mode = 0;
-static char ignore_colors = 0;
-static double mag = 1.0, x_offset=72.0, y_offset=72.0;
-static int font_dpi = 600;
-static int really_quiet = 0;
-
-struct page_range
-{
- unsigned int first, last;
-} *page_ranges = NULL;
-int max_page_ranges = 0, num_page_ranges = 0;
-
-void set_landscape_mode (void)
-{
- dev_set_page_size (paper_height, paper_width);
-}
-
-#define pop_arg() {argv += 1; argc -= 1;}
-static void do_args (int argc, char *argv[])
-{
- char *flag;
- while (argc > 0 && *argv[0] == '-') {
- for (flag=argv[0]+1; *flag != 0; flag++) {
- switch (*flag) {
- case 'D':
- if (argc < 2) {
- fprintf (stderr, "PS->PDF conversion command line template missing\n\n");
- usage();
- }
- set_distiller_template(argv[1]);
- pop_arg();
- break;
- case 'r':
- if (argc < 2) {
- fprintf (stderr, "\nResolution specification missing a number\n\n");
- usage();
- }
- {
- char *result, *end, *start = argv[1];
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL && start == end) {
- font_dpi = (int) atof (result);
- }
- else {
- fprintf (stderr, "\nError in number following resolution specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- }
- pop_arg();
- break;
- case 'm':
- if (argc < 2) {
- fprintf (stderr, "\nMagnification specification missing a number\n\n");
- usage();
- }
- {
- char *result, *end, *start = argv[1];
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL && start == end) {
- mag = atof (result);
- }
- else {
- fprintf (stderr, "\nError in number following magnification specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- }
- pop_arg();
- break;
- case 'g':
- if (argc < 2) {
- fprintf (stderr, "\nAnnotation \"grow\" specification missing a number\n\n");
- usage();
- }
- {
- char *result, *end, *start = argv[1];
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL && start == end) {
- pdf_special_set_grow (atof (result));
- }
- else {
- fprintf (stderr, "\nError in number following magnification specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- }
- pop_arg();
- break;
- case 'x':
- if (argc < 2) {
- fprintf (stderr, "\nX Offset specification missing a number\n\n");
- usage();
- }
- {
- char *result, *end, *start = argv[1];
- double unit;
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL) {
- x_offset = atof (result);
- }
- else {
- fprintf (stderr, "\nError in number following xoffset specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- unit = parse_one_unit(&start, end);
- if (unit > 0.0) {
- x_offset *= unit;
- }
- else {
- fprintf (stderr, "\nError in dimension specification following xoffset\n\n");
- usage();
- }
- }
- pop_arg();
- break;
- case 'y':
- if (argc < 2) {
- fprintf (stderr, "\nY offset specification missing a number\n\n");
- usage();
- }
- {
- char *result, *end, *start = argv[1];
- double unit;
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL) {
- y_offset = atof (result);
- }
- else {
- fprintf (stderr, "\nError in number following yoffset specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- unit = parse_one_unit(&start, end);
- if (unit > 0.0) {
- y_offset *= unit;
- }
- else {
- fprintf (stderr, "\nError in dimension specification following yoffset\n\n");
- usage();
- }
- }
- pop_arg();
- break;
- case 'o':
- if (argc < 2)
- ERROR ("Missing output file name");
- pdf_filename = NEW (strlen(argv[1])+1,char);
- strcpy (pdf_filename, argv[1]);
- pop_arg();
- break;
- case 's':
- {
- char *result, *end, *start = argv[1];
- if (argc < 2)
- ERROR ("Missing page selection specification");
- end = start + strlen (argv[1]);
- while (start < end) {
- /* Enlarge page range table if necessary */
- if (num_page_ranges >= max_page_ranges) {
- max_page_ranges += 4;
- page_ranges = RENEW (page_ranges, max_page_ranges,
- struct page_range);
- }
- skip_white (&start, end);
- page_ranges[num_page_ranges].first = 0;
- if ((result = parse_unsigned (&start, end))) {
- page_ranges[num_page_ranges].first = atoi(result)-1;
- page_ranges[num_page_ranges].last =
- page_ranges[num_page_ranges].first;
- RELEASE(result);
- }
- skip_white (&start, end);
- if (*start == '-') {
- start += 1;
- page_ranges[num_page_ranges].last = UINT_MAX;
- skip_white (&start, end);
- if (start < end &&
- ((result = parse_unsigned (&start, end)))) {
- page_ranges[num_page_ranges].last = atoi(result)-1;
- RELEASE (result);
- }
- }
- num_page_ranges += 1;
- skip_white (&start, end);
- if (start < end && *start == ',') {
- start += 1;
- continue;
- }
- skip_white (&start, end);
- if (start < end) {
- fprintf (stderr, "Page selection? %s", start);
- ERROR ("Bad page range specification");
- }
- }
- pop_arg();
- }
- break;
- case 't':
- {
-#ifdef HAVE_LIBPNG
- pdf_doc_enable_thumbnails ();
-#else
- ERROR ("The thumbnail option requires libpng, which you apparently don't have.");
-#endif /* HAVE_LIBPNG */
- }
- break;
- case 'd':
- {
-#ifdef HAVE_LIBPNG
- thumb_remove ();
-#else
- ERROR ("The thumbnail option requires libpng, which you apparently don't have.");
-#endif /* HAVE_LIBPNG */
- }
- break;
- case 'p':
- {
- struct rect paper_size;
- if (argc < 2)
- ERROR ("Missing paper size");
- paper_size = get_paper_size (argv[1]);
- paper_width = paper_size.width;
- paper_height = paper_size.height;
- pop_arg();
- }
- break;
- case 'c':
- ignore_colors = 1;
- break;
- case 'l':
- landscape_mode = 1;
- break;
- case 'f':
- dev_read_mapfile (argv[1]);
- pop_arg();
- break;
- case 'e':
- type1_disable_partial();
- break;
- case 'q':
- really_quiet = 1;
- break;
- case 'v':
- encoding_set_verbose();
- dev_set_verbose();
- dvi_set_verbose();
- type1_set_verbose();
- vf_set_verbose();
- pk_set_verbose();
- pdf_obj_set_verbose();
- pdf_doc_set_verbose();
- tfm_set_verbose();
-#ifdef HAVE_TTF_FORMATS
- ttf_set_verbose();
-#endif
- break;
- case 'V':
- {
- unsigned level = 2;
- if (isdigit (*(flag+1))) {
- level = *(++flag) - '0';
- } else {
- char *result, *end, *start = argv[1];
- if (argc < 2) {
- fprintf (stderr, "\nVersion specification missing number (2, 3, ...)\n\n");
- usage();
- }
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL && start == end) {
- level = (int) atof (result);
- }
- else {
- fprintf (stderr, "\nError in number following version specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- pop_arg();
- }
- if (level >= 2) {
- pdf_set_version(level);
- } else {
- fprintf (stderr, "\nNumber following version specification is out of range\n\n");
- }
- }
- break;
- case 'z':
- {
- int level = 9;
-#ifndef HAVE_ZLIB
- fprintf (stderr, "\nYou don't have compression compiled in. Possibly libz wasn't found by configure.\nCompression specification will be ignored.\n\n");
-#endif /* HAVE_ZLIB */
- if (isdigit (*(flag+1))) {
- level = *(++flag) - '0';
- } else {
- char *result, *end, *start = argv[1];
- if (argc < 2) {
- fprintf (stderr, "\nCompression specification missing number for level\n\n");
- usage();
- }
- end = start + strlen(argv[1]);
- result = parse_number (&start, end);
- if (result != NULL && start == end) {
- level = (int) atof (result);
- }
- else {
- fprintf (stderr, "\nError in number following compression specification\n\n");
- usage();
- }
- if (result != NULL) {
- RELEASE (result);
- }
- pop_arg();
- }
- if (level >= 0 && level <= 9) {
- pdf_obj_set_compression(level);
- } else {
- fprintf (stderr, "\nNumber following compression specification is out of range\n\n");
- }
- }
- break;
- default:
- usage();
- }
- }
- argc -= 1 ;
- argv += 1;
- }
- if (argc > 1) {
- fprintf (stderr, "\nMultiple dvi filenames?\n\n");
- usage();
- }
- /* The only legitimate way to have argc == 0 here is
- is do_args was called from config file. In that case, there is
- no dvi file name. Check for that case */
- if (argc > 0) {
- if (strncmp (".dvi", argv[0]+strlen(argv[0])-4, 4)) {
- dvi_filename = NEW (strlen (argv[0])+1+4, char);
- strcpy (dvi_filename, argv[0]);
- strcat (dvi_filename, ".dvi");
- }
- else {
- dvi_filename = NEW (strlen (argv[0])+1, char);
- strcpy (dvi_filename, argv[0]);
- }
- }
-}
-
-
-static void cleanup(void)
-{
- RELEASE (dvi_filename);
- RELEASE (pdf_filename);
- if (page_ranges)
- RELEASE (page_ranges);
- psimage_close();
-}
-
-static char *config_file_name = "config";
-static void read_config_file (void)
-{
- char *full_config_name, *start, *end;
- char *argv[2], *option;
- FILE *config_file;
-
- if ((full_config_name = kpse_find_file (config_file_name,
- kpse_program_text_format,
- true)) == NULL) {
- return;
- }
- if (!(config_file = MFOPEN (full_config_name, FOPEN_R_MODE))) {
- fprintf (stderr, "\nError opening configuration file. Continuing with defaults.\n");
- return;
- }
- while ((start = mfgets (work_buffer, WORK_BUFFER_SIZE,
- config_file))) {
- int argc = 0;
- end = work_buffer+strlen(work_buffer);
- skip_white (&start, end);
- if (start >= end)
- continue;
- /* Build up an argument list as if it were passed on the command
- line */
- if ((option = parse_ident (&start, end))) {
- argc = 1;
- argv[0] = NEW (strlen(option)+2, char);
- strcpy (argv[0]+1, option);
- RELEASE (option);
- *argv[0] = '-';
- skip_white (&start, end);
- if (start < end) {
- argc += 1;
- if (*start == '"') {
- argv[1] = parse_c_string (&start, end);
- }
- else
- argv[1] = parse_ident (&start, end);
- }
- }
- do_args (argc, argv);
- while (argc > 0) {
- RELEASE (argv[--argc]);
- }
- }
-}
-
-void error_cleanup (void)
-{
- pdf_error_cleanup();
- remove (pdf_filename);
- fprintf (stderr, "\nOutput file removed.\n");
-}
-
-int CDECL main (int argc, char *argv[])
-{
- int i;
- int at_least_one_page = 0;
- if (argc < 2) {
- fprintf (stderr, "\nNo dvi filename specified.\n\n");
- usage();
- return 1;
- }
-#ifdef HAVE_KPATHSEA
- kpse_set_program_name (argv[0], NULL);
-#endif
-
- argv+=1;
- argc-=1;
-
- /* Process config file, if any */
- read_config_file();
-
- do_args (argc, argv);
-
-#ifdef HAVE_KPATHSEA
- kpse_init_prog ("", font_dpi, NULL, NULL);
- pk_set_dpi (font_dpi);
- kpse_set_program_enabled (kpse_pk_format, true, kpse_src_texmf_cnf);
-#endif
-
- if (!dvi_filename) {
- fprintf (stderr, "\nNo dvi filename specified.\n\n");
- usage();
- }
-
- /* Check for ".dvi" at end of argument name */
- if (pdf_filename == NULL)
- set_default_pdf_filename();
-
- if (!really_quiet)
- fprintf (stdout, "\n%s -> %s\n", dvi_filename, pdf_filename);
-
- dvi_init (dvi_filename, pdf_filename, mag, x_offset, y_offset);
-
- if (ignore_colors) {
- color_special_ignore_colors();
- pdf_special_ignore_colors();
- }
-
- if (landscape_mode)
- dev_set_page_size (paper_height, paper_width);
- else
- dev_set_page_size (paper_width, paper_height);
-
- if ((num_page_ranges))
- for (i=0; i<num_page_ranges; i++) {
- unsigned j;
- if (page_ranges[i].first <= page_ranges[i].last)
- for (j=page_ranges[i].first; j<=page_ranges[i].last && j<dvi_npages(); j++) {
- fprintf (stderr, "[%d", j+1);
- dvi_do_page (j);
- at_least_one_page = 1;
- fprintf (stderr, "]");
- }
- else
- for (j=page_ranges[i].first;
- j>=page_ranges[i].last && j<dvi_npages(); j--) {
- fprintf (stderr, "[%d", j+1);
- dvi_do_page (j);
- at_least_one_page = 1;
- fprintf (stderr, "]");
- }
- }
- if (!at_least_one_page && num_page_ranges) {
- fprintf (stderr, "No pages fall in range!\nFalling back to entire document.\n");
- }
- if (!at_least_one_page) /* Fall back to entire document */
- for (i=0; i<dvi_npages(); i++) {
- fprintf (stderr, "[%d", i+1);
- dvi_do_page (i);
- fprintf (stderr, "]");
- }
- dvi_close();
- fprintf (stderr, "\n");
- cleanup();
- return 0;
-}
-