convert all Imakefile LinuxDistribution to LinuxArchitecture.
[oweals/cde.git] / cde / programs / dtksh / xmwidgets.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: xmwidgets.c /main/6 1996/04/01 17:54:38 rswiston $ */
24
25 /*      Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
26 /*      All Rights Reserved     */
27
28 /*      THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF          */
29 /*      UNIX System Laboratories, Inc.                          */
30 /*      The copyright notice above does not evidence any        */
31 /*      actual or intended publication of such source code.     */
32
33 #include        "name.h" 
34 #include        "shell.h" 
35 #include <X11/Intrinsic.h>
36 #include <X11/Shell.h>
37 #include <X11/StringDefs.h>
38
39 #include <Xm/ArrowB.h>
40 #include <Xm/ArrowBG.h>
41 #include <Xm/BulletinB.h>
42 #include <Xm/CascadeB.h>
43 #include <Xm/CascadeBG.h>
44 #include <Xm/ComboBox.h>
45 #include <Xm/Command.h>
46 #include <Xm/DialogS.h>
47 #include <Xm/DrawingA.h>
48 #include <Xm/DrawnB.h>
49 #include <Xm/FileSB.h>
50 #include <Xm/Form.h>
51 #include <Xm/Frame.h>
52 #include <Xm/Label.h>
53 #include <Xm/LabelG.h>
54 #include <Xm/List.h>
55 #include <Xm/MainW.h>
56 #include <Xm/MenuShell.h>
57 #include <Xm/MessageB.h>
58 #include <Xm/PanedW.h>
59 #include <Xm/PushB.h>
60 #include <Xm/PushBG.h>
61 #include <Xm/RowColumn.h>
62 #include <Xm/SashP.h>
63 #include <Xm/Scale.h>
64 #include <Xm/ScrollBar.h>
65 #include <Xm/ScrolledW.h>
66 #include <Xm/SelectioB.h>
67 #include <Xm/Separator.h>
68 #include <Xm/SeparatoG.h>
69 #include <Xm/SSpinB.h>
70 #include <Xm/TearOffBP.h>
71 #include <Xm/Text.h>
72 #include <Xm/TextF.h>
73 #include <Xm/ToggleB.h>
74 #include <Xm/ToggleBG.h>
75
76 #include <Dt/HelpDialog.h>
77 #include <Dt/HelpQuickD.h>
78 #include <Dt/Print.h>
79
80 #define NO_AST
81 #include "dtksh.h"
82 #undef NO_AST
83
84 #include "xmksh.h"
85 #include "dtkcmds.h"
86 #include "widget.h"
87 #include "xmwidgets.h"
88 #include "msgs.h"
89
90
91
92
93 static discInfo * setArrowDisciplines( void ) ;
94 static discInfo * setComboDisciplines( void ) ;
95 static discInfo * setCmdDisciplines( void ) ;
96 static discInfo * setDAreaDisciplines( void ) ;
97 static discInfo * setDBtnDisciplines( void ) ;
98 static discInfo * setDtPrintSetupProcDisciplines( void ) ;
99 static discInfo * setFSelDisciplines( void ) ;
100 static discInfo * setListDisciplines( void ) ;
101 static discInfo * setPBtnDisciplines( void ) ;
102 static discInfo * setRCDisciplines( void ) ;
103 static discInfo * setScaleDisciplines( void ) ;
104 static discInfo * setSBarDisciplines( void ) ;
105 static discInfo * setSWinDisciplines( void ) ;
106 static discInfo * setSBoxDisciplines( void ) ;
107 static discInfo * setTextDisciplines( void ) ;
108 static discInfo * setTBtnDisciplines( void ) ;
109 static discInfo * setHelpDisciplines( void ) ;
110
111
112
113
114 static Namdisc_t arrowDisc={0, NULL, NULL, NULL, NULL, 
115                            (Namval_t *(*)())arrowCreateDisc, NULL, NULL};
116 static Namdisc_t comboDisc={0, NULL, NULL, NULL, NULL, 
117                            (Namval_t *(*)())comboCreateDisc, NULL, NULL};
118 static Namdisc_t cmdDisc={0, NULL, NULL, NULL, NULL, 
119                            (Namval_t *(*)())cmdCreateDisc, NULL, NULL};
120 static Namdisc_t dAreaDisc={0, NULL, NULL, NULL, NULL, 
121                            (Namval_t *(*)())dAreaCreateDisc, NULL, NULL};
122 static Namdisc_t dbtnDisc ={0, NULL, NULL, NULL, NULL, 
123                            (Namval_t *(*)())dbtnCreateDisc, NULL, NULL};
124 static Namdisc_t dtPrintDisc ={0, NULL, NULL, NULL, NULL, 
125                            (Namval_t *(*)())dtPrintSetupProcDisc, NULL, NULL};
126 static Namdisc_t fselDisc={0, NULL, NULL, NULL, NULL, 
127                            (Namval_t *(*)())fselCreateDisc, NULL, NULL};
128 static Namdisc_t listDisc={0, NULL, NULL, NULL, NULL, 
129                            (Namval_t *(*)())listCreateDisc, NULL, NULL};
130 static Namdisc_t pbtnDisc={0, NULL, NULL, NULL, NULL, 
131                            (Namval_t *(*)())pbtnCreateDisc, NULL, NULL};
132 static Namdisc_t rcDisc={0, NULL, NULL, NULL, NULL, 
133                            (Namval_t *(*)())rcCreateDisc, NULL, NULL};
134 static Namdisc_t scaleDisc={0, NULL, NULL, NULL, NULL,
135                            (Namval_t *(*)()) scaleCreateDisc, NULL, NULL};
136 static Namdisc_t sbarDisc={0, NULL, NULL, NULL, NULL, 
137                            (Namval_t *(*)())sbarCreateDisc, NULL, NULL};
138 static Namdisc_t swinDisc={0, NULL, NULL, NULL, NULL, 
139                            (Namval_t *(*)())swinCreateDisc, NULL, NULL};
140 static Namdisc_t sboxDisc={0, NULL, NULL, NULL, NULL, 
141                            (Namval_t *(*)())sboxCreateDisc, NULL, NULL};
142 static Namdisc_t textDisc={0, NULL, NULL, NULL, NULL, 
143                            (Namval_t *(*)())textCreateDisc, NULL, NULL};
144 static Namdisc_t textDisc2={0, NULL, NULL, NULL, NULL,
145                            (Namval_t *(*)())textCreateDisc2, NULL, NULL};
146 static Namdisc_t tbtnDisc={0, NULL, NULL, NULL, NULL, 
147                            (Namval_t *(*)())tbtnCreateDisc, NULL, NULL};
148 static Namdisc_t dftDisc={0, NULL, NULL, NULL, NULL, 
149                            (Namval_t *(*)())dftCreateDisc, NULL, NULL};
150 static Namdisc_t helpDisc={0, NULL, NULL, NULL, NULL, 
151                            (Namval_t *(*)())helpCreateDisc, NULL, NULL};
152
153
154 /*
155  * The main window fixups are required because of a Motif bug; the
156  * resources were typed as XmRWindows, instead of XmRWidgets.
157  */
158 resfixup_t mainwindow_fixups[] = {
159         { "menuBar", XmCMenuBar, XtRWidget, sizeof(Widget) },
160         { "commandWindow", XmCCommandWindow, XtRWidget, sizeof(Widget) },
161         { "messageWindow", XmCMessageWindow, XtRWidget, sizeof(Widget) },
162         { NULL }
163 };
164
165
166 /*
167  * The help fixups are required to overcome name overlaps between other
168  * widgets.
169  */
170 resfixup_t helpDialogs_fixups[] = {
171         { "helpType", DtCHelpType, "HelpType", sizeof(unsigned char) },
172         { "scrollBarDisplayPolicy", XmCScrollBarDisplayPolicy,
173                "HelpScrollBarDisplayPolicy", 
174                sizeof(char) },
175         { NULL }
176 };
177
178
179 /*
180  * The following fixups are required to force the resource type to be one
181  * we have defined, so that our special converter will work.  Typically,
182  * there is no default StringTable to String converter.
183  */
184 resfixup_t list_fixups[] = {
185         { "items", XmCItems, "ListItems", sizeof(XmStringTable) },
186         { "selectedItems", XmCSelectedItems, "SelectedListItems", 
187                sizeof(XmStringTable) },
188         { NULL }
189 };
190
191 resfixup_t command_fixups[] = {
192         { "historyItems", XmCItems, "SelBoxItems", sizeof(XmStringTable) },
193         { NULL }
194 };
195
196 resfixup_t selbox_fixups[] = {
197         { "listItems", XmCItems, "SelBoxItems", sizeof(XmStringTable) },
198         { NULL }
199 };
200
201 resfixup_t fileselbox_fixups[] = {
202         { "fileListItems", XmCItems, "FSFileItems", sizeof(XmStringTable) },
203         { "dirListItems", XmCItems, "FSDirItems", sizeof(XmStringTable) },
204         { NULL }
205 };
206
207
208 /*
209  * The following shell resources are 'fixed' to allow them to be refered
210  * to in a shell script by their symbolic names, as opposed to their
211  * integer values.  These also need to be force onto any subclasses.
212  */
213 resfixup_t wmshell_fixups[] = {
214         { "winGravity", XtCWinGravity, "XWinGravity", sizeof(int) },
215         { NULL }
216 };
217
218 resfixup_t vendor_fixups[] = {
219         { "winGravity", XtCWinGravity, "XWinGravity", sizeof(int) },
220         { "mwmDecorations", XmCMwmDecorations, "MWMDecoration", sizeof(long) },
221         { "mwmFunctions", XmCMwmFunctions, "MWMFunctions", sizeof(long) },
222         { "mwmInputMode", XmCMwmInputMode, "MWMInputMode", sizeof(long) },
223         { NULL }
224 };
225
226 /*
227  * The following resource needs to be 'fixed' because it not only accepts
228  * an integer value, but it also supports one specially defined value.
229  */
230 resfixup_t panedwin_con_fixups[] = {
231         {"positionIndex", XmCPositionIndex, "PanedWinPosIndex", sizeof(short)},
232         { NULL }
233 };
234
235
236
237 classtab_t C[] = {
238         /*
239          * NOTE: Keep these in alphabetical order
240          * because the initialize code below depends on
241          * the order.
242          */
243         { "XmArrowButton",        NULL, NULL, NULL, NULL, NULL, NULL},
244         { "XmArrowButtonGadget",  NULL, NULL, NULL, NULL, NULL, NULL},
245         { "XmBulletinBoard",      NULL, NULL, NULL, NULL, NULL, NULL},
246         { "XmCascadeButton",      NULL, NULL, NULL, NULL, NULL, NULL},
247         { "XmCascadeButtonGadget", NULL, NULL, NULL, NULL, NULL, NULL},
248         { "XmComboBox",           NULL, NULL, NULL, NULL, NULL, NULL},
249         { "XmCommand",            NULL, NULL, NULL, NULL, NULL, NULL},
250         { "XmDialogShell",        NULL, NULL, NULL, NULL, NULL, NULL},
251         { "XmDrawingArea",        NULL, NULL, NULL, NULL, NULL, NULL},
252         { "XmDrawnButton",        NULL, NULL, NULL, NULL, NULL, NULL},
253         { "XmFileSelectionBox",   NULL, NULL, NULL, NULL, NULL, NULL},
254         { "XmForm",               NULL, NULL, NULL, NULL, NULL, NULL},
255         { "XmFrame",              NULL, NULL, NULL, NULL, NULL, NULL},
256         { "XmLabel",              NULL, NULL, NULL, NULL, NULL, NULL},
257         { "XmLabelGadget",        NULL, NULL, NULL, NULL, NULL, NULL},
258         { "XmList",               NULL, NULL, NULL, NULL, NULL, NULL},
259         { "XmMainWindow",         NULL, NULL, NULL, NULL, NULL, NULL},
260         { "XmMenuShell",          NULL, NULL, NULL, NULL, NULL, NULL},
261         { "XmMessageBox",         NULL, NULL, NULL, NULL, NULL, NULL},
262         { "XmPanedWindow",        NULL, NULL, NULL, NULL, NULL, NULL},
263         { "XmPushButton",         NULL, NULL, NULL, NULL, NULL, NULL},
264         { "XmPushButtonGadget",   NULL, NULL, NULL, NULL, NULL, NULL},
265         { "XmRowColumn",          NULL, NULL, NULL, NULL, NULL, NULL},
266         { "XmScale",              NULL, NULL, NULL, NULL, NULL, NULL},
267         { "XmScrollBar",          NULL, NULL, NULL, NULL, NULL, NULL},
268         { "XmScrolledWindow",     NULL, NULL, NULL, NULL, NULL, NULL},
269         { "XmSelectionBox",       NULL, NULL, NULL, NULL, NULL, NULL},
270         { "XmSeparator",          NULL, NULL, NULL, NULL, NULL, NULL},
271         { "XmSeparatorGadget",    NULL, NULL, NULL, NULL, NULL, NULL},
272         { "XmSimpleSpinBox",      NULL, NULL, NULL, NULL, NULL, NULL},
273         { "XmTearOffButton",      NULL, NULL, NULL, NULL, NULL, NULL},
274         { "XmText",               NULL, NULL, NULL, NULL, NULL, NULL},
275         { "XmTextField",          NULL, NULL, NULL, NULL, NULL, NULL},
276         { "XmToggleButton",       NULL, NULL, NULL, NULL, NULL, NULL},
277         { "XmToggleButtonGadget", NULL, NULL, NULL, NULL, NULL, NULL},
278         { "ApplicationShell",     NULL, NULL, NULL, NULL, NULL, NULL},
279         { "OverrideShell",        NULL, NULL, NULL, NULL, NULL, NULL},
280         { "Shell",                NULL, NULL, NULL, NULL, NULL, NULL},
281         { "TopLevelShell",        NULL, NULL, NULL, NULL, NULL, NULL},
282         { "TransientShell",       NULL, NULL, NULL, NULL, NULL, NULL},
283         { "VendorShell",          NULL, NULL, NULL, NULL, NULL, NULL},
284         { "WMShell",              NULL, NULL, NULL, NULL, NULL, NULL},
285         { "DtHelpDialog",         NULL, NULL, NULL, NULL, NULL, NULL},
286         { "DtHelpQuickDialog",    NULL, NULL, NULL, NULL, NULL, NULL},
287         { "DtPrintSetupBox",      NULL, NULL, NULL, NULL, NULL, NULL},
288         { NULL }
289 };
290
291 void
292 toolkit_init_widgets( void )
293 {
294         register int i, n = 0;
295         struct namnod *nam;
296
297         if (C[0].class != NULL)
298                 return;
299         /*
300          * NOTE: keep these in alphabetical order because
301          * the widget table above is in the same order.
302          */
303         C[n].disciplines = setArrowDisciplines();
304         C[n++].class = xmArrowButtonWidgetClass;;
305         C[n].disciplines = setArrowDisciplines();
306         C[n++].class = xmArrowButtonGadgetClass;;
307         C[n++].class = xmBulletinBoardWidgetClass;
308         C[n++].class = xmCascadeButtonWidgetClass;
309         C[n++].class = xmCascadeButtonGadgetClass;
310         C[n].disciplines = setComboDisciplines();
311         C[n++].class = xmComboBoxWidgetClass;
312         C[n].disciplines = setCmdDisciplines();
313         C[n].resfix = &command_fixups[0];
314         C[n++].class = xmCommandWidgetClass;
315         C[n].resfix = &vendor_fixups[0];
316         C[n++].class = xmDialogShellWidgetClass;
317         C[n].disciplines = setDAreaDisciplines();
318         C[n++].class = xmDrawingAreaWidgetClass;
319         C[n].disciplines = setDBtnDisciplines();
320         C[n++].class = xmDrawnButtonWidgetClass;
321         C[n].resfix = &fileselbox_fixups[0];
322         C[n].disciplines = setFSelDisciplines();
323         C[n++].class = xmFileSelectionBoxWidgetClass;
324         C[n++].class = xmFormWidgetClass;
325         C[n++].class = xmFrameWidgetClass;
326         C[n++].class = xmLabelWidgetClass;
327         C[n++].class = xmLabelGadgetClass;
328         C[n].resfix = &list_fixups[0];
329         C[n].disciplines = setListDisciplines();
330         C[n++].class = xmListWidgetClass;
331         C[n].resfix = &mainwindow_fixups[0];
332         C[n++].class = xmMainWindowWidgetClass;
333         C[n++].class = xmMenuShellWidgetClass;
334         C[n++].class = xmMessageBoxWidgetClass;
335         C[n].confix = &panedwin_con_fixups[0];
336         C[n++].class = xmPanedWindowWidgetClass;
337         C[n].disciplines = setPBtnDisciplines();
338         C[n++].class = xmPushButtonWidgetClass;
339         C[n].disciplines = setPBtnDisciplines();
340         C[n++].class = xmPushButtonGadgetClass;
341         C[n].disciplines = setRCDisciplines();
342         C[n++].class = xmRowColumnWidgetClass;
343         C[n].disciplines = setScaleDisciplines();
344         C[n++].class = xmScaleWidgetClass;
345         C[n].disciplines = setSBarDisciplines();
346         C[n++].class = xmScrollBarWidgetClass;
347         C[n].disciplines = setSWinDisciplines();
348         C[n++].class = xmScrolledWindowWidgetClass;
349         C[n].disciplines = setSBoxDisciplines();
350         C[n].resfix = &selbox_fixups[0];
351         C[n++].class = xmSelectionBoxWidgetClass;
352         C[n++].class = xmSeparatorWidgetClass;
353         C[n++].class = xmSeparatorGadgetClass;
354         C[n++].class = xmSimpleSpinBoxWidgetClass;
355         C[n++].class = xmTearOffButtonWidgetClass;
356         C[n].disciplines = setTextDisciplines();
357         C[n++].class = xmTextWidgetClass;
358         C[n].disciplines = setTextDisciplines();
359         C[n++].class = xmTextFieldWidgetClass;
360         C[n].disciplines = setTBtnDisciplines();
361         C[n++].class = xmToggleButtonWidgetClass;
362         C[n].disciplines = setTBtnDisciplines();
363         C[n++].class = xmToggleButtonGadgetClass;
364
365         C[n].resfix = &vendor_fixups[0];
366         C[n++].class = applicationShellWidgetClass;
367         C[n++].class = overrideShellWidgetClass;
368         C[n++].class = shellWidgetClass;
369         C[n].resfix = &vendor_fixups[0];
370         C[n++].class = topLevelShellWidgetClass;
371         C[n].resfix = &vendor_fixups[0];
372         C[n++].class = transientShellWidgetClass;
373         C[n].resfix = &vendor_fixups[0];
374         C[n++].class = vendorShellWidgetClass;
375         C[n].resfix = &wmshell_fixups[0];
376         C[n++].class = wmShellWidgetClass;
377
378         C[n].resfix = &helpDialogs_fixups[0];
379         C[n].disciplines = setHelpDisciplines();
380         C[n++].class = dtHelpDialogWidgetClass;
381         C[n].resfix = &helpDialogs_fixups[0];
382         C[n].disciplines = setHelpDisciplines();
383         C[n++].class = dtHelpQuickDialogWidgetClass;
384         C[n].disciplines = setDtPrintSetupProcDisciplines();
385         C[n++].class = dtPrintSetupBoxWidgetClass;
386 }
387
388
389 /*****************************************************************************
390  *****************************************************************************
391  *
392  * At initialization time, these functions create the structures which
393  * map a callback name to its associated discipline table.
394  *
395  *****************************************************************************
396  *****************************************************************************/
397
398 static discInfo *
399 setArrowDisciplines( void )
400 {
401    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
402
403    info[0].callbackName = strdup(XmNactivateCallback);
404    info[0].discipline = (void *)&arrowDisc;
405    info[1].callbackName = strdup(XmNarmCallback);
406    info[1].discipline = (void *)&arrowDisc;
407    info[2].callbackName = strdup(XmNdisarmCallback);
408    info[2].discipline = (void *)&arrowDisc;
409    info[3].callbackName = NULL;
410    info[3].discipline = NULL;
411    return(info);
412 }
413
414 static discInfo *
415 setComboDisciplines( void )
416 {
417    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 2);
418
419    info[0].callbackName = strdup(XmNselectionCallback);
420    info[0].discipline = (void *)&comboDisc;
421    info[1].callbackName = NULL;
422    info[1].discipline = NULL;
423    return(info);
424 }
425
426 static discInfo *
427 setCmdDisciplines( void )
428 {
429    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 3);
430
431    info[0].callbackName = strdup(XmNcommandChangedCallback);
432    info[0].discipline = (void *)&cmdDisc;
433    info[1].callbackName = strdup(XmNcommandEnteredCallback);
434    info[1].discipline = (void *)&cmdDisc;
435    info[2].callbackName = NULL;
436    info[2].discipline = NULL;
437    return(info);
438 }
439
440 static discInfo *
441 setDAreaDisciplines( void )
442
443 {
444    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
445
446    info[0].callbackName = strdup(XmNexposeCallback);
447    info[0].discipline = (void *)&dAreaDisc;
448    info[1].callbackName = strdup(XmNinputCallback);
449    info[1].discipline = (void *)&dAreaDisc;
450    info[2].callbackName = strdup(XmNresizeCallback);
451    info[2].discipline = (void *)&dAreaDisc;
452    info[3].callbackName = NULL;
453    info[3].discipline = NULL;
454    return(info);
455 }
456
457 static discInfo *
458 setDBtnDisciplines( void )
459 {
460    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 6);
461
462    info[0].callbackName = strdup(XmNactivateCallback);
463    info[0].discipline = (void *)&dbtnDisc;
464    info[1].callbackName = strdup(XmNarmCallback);
465    info[1].discipline = (void *)&dbtnDisc;
466    info[2].callbackName = strdup(XmNdisarmCallback);
467    info[2].discipline = (void *)&dbtnDisc;
468    info[3].callbackName = strdup(XmNexposeCallback);
469    info[3].discipline = (void *)&dbtnDisc;
470    info[4].callbackName = strdup(XmNresizeCallback);
471    info[4].discipline = (void *)&dbtnDisc;
472    info[5].callbackName = NULL;
473    info[5].discipline = NULL;
474    return(info);
475 }
476
477 static discInfo *
478 setDtPrintSetupProcDisciplines( void )
479 {
480    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 2);
481
482         /* Since the same discipline is used for all of DtPrintSetupBox's 
483          * DtPrintSetupProcs, we can use DtRPrintSetupProc for all of them
484          * to avoid defining unnecessary info entries.
485          */
486    info[0].callbackName = strdup(DtRPrintSetupProc);
487    info[0].discipline = (void *)&dtPrintDisc;
488    info[1].callbackName = NULL;
489    info[1].discipline = NULL;
490    return(info);
491 }
492
493 static discInfo *
494 setFSelDisciplines( void )
495 {
496    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 5);
497
498    info[0].callbackName = strdup(XmNapplyCallback);
499    info[0].discipline = (void *)&fselDisc;
500    info[1].callbackName = strdup(XmNcancelCallback);
501    info[1].discipline = (void *)&fselDisc;
502    info[2].callbackName = strdup(XmNnoMatchCallback);
503    info[2].discipline = (void *)&fselDisc;
504    info[3].callbackName = strdup(XmNokCallback);
505    info[3].discipline = (void *)&fselDisc;
506    info[4].callbackName = NULL;
507    info[4].discipline = NULL;
508    return(info);
509 }
510
511 static discInfo *
512 setListDisciplines( void )
513 {
514    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 6);
515
516    info[0].callbackName = strdup(XmNbrowseSelectionCallback);
517    info[0].discipline = (void *)&listDisc;
518    info[1].callbackName = strdup(XmNdefaultActionCallback);
519    info[1].discipline = (void *)&listDisc;
520    info[2].callbackName = strdup(XmNextendedSelectionCallback);
521    info[2].discipline = (void *)&listDisc;
522    info[3].callbackName = strdup(XmNmultipleSelectionCallback);
523    info[3].discipline = (void *)&listDisc;
524    info[4].callbackName = strdup(XmNsingleSelectionCallback);
525    info[4].discipline = (void *)&listDisc;
526    info[5].callbackName = NULL;
527    info[5].discipline = NULL;
528    return(info);
529 }
530
531 static discInfo *
532 setPBtnDisciplines( void )
533 {
534    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
535
536    info[0].callbackName = strdup(XmNactivateCallback);
537    info[0].discipline = (void *)&pbtnDisc;
538    info[1].callbackName = strdup(XmNarmCallback);
539    info[1].discipline = (void *)&pbtnDisc;
540    info[2].callbackName = strdup(XmNdisarmCallback);
541    info[2].discipline = (void *)&pbtnDisc;
542    info[3].callbackName = NULL;
543    info[3].discipline = NULL;
544    return(info);
545 }
546
547 static discInfo *
548 setRCDisciplines( void )
549 {
550    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 6);
551
552    info[0].callbackName = strdup(XmNentryCallback);
553    info[0].discipline = (void *)&rcDisc;
554    info[1].callbackName = strdup(XmNmapCallback);
555    info[1].discipline = (void *)&rcDisc;
556    info[2].callbackName = strdup(XmNtearOffMenuActivateCallback);
557    info[2].discipline = (void *)&rcDisc;
558    info[3].callbackName = strdup(XmNtearOffMenuDeactivateCallback);
559    info[3].discipline = (void *)&rcDisc;
560    info[4].callbackName = strdup(XmNunmapCallback);
561    info[4].discipline = (void *)&rcDisc;
562    info[5].callbackName = NULL;
563    info[5].discipline = NULL;
564    return(info);
565 }
566
567 static discInfo *
568 setScaleDisciplines( void )
569 {
570    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 3);
571
572    info[0].callbackName = strdup(XmNdragCallback);
573    info[0].discipline = (void *)&scaleDisc;
574    info[1].callbackName = strdup(XmNvalueChangedCallback);
575    info[1].discipline = (void *)&scaleDisc;
576    info[2].callbackName = NULL;
577    info[2].discipline = NULL;
578    return(info);
579 }
580
581 static discInfo *
582 setSBarDisciplines( void )
583 {
584    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 9);
585
586    info[0].callbackName = strdup(XmNdecrementCallback);
587    info[0].discipline = (void *)&sbarDisc;
588    info[1].callbackName = strdup(XmNdragCallback);
589    info[1].discipline = (void *)&sbarDisc;
590    info[2].callbackName = strdup(XmNincrementCallback);
591    info[2].discipline = (void *)&sbarDisc;
592    info[3].callbackName = strdup(XmNpageDecrementCallback);
593    info[3].discipline = (void *)&sbarDisc;
594    info[4].callbackName = strdup(XmNpageIncrementCallback);
595    info[4].discipline = (void *)&sbarDisc;
596    info[5].callbackName = strdup(XmNtoBottomCallback);
597    info[5].discipline = (void *)&sbarDisc;
598    info[6].callbackName = strdup(XmNtoTopCallback);
599    info[6].discipline = (void *)&sbarDisc;
600    info[7].callbackName = strdup(XmNvalueChangedCallback);
601    info[7].discipline = (void *)&sbarDisc;
602    info[8].callbackName = NULL;
603    info[8].discipline = NULL;
604    return(info);
605 }
606
607 static discInfo *
608 setSWinDisciplines( void )
609 {
610    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 2);
611
612    info[0].callbackName = strdup(XmNtraverseObscuredCallback);
613    info[0].discipline = (void *)&swinDisc;
614    info[1].callbackName = NULL;
615    info[1].discipline = NULL;
616    return(info);
617 }
618
619 static discInfo *
620 setSBoxDisciplines( void )
621 {
622    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 5);
623
624    info[0].callbackName = strdup(XmNapplyCallback);
625    info[0].discipline = (void *)&sboxDisc;
626    info[1].callbackName = strdup(XmNcancelCallback);
627    info[1].discipline = (void *)&sboxDisc;
628    info[2].callbackName = strdup(XmNnoMatchCallback);
629    info[2].discipline = (void *)&sboxDisc;
630    info[3].callbackName = strdup(XmNokCallback);
631    info[3].discipline = (void *)&sboxDisc;
632    info[4].callbackName = NULL;
633    info[4].discipline = NULL;
634    return(info);
635 }
636
637 static discInfo *
638 setTextDisciplines( void )
639 {
640    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 10);
641
642    info[0].callbackName = strdup(XmNactivateCallback);
643    info[0].discipline = (void *)&dftDisc;
644    info[1].callbackName = strdup(XmNfocusCallback);
645    info[1].discipline = (void *)&dftDisc;
646    info[2].callbackName = strdup(XmNgainPrimaryCallback);
647    info[2].discipline = (void *)&dftDisc;
648    info[3].callbackName = strdup(XmNlosePrimaryCallback);
649    info[3].discipline = (void *)&dftDisc;
650    info[4].callbackName = strdup(XmNlosingFocusCallback);
651    info[4].discipline = (void *)&textDisc;
652    info[5].callbackName = strdup(XmNmodifyVerifyCallback);
653    info[5].discipline = (void *)&textDisc;
654    info[6].callbackName = strdup(XmNmodifyVerifyCallbackWcs);
655    info[6].discipline = (void *)&textDisc2;
656    info[7].callbackName = strdup(XmNmotionVerifyCallback);
657    info[7].discipline = (void *)&textDisc;
658    info[8].callbackName = strdup(XmNvalueChangedCallback);
659    info[8].discipline = (void *)&dftDisc;
660    info[9].callbackName = NULL;
661    info[9].discipline = NULL;
662    return(info);
663 }
664
665 static discInfo *
666 setTBtnDisciplines( void )
667 {
668    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 4);
669
670    info[0].callbackName = strdup(XmNarmCallback);
671    info[0].discipline = (void *)&tbtnDisc;
672    info[1].callbackName = strdup(XmNdisarmCallback);
673    info[1].discipline = (void *)&tbtnDisc;
674    info[2].callbackName = strdup(XmNvalueChangedCallback);
675    info[2].discipline = (void *)&tbtnDisc;
676    info[3].callbackName = NULL;
677    info[3].discipline = NULL;
678    return(info);
679 }
680
681 static discInfo *
682 setHelpDisciplines( void )
683 {
684    discInfo * info = (discInfo *)XtMalloc(sizeof(discInfo) * 3);
685
686    info[0].callbackName = strdup(DtNhyperLinkCallback);
687    info[0].discipline = (void *)&helpDisc;
688    info[1].callbackName = strdup(DtNcloseCallback);
689    info[1].discipline = (void *)&helpDisc;
690    info[2].callbackName = NULL;
691    info[2].discipline = NULL;
692    return(info);
693 }