man.h revision 6d36ef34
1/* 2 3Copyright (c) 1987, 1988 X Consortium 4 5Permission is hereby granted, free of charge, to any person obtaining 6a copy of this software and associated documentation files (the 7"Software"), to deal in the Software without restriction, including 8without limitation the rights to use, copy, modify, merge, publish, 9distribute, sublicense, and/or sell copies of the Software, and to 10permit persons to whom the Software is furnished to do so, subject to 11the following conditions: 12 13The above copyright notice and this permission notice shall be included 14in all copies or substantial portions of the Software. 15 16THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR 20OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22OTHER DEALINGS IN THE SOFTWARE. 23 24Except as contained in this notice, the name of the X Consortium shall 25not be used in advertising or otherwise to promote the sale, use or 26other dealings in this Software without prior written authorization 27from the X Consortium. 28 29*/ 30 31#ifdef HAVE_CONFIG_H 32# include "config.h" 33#endif 34 35/* X toolkit header files */ 36 37#include <X11/Intrinsic.h> 38#include <X11/StringDefs.h> 39#include <X11/Shell.h> 40 41#include <X11/Xaw/Cardinals.h> 42 43/* Std system and C header files */ 44 45#include <stdio.h> 46#include <limits.h> 47 48#include <X11/Xfuncs.h> 49#include <X11/Xos.h> 50 51/* X include files */ 52 53#include <X11/Xatom.h> 54 55/* Widget header files. */ 56 57#include <X11/Xaw/AsciiText.h> 58#include <X11/Xaw/SmeBSB.h> 59#include <X11/Xaw/Box.h> 60#include <X11/Xaw/Command.h> 61#include <X11/Xaw/Dialog.h> 62#include <X11/Xaw/Label.h> 63#include <X11/Xaw/List.h> 64#include <X11/Xaw/MenuButton.h> 65#include <X11/Xaw/SimpleMenu.h> 66#include <X11/Xaw/Paned.h> 67#include <X11/Xaw/Viewport.h> 68 69/* program specific header files. */ 70 71#include "ScrollByL.h" 72 73#include "defs.h" 74 75#define Error(x) { printf x ; exit(EXIT_FAILURE); } 76#define Assertion(expr, msg) { if (!(expr)) { Error msg } } 77#ifdef DEBUG 78# define Log(x) { if(True) printf x; } 79#else 80# define Log(x) { if(False) printf x; } 81#endif /* DEBUG */ 82 83/* 84 * Assigning values here allows the user of Bitwise Or. 85 */ 86 87typedef struct _XmanFonts { 88 XFontStruct *directory; /* The font for the directory. */ 89} XmanFonts; 90 91typedef struct _XmanCursors { 92 Cursor top, /* The top Cursor, default for xman. */ 93 help, /* The top cursor for the help menu. */ 94 manpage, /* The cursor for the Manpage. */ 95 search_entry; /* The cursor for the text widget in the 96 search box. */ 97 Pixel fg_color; /* foreground color of cursors. */ 98 Pixel bg_color; /* background color of cursors. */ 99} XmanCursors; 100 101typedef struct _ManPageWidgets { 102 Widget manpage, /* The manual page window (scrolled) */ 103 directory, /* The widget in which all directories will 104 appear. */ 105 *box; /* The boxes containing the sections. */ 106} ManPageWidgets; 107 108typedef struct _MenuStruct { 109 caddr_t data; 110 int number; 111 XrmQuark quark; 112} MenuStruct; 113 114/* 115 * The manual sections and entries 116 */ 117 118typedef struct tManual { 119 char *blabel; /* The button label. */ 120 char **entries; /* The individual man page file names. */ 121 char **entries_less_paths; /* Entry names only */ 122 int nentries; /* how many (TOTAL) */ 123 int nalloc; /* how much space allocated */ 124 int flags; /* suffix, fold */ 125} Manual; 126 127/* pseudo Globals that are specific to each manpage created. */ 128 129typedef struct _ManpageGlobals { 130 int current_directory; /* The directory currently being shown 131 on this manpage. */ 132 Boolean dir_shown, /* True if the directory is then current 133 visible screen */ 134 both_shown; /* If true then both the manpage and 135 the directory are to be shown. */ 136 Widget label, /* The label widget at the top of the page. */ 137 standby, /* The please standby widget. */ 138 save, /* The "would you like to save?" widget. */ 139 search_widget, /* The search widget popup. */ 140 help_button, /* The help button. */ 141 option_menu, /* The option menu. */ 142 text_widget; /* text widget containing search string. */ 143 144 /* Widgets (Objects really) for the command menu entries. */ 145 146 Widget dir_entry, manpage_entry, help_entry, 147 search_entry, both_screens_entry, remove_entry, 148 open_entry, print_entry, version_entry, quit_entry; 149 150#ifdef INCLUDE_XPRINT_SUPPORT 151 /* Print objects and data */ 152 Widget printdialog_shell; /* Shell for the print dialog */ 153 Widget printdialog; /* Print dialog */ 154#endif /*INCLUDE_XPRINT_SUPPORT */ 155 /* Misc. */ 156 157 char manpage_title[80]; /* The label to use for the current manpage. */ 158 159 char save_file[80]; /* the name of the file to save formatted 160 page into. */ 161 char tempfile[80]; /* the name of the file to copy the formatted 162 page from. */ 163 Boolean compress; /* Compress file on save? */ 164 Boolean gzip; /* Gzip file on save? */ 165 Boolean bzip2; /* Bzip2 file on save? */ 166 Boolean lzma; 167 Boolean deletetempfile; /* Need to delete tempfile when done? */ 168 char **section_name; /* The name of each of the sections */ 169 170 ManPageWidgets manpagewidgets; /* The manpage widgets. */ 171 172 /* Things to remember when cleaning up when killing manpage. */ 173 174 Widget This_Manpage; /* a pointer to the root of 175 this manpage. */ 176 177 FILE *curr_file; /* Current file shown in manpage widget */ 178} ManpageGlobals; 179 180 181/* Resource manager sets these. */ 182 183typedef struct _Xman_Resources { 184 XmanFonts fonts; /* The fonts used for the man pages. */ 185 XmanCursors cursors; /* The cursors for xman. */ 186 Boolean show_help_syntax; /* True if syntax message should be dumped to 187 stdout. */ 188 Boolean both_shown_initial; /* The initial state of the manual pages 189 show two screens or only one. */ 190 Boolean top_box_active; /* Put up the Top Box. */ 191 Boolean clear_search_string; /* clear the search string each time it 192 is popped down? */ 193 int directory_height; /* The default height of directory in 194 both_shown mode. */ 195 char *help_file; /* The name of the help file. */ 196 char *title; /* The title for topBox */ 197 Boolean iconic; /* Should topBox come up in an iconic state */ 198} Xman_Resources; 199 200/************************************************************ 201 * 202 * Function Definitions 203 * 204 ************************************************************/ 205 206/* Standard library function definitions. */ 207#include <stdlib.h> 208 209/* buttons.c */ 210 211ManpageGlobals *InitPsuedoGlobals(void); 212Widget CreateManpage(FILE * file); 213void CreateManpageWidget(ManpageGlobals * man_globals, char *name, 214 Boolean full_instance); 215void FormUpWidgets(Widget parent, 216 const char **full_size, const char **half_size); 217void MakeDirectoryBox(ManpageGlobals * man_globals, Widget parent, 218 Widget * dir_disp, int section); 219void MakeSaveWidgets(ManpageGlobals * man_globals, Widget parent); 220void MakeTopBox(void); 221 222/* handler.c */ 223 224void DirPopupCallback(Widget w, XtPointer pointer, XtPointer junk); 225void DirectoryHandler(Widget w, XtPointer global_pointer, XtPointer ret_val); 226void OptionCallback(Widget w, XtPointer pointer, XtPointer junk); 227void Popup(Widget w, XtGrabKind grab_kind); 228 229/* Action Routines. */ 230 231void CreateNewManpage(Widget w, XEvent * event, String * params, 232 Cardinal * num_params); 233void GotoPage(Widget w, XEvent * event, String * params, Cardinal * num_params); 234void PopupHelp(Widget w, XEvent * event, String * params, 235 Cardinal * num_params); 236void PopupSearch(Widget w, XEvent * event, String * params, 237 Cardinal * num_params); 238void Quit(Widget w, XEvent * event, String * params, Cardinal * num_params); 239void RemoveThisManpage(Widget w, XEvent * event, String * params, 240 Cardinal * num_params); 241void SaveFormattedPage(Widget w, XEvent * event, String * params, 242 Cardinal * num_params); 243void Search(Widget w, XEvent * event, String * params, Cardinal * num_params); 244 245#ifdef INCLUDE_XPRINT_SUPPORT 246void PrintThisManpage(Widget w, XEvent * event, String * params, 247 Cardinal * num_params); 248#endif /* INCLUDE_XPRINT_SUPPORT */ 249void ShowVersion(Widget w, XEvent * event, String * params, 250 Cardinal * num_params); 251 252/* help.c */ 253 254Boolean MakeHelpWidget(void); 255Boolean OpenHelpfile(ManpageGlobals * man_globals); 256 257/* man.c */ 258Bool ReadManConfig(char manpath[]); 259int Man(void); 260 261/* misc.c */ 262#ifndef HAVE_MKSTEMP 263_X_HIDDEN int Xmkstemp (char *template); 264# define mkstemp Xmkstemp 265#endif 266 267FILE *FindManualFile(ManpageGlobals * man_globals, int section_num, 268 int entry_num); 269ManpageGlobals *GetGlobals(Widget w); 270 271void AddCursor(Widget w, Cursor cursor); 272void ChangeLabel(Widget w, const char *str); 273void OpenFile(ManpageGlobals * man_globals, FILE * file); 274void PopupWarning(ManpageGlobals * man_globals, const char *string); 275void PositionCenter(Widget widget, int x, int y, int above, int left, 276 int v_space, int h_space); 277void PrintError(const char *string) _X_NORETURN; 278void RemoveGlobals(Widget w); 279void SaveGlobals(Widget w, ManpageGlobals * globals); 280void ParseEntry(const char *entry, char *path, char *sect, char *page); 281FILE *Format(ManpageGlobals * man_globals, const char *entry); 282 283/* search */ 284FILE *DoSearch(ManpageGlobals * man_globals, int type); 285void MakeSearchWidget(ManpageGlobals * man_globals, Widget parent); 286 287/* tkfunctions.c */ 288 289int Width(Widget); 290int Height(Widget); 291int BorderWidth(Widget); 292char *Name(Widget); 293