File: | buttons.c |
Location: | line 113, column 5 |
Description: | Value stored to 'command' is never read |
1 | /* |
2 | |
3 | Copyright (c) 1987, 1988 X Consortium |
4 | |
5 | Permission is hereby granted, free of charge, to any person obtaining |
6 | a copy of this software and associated documentation files (the |
7 | "Software"), to deal in the Software without restriction, including |
8 | without limitation the rights to use, copy, modify, merge, publish, |
9 | distribute, sublicense, and/or sell copies of the Software, and to |
10 | permit persons to whom the Software is furnished to do so, subject to |
11 | the following conditions: |
12 | |
13 | The above copyright notice and this permission notice shall be included |
14 | in all copies or substantial portions of the Software. |
15 | |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
17 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
19 | IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR |
20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
22 | OTHER DEALINGS IN THE SOFTWARE. |
23 | |
24 | Except as contained in this notice, the name of the X Consortium shall |
25 | not be used in advertising or otherwise to promote the sale, use or |
26 | other dealings in this Software without prior written authorization |
27 | from the X Consortium. |
28 | |
29 | */ |
30 | |
31 | /* |
32 | * xman - X window system manual page display program. |
33 | * Author: Chris D. Peterson, MIT Project Athena |
34 | * Created: October 27, 1987 |
35 | */ |
36 | |
37 | #include "globals.h" |
38 | #include "vendor.h" |
39 | |
40 | /* The files with the icon bits in them. */ |
41 | |
42 | #include "icon_open.h" |
43 | #include "icon_help.h" |
44 | #include "iconclosed.h" |
45 | |
46 | static void CreateOptionMenu(ManpageGlobals * man_globals, Widget parent); |
47 | static void CreateSectionMenu(ManpageGlobals * man_globals, Widget parent); |
48 | static void StartManpage(ManpageGlobals * man_globals, Boolean help, |
49 | Boolean page); |
50 | static Widget *ConvertNamesToWidgets(Widget parent, const char **names); |
51 | |
52 | /* Function Name: MakeTopBox |
53 | * Description: This function creates the top menu, in a shell widget. |
54 | * Arguments: none. |
55 | * Returns: the top level widget |
56 | */ |
57 | |
58 | #define TOPARGS5 5 |
59 | |
60 | Widget top; /* needed in PopupWarning, misc.c */ |
61 | |
62 | void |
63 | MakeTopBox(void) |
64 | { |
65 | Widget form, command, label; /* widgets. */ |
66 | Arg arglist[TOPARGS5]; /* An argument list */ |
67 | Cardinal num_args = 0; /* The number of arguments. */ |
68 | ManpageGlobals *man_globals; |
69 | static const char *full_size[] = { |
70 | "topLabel", MANPAGE_BUTTON"manpageButton", NULL((void*)0) |
71 | }; |
72 | static const char *half_size[] = { |
73 | HELP_BUTTON"helpButton", QUIT_BUTTON"quitButton", NULL((void*)0) |
74 | }; |
75 | |
76 | /* create the top icon. */ |
77 | |
78 | num_args = 0; |
79 | XtSetArg(arglist[num_args], XtNiconPixmap,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(initial_widget), XtScreen(initial_widget)->root , (const char *) iconclosed_bits, 20, 30)) )) |
80 | XCreateBitmapFromData(XtDisplay(initial_widget),((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(initial_widget), XtScreen(initial_widget)->root , (const char *) iconclosed_bits, 20, 30)) )) |
81 | XtScreen(initial_widget)->root,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(initial_widget), XtScreen(initial_widget)->root , (const char *) iconclosed_bits, 20, 30)) )) |
82 | (const char *) iconclosed_bits,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(initial_widget), XtScreen(initial_widget)->root , (const char *) iconclosed_bits, 20, 30)) )) |
83 | iconclosed_width, iconclosed_height))((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(initial_widget), XtScreen(initial_widget)->root , (const char *) iconclosed_bits, 20, 30)) )); |
84 | num_args++; |
85 | XtSetArg(arglist[num_args], XtNtitle, resources.title)((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [356])), (arglist[num_args]).value = (XtArgVal)(resources.title ) )); |
86 | num_args++; |
87 | XtSetArg(arglist[num_args], XtNiconic, resources.iconic)((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [429])), (arglist[num_args]).value = (XtArgVal)(resources.iconic ) )); |
88 | num_args++; |
89 | top = XtCreatePopupShell(TOPBOXNAME"topBox", topLevelShellWidgetClass, |
90 | initial_widget, arglist, num_args); |
91 | |
92 | form = XtCreateManagedWidget("form", formWidgetClass, top, |
93 | NULL((void*)0), (Cardinal) 0); |
94 | |
95 | label = XtCreateManagedWidget("topLabel", labelWidgetClass, form, |
96 | NULL((void*)0), (Cardinal) 0); |
97 | |
98 | num_args = 0; |
99 | XtSetArg(arglist[num_args], XtNfromVert, label)((void)( (arglist[num_args]).name = ("fromVert"), (arglist[num_args ]).value = (XtArgVal)(label) )); |
100 | num_args++; |
101 | command = XtCreateManagedWidget(HELP_BUTTON"helpButton", commandWidgetClass, form, |
102 | arglist, num_args); |
103 | |
104 | /* use same vertical as help widget. */ |
105 | XtSetArg(arglist[num_args], XtNfromHoriz, command)((void)( (arglist[num_args]).name = ("fromHoriz"), (arglist[num_args ]).value = (XtArgVal)(command) )); |
106 | num_args++; |
107 | command = XtCreateManagedWidget(QUIT_BUTTON"quitButton", commandWidgetClass, form, |
108 | arglist, num_args); |
109 | |
110 | num_args = 0; |
111 | XtSetArg(arglist[num_args], XtNfromVert, command)((void)( (arglist[num_args]).name = ("fromVert"), (arglist[num_args ]).value = (XtArgVal)(command) )); |
112 | num_args++; |
113 | command = XtCreateManagedWidget(MANPAGE_BUTTON"manpageButton", commandWidgetClass, form, |
Value stored to 'command' is never read | |
114 | arglist, num_args); |
115 | |
116 | help_widget = NULL((void*)0); /* We have not seen the help yet. */ |
117 | |
118 | FormUpWidgets(form, full_size, half_size); |
119 | |
120 | XtRealizeWidget(top); |
121 | /* add WM_COMMAND property */ |
122 | XSetCommand(XtDisplay(top), XtWindow(top), saved_argv, saved_argc); |
123 | |
124 | man_globals = |
125 | (ManpageGlobals *) XtCalloc(ONE((Cardinal)1), (Cardinal) sizeof(ManpageGlobals)); |
126 | MakeSearchWidget(man_globals, top); |
127 | MakeSaveWidgets(man_globals, top); |
128 | |
129 | SaveGlobals((man_globals->This_Manpage = top), man_globals); |
130 | XtMapWidget(top)XMapWindow(XtDisplay(top), XtWindow(top)); |
131 | AddCursor(top, resources.cursors.top); |
132 | |
133 | /* |
134 | * Set up ICCCM delete window. |
135 | */ |
136 | XtOverrideTranslations |
137 | (top, XtParseTranslationTable("<Message>WM_PROTOCOLS: Quit()")); |
138 | (void) XSetWMProtocols(XtDisplay(top), XtWindow(top), &wm_delete_window, 1); |
139 | |
140 | } |
141 | |
142 | /* Function Name: CreateManpage |
143 | * Description: Creates a new manpage. |
144 | * Arguments: none. |
145 | * Returns: none. |
146 | */ |
147 | |
148 | Widget |
149 | CreateManpage(FILE * file) |
150 | { |
151 | ManpageGlobals *man_globals; /* The pseudo global structure. */ |
152 | |
153 | man_globals = InitPsuedoGlobals(); |
154 | if (man_globals == NULL((void*)0)) |
155 | return NULL((void*)0); |
156 | CreateManpageWidget(man_globals, MANNAME"manualBrowser", TRUE1); |
157 | |
158 | if (file == NULL((void*)0)) |
159 | StartManpage(man_globals, OpenHelpfile(man_globals), FALSE0); |
160 | else { |
161 | OpenFile(man_globals, file); |
162 | StartManpage(man_globals, FALSE0, TRUE1); |
163 | } |
164 | return (man_globals->This_Manpage); |
165 | } |
166 | |
167 | /* Function Name: InitPsuedoGlobals |
168 | * Description: Initializes the pseudo global variables. |
169 | * Arguments: none. |
170 | * Returns: a pointer to a new pseudo globals structure. |
171 | */ |
172 | |
173 | ManpageGlobals * |
174 | InitPsuedoGlobals(void) |
175 | { |
176 | ManpageGlobals *man_globals; |
177 | |
178 | /* |
179 | * Allocate necessary memory. |
180 | */ |
181 | |
182 | man_globals = |
183 | (ManpageGlobals *) XtCalloc(ONE((Cardinal)1), (Cardinal) sizeof(ManpageGlobals)); |
184 | if (!man_globals) |
185 | return NULL((void*)0); |
186 | |
187 | man_globals->search_widget = NULL((void*)0); |
188 | man_globals->section_name = (char **) XtMalloc((Cardinal) (sections * |
189 | sizeof(char *))); |
190 | man_globals->manpagewidgets.box = (Widget *) XtCalloc((Cardinal) sections, |
191 | (Cardinal) |
192 | sizeof(Widget)); |
193 | |
194 | /* Initialize the number of screens that will be shown */ |
195 | |
196 | man_globals->both_shown = resources.both_shown_initial; |
197 | |
198 | return (man_globals); |
199 | } |
200 | |
201 | /* Function Name: CreateManpageWidget |
202 | * Description: Creates a new manual page widget. |
203 | * Arguments: man_globals - a new man_globals structure. |
204 | * name - name of this shell widget instance. |
205 | * full_instance - if true then create a full manpage, |
206 | * otherwise create stripped down version |
207 | * used for help. |
208 | * Returns: none |
209 | */ |
210 | |
211 | #define MANPAGEARGS10 10 |
212 | |
213 | void |
214 | CreateManpageWidget(ManpageGlobals * man_globals, |
215 | char *name, Boolean full_instance) |
216 | { |
217 | Arg arglist[MANPAGEARGS10]; /* An argument list for widget creation */ |
218 | Cardinal num_args; /* The number of arguments in the list. */ |
219 | Widget mytop, pane, hpane, mysections; /* Widgets */ |
220 | ManPageWidgets *mpw = &(man_globals->manpagewidgets); |
221 | |
222 | num_args = (Cardinal) 0; |
223 | XtSetArg(arglist[num_args], XtNwidth, default_width)((void)( (arglist[num_args]).name = (((char*)&XtStrings[872 ])), (arglist[num_args]).value = (XtArgVal)(default_width) )); |
224 | num_args++; |
225 | XtSetArg(arglist[num_args], XtNheight, default_height)((void)( (arglist[num_args]).name = (((char*)&XtStrings[234 ])), (arglist[num_args]).value = (XtArgVal)(default_height) ) ); |
226 | num_args++; |
227 | |
228 | mytop = XtCreatePopupShell(name, topLevelShellWidgetClass, initial_widget, |
229 | arglist, num_args); |
230 | |
231 | man_globals->This_Manpage = mytop; /* pointer to root widget of Manualpage. */ |
232 | num_args = 0; |
233 | if (full_instance) |
234 | XtSetArg(arglist[num_args], XtNiconPixmap,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_open_bits , 30, 30)) )) |
235 | XCreateBitmapFromData(XtDisplay(mytop), XtScreen(mytop)->root,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_open_bits , 30, 30)) )) |
236 | (const char *) icon_open_bits,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_open_bits , 30, 30)) )) |
237 | icon_open_width, icon_open_height))((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_open_bits , 30, 30)) )); |
238 | else |
239 | XtSetArg(arglist[num_args], XtNiconPixmap,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_help_bits , 30, 30)) )) |
240 | XCreateBitmapFromData(XtDisplay(mytop), XtScreen(mytop)->root,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_help_bits , 30, 30)) )) |
241 | (const char *) icon_help_bits,((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_help_bits , 30, 30)) )) |
242 | icon_help_width, icon_help_height))((void)( (arglist[num_args]).name = (((char*)&XtShellStrings [18])), (arglist[num_args]).value = (XtArgVal)(XCreateBitmapFromData (XtDisplay(mytop), XtScreen(mytop)->root, (const char *) icon_help_bits , 30, 30)) )); |
243 | num_args++; |
244 | XtSetValues(mytop, arglist, num_args); |
245 | |
246 | pane = XtCreateManagedWidget("vertPane", panedWidgetClass, mytop, NULL((void*)0), |
247 | (Cardinal) 0); |
248 | |
249 | /* Create menu bar. */ |
250 | |
251 | hpane = XtCreateManagedWidget("horizPane", panedWidgetClass, |
252 | pane, NULL((void*)0), (Cardinal) 0); |
253 | num_args = 0; |
254 | XtSetArg(arglist[num_args], XtNmenuName, OPTION_MENU)((void)( (arglist[num_args]).name = ("menuName"), (arglist[num_args ]).value = (XtArgVal)("optionMenu") )); |
255 | num_args++; |
256 | (void) XtCreateManagedWidget("options", menuButtonWidgetClass, |
257 | hpane, arglist, num_args); |
258 | |
259 | CreateOptionMenu(man_globals, mytop); |
260 | |
261 | num_args = 0; |
262 | XtSetArg(arglist[num_args], XtNmenuName, SECTION_MENU)((void)( (arglist[num_args]).name = ("menuName"), (arglist[num_args ]).value = (XtArgVal)("sectionMenu") )); |
263 | num_args++; |
264 | mysections = XtCreateManagedWidget("sections", menuButtonWidgetClass, |
265 | hpane, arglist, num_args); |
266 | |
267 | XtSetArg(arglist[0], XtNlabel, SHOW_BOTH)((void)( (arglist[0]).name = (((char*)&XtStrings[429])), ( arglist[0]).value = (XtArgVal)("Show Both Screens") )); |
268 | XtSetValues(man_globals->both_screens_entry, arglist, (Cardinal) 1); |
269 | |
270 | if (full_instance) { |
271 | MakeSearchWidget(man_globals, mytop); |
272 | CreateSectionMenu(man_globals, mytop); |
273 | MakeSaveWidgets(man_globals, mytop); |
274 | } |
275 | else { |
276 | XtSetSensitive(mysections, FALSE0); |
277 | XtSetArg(arglist[0], XtNsensitive, FALSE)((void)( (arglist[0]).name = (((char*)&XtStrings[711])), ( arglist[0]).value = (XtArgVal)(0) )); |
278 | XtSetValues(man_globals->dir_entry, arglist, ONE((Cardinal)1)); |
279 | XtSetValues(man_globals->manpage_entry, arglist, ONE((Cardinal)1)); |
280 | XtSetValues(man_globals->help_entry, arglist, ONE((Cardinal)1)); |
281 | XtSetValues(man_globals->search_entry, arglist, ONE((Cardinal)1)); |
282 | XtSetValues(man_globals->both_screens_entry, arglist, ONE((Cardinal)1)); |
283 | } |
284 | |
285 | #ifdef INCLUDE_XPRINT_SUPPORT |
286 | XtSetArg(arglist[0], XtNsensitive, True)((void)( (arglist[0]).name = (((char*)&XtStrings[711])), ( arglist[0]).value = (XtArgVal)(1) )); |
287 | XtSetValues(man_globals->print_entry, arglist, ONE((Cardinal)1)); |
288 | #endif /* INCLUDE_XPRINT_SUPPORT */ |
289 | |
290 | man_globals->label = XtCreateManagedWidget("manualTitle", labelWidgetClass, |
291 | hpane, NULL((void*)0), (Cardinal) 0); |
292 | |
293 | /* Create Directory */ |
294 | |
295 | if (full_instance) { |
296 | num_args = 0; |
297 | XtSetArg(arglist[num_args], XtNallowVert, TRUE)((void)( (arglist[num_args]).name = (((char*)&XtStrings[24 ])), (arglist[num_args]).value = (XtArgVal)(1) )); |
298 | num_args++; |
299 | |
300 | mpw->directory = XtCreateWidget(DIRECTORY_NAME"directory", viewportWidgetClass, |
301 | pane, arglist, num_args); |
302 | |
303 | man_globals->current_directory = INITIAL_DIR0; |
304 | MakeDirectoryBox(man_globals, mpw->directory, |
305 | mpw->box + man_globals->current_directory, |
306 | man_globals->current_directory); |
307 | XtManageChild(mpw->box[man_globals->current_directory]); |
308 | } |
309 | |
310 | /* Create Manpage */ |
311 | |
312 | mpw->manpage = XtCreateWidget(MANUALPAGE"manualPage", scrollByLineWidgetClass, |
313 | pane, NULL((void*)0), (Cardinal) 0); |
314 | |
315 | } |
316 | |
317 | /* Function Name: StartManpage |
318 | * Description: Starts up a new manpage. |
319 | * Arguments: man_globals - the pseudo globals variable. |
320 | * help - is this a help file? |
321 | * page - Is there a page to display? |
322 | * Returns: none. |
323 | */ |
324 | |
325 | static void |
326 | StartManpage(ManpageGlobals * man_globals, Boolean help, Boolean page) |
327 | { |
328 | Widget dir = man_globals->manpagewidgets.directory; |
329 | Widget manpage = man_globals->manpagewidgets.manpage; |
330 | Widget label = man_globals->label; |
331 | Arg arglist[1]; |
332 | |
333 | /* |
334 | * If there is a helpfile then put up both screens if both_show is set. |
335 | */ |
336 | |
337 | if (page || help) { |
338 | if (help) |
339 | strcpy(man_globals->manpage_title, "Xman Help")__builtin___strcpy_chk (man_globals->manpage_title, "Xman Help" , __builtin_object_size (man_globals->manpage_title, 2 > 1 ? 1 : 0)); |
340 | |
341 | if (man_globals->both_shown) { |
342 | XtManageChild(dir); |
343 | man_globals->dir_shown = TRUE1; |
344 | |
345 | XtSetArg(arglist[0], XtNpreferredPaneSize,((void)( (arglist[0]).name = ("preferredPaneSize"), (arglist[ 0]).value = (XtArgVal)(resources.directory_height) )) |
346 | resources.directory_height)((void)( (arglist[0]).name = ("preferredPaneSize"), (arglist[ 0]).value = (XtArgVal)(resources.directory_height) )); |
347 | XtSetValues(dir, arglist, (Cardinal) 1); |
348 | |
349 | XtSetArg(arglist[0], XtNsensitive, FALSE)((void)( (arglist[0]).name = (((char*)&XtStrings[711])), ( arglist[0]).value = (XtArgVal)(0) )); |
350 | XtSetValues(man_globals->manpage_entry, arglist, ONE((Cardinal)1)); |
351 | XtSetValues(man_globals->dir_entry, arglist, ONE((Cardinal)1)); |
352 | |
353 | XtSetArg(arglist[0], XtNlabel, SHOW_ONE)((void)( (arglist[0]).name = (((char*)&XtStrings[429])), ( arglist[0]).value = (XtArgVal)("Show One Screen") )); |
354 | XtSetValues(man_globals->both_screens_entry, arglist, ONE((Cardinal)1)); |
355 | ChangeLabel(label, |
356 | man_globals->section_name[man_globals-> |
357 | current_directory]); |
358 | } |
359 | else { |
360 | ChangeLabel(label, man_globals->manpage_title); |
361 | } |
362 | XtManageChild(manpage); |
363 | man_globals->dir_shown = FALSE0; |
364 | } |
365 | /* |
366 | * Since There is file to display, put up directory and do not allow change |
367 | * to manpage, show both, or help. |
368 | */ |
369 | else { |
370 | XtManageChild(dir); |
371 | man_globals->dir_shown = TRUE1; |
372 | XtSetArg(arglist[0], XtNsensitive, FALSE)((void)( (arglist[0]).name = (((char*)&XtStrings[711])), ( arglist[0]).value = (XtArgVal)(0) )); |
373 | XtSetValues(man_globals->manpage_entry, arglist, ONE((Cardinal)1)); |
374 | XtSetValues(man_globals->help_entry, arglist, ONE((Cardinal)1)); |
375 | XtSetValues(man_globals->both_screens_entry, arglist, ONE((Cardinal)1)); |
376 | man_globals->both_shown = FALSE0; |
377 | ChangeLabel(label, |
378 | man_globals->section_name[man_globals->current_directory]); |
379 | } |
380 | |
381 | /* |
382 | * Start 'er up, and change the cursor. |
383 | */ |
384 | |
385 | XtRealizeWidget(man_globals->This_Manpage); |
386 | SaveGlobals(man_globals->This_Manpage, man_globals); |
387 | XtMapWidget(man_globals->This_Manpage)XMapWindow(XtDisplay(man_globals->This_Manpage), XtWindow( man_globals->This_Manpage)); |
388 | AddCursor(man_globals->This_Manpage, resources.cursors.manpage); |
389 | XtSetArg(arglist[0], XtNtransientFor, man_globals->This_Manpage)((void)( (arglist[0]).name = (((char*)&XtShellStrings[220 ])), (arglist[0]).value = (XtArgVal)(man_globals->This_Manpage ) )); |
390 | XtSetValues(XtParent(man_globals->standby), arglist, (Cardinal) 1); |
391 | XtSetValues(XtParent(man_globals->save), arglist, (Cardinal) 1); |
392 | XtRealizeWidget(XtParent(man_globals->standby)); |
393 | XtRealizeWidget(XtParent(man_globals->save)); |
394 | AddCursor(XtParent(man_globals->standby), resources.cursors.top); |
395 | AddCursor(XtParent(man_globals->save), resources.cursors.top); |
396 | |
397 | /* |
398 | * Set up ICCCM delete window. |
399 | */ |
400 | XtOverrideTranslations |
401 | (man_globals->This_Manpage, |
402 | XtParseTranslationTable("<Message>WM_PROTOCOLS: RemoveThisManpage()")); |
403 | (void) XSetWMProtocols(XtDisplay(man_globals->This_Manpage), |
404 | XtWindow(man_globals->This_Manpage), |
405 | &wm_delete_window, 1); |
406 | |
407 | } |
408 | |
409 | /* Function Name: MenuDestroy |
410 | * Description: free's data associated with menu when it is destroyed. |
411 | * Arguments: w - menu widget. |
412 | * free_me - data to free. |
413 | * junk - not used. |
414 | * Returns: none. |
415 | */ |
416 | |
417 | /* ARGSUSED */ |
418 | static void |
419 | MenuDestroy(Widget w, XtPointer free_me, XtPointer junk) |
420 | { |
421 | XtFree((char *) free_me); |
422 | } |
423 | |
424 | /* Function Name: CreateOptionMenu |
425 | * Description: Create the option menu. |
426 | * Arguments: man_globals - the manual page globals. |
427 | * parent - the button that activates the menu. |
428 | * Returns: none. |
429 | */ |
430 | |
431 | static void |
432 | CreateOptionMenu(ManpageGlobals * man_globals, Widget parent) |
433 | { |
434 | Widget menu, entry; |
435 | int i; |
436 | static const char *option_names[] = { /* Names of the buttons. */ |
437 | DIRECTORY"displayDirectory", |
438 | MANPAGE"displayManualPage", |
439 | HELP"help", |
440 | SEARCH"search", |
441 | BOTH_SCREENS"showBothScreens", |
442 | REMOVE_MANPAGE"removeThisManpage", |
443 | OPEN_MANPAGE"openNewManpage", |
444 | #ifdef INCLUDE_XPRINT_SUPPORT |
445 | PRINT_MANPAGE, |
446 | #endif /* INCLUDE_XPRINT_SUPPORT */ |
447 | SHOW_VERSION"showVersion", |
448 | QUIT"quit" |
449 | }; |
450 | |
451 | menu = XtCreatePopupShell(OPTION_MENU"optionMenu", simpleMenuWidgetClass, parent, |
452 | NULL((void*)0), (Cardinal) 0); |
453 | man_globals->option_menu = menu; |
454 | |
455 | for (i = 0; i < NUM_OPTIONS9; i++) { |
456 | entry = XtCreateManagedWidget(option_names[i], smeBSBObjectClass, |
457 | menu, NULL((void*)0), ZERO((Cardinal)0)); |
458 | XtAddCallback(entry, XtNcallback((char*)&XtStrings[136]), OptionCallback, |
459 | (caddr_t) man_globals); |
460 | switch (i) { |
461 | case 0: |
462 | man_globals->dir_entry = entry; |
463 | break; |
464 | case 1: |
465 | man_globals->manpage_entry = entry; |
466 | break; |
467 | case 2: |
468 | man_globals->help_entry = entry; |
469 | break; |
470 | case 3: |
471 | man_globals->search_entry = entry; |
472 | break; |
473 | case 4: |
474 | man_globals->both_screens_entry = entry; |
475 | break; |
476 | case 5: |
477 | man_globals->remove_entry = entry; |
478 | break; |
479 | case 6: |
480 | man_globals->open_entry = entry; |
481 | break; |
482 | #ifdef INCLUDE_XPRINT_SUPPORT |
483 | case 7: |
484 | man_globals->print_entry = entry; |
485 | break; |
486 | case 8: |
487 | man_globals->version_entry = entry; |
488 | break; |
489 | case 9: |
490 | man_globals->quit_entry = entry; |
491 | break; |
492 | #else /* !INCLUDE_XPRINT_SUPPORT */ |
493 | case 7: |
494 | man_globals->version_entry = entry; |
495 | break; |
496 | case 8: |
497 | man_globals->quit_entry = entry; |
498 | break; |
499 | #endif /* !INCLUDE_XPRINT_SUPPORT */ |
500 | default: |
501 | Error(("CreateOptionMenu: Unknown id=%d\n", i)){ printf ("CreateOptionMenu: Unknown id=%d\n", i) ; exit(1); }; |
502 | break; |
503 | } |
504 | } |
505 | |
506 | #ifdef INCLUDE_XPRINT_SUPPORT |
507 | XtVaSetValues(man_globals->print_entry, XtNsensitive((char*)&XtStrings[711]), FALSE0, NULL((void*)0)); |
508 | #endif /* INCLUDE_XPRINT_SUPPORT */ |
509 | } |
510 | |
511 | /* Function Name: CreateSectionMenu |
512 | * Description: Create the Section menu. |
513 | * Arguments: man_globals - the manual page globals. |
514 | * parent - the button that activates the menu. |
515 | * Returns: none. |
516 | */ |
517 | |
518 | static void |
519 | CreateSectionMenu(ManpageGlobals * man_globals, Widget parent) |
520 | { |
521 | Widget menu, entry; |
522 | int i; |
523 | MenuStruct *menu_struct; |
524 | Arg args[1]; |
525 | Cardinal num_args; |
526 | char entry_name[BUFSIZ1024]; |
527 | |
528 | menu = XtCreatePopupShell(SECTION_MENU"sectionMenu", simpleMenuWidgetClass, parent, |
529 | NULL((void*)0), (Cardinal) 0); |
530 | |
531 | for (i = 0; i < sections; i++) { |
532 | num_args = 0; |
533 | XtSetArg(args[num_args], XtNlabel, manual[i].blabel)((void)( (args[num_args]).name = (((char*)&XtStrings[429] )), (args[num_args]).value = (XtArgVal)(manual[i].blabel) )); |
534 | num_args++; |
535 | snprintf(entry_name, sizeof(entry_name), "section%d", i)__builtin___snprintf_chk (entry_name, sizeof(entry_name), 0, __builtin_object_size (entry_name, 2 > 1 ? 1 : 0), "section%d", i); |
536 | |
537 | entry = XtCreateManagedWidget(entry_name, smeBSBObjectClass, |
538 | menu, args, num_args); |
539 | menu_struct = (MenuStruct *) XtMalloc(sizeof(MenuStruct)); |
540 | menu_struct->data = (caddr_t) man_globals; |
541 | menu_struct->number = i; |
542 | XtAddCallback(entry, XtNcallback((char*)&XtStrings[136]), DirPopupCallback, |
543 | (caddr_t) menu_struct); |
544 | XtAddCallback(entry, XtNdestroyCallback((char*)&XtStrings[169]), MenuDestroy, |
545 | (caddr_t) menu_struct); |
546 | |
547 | } |
548 | } |
549 | |
550 | /* Function Name: CreateList |
551 | * Description: this function prints a label in the directory list |
552 | * Arguments: section - the manual section. |
553 | * Returns: none |
554 | */ |
555 | |
556 | static char ** |
557 | CreateList(int section) |
558 | { |
559 | char **ret_list, **current; |
560 | int count; |
561 | |
562 | ret_list = (char **) XtMalloc((manual[section].nentries + 1) * |
563 | sizeof(char *)); |
564 | |
565 | for (current = ret_list, count = 0; count < manual[section].nentries; |
566 | count++, current++) |
567 | *current = CreateManpageName(manual[section].entries[count], section, |
568 | manual[section].flags); |
569 | |
570 | *current = NULL((void*)0); /* NULL terminate the list. */ |
571 | return (ret_list); |
572 | } |
573 | |
574 | /* Function Name: MakeDirectoryBox |
575 | * Description: make a directory box. |
576 | * Arguments: man_globals - the pseudo global structure for each manpage. |
577 | * parent - this guys parent widget. |
578 | * dir_disp - the directory display widget. |
579 | * section - the section number. |
580 | * Returns: none. |
581 | */ |
582 | |
583 | void |
584 | MakeDirectoryBox(ManpageGlobals * man_globals, Widget parent, Widget * dir_disp, |
585 | int section) |
586 | { |
587 | Arg arglist[10]; |
588 | Cardinal num_args; |
589 | char *name, label_name[BUFSIZ1024]; |
590 | |
591 | if (*dir_disp != NULL((void*)0)) /* If we have one, don't make another. */ |
592 | return; |
593 | |
594 | name = manual[section].blabel; /* Set the section name */ |
595 | snprintf(label_name, sizeof(label_name), "Directory of: %s", name)__builtin___snprintf_chk (label_name, sizeof(label_name), 0, __builtin_object_size (label_name, 2 > 1 ? 1 : 0), "Directory of: %s", name); |
596 | man_globals->section_name[section] = XtNewString(label_name)((label_name) != ((void*)0) ? (__builtin___strcpy_chk (XtMalloc ((unsigned)strlen(label_name) + 1), label_name, __builtin_object_size (XtMalloc((unsigned)strlen(label_name) + 1), 2 > 1 ? 1 : 0 ))) : ((void*)0)); |
597 | |
598 | num_args = 0; |
599 | XtSetArg(arglist[num_args], XtNlist, CreateList(section))((void)( (arglist[num_args]).name = ("list"), (arglist[num_args ]).value = (XtArgVal)(CreateList(section)) )); |
600 | num_args++; |
601 | XtSetArg(arglist[num_args], XtNfont, resources.fonts.directory)((void)( (arglist[num_args]).name = (((char*)&XtStrings[199 ])), (arglist[num_args]).value = (XtArgVal)(resources.fonts.directory ) )); |
602 | num_args++; |
603 | |
604 | *dir_disp = XtCreateWidget(DIRECTORY_NAME"directory", listWidgetClass, parent, |
605 | arglist, num_args); |
606 | |
607 | XtAddCallback(*dir_disp, XtNcallback((char*)&XtStrings[136]), |
608 | DirectoryHandler, (caddr_t) man_globals); |
609 | } |
610 | |
611 | /* Function Name: MakeSaveWidgets. |
612 | * Description: This functions creates two popup widgets, the please |
613 | * standby widget and the would you like to save widget. |
614 | * Arguments: man_globals - the pseudo globals structure for each man page |
615 | * parent - the realized parent for both popups. |
616 | * Returns: none. |
617 | */ |
618 | |
619 | void |
620 | MakeSaveWidgets(ManpageGlobals * man_globals, Widget parent) |
621 | { |
622 | Widget shell, dialog; /* misc. widgets. */ |
623 | Arg warg[1]; |
624 | Cardinal n = 0; |
625 | |
626 | /* make the please stand by popup widget. */ |
627 | if (XtIsRealized(parent)) { |
628 | XtSetArg(warg[0], XtNtransientFor, parent)((void)( (warg[0]).name = (((char*)&XtShellStrings[220])) , (warg[0]).value = (XtArgVal)(parent) )); |
629 | n++; |
630 | } |
631 | shell = XtCreatePopupShell("pleaseStandBy", transientShellWidgetClass, |
632 | parent, warg, (Cardinal) n); |
633 | |
634 | man_globals->standby = XtCreateManagedWidget("label", labelWidgetClass, |
635 | shell, NULL((void*)0), (Cardinal) 0); |
636 | |
637 | man_globals->save = XtCreatePopupShell("likeToSave", |
638 | transientShellWidgetClass, |
639 | parent, warg, n); |
640 | |
641 | dialog = XtCreateManagedWidget("dialog", dialogWidgetClass, |
642 | man_globals->save, NULL((void*)0), (Cardinal) 0); |
643 | |
644 | XawDialogAddButton(dialog, FILE_SAVE"yes", NULL((void*)0), NULL((void*)0)); |
645 | XawDialogAddButton(dialog, CANCEL_FILE_SAVE"no", NULL((void*)0), NULL((void*)0)); |
646 | |
647 | if (XtIsRealized(parent)) { |
648 | XtRealizeWidget(shell); |
649 | AddCursor(shell, resources.cursors.top); |
650 | XtRealizeWidget(man_globals->save); |
651 | AddCursor(man_globals->save, resources.cursors.top); |
652 | } |
653 | } |
654 | |
655 | /* Function Name: FormUpWidgets |
656 | * Description: Sizes widgets to look nice. |
657 | * Arguments: parent - the common parent of all the widgets. |
658 | * full_size - array of widget names that will be full size. |
659 | * half_size - array of widget names that will be half size. |
660 | * Returns: none |
661 | */ |
662 | |
663 | void |
664 | FormUpWidgets(Widget parent, const char **full_size, const char **half_size) |
665 | { |
666 | Widget *full_widgets, *half_widgets, *temp, long_widget; |
667 | Dimension longest, length, b_width; |
668 | int interior_dist; |
669 | Arg arglist[2]; |
670 | |
671 | full_widgets = ConvertNamesToWidgets(parent, full_size); |
672 | half_widgets = ConvertNamesToWidgets(parent, half_size); |
673 | |
674 | long_widget = NULL((void*)0); |
675 | longest = 0; |
676 | XtSetArg(arglist[0], XtNwidth, &length)((void)( (arglist[0]).name = (((char*)&XtStrings[872])), ( arglist[0]).value = (XtArgVal)(&length) )); |
677 | XtSetArg(arglist[1], XtNborderWidth, &b_width)((void)( (arglist[1]).name = (((char*)&XtStrings[124])), ( arglist[1]).value = (XtArgVal)(&b_width) )); |
678 | |
679 | /* |
680 | * Find Longest widget. |
681 | */ |
682 | |
683 | for (temp = full_widgets; *temp != (Widget) NULL((void*)0); temp++) { |
684 | XtGetValues(*temp, arglist, (Cardinal) 2); |
685 | length += 2 * b_width; |
686 | if (length > longest) { |
687 | longest = length; |
688 | long_widget = *temp; |
689 | } |
690 | } |
691 | |
692 | if (long_widget == (Widget) NULL((void*)0)) { /* Make sure we found one. */ |
693 | PopupWarning(GetGlobals(parent), |
694 | "Could not find longest widget, aborting..."); |
695 | XtFree((char *) full_widgets); |
696 | XtFree((char *) half_widgets); |
697 | return; |
698 | } |
699 | |
700 | /* |
701 | * Set all other full_widgets to this length. |
702 | */ |
703 | |
704 | for (temp = full_widgets; *temp != (Widget) NULL((void*)0); temp++) |
705 | if (long_widget != *temp) { |
706 | Dimension width, border_width; |
707 | |
708 | XtSetArg(arglist[0], XtNborderWidth, &border_width)((void)( (arglist[0]).name = (((char*)&XtStrings[124])), ( arglist[0]).value = (XtArgVal)(&border_width) )); |
709 | XtGetValues(*temp, arglist, (Cardinal) 1); |
710 | |
711 | width = longest - 2 * border_width; |
712 | XtSetArg(arglist[0], XtNwidth, width)((void)( (arglist[0]).name = (((char*)&XtStrings[872])), ( arglist[0]).value = (XtArgVal)(width) )); |
713 | XtSetValues(*temp, arglist, (Cardinal) 1); |
714 | } |
715 | |
716 | /* |
717 | * Set all the half widgets to the right length. |
718 | */ |
719 | |
720 | XtSetArg(arglist[0], XtNdefaultDistance, &interior_dist)((void)( (arglist[0]).name = ("defaultDistance"), (arglist[0] ).value = (XtArgVal)(&interior_dist) )); |
721 | XtGetValues(parent, arglist, (Cardinal) 1); |
722 | |
723 | for (temp = half_widgets; *temp != (Widget) NULL((void*)0); temp++) { |
724 | Dimension width, border_width; |
725 | |
726 | XtSetArg(arglist[0], XtNborderWidth, &border_width)((void)( (arglist[0]).name = (((char*)&XtStrings[124])), ( arglist[0]).value = (XtArgVal)(&border_width) )); |
727 | XtGetValues(*temp, arglist, (Cardinal) 1); |
728 | |
729 | width = (int) (longest - interior_dist) / 2 - 2 * border_width; |
730 | XtSetArg(arglist[0], XtNwidth, width)((void)( (arglist[0]).name = (((char*)&XtStrings[872])), ( arglist[0]).value = (XtArgVal)(width) )); |
731 | XtSetValues(*temp, arglist, (Cardinal) 1); |
732 | } |
733 | |
734 | XtFree((char *) full_widgets); |
735 | XtFree((char *) half_widgets); |
736 | } |
737 | |
738 | /* Function Name: ConvertNamesToWidgets |
739 | * Description: Converts a list of names into a list of widgets. |
740 | * Arguments: parent - the common parent of these widgets. |
741 | * names - an array of widget names. |
742 | * Returns: an array of widget id's. |
743 | */ |
744 | |
745 | static Widget * |
746 | ConvertNamesToWidgets(Widget parent, const char **names) |
747 | { |
748 | const char **temp; |
749 | Widget *ids, *temp_ids; |
750 | int count; |
751 | |
752 | for (count = 0, temp = names; *temp != NULL((void*)0); count++, temp++); |
753 | |
754 | ids = (Widget *) XtMalloc((count + 1) * sizeof(Widget)); |
755 | |
756 | for (temp_ids = ids; *names != NULL((void*)0); names++, temp_ids++) { |
757 | *temp_ids = XtNameToWidget(parent, *names); |
758 | if (*temp_ids == NULL((void*)0)) { |
759 | char error_buf[BUFSIZ1024]; |
760 | |
761 | snprintf(error_buf, sizeof(error_buf),__builtin___snprintf_chk (error_buf, sizeof(error_buf), 0, __builtin_object_size (error_buf, 2 > 1 ? 1 : 0), "Could not find widget named '%s'" , *names) |
762 | "Could not find widget named '%s'", *names)__builtin___snprintf_chk (error_buf, sizeof(error_buf), 0, __builtin_object_size (error_buf, 2 > 1 ? 1 : 0), "Could not find widget named '%s'" , *names); |
763 | PrintError(error_buf); |
764 | XtFree((char *) ids); |
765 | return (NULL((void*)0)); |
766 | } |
767 | } |
768 | |
769 | *temp_ids = (Widget) NULL((void*)0); |
770 | return (ids); |
771 | } |