summaryrefslogtreecommitdiff
path: root/Build/source/texk/windvi/winopt.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/windvi/winopt.c')
-rw-r--r--Build/source/texk/windvi/winopt.c1502
1 files changed, 0 insertions, 1502 deletions
diff --git a/Build/source/texk/windvi/winopt.c b/Build/source/texk/windvi/winopt.c
deleted file mode 100644
index 28702a27537..00000000000
--- a/Build/source/texk/windvi/winopt.c
+++ /dev/null
@@ -1,1502 +0,0 @@
-#include "wingui.h"
-#include "xdvi-config.h"
-#include "version.h"
-#include "c-openmx.h"
-#include <kpathsea/proginit.h>
-#include <kpathsea/tex-hush.h>
-#include <kpathsea/tex-make.h>
-#include <kpathsea/line.h>
-#ifndef ALTFONT
-#define ALTFONT "cmr10"
-#endif
-
-#if defined(PS_GS) && !defined(GS_PATH)
-#define GS_PATH "gsdll32.dll"
-#endif
-
-#ifdef WIN32
-#define DEFAULT_PAPER NULL
-#else
-#ifndef A4
-#define DEFAULT_PAPER "us"
-#else
-#define DEFAULT_PAPER "a4"
-#endif
-#endif
-
-#ifndef BDPI
-#define BDPI 600
-#endif
-
-#ifndef MFMODE
-#define MFMODE NULL
-#endif
-#ifndef SHRINK
-#define SHRINK "6"
-#endif
-
-#define option xdviw32_option
-
-/*
- * 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[] = {"-mgs[n] <size>"};
-
-static _Xconst char *brdr_color;
-static _Xconst char *high_color;
-static _Xconst char *curs_color;
-
-/* 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 */
-
-Boolean iconic = False;
-Dimension bwidth = 2;
-
-/*
- * Command line flags.
- */
-
-int argc;
-char **argv;
-#define SEPARATORS " \t"
-#define MAX_ARG 20
-
-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,
- /* msg1 */ silent,
- /* msg2 */ silent,
- /* msg3 */ silent,
- /* msg4 */ silent,
- /* msg5 */ 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
-#ifdef WIN32
- /* single */ "single instance",
- /* colours */ "number of colours",
- /* auto scan */ "auto scan",
- /* in memory */ "in memory redraw",
- /* transformations */ "use transformations from postscript",
- /* two pages mode */ "two pages mode",
-#endif
-/* [dummy] */ "z"
-};
-
-#define ADDR(x) (caddr_t) &resource.x
-
-static struct option {
- _Xconst char *name;
- _Xconst char *resource;
- _Xconst char *mark;
- enum {FalseArg, TrueArg, StickyArg, SepArg}
- argclass;
- enum {BooleanArg, Bool3Arg, StringArg, NumberArg, FloatArg}
- argtype;
- int classcount;
- _Xconst char *usagestr;
- caddr_t address;
- Boolean save_it;
-} options[] = {
- {"+", NULL, NULL, StickyArg, StringArg, 1,
- NULL, (caddr_t) &curr_page, False},
- {"-s", "shrinkFactor", NULL, SepArg, NumberArg, 1,
- "shrink", ADDR(shrinkfactor), True},
-#ifndef VMS
- {"-S", NULL, NULL, SepArg, NumberArg, 2,
- "density", ADDR(_density), True},
- {"-density", "densityPercent", NULL, SepArg, NumberArg, 1,
- silent, ADDR(_density), True},
-#else
- {"-density", "densityPercent", NULL, SepArg, NumberArg, 1,
- "density", ADDR(_density), True},
-#endif
-#ifdef GREY
- {"-nogrey", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(_use_grey), True},
- {"+nogrey", "grey", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(_use_grey), True},
- {"-gamma", "gamma", NULL, SepArg, FloatArg, 1,
- "g", ADDR(_gamma), True},
- {"-install", NULL, NULL, TrueArg, Bool3Arg, 2,
- NULL, ADDR(install), False},
- {"-noinstall", "install", NULL, FalseArg, Bool3Arg, 1,
- NULL, ADDR(install), False},
-#endif
-#ifdef GRID
- {"-grid1", "grid1Color", NULL, SepArg, StringArg, 1,
- "color", ADDR(grid1_color), True},
- {"-grid2", "grid2Color", NULL, SepArg, StringArg, 1,
- "color", ADDR(grid2_color), True},
- {"-grid3", "grid3Color", NULL, SepArg, StringArg, 1,
- "color", ADDR(grid3_color), True},
-#endif /* GRID */
- {"-p", "pixelsPerInch", NULL, SepArg, NumberArg, 1,
- "pixels", ADDR(_pixels_per_inch), True},
- {"-margins", "Margin", NULL, SepArg, StringArg, 3,
- "dimen", (caddr_t) &margins, True},
- {"-sidemargin", "sideMargin", NULL, SepArg, StringArg, 1,
- "dimen", ADDR(sidemargin), True},
- {"-topmargin", "topMargin", NULL, SepArg, StringArg, 1,
- "dimen", ADDR(topmargin), True},
- {"-offsets", "Offset", NULL, SepArg, StringArg, 3,
- "dimen", (caddr_t) &offsets, True},
- {"-xoffset", "xOffset", NULL, SepArg, StringArg, 1,
- "dimen", ADDR(xoffset), True},
- {"-yoffset", "yOffset", NULL, SepArg, StringArg, 1,
- "dimen", ADDR(yoffset), True},
- {"-paper", "paper", NULL, SepArg, StringArg, 1,
- "papertype", ADDR(paper), True},
- {"-altfont", "altFont", NULL, SepArg, StringArg, 1,
- "font", ADDR(_alt_font), True},
- {"-nomakepk", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(makepk), True},
- {"+nomakepk", "makePk", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(makepk), True},
- {"-mfmode", "mfMode", NULL, SepArg, StringArg, 1,
- "mode-def", ADDR(mfmode), True},
- {"-l", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_list_fonts), True},
- {"+l", "listFonts", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(_list_fonts), True},
- {"-rv", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(reverse), True},
- {"+rv", "reverseVideo", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(reverse), True},
- {"-mgs", NULL, NULL, SepArg, StringArg, 2,
- subst, ADDR(mg_arg[0]), True},
- {"-mgs1", "magnifierSize1", NULL,SepArg, StringArg, 1,
- silent, ADDR(mg_arg[0]), True},
- {"-mgs2", "magnifierSize2", NULL,SepArg, StringArg, 1,
- silent, ADDR(mg_arg[1]), True},
- {"-mgs3", "magnifierSize3", NULL,SepArg, StringArg, 1,
- silent, ADDR(mg_arg[2]), True},
- {"-mgs4", "magnifierSize4", NULL,SepArg, StringArg, 1,
- silent, ADDR(mg_arg[3]), True},
- {"-mgs5", "magnifierSize5", NULL,SepArg, StringArg, 1,
- silent, ADDR(mg_arg[4]), True},
- {"-warnspecials", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_warn_spec), True},
- {"+warnspecials", "warnSpecials", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(_warn_spec), True},
- {"-hush", NULL, NULL, TrueArg, BooleanArg, 6,
- NULL, (caddr_t) &hush, True},
- {"+hush", "Hush", NULL, FalseArg, BooleanArg, 5,
- NULL, (caddr_t) &hush, True},
- {"-hushchars", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_hush_chars), True},
- {"+hushchars", "hushLostChars", NULL,FalseArg, BooleanArg, 1,
- NULL, ADDR(_hush_chars), True},
- {"-hushchecksums", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_hush_chk), True},
- {"+hushchecksums","hushChecksums", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(_hush_chk), True},
- {"-safer", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(safer), True},
- {"+safer", "safer", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(safer), True},
- {"-bw", NULL, NULL, SepArg, NumberArg, 2,
- "width", (caddr_t) &bwidth},
- {"-borderwidth", "borderWidth", NULL, SepArg, NumberArg, 1,
- silent, (caddr_t) &bwidth, True},
- {"-fg", NULL, NULL, SepArg, StringArg, 2,
- "color", ADDR(fore_color), True},
- {"-foreground", "foreground", NULL, SepArg, StringArg, 1,
- silent, ADDR(fore_color), True},
- {"-bg", NULL, NULL, SepArg, StringArg, 2,
- "color", ADDR(back_color), True},
- {"-background", "background", NULL, SepArg, StringArg, 1,
- silent, ADDR(back_color), True},
-#ifndef VMS
- {"-display", NULL, NULL, SepArg, StringArg, 1,
- "host:display", (caddr_t) &display, False},
-#else
- {"-display", NULL, NULL, SepArg, StringArg, 1,
- "host::display", (caddr_t) &display, False},
-#endif
- {"-geometry", "geometry", NULL, SepArg, StringArg, 1,
- "geometry", (caddr_t) &geometry, True},
- {"-icongeometry","iconGeometry", NULL,StickyArg, StringArg, 1,
- "geometry", ADDR(icon_geometry), False},
- {"-iconic", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, (caddr_t) &iconic, False},
- {"+iconic", "iconic", NULL, FalseArg, BooleanArg, 1,
- NULL, (caddr_t) &iconic, False},
- {"-keep", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(keep_flag), True},
- {"+keep", "keepPosition", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(keep_flag), True},
- {"-copy", NULL, NULL, TrueArg, Bool3Arg, 2,
- NULL, ADDR(copy), False},
- {"+copy", "copy", NULL, FalseArg, Bool3Arg, 1,
- NULL, ADDR(copy), False},
- {"-thorough", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(thorough), False},
- {"+thorough", "thorough", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(thorough), False},
-#if PS
- {"-nopostscript", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(_postscript), True},
- {"+nopostscript", "postscript", NULL,TrueArg, BooleanArg, 1,
- NULL, ADDR(_postscript), True},
- {"-noscan", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(prescan), True},
- {"+noscan", "prescan", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(prescan), True},
- {"-allowshell", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(allow_shell), True},
- {"+allowshell", "allowShell", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(allow_shell), True},
-#ifdef PS_DPS
- {"-nodps", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(useDPS), True},
- {"+nodps", "dps", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(useDPS), True},
-#endif
-#ifdef PS_NEWS
- {"-nonews", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(useNeWS), True},
- {"+nonews", "news", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(useNeWS), True},
-#endif
-#ifdef PS_GS
- {"-noghostscript",NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(useGS), True},
- {"+noghostscript","ghostscript", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(useGS), True},
- {"-nogssafer", NULL, NULL, FalseArg, BooleanArg, 2,
- NULL, ADDR(gs_safer), True},
- {"+nogssafer", "gsSafer", NULL, TrueArg, BooleanArg, 1,
- NULL, ADDR(gs_safer), True},
- {"-nogsalpha", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(gs_alpha), True},
- {"+nogsalpha", "gsAlpha", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(gs_alpha), True},
- {"-interpreter", "interpreter", NULL, SepArg, StringArg, 1,
- "path", ADDR(gs_path), True},
- {"-gspalette", "palette", NULL, SepArg, StringArg, 1,
- "monochrome|grayscale|color", ADDR(gs_palette), True},
-#endif
-#endif /* PS */
- {"-debug", "debugLevel", NULL, SepArg, StringArg, 1,
- "bitmask", ADDR(debug_arg), False},
- {"-version", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(version_flag), False},
- {"+version", "version", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(version_flag), False},
-#ifdef HTEX
- {"-underlink", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_underline_link), True},
- {"+underlink", "underLink", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(_underline_link), True},
- {"-browser", "wwwBrowser", NULL, SepArg, StringArg, 1,
- NULL, ADDR(_browser), True},
- {"-base", "urlBase", NULL, SepArg, StringArg, 1,
- NULL, ADDR(_URLbase), True},
-#endif
-/* BEGIN CHUNK xdvi.c 5 */
-#ifdef SRC_SPECIALS
- {"-srcSpecialFormat", "srcSpecialFormat", NULL, SepArg, NumberArg, 1,
- "[0,1,2]", (caddr_t)&src_specialFormat, True},
- {"-srcJumpButton", "srcJumpButton", NULL, SepArg, NumberArg, 1,
- "button", (caddr_t)&src_jumpButton, True},
- {"-srcTickShape", "srcTickShape", NULL, SepArg, NumberArg, 1,
- "[0,1,2,3]", (caddr_t)&src_tickShape, True},
- {"-srcTickSize", "srcTickSize", NULL, SepArg, StringArg, 1,
- "geometry", ADDR(_src_tickSize), True},
- {"-srcCursor", "srcCursor", NULL, SepArg, NumberArg, 1,
- "shape", (caddr_t)&src_cursor_shape, True},
- {"-srcEditorCommand", "srcEditorCommand", NULL, SepArg, StringArg, 1,
- "commandstring", (caddr_t)&src_editorCommand, True},
- {"-srcVerbosity", "srcVerbosity", NULL, SepArg, NumberArg, 1,
- "[0,1,2]", (caddr_t)&src_warn_verbosity, True},
- {"-srcVisibility", "srcVisibility", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_src_tickVisibility), True},
- {"+srcVisibility", "srcVisibility", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(_src_tickVisibility), True},
- {"-srcMode", "srcMode", NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(_src_evalMode), True},
- {"+srcMode", "srcMode", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(_src_evalMode), True},
-#endif
-#ifdef WIN32
- /* Run only one instance */
- {"-single", NULL, NULL, TrueArg, BooleanArg, 3,
- NULL, ADDR(single_flag), True},
- {"-1", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(single_flag), True},
- {"+single", "singleInstance", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(single_flag), True},
- /* Depth of the main bitmap */
- {"-depth", "depthText", NULL, SepArg, NumberArg, 1,
- "1|2|4|8|16|24", ADDR(numColors), False},
- /* Support of color */
-
- /* Auto scan of dvi files */
- {"-autoscan", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(scan_flag), True},
- {"+autoscan", "autoScan", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(scan_flag), True},
- {"-autolog", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(log_flag), True},
- {"+autolog", "autoLog", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(log_flag), True},
- {"-inmemory", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(in_memory), True},
- {"+inmemory", "inMemory", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(in_memory), True},
- {"-xform", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(use_xform), True},
- {"+xform", "useXform", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(use_xform), True},
- {"-book", NULL, NULL, TrueArg, BooleanArg, 2,
- NULL, ADDR(book_mode), True},
- {"+book", "bookMode", NULL, FalseArg, BooleanArg, 1,
- NULL, ADDR(book_mode), True},
-#endif
-};
-
-
-struct _resource resource = {
-#if CFGFILE && TOOLKIT
- /* progname */ "windvi",
-#endif
-#if TOOLKIT
- /* shrinkfactor */ 3,
-#endif
- /* 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,
-#if defined(VMS) || defined(WIN32) || !defined(TOOLKIT)
- /* fore_color */ NULL,
- /* back_color */ NULL,
-#endif
- /* _fore_Pixel */ (Pixel) 0,
- /* _back_Pixel */ (Pixel) 0,
-#ifdef TOOLKIT
- /* _brdr_Pixel */ (Pixel) 0,
- /* _hl_Pixel */ (Pixel) 0,
- /* _cr_Pixel */ (Pixel) 0,
-#endif
- /* icon_geometry */ NULL,
- /* keep_flag */ False,
- /* copy */ False,
- /* thorough */ False,
-#if PS
- /* default is to use DPS, then NEWS, then GhostScript;
- * we will figure out later on which one we will use */
- /* 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,
-#ifdef BUTTONS
- /* expert */ False,
- /* shrinkbutton[4] */ {100, 50, 33, 35},
-#endif
- /* 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,
-#ifdef TOOLKIT
- /* _grid1_Pixel */ (Pixel) 0,
- /* _grid2_Pixel */ (Pixel) 0,
- /* _grid3_Pixel */ (Pixel) 0,
-#endif /* TOOLKIT */
-#endif /* GRID */
-#ifdef HTEX
- /* _underline_link */ True,
- /* _browser */ (char *) NULL,
- /* _URLbase */ (char *) NULL,
- /* _scroll_pages */ (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
-#ifdef WIN32
- /* single_flag */ False,
- /* num_colors */ 8,
- /* scan_flag */ True,
- /* log_flag */ False,
- /* in_memory */ False,
- /* use_xform */ False,
- /* book_mode */ False
-#endif
-};
-
-void RestoreOptions();
-
-/*
- * Process the option table. This is not guaranteed for all possible
- * option tables, but at least it works for this one.
- */
-
-void
-parse_options(argc, argv)
- int argc;
- char **argv;
-{
- char **arg;
- char **argvend = argv + argc;
- const char *optstring;
- caddr_t addr;
- struct option *opt, *lastopt, *candidate;
- int len1, len2, matchlen;
-
- /*
- * Step 0. Restore options from the last run.
- */
- for (opt = options; opt < options + XtNumber(options); ++opt) {
- opt->mark = opt->resource;
- }
-
- RestoreOptions();
-
- /*
- * 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->mark = (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) = (char *)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->mark == (char *) opt) {
- addr = opt->address;
- lastopt = opt + opt->classcount;
- for (candidate = opt; candidate < lastopt; ++candidate) {
- /* FIXME : resource or mark ? */
- if (candidate->mark != 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->mark = NULL;
- }
- }
- }
-
-#if 0
- if ((DISP = XOpenDisplay(display)) == NULL)
- oops("Can't open display");
- SCRN = DefaultScreenOfDisplay(DISP);
-#endif
-
- /*
- * Step 3. Handle resources (including classes).
- */
- for (opt = options; opt < options + XtNumber(options); ++opt)
- if (opt->mark &&
- ((optstring = XGetDefault(DISP, prog, opt->resource)) ||
- (optstring = XGetDefault(DISP, "XDvi", opt->resource))))
- {
- lastopt = opt + opt->classcount;
- for (candidate = opt; candidate < lastopt; ++candidate)
- if (candidate->mark != 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 = xstrdup((char *)optstring);
- break;
- case NumberArg:
- * (int *) candidate->address = atoi(optstring);
- break;
- case FloatArg:
- * (float *) candidate->address =
- atof(optstring);
- }
- }
-}
-
-/* Analysis of arguments */
-void ParseCmdLine(LPSTR lpCmdLine)
-{
- int i;
-
-#ifdef _TRACE
- fprintf(stderr, "Command Line : %s\n", lpCmdLine);
-#endif
-
-#if _DEBUG
- fprintf(stderr, "lpCmdLine = %s\n", lpCmdLine);
-#endif
- sCmdArg = parse_cmdline(lpCmdLine, NULL, &sOutputName, NULL);
-
- argv = &sCmdArg[0][0];
- for(argc = 0; argv[argc] != NULL; argc++);
-
-#if 0
- {
- int i;
- for (i = 0; i < argc; i++) {
- fprintf(stderr, "argv[%d] = %s\n", i, argv[i]);
- }
- }
-#endif
- /*
- * 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
- ))
- {
-#ifdef WIN32
- Printf("windvi(k) version %s\n", TVERSION);
- Printf("Copyright (C) 1990-1998 Paul Vojta.\n\
-Copyright (C) 1997-1999 Fabrice Popineau for the Win32 part.\n\
-There is NO warranty. You may redistribute this software\n\
-under the terms of the GNU General Public License\n\
-and the standard X consortium copyright notice.\n\
-For more information about these matters, see the files\n\
-named COPYING and windvi.c.\n\
-Primary author of Xdvi: Paul Vojta; -k maintainer: janl@math.uio.no.\n\
-Win32 maintainer: Fabrice.Popineau@supelec.fr\n");
-#else
- Printf("xdvi(k) version %s\n", TVERSION);
- Printf("Copyright (C) 1990-1998 Paul Vojta.\n\
-There is NO warranty. You may redistribute this software\n\
-under the terms of the GNU General Public License\n\
-and the standard X consortium copyright notice.\n\
-For more information about these matters, see the files\n\
-named COPYING and xdvi.c.\n\
-Primary author of Xdvi: Paul Vojta; -k maintainer: janl@math.uio.no.\n");
-#endif
- /* Waiting acknowledge from user */
- while (bLogShown == TRUE);
- /* and exiting */
- /* PostMessage(hViewLog, WM_QUIT, 0, 0); */
- CleanExit(0);
- }
-
- if (argc == 2 && ((strcmp (argv[1], "-help") == 0)
- || (strcmp (argv[1], "+help") == 0)
- || (strcmp (argv[1], "--help") == 0)
- ))
- {
- extern KPSEDLL char *kpse_bug_address;
-#ifdef WIN32
- Printf("windvi(k) version %s\n", TVERSION);
- Printf("Preview a DVI file under the Win32 window system. %s\n",
- kpse_bug_address);
-#else
- Printf("xdvi(k) version %s\n", TVERSION);
- Printf("Preview a DVI file under the X window system. %s\n",
- kpse_bug_address);
-#endif
- usage (); /* Unfortunately this exits with status 1. */
- }
-
-#ifndef WIN32
-#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
-#endif /* WIN32 */
-
- /* 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] = "windvi", "windvi");
- kpse_set_program_enabled (kpse_any_glyph_format,
- MAKE_TEX_PK_BY_DEFAULT, kpse_src_compile);
-
-#ifdef WIN32
- prog = kpse_program_name;
-#endif
-
-#ifdef SELFAUTO
- argv0 = argv[0];
-#endif
-
- parse_options(argc, argv);
-
- 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
-#if !defined(SELFILE) && !defined(WIN32)
- || dvi_name == NULL
-#endif
- ) usage();
-
- if (shrink_factor > 1) {
- bak_shrink = resource.shrinkfactor;
- mane.shrinkfactor = resource.shrinkfactor; /* otherwise it's 1 */
- }
-#if 0
- /* We do not allow -s 1 at startup. */
- if (resource.shrinkfactor == 1)
- resource.shrinkfactor = 2;
-#endif
-
- 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
-
-
-#ifdef GRID
- if (resource.grid1_color)
- grid1_Pixel = string_to_colorref(resource.grid1_color);
- if (resource.grid2_color)
- grid2_Pixel = string_to_colorref(resource.grid2_color);
- if (resource.grid3_color)
- grid3_Pixel = string_to_colorref(resource.grid3_color);
-#endif /* GRID */
-
-#if 0
- /* There was a -s option */
-
- /* We do not allow -s 1 at startup. */
- if (resource.shrinkfactor == 1)
- resource.shrinkfactor = 2;
-
- if (resource.shrinkfactor > 1)
- shrink_factor = resource.shrinkfactor;
-#endif
-
-
-#ifdef ALTFONT
- resource._alt_font = xstrdup(ALTFONT);
-#else
- resource._alt_font = xstrdup("cmr10");
-#endif
-
- if (resource.version_flag)
- Printf("windvi version %s\n", TVERSION);
-
- kpse_init_prog (uppercasify (kpse_program_name),
- pixels_per_inch, resource.mfmode, alt_font);
-
- 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.'' */
-
- hush_chk = hush_chk || kpse_tex_hush ("checksum");
- hush_chars = hush_chars || kpse_tex_hush ("lostchars");
- warn_spec = warn_spec || kpse_tex_hush ("special");
- kpse_make_tex_discard_errors = hush_chars;
-
-
- /* Can't use {Black,White}PixelOfScreen() any more */
- if (!resource.fore_color)
- resource.fore_color =
- xstrdup(resource.reverse ? "white" : "black");
- if (!resource.back_color)
- resource.back_color =
- xstrdup(resource.reverse ? "black" : "white");
-
- fore_Pixel = (resource.fore_color
- ? string_to_colorref(resource.fore_color)
- : (resource.reverse ? WhitePixelOfScreen(SCRN)
- : BlackPixelOfScreen(SCRN)));
- back_Pixel = (resource.back_color
- ? string_to_colorref(resource.back_color)
- : (resource.reverse ? BlackPixelOfScreen(SCRN)
- : WhitePixelOfScreen(SCRN)));
- /* FIXME : create brushes and pens for these ones, use accordingly ! */
- brdr_Pixel = (brdr_color ? string_to_colorref(brdr_color) : fore_Pixel);
- hl_Pixel = (high_color ? string_to_colorref(high_color) : fore_Pixel);
- cr_Pixel = (curs_color ? string_to_colorref(curs_color) : fore_Pixel);
-
-#ifdef GRID
- if (resource.grid1_color)
- grid1_Pixel = string_to_colorref(resource.grid1_color);
- if (resource.grid2_color)
- grid2_Pixel = string_to_colorref(resource.grid2_color);
- if (resource.grid3_color)
- grid3_Pixel = string_to_colorref(resource.grid3_color);
-#endif /* GRID */
-
-#ifdef GREY
- if (resource._gamma == 0.0) resource._gamma = 1.0;
-#endif
-
-}
-
-NORETURN void
-usage() {
-#if defined(TOOLKIT) && !defined(WIN32)
- 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: owindvi [+[<page>]]", stderr);
-#else
- Fputs("Usage: windvi [+[<page>]]", stderr);
-#endif
-
-#if 1
- for (opt = options; opt < options + XtNumber(options); ++opt) {
-#if defined(TOOLKIT) && !defined(WIN32)
- 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 or WIN32 */
- 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);
-#endif
-#ifdef SELFILE
- Fputs("[dvi_file]\n", stderr);
-#else
- Fputs("dvi_file\n", stderr);
-#endif
- /* Waiting acknowledge from user */
- while (bLogShown == TRUE);
- /* and exiting */
- CleanExit(1);
-}
-/*
- Saving options. In which file ?
- Saving can be done either in $(HOME)/windvi.cnf
- or in $(sysdir)/windvi.cnf
- Reading will be done first in $(TEXMFCNF)/windvi.cnf
- next in $(HOME)/windvi.cnf and in $(sysdir)/windvi.cnf if nothing found
- in $(HOME).
- */
-
-/*
- Implement INI files.
- INI files are list of sections.
- Each section consist of a list of pairs (key, val).
- */
-
-typedef struct ini_section {
- char *key;
- char *val;
- struct ini_section *n;
-} ini_section;
-
-typedef struct ini_file {
- char *s_name;
- ini_section *s;
- struct ini_file *n;
-} ini_file;
-
-/*
- Retrieve a ret pointer to an existing ini section,
- or add it and return the new pointer.
- */
-ini_file *GetIniSection(ini_file *pif, char *name,
- ini_file **ret, boolean create)
-{
- ini_file *p, *q;
-
- for(p = pif, q = NULL; p != NULL; q = p, p = p->n) {
- if (stricmp(p->s_name, name) == 0) {
- *ret = p;
- return pif;
- }
- }
- if (create) {
- p = (ini_file *)xmalloc(sizeof(ini_file));
- p->s_name = strdup(name);
- p->n = NULL;
- p->s = NULL;
- if (q != NULL) {
- /* Some q exists, so hang p to q->n and return p */
- q->n = p;
- }
- else {
- /* Not yet any section was built. */
- pif = p;
- }
- *ret = p;
- return pif;
- }
- else {
- *ret = NULL;
- return pif;
- }
-}
-
-/*
- Set the value of 'key' to 'val' in section 'name' of 'pif'.
- */
-ini_file *SetIniValue(ini_file *pif, char *name, char *key, char*val)
-{
- ini_file *f;
- ini_section *p, *q;
-
- /* With create flag, f can't be null */
- pif = GetIniSection(pif, name, &f, True);
-
- for (q = NULL, p = f->s; p != NULL; q = p, p = p->n) {
- if (stricmp(p->key, key) == 0) {
- /* set current value and return */
- if (p->val) free(p->val);
- p->val = strdup(val);
- return pif;
- }
- }
- p = (ini_section *)xmalloc(sizeof(ini_section));
- p->key = strdup(key);
- p->val = strdup(val);
- p->n = NULL;
- if (q != NULL)
- q->n = p;
- else
- f->s = p;
- return pif;
-}
-
-/*
- Retrieve the value of 'key' in section 'name' of 'pif'.
- */
-char *GetIniValue(ini_file *pif, char *name, char *key)
-{
- ini_file *f;
- ini_section *p;
-
- /* will not modify pif */
- pif = GetIniSection(pif, name, &f, False);
-
- if (!f)
- return NULL;
-
- for (p = f->s; p != NULL; p = p->n) {
- if (stricmp(p->key, key) == 0) {
- return p->val;
- }
- }
- return NULL;
-}
-
-/*
- The windvi.cnf INI file. Needs a phantom node.
- */
-
-ini_file *windvi_cnf;
-
-/*
- Write an ini_file to file given.
- */
-Boolean WriteOptions(FILE *f, ini_file *ini)
-{
- /* First, save the implicit options structure.
- */
-
- struct option *opt;
- caddr_t addr;
- ini_file *p;
- ini_section *q;
- int i;
- extern iLastUsedFilesNum;
- extern char **lpLastUsedFiles;
-
- fprintf(f, "[Display]\n");
- for (opt = options; opt < options + XtNumber(options); ++opt) {
- if (opt->save_it && opt->resource) {
- fprintf(f, "%s=", opt->resource);
- addr = opt->address;
- switch (opt->argtype) {
- case BooleanArg:
- switch (*((Boolean *)addr)) {
- case False:
- fprintf(f, "false\n");
- break;
- case True:
- fprintf(f, "true\n");
- break;
- }
- break;
- case Bool3Arg:
- switch (*((Bool3 *)addr)) {
- case False:
- fprintf(f, "false\n");
- break;
- case Maybe:
- fprintf(f, "maybe\n");
- break;
- case True:
- fprintf(f, "true\n");
- break;
- }
- break;
- case StringArg:
- fprintf(f, "%s\n", (*((char **)addr) ? *((char **)addr) : ""));
- break;
- case NumberArg:
- fprintf(f, "%d\n", *((int *)addr));
- break;
- case FloatArg:
- fprintf(f, "%f\n", *((float *)addr));
- break;
- }
- }
- }
- /* Last used files */
- fprintf(f, "[Last Used Files]\n");
- fprintf(f, "numFiles=%d\n", iLastUsedFilesNum);
- for (i = 0; i < iLastUsedFilesNum; i++) {
- fprintf(f, "lastFile%d=%s\n", i, lpLastUsedFiles[i]);
-#if 0
- fprintf(stderr, "SaveOptions : plLastUsedFiles[%d] = %s\n", i,
- lpLastUsedFiles[i]);
-#endif
- }
- /* Save the rest of the ini_file */
- for(p = ini; p != NULL; p = p->n) {
- /* Do not write the Display section again. */
- if (stricmp(p->s_name, "Display") && stricmp(p->s_name, "Last Used Files")) {
- fprintf(f, "[%s]\n", p->s_name);
- for(q = p->s; q != NULL; q = q->n) {
- fprintf(f, "%s=%s\n", q->key, q->val);
- }
- }
- }
-
- return True;
-}
-
-void SaveOptions()
-{
- FILE *outf = NULL;
- char *homedir = NULL;
- char *save_name = NULL;
-
- /* FIXME : change this for:
- - save in %HOME% if defined
- - else try TEXMFLOCAL/texmf/windvi.cnf (if writable)
- - else try TEXMFMAIN/texmf/windvi.cnf (if writable)
- - else do not save options and warn user
- */
- if (homedir = getenv("HOME")) {
- if (IS_DIR_SEP(homedir[strlen(homedir) - 1])) {
- save_name = concat(homedir, "windvi.cnf");
- }
- else {
- save_name = concat(homedir, "/windvi.cnf");
- }
-
- if ((outf = fopen(save_name, "w")) == NULL) {
- char buf[_MAX_PATH];
- sprintf(buf, "%s not writable !", save_name);
- MessageBox(hWndMain, buf, NULL,
- MB_APPLMODAL | MB_ICONERROR | MB_OK);
- return;
- }
- }
- else {
- save_name = concat (kpse_path_expand("$TEXMFLOCAL/web2c"), "/windvi.cnf");
- if (save_name == NULL || (outf = fopen(save_name, "w")) == NULL) {
- free(save_name);
- save_name = kpse_find_file("windvi.cnf", kpse_cnf_format, True);
- if (save_name == NULL || (outf = fopen(save_name, "w")) == NULL) {
- MessageBox(hWndMain, "No place in $TEXMFCNF to save options.", NULL,
- MB_APPLMODAL | MB_ICONERROR | MB_OK);
- return;
- }
- }
- }
- if (save_name)
- free(save_name);
- if (outf) {
- WriteOptions(outf, windvi_cnf);
- }
- else {
- MessageBox(hWndMain, "No place to save options.", NULL,
- MB_APPLMODAL | MB_ICONERROR | MB_OK);
- return;
- }
- fclose(outf);
-}
-
-ini_file *ReadOptions(FILE *f, ini_file *ini)
-{
- char *line;
- char *p;
- ini_file *pif;
-
- pif = NULL;
-
- while ((line = read_line(f)) != NULL) {
-#if 0
- fprintf(stderr, "ReadOptions : %s\n", line);
-#endif
- /* Wait for a section */
- if ((*line == '[') && (p = strchr(line, ']'))) {
- *p = '\0';
-#if 0
- fprintf(stderr, "ReadOptions : new section %s\n", line+1);
-#endif
- ini = GetIniSection(ini, line + 1, &pif, True);
- }
- else {
- /* there is a current pif, scan the line for = */
- if (!(p = strchr(line, '='))) {
- /* invalid line, discard it */
- }
- else {
- *p = '\0';
- ini = SetIniValue(ini, pif->s_name, line, p+1);
- }
- }
- free(line);
- }
- return ini;
-}
-
-void RestoreOptions()
-{
- FILE *inf;
- char *save_name, *homedir;
-
- /* First, look for a site config file. */
- save_name = kpse_find_file("windvi.cnf", kpse_cnf_format, True);
- if (save_name && *save_name) {
- if ((inf = fopen(save_name, "r")) != NULL) {
- windvi_cnf = ReadOptions(inf, windvi_cnf);
- fclose(inf);
- }
- else {
- MessageBox(hWndMain, "Fail reading site configuration file.", NULL,
- MB_APPLMODAL | MB_ICONERROR | MB_OK);
- }
- free(save_name);
- }
- /* Second, overwrite options values by a private
- config file. */
- if ((homedir = getenv("HOME")) || (homedir = "c:/")) {
- if (IS_DIR_SEP(homedir + strlen(homedir) - 1)) {
- save_name = concat(homedir, "windvi.cnf");
- }
- else {
- save_name = concat(homedir, "/windvi.cnf");
- }
- if ((inf = fopen(save_name, "r")) != NULL) {
- windvi_cnf = ReadOptions(inf, windvi_cnf);
- fclose(inf);
- }
- free(save_name);
- }
- /* In case no .cnf file, create dummy entries */
- if (windvi_cnf == NULL) {
- ini_file *pif;
- windvi_cnf = GetIniSection(windvi_cnf, "Display", &pif, True);
- windvi_cnf = GetIniSection(windvi_cnf, "Last Used Files", &pif, True);
- windvi_cnf = SetIniValue(windvi_cnf, pif->s_name, "numFiles", "0");
- }
-
- /* Report the last used files in the queue */
- {
- int i;
- extern iLastUsedFilesNum;
- extern char **lpLastUsedFiles;
- char *num_files = GetIniValue(windvi_cnf, "Last Used Files", "numFiles");
- if (num_files) {
- char buf[sizeof("lastFile")+5];
- iLastUsedFilesNum = atoi(num_files);
- lpLastUsedFiles = (char **)xmalloc(iLastUsedFilesNum*sizeof(char*));
- for (i = 0; i < iLastUsedFilesNum; i++) {
- char *p;
- sprintf(buf, "lastFile%d", i);
- if (p = GetIniValue(windvi_cnf, "Last Used Files", buf)) {
- lpLastUsedFiles[i] = xstrdup(p);
- }
- else
- lpLastUsedFiles[i] = xstrdup("");
-#if 0
- fprintf(stderr, "RestoreOptions : plLastUsedFiles[%d] = %s\n", i, lpLastUsedFiles[i]);
-#endif
- }
- }
- else {
- /* Allocate 4 Used Files by default */
- iLastUsedFilesNum = 4;
- lpLastUsedFiles = (char **)xmalloc(iLastUsedFilesNum*sizeof(char*));
- for (i = 0; i < iLastUsedFilesNum; i++)
- lpLastUsedFiles[i] = xstrdup("");
- }
- }
-}
-
-void free_ini_section(ini_section *s)
-{
- if (s) {
- if (s->key) free(s->key);
- if (s->val) free(s->val);
- free_ini_section(s->n);
- free(s);
- }
-}
-
-void free_ini_file(ini_file *f)
-{
- if (f) {
- if (f->s_name) free(f->s_name);
- free_ini_section(f->s);
- free_ini_file(f->n);
- free(f);
- }
-}
-
-void FreeOptions()
-{
- free_ini_file(windvi_cnf);
-}
-
-const char *XGetDefault(void *v, char *prog, char *key)
-{
- char *ret;
- ret = GetIniValue(windvi_cnf, "Display", key);
- /* We do not allow "" */
- if (ret && !*ret) return NULL;
- return ret;
-}