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