#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#include <X11/Xaw/Cardinals.h>
#include <stdio.h>
#include <limits.h>
#include <X11/Xfuncs.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>
#include <X11/Xaw/AsciiText.h>
#include <X11/Xaw/SmeBSB.h>
#include <X11/Xaw/Box.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Dialog.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/List.h>
#include <X11/Xaw/MenuButton.h>
#include <X11/Xaw/SimpleMenu.h>
#include <X11/Xaw/Paned.h>
#include <X11/Xaw/Viewport.h>
#include "ScrollByL.h"
#include "version.h"
#include "defs.h"
#define NULLSTR(x) (((x)!=NULL)?(x):(""))
#define Error(x) { printf x ; exit(EXIT_FAILURE); }
#define Assertion(expr, msg) { if (!(expr)) { Error msg } }
#ifdef DEBUG
# define Log(x) { if(True) printf x; }
#else
# define Log(x) { if(False) printf x; }
#endif
typedef struct _XmanFonts {
XFontStruct * directory;
} XmanFonts;
typedef struct _XmanCursors {
Cursor top,
help,
manpage,
search_entry;
Pixel fg_color;
Pixel bg_color;
} XmanCursors;
typedef struct _ManPageWidgets {
Widget manpage,
directory,
*box;
} ManPageWidgets;
typedef struct _MenuStruct {
caddr_t data;
int number;
XrmQuark quark;
} MenuStruct;
typedef struct tManual {
char * blabel;
char ** entries;
char ** entries_less_paths;
int nentries;
int nalloc;
int flags;
} Manual;
typedef struct _ManpageGlobals{
int current_directory;
Boolean dir_shown,
both_shown;
Widget label,
standby,
save,
search_widget,
help_button,
option_menu,
text_widget;
Widget dir_entry, manpage_entry, help_entry,
search_entry, both_screens_entry, remove_entry,
open_entry, print_entry, version_entry, quit_entry;
#ifdef INCLUDE_XPRINT_SUPPORT
Widget printdialog_shell;
Widget printdialog;
#endif
char manpage_title[80];
char save_file[80];
char tempfile[80];
Boolean compress;
Boolean gzip;
Boolean deletetempfile;
char ** section_name;
ManPageWidgets manpagewidgets;
Widget This_Manpage;
FILE *curr_file;
} ManpageGlobals;
typedef struct _Xman_Resources {
XmanFonts fonts;
XmanCursors cursors;
Boolean show_help_syntax;
Boolean both_shown_initial;
Boolean top_box_active;
Boolean clear_search_string;
int directory_height;
char * help_file;
char * title;
Boolean iconic;
} Xman_Resources;
#define StrAlloc(ptr) XtNewString(ptr)
#include <stdlib.h>
ManpageGlobals * InitPsuedoGlobals(void);
Widget CreateManpage(FILE * file);
void CreateManpageWidget(ManpageGlobals * man_globals, char * name, Boolean full_instance);
void FormUpWidgets(Widget parent, char ** full_size, char ** half_size);
void MakeDirectoryBox(ManpageGlobals *man_globals, Widget parent, Widget *dir_disp, int section);
void MakeSaveWidgets(ManpageGlobals *man_globals, Widget parent);
void MakeTopBox(void);
void DirPopupCallback(Widget w, XtPointer pointer, XtPointer junk);
void DirectoryHandler(Widget w, XtPointer global_pointer, XtPointer ret_val);
void OptionCallback(Widget w, XtPointer pointer, XtPointer junk);
void Popup(Widget w, XtGrabKind grab_kind);
void CreateNewManpage(Widget w, XEvent * event, String * params, Cardinal * num_params);
void GotoPage(Widget w, XEvent * event, String * params, Cardinal * num_params);
void PopupHelp(Widget w, XEvent * event, String * params, Cardinal * num_params);
void PopupSearch(Widget w, XEvent * event, String * params, Cardinal * num_params);
void Quit(Widget w, XEvent * event, String * params, Cardinal * num_params);
void RemoveThisManpage(Widget w, XEvent * event, String * params, Cardinal * num_params);
void SaveFormattedPage(Widget w, XEvent * event, String * params, Cardinal * num_params);
void Search(Widget w, XEvent * event, String * params, Cardinal * num_params);
#ifdef INCLUDE_XPRINT_SUPPORT
void PrintThisManpage(Widget w, XEvent * event, String * params, Cardinal * num_params);
#endif
void ShowVersion(Widget w, XEvent * event, String * params, Cardinal * num_params);
Boolean MakeHelpWidget(void);
Boolean OpenHelpfile(ManpageGlobals * man_globals);
Bool ReadManConfig(char manpath[]);
int Man(void);
FILE * FindManualFile(ManpageGlobals * man_globals, int section_num, int entry_num);
ManpageGlobals * GetGlobals(Widget w);
void AddCursor(Widget w, Cursor cursor);
void ChangeLabel(Widget w, char * str);
void OpenFile(ManpageGlobals * man_globals, FILE * file);
void PopupWarning(ManpageGlobals * man_globals, char * string);
void PositionCenter(Widget widget, int x, int y, int above, int left, int v_space, int h_space);
void PrintError(char * string);
void RemoveGlobals(Widget w);
void SaveGlobals(Widget w, ManpageGlobals * globals);
void ParseEntry(char *entry, char *path, char *sect, char *page);
FILE * Format(ManpageGlobals * man_globals, char * entry);
FILE * DoSearch(ManpageGlobals * man_globals, int type);
void MakeSearchWidget(ManpageGlobals * man_globals, Widget parent);
int Width(Widget);
int Height(Widget);
int BorderWidth(Widget);
char * Name(Widget);