aboutsummaryrefslogtreecommitdiff
path: root/src/hyper/hyper.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/hyper/hyper.pamphlet')
-rw-r--r--src/hyper/hyper.pamphlet1079
1 files changed, 0 insertions, 1079 deletions
diff --git a/src/hyper/hyper.pamphlet b/src/hyper/hyper.pamphlet
deleted file mode 100644
index 8f514af8..00000000
--- a/src/hyper/hyper.pamphlet
+++ /dev/null
@@ -1,1079 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/hyper}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{hyper.h}
-The [[hypertex]] function, of which this is the top level, is a browser
-for Axiom information. It works off a database of pages. The pages are
-stored in the [[$AXIOM/share/hypertex/pages]] subdirectory and there is
-a key file called [[ht.db]] in that subdirectory which contains
-critical information about each page. If you add or delete pages you
-must rerun the [[htadd]] command.
-(See the [[htadd]] command in [[src/hyper/htadd.pamphlet]].)
-
-Generally, if you add or delete pages you can recreate a proper
-[[pages/ht.db]] file by doing:
-\begin{verbatim}
-cd $AXIOM/share/hypertex
-htadd -f pages -n pages/*
-\end{verbatim}
-
-
-The [[hypertex]] function looks in [[$AXIOM/share/hypertex/pages]] by
-default. This can be over-ridden by setting the [[HTPATH]] shell
-variable to point to the desired directory containing the pages and
-the ht.db file.
-<<hyper.h>>=
-<<license>>
-#ifndef _HYPER_H_
-#define _HYPER_H_ 1
-
-#include "axiom-c-macros.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <limits.h>
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xos.h>
-
-#include "com.h"
-#include "token.h"
-#include "hash.h"
-
-#define boolean unsigned short int
-
-#ifndef TRUE
-#define TRUE ((boolean) 0x1)
-#endif
-#ifndef FALSE
-#define FALSE ((boolean) 0x0)
-#endif
-
-/* Struct forward declarations */
-
-struct text_node;
-struct input_box;
-struct input_window;
-struct paste_node;
-struct radio_boxes;
-struct group_item;
-
-#define Scrollupbutton 1
-#define Scrolldownbutton 2
-#define Noopbutton 6
-
-#define Scrolling 1
-#define Header 2
-#define Footer 3
-#define Title 4
-
-#ifndef HTADD
-extern int MenuServerOpened;
-
-/* These are all the colors one can use in HyperDoc. */
-
-extern int gActiveColor,
- gAxiomColor,
- gBackgroundColor,
- gBfColor,
- gControlBackgroundColor,
- gControlForegroundColor,
- gEmColor,
- gInputBackgroundColor,
- gInputForegroundColor,
- gItColor,
- gRmColor,
- gSlColor,
- gTtColor;
-
-/* These are all the different fonts one can use in HyperDoc. */
-
-extern XFontStruct *gActiveFont,
- *gAxiomFont,
- *gBfFont,
- *gEmFont,
- *gInputFont,
- *gItFont,
- *gRmFont,
- *gSlFont,
- *gTitleFont,
- *gTtFont;
-
-
-#endif
-
-
-/** I am implementing a state node stack, this is the structure I store **/
-
-typedef struct state_node {
- int last_ch, last_token, input_type;
- long fpos, keyword_fpos;
- long page_start_fpos;
- Token token;
- char *input_string;
- FILE *cfile;
- int keyword;
- struct state_node *next;
-} StateNode;
-
-#ifndef HTADD
-/** pointer to the top of the state node graph **/
-extern StateNode *top_state_node;
-#endif
-
-
-/* structure for a hyper text link */
-typedef struct hyper_link {
- int type; /* Memolink, Spadlink, Downlink etc. */
- Window win; /* X11 window containing active area */
- union {
- struct text_node *node; /* ID of link to which link refers */
- struct input_box *box;
- struct input_window *string;
- struct paste_node *paste; /* the paste node area */
- } reference;
- int x,y; /* relative position inside page */
-} HyperLink;
-
-
-typedef struct if_node {
- struct text_node *cond; /* the condition nodes*/
- struct text_node *thennode;
- struct text_node *elsenode;
-} IfNode;
-
-typedef struct item_stack {
- int indent;
- int item_indent;
- int in_item;
- struct item_stack *next;
-} ItemStack;
-
-typedef struct paste_node {
- char *name;
- int where; /* where should I be parsing from? */
- short int hasbutton;
- short int haspaste;
- struct group_item *group;
- ItemStack *item_stack;
- struct text_node *arg_node;
- struct text_node *end_node;
- struct text_node *begin_node;
- struct input_window *paste_item;
-} PasteNode;
-
-/* Structure for formatted hypertext */
-
-typedef struct text_node {
- short type; /* type of node (text, link, etc.) */
- int x,y, width, height; /* relative location on screen */
- int space; /* was there space in front of me ? */
- union {
- char *text; /* piece of text to display */
- struct text_node *node; /* argument text */
- struct if_node *ifnode;
- } data;
- HyperLink *link; /* link for active text */
- union {
- Pixmap pm; /* pixmap for bit images */
- XImage *xi; /* pixmap image */
- } image;
- struct text_node *next; /* next node in formatted text */
-} TextNode;
-
-/** Structure used to store pixmaps and bitmaps **/
-
-typedef struct image_struct {
- int width,height; /** It's width and height **/
- union {
- Pixmap pm;
- XImage *xi;
- } image;
- char *filename; /** The filename used to reference it **/
-} ImageStruct;
-
-/* Structure for locating HyperDoc pages in a source file */
-
-typedef struct {
- char *name; /* file name */
- long pos; /* position in file */
- int ln; /* the line number */
-} FilePosition;
-
-/*** The structure needed for storing a macro **/
-
-typedef struct macro_store {
- short int loaded;
- FilePosition fpos;
- char *name;
- char *macro_string;
- short number_parameters;
-} MacroStore;
-
-
-/** Structure needed for storing a patch **/
-typedef struct patch_store {
- short int loaded;
- FilePosition fpos;
- char *name;
- char *string;
-} PatchStore;
-
-/* Here are the structures needed for doing input to HyperDoc windows. */
-
-typedef struct line_struct {
- char *buffer;
- int changed; /* Has the line changed */
- int line_number;
- int buff_pntr;
- int len;
- struct line_struct *prev, *next;
-} LineStruct;
-
-typedef struct input_window {
- char *name; /* symbol name **/
- int size; /* the length of the window **/
- int cursor_x; /* x-coordinate for the cursor **/
- int entered; /* tells me whether I have typed here
- before */
- int num_lines; /* number of lines needed to store
- buffer */
- LineStruct *lines;
- LineStruct *curr_line; /* the current line on which the cursor */
- Window win;
- struct input_window *next;
-} InputItem;
-
-
-/* structure for storing input boxes **/
-typedef struct input_box {
- char *name;
- ImageStruct *selected, *unselected;
- short int picked;
- struct input_box *next;
- struct radio_boxes *rbs;
- Window win;
-} InputBox;
-
-typedef struct radio_boxes {
- char *name;
- InputBox *boxes;
- ImageStruct *selected, *unselected;
- int width, height;
- struct radio_boxes *next;
-} RadioBoxes;
-
-/* Structure for spadcommand dependencies hash table entries */
-typedef struct spadcom_depend {
- char *label; /* dependency label */
- TextNode *spadcom; /* spadcommand defining the label */
- short executed; /* true iff spadcommand has benn executed */
-} SpadcomDepend;
-
-typedef struct button_list {
- int x0,y0,x1,y1;
- HyperLink *link;
- Window win;
- struct button_list *next;
-} ButtonList;
-
-/* Stucture for unformatted hyper text page */
-
-typedef struct hyperdoc_page {
- short type; /* Normal, Quitbutton, Upbutton etc. */
- char *name; /* ID of page */
- char *filename; /* The name of the file in which the page
- occurs, Null if not */
- int scroll_off; /* The offset in the scrolling region */
- int bot_scroll_margin; /* bottom of the scrolling region */
- int top_scroll_margin; /* top of the scrolling region */
- TextNode *title; /* the title of the page */
- TextNode *header; /* formatted version of page */
- TextNode *scrolling; /* Top of scrolling region */
- TextNode *footer; /* top of non-scrolling region at bottom */
- Sock *sock; /* socket connection for spad buffer */
- HashTable *fLinkHashTable; /* active link hash table */
- ButtonList *s_button_list; /* active buttons on page */
- ButtonList *button_list; /* active buttons on page */
- HashTable *depend_hash; /* Hash tables of spadcommand dependencies */
- InputItem *input_list; /* List of input structures */
- InputItem *current_item; /* a pntr to the currently active item */
- HashTable *box_hash; /* place where all the boxes are stored */
- RadioBoxes *radio_boxes; /* a linked list of radio boxes */
- short page_flags; /* A list of flags for the page */
- char *helppage; /* the name of the helppage */
-} HyperDocPage;
-
-/* Structure for an unloaded page */
-
-typedef struct unloaded_page {
- short type; /* indicator of unloaded page */
- char *name; /* name of page */
- FilePosition fpos; /* where to find the page */
-} UnloadedPage;
-
-/* Structure for a HyperDoc Window */
-
-typedef struct {
- Window fMainWindow; /* The main text field window. */
- Window fScrollWindow; /* The scrolling area of the window */
- Window fDisplayedWindow; /* The current window of the above two, */
- /* being filled by display */
-
- Window fScrollUpWindow; /* Window for scrolling up a line */
- Window fScrollDownWindow; /* Window for scrolling down a line */
-
- Window scrollbar; /* the window for scrolling */
- Window scroller; /* the scroller window */
-
- Window fTitleBarButton1; /* 1st titlebar bitmap button */
- Window fTitleBarButton2; /* 2nd titlebar bitmap button */
- Window fTitleBarButton3; /* 3rd titlebar bitmap button */
- Window fTitleBarButton4; /* 4th titlebar bitmap button */
-
- int fScrollerTopPos; /* where the top of the scroller is */
- int fScrollerHeight; /* the height of the scroller */
- int fScrollBarHeight; /* the height for the scrollbar */
-
- int scrollwidth; /* the width of the scrolling area */
- int scrollheight; /* the height of the scrolling area */
- int scrollupy; /* Current y position of the scroll up */
- /* button */
- int scrolldowny; /* Current y position of the scroll */
- /* downbutton */
- int scrollbary; /* Current y position of teh scrollbar */
- int scrollx; /* X coordinates for all of the above */
- int border_width; /* Width of the border */
- HyperDocPage *page; /* currently displayed page */
- int width, height; /* in pixels */
- int columns; /* Width in characters, only setable */
- /* for form pages */
- HyperDocPage **fMemoStack; /* stack of memo links */
- HyperDocPage **fDownLinkStack;/* stack of down links */
-
- int *fDownLinkStackTop; /* stack of down links */
- int fMemoStackIndex; /* memo stack pointer */
- int fDownLinkStackIndex; /* downlink stack pointer */
-
- HashTable *fWindowHashTable; /* hash table of active subwindows */
- HashTable *fPageHashTable; /* hash table of HyperDoc pages */
- HashTable *fPasteHashTable; /* hash table for paste in areas */
- HashTable *fMacroHashTable; /* hash table of HyperDoc macros */
- HashTable *fCondHashTable; /* hash table for values */
- HashTable *fPatchHashTable; /* hash table for patch locations */
-
- int fAxiomFrame; /* Axiom frame number initializing window */
- GC fStandardGC; /* Graphics context for window */
- GC fInputGC; /* Graphics context for the input windows */
- GC fCursorGC; /* Graphics context for the cursors */
- GC fControlGC; /* Graphics context for the buttons */
- Cursor fDisplayedCursor; /* The currently displayed cursor */
-} HDWindow;
-
-/* Structure for identifying appropriate link hash tables */
-
-typedef struct {
- int code; /* code of active area */
- HyperDocPage *page; /* page for which hash table applies */
-} LinkHashID;
-
-/*** Flags for the page ***/
-
-#define NOLINES 0000001 /* Ibid, for the bottom of the page ***/
-
-
-/* external variables and functions. See the source file for a description
- of their purposes */
-
-extern HashTable gSessionHashTable; /* hash table of HD windows */
-
-extern HDWindow *gParentWindow; /* the parent window. The one that
- * appears when you first start HD */
-
-extern HyperLink *quitLink; /** a special link to the protected quit page **/
-
-
-#ifndef HTADD
-/* From hyper.c */
-extern int gXScreenNumber;
-extern Display *gXDisplay;
-extern int gSwitch_to_mono;
-extern unsigned long * spadColors;
-extern int gIsEndOfOutput;
-extern HDWindow *gWindow;
-extern Sock *session_server;
-extern Sock *spad_socket;
-extern HashTable gFileHashTable;
-extern HashTable gImageHashTable; /* A global hash table for images */
-extern Cursor gNormalCursor; /* The normal mouse cursor */
-extern Cursor gActiveCursor; /* The cursor in active regions */
-extern Cursor gBusyCursor; /* The clock cursor for when I am busy */
-extern int gIsAxiomServer; /* true iff HyperDoc is acting as an Axiom server */
-extern int gArgc; /* original argc from main */
-extern char **gArgv; /* original argv from main */
-/* from lex.c */
-extern long fpos, keyword_fpos;
-extern Token token;
-extern int last_token, input_type, last_ch;
-extern char *input_string;
-extern FILE *cfile;
-/* from input.c */
-extern XImage *picked;
-extern int picked_height;
-extern int picked_width;
-extern XImage *unpicked;
-extern int unpicked_height;
-extern int unpicked_width;
-/* from display.c */
-extern int line_height;
-extern int need_scroll_up_button;
-extern int scrolling;
-extern int need_scroll_down_button;
-extern int space_width;
-#endif
-
-/* Here are some of the functions and constants declared and needed in
- htadd.c ******/
-
-#define NoChar -9999
-#define temp_dir "/tmp/"
-#define db_file_name "ht.db"
-#define def_spad "/usr/local/axiom"
-
-
-/* Types of HyperDoc pages */
-
-#define UlUnknownPage 9993 /*I hate this hack, but I have to know whether*/
-#define UnknownPage 9994 /*this page has been loaded or not. */
-#define ErrorPage 9995
-#define Unixfd 9996
-#define SpadGen 9997
-#define Normal 9998
-#define UnloadedPageType 9999
-
-/* Commands from Axiom */
-
-#define EndOfPage 99
-#define SendLine 98
-#define StartPage 97 /* A normal HyperDoc page */
-#define LinkToPage 96
-#define PopUpPage 95 /* A pop-up page */
-#define PopUpNamedPage 94
-#define KillPage 93
-#define ReplacePage 92
-#define ReplaceNamedPage 91
-#define SpadError 90
-
-/* Constants declaring size of page stacks */
-
-#define MaxMemoDepth 25 /* max nesting level for memolinks */
-#define MaxDownlinkDepth 50 /* max downlink nesting depth */
-
-/* Constants defining the size of various hash tables */
-
-#define PageHashSize 1000
-#define FileHashSize 30
-#define SessionHashSize 10
-#define MacroHashSize 100
-#define ImageHashSize 100
-#define CondHashSize 100
-#define BoxHashSize 20
-#define PasteHashSize 100
-#define PatchHashSize 100
-
-/* A couple of macros for memo and down links */
-
-#define need_up_button \
- (gWindow->fMemoStackIndex ? gWindow->fDownLinkStackIndex >= \
- gWindow->fDownLinkStackTop[gWindow->fMemoStackIndex-1] \
- : gWindow->fDownLinkStackIndex)
-
-#define need_return_button (gWindow->fMemoStackIndex)
-
-#define need_help_button (gWindow->page->helppage != NULL)
-
-#define max(x,y) ((x) > (y) ? (x) : (y))
-
-
-#define pick_box(box) fill_box(box->win, box->selected)
-#define unpick_box(box) fill_box(box->win, box->unselected)
-
-#define TopLevelHelpPage "ugHyperPage"
-#define NoMoreHelpPage "NoMoreHelpPage"
-#define KeyDefsHelpPage "ugHyperKeysPage"
-#define InputAreaHelpPage "ugHyperInputPage"
-
-/* definitions for connecting to the Axiom server */
-
-#define Connected 0
-#define NotConnected 1
-#define SpadBusy 2
-
-/* some GUI-dependent stuff */
-
-#define BeepAtTheUser() /* (XBell(gXDisplay, 5)) */
-#define LoudBeepAtTheUser() /* (XBell(gXDisplay, 50)) */
-
-
-/*** default fonts ***/
-
-#if defined(RTplatform) || defined(PS2platform) || defined(RIOSplatform) || defined(AIX370platform)
-#define RmFontDefault "Rom14"
-#define TtFontDefault "Erg14"
-#define ActiveFontDefault "Bld14"
-#define AxiomFontDefault "Erg14"
-#define EmphasizeFontDefault "Itl14"
-#define BoldFontDefault "Bld14"
-#endif
-
-#if defined(SUNplatform) || defined (SUN4OS5platform) || defined(SGIplatform) || defined (HP9platform) || defined(HP10platform) || defined (ALPHAplatform) || defined(LINUXplatform) || defined(MACOSXplatform) || defined(BSDplatform)
-#define RmFontDefault "-adobe-courier-medium-r-normal--18-*-*-*-m-*-iso8859-1"
-#define TtFontDefault "-adobe-courier-medium-r-normal--18-*-*-*-m-*-iso8859-1"
-#define ActiveFontDefault "-adobe-courier-bold-r-normal--18-*-*-*-m-*-iso8859-1"
-#define AxiomFontDefault "-adobe-courier-bold-o-normal--18-*-*-*-m-*-iso8859-1"
-#define EmphasizeFontDefault "-adobe-courier-medium-o-normal--18-*-*-*-m-*-iso8859-1"
-#define BoldFontDefault "-adobe-courier-bold-r-normal--18-*-*-*-m-*-iso8859-1"
-#endif
-
-
-
-
-
-
-typedef struct group_item {
- int cur_color;
- XFontStruct *cur_font;
- int center;
- struct group_item *next;
-} GroupItem;
-
-
-extern GroupItem *gTopOfGroupStack;
-
-
-typedef struct cond_node {
- char *label;
- char *cond;
-} CondNode;
-
-typedef struct parameter_list_type {
- char **list; /** The parameters in string form **/
- short number; /** How many parameters are there **/
- struct parameter_list_type *next;
-} *ParameterList;
-
-#endif
-@
-\section{hyper.c}
-<<hyper.c>>=
-/*
- * This is the main module of the HyperDoc program. It contains the main
- * routine which initializes all the X stuff, and the tables. Then it passes
- * control over to the main event loop.
- */
-
-/* #define DEBUG 1 */
-
-/* Include all the needed include files */
-#define _HYPER_C
-#include "useproto.h"
-#include "debug.h"
-
-
-#include "hyper.h"
-
-#include <sys/signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <setjmp.h>
-#include <X11/cursorfont.h>
-
-#include "keyin.h"
-#include "initx.h"
-#include "event.h"
-#include "parse-aux.h"
-#include "bsdsignal.h"
-
-#include "all_hyper_proto.H1"
-#include "sockio-c.H1"
-#include "bsdsignal.H1"
-/*
- * Here is a flag used to tell me whether I made a good connection to the
- * menu server. Needed so I don't send spad commands when I should not
- */
-
-int MenuServerOpened = 1;
-
-/* include icon bitmap data */
-
-#define BITMAPDEPTH 1
-
-/* X11 display and screen variables */
-
-Display *gXDisplay;
-int gXScreenNumber;
-
-/*
- * Information about the top level HyperDoc window
- */
-
-HDWindow *gWindow = NULL; /* the current window */
-HDWindow *gParentWindow =NULL; /* the parent window. The one that appears
- * when you first start HyperDoc */
-
-HashTable gSessionHashTable; /* hash table of HD windows */
-HashTable init_page_hash; /* initial hash table of HD pages */
-HashTable init_macro_hash; /* initial hash table of HD macros */
-HashTable init_patch_hash; /* initial hash table of HD patches */
-
-/* The various Cursors we use */
-
-Cursor gNormalCursor; /* The normal mouse cursor */
-Cursor gActiveCursor; /* The cursor in active regions */
-Cursor gBusyCursor; /* The clock cursor for when I am busy */
-
-
-HashTable gFileHashTable; /* hash table of HyperDoc files */
-HashTable gImageHashTable; /* hash table for images */
-
-
-/* Some things needed for Handling interupts properly */
-
-int gIsEndOfOutput; /* set to true when spad has finished output */
-int received_window_request = 0;/* true iff Spad wants a pop-up */
-int in_next_event = 0; /* true when in XNextEvent */
-int make_input_file = 0; /* true when making input files from ht */
-int make_patch_files = 0; /* true when making patch files from ht */
-int gmake_record_file= 0; /* true when making record files from ht */
-int gverify_record_file = 0; /* true when verifying record files from ht */
-int gverify_dates = 0; /* true when we want hypertex to verify ht.db dates */
-
-Sock *session_server; /* socket connecting to session manager */
-
-int gIsAxiomServer = 0; /* true iff HyperDoc is acting as a */
- /* an Axiom server */
-
-int kill_spad = 0; /* kill spad when finished with paste file */
-
-int gSwitch_to_mono=0; /* will be set to 1 if at any time we don't have
- enough colours for the images. We will know this
- when read_pixmap_file returns -1. We will use this
- when deciding what to do in case of \inputimage */
-
-int gTtFontIs850=0; /* a flag that tells us if the Tt font is a IBM pagecode 850
- font and hence supports the graphics chars
- set when the TtFont is opened*/
-
-/*
- * Global copies of the command line arguments, so they never have to be
- * passed as parameters. This is also so any child process starting up also
- * has the same values.
- */
-
-int gArgc;
-char **gArgv;
-
-char **input_file_list;
-int input_file_count;
-
-/*
- * SIGUSR2 is raised by the spadbuf program when it is done with the current
- * command
- */
-
-void
-sigusr2_handler(int sig)
-{
- gIsEndOfOutput = 1;
- return ;
-}
-
-void
-sigcld_handler(int sig)
-{
-
- /* why were we waiting after the child had already died ??
- because we don't want zombies */
-
- int x;
- wait(&x);
-
-}
-
-extern jmp_buf env;
-
-
-/* Clean up spad sockets on exit */
-void
-clean_socket(void )
-{
- char name[256];
-
- make_server_name(name, MenuServerName);
- unlink(name);
-}
-
-/*
- * initialize hash tables, signal handlers and windows, then call the main
- * event handling loop
- */
-
-int
-main(int argc, char **argv)
-{
- int ret_status;
-
- /* Initialize some global values */
-/* fprintf(stderr,"hyper:main:entered\n");*/
- gArgc = argc;
- gArgv = argv;
- gIsEndOfOutput = 1;
-
-/* fprintf(stderr,"hyper:main:calling check_arguments\n");*/
- check_arguments();
-/* fprintf(stderr,"hyper:main:returned check_arguments\n");*/
-
- /*
- * initialize the hash tables for the files and the windows and images
- */
-/* fprintf(stderr,"hyper:main:calling init_hash\n");*/
- init_hash();
-/* fprintf(stderr,"hyper:main:returned init_hash\n");*/
-
- /*
- * initialize the parser keyword hash table
- */
-/* fprintf(stderr,"hyper:main:calling parser_init\n");*/
- parser_init();
-/* fprintf(stderr,"hyper:main:returned parser_init\n");*/
-
-/* fprintf(stderr,"hyper:main:calling read_ht_db\n");*/
- read_ht_db(&init_page_hash, &init_macro_hash, &init_patch_hash);
-/* fprintf(stderr,"hyper:main:returned read_ht_db\n");*/
-
- /*
- * Now initialize x. This includes opening the display, setting the
- * screen and display global values, and also gets all the fonts and
- * colors we will need.
- */
-
- if (!make_input_file && !gmake_record_file && !gverify_record_file) {
-/* fprintf(stderr,"hyper:main:calling initializeWindowSystem\n");*/
- initializeWindowSystem();
-/* fprintf(stderr,"hyper:main:returned initializeWindowSystem\n");*/
-
- /*
- * Initialize some of the global values used by the input string
- * routines
- */
-/* fprintf(stderr,"hyper:main:calling init_keyin\n");*/
- init_keyin();
-/* fprintf(stderr,"hyper:main:returned init_keyin\n");*/
-
- /*
- * regardless of what else happened, we should always pop up an
- * initial window.
- */
-
-/* fprintf(stderr,"hyper:main:calling init_top_window\n");*/
- ret_status = init_top_window("RootPage");
-/* fprintf(stderr,"hyper:main:returned init_top_window\n");*/
- gParentWindow = gWindow;
- if (ret_status == -1) {
- fprintf(stderr,
- "(HyperDoc) Could not find RootPage for top-level window.\n");
- exit(-1);
- }
-
- /*
- * Tell it how to handle the user defined signals I may get
- */
- bsdSignal(SIGUSR2, sigusr2_handler,RestartSystemCalls);
- bsdSignal(SIGUSR1, SIG_IGN,RestartSystemCalls);
-#if defined(BSDplatform) || defined(MACOSXplatform)
- bsdSignal(SIGCHLD, sigcld_handler,RestartSystemCalls);
-#else
- bsdSignal(SIGCLD, sigcld_handler,RestartSystemCalls);
-#endif
- bsdSignal(SIGINT, SIG_IGN,RestartSystemCalls);
-
- /*
- * Now go to the main event loop. I will never return, so just end
- * the main routine after that
- */
-
- /*
- * make an input file if requested
- */
- }
- else {
-
- /*
- * Try to establish all the socket connections I need. If I am an
- * gIsAxiomServer and the routine fails, it will exit for me
- */
-/* fprintf(stderr,"hyper:main:in else case\n");*/
-/* fprintf(stderr,"hyper:main:calling make_server_connections\n");*/
- make_server_connections();
-/* fprintf(stderr,"hyper:main:returned make_server_connections\n");*/
-
-
- if (make_input_file) ht2_input();
- if (gmake_record_file) make_record();
- if (gverify_record_file) verify_record();
- exit(0);
- }
-
- /*
- * Try to establish all the socket connections I need. If I am an
- * gIsAxiomServer and the routine fails, it will exit for me
- */
-/* fprintf(stderr,"hyper:main:calling make_server_connections\n");*/
- make_server_connections();
-/* fprintf(stderr,"hyper:main:returned make_server_connections\n");*/
-
-
-/* fprintf(stderr,"hyper:main:calling mainEventLoop\n");*/
- mainEventLoop();
-/* fprintf(stderr,"hyper:main:returned mainEventLoop\n");*/
-
- return 0;
-}
-
-/*
- * Initializes the hash table for Files, and Windows
- */
-
-static void
-init_hash(void)
-{
- hash_init(&gFileHashTable,
- FileHashSize,
- (EqualFunction)string_equal,
- (HashcodeFunction) string_hash);
- hash_init(&gSessionHashTable,
- SessionHashSize,
- (EqualFunction) window_equal,
- (HashcodeFunction) window_code);
- hash_init(&gImageHashTable,
- ImageHashSize,
- (EqualFunction) string_equal,
- (HashcodeFunction) string_hash);
-}
-
-/* initialize the HyperDoc page hierarchy data structures */
-
-void
-init_page_structs(HDWindow *w)
-{
- int i;
-
- w->fMemoStackIndex = 0;
- for (i = 0; i < MaxMemoDepth; i++) {
- w->fMemoStack[i] = NULL;
- w->fDownLinkStackTop[i] = 0;
- }
- w->fDownLinkStackIndex = 0;
- for (i = 0; i < MaxDownlinkDepth; i++)
- w->fDownLinkStack[i] = NULL;
-}
-
-static void
-check_arguments(void)
-{
- int i;
-
- /*
- * Now check the command line arguments, to see if I am supposed to be a
- * server or not
- */
- for (i = 1; i < gArgc; i++) {
- if (gArgv[i][0] == '-')
- switch (gArgv[i][1]) {
- case 'p':
- gverify_dates=1;
- break;
- case 's':
- if (!MenuServerOpened) {
- fprintf(stderr, "(HyperDoc) Server already in use.\n");
- exit(-1);
- }
- gIsAxiomServer = 1;
- break;
- case 'i':
- if (gArgv[i][2] == 'p')
- make_patch_files = 1;
- make_input_file = 1;
- input_file_list = gArgv + i + 1;
- input_file_count = gArgc - i - 1;
- break;
- case 'k':
- kill_spad = 1;
- break;
- case 'r':
- if (gArgv[i][2] == 'm')
- gmake_record_file=1;
- else if (gArgv[i][2] == 'v')
- gverify_record_file=1;
- else
- fprintf(stderr, "(HyperDoc) v or m must follow -r\n");
- input_file_list = gArgv + i + 1;
- input_file_count = gArgc - i - 1;
- break;
- default:
- fprintf(stderr, "(HyperDoc) Unexpected Command Line Argument %s\n", gArgv[i]);
- fprintf(stderr, " Usage: hypertex [-s]\n");
- break;
- }
- }
-}
-
-static void
-make_server_connections(void)
-{
- int i, wait_time;
-
- /*
- * Try to open the menuserver socket, if I can not, then set a flag
- */
-
- if (open_server(MenuServerName) == -2) {
- fprintf(stderr, "(HyperDoc) Warning: Not connected to AXIOM Server!\n");
- MenuServerOpened = 0;
- } else {
- atexit(&clean_socket);
- MenuServerOpened = 1;
- }
-
-
- /*
- * If I have opened the MenuServer socket, then I should also try to open
- * the SpadServer socket, so I can send stuff right to SPAD.
- */
-
- if (MenuServerOpened) {
-
- /*
- * If I am a ht server, then I should not continue on unless I
- * establish some sort of connection
- */
-
- /*
- * Modified on 11/20 so that it prints an error message every ten for
- * ten tries at opeing the socket. If it fails all ten times, it
- * gives up and exits.
- */
-
- if (!gIsAxiomServer)
- wait_time = 2;
- else
- wait_time = 1000;
-
- for (i = 0, spad_socket = NULL; i < 2 && spad_socket == NULL; i++) {
- spad_socket = connect_to_local_server(SpadServer,
- MenuServer, wait_time);
- if (gIsAxiomServer && spad_socket == NULL)
- fprintf(stderr, "(HyperDoc) Error opening AXIOM server. Retrying ...\n");
- else
- i = 11;
- }
- if (! spad_socket) {
- fprintf(stderr, "(HyperDoc) Couldn't connect to AXIOM server!\n");
- if (!gIsAxiomServer)
- MenuServerOpened = 0;
- else {
- fprintf(stderr, "(HyperDoc) Couldn't connect to AXIOM server!\n");
- exit(-1);
- }
- }
- else {
-
- /*
- * Do the same thing for the SessionServer
- */
-
- for (i = 0, session_server = NULL; i < 2 && session_server == NULL
- ; i++) {
- session_server =
- connect_to_local_server(SessionServer, MenuServer,
- wait_time);
- if (gIsAxiomServer && session_server == NULL) {
- fprintf(stderr,
- "(HyperDoc) Error opening SessionServer, Retrying ...\n");
- }
- else
- i = 11;
- }
- if (session_server == NULL) {
- fprintf(stderr, "(HyperDoc) Connection attempt to session manager timed out.\n");
- if (gIsAxiomServer) {
- fprintf(stderr,
- "(HyperDoc) Server unable to connect to session server\n");
- exit(-1);
- }
- else {
- MenuServerOpened = 0;
- }
- }
- }
- }
-}
-@
-\section{License}
-<<license>>=
-/*
-Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- - Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- - Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-@
-<<*>>=
-<<license>>
-<<hyper.c>>
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
-
-
-
-