#ifndef _HYPER_H_
#define _HYPER_H_ 1
#include "openaxiom-c-macros.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <limits.h>
#include "com.h"
#include "token.h"
#include "hash.h"
#include "node.h"
#include "pixmap.h"
extern void sigusr2_handler(int sig);
extern void sigcld_handler(int sig);
extern void clean_socket();
extern void init_page_structs(HDWindow * w);
extern void push_item_stack();
extern void clear_item_stack();
extern void pop_item_stack();
extern ItemStack * copy_item_stack();
extern void free_item_stack(ItemStack * is);
extern ButtonList * alloc_button_list();
extern CondNode * alloc_condnode();
extern HDWindow * alloc_hd_window();
extern IfNode * alloc_ifnode();
extern InputBox * alloc_inputbox();
extern LineStruct * alloc_inputline(int size);
extern TextNode * alloc_node();
extern HyperDocPage * alloc_page(const char * name);
extern PasteNode * alloc_paste_node(char * name);
extern RadioBoxes * alloc_rbs();
extern void free_button_list(ButtonList * bl);
extern void free_hd_window(HDWindow * w);
extern void free_input_item(InputItem * sym , short des);
extern void free_input_list(InputItem * il);
extern void free_node(TextNode * node , short des);
extern void free_page(HyperDocPage * page);
extern void free_patch(PatchStore * p);
extern void free_string(char * str);
extern char * resizeBuffer(int size , char * oldBuf , int * oldSize);
extern PatchStore * alloc_patchstore();
extern InputItem * return_item(char * name);
extern void fill_box(Window w , ImageStruct * image);
extern void toggle_input_box(HyperLink * link);
extern void toggle_radio_box(HyperLink * link);
extern void change_input_focus(HyperLink * link);
extern void next_input_focus();
extern void prev_input_focus();
extern int delete_item(char * name);
extern XImage * HTReadBitmapFile(Display * display , int screen , char * filename , int * width , int * height);
extern ImageStruct * insert_image_struct(char * filename);
extern void compute_form_page(HyperDocPage * page);
extern int window_width(int cols);
extern void ht2_input(void );
extern void make_record(void );
extern void verify_record(void );
extern char * strCopy(char * s);
extern void print_paste_line(FILE * pfile , char * str);
extern void get_spad_output(FILE * pfile , char * command , int com_type);
extern void get_graph_output(char*, const char*, int);
extern void add_buffer_to_sym(char * buffer , InputItem * sym);
extern void dialog(XEvent * event , KeySym keysym , char * buffer);
extern void draw_inputsymbol(InputItem * sym);
extern void update_inputsymbol(InputItem * sym);
extern HyperDocPage * issue_server_command(HyperLink * link);
extern HyperDocPage * issue_unixlink(TextNode * node);
extern char * print_to_string(TextNode * command);
extern void issue_spadcommand(HyperDocPage * page , TextNode * command , int immediate , int type);
extern OpenAxiom::openaxiom_sio * accept_menu_connection(OpenAxiom::openaxiom_sio * server_sock);
extern char * print_to_string1(TextNode * command , int * sizeBuf);
extern int issue_serverpaste(TextNode * command);
extern void issue_unixcommand(TextNode * node);
extern int issue_unixpaste(TextNode * node);
extern void service_session_socket();
extern void send_lisp_command(char * command);
extern void escape_string(char * s);
extern void unescape_string(char * s);
extern char * print_source_to_string1(TextNode * command , int * sizeBuf);
extern char * print_source_to_string(TextNode * command);
extern void change_cond(char * label , char * newcond);
extern int check_condition(TextNode * node);
extern void insert_cond(char * label , char * cond);
#ifndef HTADD
extern int MenuServerOpened;
extern int gActiveColor,
gAxiomColor,
gBackgroundColor,
gBfColor,
gControlBackgroundColor,
gControlForegroundColor,
gEmColor,
gInputBackgroundColor,
gInputForegroundColor,
gItColor,
gRmColor,
gSlColor,
gTtColor;
extern XFontStruct *gActiveFont,
*gAxiomFont,
*gBfFont,
*gEmFont,
*gInputFont,
*gItFont,
*gRmFont,
*gSlFont,
*gTitleFont,
*gTtFont;
#endif
#ifndef HTADD
extern int gXScreenNumber;
extern Display *gXDisplay;
extern int gSwitch_to_mono;
extern unsigned long * spadColors;
extern int gIsEndOfOutput;
extern HDWindow *gWindow;
extern OpenAxiom::openaxiom_sio *session_server;
extern OpenAxiom::openaxiom_sio *spad_socket;
extern HashTable gFileHashTable;
extern HashTable gImageHashTable;
extern openaxiom_cursor gNormalCursor;
extern openaxiom_cursor gActiveCursor;
extern openaxiom_cursor gBusyCursor;
extern int gIsAxiomServer;
extern int gArgc;
extern char **gArgv;
extern openaxiom_image *picked;
extern int picked_height;
extern int picked_width;
extern openaxiom_image *unpicked;
extern int unpicked_height;
extern int unpicked_width;
extern int line_height;
extern int need_scroll_up_button;
extern int scrolling;
extern int need_scroll_down_button;
extern int space_width;
#endif
#define NoChar -9999
#define db_file_name "ht.db"
#define UlUnknownPage 9993
#define UnknownPage 9994
#define ErrorPage 9995
#define Unixfd 9996
#define SpadGen 9997
#define Normal 9998
#define UnloadedPageType 9999
#define EndOfPage 99
#define SendLine 98
#define StartPage 97
#define LinkToPage 96
#define PopUpPage 95
#define PopUpNamedPage 94
#define KillPage 93
#define ReplacePage 92
#define ReplaceNamedPage 91
#define SpadError 90
#define MaxMemoDepth 25
#define MaxDownlinkDepth 50
#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
#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"
#define Connected 0
#define NotConnected 1
#define SpadBusy 2
#define BeepAtTheUser()
#define LoudBeepAtTheUser()
extern int connect_spad();
#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"
extern HashTable gSessionHashTable;
extern HDWindow *gParentWindow;
extern HyperLink *quitLink;
extern GroupItem *gTopOfGroupStack;
extern HyperDocPage *gPageBeingParsed;
template<int N>
inline const char* as_chars(const unsigned char (&ary)[N]) {
return reinterpret_cast<const char*>(&ary[0]);
}
#endif