summaryrefslogtreecommitdiff
path: root/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/hypertex/tanmoy/ghostview-1.5-hacked/main.c')
-rw-r--r--support/hypertex/tanmoy/ghostview-1.5-hacked/main.c937
1 files changed, 937 insertions, 0 deletions
diff --git a/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c b/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c
new file mode 100644
index 0000000000..1d2ed92d83
--- /dev/null
+++ b/support/hypertex/tanmoy/ghostview-1.5-hacked/main.c
@@ -0,0 +1,937 @@
+/*
+ * main.c -- Main routine for ghostview.
+ * Copyright (C) 1992 Timothy O. Theisen
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Tim Theisen Systems Programmer
+ * Internet: tim@cs.wisc.edu Department of Computer Sciences
+ * UUCP: uwvax!tim University of Wisconsin-Madison
+ * Phone: (608)262-0438 1210 West Dayton Street
+ * FAX: (608)262-9777 Madison, WI 53706
+ */
+/* This file is part of the hacked version of the ghostview package */
+/* which is distributed under the terms of the gnu license. The */
+/* modification referred to above is by Tanmoy Bhattacharya, */
+/* <tanmoy@qcd.lanl.gov> on Nov 17, 1994. Neither the modification, */
+/* nor the original program provides any warranty. */
+
+#include <X11/Intrinsic.h>
+#include <X11/cursorfont.h>
+#include <X11/StringDefs.h>
+#include <X11/Shell.h>
+#ifdef VMS
+#include <X11/bitmaps/dot.>
+#include <X11/bitmaps/menu16.>
+#include <X11/bitmaps/tie_fighter.>
+#else
+#include <X11/bitmaps/dot>
+#include <X11/bitmaps/menu16>
+#include <X11/bitmaps/tie_fighter>
+#endif
+
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Viewport.h>
+#include <X11/Xaw/Box.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/SmeLine.h>
+#include <X11/Xaw/Label.h>
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Command.h>
+
+#include "Ghostview.h"
+#include "gv.h"
+#include "ps.h"
+
+extern char *getenv();
+
+static String version = "Ghostview, version 1.5";
+
+static XtResource resources[] = {
+ {"showTitle", "Labels", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, show_title), XtRImmediate, (XtPointer)True},
+ {"showDate", "Labels", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, show_date), XtRImmediate, (XtPointer)True},
+ {"showLocator", "Labels", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, show_locator), XtRImmediate, (XtPointer)True},
+ {"autoCenter", "AutoCenter", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, auto_center), XtRImmediate, (XtPointer)True},
+ {"horizontalMargin", "Margin", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, wm_horiz_margin), XtRImmediate, (XtPointer)20},
+ {"verticalMargin", "Margin", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, wm_vert_margin), XtRImmediate, (XtPointer)44},
+ {"minimumMagstep", "Magstep", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, minimum_magstep), XtRImmediate, (XtPointer)-5},
+ {"maximumMagstep", "Magstep", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, maximum_magstep), XtRImmediate, (XtPointer)5},
+ {"magstep", "Magstep", XtRInt, sizeof(int),
+ XtOffsetOf(AppResources, magstep), XtRImmediate, (XtPointer)0},
+ {"orientation", "Orientation", XtRPageOrientation,
+ sizeof(XtPageOrientation), XtOffsetOf(AppResources, orientation),
+ XtRImmediate, (XtPointer) XtPageOrientationPortrait},
+ {"page", "Page", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, page), XtRImmediate, NULL},
+ {"pageMedia", "PageMedia", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, pagemedia), XtRImmediate, "Letter"},
+ {"forceOrientation", "Force", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, force_orientation), XtRImmediate,
+ (XtPointer)False},
+ {"forcePageMedia", "Force", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, force_pagemedia), XtRImmediate, (XtPointer)False},
+ {"swapLandscape", "SwapLandscape", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, swap_landscape), XtRImmediate, (XtPointer)False},
+#ifndef VMS
+#if defined(SVR4) || defined(SYSV) || defined(USG)
+ {"printCommand", "PrintCommand", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_command), XtRImmediate, "lp"},
+ {"printerVariable", "PrinterVariable", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, printer_variable), XtRImmediate, "LPDEST"},
+#else
+ {"printCommand", "PrintCommand", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_command), XtRImmediate, "lpr"},
+ {"printerVariable", "PrinterVariable", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, printer_variable), XtRImmediate, "PRINTER"},
+#endif
+ {"printPrompt", "PrintPrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_prompt), XtRImmediate, "Printer Name:"},
+#else /* VMS */
+ {"printCommand", "PrintCommand", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_command), XtRImmediate, "Print_dcl/Delete"},
+ {"printerVariable", "PrinterVariable", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, printer_variable), XtRImmediate, "GV_PRINT_QUAL"},
+ {"printPrompt", "PrintPrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_prompt), XtRImmediate, "Print Qualifiers:"},
+#endif /* VMS */
+ {"defaultPrinter", "DefaultPrinter", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, default_printer), XtRImmediate, NULL},
+ {"printFail", "printFail", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, print_fail), XtRImmediate,
+ "\"%s\" command failed."},
+ {"openPrompt", "OpenPrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, open_prompt), XtRImmediate, "Open File:"},
+ {"openFail", "OpenFail", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, open_fail), XtRImmediate, "Cannot open file: "},
+ {"savePrompt", "SavePrompt", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, save_prompt), XtRImmediate, "Save File:"},
+ {"saveFail", "SaveFail", XtRString, sizeof(String),
+ XtOffsetOf(AppResources, save_fail), XtRImmediate, "Cannot save file: "},
+ {"openWindows", "OpenWindows", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, openwindows), XtRImmediate, (XtPointer)False},
+ {"ncdwm", "Ncdwm", XtRBoolean, sizeof(Boolean),
+ XtOffsetOf(AppResources, ncdwm), XtRImmediate, (XtPointer)False},
+};
+
+static XrmOptionDescRec options[] = {
+ {"-monochrome", "*Ghostview.palette", XrmoptionNoArg, "Monochrome"},
+ {"-grayscale", "*Ghostview.palette", XrmoptionNoArg, "Grayscale"},
+ {"-color", "*Ghostview.palette", XrmoptionNoArg, "Color"},
+ {"-page", ".page", XrmoptionSepArg, NULL},
+ {"-title", ".showTitle", XrmoptionNoArg, "True"},
+ {"-notitle", ".showTitle", XrmoptionNoArg, "False"},
+ {"-date", ".showDate", XrmoptionNoArg, "True"},
+ {"-nodate", ".showDate", XrmoptionNoArg, "False"},
+ {"-locator", ".showLocator", XrmoptionNoArg, "True"},
+ {"-nolocator", ".showLocator", XrmoptionNoArg, "False"},
+ {"-center", ".autoCenter", XrmoptionNoArg, "True"},
+ {"-nocenter", ".autoCenter", XrmoptionNoArg, "False"},
+ {"-labels", ".Labels", XrmoptionNoArg, "True"},
+ {"-nolabels", ".Labels", XrmoptionNoArg, "False"},
+ {"-quiet", "*Ghostview.quiet", XrmoptionNoArg, "True"},
+ {"-noquiet", "*Ghostview.quiet", XrmoptionNoArg, "False"},
+ {"-safer", "*Ghostview.safer", XrmoptionNoArg, "True"},
+ {"-nosafer", "*Ghostview.safer", XrmoptionNoArg, "False"},
+ {"-arguments", "*Ghostview.arguments", XrmoptionSepArg, NULL},
+ {"-xdpi", "*Ghostview.xdpi", XrmoptionSepArg, NULL},
+ {"-ydpi", "*Ghostview.ydpi", XrmoptionSepArg, NULL},
+ {"-dpi", "*Ghostview.Resolution", XrmoptionSepArg, NULL},
+ {"-resolution", "*Ghostview.Resolution", XrmoptionSepArg, NULL},
+ {"-magstep", ".magstep", XrmoptionSepArg, NULL},
+ {"-portrait", ".orientation", XrmoptionNoArg, "Portrait"},
+ {"-landscape", ".orientation", XrmoptionNoArg, "Landscape"},
+ {"-upsidedown", ".orientation", XrmoptionNoArg, "Upside-down"},
+ {"-seascape", ".orientation", XrmoptionNoArg, "Seascape"},
+ {"-forceorientation", ".forceOrientation", XrmoptionNoArg, "True"},
+ {"-letter", ".pageMedia", XrmoptionNoArg, "Letter"},
+ {"-tabloid", ".pageMedia", XrmoptionNoArg, "Tabloid"},
+ {"-ledger", ".pageMedia", XrmoptionNoArg, "Ledger"},
+ {"-legal", ".pageMedia", XrmoptionNoArg, "Legal"},
+ {"-statement", ".pageMedia", XrmoptionNoArg, "Statement"},
+ {"-executive", ".pageMedia", XrmoptionNoArg, "Executive"},
+ {"-a3", ".pageMedia", XrmoptionNoArg, "A3"},
+ {"-a4", ".pageMedia", XrmoptionNoArg, "A4"},
+ {"-a5", ".pageMedia", XrmoptionNoArg, "A5"},
+ {"-b4", ".pageMedia", XrmoptionNoArg, "B4"},
+ {"-b5", ".pageMedia", XrmoptionNoArg, "B5"},
+ {"-folio", ".pageMedia", XrmoptionNoArg, "Folio"},
+ {"-quarto", ".pageMedia", XrmoptionNoArg, "Quarto"},
+ {"-10x14", ".pageMedia", XrmoptionNoArg, "10x14"},
+ {"-forcemedia", ".forcePageMedia", XrmoptionNoArg, "True"},
+ {"-force", ".Force", XrmoptionNoArg, "True"},
+ {"-swap", ".swapLandscape", XrmoptionNoArg, "True"},
+ {"-noswap", ".swapLandscape", XrmoptionNoArg, "False"},
+ {"-openwindows", ".openWindows", XrmoptionNoArg, "True"},
+ {"-noopenwindows", ".openWindows", XrmoptionNoArg, "False"},
+ {"-ncdwm", ".ncdwm", XrmoptionNoArg, "True"},
+ {"-noncdwm", ".ncdwm", XrmoptionNoArg, "False"},
+};
+
+static XtActionsRec actions[] = {
+ {"GhostviewCopyright", gv_copyright},
+ {"GhostviewQuit", gv_quit},
+ {"GhostviewOpen", gv_open},
+ {"GhostviewReopen", gv_reopen},
+ {"GhostviewSave", gv_save},
+ {"GhostviewPrintWhole", gv_print_whole},
+ {"GhostviewPrintMarked", gv_print_marked},
+ {"GhostviewPrevious", gv_prev},
+ {"GhostviewShow", gv_show},
+ {"GhostviewNext", gv_next},
+ {"GhostviewCenter", gv_center},
+ {"GhostviewMark", gv_mark},
+ {"GhostviewUnmark", gv_unmark},
+ {"GhostviewSetMagstep", gv_set_magstep},
+ {"GhostviewIncreaseMagstep",gv_increase_magstep},
+ {"GhostviewDecreaseMagstep",gv_decrease_magstep},
+ {"GhostviewSetOrientation", gv_set_orientation},
+ {"GhostviewSwapLandscape", gv_swap_landscape},
+ {"GhostviewSetPageMedia", gv_set_pagemedia},
+ {"GhostviewDefault", gv_default},
+ {"GhostviewForce", gv_force},
+ {"GhostviewDeleteWindow", gv_delete_window},
+ {"GhostviewDeleteZoom", gv_delete_zoom},
+ {"GhostviewDismiss", gv_dismiss},
+ {"GhostviewScrollUp", gv_scroll_up},
+ {"GhostviewScrollDown", gv_scroll_down},
+ {"GhostviewScrollLeft", gv_scroll_left},
+ {"GhostviewScrollRight", gv_scroll_right},
+ {"GhostviewEraseLocator", gv_erase_locator},
+ {"GhostviewCheckFile", gv_check_file},
+ {"GhostviewBack", gv_back},
+};
+
+String fallback_resources[] = {
+# include "app-defaults.h"
+ NULL
+};
+
+#define ROWS 22
+#define COLS 68
+static String copyright = "\
+Ghostview -- An X11 user interface for ghostscript.\n\
+Copyright (C) 1992 Timothy O. Theisen\n\
+\n\
+This program is free software; you can redistribute it and/or modify\n\
+it under the terms of the GNU General Public License as published by\n\
+the Free Software Foundation; either version 2 of the License, or\n\
+(at your option) any later version.\n\
+\n\
+This program is distributed in the hope that it will be useful,\n\
+but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
+GNU General Public License for more details.\n\
+\n\
+You should have received a copy of the GNU General Public License\n\
+along with this program; if not, write to the Free Software\n\
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\
+\n\
+ Author: Tim Theisen Systems Programmer\n\
+Internet: tim@cs.wisc.edu Department of Computer Sciences\n\
+ UUCP: uwvax!tim University of Wisconsin-Madison\n\
+ Phone: (608)262-0438 1210 West Dayton Street\n\
+ FAX: (608)262-9777 Madison, WI 53706";
+
+static void Syntax();
+
+float default_xdpi; /* default xdpi from ghostview widget */
+float default_ydpi; /* default ydpi from ghostview widget */
+
+int num_ghosts; /* number of ghostview widgets active */
+FILE *psfile; /* file to display */
+String filename; /* its filename */
+String oldfilename; /* previous filename */
+int current_page; /* current page being displayed */
+int current_magstep;/* current magnification */
+XtPageOrientation current_orientation; /* current orientation */
+int default_pagemedia; /* index into document media or papersizes */
+int current_pagemedia; /* index into document media or papersizes */
+Boolean force_document_media; /* Whether to force a document media */
+int document_media; /* document media being forced */
+int current_llx; /* current bounding box */
+int current_lly;
+int current_urx;
+int current_ury;
+int base_papersize; /* tells where papersizes begins */
+Boolean info_up; /* tells if information window is up */
+int force_setting; /* tells if new setting override %%comments */
+Pixmap dot_bitmap; /* bitmap used to mark default setting */
+Pixmap menu16_bitmap; /* bitmap used to mark document setting */
+Pixmap tie_fighter_bitmap; /* bitmap used to mark forced setting */
+String toc_text; /* page labels (Table of Contents) */
+int toc_length; /* length of page label text */
+int toc_entry_length; /* length of one entry */
+int info_length; /* number of bytes in infotext window */
+int mode; /* tells what type of popup */
+time_t mtime; /* last modified time of input file */
+struct document *doc; /* document structure */
+struct document *olddoc; /* document structure */
+Atom wm_delete_window; /* Atom sent to destroy a window */
+XErrorHandler old_Xerror; /* standard error handler */
+Boolean dying; /* whether an X error caused our exit */
+XErrorEvent bomb; /* what the error was */
+
+XtAppContext app_con;
+AppResources app_res;
+
+/* Widgets used. Indentation indicates hierarchy */
+ Widget toplevel;
+ Widget form;
+ Widget titlebutton;
+ Widget titlemenu;
+ Widget datebutton;
+ Widget datemenu;
+ Widget locator;
+ Widget box;
+ Widget filebutton;
+ Widget filemenu;
+ Widget openbutton;
+ Widget reopenbutton;
+ Widget printwholebutton;
+ Widget printmarkedbutton;
+ Widget savebutton;
+ Widget copyrightbutton;
+ Widget quitbutton;
+ Widget pagebutton;
+ Widget pagemenu;
+ Widget nextbutton;
+ Widget showbutton;
+ Widget prevbutton;
+ Widget backbutton;
+ Widget centerbutton;
+ Widget markbutton;
+ Widget unmarkbutton;
+ Widget magstepbutton;
+ Widget magstepmenu;
+ Widget *magstepentry;
+ Widget orientationbutton;
+ Widget orientationmenu;
+ Widget portraitbutton;
+ Widget landscapebutton;
+ Widget upsidedownbutton;
+ Widget seascapebutton;
+ Widget swapbutton;
+ Widget pagemediabutton;
+ Widget pagemediamenu;
+ Widget *pagemediaentry;
+ Widget toc;
+ Widget pageview;
+ Widget page;
+
+/* Popup children */
+ Widget infopopup;
+ Widget infoform;
+ Widget infotext;
+ Widget infodismiss;
+ Widget copyrightpopup;
+ Widget copyrightform;
+ Widget copyrighttext;
+ Widget copyrightdismiss;
+ Widget dialogpopup;
+ Widget dialog;
+
+int
+main(argc, argv)
+int argc;
+char *argv[];
+{
+ struct stat sbuf;
+ Display *dpy;
+ Screen *scr;
+ Arg args[20];
+ Cardinal num_args;
+ Widget above_toc;
+ Widget left_of_page;
+ Widget line;
+ int i;
+ Boolean set_vert_dist;
+ String s1, s2;
+ XFontStruct *font;
+ XTextProperty nameprop;
+ Dimension bottomMargin, leftMargin, rightMargin, topMargin;
+ Dimension width, height;
+ Dimension button_width;
+ static String nothing = "";
+ static XawTextSelectType sarry[] =
+ {XawselectLine, XawselectAll, XawselectNull};
+
+ XtToolkitInitialize();
+ XtSetTypeConverter(XtRString, XtRPageOrientation,
+ XmuCvtStringToPageOrientation, NULL, 0,
+ XtCacheAll, NULL);
+ app_con = XtCreateApplicationContext();
+ XtAppAddActions(app_con, actions, XtNumber(actions));
+ XtAppSetFallbackResources(app_con, fallback_resources);
+ dpy = XtOpenDisplay(app_con, NULL, NULL, "Ghostview",
+ options, XtNumber(options), &argc, argv);
+ if (dpy == NULL) {
+ fprintf(stderr, "%s: cannot open DISPLAY.\n", argv[0]);
+ exit(1);
+ }
+ if (argc > 2) Syntax(argv[0]);
+ if (argc == 2) {
+ filename = XtNewString(argv[1]);
+ if (strcmp(filename, "-")) {
+#ifdef VMS
+ if ((psfile = fopen(argv[1], "r", "mbc=100")) == NULL) {
+#else
+ if ((psfile = fopen(argv[1], "r")) == NULL) {
+#endif
+ fprintf(stderr, "Cannot open ");
+ perror(argv[1]);
+ exit(1);
+ }
+ stat(filename, &sbuf);
+ mtime = sbuf.st_mtime;
+ }
+ }
+
+ old_Xerror = XSetErrorHandler(catch_Xerror);
+ scr = DefaultScreenOfDisplay(dpy);
+ wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
+
+ toplevel = XtAppCreateShell(NULL, "Ghostview", applicationShellWidgetClass,
+ dpy, NULL, ZERO);
+
+ XtGetApplicationResources(toplevel, (XtPointer) &app_res,
+ resources, XtNumber(resources), NULL, ZERO);
+ if (s1 = getenv(app_res.printer_variable)) app_res.default_printer = s1;
+
+ /* Open Windows sometimes hands me a bad bitmap */
+ if (app_res.openwindows) {
+ dot_bitmap = menu16_bitmap = tie_fighter_bitmap = None;
+ } else {
+ dot_bitmap = XCreateBitmapFromData(dpy, RootWindowOfScreen(scr),
+ dot_bits, dot_width, dot_height);
+ menu16_bitmap = XCreateBitmapFromData(dpy, RootWindowOfScreen(scr),
+ menu16_bits, menu16_width,
+ menu16_height);
+ tie_fighter_bitmap = XCreateBitmapFromData(dpy, RootWindowOfScreen(scr),
+ tie_fighter_bits,
+ tie_fighter_width,
+ tie_fighter_height);
+ }
+
+ /* Instantiate Popup children */
+ infopopup = XtCreatePopupShell("information", topLevelShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ infoform = XtCreateManagedWidget("form", formWidgetClass,
+ infopopup, NULL, ZERO);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNscrollHorizontal, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNscrollVertical, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNdisplayCaret, False); num_args++;
+ infotext = XtCreateManagedWidget("text", asciiTextWidgetClass,
+ infoform, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, infotext); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ infodismiss = XtCreateManagedWidget("dismiss", commandWidgetClass,
+ infoform, args, num_args);
+ XtAddCallback(infodismiss, XtNcallback, dismiss, (XtPointer)infopopup);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfont, &font); num_args++;
+ XtSetArg(args[num_args], XtNbottomMargin, &bottomMargin);num_args++;
+ XtSetArg(args[num_args], XtNleftMargin, &leftMargin);num_args++;
+ XtSetArg(args[num_args], XtNrightMargin, &rightMargin);num_args++;
+ XtSetArg(args[num_args], XtNtopMargin, &topMargin); num_args++;
+ XtGetValues(infotext, args, num_args);
+
+ width = font->max_bounds.width * 80 + leftMargin + rightMargin;
+ height = (font->ascent + font->descent) * ROWS + topMargin + bottomMargin;
+
+ XtSetArg(args[0], XtNwidth, width);
+ XtSetArg(args[1], XtNheight, height);
+ XtSetValues(infotext, args, TWO);
+ XtSetValues(infodismiss, args, ONE);
+ XtRealizeWidget(infopopup);
+ XSetWMProtocols(dpy, XtWindow(infopopup), &wm_delete_window, 1);
+
+ copyrightpopup = XtCreatePopupShell("copyright", topLevelShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ copyrightform = XtCreateManagedWidget("form", formWidgetClass,
+ copyrightpopup, NULL, ZERO);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNscrollHorizontal, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNscrollVertical, XawtextScrollWhenNeeded);
+ num_args++;
+ XtSetArg(args[num_args], XtNdisplayCaret, False); num_args++;
+ XtSetArg(args[num_args], XtNuseStringInPlace, True);num_args++;
+ XtSetArg(args[num_args], XtNlength, strlen(copyright));num_args++;
+ XtSetArg(args[num_args], XtNstring, copyright); num_args++;
+ copyrighttext = XtCreateManagedWidget("text", asciiTextWidgetClass,
+ copyrightform, args, num_args);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, copyrighttext);
+ num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ copyrightdismiss = XtCreateManagedWidget("dismiss", commandWidgetClass,
+ copyrightform, args, num_args);
+ XtAddCallback(copyrightdismiss, XtNcallback, dismiss,
+ (XtPointer)copyrightpopup);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfont, &font); num_args++;
+ XtSetArg(args[num_args], XtNbottomMargin, &bottomMargin);num_args++;
+ XtSetArg(args[num_args], XtNleftMargin, &leftMargin);num_args++;
+ XtSetArg(args[num_args], XtNrightMargin, &rightMargin);num_args++;
+ XtSetArg(args[num_args], XtNtopMargin, &topMargin); num_args++;
+ XtGetValues(copyrighttext, args, num_args);
+
+ width = font->max_bounds.width * COLS + leftMargin + rightMargin;
+ height = (font->ascent + font->descent) * ROWS + topMargin + bottomMargin;
+
+ XtSetArg(args[0], XtNwidth, width);
+ XtSetArg(args[1], XtNheight, height);
+ XtSetValues(copyrighttext, args, TWO);
+ XtSetValues(copyrightdismiss, args, ONE);
+ XtRealizeWidget(copyrightpopup);
+ XSetWMProtocols(dpy, XtWindow(copyrightpopup), &wm_delete_window, 1);
+
+ dialogpopup = XtCreatePopupShell("popup", transientShellWidgetClass,
+ toplevel, NULL, ZERO);
+
+ dialog = CreateDialog(dialogpopup, "dialog", okay, dismiss);
+ XtRealizeWidget(dialogpopup);
+ XSetWMProtocols(dpy, XtWindow(dialogpopup), &wm_delete_window, 1);
+
+
+ /* Instantiate Widgets */
+
+ form = XtCreateManagedWidget("form", formWidgetClass,
+ toplevel, NULL, ZERO);
+
+ above_toc = NULL;
+ left_of_page = NULL;
+ set_vert_dist = False;
+ if (app_res.show_title) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc);num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop);num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft);num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ XtSetArg(args[num_args], XtNresize, False); num_args++;
+ XtSetArg(args[num_args], XtNlabel, " "); num_args++;
+ titlebutton = XtCreateManagedWidget("titleButton",
+ menuButtonWidgetClass,
+ form, args, num_args);
+ above_toc = titlebutton;
+ if (!left_of_page) left_of_page = titlebutton;
+ set_vert_dist = True;
+ }
+
+ if (app_res.show_date) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc);num_args++;
+ if (set_vert_dist) {
+ XtSetArg(args[num_args], XtNvertDistance, 0);num_args++;
+ }
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop);num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft);num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ XtSetArg(args[num_args], XtNresize, False); num_args++;
+ XtSetArg(args[num_args], XtNlabel, " "); num_args++;
+ datebutton = XtCreateManagedWidget("dateButton", menuButtonWidgetClass,
+ form, args, num_args);
+ above_toc = datebutton;
+ if (!left_of_page) left_of_page = datebutton;
+ set_vert_dist = True;
+ }
+
+ if (app_res.show_locator) {
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc);num_args++;
+ if (set_vert_dist) {
+ XtSetArg(args[num_args], XtNvertDistance, 0);num_args++;
+ }
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop);num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft);num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
+ XtSetArg(args[num_args], XtNresize, False); num_args++;
+ XtSetArg(args[num_args], XtNlabel, " "); num_args++;
+ locator = XtCreateManagedWidget("locator", labelWidgetClass,
+ form, args, num_args);
+ above_toc = locator;
+ if (!left_of_page) left_of_page = locator;
+ }
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNallowVert, True); num_args++;
+ box = XtCreateManagedWidget("box", boxWidgetClass, form, args, num_args);
+
+ XtSetArg(args[0], XtNresize, False);
+ filebutton = XtCreateManagedWidget("fileButton", menuButtonWidgetClass,
+ box, args, ONE);
+
+ filemenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ filebutton, NULL, ZERO);
+
+ openbutton = XtCreateManagedWidget("open", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(openbutton, XtNcallback, popup_dialog, (XtPointer)OPEN);
+
+ reopenbutton = XtCreateManagedWidget("reopen", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(reopenbutton, XtNcallback, reopen_file, (XtPointer)NULL);
+
+ printwholebutton = XtCreateManagedWidget("printwhole", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(printwholebutton, XtNcallback, popup_dialog,
+ (XtPointer)PRINT_WHOLE);
+
+ printmarkedbutton = XtCreateManagedWidget("printmarked", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(printmarkedbutton, XtNcallback, popup_dialog,
+ (XtPointer)PRINT_MARKED);
+
+ savebutton = XtCreateManagedWidget("save", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(savebutton, XtNcallback, popup_dialog, (XtPointer)SAVE);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ filemenu, NULL, ZERO);
+
+ copyrightbutton = XtCreateManagedWidget("copyright", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(copyrightbutton, XtNcallback, popup,
+ (XtPointer)copyrightpopup);
+
+ quitbutton = XtCreateManagedWidget("quit", smeBSBObjectClass,
+ filemenu, NULL, ZERO);
+ XtAddCallback(quitbutton, XtNcallback, quit_ghostview, (XtPointer)0);
+
+ XtSetArg(args[0], XtNresize, False);
+ pagebutton = XtCreateManagedWidget("pageButton", menuButtonWidgetClass,
+ box, args, 1);
+
+ pagemenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ pagebutton, NULL, ZERO);
+
+ nextbutton = XtCreateManagedWidget("next", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(nextbutton, XtNcallback, next_page, (XtPointer)0);
+
+ showbutton = XtCreateManagedWidget("show", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(showbutton, XtNcallback, this_page, (XtPointer)0);
+
+ prevbutton = XtCreateManagedWidget("prev", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(prevbutton, XtNcallback, prev_page, (XtPointer)0);
+
+ backbutton = XtCreateManagedWidget("back", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(backbutton, XtNcallback, back_page, (XtPointer)0);
+
+ XtSetSensitive(backbutton, False);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ pagemenu, NULL, ZERO);
+
+ centerbutton = XtCreateManagedWidget("center", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(centerbutton, XtNcallback, center_page, (XtPointer)0);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ pagemenu, NULL, ZERO);
+
+ markbutton = XtCreateManagedWidget("mark", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(markbutton, XtNcallback, mark_page, (XtPointer)0);
+
+ unmarkbutton = XtCreateManagedWidget("unmark", smeBSBObjectClass,
+ pagemenu, NULL, ZERO);
+ XtAddCallback(unmarkbutton, XtNcallback, unmark_page, (XtPointer)0);
+
+ XtSetArg(args[0], XtNresize, False);
+ magstepbutton = XtCreateManagedWidget("magstepButton",
+ menuButtonWidgetClass,
+ box, args, ONE);
+
+ magstepmenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ magstepbutton, NULL, ZERO);
+
+ magstepentry = (Widget *) XtMalloc(
+ (app_res.maximum_magstep - app_res.minimum_magstep + 1) *
+ sizeof(Widget));
+ XtSetArg(args[0], XtNleftMargin, 20);
+ for (i = app_res.minimum_magstep; i <= app_res.maximum_magstep; i++) {
+ char buf[16];
+ sprintf(buf, "%d", i);
+ magstepentry[i-app_res.minimum_magstep] =
+ XtCreateManagedWidget(buf, smeBSBObjectClass,
+ magstepmenu, args, 1);
+ XtAddCallback(magstepentry[i-app_res.minimum_magstep], XtNcallback,
+ set_magstep, (XtPointer)i);
+ }
+
+ XtSetArg(args[0], XtNresize, False);
+ orientationbutton = XtCreateManagedWidget("orientationButton",
+ menuButtonWidgetClass,
+ box, args, ONE);
+
+ orientationmenu = XtCreatePopupShell("menu", simpleMenuWidgetClass,
+ orientationbutton, NULL, ZERO);
+
+ XtSetArg(args[0], XtNleftMargin, 20);
+ portraitbutton = XtCreateManagedWidget("portrait", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(portraitbutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationPortrait);
+
+ landscapebutton = XtCreateManagedWidget("landscape", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(landscapebutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationLandscape);
+
+ upsidedownbutton = XtCreateManagedWidget("upsidedown", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(upsidedownbutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationUpsideDown);
+
+ seascapebutton = XtCreateManagedWidget("seascape", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(seascapebutton, XtNcallback,
+ set_orientation, (XtPointer)XtPageOrientationSeascape);
+
+ line = XtCreateManagedWidget("line", smeLineObjectClass,
+ orientationmenu, NULL, ZERO);
+
+ swapbutton = XtCreateManagedWidget("swap", smeBSBObjectClass,
+ orientationmenu, args, ONE);
+ XtAddCallback(swapbutton, XtNcallback, swap_landscape, (XtPointer)0);
+
+ if (app_res.swap_landscape) {
+ XtSetArg(args[0], XtNlabel, &s1);
+ XtGetValues(landscapebutton, args, ONE);
+ s1 = XtNewString(s1);
+ XtSetArg(args[0], XtNlabel, &s2);
+ XtGetValues(seascapebutton, args, ONE);
+ s2 = XtNewString(s2);
+ XtSetArg(args[0], XtNlabel, s2);
+ XtSetValues(landscapebutton, args, ONE);
+ XtSetArg(args[0], XtNlabel, s1);
+ XtSetValues(seascapebutton, args, ONE);
+ XtFree(s1);
+ XtFree(s2);
+ }
+
+ XtSetArg(args[0], XtNresize, False);
+ pagemediabutton = XtCreateManagedWidget("pagemediaButton",
+ menuButtonWidgetClass,
+ box, args, ONE);
+
+ default_pagemedia = 0;
+ for (i = 0; papersizes[i].name; i++) {
+ if (!strcmp(app_res.pagemedia, papersizes[i].name)) {
+ default_pagemedia = i;
+ break;
+ }
+ }
+
+#ifndef max
+#define max(a,b) ((a)>(b)?(a):(b))
+#endif
+
+ /* Line up all the menu buttons */
+ XtSetArg(args[0], XtNwidth, &width);
+ XtGetValues(filebutton, args, ONE);
+ button_width = width;
+ XtGetValues(pagebutton, args, ONE);
+ button_width = max(button_width, width);
+ XtGetValues(magstepbutton, args, ONE);
+ button_width = max(button_width, width);
+ XtGetValues(orientationbutton, args, ONE);
+ button_width = max(button_width, width);
+ XtGetValues(pagemediabutton, args, ONE);
+ button_width = max(button_width, width);
+
+ XtSetArg(args[0], XtNwidth, button_width);
+ XtSetValues(filebutton, args, ONE);
+ XtSetValues(pagebutton, args, ONE);
+ XtSetValues(magstepbutton, args, ONE);
+ XtSetValues(orientationbutton, args, ONE);
+ XtSetValues(pagemediabutton, args, ONE);
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromVert, above_toc); num_args++;
+ XtSetArg(args[num_args], XtNfromHoriz, box); num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNdisplayCaret, False); num_args++;
+ XtSetArg(args[num_args], XtNuseStringInPlace, True);num_args++;
+ XtSetArg(args[num_args], XtNlength, 0); num_args++;
+ XtSetArg(args[num_args], XtNstring, nothing); num_args++;
+ XtSetArg(args[num_args], XtNselectTypes, sarry); num_args++;
+ XtSetArg(args[num_args], XtNscrollVertical, XawtextScrollAlways);num_args++;
+ toc = XtCreateManagedWidget("toc", asciiTextWidgetClass,
+ form, args, num_args);
+ if (!left_of_page) left_of_page = toc;
+
+ num_args = 0;
+ XtSetArg(args[num_args], XtNfromHoriz, left_of_page);num_args++;
+ XtSetArg(args[num_args], XtNtop, XtChainTop); num_args++;
+ XtSetArg(args[num_args], XtNbottom, XtChainBottom); num_args++;
+ XtSetArg(args[num_args], XtNleft, XtChainLeft); num_args++;
+ XtSetArg(args[num_args], XtNright, XtChainRight); num_args++;
+ XtSetArg(args[num_args], XtNresizable, True); num_args++;
+ XtSetArg(args[num_args], XtNallowHoriz, True); num_args++;
+ XtSetArg(args[num_args], XtNallowVert, True); num_args++;
+ pageview = XtCreateManagedWidget("pageview", viewportWidgetClass,
+ form, args, num_args);
+
+ page = XtCreateManagedWidget("page", ghostviewWidgetClass,
+ pageview, NULL, ZERO);
+ num_ghosts++;
+ XtAddCallback(page, XtNcallback, track_and_zoom, (XtPointer)0);
+ XtAddCallback(page, XtNdestroyCallback, destroy_ghost, (XtPointer)page);
+ XtAddCallback(page, XtNmessageCallback, message, (XtPointer)page);
+ XtAddCallback(page, XtNoutputCallback, output, (XtPointer)0);
+ num_args = 0;
+ XtSetArg(args[num_args], XtNxdpi, &default_xdpi); num_args++;
+ XtSetArg(args[num_args], XtNydpi, &default_ydpi); num_args++;
+ XtGetValues(page, args, num_args);
+
+ /* This sets most of the window sizes. This keeps X server traffic
+ * down during realization.
+ */
+ GhostviewDisableInterpreter(page);
+ setup_ghostview();
+ i = find_page(app_res.page);
+
+ /* Coerce page number to fall in range */
+ if (toc_text) {
+ if (i >= doc->numpages) i = doc->numpages - 1;
+ if (i < 0) i = 0;
+ }
+ /* Coerce magstep to fall in range */
+ if (app_res.magstep < app_res.minimum_magstep)
+ app_res.magstep = app_res.minimum_magstep;
+ if (app_res.magstep > app_res.maximum_magstep)
+ app_res.magstep = app_res.maximum_magstep;
+ set_new_magstep();
+ set_new_orientation(i);
+ set_new_pagemedia(i);
+ layout_ghostview();
+
+ XtSetMappedWhenManaged(toplevel, False);
+ XtRealizeWidget(toplevel);
+ XtSetArg(args[0], XtNtransientFor, toplevel);
+ XtSetValues(dialogpopup, args, ONE);
+ XSetWMProtocols(dpy, XtWindow(toplevel), &wm_delete_window, 1);
+ if (XStringListToTextProperty(&version, 1, &nameprop)) {
+ XSetWMName(dpy, XtWindow(toplevel), &nameprop);
+ }
+
+ /* This sets the sizes on widget that were created during the realize. */
+ layout_ghostview();
+ XtMapWidget(toplevel);
+
+ show_page(i);
+ XtAppMainLoop(app_con);
+
+ /* should never get here */
+ return 1;
+}
+
+static void
+Syntax(call)
+char *call;
+{
+ XtDestroyApplicationContext(app_con);
+ fprintf(stderr, "Usage: %s\n", call);
+ fprintf(stderr,
+ " [-monochrome] [-grayscale] [-color]\n");
+ fprintf(stderr,
+ " [-[no]title] [-[no]date] [-[no]locator] [-[no]labels]\n");
+ fprintf(stderr,
+ " [-resolution <dpi>] [-dpi <dpi>]\n");
+ fprintf(stderr,
+ " [-xdpi <dpi>] [-ydpi <dpi>] [-magstep <n>]\n");
+ fprintf(stderr,
+ " [-[no]safer] [-[no]quiet] [-arguments <arguments>]\n");
+ fprintf(stderr,
+ " [-[no]center]\n");
+ fprintf(stderr,
+ " [-portrait] [-landscape] [-upsidedown] [-seascape] [-[no]swap]\n");
+ fprintf(stderr,
+ " [-letter] [-tabloid] [-ledger] [-legal] [-statement]\n");
+ fprintf(stderr,
+ " [-executive] [-a3] [-a4] [-a5] [-b4] [-b5]\n");
+ fprintf(stderr,
+ " [-folio] [-quarto] [-10x14]\n");
+ fprintf(stderr,
+ " [-force] [-forceorientation] [-forcemedia]\n");
+ fprintf(stderr,
+ " [-[no]openwindows] [-[no]ncdwm]\n");
+ fprintf(stderr,
+ " [-page <label>] [toolkitoption]\n");
+ fprintf(stderr,
+ " [filename]\n");
+ exit(1);
+}