diff options
author | dos-reis <gdr@axiomatics.org> | 2008-03-07 15:19:01 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2008-03-07 15:19:01 +0000 |
commit | 8531f4c74274b8aa99168d220738227557a9c418 (patch) | |
tree | c50b77870e432317be8f99c248e1339f74b51661 /src/hyper/hyper.pamphlet | |
parent | 33949ff2e6e5b5abe8d22c5604f42a6c9371079a (diff) | |
download | open-axiom-8531f4c74274b8aa99168d220738227557a9c418.tar.gz |
* hyper/: De-pamphletize.
Diffstat (limited to 'src/hyper/hyper.pamphlet')
-rw-r--r-- | src/hyper/hyper.pamphlet | 1079 |
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} - - - - |