summaryrefslogtreecommitdiff
path: root/Build/source/texk/windvi/xdvi.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/windvi/xdvi.c')
-rw-r--r--Build/source/texk/windvi/xdvi.c2934
1 files changed, 0 insertions, 2934 deletions
diff --git a/Build/source/texk/windvi/xdvi.c b/Build/source/texk/windvi/xdvi.c
deleted file mode 100644
index 0555f705cb0..00000000000
--- a/Build/source/texk/windvi/xdvi.c
+++ /dev/null
@@ -1,2934 +0,0 @@
-/*========================================================================*\
-
-Copyright (c) 1990-1999 Paul Vojta
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL PAUL VOJTA OR ANYONE ELSE BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
-THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-NOTE: xdvi is based on prior work as noted in the modification history, below.
-
-\*========================================================================*/
-
-/*
- * DVI previewer for X.
- *
- * Eric Cooper, CMU, September 1985.
- *
- * Code derived from dvi-imagen.c.
- *
- * Modification history:
- * 1/1986 Modified for X.10 --Bob Scheifler, MIT LCS.
- * 7/1988 Modified for X.11 --Mark Eichin, MIT
- * 12/1988 Added 'R' option, toolkit, magnifying glass
- * --Paul Vojta, UC Berkeley.
- * 2/1989 Added tpic support --Jeffrey Lee, U of Toronto
- * 4/1989 Modified for System V --Donald Richardson, Clarkson Univ.
- * 3/1990 Added VMS support --Scott Allendorf, U of Iowa
- * 7/1990 Added reflection mode --Michael Pak, Hebrew U of Jerusalem
- * 1/1992 Added greyscale code --Till Brychcy, Techn. Univ. Muenchen
- * and Lee Hetherington, MIT
- * 7/1992 Added extra menu buttons--Nelson H. F. Beebe <beebe@math.utah.edu>
- * 4/1994 Added DPS support, bounding box
- * --Ricardo Telichevesky
- * and Luis Miguel Silveira, MIT RLE.
- * 2/1995 Added rulers support --Nelson H. F. Beebe <beebe@math.utah.edu>
- *
- * Compilation options:
- * VMS compile for VMS
- * NOTOOL compile without toolkit
- * BUTTONS compile with buttons on the side of the window (needs toolkit)
- * WORDS_BIGENDIAN store bitmaps internally with most significant bit first
- * BMTYPE store bitmaps in unsigned BMTYPE
- * BMBYTES sizeof(unsigned BMTYPE)
- * ALTFONT default for -altfont option
- * SHRINK default for -s option (shrink factor)
- * MFMODE default for -mfmode option
- * A4 use European size paper, and change default dimension to cm
- * TEXXET support reflection dvi codes (right-to-left typesetting)
- * GREY use grey levels to shrink fonts
- * PS_GS use Ghostscript to render pictures/bounding boxes
- * PS_DPS use display postscript to render pictures/bounding boxes
- * PS_NEWS use the NeWS server to render pictures/bounding boxes
- * GS_PATH path to call the Ghostscript interpreter by
- * GRID grid in magnification windows enabled
- * HTEX hypertex enabled. EXPECT PROBLEMS IF USED WITH MOTIF!
- * please send patches to janl@math.uio.no
- */
-
-#if 0
-static char copyright[] =
-"@(#) Copyright (c) 1994-1999 Paul Vojta. All rights reserved.\n";
-#endif
-
-#define EXTERN
-#define INIT(x) =x
-
-#include "xdvi-config.h"
-#include "c-openmx.h"
-#include <kpathsea/c-ctype.h>
-#include <kpathsea/c-fopen.h>
-#include <kpathsea/c-pathch.h>
-#include <kpathsea/c-stat.h>
-#include <kpathsea/proginit.h>
-#include <kpathsea/progname.h>
-#include <kpathsea/tex-file.h>
-#include <kpathsea/tex-hush.h>
-#include <kpathsea/tex-make.h>
-
-#ifdef HTEX
-#include "wwwconf.h"
-#include "WWWLib.h"
-#include "WWWInit.h"
-#include "WWWCache.h"
-#include "HTEscape.h"
-#endif
-
-#ifndef ALTFONT
-#define ALTFONT "cmr10"
-#endif
-
-#ifndef SHRINK
-#define SHRINK 8
-#endif
-
-#ifndef BDPI
-#define BDPI 600
-#endif
-
-#ifndef MFMODE
-#define MFMODE NULL
-#endif
-
-#undef MKTEXPK
-#define MKTEXPK MAKEPK
-
-#if defined(PS_GS) && !defined(GS_PATH)
-#define GS_PATH "gs"
-#endif
-
-#if A4
-#define DEFAULT_PAPER "a4"
-#else
-#define DEFAULT_PAPER "us"
-#endif
-
-#include "version.h"
-
-#ifdef HTEX
-/* Application name and version for w3c-libwww routines.
- This is what will show up in httpd's agent_log files.
-*/
-#ifdef Omega
-char *HTAppName = "oxdvik";
-#else
-char *HTAppName = "xdvik";
-#endif
-char *HTAppVersion = VERSION;
-#endif
-
-
-#ifdef X_NOT_STDC_ENV
-#ifndef atof
-extern double atof ARGS((_Xconst char *));
-#endif
-#endif
-
-/* Xlib and Xutil are already included */
-#include <X11/cursorfont.h>
-#include <X11/keysym.h>
-#include "xdvi.icon"
-
-#ifdef TOOLKIT
-
-#ifdef OLD_X11_TOOLKIT
-#include <X11/Atoms.h>
-#else /* not OLD_X11_TOOLKIT */
-#include <X11/Xatom.h>
-#include <X11/StringDefs.h>
-#endif /* not OLD_X11_TOOLKIT */
-
-#include <X11/Shell.h> /* needed for def. of XtNiconX */
-
-#ifndef XtSpecificationRelease
-#define XtSpecificationRelease 0
-#endif
-#if XtSpecificationRelease >= 4
-
-#ifndef MOTIF
-#include <X11/Xaw/Viewport.h>
-#ifdef HTEX
-#include <X11/Xaw/AsciiText.h>
-#include <X11/Xaw/Box.h>
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/Form.h>
-#include <X11/Xaw/Paned.h>
-#include <X11/Xaw/Scrollbar.h>
-#endif /* HTEX */
-#define VPORT_WIDGET_CLASS viewportWidgetClass
-#define DRAW_WIDGET_CLASS drawWidgetClass
-#else /* MOTIF */
-#include <Xm/MainW.h>
-#include <Xm/ToggleB.h>
-#include <Xm/RowColumn.h>
-#include <Xm/MenuShell.h>
-#include <Xm/DrawingA.h>
-#define VPORT_WIDGET_CLASS xmMainWindowWidgetClass
-#define DRAW_WIDGET_CLASS xmDrawingAreaWidgetClass
-#endif /* MOTIF */
-
-#ifdef BUTTONS
-#ifndef MOTIF
-#include <X11/Xaw/Command.h>
-#define FORM_WIDGET_CLASS formWidgetClass
-#else /* MOTIF */
-#include <Xm/Form.h>
-#define FORM_WIDGET_CLASS xmFormWidgetClass
-#endif /* MOTIF */
-#endif /* BUTTONS */
-
-#else /* XtSpecificationRelease < 4 */
-
-#define XtPointer caddr_t
-#include <X11/Viewport.h>
-#ifdef HTEX
-#include <X11/AsciiText.h>
-#include <X11/Box.h>
-#include <X11/Command.h>
-#include <X11/Dialog.h>
-#include <X11/Form.h>
-#include <X11/Paned.h>
-#include <X11/Scroll.h>
-#include <X11/VPaned.h>
-#include <X11/Scrollbar.h>
-#endif
-#define VPORT_WIDGET_CLASS viewportWidgetClass
-#define DRAW_WIDGET_CLASS drawWidgetClass
-#ifdef BUTTONS
-#include <X11/Command.h>
-#define FORM_WIDGET_CLASS formWidgetClass
-#endif
-
-#endif /* XtSpecificationRelease */
-
-#if XtSpecificationRelease < 5
-typedef caddr_t XPointer;
-#endif
-
-#else /* not TOOLKIT */
-
-typedef int Position;
-
-#endif /* not TOOLKIT */
-
-#ifdef VMS
-/*
- * Magnifying glass cursor
- *
- * Developed by Tom Sawyer, April 1990
- * Contibuted by Hunter Goatley, January 1991
- *
- */
-
-#define mag_glass_width 16
-#define mag_glass_height 16
-#define mag_glass_x_hot 6
-#define mag_glass_y_hot 6
-static char mag_glass_bits[] = {
- 0xf8, 0x03, 0x0c, 0x06, 0xe2, 0x09, 0x13, 0x1a, 0x01, 0x14, 0x01, 0x14,
- 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x03, 0x10, 0x02, 0x18, 0x0c, 0x34,
- 0xf8, 0x6f, 0x00, 0xd8, 0x00, 0xb0, 0x00, 0xe0
-};
-#include <decw$cursor.h> /* Include the DECWindows cursor symbols */
-static int DECWCursorFont; /* Space for the DECWindows cursor font */
-static Pixmap MagnifyPixmap; /* Pixmap to hold our special mag-glass */
-#include <X11/Xresource.h> /* Motif apparently needs this one */
-#endif /* VMS */
-
-/*
- * Command line flags.
- */
-
-static Dimension bwidth = 2;
-
-#define fore_Pixel resource._fore_Pixel
-#define back_Pixel resource._back_Pixel
-#ifdef TOOLKIT
-struct _resource resource;
-#define brdr_Pixel resource._brdr_Pixel
-#define hl_Pixel resource._hl_Pixel
-#define cr_Pixel resource._cr_Pixel
-#ifdef GRID
-#define grid1_Pixel resource._grid1_Pixel
-#define grid2_Pixel resource._grid2_Pixel
-#define grid3_Pixel resource._grid3_Pixel
-#endif /* GRID */
-#else /* not TOOLKIT */
-static _Xconst char *brdr_color;
-static _Xconst char *high_color;
-static _Xconst char *curs_color;
-static Pixel hl_Pixel, cr_Pixel;
-#ifdef GRID
-static Pixel grid1_Pixel, grid2_Pixel, grid3_Pixel;
-#endif /* GRID */
-#endif /* not TOOLKIT */
-
-struct mg_size_rec mg_size[5] = {{200, 150}, {400, 250}, {700, 500},
- {1000, 800}, {1200, 1200}};
-
-static char *curr_page;
-
-struct WindowRec mane = {(Window) 0, 1, 0, 0, 0, 0, MAXDIM, 0, MAXDIM, 0};
-struct WindowRec alt = {(Window) 0, 1, 0, 0, 0, 0, MAXDIM, 0, MAXDIM, 0};
-/* currwin is temporary storage except for within redraw() */
-struct WindowRec currwin= {(Window) 0, 1, 0, 0, 0, 0, MAXDIM, 0, MAXDIM, 0};
-
-#ifdef lint
-#ifdef TOOLKIT
-WidgetClass widgetClass;
-#ifndef MOTIF
-WidgetClass viewportWidgetClass;
-#ifdef BUTTONS
-WidgetClass formWidgetClass, compositeWidgetClass, commandWidgetClass;
-#endif /* BUTTONS */
-#else /* MOTIF */
-WidgetClass xmMainWindowWidgetClass, xmDrawingAreaWidgetClass;
-#ifdef BUTTONS
-WidgetClass xmFormWidgetClass, xmBulletinBoardWidgetClass;
-WidgetClass xmPushButtonWidgetClass;
-#endif /* BUTTONS */
-#endif /* MOTIF */
-#endif /* TOOLKIT */
-#endif /* lint */
-
-/*
- * Data for options processing
- */
-
-static _Xconst char silent[] = " "; /* flag value for usage() */
-
-static _Xconst char subst[] = "x"; /* another flag value */
-
-static _Xconst char *subst_val[] = {
-#ifdef BUTTONS
- "-shrinkbutton[1-4] <shrink>",
-#endif
- "-mgs[n] <size>"};
-
-/* BEGIN CHUNK xdvi.c 1 */
-#ifdef SRC_SPECIALS
-#define src_tickSize resource._src_tickSize
-#define src_specialFormat resource._src_specialFormat
-#define src_jumpButton resource._src_jumpButton
-#endif
-/* END CHUNK xdvi.c 1 */
-
-#ifdef TOOLKIT
-
-static XrmOptionDescRec options[] = {
-{"-s", ".shrinkFactor", XrmoptionSepArg, (caddr_t) SHRINK},
-#ifndef VMS
-{"-S", ".densityPercent", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-{"-density", ".densityPercent", XrmoptionSepArg, (caddr_t) NULL},
-#ifdef GREY
-{"-nogrey", ".grey", XrmoptionNoArg, (caddr_t) "off"},
-{"+nogrey", ".grey", XrmoptionNoArg, (caddr_t) "on"},
-{"-gamma", ".gamma", XrmoptionSepArg, (caddr_t) NULL},
-{"-install", ".install", XrmoptionNoArg, (caddr_t) "on"},
-{"-noinstall", ".install", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-#ifdef GRID
-{"-grid1", ".grid1Color", XrmoptionSepArg, (caddr_t) NULL},
-{"-grid2", ".grid2Color", XrmoptionSepArg, (caddr_t) NULL},
-{"-grid3", ".grid3Color", XrmoptionSepArg, (caddr_t) NULL},
-#endif /* GRID */
-{"-p", ".pixelsPerInch", XrmoptionSepArg, (caddr_t) NULL},
-{"-margins", ".Margin", XrmoptionSepArg, (caddr_t) NULL},
-{"-sidemargin", ".sideMargin", XrmoptionSepArg, (caddr_t) NULL},
-{"-topmargin", ".topMargin", XrmoptionSepArg, (caddr_t) NULL},
-{"-offsets", ".Offset", XrmoptionSepArg, (caddr_t) NULL},
-{"-xoffset", ".xOffset", XrmoptionSepArg, (caddr_t) NULL},
-{"-yoffset", ".yOffset", XrmoptionSepArg, (caddr_t) NULL},
-{"-paper", ".paper", XrmoptionSepArg, (caddr_t) NULL},
-{"-altfont", ".altFont", XrmoptionSepArg, (caddr_t) NULL},
-#ifdef MKTEXPK
-{"-nomakepk", ".makePk", XrmoptionNoArg, (caddr_t) "off"},
-{"+nomakepk", ".makePk", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-{"-mfmode", ".mfMode", XrmoptionSepArg, (caddr_t) MFMODE},
-{"-l", ".listFonts", XrmoptionNoArg, (caddr_t) "on"},
-{"+l", ".listFonts", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef BUTTONS
-{"-expert", ".expert", XrmoptionNoArg, (caddr_t) "on"},
-{"+expert", ".expert", XrmoptionNoArg, (caddr_t) "off"},
-{"-shrinkbutton1",".shrinkButton1",XrmoptionSepArg, (caddr_t) NULL},
-{"-shrinkbutton2",".shrinkButton2",XrmoptionSepArg, (caddr_t) NULL},
-{"-shrinkbutton3",".shrinkButton3",XrmoptionSepArg, (caddr_t) NULL},
-{"-shrinkbutton4",".shrinkButton4",XrmoptionSepArg, (caddr_t) NULL},
-#endif
-{"-mgs", ".magnifierSize1",XrmoptionSepArg, (caddr_t) NULL},
-{"-mgs1", ".magnifierSize1",XrmoptionSepArg, (caddr_t) NULL},
-{"-mgs2", ".magnifierSize2",XrmoptionSepArg, (caddr_t) NULL},
-{"-mgs3", ".magnifierSize3",XrmoptionSepArg, (caddr_t) NULL},
-{"-mgs4", ".magnifierSize4",XrmoptionSepArg, (caddr_t) NULL},
-{"-mgs5", ".magnifierSize5",XrmoptionSepArg, (caddr_t) NULL},
-{"-warnspecials", ".warnSpecials", XrmoptionNoArg, (caddr_t) "on"},
-{"+warnspecials", ".warnSpecials", XrmoptionNoArg, (caddr_t) "off"},
-{"-hush", ".Hush", XrmoptionNoArg, (caddr_t) "on"},
-{"+hush", ".Hush", XrmoptionNoArg, (caddr_t) "off"},
-{"-hushchars", ".hushLostChars", XrmoptionNoArg, (caddr_t) "on"},
-{"+hushchars", ".hushLostChars", XrmoptionNoArg, (caddr_t) "off"},
-{"-hushchecksums", ".hushChecksums", XrmoptionNoArg, (caddr_t) "on"},
-{"+hushchecksums", ".hushChecksums", XrmoptionNoArg, (caddr_t) "off"},
-{"-safer", ".safer", XrmoptionNoArg, (caddr_t) "on"},
-{"+safer", ".safer", XrmoptionNoArg, (caddr_t) "off"},
-{"-fg", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
-{"-foreground", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
-{"-bg", ".background", XrmoptionSepArg, (caddr_t) NULL},
-{"-background", ".background", XrmoptionSepArg, (caddr_t) NULL},
-{"-hl", ".highlight", XrmoptionSepArg, (caddr_t) NULL},
-{"-cr", ".cursorColor", XrmoptionSepArg, (caddr_t) NULL},
-{"-icongeometry",".iconGeometry",XrmoptionSepArg, (caddr_t) NULL},
-{"-keep", ".keepPosition",XrmoptionNoArg, (caddr_t) "on"},
-{"+keep", ".keepPosition",XrmoptionNoArg, (caddr_t) "off"},
-{"-copy", ".copy", XrmoptionNoArg, (caddr_t) "on"},
-{"+copy", ".copy", XrmoptionNoArg, (caddr_t) "off"},
-{"-thorough", ".thorough", XrmoptionNoArg, (caddr_t) "on"},
-{"+thorough", ".thorough", XrmoptionNoArg, (caddr_t) "off"},
-#if PS
-{"-nopostscript",".postscript", XrmoptionNoArg, (caddr_t) "off"},
-{"+nopostscript",".postscript", XrmoptionNoArg, (caddr_t) "on"},
-{"-noscan", ".prescan", XrmoptionNoArg, (caddr_t) "off"},
-{"+noscan", ".prescan", XrmoptionNoArg, (caddr_t) "on"},
-{"-allowshell", ".allowShell", XrmoptionNoArg, (caddr_t) "on"},
-{"+allowshell", ".allowShell", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef PS_DPS
-{"-nodps", ".dps", XrmoptionNoArg, (caddr_t) "off"},
-{"+nodps", ".dps", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-#ifdef PS_NEWS
-{"-nonews", ".news", XrmoptionNoArg, (caddr_t) "off"},
-{"+nonews", ".news", XrmoptionNoArg, (caddr_t) "on"},
-#endif
-#ifdef PS_GS
-{"-noghostscript",".ghostscript", XrmoptionNoArg, (caddr_t) "off"},
-{"+noghostscript",".ghostscript", XrmoptionNoArg, (caddr_t) "on"},
-{"-nogssafer", ".gsSafer", XrmoptionNoArg, (caddr_t) "off"},
-{"+nogssafer", ".gsSafer", XrmoptionNoArg, (caddr_t) "on"},
-{"-gsalpha", ".gsAlpha", XrmoptionNoArg, (caddr_t) "on"},
-{"+gsalpha", ".gsAlpha", XrmoptionNoArg, (caddr_t) "off"},
-{"-interpreter",".interpreter", XrmoptionSepArg, (caddr_t) NULL},
-{"-gspalette", ".palette", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-#endif /* PS */
-{"-debug", ".debugLevel", XrmoptionSepArg, (caddr_t) NULL},
-{"-version", ".version", XrmoptionNoArg, (caddr_t) "on"},
-{"+version", ".version", XrmoptionNoArg, (caddr_t) "off"},
-#ifdef HTEX
-{"-underlink", ".underLink", XrmoptionNoArg, (caddr_t) "on"},
-{"+underlink", ".underLink", XrmoptionNoArg, (caddr_t) "off"},
-{"-browser", ".wwwBrowser", XrmoptionSepArg, (caddr_t) NULL},
-{"-base", ".urlBase", XrmoptionSepArg, (caddr_t) NULL},
-#endif
-/* BEGIN CHUNK xdvi.c 2 */
-#ifdef SRC_SPECIALS
-{"-srcSpecialFormat", ".srcSpecialFormat", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcJumpButton", ".srcJumpButton", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcTickShape", ".srcTickShape", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcTickSize", ".srcTickSize", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcCursor", ".srcCursor", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcEditorCommand", ".srcEditorCommand", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcVerbosity", ".srcVerbosity", XrmoptionSepArg, (caddr_t) NULL},
-{"-srcVisibility", ".srcVisibility", XrmoptionNoArg, (caddr_t) "on"},
-{"+srcVisibility", ".srcVisibility", XrmoptionNoArg, (caddr_t) "off"},
-{"-srcMode", ".srcMode", XrmoptionNoArg, (caddr_t) "on"},
-{"+srcMode", ".srcMode", XrmoptionNoArg, (caddr_t) "off"},
-#endif
-/* END CHUNK xdvi.c 2 */
-};
-
-#define offset(field) XtOffsetOf(struct _resource, field)
-
-static int base_tick_length = 4;
-
-static char XtRBool3[] = "Bool3"; /* resource for Bool3 */
-
-static XtResource application_resources[] = {
-#if CFGFILE
-{"name", "Name", XtRString, sizeof(char *),
- offset(progname), XtRString, (caddr_t) NULL},
-#endif
-{"shrinkFactor", "ShrinkFactor", XtRInt, sizeof(int),
- offset(shrinkfactor), XtRImmediate, (XtPointer) SHRINK},
-/* offset(shrinkfactor), XtRString, SHRINK}, */
-{"delayRulers", "DelayRulers", XtRBoolean, sizeof(Boolean),
- offset(_delay_rulers), XtRString, "true"},
-{"densityPercent", "DensityPercent", XtRInt, sizeof(int),
- offset(_density), XtRString, "40"},
-#ifdef GREY
-{"gamma", "Gamma", XtRFloat, sizeof(float),
- offset(_gamma), XtRString, "1"},
-#endif
-{"pixelsPerInch", "PixelsPerInch", XtRInt, sizeof(int),
- offset(_pixels_per_inch), XtRImmediate, (XtPointer) BDPI},
-{"sideMargin", "Margin", XtRString, sizeof(char *),
- offset(sidemargin), XtRString, (caddr_t) NULL},
-{"tickLength", "TickLength", XtRInt, sizeof(int),
- offset(_tick_length), XtRInt, (caddr_t) &base_tick_length},
-{"tickUnits", "TickUnits", XtRString, sizeof(char *),
- offset(_tick_units), XtRString, "pt"},
-{"topMargin", "Margin", XtRString, sizeof(char *),
- offset(topmargin), XtRString, (caddr_t) NULL},
-{"xOffset", "Offset", XtRString, sizeof(char *),
- offset(xoffset), XtRString, (caddr_t) NULL},
-{"yOffset", "Offset", XtRString, sizeof(char *),
- offset(yoffset), XtRString, (caddr_t) NULL},
-{"paper", "Paper", XtRString, sizeof(char *),
- offset(paper), XtRString, (caddr_t) DEFAULT_PAPER},
-{"altFont", "AltFont", XtRString, sizeof(char *),
- offset(_alt_font), XtRString, (caddr_t) ALTFONT},
-{"makePk", "MakePk", XtRBoolean, sizeof(Boolean),
- offset(makepk), XtRString,
-#if MAKE_TEX_PK_BY_DEFAULT
- "true"
-#else
- "false"
-#endif
- },
-{"mfMode", "MfMode", XtRString, sizeof(char *),
- offset(mfmode), XtRString, MFMODE},
-{"listFonts", "ListFonts", XtRBoolean, sizeof(Boolean),
- offset(_list_fonts), XtRString, "false"},
-{"reverseVideo", "ReverseVideo", XtRBoolean, sizeof(Boolean),
- offset(reverse), XtRString, "false"},
-{"warnSpecials", "WarnSpecials", XtRBoolean, sizeof(Boolean),
- offset(_warn_spec), XtRString, "false"},
-{"hushLostChars", "Hush", XtRBoolean, sizeof(Boolean),
- offset(_hush_chars), XtRString, "false"},
-{"hushChecksums", "Hush", XtRBoolean, sizeof(Boolean),
- offset(_hush_chk), XtRString, "false"},
-{"safer", "Safer", XtRBoolean, sizeof(Boolean),
- offset(safer), XtRString, "false"},
-#ifdef VMS
-{"foreground", "Foreground", XtRString, sizeof(char *),
- offset(fore_color), XtRString, (caddr_t) NULL},
-{"background", "Background", XtRString, sizeof(char *),
- offset(back_color), XtRString, (caddr_t) NULL},
-#endif
-{"iconGeometry", "IconGeometry", XtRString, sizeof(char *),
- offset(icon_geometry), XtRString, (caddr_t) NULL},
-{"keepPosition", "KeepPosition", XtRBoolean, sizeof(Boolean),
- offset(keep_flag), XtRString, "false"},
-#if PS
-{"postscript", "Postscript", XtRBoolean, sizeof(Boolean),
- offset(_postscript), XtRString, "true"},
-{"prescan", "Prescan", XtRBoolean, sizeof(Boolean),
- offset(prescan), XtRString, "true"},
-{"allowShell", "AllowShell", XtRBoolean, sizeof(Boolean),
- offset(allow_shell), XtRString, "false"},
-#ifdef PS_DPS
-{"dps", "DPS", XtRBoolean, sizeof(Boolean),
- offset(useDPS), XtRString, "true"},
-#endif
-#ifdef PS_NEWS
-{"news", "News", XtRBoolean, sizeof(Boolean),
- offset(useNeWS), XtRString, "true"},
-#endif
-#ifdef PS_GS
-{"ghostscript", "Ghostscript", XtRBoolean, sizeof(Boolean),
- offset(useGS), XtRString, "true"},
-{"gsSafer", "Safer", XtRBoolean, sizeof(Boolean),
- offset(gs_safer), XtRString, "true"},
-{"gsAlpha", "Alpha", XtRBoolean, sizeof(Boolean),
- offset(gs_alpha), XtRString, "false"},
-{"interpreter", "Interpreter", XtRString, sizeof(char *),
- offset(gs_path), XtRString, (caddr_t) GS_PATH},
-{"palette", "Palette", XtRString, sizeof(char *),
- offset(gs_palette), XtRString, (caddr_t) "Color"},
-#endif
-#endif /* PS */
-{"copy", "Copy", XtRBoolean, sizeof(Boolean),
- offset(copy), XtRString, "false"},
-{"thorough", "Thorough", XtRBoolean, sizeof(Boolean),
- offset(thorough), XtRString, "false"},
-{"debugLevel", "DebugLevel", XtRString, sizeof(char *),
- offset(debug_arg), XtRString, (caddr_t) NULL},
-{"version", "Version", XtRBoolean, sizeof(Boolean),
- offset(version_flag), XtRString, "false"},
-#ifdef BUTTONS
-{"expert", "Expert", XtRBoolean, sizeof(Boolean),
- offset(expert), XtRString, "false"},
-{"shrinkButton1", "ShrinkButton1", XtRInt, sizeof(int),
- offset(shrinkbutton[0]), XtRImmediate, (XtPointer) 0},
-{"shrinkButton2", "ShrinkButton2", XtRInt, sizeof(int),
- offset(shrinkbutton[1]), XtRImmediate, (XtPointer) 0},
-{"shrinkButton3", "ShrinkButton3", XtRInt, sizeof(int),
- offset(shrinkbutton[2]), XtRImmediate, (XtPointer) 0},
-{"shrinkButton4", "ShrinkButton4", XtRInt, sizeof(int),
- offset(shrinkbutton[3]), XtRImmediate, (XtPointer) 0},
-#endif
-{"magnifierSize1", "MagnifierSize", XtRString, sizeof(char *),
- offset(mg_arg[0]), XtRString, (caddr_t) NULL},
-{"magnifierSize2", "MagnifierSize", XtRString, sizeof(char *),
- offset(mg_arg[1]), XtRString, (caddr_t) NULL},
-{"magnifierSize3", "MagnifierSize", XtRString, sizeof(char *),
- offset(mg_arg[2]), XtRString, (caddr_t) NULL},
-{"magnifierSize4", "MagnifierSize", XtRString, sizeof(char *),
- offset(mg_arg[3]), XtRString, (caddr_t) NULL},
-{"magnifierSize5", "MagnifierSize", XtRString, sizeof(char *),
- offset(mg_arg[4]), XtRString, (caddr_t) NULL},
-#ifdef GREY
-{"grey", "Grey", XtRBoolean, sizeof(Boolean),
- offset(_use_grey), XtRString, "true"},
-{"install", "Install", XtRBool3, sizeof(Bool3),
- offset(install), XtRString, "maybe"},
-#endif
-#ifdef GRID
-{"grid1Color", "Grid1Color", XtRPixel, sizeof(Pixel),
- offset(_grid1_Pixel), XtRPixel, (caddr_t) &resource._grid1_Pixel},
-{"grid1Color", "Grid1Color", XtRString, sizeof(char *),
- offset(grid1_color), XtRString, (caddr_t) NULL},
-{"grid2Color", "Grid2Color", XtRPixel, sizeof(Pixel),
- offset(_grid2_Pixel), XtRPixel, (caddr_t) &resource._grid2_Pixel},
-{"grid2Color", "Grid2Color", XtRString, sizeof(char *),
- offset(grid2_color), XtRString, (caddr_t) NULL},
-{"grid3Color", "Grid3Color", XtRPixel, sizeof(Pixel),
- offset(_grid3_Pixel), XtRPixel, (caddr_t) &resource._grid3_Pixel},
-{"grid3Color", "Grid3Color", XtRString, sizeof(char *),
- offset(grid3_color), XtRString, (caddr_t) NULL},
-#endif /* GRID */
-#ifdef HTEX
-{"underLink", "UnderLink", XtRBoolean, sizeof(Boolean),
- offset(_underline_link), XtRString, (caddr_t) "true"},
-{"wwwBrowser", "WWWBrowser", XtRString, sizeof(char *),
- offset(_browser), XtRString, (caddr_t) NULL},
-{"urlBase", "URLBase", XtRString, sizeof(char *),
- offset(_URLbase), XtRString, (caddr_t) NULL},
-#endif
-/* BEGIN CHUNK xdvi.c 3 */
-#ifdef SRC_SPECIALS
-{"srcSpecialFormat", "SRCSpecialFormat", XtRInt, sizeof(int),
- offset(_src_specialFormat), XtRString, "1"},
-{"srcJumpButton", "SRCJumpButton", XtRInt, sizeof(int),
- offset(_src_jumpButton), XtRString, "2"},
-{"srcTickShape", "SRCTickShape", XtRInt, sizeof(int),
- offset(_src_tickShape), XtRString, "0"},
-{"srcTickSize", "SRCTickSize", XtRString, sizeof(char *),
- offset(_src_tickSize), XtRString, "40x70"},
-{"srcCursor", "SRCCursor", XtRInt, sizeof(int),
- offset(_src_cursor_shape), XtRString, "90"},
-{"srcEditorCommand", "SRCEditorCommand", XtRString, sizeof(char *),
- offset(_src_editorCommand), XtRString, "emacsclient --no-wait '+%u' '%s'"},
-{"srcVerbosity", "SRCVerbosity", XtRInt, sizeof(int),
- offset(_src_warn_verbosity), XtRString, "2"},
-{"srcVisibility", "SRCVisibility", XtRBoolean, sizeof(Boolean),
- offset(_src_tickVisibility), XtRString, "false"},
-{"srcMode", "SRCMode", XtRBoolean, sizeof(Boolean),
- offset(_src_evalMode), XtRString, "false"},
-#endif
-/* END CHUNK xdvi.c 3 */
-#ifdef GREY
-};
-
-static XtResource app_pixel_resources[] = { /* get these later */
-#endif /* GREY */
-{"foreground", "Foreground", XtRPixel, sizeof(Pixel),
- offset(_fore_Pixel), XtRString, XtDefaultForeground},
-{"background", "Background", XtRPixel, sizeof(Pixel),
- offset(_back_Pixel), XtRString, XtDefaultBackground},
-{"borderColor", "BorderColor", XtRPixel, sizeof(Pixel),
- offset(_brdr_Pixel), XtRPixel, (caddr_t) &resource._fore_Pixel},
-{"highlight", "Highlight", XtRPixel, sizeof(Pixel),
- offset(_hl_Pixel), XtRPixel, (caddr_t) &resource._fore_Pixel},
-{"cursorColor", "CursorColor", XtRPixel, sizeof(Pixel),
- offset(_cr_Pixel), XtRPixel, (caddr_t) &resource._fore_Pixel},
-};
-#undef offset
-
-static _Xconst char *usagestr[] = {
- /* shrinkFactor */ "shrink",
-#ifndef VMS
- /* S */ "density",
- /* density */ silent,
-#else
- /* density */ "density",
-#endif
-#ifdef GREY
- /* gamma */ "g",
-#endif
-#ifdef GRID
- /* grid1 */ "color",
- /* grid2 */ "color",
- /* grid3 */ "color",
-#endif /* GRID */
- /* p */ "pixels",
- /* margins */ "dimen",
- /* sidemargin */ "dimen",
- /* topmargin */ "dimen",
- /* offsets */ "dimen",
- /* xoffset */ "dimen",
- /* yoffset */ "dimen",
- /* paper */ "papertype",
- /* altfont */ "font",
- /* mfmode */ "mode-def",
- /* rv */ "^-l", "-rv",
-#ifdef BUTTONS
- /* shrinkbutton1 */ subst,
- /* shrinkbutton2 */ silent,
- /* shrinkbutton3 */ silent,
- /* shrinkbutton4 */ silent,
-#endif
- /* mgs */ subst,
- /* mgs1 */ silent,
- /* mgs2 */ silent,
- /* mgs3 */ silent,
- /* mgs4 */ silent,
- /* mgs5 */ silent,
- /* bw */ "^-safer", "-bw <width>",
- /* fg */ "color",
- /* foreground */ silent,
- /* bg */ "color",
- /* background */ silent,
- /* hl */ "color",
- /* bd */ "^-hl", "-bd <color>",
- /* cr */ "color",
-#ifndef VMS
- /* display */ "^-cr", "-display <host:display>",
-#else
- /* display */ "^-cr", "-display <host::display>",
-#endif
- /* geometry */ "^-cr", "-geometry <geometry>",
- /* icongeometry */ "geometry",
- /* iconic */ "^-icongeometry", "-iconic",
-#ifdef BUTTONS
- /* font */ "^-icongeometry", "-font <font>",
-#endif
-#ifdef PS_GS
- /* interpreter */ "path",
- /* gspalette */ "monochrome|grayscale|color",
-#endif
- /* debug */ "bitmask",
-#ifdef HTEX
- /* browser */ "WWWbrowser",
- /* URLbase */ "base URL",
-#endif
-/* BEGIN CHUNK xdvi.c 4 */
-#ifdef SRC_SPECIALS
- /* src_SpecialFormat */ "[0,1,2]",
- /* src_JumpButtons */ "button",
- /* src_TickShape */ "[0,1,2,3]",
- /* src_TickSize */ "geometry",
- /* src_Cursor */ "shape",
- /* src_EditorCommand */ "commandstring",
- /* src_verbosity */ "[0,1,2]",
- /* _src_tickVisibility */ silent,
- /* _src_evalMode */ silent,
-#endif
-/* END CHUNK xdvi.c 4 */
- /* [dummy] */ "z"
-};
-
-static char *TmpDir=NULL;
-
-#ifndef MOTIF
-
-#ifdef NOQUERY
-#define drawWidgetClass widgetClass
-#else
-
-/* ARGSUSED */
-static XtGeometryResult
-QueryGeometry(w, constraints, reply)
- Widget w;
- XtWidgetGeometry *constraints, *reply;
-{
- reply->request_mode = CWWidth | CWHeight;
- reply->width = page_w;
- reply->height = page_h;
- return XtGeometryAlmost;
-}
-
-#include <X11/IntrinsicP.h>
-#include <X11/CoreP.h>
-
-#ifdef lint
-WidgetClassRec widgetClassRec;
-#endif
-
- /* if the following gives you trouble, just compile with -DNOQUERY */
-static WidgetClassRec drawingWidgetClass = {
- {
- /* superclass */ &widgetClassRec,
- /* class_name */ "Draw",
- /* widget_size */ sizeof(WidgetRec),
- /* class_initialize */ NULL,
- /* class_part_initialize*/ NULL,
- /* class_inited */ FALSE,
- /* initialize */ NULL,
- /* initialize_hook */ NULL,
- /* realize */ XtInheritRealize,
- /* actions */ NULL,
- /* num_actions */ 0,
- /* resources */ NULL,
- /* num_resources */ 0,
- /* xrm_class */ NULLQUARK,
- /* compress_motion */ FALSE,
- /* compress_exposure */ TRUE,
- /* compress_enterleave*/ FALSE,
- /* visible_interest */ FALSE,
- /* destroy */ NULL,
- /* resize */ XtInheritResize,
- /* expose */ XtInheritExpose,
- /* set_values */ NULL,
- /* set_values_hook */ NULL,
- /* set_values_almost */ XtInheritSetValuesAlmost,
- /* get_values_hook */ NULL,
- /* accept_focus */ XtInheritAcceptFocus,
- /* version */ XtVersion,
- /* callback_offsets */ NULL,
- /* tm_table */ XtInheritTranslations,
- /* query_geometry */ QueryGeometry,
- /* display_accelerator */ XtInheritDisplayAccelerator,
- /* extension */ NULL
- }
-};
-
-#define drawWidgetClass &drawingWidgetClass
-
-#endif /* NOQUERY */
-#endif /* MOTIF */
-
-static Arg vport_args[] = {
-#ifndef MOTIF
-#ifdef BUTTONS
- {XtNborderWidth, (XtArgVal) 0},
- {XtNtop, (XtArgVal) XtChainTop},
- {XtNbottom, (XtArgVal) XtChainBottom},
- {XtNleft, (XtArgVal) XtChainLeft},
- {XtNright, (XtArgVal) XtChainRight},
-#endif
- {XtNallowHoriz, (XtArgVal) True},
- {XtNallowVert, (XtArgVal) True},
-#else /* MOTIF */
- {XmNscrollingPolicy, (XtArgVal) XmAUTOMATIC},
- {XmNborderWidth, (XtArgVal) 0},
- {XmNleftAttachment, (XtArgVal) XmATTACH_FORM},
- {XmNtopAttachment, (XtArgVal) XmATTACH_FORM},
- {XmNbottomAttachment, (XtArgVal) XmATTACH_FORM},
- {XmNrightAttachment, (XtArgVal) XmATTACH_FORM},
-#endif /* MOTIF */
-};
-
-static Arg draw_args[] = {
-#ifndef MOTIF
- {XtNwidth, (XtArgVal) 0},
- {XtNheight, (XtArgVal) 0},
- {XtNx, (XtArgVal) 0},
- {XtNy, (XtArgVal) 0},
- {XtNlabel, (XtArgVal) ""},
-#else /* MOTIF */
- {XmNwidth, (XtArgVal) 0},
- {XmNheight, (XtArgVal) 0},
- {XmNbottomAttachment, (XtArgVal) XmATTACH_WIDGET},
-#endif /* MOTIF */
-};
-
-#ifdef BUTTONS
-static Arg form_args[] = {
-#ifndef MOTIF
- {XtNdefaultDistance, (XtArgVal) 0},
-#else /* MOTIF */
- {XmNhorizontalSpacing, (XtArgVal) 0},
- {XmNverticalSpacing, (XtArgVal) 0},
-#endif /* MOTIF */
-};
-#endif
-
-#ifdef HTEX
-
-static Arg pane_args[] = {
- {XtNorientation, (XtArgVal) XtorientVertical},
-};
-
-/* Create the anchor information stuff at the bottom of the page */
-
-/* Anchor search: a dialog box */
-char anchorsearchstring[1024];
-char anchorask[] = "Access new URL:";
-static Arg anchorsearch_args[] = {
- {XtNwidth, (XtArgVal) 500},
- {XtNheight, (XtArgVal) 70},
- {XtNlabel, (XtArgVal) anchorask},
- {XtNvalue, (XtArgVal) anchorsearchstring},
- {XtNmin, (XtArgVal) 70},
- {XtNscrollHorizontal, (XtArgVal) XawtextScrollWhenNeeded},
-};
-
-/* anchorinfo = Ascii text widget */
-static Arg anchorinfo_args[] = {
- {XtNwidth, (XtArgVal) 500},
- {XtNheight, (XtArgVal) 20},
- {XtNstring, (XtArgVal) ""},
- {XtNmin, (XtArgVal) 20},
- {XtNscrollVertical, (XtArgVal) XawtextScrollWhenNeeded},
- {XtNscrollHorizontal, (XtArgVal) XawtextScrollWhenNeeded},
-};
-
-#endif
-
-#else /* not TOOLKIT */
-
-static char *display;
-static char *geometry;
-static char *margins;
-static char *offsets;
-static Boolean hush;
-static Boolean iconic = False;
-
-#define ADDR(x) (caddr_t) &resource.x
-
-static struct option {
- _Xconst char *name;
- _Xconst char *resource;
- enum {FalseArg, TrueArg, StickyArg, SepArg}
- argclass;
- enum {BooleanArg, Bool3Arg, StringArg, NumberArg, FloatArg}
- argtype;
- int classcount;
- _Xconst char *usagestr;
- caddr_t address;
-} options[] = {
-{"+", NULL, StickyArg, StringArg, 1,
- NULL, (caddr_t) &curr_page},
-{"-s", "shrinkFactor", SepArg, NumberArg, 1,
- "shrink", (caddr_t) &shrink_factor},
-#ifndef VMS
-{"-S", NULL, SepArg, NumberArg, 2,
- "density", ADDR(_density)},
-{"-density", "densityPercent", SepArg, NumberArg, 1,
- silent, ADDR(_density)},
-#else
-{"-density", "densityPercent", SepArg, NumberArg, 1,
- "density", ADDR(_density)},
-#endif
-#ifdef GREY
-{"-nogrey", NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(_use_grey)},
-{"+nogrey", "grey", TrueArg, BooleanArg, 1,
- NULL, ADDR(_use_grey)},
-{"-gamma", "gamma", SepArg, FloatArg, 1,
- "g", ADDR(_gamma)},
-{"-install", NULL, TrueArg, Bool3Arg, 2,
- NULL, ADDR(install)},
-{"-noinstall", "install", FalseArg, Bool3Arg, 1,
- NULL, ADDR(install)},
-#endif
-#ifdef GRID
-{"-grid1", "grid1Color", SepArg, StringArg, 1,
- "color", ADDR(grid1_color)},
-{"-grid2", "grid2Color", SepArg, StringArg, 1,
- "color", ADDR(grid2_color)},
-{"-grid3", "grid3Color", SepArg, StringArg, 1,
- "color", ADDR(grid3_color)},
-#endif /* GRID */
-{"-p", "pixelsPerInch", SepArg, NumberArg, 1,
- "pixels", ADDR(_pixels_per_inch)},
-{"-margins", "Margin", SepArg, StringArg, 3,
- "dimen", (caddr_t) &margins},
-{"-sidemargin", "sideMargin", SepArg, StringArg, 1,
- "dimen", ADDR(sidemargin)},
-{"-topmargin", "topMargin", SepArg, StringArg, 1,
- "dimen", ADDR(topmargin)},
-{"-offsets", "Offset", SepArg, StringArg, 3,
- "dimen", (caddr_t) &offsets},
-{"-xoffset", "xOffset", SepArg, StringArg, 1,
- "dimen", ADDR(xoffset)},
-{"-yoffset", "yOffset", SepArg, StringArg, 1,
- "dimen", ADDR(yoffset)},
-{"-paper", "paper", SepArg, StringArg, 1,
- "papertype", ADDR(paper)},
-{"-altfont", "altFont", SepArg, StringArg, 1,
- "font", ADDR(_alt_font)},
-{"-nomakepk", "makePk", FalseArg, BooleanArg, 2,
- NULL, ADDR(makepk)},
-{"+nomakepk", "makePk", TrueArg, BooleanArg, 1,
- NULL, ADDR(makepk)},
-{"-mfmode", "mfMode", SepArg, StringArg, 1,
- "mode-def", ADDR(mfmode)},
-{"-l", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_list_fonts)},
-{"+l", "listFonts", FalseArg, BooleanArg, 1,
- NULL, ADDR(_list_fonts)},
-{"-rv", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(reverse)},
-{"+rv", "reverseVideo", FalseArg, BooleanArg, 1,
- NULL, ADDR(reverse)},
-{"-mgs", NULL, SepArg, StringArg, 2,
- subst, ADDR(mg_arg[0])},
-{"-mgs1", "magnifierSize1",SepArg, StringArg, 1,
- silent, ADDR(mg_arg[0])},
-{"-mgs2", "magnifierSize2",SepArg, StringArg, 1,
- silent, ADDR(mg_arg[1])},
-{"-mgs3", "magnifierSize3",SepArg, StringArg, 1,
- silent, ADDR(mg_arg[2])},
-{"-mgs4", "magnifierSize4",SepArg, StringArg, 1,
- silent, ADDR(mg_arg[3])},
-{"-mgs5", "magnifierSize5",SepArg, StringArg, 1,
- silent, ADDR(mg_arg[4])},
-{"-warnspecials", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_warn_spec)},
-{"+warnspecials", "warnSpecials", FalseArg, BooleanArg, 1,
- NULL, ADDR(_warn_spec)},
-{"-hush", NULL, TrueArg, BooleanArg, 6,
- NULL, (caddr_t) &hush},
-{"+hush", "Hush", FalseArg, BooleanArg, 5,
- NULL, (caddr_t) &hush},
-{"-hushchars", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_hush_chars)},
-{"+hushchars", "hushLostChars", FalseArg, BooleanArg, 1,
- NULL, ADDR(_hush_chars)},
-{"-hushchecksums", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_hush_chk)},
-{"+hushchecksums","hushChecksums", FalseArg, BooleanArg, 1,
- NULL, ADDR(_hush_chk)},
-{"-safer", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(safer)},
-{"+safer", "safer", FalseArg, BooleanArg, 1,
- NULL, ADDR(safer)},
-{"-bw", NULL, SepArg, NumberArg, 2,
- "width", (caddr_t) &bwidth},
-{"-borderwidth", "borderWidth", SepArg, NumberArg, 1,
- silent, (caddr_t) &bwidth},
-{"-fg", NULL, SepArg, StringArg, 2,
- "color", ADDR(fore_color)},
-{"-foreground", "foreground", SepArg, StringArg, 1,
- silent, ADDR(fore_color)},
-{"-bg", NULL, SepArg, StringArg, 2,
- "color", ADDR(back_color)},
-{"-background", "background", SepArg, StringArg, 1,
- silent, ADDR(back_color)},
-{"-hl", "highlight", SepArg, StringArg, 1,
- "color", (caddr_t) &high_color},
-{"-bd", NULL, SepArg, StringArg, 2,
- "color", (caddr_t) &brdr_color},
-{"-bordercolor","borderColor", SepArg, StringArg, 1,
- silent, (caddr_t) &brdr_color},
-{"-cr", "cursorColor", SepArg, StringArg, 1,
- "color", (caddr_t) &curs_color},
-#ifndef VMS
-{"-display", NULL, SepArg, StringArg, 1,
- "host:display", (caddr_t) &display},
-#else
-{"-display", NULL, SepArg, StringArg, 1,
- "host::display", (caddr_t) &display},
-#endif
-{"-geometry", "geometry", SepArg, StringArg, 1,
- "geometry", (caddr_t) &geometry},
-{"-icongeometry","iconGeometry",StickyArg, StringArg, 1,
- "geometry", ADDR(icon_geometry)},
-{"-iconic", NULL, TrueArg, BooleanArg, 2,
- NULL, (caddr_t) &iconic},
-{"+iconic", "iconic", FalseArg, BooleanArg, 1,
- NULL, (caddr_t) &iconic},
-{"-keep", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(keep_flag)},
-{"+keep", "keepPosition", FalseArg, BooleanArg, 1,
- NULL, ADDR(keep_flag)},
-{"-copy", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(copy)},
-{"+copy", "copy", FalseArg, BooleanArg, 1,
- NULL, ADDR(copy)},
-{"-thorough", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(thorough)},
-{"+thorough", "thorough", FalseArg, BooleanArg, 1,
- NULL, ADDR(thorough)},
-#if PS
-{"-nopostscript", NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(_postscript)},
-{"+nopostscript", "postscript", TrueArg, BooleanArg, 1,
- NULL, ADDR(_postscript)},
-{"-noscan", NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(prescan)},
-{"+noscan", "prescan", TrueArg, BooleanArg, 1,
- NULL, ADDR(prescan)},
-{"-allowshell", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(allow_shell)},
-{"+allowshell", "allowShell", FalseArg, BooleanArg, 1,
- NULL, ADDR(allow_shell)},
-#ifdef PS_DPS
-{"-nodps", NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(useDPS)},
-{"+nodps", "dps", TrueArg, BooleanArg, 1,
- NULL, ADDR(useDPS)},
-#endif
-#ifdef PS_NEWS
-{"-nonews", NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(useNeWS)},
-{"+nonews", "news", TrueArg, BooleanArg, 1,
- NULL, ADDR(useNeWS)},
-#endif
-#ifdef PS_GS
-{"-noghostscript",NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(useGS)},
-{"+noghostscript","ghostscript", TrueArg, BooleanArg, 1,
- NULL, ADDR(useGS)},
-{"-nogssafer", NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(gs_safer)},
-{"+nogssafer", "gsSafer", TrueArg, BooleanArg, 1,
- NULL, ADDR(gs_safer)},
-{"-nogsalpha", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(gs_alpha)},
-{"+nogsalpha", "gsAlpha", FalseArg, BooleanArg, 1,
- NULL, ADDR(gs_alpha)},
-{"-interpreter", "interpreter", SepArg, StringArg, 1,
- "path", ADDR(gs_path)},
-{"-gspalette", "palette", SepArg, StringArg, 1,
- "monochrome|grayscale|color", ADDR(gs_palette)},
-#endif
-#endif /* PS */
-{"-debug", "debugLevel", SepArg, StringArg, 1,
- "bitmask", ADDR(debug_arg)},
-{"-version", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(version_flag)},
-{"+version", "version", FalseArg, BooleanArg, 1,
- NULL, ADDR(version_flag)},
-#ifdef HTEX
-{"-underlink", "underLink", TrueArg, BooleanArg, 2,
- NULL, ADDR(_underline_link)},
-{"+underlink", "underLink", FalseArg, BooleanArg, 1,
- NULL, ADDR(_underline_link)},
-{"-browser", "wwwBrowser", SepArg, StringArg, 1, ADDR(_browser)},
-{"-base", "urlBase", SepArg, StringArg, 1, ADDR(_URLbase)},
-#endif
-/* BEGIN CHUNK xdvi.c 5 */
-#ifdef SRC_SPECIALS
-{"-srcSpecialFormat", "srcSpecialFormat", SepArg, NumberArg, 1, "[0,1,2]", (caddr_t)&src_specialFormat},
-{"-srcJumpButton", "srcJumpButton", SepArg, NumberArg, 1, "button", (caddr_t)&src_jumpButton},
-{"-srcTickShape", "srcTickShape", SepArg, NumberArg, 1, "[0,1,2,3]", (caddr_t)&src_tickShape},
-{"-srcTickSize", "srcTickSize", SepArg, StringArg, 1, "geometry", "40x70"},
-{"-srcCursor", "srcCursor", SepArg, NumberArg, 1, "shape", (caddr_t)&src_cursor_shape},
-{"-srcEditorCommand", "srcEditorCommand", SepArg, StringArg, 1, "commandstring", (caddr_t)&src_editorCommand},
-{"-srcVerbosity", "srcVerbosity", SepArg, NumberArg, 1, "[0,1,2]", (caddr_t)&src_warn_verbosity},
-{"-srcVisibility", "srcVisibility", TrueArg, BooleanArg, 2, NULL, ADDR(_src_tickVisibility)},
-{"+srcVisibility", "srcVisibility", FalseArg, BooleanArg, 1, NULL, ADDR(_src_tickVisibility)},
-{"-srcMode", "srcMode", TrueArg, BooleanArg, 2, NULL, ADDR(_src_evalMode)},
-{"+srcMode", "srcMode", FalseArg, BooleanArg, 1, NULL, ADDR(_src_evalMode)},
-#endif
-/* END CHUNK xdvi.c 5 */
-};
-
-#endif /* not TOOLKIT */
-
-static NORETURN void
-usage() {
-#ifdef TOOLKIT
- XrmOptionDescRec *opt;
- _Xconst char **usageptr = usagestr;
-#else
- struct option *opt;
-#endif
- _Xconst char **sv = subst_val;
- _Xconst char *str1;
- _Xconst char *str2;
- int col = 23;
- int n;
-
-#ifdef Omega
- Fputs("Usage: oxdvi [+[<page>]]", stderr);
-#else
- Fputs("Usage: xdvi [+[<page>]]", stderr);
-#endif
- for (opt = options; opt < options + XtNumber(options); ++opt) {
-#ifdef TOOLKIT
- str1 = opt->option;
- if (*str1 != '-') continue;
- str2 = NULL;
- if (opt->argKind != XrmoptionNoArg) {
- str2 = *usageptr++;
- if (str2 == silent) continue;
- if (str2 == subst) {
- str1 = *sv++;
- str2 = NULL;
- }
- }
- for (;;) {
- n = strlen(str1) + 3;
- if (str2 != NULL) n += strlen(str2) + 3;
- if (col + n < 80) Putc(' ', stderr);
- else {
- Fputs("\n\t", stderr);
- col = 8 - 1;
- }
- if (str2 == NULL)
- Fprintf(stderr, "[%s]", str1);
- else
- Fprintf(stderr, "[%s <%s>]", str1, str2);
- col += n;
- if (**usageptr != '^'
- || strcmp(*usageptr + 1, opt->option) != 0) break;
- ++usageptr;
- str1 = *usageptr++;
- str2 = NULL;
- }
-#else /* not TOOLKIT */
- str1 = opt->name;
- str2 = opt->usagestr;
- if (*str1 != '-' || str2 == silent) continue;
- if (str2 == subst) {
- str1 = *sv++;
- str2 = NULL;
- }
- n = strlen(str1) + 3;
- if (str2 != NULL) n += strlen(str2) + 3;
- if (col + n < 80) Putc(' ', stderr);
- else {
- Fputs("\n\t", stderr);
- col = 8 - 1;
- }
- if (str2 == NULL)
- Fprintf(stderr, "[%s]", str1);
- else
- Fprintf(stderr, "[%s <%s>]", str1, str2);
- col += n;
-#endif /* not TOOLKIT */
- }
- if (col + 9 < 80) Putc(' ', stderr);
- else Fputs("\n\t", stderr);
-#ifdef SELFILE
- Fputs("[dvi_file]\n", stderr);
-#else
- Fputs("dvi_file\n", stderr);
-#endif
- exit(1);
-}
-
-static int
-atopix(arg)
- _Xconst char *arg;
-{
- int len = strlen(arg);
- _Xconst char *arg_end = arg;
- char tmp[11];
- double factor;
-
- while ((*arg_end >= '0' && *arg_end <= '9') || *arg_end == '.')
- if (arg_end >= arg + XtNumber(tmp) - 1) return 0;
- else ++arg_end;
- bcopy(arg, tmp, arg_end - arg);
- tmp[arg_end - arg] = '\0';
-
-#if A4
- factor = 1.0 / 2.54; /* cm */
-#else
- factor = 1.0; /* inches */
-#endif
- if (len > 2)
- switch (arg[len - 2] << 8 | arg[len - 1]) {
-#if A4
- case 'i' << 8 | 'n': factor = 1.0; break;
-#else
- case 'c' << 8 | 'm': factor = 1.0 / 2.54; break;
-#endif
- case 'm' << 8 | 'm': factor = 1.0 / 25.4; break;
- case 'p' << 8 | 't': factor = 1.0 / 72.27; break;
- case 'p' << 8 | 'c': factor = 12.0 / 72.27; break;
- case 'b' << 8 | 'p': factor = 1.0 / 72.0; break;
- case 'd' << 8 | 'd': factor = 1238.0 / 1157.0 / 72.27; break;
- case 'c' << 8 | 'c': factor = 12 * 1238.0 / 1157.0 / 72.27;
- break;
- case 's' << 8 | 'p': factor = 1.0 / 72.27 / 65536; break;
- }
-
- return factor * atof(tmp) * pixels_per_inch + 0.5;
-}
-
-#ifdef GRID
-/* extract the unit used in paper size specification */
-/* the information is used to decide the initial grid separation */
-static int
-atopixunit(arg)
- _Xconst char *arg;
-{
- int len = strlen(arg);
-
- return (len > 2 && arg[len - 2] == 'c' && arg[len - 1] == 'm' ?
- 1.0 / 2.54 : 1.0) * pixels_per_inch + 0.5;
-}
-#endif /* GRID */
-
-/**
- ** Main programs start here.
- **/
-
-#ifdef TOOLKIT
-
-#ifdef GREY
-static Arg temp_args1[] = {
- {XtNdepth, (XtArgVal) 0},
- {XtNvisual, (XtArgVal) 0},
- {XtNcolormap, (XtArgVal) 0},
-};
-#define temp_args1a (temp_args1 + 2)
-#endif
-
-static Arg temp_args2[] = {
- {XtNiconX, (XtArgVal) 0},
- {XtNiconY, (XtArgVal) 0},
-};
-
-static Arg temp_args3 = {XtNborderWidth, (XtArgVal) &bwidth};
-
-static Pixmap icon_pm;
-static Arg temp_args4 = {XtNiconPixmap, (XtArgVal) &icon_pm};
-
-static Arg temp_args5[] = {
- {XtNtitle, (XtArgVal) 0},
- {XtNiconName, (XtArgVal) 0},
- {XtNinput, (XtArgVal) True},
-};
-
-static Arg set_wh_args[] = {
- {XtNwidth, (XtArgVal) 0},
- {XtNheight, (XtArgVal) 0},
-};
-
-
-#ifdef GREY
-
-/*
- * Alternate routine to convert color name to Pixel (needed to substitute
- * "black" or "white" for BlackPixelOfScreen, etc., since a different
- * visual and colormap are in use).
- */
-
-#if XtSpecificationRelease >= 5
-
-/*ARGSUSED*/
-static Boolean
-XdviCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret)
- Display *dpy;
- XrmValuePtr args;
- Cardinal *num_args;
- XrmValuePtr fromVal;
- XrmValuePtr toVal;
- XtPointer *closure_ret;
-{
- XrmValue replacement_val;
- Boolean default_is_fg;
-
- if ((strcmp((String) fromVal->addr, XtDefaultForeground) == 0
- && (default_is_fg = True))
- || (strcmp((String) fromVal->addr, XtDefaultBackground) == 0
- && ((default_is_fg = False), True))) {
- replacement_val.size = sizeof(String);
- replacement_val.addr = (default_is_fg == resource.reverse)
- ? "white" : "black";
- fromVal = &replacement_val;
- }
-
- return
- XtCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret);
-}
-
-#else /* XtSpecificationRelease < 5 */
-
-/*
- * Copied from the X11R4 source code.
- */
-
-#define done(type, value) \
- { \
- if (toVal->addr != NULL) { \
- if (toVal->size < sizeof(type)) { \
- toVal->size = sizeof(type); \
- return False; \
- } \
- *(type*)(toVal->addr) = (value); \
- } \
- else { \
- static type static_val; \
- static_val = (value); \
- toVal->addr = (XtPointer)&static_val; \
- } \
- toVal->size = sizeof(type); \
- return True; \
- }
-
-static Boolean
-XdviCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret)
- Display* dpy;
- XrmValuePtr args;
- Cardinal *num_args;
- XrmValuePtr fromVal;
- XrmValuePtr toVal;
- XtPointer *closure_ret;
-{
- String str = (String)fromVal->addr;
- XColor screenColor;
- XColor exactColor;
- Screen *screen;
- Colormap colormap;
- Status status;
- String params[1];
- Cardinal num_params=1;
-
- if (*num_args != 2)
- XtErrorMsg("wrongParameters", "cvtStringToPixel",
- "XtToolkitError",
- "String to pixel conversion needs screen and colormap arguments",
- (String *)NULL, (Cardinal *)NULL);
-
- screen = *((Screen **) args[0].addr);
- colormap = *((Colormap *) args[1].addr);
-
- if (strcmp(str, XtDefaultBackground) == 0) {
- *closure_ret = False;
- str = (resource.reverse ? "black" : "white");
- }
- else if (strcmp(str, XtDefaultForeground) == 0) {
- *closure_ret = False;
- str = (resource.reverse ? "white" : "black");
- }
-
- if (*str == '#') { /* some color rgb definition */
-
- status = XParseColor(DisplayOfScreen(screen), colormap,
- (char*)str, &screenColor);
-
- if (status != 0)
- status = XAllocColor(DisplayOfScreen(screen), colormap,
- &screenColor);
- } else /* some color name */
-
- status = XAllocNamedColor(DisplayOfScreen(screen), colormap,
- (char*)str, &screenColor, &exactColor);
- if (status == 0) {
- params[0] = str;
- XtWarningMsg("noColormap", "cvtStringToPixel",
- "XtToolkitError",
- "Cannot allocate colormap entry for \"%s\"",
- params,&num_params);
- return False;
- } else {
- *closure_ret = (char*)True;
- done(Pixel, screenColor.pixel);
- }
-}
-#undef done
-
-#endif /* XtSpecificationRelease < 5 */
-
-/*
- * Convert string to yes/no/maybe. Adapted from the X toolkit.
- */
-
-/*ARGSUSED*/
-Boolean XdviCvtStringToBool3(dpy, args, num_args, fromVal, toVal, closure_ret)
- Display *dpy;
- XrmValuePtr args;
- Cardinal *num_args;
- XrmValuePtr fromVal;
- XrmValuePtr toVal;
- XtPointer *closure_ret;
-{
- String str = (String)fromVal->addr;
- static Bool3 value;
-
- if ( memicmp(str, "true", 5) == 0
- || memicmp(str, "yes", 4) == 0
- || memicmp(str, "on", 3) == 0
- || memicmp(str, "1", 2) == 0) value = True;
-
- else if (memicmp(str, "false", 6) == 0
- || memicmp(str, "no", 3) == 0
- || memicmp(str, "off", 4) == 0
- || memicmp(str, "0", 2) == 0) value = False;
-
- else if (memicmp(str, "maybe", 6) == 0) value = Maybe;
-
- else {
- XtDisplayStringConversionWarning(dpy, str, XtRBoolean);
- return False;
- }
-
- if (toVal->addr != NULL) {
- if (toVal->size < sizeof(Bool3)) {
- toVal->size = sizeof(Bool3);
- return False;
- }
- *(Bool3 *)(toVal->addr) = value;
- }
- else toVal->addr = (XPointer) &value;
-
- toVal->size = sizeof(Bool3);
- return True;
-}
-
-#endif /* GREY */
-
-#else /* not TOOLKIT */
-
-struct _resource resource = {
- /* density */ 40,
-#ifdef GREY
- /* gamma */ 1.0,
-#endif
- /* pixels_per_inch */ BDPI,
- /* _delay_rulers */ True,
- /* _tick_length */ 4,
- /* _tick_units */ "pt",
- /* sidemargin */ NULL,
- /* topmargin */ NULL,
- /* xoffset */ NULL,
- /* yoffset */ NULL,
- /* paper */ DEFAULT_PAPER,
- /* alt_font */ ALTFONT,
- /* makepk */ MAKE_TEX_PK_BY_DEFAULT,
- /* mfmode */ MFMODE,
- /* list_fonts */ False,
- /* reverse */ False,
- /* warn_spec */ False,
- /* hush_chars */ False,
- /* hush_chk */ False,
- /* safer */ False,
- /* fore_color */ NULL,
- /* back_color */ NULL,
- /* fore_Pixel */ (Pixel) 0,
- /* back_Pixel */ (Pixel) 0,
- /* icon_geometry */ NULL,
- /* keep_flag */ False,
- /* copy */ False,
- /* thorough */ False,
-#if PS
- /* postscript */ True,
- /* prescan */ True,
- /* allow_shell */ False,
-#ifdef PS_DPS
- /* useDPS */ True,
-#endif
-#ifdef PS_NEWS
- /* useNeWS */ True,
-#endif
-#ifdef PS_GS
- /* useGS */ True,
- /* gs_safer */ True,
- /* gs_alpha */ False,
- /* gs_path */ GS_PATH,
- /* gs_palette */ "Color",
-#endif
-#endif /* PS */
- /* debug_arg */ NULL,
- /* version_flag */ False,
- /* mg_arg */ {NULL, NULL, NULL, NULL, NULL},
-#ifdef GREY
- /* use_grey */ True,
- /* install */ Maybe,
-#endif
-#ifdef GRID
- /* grid_mode */ 0,
- /* grid1_color */ NULL,
- /* grid2_color */ NULL,
- /* grid3_color */ NULL,
-#endif /* GRID */
-#ifdef HTEX
- /* _underline_link */ True,
- /* _browser */ (char *) NULL,
- /* _URLbase */ (char *) NULL,
-#endif
-/* BEGIN CHUNK xdvi.c 6 */
-#ifdef SRC_SPECIALS
- /* _src_specialFormat */ 2,
- /* _src_jumpButton */ 1,
- /* _src_tickShape */ 1,
- /* _src_tickSize */ "40x70",
- /* _src_cursor_shape */ 90,
- /* _src_editorCommand */ "emacsclient --no-wait '+%u' '%s'",
- /* _src_warn_verbosity */ 2,
- /* _src_tickVisibility */ False,
- /* _src_evalMode */ False,
-#endif
-/* END CHUNK xdvi.c 6 */
-};
-
-static Pixel
-string_to_pixel(strp) /* adapted from the toolkit */
- char **strp;
-{
- char *str = *strp;
- Status status;
- XColor color, junk;
-
- if (*str == '#') { /* an rgb definition */
- status = XParseColor(DISP, our_colormap, str, &color);
- if (status != 0)
- status = XAllocColor(DISP, our_colormap, &color);
- }
- else /* a name */
- status = XAllocNamedColor(DISP, our_colormap, str, &color, &junk);
- if (status == 0) {
- Fprintf(stderr, "Cannot allocate colormap entry for \"%s\"\n", str);
- *strp = NULL;
- return (Pixel) 0;
- }
- return color.pixel;
-}
-
-/*
- * Process the option table. This is not guaranteed for all possible
- * option tables, but at least it works for this one.
- */
-
-static void
-parse_options(argc, argv)
- int argc;
- char **argv;
-{
- char **arg;
- char **argvend = argv + argc;
- char *optstring;
- caddr_t addr;
- struct option *opt, *lastopt, *candidate;
- int len1, len2, matchlen;
-
- /*
- * Step 1. Process command line options.
- */
- for (arg = argv + 1; arg < argvend; ++arg) {
- len1 = strlen(*arg);
- candidate = NULL;
- matchlen = 0;
- for (opt = options; opt < options + XtNumber(options); ++opt) {
- len2 = strlen(opt->name);
- if (opt->argclass == StickyArg) {
- if (matchlen <= len2 && !strncmp(*arg, opt->name, len2)) {
- candidate = opt;
- matchlen = len2;
- }
- }
- else if (len1 <= len2 && matchlen <= len1 &&
- !strncmp(*arg, opt->name, len1)) {
- if (len1 == len2) {
- candidate = opt;
- break;
- }
- if (matchlen < len1) candidate = opt;
- else if (candidate && candidate->argclass != StickyArg)
- candidate = NULL;
- matchlen = len1;
- }
- }
- if (candidate == NULL) {
- if (**arg == '-' || dvi_name) usage();
- else {
- /* need to make sure that dvi_name can be freed safely */
- dvi_name = xmalloc((unsigned) strlen(*arg)+1);
- Strcpy(dvi_name, *arg);
- continue;
- }
- }
- /* flag it for subsequent processing */
- candidate->resource = (char *) candidate;
- /* store the value */
- addr = candidate->address;
- switch (candidate->argclass) {
- case FalseArg: *((Boolean *) addr) = False; continue;
- case TrueArg: *((Boolean *) addr) = True; continue;
- case StickyArg: optstring = *arg + strlen(candidate->name);
- break;
- case SepArg:
- ++arg;
- if (arg >= argvend) usage();
- optstring = *arg;
- break;
- }
- switch (candidate->argtype) {
- case StringArg: *((char **) addr) = optstring; break;
- case NumberArg: *((int *) addr) = atoi(optstring); break;
- case FloatArg: *((float *) addr) = atof(optstring); break;
- default: ;
- }
- }
- /*
- * Step 2. Propagate classes for command line arguments. Backwards.
- */
- for (opt = options + XtNumber(options) - 1; opt >= options; --opt)
- if (opt->resource == (char *) opt) {
- addr = opt->address;
- lastopt = opt + opt->classcount;
- for (candidate = opt; candidate < lastopt; ++candidate) {
- if (candidate->resource != NULL) {
- switch (opt->argtype) {
- case BooleanArg:
- case Bool3Arg: /* same type as Boolean */
- *((Boolean *) candidate->address) =
- *((Boolean *) addr);
- break;
- case StringArg:
- *((char **) candidate->address) =
- *((char **) addr);
- break;
- case NumberArg:
- *((int *) candidate->address) = *((int *) addr);
- break;
- case FloatArg:
- *((float *) candidate->address) =
- *((float *) addr);
- break;
- }
- candidate->resource = NULL;
- }
- }
- }
-
- if ((DISP = XOpenDisplay(display)) == NULL)
- oops("Can't open display");
- SCRN = DefaultScreenOfDisplay(DISP);
- /*
- * Step 3. Handle resources (including classes).
- */
- for (opt = options; opt < options + XtNumber(options); ++opt)
- if (opt->resource &&
- ((optstring = XGetDefault(DISP, prog, opt->resource)) ||
- (optstring = XGetDefault(DISP, "XDvi", opt->resource))))
- {
- lastopt = opt + opt->classcount;
- for (candidate = opt; candidate < lastopt; ++candidate)
- if (candidate->resource != NULL) switch (opt->argtype) {
- case Bool3Arg:
- if ( memicmp(optstring, "maybe", 6) == 0)
- {
- * (Bool3 *) candidate->address = Maybe;
- break;
- }
- /* otherwise, fall through; the underlying */
- /* types of Bool3 and Boolean are the same. */
- case BooleanArg:
- * (Boolean *) candidate->address =
- ( memicmp(optstring, "true", 5) == 0
- || memicmp(optstring, "yes", 4) == 0
- || memicmp(optstring, "on", 3) == 0
- || memicmp(optstring, "1", 2) == 0);
- break;
- case StringArg:
- * (char **) candidate->address = optstring;
- break;
- case NumberArg:
- * (int *) candidate->address = atoi(optstring);
- break;
- case FloatArg:
- * (float *) candidate->address =
- atof(optstring);
- }
- }
-}
-
-#endif /* not TOOLKIT */
-
-static _Xconst char *paper_types[] = {
- "us", "8.5x11in",
- "usr", "11x8.5in",
- "legal", "8.5x14in",
- "foolscap", "13.5x17.0in", /* ??? */
-
- /* ISO `A' formats, Portrait */
- "a1", "59.4x84.0cm",
- "a2", "42.0x59.4cm",
- "a3", "29.7x42.0cm",
- "a4", "21.0x29.7cm",
- "a5", "14.85x21.0cm",
- "a6", "10.5x14.85cm",
- "a7", "7.42x10.5cm",
-
- /* ISO `A' formats, Landscape */
- "a1r", "84.0x59.4cm",
- "a2r", "59.4x42.0cm",
- "a3r", "42.0x29.7cm",
- "a4r", "29.7x21.0cm",
- "a5r", "21.0x14.85cm",
- "a6r", "14.85x10.5cm",
- "a7r", "10.5x7.42cm",
-
- /* ISO `B' formats, Portrait */
- "b1", "70.6x100.0cm",
- "b2", "50.0x70.6cm",
- "b3", "35.3x50.0cm",
- "b4", "25.0x35.3cm",
- "b5", "17.6x25.0cm",
- "b6", "13.5x17.6cm",
- "b7", "8.8x13.5cm",
-
- /* ISO `B' formats, Landscape */
- "b1r", "100.0x70.6cm",
- "b2r", "70.6x50.0cm",
- "b3r", "50.0x35.3cm",
- "b4r", "35.3x25.0cm",
- "b5r", "25.0x17.6cm",
- "b6r", "17.6x13.5cm",
- "b7r", "13.5x8.8cm",
-
- /* ISO `C' formats, Portrait */
- "c1", "64.8x91.6cm",
- "c2", "45.8x64.8cm",
- "c3", "32.4x45.8cm",
- "c4", "22.9x32.4cm",
- "c5", "16.2x22.9cm",
- "c6", "11.46x16.2cm",
- "c7", "8.1x11.46cm",
-
- /* ISO `C' formats, Landscape */
- "c1r", "91.6x64.8cm",
- "c2r", "64.8x45.8cm",
- "c3r", "45.8x32.4cm",
- "c4r", "32.4x22.9cm",
- "c5r", "22.9x16.2cm",
- "c6r", "16.2x11.46cm",
- "c7r", "11.46x8.1cm",
-};
-
-static Boolean
-set_paper_type() {
- _Xconst char *arg, *arg1;
- char temp[21];
- _Xconst char **p;
- char *q;
-
- if (strlen(resource.paper) > sizeof(temp) - 1) return False;
- arg = resource.paper;
- q = temp;
- for (;;) { /* convert to lower case */
- char c = *arg++;
- if (c >= 'A' && c <= 'Z') c ^= ('a' ^ 'A');
- *q++ = c;
- if (c == '\0') break;
- }
- arg = temp;
- /* perform substitutions */
- for (p = paper_types; p < paper_types + XtNumber(paper_types); p += 2)
- if (strcmp(temp, *p) == 0) {
- arg = p[1];
- break;
- }
- arg1 = strchr(arg, 'x');
- if (arg1 == NULL) return False;
- unshrunk_paper_w = atopix(arg);
- unshrunk_paper_h = atopix(arg1 + 1);
-#ifdef GRID
- unshrunk_paper_unit = atopixunit(arg);
-#endif /* GRID */
- return (unshrunk_paper_w != 0 && unshrunk_paper_h != 0);
-}
-
-/* Set the icon name and title name standard properties on `top_level'
- (which we don't pass in because it is a different type for TOOLKIT
- !and TOOLKIT). We use the basename of the DVI file (without the
- .dvi), so different xdvi invocations can be distinguished, yet
- do not use up too much real estate. */
-
-void
-set_icon_and_title (dvi_name, icon_ret, title_ret, set_std)
- char *dvi_name;
- char **icon_ret;
- char **title_ret;
- int set_std;
-{
- /* Use basename of DVI file for name in icon and title. */
- unsigned baselen;
- char *icon_name, *title_name;
-
- icon_name = strrchr(dvi_name, '/');
- if (icon_name != NULL) ++icon_name; else icon_name = dvi_name;
- baselen = strlen(icon_name);
- if (baselen >= sizeof(".dvi")
- && strcmp(icon_name + baselen - sizeof(".dvi") + 1, ".dvi")
- == 0) { /* remove the .dvi */
- char *p;
-
- baselen -= sizeof(".dvi") - 1;
- p = xmalloc(baselen + 1);
- (void) strncpy(p, icon_name, (int) baselen);
- p[baselen] = '\0';
- icon_name = p;
- }
-#ifdef Omega
- title_name = xmalloc(baselen + sizeof("(Omega) OXdvi: "));
- Strcpy(title_name, "(Omega) OXdvi: ");
-#else
- title_name = xmalloc(baselen + sizeof("Xdvi: "));
- Strcpy(title_name, "Xdvi: ");
-#endif
- Strcat(title_name, icon_name);
-
- if (icon_ret) *icon_ret = icon_name;
- if (title_ret) *title_ret = title_name;
- if (set_std) {
- Window top_window =
-#ifdef TOOLKIT
- XtWindow (top_level);
-#else
- top_level;
-#endif
-
- XSetStandardProperties(DISP, top_window, title_name, icon_name,
- (Pixmap) 0, NULL, 0, NULL);
- }
-}
-
-
-static void remove_temporary_dir(void)
-
-{
- int err;
-
- if (TmpDir!=NULL) {
- err=rmdir(TmpDir);
- if (err!=0 && errno!=ENOENT) {
- char *buffer=malloc(160);
- if (buffer==NULL) oops("Please buy more RAM");
- sprintf(buffer,"xdvik: Warning: Could not remove temporary directory %s",
- TmpDir);
- perror(buffer);
- }
- }
-}
-
-/* Create a temporary directory where we can write files from this program */
-static void make_temporary_dir P1C(char **,tmpdir)
-
-{
- int ret;
-
- *tmpdir = tempnam(NULL,"xdvi");
-
- if (*tmpdir == NULL)
- oops("Out of memory. Exiting.");
-
- if (debug & DBG_HYPER)
- fprintf(stderr,"Making temporary directory %s\n",*tmpdir);
-
- ret = mkdir(*tmpdir, 0700);
-
- /* The use of atexit and one variable to store the directory name
- makes this procedure a oneoff. Enforce it */
- if (TmpDir!=NULL)
- oops("make_temporary_dir called twice!\n");
-
- TmpDir=strdup(*tmpdir);
-
- atexit(remove_temporary_dir);
-
- if (ret != 0)
- /* Didn't work, PANIC! */
- oops("Could not create temporary directory. Exiting.");
-
-}
-
-
-/*
- * main program
- */
-
-int
-main(argc, argv)
- int argc;
- char **argv;
-{
-
-#ifndef TOOLKIT
- XSizeHints size_hints;
- XWMHints wmhints;
- int flag;
- int x_thick = 0;
- int y_thick = 0;
-#endif /* TOOLKIT */
-#ifdef MOTIF
- Widget menubar;
- Widget scale_menu;
-#endif
- Dimension screen_w, screen_h;
- char *title_name;
- char *icon_name;
- int i;
-
- /*
- * Step 1: Process command-line options and resources.
- */
-
- /* This has to be a special case, for now. */
-
- if (argc == 2 && (strcmp(argv[1], "-version") == 0 ||
- strcmp(argv[1], "--version") == 0 ||
- strcmp(argv[1], "+version") == 0
- ))
- {
- Printf("xdvi(k) version %s\n", TVERSION);
- Printf("Copyright (C) 1990-1999 Paul Vojta.\n\
-Primary author of Xdvi: Paul Vojta;\n\
-Xdvi-k maintainer: janl@math.uio.no.\n\
-\n\
-xdvi itself is licensed under the X Consortium license. xdvik relies\n\
-on the kpathsea library which is covered by the GNU LIBRARY General\n\
-Public License (see COPYING.LIB for full details) and libwww which is\n\
-copyrighted by the World Wide Web Consortium and CERN (see COPYRIGH for\n\
-full details).\n\
-\n\
-There is NO WARRANTY of anything.\n");
- exit(0);
- }
-
- if (argc == 2 && ((strcmp (argv[1], "-help") == 0)
- || (strcmp (argv[1], "+help") == 0)
- || (strcmp (argv[1], "--help") == 0)
- ))
- {
- extern char *kpse_bug_address;
- Printf("xdvi(k) version %s\n", TVERSION);
- Printf("Preview a DVI file under the X window system.\n%s\n",
- kpse_bug_address);
- usage (); /* Unfortunately this exits with status 1. */
- }
-
-
-#ifndef VMS
- prog = strrchr(*argv, '/');
-#else
- prog = strrchr(*argv, ']');
-#endif
- if (prog != NULL) ++prog; else prog = *argv;
-
-#ifdef VMS
- if (strchr(prog, '.') != NULL) *strchr(prog, '.') = '\0';
-#endif
-
- /* We can't initialize this at compile time, because it might be
- the result of a function call under POSIX. */
- n_files_left = OPEN_MAX;
-
- kpse_set_program_name (argv[0], "xdvi");
- kpse_set_program_enabled (kpse_any_glyph_format,
- MAKE_TEX_PK_BY_DEFAULT, kpse_src_compile);
-
-
-#if CFGFILE
- /* get the debug value (if any) from the environment */
- /* (it's too early to get it from the command line) */
- {
- _Xconst char *dbg_str;
-
- dbg_str = getenv("XDVIDEBUG");
- if (dbg_str != NULL)
- debug = atoi(dbg_str);
- }
-#ifdef SELFAUTO
- argv0 = argv[0];
-#endif
-#ifndef CFG2RES
- readconfig(); /* read config file(s). */
-#else /* CFG2RES */
- {
- static _Xconst struct cfg2res cfg2reslist[] = {
- {"MFMODE", "mfMode", False},
- {"PIXELSPERINCH", "pixelsPerInch", True},
- {"SHRINKFACTOR", "shrinkFactor", True},
-#ifdef BUTTONS
- {"SHRINKBUTTON1", "shrinkButton1", True},
- {"SHRINKBUTTON2", "shrinkButton2", True},
- {"SHRINKBUTTON3", "shrinkButton3", True},
- {"SHRINKBUTTON4", "shrinkButton4", True},
-#endif
- {"PAPER", "paper", False},
- };
-
- readconfig(cfg2reslist, cfg2reslist + XtNumber(cfg2reslist),
- application_resources,
- application_resources + XtNumber(application_resources));
- }
-#endif /* CFG2RES */
-#endif /* CFGFILE */
-
-#ifdef TOOLKIT
-
- top_level = XtInitialize(prog, "XDvi", options, XtNumber(options),
- &argc, argv);
- while (--argc > 0) {
- if (*(*++argv) == '+')
- if (curr_page != NULL) usage();
- else curr_page = *argv + 1;
- else if (dvi_name != NULL) usage();
- else {
- /* need to make sure that dvi_name can be freed safely */
- dvi_name = xmalloc((unsigned) strlen(*argv)+1);
- Strcpy(dvi_name, *argv);
- }
- }
-
- DISP = XtDisplay(top_level);
- SCRN = XtScreen(top_level);
-
-#ifdef GREY
- XtSetTypeConverter(XtRString, XtRBool3, XdviCvtStringToBool3,
- NULL, 0, XtCacheNone, NULL);
-#endif
-
- XtGetApplicationResources(top_level, (XtPointer) &resource,
- application_resources, XtNumber(application_resources),
- (ArgList) NULL, 0);
- shrink_factor = resource.shrinkfactor;
-
-#if CFGFILE
- if (resource.progname != NULL)
- prog = resource.progname;
-#endif
-
-#else /* not TOOLKIT */
-
- parse_options(argc, argv);
-
-#endif /* not TOOLKIT */
-
- if (resource.mfmode != NULL) {
- char *p;
-
- p = strrchr(resource.mfmode, ':');
- if (p != NULL) {
- unsigned int len;
- char *p1;
-
- ++p;
- len = p - resource.mfmode;
- p1 = xmalloc(len);
- bcopy(resource.mfmode, p1, len - 1);
- p1[len - 1] = '\0';
- resource.mfmode = p1;
- pixels_per_inch = atoi(p);
- }
- }
- if (shrink_factor < 0 || density <= 0 || pixels_per_inch <= 0
-#ifndef SELFILE
- || dvi_name == NULL
-#endif
- ) usage();
- if (shrink_factor > 1) {
- bak_shrink = shrink_factor;
- mane.shrinkfactor = shrink_factor; /* otherwise it's 1 */
- }
- if (resource.debug_arg != NULL) {
- debug = isdigit(*resource.debug_arg) ? atoi(resource.debug_arg)
- : DBG_ALL;
- if (debug & DBG_OPEN) KPSE_DEBUG_SET (KPSE_DEBUG_FOPEN);
- if (debug & DBG_STAT) KPSE_DEBUG_SET (KPSE_DEBUG_STAT);
- if (debug & DBG_HASH) KPSE_DEBUG_SET (KPSE_DEBUG_HASH);
- if (debug & DBG_PATHS) KPSE_DEBUG_SET (KPSE_DEBUG_PATHS);
- if (debug & DBG_EXPAND) KPSE_DEBUG_SET (KPSE_DEBUG_EXPAND);
- if (debug & DBG_SEARCH) KPSE_DEBUG_SET (KPSE_DEBUG_SEARCH);
- }
-
- if (resource.sidemargin) home_x = atopix(resource.sidemargin);
- if (resource.topmargin) home_y = atopix(resource.topmargin);
- offset_x = resource.xoffset ? atopix(resource.xoffset)
- : pixels_per_inch;
- offset_y = resource.yoffset ? atopix(resource.yoffset)
- : pixels_per_inch;
- if (!set_paper_type())
- oops("Don't recognize paper type %s", resource.paper);
- for (i = 0; i < 5; ++i)
- if (resource.mg_arg[i] != NULL) {
- char *s;
-
- mg_size[i].w = mg_size[i].h = atoi(resource.mg_arg[i]);
- s = strchr(resource.mg_arg[i], 'x');
- if (s != NULL) {
- mg_size[i].h = atoi(s + 1);
- if (mg_size[i].h <= 0) mg_size[i].w = 0;
- }
- }
-#if PS
- if (resource.safer) {
- resource.allow_shell = False;
-#ifdef PS_GS
- resource.gs_safer = True;
-#endif
- }
-#endif /* PS */
-#ifdef PS_GS
- {
- _Xconst char *CGMcgm = "CGMcgm";
- _Xconst char *cgmp;
-
- cgmp = strchr(CGMcgm, resource.gs_palette[0]);
- if (cgmp == NULL)
- oops("Invalid value %s for gs palette option",
- resource.gs_palette);
- if (cgmp >= CGMcgm + 3) {
- static char gsp[] = "x";
-
- gsp[0] = *(cgmp - 3);
- resource.gs_palette = gsp;
- }
- }
-#endif
-
- if (resource.version_flag)
- Printf("xdvi version %s\n", TVERSION);
-
- kpse_init_prog ("XDVI", pixels_per_inch, resource.mfmode, alt_font);
-
- if (debug) {
- fprintf(stderr,"XDVI %d/%d/%s/%s\n", pixels_per_inch, shrink_factor,
- resource.mfmode, alt_font);
- fprintf(stderr,"Paper %s\n", resource.paper);
- }
-
- kpse_set_program_enabled (kpse_any_glyph_format,
- resource.makepk, kpse_src_compile);
-
- /* janl 16/11/98: I have changed this. The above line used to
- say the settings in resource.makepk was supplied on the
- commandline, resulting in it overriding _all other_
- settings, derived from the environment or texmf.cnf, no
- matter what the value. The value in resource.makepk could
- be the compile-time default...
-
- Personaly I like the environment/texmf.cnf to override
- resources and thus changed the 'level' of this setting to
- kpse_src_compile so the environment/texmf.cnf will override
- the values derived by Xt.
-
- Previous comment here:
-
- ``Let true values as an X resource/command line override false
- values in texmf.cnf/envvar.'' */
-
- /*
- * Step 2: Settle colormap issues. This should be done before
- * other widgets are created, so that they get the right
- * pixel values. (The top-level widget won't have the right
- * values, but I don't think that makes any difference.)
- */
-
-#ifdef GREY
-
- screen_number = 0; /* yyuucchh */
- while (SCRN != ScreenOfDisplay(DISP, screen_number)) ++screen_number;
-
- our_depth = DefaultDepthOfScreen(SCRN);
- our_visual = DefaultVisualOfScreen(SCRN);
- our_colormap = DefaultColormapOfScreen(SCRN);
- copyGC = DefaultGCOfScreen(SCRN);
-
- if (resource.install != False && our_visual->class == PseudoColor) {
- /* look for a TrueColor visual with more bits */
- XVisualInfo template;
- XVisualInfo *list;
- int nitems_return;
-
- template.screen = screen_number;
- template.class = TrueColor;
- list = XGetVisualInfo(DISP, VisualScreenMask | VisualClassMask,
- &template, &nitems_return);
- if (list != NULL) {
- XVisualInfo *list1;
- XVisualInfo *best = NULL;
-
- for (list1 = list; list1 < list + nitems_return; ++list1)
- if (list1->depth > our_depth
- && (best == NULL || list1->depth > best->depth))
- best = list1;
- if (best != NULL) {
- our_depth = best->depth;
- our_visual = best->visual;
- our_colormap = XCreateColormap(DISP,
- RootWindowOfScreen(SCRN), our_visual, AllocNone);
- XInstallColormap(DISP, our_colormap);
- copyGC = NULL;
-#ifdef TOOLKIT
- temp_args1[0].value = (XtArgVal) our_depth;
- temp_args1[1].value = (XtArgVal) our_visual;
- temp_args1[2].value = (XtArgVal) our_colormap;
- XtSetValues(top_level, temp_args1, XtNumber(temp_args1));
- XtSetTypeConverter(XtRString, XtRPixel,
- XdviCvtStringToPixel,
- (XtConvertArgList) colorConvertArgs, 2,
- XtCacheByDisplay, NULL);
-#else
- /* Can't use {Black,White}PixelOfScreen() any more */
- if (!resource.fore_color)
- resource.fore_color =
- (resource.reverse ? "white" : "black");
- if (!resource.back_color)
- resource.back_color =
- (resource.reverse ? "black" : "white");
-#endif
- }
- XFree(list);
- }
- }
-
- if (resource.install == True && our_visual->class == PseudoColor) {
- XColor tmp_color;
-
- /* This next bit makes sure that the standard black and white pixels
- are allocated in the new colormap. */
-
- tmp_color.pixel = BlackPixelOfScreen(SCRN);
- XQueryColor(DISP, our_colormap, &tmp_color);
- XAllocColor(DISP, our_colormap, &tmp_color);
-
- tmp_color.pixel = WhitePixelOfScreen(SCRN);
- XQueryColor(DISP, our_colormap, &tmp_color);
- XAllocColor(DISP, our_colormap, &tmp_color);
-
- our_colormap = XCopyColormapAndFree(DISP, our_colormap);
-#ifdef TOOLKIT
- temp_args1a[0].value = (XtArgVal) our_colormap;
- XtSetValues(top_level, temp_args1a, 1);
-#endif
- }
-
-#ifdef TOOLKIT
- XtGetApplicationResources(top_level, (XtPointer) &resource,
- app_pixel_resources, XtNumber(app_pixel_resources),
- (ArgList) NULL, 0);
-#endif
-
-#endif /* GREY */
-
-#ifndef TOOLKIT
- fore_Pixel = (resource.fore_color
- ? string_to_pixel(&resource.fore_color)
- : (resource.reverse ? WhitePixelOfScreen(SCRN)
- : BlackPixelOfScreen(SCRN)));
- back_Pixel = (resource.back_color
- ? string_to_pixel(&resource.back_color)
- : (resource.reverse ? BlackPixelOfScreen(SCRN)
- : WhitePixelOfScreen(SCRN)));
- brdr_Pixel = (brdr_color ? string_to_pixel(&brdr_color) : fore_Pixel);
- hl_Pixel = (high_color ? string_to_pixel(&high_color) : fore_Pixel);
- cr_Pixel = (curs_color ? string_to_pixel(&curs_color) : fore_Pixel);
-
-#ifdef GRID
- if (resource.grid1_color)
- grid1_Pixel = string_to_pixel(&resource.grid1_color);
- if (resource.grid2_color)
- grid2_Pixel = string_to_pixel(&resource.grid2_color);
- if (resource.grid3_color)
- grid3_Pixel = string_to_pixel(&resource.grid3_color);
-#endif /* GRID */
-
-#endif /* not TOOLKIT */
-
-#ifdef GREY
- if (our_depth == 1)
- use_grey = False;
-
- if (use_grey && our_visual->class != TrueColor) {
- fore_color_data.pixel = fore_Pixel;
- XQueryColor(DISP, our_colormap, &fore_color_data);
- back_color_data.pixel = back_Pixel;
- XQueryColor(DISP, our_colormap, &back_color_data);
- init_plane_masks();
- if (!copy) {
- back_color_data.pixel = back_Pixel;
- XStoreColor(DISP, our_colormap, &back_color_data);
- }
- }
-#endif
-
- /*
- * Step 3: Open the dvi file and set titles.
- */
-
-#ifdef SELFILE
- /* If no filename by here, so pop up a selection box. */
- if (dvi_name == NULL)
- {
- extern FILE *select_filename ();
- (void) select_filename(False, False) ;
- /* User might have cancled -janl */
- if (dvi_name == NULL) exit(1);
- }
-#endif /* SELFILE */
-
- make_temporary_dir(&temporary_dir); /* For storing temporary files.. */
-
-#ifdef HTEX
- {
- char *cp = getenv("WWWBROWSER");
- if (cp) browser = cp;
- }
- HTProfile_newPreemptiveClient(HTAppName, HTAppVersion);
- HTCacheMode_setEnabled(NO);
-
-#if 0
- /* Optionally, turn on tracing of WWW library calls. */
- if (debug & DBG_HYPER) {
- WWWTRACE = SHOW_STREAM_TRACE;
- }
-#endif
-
-#if T1
- /* At this point DISP, our_visual, our_depth and our_colormap must
- be defined, and they are */
- init_t1();
-#endif
-
- /* Open the input file. Turn filename into URL first if needed */
- URL_aware = TRUE;
-
- if (!(URLbase || htex_is_url(dvi_name))) {
- char *new_name;
- int n;
-
- n = strlen(dvi_name);
- new_name = dvi_name;
- /* Find the right filename */
- if (n < sizeof(".dvi")
- || strcmp(dvi_name + n - sizeof(".dvi") + 1, ".dvi") != 0) {
- dvi_name = xmalloc((unsigned) n + sizeof(".dvi"));
- Strcpy(dvi_name, new_name);
- Strcat(dvi_name, ".dvi");
- /* Atempt $dvi_name.dvi */
- dvi_file = xfopen(dvi_name, OPEN_MODE);
- if (dvi_file == NULL) {
- /* Didn't work, revert to original $dvi_name */
- free(dvi_name);
- dvi_name = new_name;
- }
- }
-
- /* Turn filename into URL */
- /* Escape dangers, esp. # from emacs */
- new_name=HTEscape(dvi_name,URL_PATH);
- free(dvi_name);
- dvi_name = xmalloc((unsigned) strlen(new_name)+6);
- strcat(strcpy(dvi_name,"file:"),new_name);
- /* Now we have the right filename, in a URL */
- }
-
- detach_anchor();
- if (!open_www_file()) {
- fprintf(stderr,"Could not open dvi file. Exiting.\n");
- exit(1);
- }
-
- URL_aware = FALSE;
-#else
- open_dvi_file();
-#endif /* not HTEX */
-
- if (curr_page) {
- current_page = (*curr_page ? atoi(curr_page) : total_pages) - 1;
- if (current_page < 0 || current_page >= total_pages) usage();
- }
- set_icon_and_title (dvi_name, &icon_name, &title_name, 0);
-
- /*
- * Step 4: Set initial window size.
- * This needs to be done before colors are assigned because if
- * -s 0 is specified, then we need to compute the shrink factor
- * (which in turn affects whether init_pix is called).
- */
-
-#ifdef TOOLKIT
-
- /* The following code is lifted from Xterm */
- if (resource.icon_geometry != NULL) {
-#ifndef GREY
- int screen_number;
-#endif
- int junk;
-
-#ifndef GREY
- for (screen_number = 0; /* yyuucchh */
- SCRN != ScreenOfDisplay(DISP, screen_number);
- ++screen_number);
-#endif
-
- (void) XGeometry(DISP, screen_number, resource.icon_geometry, "",
- 0, 0, 0, 0, 0,
- (int *) &temp_args2[0].value,
- (int *) &temp_args2[1].value, &junk, &junk);
- XtSetValues(top_level, temp_args2, XtNumber(temp_args2));
- }
- /* Set icon pixmap */
- XtGetValues(top_level, &temp_args4, 1);
- if (icon_pm == (Pixmap) 0) {
- temp_args4.value = (XtArgVal) (XCreateBitmapFromData(DISP,
- RootWindowOfScreen(SCRN), (_Xconst char *) xdvi_bits,
- xdvi_width, xdvi_height));
- XtSetValues(top_level, &temp_args4, 1);
- }
- temp_args5[0].value = (XtArgVal) title_name;
- temp_args5[1].value = (XtArgVal) icon_name;
- XtSetValues(top_level, temp_args5, XtNumber(temp_args5));
-
-#ifdef BUTTONS
- form_widget = XtCreateManagedWidget("form", FORM_WIDGET_CLASS,
- top_level, form_args, XtNumber(form_args));
-#define form_or_top form_widget /* for calls later on */
-#define form_or_vport form_widget
-#else /* !BUTTONS */
-#define form_or_top top_level /* for calls later on */
-#define form_or_vport vport_widget
-#endif /* BUTTONS */
-
- vport_widget = XtCreateManagedWidget("vport", VPORT_WIDGET_CLASS,
- form_or_top, vport_args, XtNumber(vport_args));
-
-#ifndef MOTIF
-
- clip_widget = XtNameToWidget(vport_widget, "clip");
-
-#else /* MOTIF */
-
- menubar = XmVaCreateSimpleMenuBar(vport_widget, "menubar",
- XmNdepth, (XtArgVal) our_depth,
- XmNvisual, (XtArgVal) our_visual,
- XmNcolormap, (XtArgVal) our_colormap,
- XmVaCASCADEBUTTON, (XtArgVal) XmCvtCTToXmString("File"), 0,
- XmVaCASCADEBUTTON, (XtArgVal) XmCvtCTToXmString("Navigate"), 0,
- XmVaCASCADEBUTTON, (XtArgVal) XmCvtCTToXmString("Scale"), 0,
- 0);
- XmVaCreateSimplePulldownMenu(menubar,
- "file_pulldown", 0, file_pulldown_callback,
- XmNtearOffModel, (XtArgVal) XmTEAR_OFF_ENABLED,
- XmNdepth, (XtArgVal) our_depth,
- XmNvisual, (XtArgVal) our_visual,
- XmNcolormap, (XtArgVal) our_colormap,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Reload"), 0, 0, 0,
- XmVaSEPARATOR,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Quit"), 0, 0, 0,
- 0);
- XmVaCreateSimplePulldownMenu(menubar,
- "navigate_pulldown", 1, navigate_pulldown_callback,
- XmNtearOffModel, (XtArgVal) XmTEAR_OFF_ENABLED,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page-10"), 0, 0, 0,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page-5"), 0, 0, 0,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Prev"), 0, 0, 0,
- XmVaSEPARATOR,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Next"), 0, 0, 0,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page+5"), 0, 0, 0,
- XmVaPUSHBUTTON, (XtArgVal) XmCvtCTToXmString("Page+10"), 0, 0, 0,
- 0);
- scale_menu = XmVaCreateSimplePulldownMenu(menubar,
- "scale_pulldown", 2, scale_pulldown_callback,
- XmNradioBehavior, (XtArgVal) True,
- XmNtearOffModel, (XtArgVal) XmTEAR_OFF_ENABLED,
- XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink1"), 0, 0, 0,
- XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink2"), 0, 0, 0,
- XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink3"), 0, 0, 0,
- XmVaRADIOBUTTON, (XtArgVal) XmCvtCTToXmString("Shrink4"), 0, 0, 0,
- 0);
- shrink_button[0] = XtNameToWidget(scale_menu, "button_0");
- shrink_button[1] = XtNameToWidget(scale_menu, "button_1");
- shrink_button[2] = XtNameToWidget(scale_menu, "button_2");
- shrink_button[3] = XtNameToWidget(scale_menu, "button_3");
-
- x_bar = XtNameToWidget(vport_widget, "HorScrollBar");
- y_bar = XtNameToWidget(vport_widget, "VertScrollBar");
-
-#endif /* MOTIF */
-
- draw_args[0].value = (XtArgVal) page_w;
- draw_args[1].value = (XtArgVal) page_h;
- draw_widget = XtCreateManagedWidget("drawing", DRAW_WIDGET_CLASS,
- vport_widget, draw_args, XtNumber(draw_args));
-
-#ifdef MOTIF
- XtVaSetValues(vport_widget, XmNworkWindow, draw_widget,
- XmNmenuBar, menubar, NULL);
- XtManageChild(menubar);
- XtVaGetValues(vport_widget, XmNclipWindow, &clip_widget, NULL);
-#endif /* MOTIF */
-
- { /* set default window size */
-#ifdef BUTTONS
- int xtra_wid = resource.expert ? 0 : XTRA_WID;
-#else
-#define xtra_wid 0
-#endif
- XtWidgetGeometry constraints;
- XtWidgetGeometry reply;
-
- XtGetValues(top_level, &temp_args3, 1); /* get border width */
- screen_w = WidthOfScreen(SCRN) - 2 * bwidth - xtra_wid;
- screen_h = HeightOfScreen(SCRN) - 2 * bwidth;
- for (;;) { /* actually, at most two passes */
- constraints.request_mode = reply.request_mode = 0;
- constraints.width = page_w;
- if (page_w > screen_w) {
- constraints.request_mode = CWWidth;
- constraints.width = screen_w;
- }
- constraints.height = page_h;
- if (page_h > screen_h) {
- constraints.request_mode |= CWHeight;
- constraints.height = screen_h;
- }
- if (constraints.request_mode != 0
- && constraints.request_mode != (CWWidth | CWHeight))
- (void) XtQueryGeometry(vport_widget, &constraints, &reply);
- if (!(reply.request_mode & CWWidth))
- reply.width = constraints.width;
- if (reply.width >= screen_w)
- reply.width = screen_w;
- if (!(reply.request_mode & CWHeight))
- reply.height = constraints.height;
- if (reply.height >= screen_h)
- reply.height = screen_h;
-
- /* now reply.{width,height} contain max. usable window size */
-
- if (shrink_factor != 0)
- break;
-
- shrink_factor = ROUNDUP(unshrunk_page_w, reply.width - 2);
- i = ROUNDUP(unshrunk_page_h, reply.height - 2);
- if (i >= shrink_factor) shrink_factor = i;
- if (shrink_factor > 1) bak_shrink = shrink_factor;
- mane.shrinkfactor = shrink_factor;
- init_page();
- set_wh_args[0].value = (XtArgVal) page_w;
- set_wh_args[1].value = (XtArgVal) page_h;
- XtSetValues(draw_widget, set_wh_args, XtNumber(set_wh_args));
- }
- set_wh_args[0].value = (XtArgVal) (reply.width + xtra_wid);
- set_wh_args[1].value = (XtArgVal) reply.height;
- XtSetValues(top_level, set_wh_args, XtNumber(set_wh_args));
-#ifdef BUTTONS
- set_wh_args[0].value -= xtra_wid;
- XtSetValues(vport_widget, set_wh_args, XtNumber(set_wh_args));
-#endif /* BUTTONS */
- }
-#ifdef MOTIF
- set_shrink_factor(mane.shrinkfactor);
-#endif
-
-#else /* not TOOLKIT */
-
- screen_w = WidthOfScreen(SCRN) - 2*bwidth;
- screen_h = HeightOfScreen(SCRN) - 2*bwidth;
-
- size_hints.flags = PMinSize;
- size_hints.min_width = size_hints.min_height = 50;
- size_hints.x = size_hints.y = 0;
-
- /* compute largest possible window */
- flag = 0;
- if (geometry != NULL) {
- flag = XParseGeometry(geometry, &size_hints.x, &size_hints.y,
- &window_w, &window_h);
- if (flag & (XValue | YValue))
- size_hints.flags |= USPosition;
- if (flag & (WidthValue | HeightValue))
- size_hints.flags |= USSize;
- }
- if (!(flag & WidthValue)) window_w = screen_w;
- if (!(flag & HeightValue)) window_h = screen_h;
-
- if (shrink_factor == 0) {
- /* compute best shrink factor based on window_w and window_h */
- shrink_factor = ROUNDUP(unshrunk_page_w, window_w - 2);
- i = ROUNDUP(unshrunk_page_h, window_h - 2);
- if (i >= shrink_factor) shrink_factor = i;
- if (shrink_factor > 1) bak_shrink = shrink_factor;
- mane.shrinkfactor = shrink_factor;
- init_page();
- }
-
- if (window_w < page_w) x_thick = BAR_THICK;
- if (window_h < page_h + x_thick) y_thick = BAR_THICK;
- if (!(flag & WidthValue)) {
- window_w = page_w + y_thick;
- if (window_w > screen_w) {
- x_thick = BAR_THICK;
- window_w = screen_w;
- }
- size_hints.flags |= PSize;
- }
- if (!(flag & HeightValue)) {
- window_h = page_h + x_thick;
- if (window_h > screen_h) window_h = screen_h;
- size_hints.flags |= PSize;
- }
-
- if (flag & XNegative) size_hints.x += screen_w - window_w;
- if (flag & YNegative) size_hints.y += screen_h - window_h;
-
-#endif /* not TOOLKIT */
-
- /*
- * Step 5: Realize the widgets (or windows).
- */
-
-#ifdef TOOLKIT
-
- {
- static Arg back_args = {XtNbackground, (XtArgVal) 0};
-
- back_args.value = back_Pixel;
- XtSetValues(draw_widget, &back_args, 1);
- XtSetValues(clip_widget, &back_args, 1);
- }
-
-#ifdef BUTTONS
- if (!resource.expert)
- create_buttons(set_wh_args[1].value);
-#endif
-#ifdef HTEX
- pane_widget = XtCreateManagedWidget("pane", panedWidgetClass,
- top_level, pane_args, XtNumber(pane_args));
- /* Set up anchor search and information widgets: */
- anchor_search = XtCreateManagedWidget("anchorsearch",
- dialogWidgetClass, pane_widget, anchorsearch_args,
- XtNumber(anchorsearch_args));
- XawDialogAddButton(anchor_search, "Open", search_callback, NULL);
- anchor_info = XtCreateManagedWidget("anchorinfo", asciiTextWidgetClass,
- pane_widget, anchorinfo_args, XtNumber(anchorinfo_args));
- /* Eliminate the silly caret */
- XawTextDisplayCaret(anchor_info, False);
-#endif
-
-#ifndef MOTIF
- XtAddEventHandler(form_or_vport, KeyPressMask, False,
- handle_key, (caddr_t) NULL);
-#else /* MOTIF */
- XtSetSensitive(draw_widget, TRUE);
- XtAddEventHandler(draw_widget, KeyPressMask, False,
- handle_key, (caddr_t) NULL);
-#endif /* MOTIF */
- XtAddEventHandler(vport_widget, StructureNotifyMask, False,
- handle_resize, (caddr_t) NULL);
- XtAddEventHandler(draw_widget, ExposureMask, False, handle_exp,
- (caddr_t) &mane);
- XtAddEventHandler(draw_widget, ButtonPressMask, False, handle_button,
- (caddr_t) NULL);
- XtAddEventHandler(draw_widget, ButtonMotionMask, False, handle_motion,
- (caddr_t) NULL);
- XtAddEventHandler(draw_widget, ButtonReleaseMask, False, handle_release,
- (caddr_t) NULL);
- XtRealizeWidget(top_level);
-#ifdef MOTIF
- XmProcessTraversal(draw_widget, XmTRAVERSE_CURRENT);
-#endif
-
- currwin.win = mane.win = XtWindow(draw_widget);
-
- {
- XWindowAttributes attrs;
-
- (void) XGetWindowAttributes(DISP, mane.win, &attrs);
- backing_store = attrs.backing_store;
- }
-
-#else /* not TOOLKIT */
-
- size_hints.width = window_w;
- size_hints.height = window_h;
-#ifndef GREY
- top_level = XCreateSimpleWindow(DISP, RootWindowOfScreen(SCRN),
- size_hints.x, size_hints.y, window_w, window_h, bwidth,
- brdr_Pixel, back_Pixel);
-#else
- {
- XSetWindowAttributes attr;
-
- attr.border_pixel = brdr_Pixel;
- attr.background_pixel = back_Pixel;
- attr.colormap = our_colormap;
- top_level = XCreateWindow(DISP, RootWindowOfScreen(SCRN),
- size_hints.x, size_hints.y, window_w, window_h, bwidth,
- our_depth, InputOutput, our_visual,
- CWBorderPixel | CWBackPixel | CWColormap, &attr);
- }
-#endif
- XSetStandardProperties(DISP, top_level, title_name, icon_name,
- (Pixmap) 0, argv, argc, &size_hints);
-
- wmhints.flags = InputHint | StateHint | IconPixmapHint;
- wmhints.input = True; /* window manager must direct input */
- wmhints.initial_state = iconic ? IconicState : NormalState;
- wmhints.icon_pixmap = XCreateBitmapFromData(DISP,
- RootWindowOfScreen(SCRN), (_Xconst char *) xdvi_bits,
- xdvi_width, xdvi_height);
- if (resource.icon_geometry != NULL) {
- int junk;
-
- wmhints.flags |= IconPositionHint;
- (void) XGeometry(DISP, DefaultScreen(DISP), resource.icon_geometry,
- "", 0, 0, 0, 0, 0, &wmhints.icon_x, &wmhints.icon_y,
- &junk, &junk);
- }
- XSetWMHints(DISP, top_level, &wmhints);
-
- XSelectInput(DISP, top_level, KeyPressMask | StructureNotifyMask);
- XMapWindow(DISP, top_level);
- XFlush(DISP);
-
-#endif /* not TOOLKIT */
-
-{
- static KeySym list[2] = {XK_Caps_Lock, XK_Num_Lock};
-
-#define rebindkey(ks, str) XRebindKeysym(DISP, (KeySym) ks, \
- (KeySym *) NULL, 0, (_Xconst ubyte *) str, 1); \
- XRebindKeysym(DISP, (KeySym) ks, \
- list, 1, (_Xconst ubyte *) str, 1); \
- XRebindKeysym(DISP, (KeySym) ks, \
- list + 1, 1, (_Xconst ubyte *) str, 1); \
- XRebindKeysym(DISP, (KeySym) ks, \
- list, 2, (_Xconst ubyte *) str, 1);
-
- rebindkey(XK_Help, "?");
- rebindkey(XK_Cancel, "q");
- rebindkey(XK_Redo, "A");
- rebindkey(XK_Home, "^");
- rebindkey(XK_Left, "l");
- rebindkey(XK_Up, "u");
- rebindkey(XK_Right, "r");
- rebindkey(XK_Down, "d");
- rebindkey(XK_End, "g");
-#ifdef XK_Page_Up
- rebindkey(XK_Page_Up, "b");
- rebindkey(XK_Page_Down, "f");
-#endif
-#ifdef XK_KP_Left
- rebindkey(XK_KP_Home, "^");
- rebindkey(XK_KP_Left, "l");
- rebindkey(XK_KP_Up, "u");
- rebindkey(XK_KP_Right, "r");
- rebindkey(XK_KP_Down, "d");
- rebindkey(XK_KP_Prior, "b");
- rebindkey(XK_KP_Next, "f");
- rebindkey(XK_KP_Delete, "\177");
-#ifdef XK_KP_Page_Up
- rebindkey(XK_KP_Page_Up, "b");
- rebindkey(XK_KP_Page_Down, "f");
-#endif /* XK_KP_Page_Up */
-#endif /* XK_KP_Left */
-}
-#undef rebindkey
-
- image = XCreateImage(DISP, our_visual, 1, XYBitmap, 0,
- (char *) NULL, 0, 0, BMBITS, 0);
- image->bitmap_unit = BMBITS;
-#ifdef WORDS_BIGENDIAN
- image->bitmap_bit_order = MSBFirst;
-#else
- image->bitmap_bit_order = LSBFirst;
-#endif
- {
- short endian = MSBFirst << 8 | LSBFirst;
- image->byte_order = *((char *) &endian);
- }
-
- /*
- * Step 6: Assign colors and GCs.
- * Because of the latter, this has to go after Step 5.
- */
-
-#ifndef TOOLKIT
-#define XtWindow(win) win
-#endif
-
-#define MakeGC(fcn, fg, bg) (values.function = fcn, \
- values.foreground=fg, values.background=bg, \
- XCreateGC(DISP, XtWindow(top_level), \
- GCFunction | GCForeground | GCBackground, &values))
-
-#ifdef GRID
- if (!resource.grid1_color) grid1_Pixel = fore_Pixel;
- if (!resource.grid2_color) grid2_Pixel = grid1_Pixel;
- if (!resource.grid3_color) grid3_Pixel = grid1_Pixel;
-#endif /* GRID */
-
-
-#ifdef GREY
- if (resource._gamma == 0.0)
- resource._gamma = 1.0;
-
-#endif
-
- copy = resource.copy;
-
- init_colors();
-
- {
- XGCValues values;
-
- highGC = ruleGC;
- if (hl_Pixel != fore_Pixel
-#ifdef GREY
- || (!copy && our_visual != DefaultVisualOfScreen(SCRN))
-#endif
- )
-#ifdef GREY
- copyGC =
-#endif
- highGC = MakeGC(GXcopy, hl_Pixel, back_Pixel);
-
-#ifdef GRID
- grid1GC = MakeGC(GXcopy, grid1_Pixel, fore_Pixel);
- grid2GC = MakeGC(GXcopy, grid2_Pixel, fore_Pixel);
- grid3GC = MakeGC(GXcopy, grid3_Pixel, fore_Pixel);
-#endif /* GRID */
-
- }
-
-#ifndef VMS
- ready_cursor = XCreateFontCursor(DISP, XC_cross);
- redraw_cursor = XCreateFontCursor(DISP, XC_watch);
-/* BEGIN CHUNK xdvi.c 2 */
-#ifdef SRC_SPECIALS
- src_cursor = XCreateFontCursor(DISP, src_cursor_shape);
-#endif
-/* END CHUNK xdvi.c 2 */
-
-#else
- DECWCursorFont = XLoadFont(DISP, "DECW$CURSOR");
- XSetFont(DISP, foreGC, DECWCursorFont);
- redraw_cursor = XCreateGlyphCursor(DISP, DECWCursorFont, DECWCursorFont,
- decw$c_wait_cursor, decw$c_wait_cursor + 1,
- &resource.fore_color, &resource.back_color);
- MagnifyPixmap = XCreateBitmapFromData(DISP, RootWindowOfScreen(SCRN),
- mag_glass_bits, mag_glass_width, mag_glass_height);
- ready_cursor = XCreatePixmapCursor(DISP, MagnifyPixmap, MagnifyPixmap,
- &resource.back_color, &resource.fore_color,
- mag_glass_x_hot, mag_glass_y_hot);
-/* BEGIN CHUNK xdvi.c 2 */
-#ifdef SRC_SPECIALS
- /* sorry, I dunno about VMS. Someone else will have to tackle that */
- src_cursor = ready_cursor;
-#endif
-/* END CHUNK xdvi.c 2 */
-#endif /* VMS */
-
- {
- XColor bg_Color, cr_Color;
-
- bg_Color.pixel = back_Pixel;
- XQueryColor(DISP, our_colormap, &bg_Color);
- cr_Color.pixel = cr_Pixel;
- XQueryColor(DISP, our_colormap, &cr_Color);
- XRecolorCursor(DISP, ready_cursor, &cr_Color, &bg_Color);
- XRecolorCursor(DISP, redraw_cursor, &cr_Color, &bg_Color);
- }
-
- do_pages();
- return 0; /* do_pages() returns if DBG_BATCH is specified */
-}