Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtksh / xmcvt.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 /* $TOG: xmcvt.c /main/8 1999/09/16 13:42:47 mgreess $ */
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
34 #include        "shell.h" 
35 #include <signal.h>
36 #include <fcntl.h>
37 #include <X11/X.h>
38 #include <X11/Intrinsic.h>
39 #include <X11/IntrinsicP.h>
40 #include <X11/CoreP.h>
41 #include <X11/StringDefs.h>
42 #include <Xm/XmStrDefs.h>
43 #include <Xm/List.h>
44 #include <Xm/MwmUtil.h>
45 #include <setjmp.h>
46 #include <string.h>
47 #include <ctype.h>
48 #include <Xm/Xm.h>
49 #include <Xm/Protocols.h>
50 #include <Dt/Service.h>
51 #include <Dt/Wsm.h>
52 #include <Dt/HourGlass.h>
53 #include <Dt/Help.h>
54 #include <Dt/EnvControlP.h>
55 #include <Tt/tttk.h>
56 #include "hash.h"
57 #include "stdio.h"
58 #define NO_AST
59 #include "dtksh.h"
60 #undef NO_AST
61 #include "xmksh.h"
62 #include "XtCvtrs.h"
63 #include "dtkcmds.h"
64 #include "xmcvt.h"
65 #include "widget.h"
66 #include "extra.h"
67 #include "xmwidgets.h"
68 #include "msgs.h"
69 #include <Dt/Help.h>
70
71
72 typedef struct {
73    char * modifierName;
74    unsigned int modifier;
75 } ModifierState;
76
77
78 /*
79  * Converters for DTKSH
80  */
81
82 char *
83 XmStringToString(
84         XmString string )
85 {
86         static char *buf = NULL;
87         XmStringContext context;
88         XmStringCharSet charset;
89         XmStringDirection dir;
90         char *text;
91         Boolean separator = FALSE;
92
93         if (string == NULL)
94            return(NULL);
95
96         XmStringInitContext(&context, string);
97         XtFree(buf);
98         buf = NULL;
99         while (!separator) {
100                 if (XmStringGetNextSegment(context, &text, &charset, &dir,
101                         &separator)) {
102                         if (buf) {
103                                 buf = XtRealloc(buf, strlen(buf) + strlen(text) + 2);
104                                 strcat(buf, text);
105                         } else
106                                 buf = strdup(text);
107                         XtFree(text);
108                 } else
109                         break;
110         }
111         XmStringFreeContext(context);
112         return(buf);
113 }
114
115 void
116 DtkshCvtXmStringToString(
117         Display *dpy,
118         XrmValuePtr args,
119         Cardinal *nargs,
120         XrmValuePtr fval,
121         XrmValuePtr toval,
122         XtPointer data )
123 {
124         XmString string = ((XmString *)fval->addr)[0];
125         char *buf;
126
127         buf = XmStringToString(string);
128         toval->addr = (caddr_t)buf;
129         toval->size = buf ? strlen(buf) + 1 : 0;
130 }
131
132 void
133 DtkshCvtKeySymToString(
134         XrmValuePtr args,
135         Cardinal *nargs,
136         XrmValuePtr fval,
137         XrmValuePtr toval )
138 {
139         static char buf[2];
140
141         buf[0] = (char) (((KeySym *)(fval->addr))[0]);
142         buf[1] = '\0';
143         toval->addr = (caddr_t)buf;
144         toval->size = 2;
145 }
146
147 /*
148  * Convert an XmStringTable to a String.
149  * In keeping with the standard CvtStringToStringTable function provided
150  * by Motif, we will separate each item by a comma.  This of course does not
151  * work properly if there is a comma in the data, but what can we do?
152  */
153
154 char *
155 _CvtXmStringTableToString(
156         XmStringTable stringtable,
157         int itemCount )
158 {
159    static char *buf = NULL;
160    XmStringContext context;
161    XmStringCharSet charset;
162    XmStringDirection dir;
163    char *text;
164    Boolean separator = FALSE;
165    XmString string;
166    int i;
167    char * ptr;
168    char * nextComma;
169
170    XtFree(buf);
171    buf = XtMalloc(3);
172    buf[0] = '\0';
173
174    for (i = 0; i < itemCount; i++)
175    {
176       if (i > 0)
177          strcat(buf, ",");
178
179       XmStringInitContext(&context, stringtable[i]);
180       while (!separator) 
181       {
182          if (XmStringGetNextSegment(context, &text, &charset, &dir, &separator))
183          {
184             /*
185              * To be consistent with the Motif converter, which will take
186              * a comma-separated string, and convert it to an XmStringTable,
187              * we need to escape any ',' characters contained within a list
188              * item.
189              */
190  
191             ptr = text;
192             while (nextComma = strchr(ptr, ','))
193             {
194                *nextComma = '\0';
195                buf = XtRealloc(buf, strlen(buf) + strlen(ptr) + 5);
196                strcat(buf, ptr);
197                strcat(buf, "\\,");
198                *nextComma = ',';
199                ptr = nextComma + 1;
200             }
201             buf = XtRealloc(buf, strlen(buf) + strlen(ptr) + 3);
202             strcat(buf, ptr);
203
204             XtFree(text);
205          } 
206          else
207             break;
208       }
209       XmStringFreeContext(context);
210    }
211
212    return(buf);
213 }
214
215 void
216 DtkshCvtListItemsToString(
217         Display *dpy,
218         XrmValuePtr args,
219         Cardinal *nargs,
220         XrmValuePtr fval,
221         XrmValuePtr toval,
222         XtPointer data )
223 {
224    char *buf;
225    XmStringTable stringtable = *((XmStringTable *)fval->addr);
226    int itemCount = *((int *) args[0].addr);
227
228    buf = _CvtXmStringTableToString(stringtable, itemCount);
229
230    toval->addr = (caddr_t)buf;
231    toval->size = buf ? strlen(buf) + 1 : 0;
232 }
233
234
235 /*
236  * There are a number of resources in motif that consist of a few
237  * named integer values.  Most such resources only have 2 to 4 values,
238  * none have more than 7.  Because there are so few values, it's not
239  * really worth the memory overhead to hash them.  Also, these kinds
240  * of resources are rarely read by programmers (most are written but
241  * not read).  So, we decided to go with a simple linear search converter
242  * that takes as its first argument a table of the values allowed, and
243  * as its second argument the number of items in the table.
244  *
245  * Note that we could not go with a simple indexing scheme because:
246  * (1) the values are not guaranteed to be contiguous and (2) some
247  * of the tables start with -1 instead of 0.
248  *
249  * If there are in the future many more items added to these lists, we
250  * might want to convert to a hashing scheme or a binary search.
251  */
252
253 void
254 DtkshCvtNamedValueToString(
255         XrmValue *args,
256         Cardinal *nargs,
257         XrmValuePtr fval,
258         XrmValuePtr toval )
259 {
260         /*
261          * same buffer will get used each time
262          */
263         static char *ret = NULL;
264         struct named_integer *table;
265         int numtable;
266         long value;
267         register int i;
268         char * errmsg;
269
270         switch(fval->size)
271         {
272            case sizeof(char):
273            {
274               value = (long)*((char *)fval->addr);
275               break;
276            }
277
278            case sizeof(short):
279            {
280               value = (long)*((short *)fval->addr);
281               break;
282            }
283
284            case sizeof(long):
285            {
286               value = (long)*((long *)fval->addr);
287               break;
288            }
289
290            default:
291               if (fval->size == sizeof(int))
292               {
293                  value = (long)*((int *)fval->addr);
294                  break;
295               }
296               toval->addr = NULL;
297               toval->size = 0;
298               return;
299         }
300
301         if (*nargs != 1) 
302         {
303            toval->addr = NULL;
304            toval->size = 0;
305            return;
306         }
307         table = (struct named_integer *)args[0].addr;
308         numtable = args[0].size/sizeof(struct named_integer);
309
310         for (i = 0; i < numtable; i++) {
311                 if (value == table[i].value) {
312                         toval->addr = (caddr_t)table[i].name;
313                         toval->size = strlen(table[i].name) + 1;
314                         return;
315                 }
316         }
317         toval->addr = NULL;
318         toval->size = 0;
319         return;
320 }
321
322 /*************************************************************************/
323
324 void
325 DtkshCvtStringToNamedValue(
326         XrmValue *args,
327         Cardinal *nargs,
328         XrmValuePtr fval,
329         XrmValuePtr toval )
330 {
331         /*
332          * same buffer will get used each time
333          */
334         static int ret;
335         struct named_integer *table;
336         int numtable;
337         char *value;
338         register int i;
339         char * errbuf;
340         char * errmsg;
341
342         value = (String)fval->addr;
343
344         if (*nargs != 1) {
345                 toval->addr = NULL;
346                 toval->size = 0;
347                 return;
348         }
349         table = (struct named_integer *)args[0].addr;
350         numtable = args[0].size/sizeof(struct named_integer);
351
352         for (i = 0; i < numtable; i++) {
353                 if (DtCompareISOLatin1(value, (char *)(table[i].name))) {
354                         toval->addr = (caddr_t)&table[i].value;
355                         toval->size = sizeof(table[i].value);
356                         return;
357                 }
358         }
359         errmsg =strdup(GETMESSAGE(16,2, 
360              "DtkshCvtStringToNamedValue: Unable to convert the string '%s'"));
361         errbuf = XtMalloc(strlen(errmsg) + strlen(value) + 10);
362         sprintf(errbuf, errmsg, value);
363         XtWarning(errbuf);
364         free(errmsg);
365         XtFree(errbuf);
366         toval->addr = NULL;
367         toval->size = 0;
368         return;
369 }
370
371 struct named_integer NI_TraversalDirection[] = {
372         { "TRAVERSE_CURRENT",   XmTRAVERSE_CURRENT },
373         { "TRAVERSE_DOWN",      XmTRAVERSE_DOWN },
374         { "TRAVERSE_HOME",      XmTRAVERSE_HOME },
375         { "TRAVERSE_LEFT",      XmTRAVERSE_LEFT },
376         { "TRAVERSE_NEXT",      XmTRAVERSE_NEXT },
377         { "TRAVERSE_NEXT_TAB_GROUP",    XmTRAVERSE_NEXT_TAB_GROUP },
378         { "TRAVERSE_PREV",      XmTRAVERSE_PREV },
379         { "TRAVERSE_PREV_TAB_GROUP",    XmTRAVERSE_PREV_TAB_GROUP },
380         { "TRAVERSE_PREV_TAB_GROUP",    XmTRAVERSE_PREV_TAB_GROUP },
381         { "TRAVERSE_RIGHT",     XmTRAVERSE_RIGHT },
382         { "TRAVERSE_UP",        XmTRAVERSE_UP },
383 };
384
385 struct named_integer NI_VisibilityType[] = {
386         { "VISIBILITY_UNOBSCURED",      XmVISIBILITY_UNOBSCURED },
387         { "VISIBILITY_PARTIALLY_OBSCURED",XmVISIBILITY_PARTIALLY_OBSCURED },
388         { "VISIBILITY_FULLY_OBSCURED",  XmVISIBILITY_FULLY_OBSCURED },
389 };
390
391 struct named_integer NI_CommandChild[] = {
392         { "DIALOG_COMMAND_TEXT",        XmDIALOG_COMMAND_TEXT },
393         { "DIALOG_PROMPT_LABEL",        XmDIALOG_PROMPT_LABEL },
394         { "DIALOG_HISTORY_LIST",        XmDIALOG_HISTORY_LIST },
395         { "DIALOG_WORK_AREA",           XmDIALOG_WORK_AREA },
396 };
397
398 struct named_integer NI_MessageBoxChild[] = {
399         { "DIALOG_CANCEL_BUTTON",       XmDIALOG_CANCEL_BUTTON },
400         { "DIALOG_DEFAULT_BUTTON",      XmDIALOG_DEFAULT_BUTTON },
401         { "DIALOG_HELP_BUTTON",         XmDIALOG_HELP_BUTTON },
402         { "DIALOG_MESSAGE_LABEL",       XmDIALOG_MESSAGE_LABEL },
403         { "DIALOG_OK_BUTTON",           XmDIALOG_OK_BUTTON },
404         { "DIALOG_SEPARATOR",           XmDIALOG_SEPARATOR },
405         { "DIALOG_SYMBOL_LABEL",        XmDIALOG_SYMBOL_LABEL },
406 };
407
408 struct named_integer NI_FileSelChild[] = {
409         { "DIALOG_APPLY_BUTTON",        XmDIALOG_APPLY_BUTTON },
410         { "DIALOG_CANCEL_BUTTON",       XmDIALOG_CANCEL_BUTTON },
411         { "DIALOG_DEFAULT_BUTTON",      XmDIALOG_DEFAULT_BUTTON },
412         { "DIALOG_DIR_LIST",            XmDIALOG_DIR_LIST },
413         { "DIALOG_DIR_LIST_LABEL",      XmDIALOG_DIR_LIST_LABEL },
414         { "DIALOG_FILTER_LABEL",        XmDIALOG_FILTER_LABEL },
415         { "DIALOG_FILTER_TEXT",         XmDIALOG_FILTER_TEXT },
416         { "DIALOG_HELP_BUTTON",         XmDIALOG_HELP_BUTTON },
417         { "DIALOG_LIST",                XmDIALOG_LIST },
418         { "DIALOG_LIST_LABEL",          XmDIALOG_LIST_LABEL },
419         { "DIALOG_OK_BUTTON",           XmDIALOG_OK_BUTTON },
420         { "DIALOG_SELECTION_LABEL",     XmDIALOG_SELECTION_LABEL },
421         { "DIALOG_SEPARATOR",           XmDIALOG_SEPARATOR },
422         { "DIALOG_TEXT",                XmDIALOG_TEXT },
423         { "DIALOG_WORK_AREA",           XmDIALOG_WORK_AREA },
424 };
425
426 struct named_integer NI_SelBoxChild[] = {
427         { "DIALOG_APPLY_BUTTON",        XmDIALOG_APPLY_BUTTON },
428         { "DIALOG_CANCEL_BUTTON",       XmDIALOG_CANCEL_BUTTON },
429         { "DIALOG_DEFAULT_BUTTON",      XmDIALOG_DEFAULT_BUTTON },
430         { "DIALOG_HELP_BUTTON",         XmDIALOG_HELP_BUTTON },
431         { "DIALOG_LIST",                XmDIALOG_LIST },
432         { "DIALOG_LIST_LABEL",          XmDIALOG_LIST_LABEL },
433         { "DIALOG_OK_BUTTON",           XmDIALOG_OK_BUTTON },
434         { "DIALOG_SELECTION_LABEL",     XmDIALOG_SELECTION_LABEL },
435         { "DIALOG_SEPARATOR",           XmDIALOG_SEPARATOR },
436         { "DIALOG_TEXT",                XmDIALOG_TEXT },
437         { "DIALOG_WORK_AREA",           XmDIALOG_WORK_AREA },
438 };
439
440 /************************************************************************/
441
442 struct named_integer NI_ArrowDirection[] = {
443         { "ARROW_UP",   XmARROW_UP },
444         { "ARROW_DOWN", XmARROW_DOWN },
445         { "ARROW_LEFT", XmARROW_LEFT },
446         { "ARROW_RIGHT",XmARROW_RIGHT },
447 };
448
449 struct named_integer NI_MultiClick[] = {
450         { "MULTICLICK_DISCARD", XmMULTICLICK_DISCARD },
451         { "MULTICLICK_KEEP",    XmMULTICLICK_KEEP },
452 };
453
454 struct named_integer NI_DialogStyle[] = {
455         { "DIALOG_SYSTEM_MODAL",        XmDIALOG_SYSTEM_MODAL },
456         {"DIALOG_PRIMARY_APPLICATION_MODAL",XmDIALOG_PRIMARY_APPLICATION_MODAL},
457         { "DIALOG_APPLICATION_MODAL",   XmDIALOG_APPLICATION_MODAL },
458         { "DIALOG_FULL_APPLICATION_MODAL", XmDIALOG_FULL_APPLICATION_MODAL },
459         { "DIALOG_MODELESS",            XmDIALOG_MODELESS },
460         { "DIALOG_WORK_AREA",           XmDIALOG_WORK_AREA },
461 };
462
463 struct named_integer NI_MWMInputMode[] = {
464         { "-1", -1 },
465         { "MWM_INPUT_MODELESS", MWM_INPUT_MODELESS},
466         { "MWM_INPUT_PRIMARY_APPLICATION_MODAL", 
467                MWM_INPUT_PRIMARY_APPLICATION_MODAL },
468         { "MWM_INPUT_SYSTEM_MODAL", MWM_INPUT_SYSTEM_MODAL },
469         { "MWM_INPUT_FULL_APPLICATION_MODAL",
470                MWM_INPUT_FULL_APPLICATION_MODAL },
471 };
472
473 struct named_integer NI_ResizePolicy[] = {
474         { "RESIZE_NONE",        XmRESIZE_NONE },
475         { "RESIZE_ANY",         XmRESIZE_ANY },
476         { "RESIZE_GROW",        XmRESIZE_GROW },
477 };
478
479 struct named_integer NI_FileTypeMask[] = {
480         { "FILE_REGULAR",       XmFILE_REGULAR },
481         { "FILE_DIRECTORY",     XmFILE_DIRECTORY },
482         { "FILE_ANY_TYPE",      XmFILE_ANY_TYPE },
483 };
484
485 struct named_integer NI_ShadowType[] = {
486         { "SHADOW_IN",          XmSHADOW_IN },
487         { "SHADOW_OUT",         XmSHADOW_OUT },
488         { "SHADOW_ETCHED_IN",   XmSHADOW_ETCHED_IN },
489         { "SHADOW_ETCHED_OUT",  XmSHADOW_ETCHED_OUT },
490 };
491
492 struct named_integer NI_Attachment[] = {
493         { "ATTACH_NONE",        XmATTACH_NONE },
494         { "ATTACH_FORM",        XmATTACH_FORM },
495         { "ATTACH_OPPOSITE_FORM",       XmATTACH_OPPOSITE_FORM },
496         { "ATTACH_WIDGET",      XmATTACH_WIDGET },
497         { "ATTACH_OPPOSITE_WIDGET",     XmATTACH_OPPOSITE_WIDGET },
498         { "ATTACH_POSITION",    XmATTACH_POSITION },
499         { "ATTACH_SELF",        XmATTACH_SELF },
500 };
501
502 struct named_integer NI_ChildType[] = {
503         { "FRAME_TITLE_CHILD",  XmFRAME_TITLE_CHILD },
504         { "FRAME_WORKAREA_CHILD",XmFRAME_WORKAREA_CHILD },
505         { "FRAME_GENERIC_CHILD",XmFRAME_GENERIC_CHILD },
506 };
507
508 struct named_integer NI_ChildVerticalAlignment[] = {
509         { "ALIGNMENT_BASELINE_BOTTOM",  XmALIGNMENT_BASELINE_BOTTOM },
510         { "ALIGNMENT_BASELINE_TOP",XmALIGNMENT_BASELINE_TOP },
511         { "ALIGNMENT_WIDGET_TOP",XmALIGNMENT_WIDGET_TOP },
512         { "ALIGNMENT_CENTER",XmALIGNMENT_CENTER },
513         { "ALIGNMENT_WIDGET_BOTTOM",XmALIGNMENT_WIDGET_BOTTOM },
514 };
515
516 struct named_integer NI_UnitType[] = {
517         { "PIXELS",     XmPIXELS },
518         { "100TH_MILLIMETERS",  Xm100TH_MILLIMETERS },
519         { "1000TH_INCHES",      Xm1000TH_INCHES },
520         { "100TH_POINTS",       Xm100TH_POINTS },
521         { "100TH_FONT_UNITS",   Xm100TH_FONT_UNITS },
522 };
523
524 struct named_integer NI_NavigationType[] = {
525         { "NONE",       XmNONE },
526         { "TAB_GROUP",  XmTAB_GROUP },
527         { "STICKY_TAB_GROUP",   XmSTICKY_TAB_GROUP },
528         { "EXCLUSIVE_TAB_GROUP",        XmEXCLUSIVE_TAB_GROUP },
529 };
530
531 struct named_integer NI_Alignment[] = {
532         { "ALIGNMENT_CENTER",   XmALIGNMENT_CENTER },
533         { "ALIGNMENT_END",      XmALIGNMENT_END },
534         { "ALIGNMENT_BEGINNING",        XmALIGNMENT_BEGINNING },
535 };
536
537 struct named_integer NI_LabelType[] = {
538         { "STRING",     XmSTRING },
539         { "PIXMAP",     XmPIXMAP }
540 };
541
542 struct named_integer NI_StringDirection[] = {
543         { "STRING_DIRECTION_L_TO_R",    XmSTRING_DIRECTION_L_TO_R },
544         { "STRING_DIRECTION_R_TO_L",    XmSTRING_DIRECTION_R_TO_L },
545 };
546
547 struct named_integer NI_SelectionPolicy[] = {
548         { "SINGLE_SELECT",      XmSINGLE_SELECT },
549         { "MULTIPLE_SELECT",    XmMULTIPLE_SELECT },
550         { "EXTENDED_SELECT",    XmEXTENDED_SELECT },
551         { "BROWSE_SELECT",      XmBROWSE_SELECT },
552 };
553
554 struct named_integer NI_ScrollBarPlacement[] = {
555         { "TOP_LEFT",   XmTOP_LEFT },
556         { "BOTTOM_LEFT",        XmBOTTOM_LEFT },
557         { "TOP_RIGHT",  XmTOP_RIGHT },
558         { "BOTTOM_RIGHT",       XmBOTTOM_RIGHT },
559 };
560
561 struct named_integer NI_ScrollBarDisplayPolicy[] = {
562         { "AS_NEEDED",  XmAS_NEEDED },
563         { "STATIC",     XmSTATIC },
564 };
565
566 struct named_integer NI_ScrollingPolicy[] = {
567         { "AUTOMATIC",  XmAUTOMATIC },
568         { "APPLICATION_DEFINED",        XmAPPLICATION_DEFINED },
569 };
570
571 struct named_integer NI_VisualPolicy[] = {
572         { "VARIABLE",   XmVARIABLE },
573         { "CONSTANT",   XmCONSTANT },
574 };
575
576 struct named_integer NI_ListSizePolicy[] = {
577         { "CONSTANT",   XmCONSTANT },
578         { "VARIABLE",   XmVARIABLE },
579         { "RESIZE_IF_POSSIBLE", XmRESIZE_IF_POSSIBLE },
580 };
581
582 struct named_integer NI_EditMode[] = {
583         { "SINGLE_LINE_EDIT",   XmSINGLE_LINE_EDIT },
584         { "MULTI_LINE_EDIT",    XmMULTI_LINE_EDIT },
585 };
586
587 struct named_integer NI_CommandWindowLocation[] = {
588         { "COMMAND_ABOVE_WORKSPACE",    XmCOMMAND_ABOVE_WORKSPACE },
589         { "COMMAND_BELOW_WORKSPACE",    XmCOMMAND_BELOW_WORKSPACE },
590 };
591
592 struct named_integer NI_DefaultButtonType[] = {
593         { "DIALOG_CANCEL_BUTTON",       XmDIALOG_CANCEL_BUTTON },
594         { "DIALOG_OK_BUTTON",   XmDIALOG_OK_BUTTON },
595         { "DIALOG_HELP_BUTTON", XmDIALOG_HELP_BUTTON },
596         { "DIALOG_NONE",        XmDIALOG_NONE },
597 };
598
599 struct named_integer NI_DialogType[] = {
600         { "DIALOG_TEMPLATE",    XmDIALOG_TEMPLATE },
601         { "DIALOG_INFORMATION", XmDIALOG_INFORMATION },
602         { "DIALOG_QUESTION",    XmDIALOG_QUESTION },
603         { "DIALOG_WORKING",     XmDIALOG_WORKING },
604         { "DIALOG_ERROR",       XmDIALOG_ERROR },
605         { "DIALOG_MESSAGE",     XmDIALOG_MESSAGE },
606         { "DIALOG_WARNING",     XmDIALOG_WARNING },
607 };
608
609 struct named_integer NI_EntryVerticalAlignment[] = {
610         { "ALIGNMENT_BASELINE_BOTTOM",  XmALIGNMENT_BASELINE_BOTTOM },
611         { "ALIGNMENT_BASELINE_TOP",XmALIGNMENT_BASELINE_TOP },
612         { "ALIGNMENT_CONTENTS_BOTTOM",XmALIGNMENT_CONTENTS_BOTTOM },
613         { "ALIGNMENT_CENTER",XmALIGNMENT_CENTER },
614         { "ALIGNMENT_CONTENTS_TOP",XmALIGNMENT_CONTENTS_TOP },
615 };
616
617 struct named_integer NI_Orientation[] = {
618         { "HORIZONTAL", XmHORIZONTAL },
619         { "VERTICAL",   XmVERTICAL },
620 };
621
622 struct named_integer NI_Packing[] = {
623         { "PACK_TIGHT", XmPACK_TIGHT },
624         { "PACK_COLUMN",XmPACK_COLUMN },
625         { "PACK_NONE",  XmPACK_NONE },
626 };
627
628 struct named_integer NI_RowColumnType[] = {
629         { "WORK_AREA",  XmWORK_AREA },
630         { "MENU_BAR",   XmMENU_BAR },
631         { "MENU_PULLDOWN",XmMENU_PULLDOWN },
632         { "MENU_POPUP", XmMENU_POPUP },
633         { "MENU_OPTION",XmMENU_OPTION },
634 };
635
636 struct named_integer NI_ProcessingDirection[] = {
637         { "MAX_ON_TOP", XmMAX_ON_TOP },
638         { "MAX_ON_BOTTOM",XmMAX_ON_BOTTOM },
639         { "MAX_ON_LEFT",XmMAX_ON_LEFT },
640         { "MAX_ON_RIGHT",XmMAX_ON_RIGHT },
641 };
642
643 struct named_integer NI_ChildPlacement[] = {
644         { "PLACE_ABOVE_SELECTION",      XmPLACE_ABOVE_SELECTION },
645         { "PLACE_BELOW_SELECTION",      XmPLACE_BELOW_SELECTION },
646         { "PLACE_TOP",                  XmPLACE_TOP },
647 };
648
649 struct named_integer NI_SelectionDialogType[] = {
650         { "DIALOG_PROMPT",      XmDIALOG_PROMPT },
651         { "DIALOG_COMMAND",     XmDIALOG_COMMAND },
652         { "DIALOG_SELECTION",   XmDIALOG_SELECTION },
653         { "DIALOG_FILE_SELECTION",      XmDIALOG_FILE_SELECTION },
654         { "DIALOG_WORK_AREA",   XmDIALOG_WORK_AREA },
655 };
656
657 struct named_integer NI_SeparatorType[] = {
658         { "SINGLE_LINE",        XmSINGLE_LINE },
659         { "DOUBLE_LINE",        XmDOUBLE_LINE },
660         { "SINGLE_DASHED_LINE", XmSINGLE_DASHED_LINE },
661         { "DOUBLE_DASHED_LINE", XmDOUBLE_DASHED_LINE },
662         { "NO_LINE",            XmNO_LINE },
663         { "SHADOW_ETCHED_IN",   XmSHADOW_ETCHED_IN },
664         { "SHADOW_ETCHED_OUT",  XmSHADOW_ETCHED_OUT },
665         { "SHADOW_ETCHED_IN_DASH",      XmSHADOW_ETCHED_IN_DASH },
666         { "SHADOW_ETCHED_OUT_DASH",     XmSHADOW_ETCHED_OUT_DASH },
667 };
668
669 struct named_integer NI_IndicatorType[] = {
670         { "ONE_OF_MANY",        XmONE_OF_MANY },
671         { "N_OF_MANY",          XmN_OF_MANY },
672 };
673
674 struct named_integer NI_AudibleWarning[] = {
675         { "BELL",       XmBELL },
676         { "NONE",       XmNONE },
677 };
678
679 struct named_integer NI_DeleteResponse[] = {
680         { "DESTROY",    XmDESTROY },
681         { "UNMAP",      XmUNMAP },
682         { "DO_NOTHING", XmDO_NOTHING },
683 };
684
685 struct named_integer NI_KeyboardFocusPolicy[] = {
686         { "EXPLICIT",   XmEXPLICIT },
687         { "POINTER",    XmPOINTER },
688 };
689
690 struct named_integer NI_InitialState[] = {
691         { "NormalState",        NormalState },
692         { "IconicState",        IconicState },
693 };
694
695 struct named_integer NI_HelpReturnSelectedWidgetResultType[] = {
696         { "HELP_SELECT_VALID",  DtHELP_SELECT_VALID },
697         { "HELP_SELECT_INVALID",DtHELP_SELECT_INVALID },
698         { "HELP_SELECT_ABORT",  DtHELP_SELECT_ABORT },
699         { "HELP_SELECT_ERROR",  DtHELP_SELECT_ERROR },
700 };
701
702 struct named_integer NI_QuickHelpChildType[] = {
703         { "HELP_QUICK_CLOSE_BUTTON",    DtHELP_QUICK_CLOSE_BUTTON },
704         { "HELP_QUICK_PRINT_BUTTON",DtHELP_QUICK_PRINT_BUTTON },
705         { "HELP_QUICK_HELP_BUTTON",DtHELP_QUICK_HELP_BUTTON },
706         { "HELP_QUICK_SEPARATOR",       DtHELP_QUICK_SEPARATOR },
707         { "HELP_QUICK_MORE_BUTTON",DtHELP_QUICK_MORE_BUTTON },
708         { "HELP_QUICK_BACK_BUTTON",DtHELP_QUICK_BACK_BUTTON },
709 };
710
711 struct named_integer NI_HelpType[] = {
712         { "HELP_TYPE_TOPIC",    DtHELP_TYPE_TOPIC },
713         { "HELP_TYPE_STRING",DtHELP_TYPE_STRING },
714         { "HELP_TYPE_DYNAMIC_STRING",DtHELP_TYPE_DYNAMIC_STRING },
715         { "HELP_TYPE_MAN_PAGE", DtHELP_TYPE_MAN_PAGE },
716         { "HELP_TYPE_FILE",DtHELP_TYPE_FILE },
717 };
718
719 struct named_integer NI_HelpScrollBarDisplayPolicy[] = {
720         { "HELP_AS_NEEDED_SCROLLBARS",  DtHELP_AS_NEEDED_SCROLLBARS },
721         { "HELP_STATIC_SCROLLBARS",     DtHELP_STATIC_SCROLLBARS },
722         { "HELP_NO_SCROLLBARS",DtHELP_NO_SCROLLBARS },
723 };
724
725 struct named_integer NI_TextHighlightMode[] = {
726         { "HIGHLIGHT_NORMAL",   XmHIGHLIGHT_NORMAL },
727         { "HIGHLIGHT_SELECTED", XmHIGHLIGHT_SELECTED },
728         { "HIGHLIGHT_SECONDARY_SELECTED",XmHIGHLIGHT_SECONDARY_SELECTED },
729 };
730
731 struct named_integer NI_TextSearchDirection[] = {
732         { "TEXT_FORWARD",       XmTEXT_FORWARD },
733         { "TEXT_BACKWARD",      XmTEXT_BACKWARD },
734 };
735
736 struct named_integer NI_ListSelectionType[] = {
737         { "INITIAL",            XmINITIAL },
738         { "MODIFICATION",       XmMODIFICATION },
739         { "ADDITION",           XmADDITION },
740 };
741
742 struct named_integer NI_TT_STATUS[] = {
743         { "TT_OK", TT_OK } ,
744         { "TT_WRN_NOTFOUND", TT_WRN_NOTFOUND } ,
745         { "TT_WRN_STALE_OBJID", TT_WRN_STALE_OBJID } ,
746         { "TT_WRN_STOPPED", TT_WRN_STOPPED } ,
747         { "TT_WRN_SAME_OBJID", TT_WRN_SAME_OBJID } ,
748         { "TT_WRN_START_MESSAGE", TT_WRN_START_MESSAGE } ,
749         { "TT_ERR_CLASS", TT_ERR_CLASS } ,
750         { "TT_ERR_DBAVAIL", TT_ERR_DBAVAIL } ,
751         { "TT_ERR_DBEXIST", TT_ERR_DBEXIST } ,
752         { "TT_ERR_FILE", TT_ERR_FILE } ,
753         { "TT_ERR_INVALID", TT_ERR_INVALID } ,
754         { "TT_ERR_MODE", TT_ERR_MODE } ,
755         { "TT_ERR_ACCESS", TT_ERR_ACCESS } ,
756         { "TT_ERR_NOMP", TT_ERR_NOMP } ,
757         { "TT_ERR_NOTHANDLER", TT_ERR_NOTHANDLER } ,
758         { "TT_ERR_NUM", TT_ERR_NUM } ,
759         { "TT_ERR_OBJID", TT_ERR_OBJID } ,
760         { "TT_ERR_OP", TT_ERR_OP } ,
761         { "TT_ERR_OTYPE", TT_ERR_OTYPE } ,
762         { "TT_ERR_ADDRESS", TT_ERR_ADDRESS } ,
763         { "TT_ERR_PATH", TT_ERR_PATH } ,
764         { "TT_ERR_POINTER", TT_ERR_POINTER } ,
765         { "TT_ERR_PROCID", TT_ERR_PROCID } ,
766         { "TT_ERR_PROPLEN", TT_ERR_PROPLEN } ,
767         { "TT_ERR_PROPNAME", TT_ERR_PROPNAME } ,
768         { "TT_ERR_PTYPE", TT_ERR_PTYPE } ,
769         { "TT_ERR_DISPOSITION", TT_ERR_DISPOSITION } ,
770         { "TT_ERR_SCOPE", TT_ERR_SCOPE } ,
771         { "TT_ERR_SESSION", TT_ERR_SESSION } ,
772         { "TT_ERR_VTYPE", TT_ERR_VTYPE } ,
773         { "TT_ERR_NO_VALUE", TT_ERR_NO_VALUE } ,
774         { "TT_ERR_INTERNAL", TT_ERR_INTERNAL } ,
775         { "TT_ERR_READONLY", TT_ERR_READONLY } ,
776         { "TT_ERR_NO_MATCH", TT_ERR_NO_MATCH } ,
777         { "TT_ERR_UNIMP", TT_ERR_UNIMP } ,
778         { "TT_ERR_OVERFLOW", TT_ERR_OVERFLOW } ,
779         { "TT_ERR_PTYPE_START", TT_ERR_PTYPE_START } ,
780         { "TT_ERR_CATEGORY", TT_ERR_CATEGORY } ,
781         { "TT_ERR_DBUPDATE", TT_ERR_DBUPDATE } ,
782         { "TT_ERR_DBFULL", TT_ERR_DBFULL } ,
783         { "TT_ERR_DBCONSIST", TT_ERR_DBCONSIST } ,
784         { "TT_ERR_STATE", TT_ERR_STATE } ,
785         { "TT_ERR_NOMEM", TT_ERR_NOMEM } ,
786         { "TT_ERR_SLOTNAME", TT_ERR_SLOTNAME } ,
787         { "TT_ERR_XDR", TT_ERR_XDR } ,
788         { "TT_ERR_NETFILE", TT_ERR_NETFILE } ,
789         { "TT_ERR_TOOLATE", TT_ERR_TOOLATE } ,
790         { "TT_ERR_AUTHORIZATION", TT_ERR_AUTHORIZATION } ,
791         { "TT_ERR_VERSION_MISMATCH", TT_ERR_VERSION_MISMATCH } ,
792         { "TT_DESKTOP_EPERM", TT_DESKTOP_EPERM } ,
793         { "TT_DESKTOP_ENOENT", TT_DESKTOP_ENOENT } ,
794         { "TT_DESKTOP_EINTR", TT_DESKTOP_EINTR } ,
795         { "TT_DESKTOP_EIO", TT_DESKTOP_EIO } ,
796         { "TT_DESKTOP_EAGAIN", TT_DESKTOP_EAGAIN } ,
797         { "TT_DESKTOP_ENOMEM", TT_DESKTOP_ENOMEM } ,
798         { "TT_DESKTOP_EACCES", TT_DESKTOP_EACCES } ,
799         { "TT_DESKTOP_EFAULT", TT_DESKTOP_EFAULT } ,
800         { "TT_DESKTOP_EEXIST", TT_DESKTOP_EEXIST } ,
801         { "TT_DESKTOP_ENODEV", TT_DESKTOP_ENODEV } ,
802         { "TT_DESKTOP_ENOTDIR", TT_DESKTOP_ENOTDIR } ,
803         { "TT_DESKTOP_EISDIR", TT_DESKTOP_EISDIR } ,
804         { "TT_DESKTOP_EINVAL", TT_DESKTOP_EINVAL } ,
805         { "TT_DESKTOP_ENFILE", TT_DESKTOP_ENFILE } ,
806         { "TT_DESKTOP_EMFILE", TT_DESKTOP_EMFILE } ,
807         { "TT_DESKTOP_ETXTBSY", TT_DESKTOP_ETXTBSY } ,
808         { "TT_DESKTOP_EFBIG", TT_DESKTOP_EFBIG } ,
809         { "TT_DESKTOP_ENOSPC", TT_DESKTOP_ENOSPC } ,
810         { "TT_DESKTOP_EROFS", TT_DESKTOP_EROFS } ,
811         { "TT_DESKTOP_EMLINK", TT_DESKTOP_EMLINK } ,
812         { "TT_DESKTOP_EPIPE", TT_DESKTOP_EPIPE } ,
813         { "TT_DESKTOP_ENOMSG", TT_DESKTOP_ENOMSG } ,
814         { "TT_DESKTOP_EDEADLK", TT_DESKTOP_EDEADLK } ,
815         { "TT_DESKTOP_ECANCELED", TT_DESKTOP_ECANCELED } ,
816         { "TT_DESKTOP_ENOTSUP", TT_DESKTOP_ENOTSUP } ,
817         { "TT_DESKTOP_ENODATA", TT_DESKTOP_ENODATA } ,
818         { "TT_DESKTOP_EPROTO", TT_DESKTOP_EPROTO } ,
819         { "TT_DESKTOP_ENOTEMPTY", TT_DESKTOP_ENOTEMPTY } ,
820         { "TT_DESKTOP_ETIMEDOUT", TT_DESKTOP_ETIMEDOUT } ,
821         { "TT_DESKTOP_EALREADY", TT_DESKTOP_EALREADY } ,
822         { "TT_DESKTOP_UNMODIFIED", TT_DESKTOP_UNMODIFIED } ,
823         { "TT_MEDIA_ERR_SIZE", TT_MEDIA_ERR_SIZE } ,
824         { "TT_MEDIA_ERR_FORMAT", TT_MEDIA_ERR_FORMAT } ,
825         { "TT_AUTHFILE_ACCESS", TT_AUTHFILE_ACCESS } ,
826         { "TT_AUTHFILE_LOCK", TT_AUTHFILE_LOCK } ,
827         { "TT_AUTHFILE_LOCK_TIMEOUT", TT_AUTHFILE_LOCK_TIMEOUT } ,
828         { "TT_AUTHFILE_UNLOCK", TT_AUTHFILE_UNLOCK } ,
829         { "TT_AUTHFILE_MISSING", TT_AUTHFILE_MISSING } ,
830         { "TT_AUTHFILE_ENTRY_MISSING", TT_AUTHFILE_ENTRY_MISSING } ,
831         { "TT_AUTHFILE_WRITE", TT_AUTHFILE_WRITE } ,
832  };
833
834
835 struct named_integer NI_TT_SCOPE[] = {
836         { "TT_SCOPE_NONE", TT_SCOPE_NONE },
837         { "TT_SESSION", TT_SESSION },
838         { "TT_FILE", TT_FILE },
839         { "TT_BOTH", TT_BOTH },
840         { "TT_FILE_IN_SESSION", TT_FILE_IN_SESSION },
841 };
842
843 struct named_integer NI_TT_OP[] = {
844         { "TTDT_OP_NONE", TTDT_OP_NONE },
845         { "TTDT_CREATED", TTDT_CREATED },
846         { "TTDT_DELETED", TTDT_DELETED },
847         { "TTDT_DO_COMMAND", TTDT_DO_COMMAND },
848         { "TTDT_SET_ENVIRONMENT", TTDT_SET_ENVIRONMENT },
849         { "TTDT_GET_ENVIRONMENT", TTDT_GET_ENVIRONMENT },
850         { "TTDT_SET_GEOMETRY", TTDT_SET_GEOMETRY },
851         { "TTDT_GET_GEOMETRY", TTDT_GET_GEOMETRY },
852         { "TTDT_SET_ICONIFIED", TTDT_SET_ICONIFIED },
853         { "TTDT_GET_ICONIFIED", TTDT_GET_ICONIFIED },
854         { "TTDT_SET_LOCALE", TTDT_SET_LOCALE },
855         { "TTDT_GET_LOCALE", TTDT_GET_LOCALE },
856         { "TTDT_SET_MAPPED", TTDT_SET_MAPPED },
857         { "TTDT_GET_MAPPED", TTDT_GET_MAPPED },
858         { "TTDT_MODIFIED", TTDT_MODIFIED },
859         { "TTDT_REVERTED", TTDT_REVERTED },
860         { "TTDT_GET_MODIFIED", TTDT_GET_MODIFIED },
861         { "TTDT_MOVED", TTDT_MOVED },
862         { "TTDT_PAUSE", TTDT_PAUSE },
863         { "TTDT_RESUME", TTDT_RESUME },
864         { "TTDT_QUIT", TTDT_QUIT },
865         { "TTDT_RAISE", TTDT_RAISE },
866         { "TTDT_LOWER", TTDT_LOWER },
867         { "TTDT_SAVE", TTDT_SAVE },
868         { "TTDT_REVERT", TTDT_REVERT },
869         { "TTDT_SAVED", TTDT_SAVED },
870         { "TTDT_SET_SITUATION", TTDT_SET_SITUATION },
871         { "TTDT_GET_SITUATION", TTDT_GET_SITUATION },
872         { "TTDT_SIGNAL", TTDT_SIGNAL },
873         { "TTDT_STARTED", TTDT_STARTED },
874         { "TTDT_STOPPED", TTDT_STOPPED },
875         { "TTDT_STATUS", TTDT_STATUS },
876         { "TTDT_GET_STATUS", TTDT_GET_STATUS },
877         { "TTDT_GET_SYSINFO", TTDT_GET_SYSINFO },
878         { "TTDT_SET_XINFO", TTDT_SET_XINFO },
879         { "TTDT_GET_XINFO", TTDT_GET_XINFO },
880         { "TTME_ABSTRACT", TTME_ABSTRACT },
881         { "TTME_DEPOSIT", TTME_DEPOSIT },
882         { "TTME_DISPLAY", TTME_DISPLAY },
883         { "TTME_EDIT", TTME_EDIT },
884         { "TTME_COMPOSE", TTME_COMPOSE },
885         { "TTME_INTERPRET", TTME_INTERPRET },
886         { "TTME_PRINT", TTME_PRINT },
887         { "TTME_TRANSLATE", TTME_TRANSLATE },
888 };
889
890
891 struct named_integer NI_TEAR_OFF[] = {
892         { "TEAR_OFF_ENABLED", XmTEAR_OFF_ENABLED },
893         { "TEAR_OFF_DISABLED", XmTEAR_OFF_DISABLED },
894 };
895
896 /************************************************************************/
897
898 struct named_integer NI_Button[] = {
899         { "Button1",    Button1 },
900         { "Button2",    Button2 },
901         { "Button3",    Button3 },
902         { "Button4",    Button4 },
903         { "Button5",    Button5 },
904 };
905
906 struct named_integer NI_EventType[] = {
907         {"KeyPress", KeyPress},
908         {"KeyRelease", KeyRelease},
909         {"ButtonPress", ButtonPress},
910         {"ButtonRelease", ButtonRelease},
911         {"MotionNotify", MotionNotify},
912         {"EnterNotify", EnterNotify},
913         {"LeaveNotify", LeaveNotify},
914         {"FocusIn", FocusIn},
915         {"FocusOut", FocusOut},
916         {"KeymapNotify", KeymapNotify},
917         {"Expose", Expose},
918         {"GraphicsExpose", GraphicsExpose},
919         {"NoExpose", NoExpose},
920         {"VisibilityNotify", VisibilityNotify},
921         {"CreateNotify", CreateNotify},
922         {"DestroyNotify", DestroyNotify},
923         {"UnmapNotify", UnmapNotify},
924         {"MapNotify", MapNotify},
925         {"MapRequest", MapRequest},
926         {"ReparentNotify", ReparentNotify},
927         {"ConfigureNotify", ConfigureNotify},
928         {"ConfigureRequest", ConfigureRequest},
929         {"GravityNotify", GravityNotify},
930         {"ResizeRequest", ResizeRequest},
931         {"CirculateNotify", CirculateNotify},
932         {"PropertyNotify", PropertyNotify},
933         {"SelectionClear", SelectionClear},
934         {"SelectionRequest", SelectionRequest},
935         {"SelectionNotify", SelectionNotify},
936         {"ColormapNotify", ColormapNotify},
937         {"ClientMessage", ClientMessage},
938         {"MappingNotify", MappingNotify},
939 };
940
941 struct named_integer NI_XBool[] = {
942         { "true",       1 },
943         { "false",      0 },
944 };
945
946 struct named_integer NI_TextFormat[] = {
947         { "FMT_8_BIT",  XmFMT_8_BIT },
948         { "FMT_16_BIT", XmFMT_16_BIT },
949 };
950
951 struct named_integer NI_HelpHyperType[] = {
952         { "HELP_LINK_TOPIC",            DtHELP_LINK_TOPIC },
953         { "HELP_LINK_MAN_PAGE",         DtHELP_LINK_MAN_PAGE },
954         { "HELP_LINK_APP_DEFINE",       DtHELP_LINK_APP_DEFINE },
955 };
956
957 struct named_integer NI_WIN_GRAVITY[] = {
958         { "ForgetGravity",      ForgetGravity },
959         { "NorthWestGravity",   NorthWestGravity },
960         { "NorthGravity",       NorthGravity },
961         { "NorthEastGravity",   NorthEastGravity },
962         { "WestGravity",        WestGravity },
963         { "CenterGravity",      CenterGravity },
964         { "EastGravity",        EastGravity },
965         { "SouthWestGravity",   SouthWestGravity },
966         { "SouthGravity",       SouthGravity },
967         { "SouthEastGravity",   SouthEastGravity },
968         { "StaticGravity",      StaticGravity },
969         { "-1",                 -1 },
970 };
971
972 /************************************************************************/
973
974 void
975 DtkshRegisterNamedIntConverters( void )
976 {
977         XtConvertArgRec args[1];
978
979 #define SETARGS(X) args[0].address_mode = XtAddress; args[0].address_id = (caddr_t)&X[0]; args[0].size = sizeof(X);
980
981         /* Special!! Converts string to named value */
982         SETARGS(NI_TraversalDirection);
983         XtAddConverter(XmRString, "TraversalDirection", 
984                 DtkshCvtStringToNamedValue, 
985                 args, 1);
986         SETARGS(NI_CommandChild);
987         XtAddConverter(XmRString, "CommandChildType", 
988                 DtkshCvtStringToNamedValue, 
989                 args, 1);
990         SETARGS(NI_MessageBoxChild);
991         XtAddConverter(XmRString, "MessageBoxChildType", 
992                 DtkshCvtStringToNamedValue, 
993                 args, 1);
994         SETARGS(NI_FileSelChild);
995         XtAddConverter(XmRString, "FileSelChildType", 
996                 DtkshCvtStringToNamedValue, 
997                 args, 1);
998         SETARGS(NI_SelBoxChild);
999         XtAddConverter(XmRString, "SelBoxChildType", 
1000                 DtkshCvtStringToNamedValue, 
1001                 args, 1);
1002         SETARGS(NI_QuickHelpChildType);
1003         XtAddConverter(XmRString, "QuickHelpChildType", 
1004                 DtkshCvtStringToNamedValue, 
1005                 args, 1);
1006         SETARGS(NI_HelpType);
1007         XtAddConverter(XmRString, "HelpType", 
1008                 DtkshCvtStringToNamedValue, 
1009                 args, 1);
1010         SETARGS(NI_HelpScrollBarDisplayPolicy);
1011         XtAddConverter(XmRString, "HelpScrollBarDisplayPolicy", 
1012                 DtkshCvtStringToNamedValue, 
1013                 args, 1);
1014         SETARGS(NI_TextHighlightMode);
1015         XtAddConverter(XmRString, "TextHighlightMode", 
1016                 DtkshCvtStringToNamedValue, 
1017                 args, 1);
1018         SETARGS(NI_TextSearchDirection);
1019         XtAddConverter(XmRString, "TextSearchDirection", 
1020                 DtkshCvtStringToNamedValue, 
1021                 args, 1);
1022         SETARGS(NI_TextFormat);
1023         XtAddConverter(XmRString, "TextFormat", 
1024                 DtkshCvtStringToNamedValue, 
1025                 args, 1);
1026         SETARGS(NI_TT_OP);
1027         XtAddConverter(XmRString, "TtOp", DtkshCvtStringToNamedValue, 
1028                        args, 1);
1029         SETARGS(NI_TT_SCOPE);
1030         XtAddConverter(XmRString, "TtScope", DtkshCvtStringToNamedValue, 
1031                        args, 1);
1032         SETARGS(NI_TT_STATUS);
1033         XtAddConverter(XmRString, "TtStatus", DtkshCvtStringToNamedValue, 
1034                        args, 1);
1035         SETARGS(NI_TEAR_OFF);
1036         XtAddConverter(XmRString, XmRTearOffModel, DtkshCvtStringToNamedValue, 
1037                        args, 1);
1038         SETARGS(NI_WIN_GRAVITY);
1039         XtAddConverter(XmRString, "XWinGravity", DtkshCvtStringToNamedValue, 
1040                        args, 1);
1041         SETARGS(NI_MWMInputMode);
1042         XtAddConverter(XmRString, "MWMInputMode", DtkshCvtStringToNamedValue, 
1043                        args, 1);
1044
1045         /* The rest of these convert named values into strings */
1046         SETARGS(NI_ArrowDirection);
1047         XtAddConverter(XmRArrowDirection, XtRString, 
1048                 DtkshCvtNamedValueToString, 
1049                 args, 1);
1050         SETARGS(NI_MultiClick);
1051         XtAddConverter(XmRMultiClick, XtRString, 
1052                 DtkshCvtNamedValueToString, 
1053                 args, 1);
1054         SETARGS(NI_DialogStyle);
1055         XtAddConverter(XmRDialogStyle, XtRString, 
1056                 DtkshCvtNamedValueToString, 
1057                 args, 1);
1058         SETARGS(NI_MWMInputMode);
1059         XtAddConverter("MWMInputMode", XtRString, 
1060                 DtkshCvtNamedValueToString, 
1061                 args, 1);
1062         SETARGS(NI_ResizePolicy);
1063         XtAddConverter(XmRResizePolicy, XtRString, 
1064                 DtkshCvtNamedValueToString, 
1065                 args, 1);
1066         SETARGS(NI_FileTypeMask);
1067         XtAddConverter(XmRFileTypeMask, XtRString, 
1068                 DtkshCvtNamedValueToString, 
1069                 args, 1);
1070         SETARGS(NI_ShadowType);
1071         XtAddConverter(XmRShadowType, XtRString, 
1072                 DtkshCvtNamedValueToString, 
1073                 args, 1);
1074         SETARGS(NI_Attachment);
1075         XtAddConverter(XmRAttachment, XtRString, 
1076                 DtkshCvtNamedValueToString, 
1077                 args, 1);
1078         SETARGS(NI_ChildType);
1079         XtAddConverter(XmRChildType, XtRString, 
1080                 DtkshCvtNamedValueToString, 
1081                 args, 1);
1082         SETARGS(NI_Alignment);
1083         XtAddConverter(XmRChildHorizontalAlignment, XtRString, 
1084                 DtkshCvtNamedValueToString, 
1085                 args, 1);
1086         SETARGS(NI_ChildVerticalAlignment);
1087         XtAddConverter(XmRChildVerticalAlignment, XtRString, 
1088                 DtkshCvtNamedValueToString, 
1089                 args, 1);
1090         SETARGS(NI_UnitType);
1091         XtAddConverter(XmRUnitType, XtRString, 
1092                 DtkshCvtNamedValueToString, 
1093                 args, 1);
1094         SETARGS(NI_NavigationType);
1095         XtAddConverter(XmRNavigationType, XtRString, 
1096                 DtkshCvtNamedValueToString, 
1097                 args, 1);
1098         SETARGS(NI_Alignment);
1099         XtAddConverter(XmRAlignment, XtRString, 
1100                 DtkshCvtNamedValueToString, 
1101                 args, 1);
1102         SETARGS(NI_LabelType);
1103         XtAddConverter(XmRLabelType, XtRString, 
1104                 DtkshCvtNamedValueToString, 
1105                 args, 1);
1106         SETARGS(NI_StringDirection);
1107         XtAddConverter(XmRStringDirection, XtRString, 
1108                 DtkshCvtNamedValueToString, 
1109                 args, 1);
1110         SETARGS(NI_SelectionPolicy);
1111         XtAddConverter(XmRSelectionPolicy, XtRString, 
1112                 DtkshCvtNamedValueToString, 
1113                 args, 1);
1114         SETARGS(NI_ScrollBarPlacement);
1115         XtAddConverter(XmRScrollBarPlacement, XtRString, 
1116                 DtkshCvtNamedValueToString, 
1117                 args, 1);
1118         SETARGS(NI_ScrollBarDisplayPolicy);
1119         XtAddConverter(XmRScrollBarDisplayPolicy, XtRString, 
1120                 DtkshCvtNamedValueToString, 
1121                 args, 1);
1122         SETARGS(NI_ScrollingPolicy);
1123         XtAddConverter(XmRScrollingPolicy, XtRString, 
1124                 DtkshCvtNamedValueToString, 
1125                 args, 1);
1126         SETARGS(NI_VisualPolicy);
1127         XtAddConverter(XmRVisualPolicy, XtRString, 
1128                 DtkshCvtNamedValueToString, 
1129                 args, 1);
1130         SETARGS(NI_ListSizePolicy);
1131         XtAddConverter(XmRListSizePolicy, XtRString, 
1132                 DtkshCvtNamedValueToString, 
1133                 args, 1);
1134         SETARGS(NI_EditMode);
1135         XtAddConverter(XmREditMode, XtRString, 
1136                 DtkshCvtNamedValueToString, 
1137                 args, 1);
1138         SETARGS(NI_CommandWindowLocation);
1139         XtAddConverter(XmRCommandWindowLocation, XtRString, 
1140                 DtkshCvtNamedValueToString, 
1141                 args, 1);
1142         SETARGS(NI_DefaultButtonType);
1143         XtAddConverter(XmRDefaultButtonType, XtRString, 
1144                 DtkshCvtNamedValueToString, 
1145                 args, 1);
1146         SETARGS(NI_DialogType);
1147         XtAddConverter(XmRDialogType, XtRString, 
1148                 DtkshCvtNamedValueToString, 
1149                 args, 1);
1150         SETARGS(NI_EntryVerticalAlignment);
1151         XtAddConverter(XmRVerticalAlignment, XtRString, 
1152                 DtkshCvtNamedValueToString, 
1153                 args, 1);
1154         SETARGS(NI_Orientation);
1155         XtAddConverter(XmROrientation, XtRString, 
1156                 DtkshCvtNamedValueToString, 
1157                 args, 1);
1158         SETARGS(NI_Packing);
1159         XtAddConverter(XmRPacking, XtRString, 
1160                 DtkshCvtNamedValueToString, 
1161                 args, 1);
1162         SETARGS(NI_RowColumnType);
1163         XtAddConverter(XmRRowColumnType, XtRString, 
1164                 DtkshCvtNamedValueToString, 
1165                 args, 1);
1166         SETARGS(NI_ProcessingDirection);
1167         XtAddConverter(XmRProcessingDirection, XtRString, 
1168                 DtkshCvtNamedValueToString, 
1169                 args, 1);
1170         SETARGS(NI_ChildPlacement);
1171         XtAddConverter(XmRChildPlacement, XtRString, 
1172                 DtkshCvtNamedValueToString, 
1173                 args, 1);
1174         SETARGS(NI_SelectionDialogType);
1175         XtAddConverter(XmRSelectionType, XtRString, 
1176                 DtkshCvtNamedValueToString, 
1177                 args, 1);
1178         SETARGS(NI_SeparatorType);
1179         XtAddConverter(XmRSeparatorType, XtRString, 
1180                 DtkshCvtNamedValueToString, 
1181                 args, 1);
1182         SETARGS(NI_IndicatorType);
1183         XtAddConverter(XmRIndicatorType, XtRString, 
1184                 DtkshCvtNamedValueToString, 
1185                 args, 1);
1186         SETARGS(NI_AudibleWarning);
1187         XtAddConverter(XmRAudibleWarning, XtRString, 
1188                 DtkshCvtNamedValueToString, 
1189                 args, 1);
1190         SETARGS(NI_DeleteResponse);
1191         XtAddConverter(XmRDeleteResponse, XtRString, 
1192                 DtkshCvtNamedValueToString, 
1193                 args, 1);
1194         SETARGS(NI_KeyboardFocusPolicy);
1195         XtAddConverter(XmRKeyboardFocusPolicy, XtRString, 
1196                 DtkshCvtNamedValueToString, 
1197                 args, 1);
1198         SETARGS(NI_InitialState);
1199         XtAddConverter(XmRInitialState, XtRString, 
1200                 DtkshCvtNamedValueToString, 
1201                 args, 1);
1202         SETARGS(NI_HelpReturnSelectedWidgetResultType);
1203         XtAddConverter("HelpReturnSelectedWidgetResultType", XtRString, 
1204                 DtkshCvtNamedValueToString, 
1205                 args, 1);
1206         SETARGS(NI_HelpType);
1207         XtAddConverter("HelpType", XtRString, 
1208                 DtkshCvtNamedValueToString, 
1209                 args, 1);
1210         SETARGS(NI_HelpScrollBarDisplayPolicy);
1211         XtAddConverter("HelpScrollBarDisplayPolicy", XtRString, 
1212                 DtkshCvtNamedValueToString, 
1213                 args, 1);
1214         SETARGS(NI_Button);
1215         XtAddConverter("XE_Button", XtRString, 
1216                 DtkshCvtNamedValueToString, 
1217                 args, 1);
1218         SETARGS(NI_EventType);
1219         XtAddConverter("XE_EventType", XtRString, 
1220                 DtkshCvtNamedValueToString, 
1221                 args, 1);
1222         SETARGS(NI_XBool);
1223         XtAddConverter("X_Bool", XtRString, 
1224                 DtkshCvtNamedValueToString, 
1225                 args, 1);
1226         SETARGS(NI_TraversalDirection);
1227         XtAddConverter("TraversalDirection", XtRString, 
1228                 DtkshCvtNamedValueToString, 
1229                 args, 1);
1230         SETARGS(NI_VisibilityType);
1231         XtAddConverter("VisibilityType", XtRString,
1232                 DtkshCvtNamedValueToString, 
1233                 args, 1);
1234         SETARGS(NI_ListSelectionType);
1235         XtAddConverter("ListSelectionType", XtRString, 
1236                 DtkshCvtNamedValueToString, 
1237                 args, 1);
1238         SETARGS(NI_TextFormat);
1239         XtAddConverter("TextFormat", XtRString, 
1240                 DtkshCvtNamedValueToString, 
1241                 args, 1);
1242         SETARGS(NI_HelpHyperType);
1243         XtAddConverter("HelpHyperType", XtRString, 
1244                 DtkshCvtNamedValueToString, 
1245                 args, 1);
1246         SETARGS(NI_TT_STATUS);
1247         XtAddConverter("TtStatus", XtRString, DtkshCvtNamedValueToString, 
1248                         args, 1);
1249         SETARGS(NI_TT_OP);
1250         XtAddConverter("TtOp", XtRString, DtkshCvtNamedValueToString, args, 1);
1251         SETARGS(NI_TEAR_OFF);
1252         XtAddConverter(XmRTearOffModel, XtRString, DtkshCvtNamedValueToString, 
1253                 args, 1);
1254         SETARGS(NI_WIN_GRAVITY);
1255         XtAddConverter("XWinGravity", XtRString, DtkshCvtNamedValueToString, 
1256                 args, 1);
1257 }
1258
1259 /*****************************************************************************/
1260
1261 static ModifierState modifierTable[] = {
1262    {"Button1Mask", Button1Mask},
1263    {"Button2Mask", Button2Mask},
1264    {"Button3Mask", Button3Mask},
1265    {"Button4Mask", Button4Mask},
1266    {"Button5Mask", Button5Mask},
1267    {"ControlMask", ControlMask},
1268    {"LockMask",    LockMask},
1269    {"Mod1Mask",    Mod1Mask},
1270    {"Mod2Mask",    Mod2Mask},
1271    {"Mod3Mask",    Mod3Mask},
1272    {"Mod4Mask",    Mod4Mask},
1273    {"Mod5Mask",    Mod5Mask},
1274    {"ShiftMask",   ShiftMask},
1275    {NULL,          NULL},
1276 };
1277
1278
1279 void
1280 DtkshCvtXEModifierStateToString(
1281         XrmValuePtr args,
1282         Cardinal *nargs,
1283         XrmValuePtr fval,
1284         XrmValuePtr toval )
1285 {
1286    static char *string = NULL;
1287    unsigned int value;
1288    int i = 0;
1289    Boolean firstOne = True;
1290
1291    string = XtRealloc(string, 1);
1292    string[0] = '\0';
1293    value = ((unsigned int *)(fval->addr))[0];
1294
1295    while (modifierTable[i].modifierName)
1296    {
1297       if (value & modifierTable[i].modifier)
1298       {
1299          if (!firstOne)
1300          {
1301             string = XtRealloc(string,
1302                   strlen(string) + strlen(modifierTable[i].modifierName) + 2);
1303             strcat(string, "|");
1304             strcat(string, modifierTable[i].modifierName);
1305          }
1306          else
1307          {
1308             firstOne = False;
1309             string = XtRealloc(string,
1310                   strlen(string) + strlen(modifierTable[i].modifierName) + 1);
1311             strcat(string, modifierTable[i].modifierName);
1312          }
1313       }
1314       i++;
1315    }
1316
1317    toval->addr = (caddr_t)string;
1318    toval->size = strlen(string) + 1;
1319 }
1320
1321
1322 void
1323 DtkshCvtXEMotionHintToString(
1324         XrmValuePtr args,
1325         Cardinal *nargs,
1326         XrmValuePtr fval,
1327         XrmValuePtr toval )
1328 {
1329    if (fval->size != sizeof(char)) 
1330    {
1331       toval->addr = NULL;
1332       toval->size = 0;
1333       return;
1334    }
1335    if ((((char *)(fval->addr))[0]) == NotifyNormal) 
1336       toval->addr = (caddr_t)("NotifyNormal");
1337     else
1338       toval->addr = (caddr_t)("NotifyHint");
1339    toval->size = strlen(toval->addr)+1;
1340 }
1341
1342 /*
1343  * The following routines exist in order to enable ToolTalk commands
1344  * to operate without the script having to call XtInitialize.  Another way
1345  * of accomplishing the conversions done by these routines is by calling
1346  * XtConvert with appropriate parameters, but XtConvert requires a valid
1347  * widget in order to look up the converter tables.
1348  *
1349  * The routines provided are:
1350  *      DtkshCvtTtStatusToString()
1351  *      DtkshCvtStringToTtStatus()
1352  *      DtkshCvtStringToBool()
1353  *      DtkshCvtStringToTtOp()
1354  *      DtkshCvtTtOpToString()
1355  *      DtkshCvtStringToTtScope()
1356  */
1357
1358 /*
1359  * DtkshCvtTtStatusToString takes a toolTalk error code and a pointer to an
1360  * XrmValue struct.  The XrmValue struct will be filled in with the
1361  * results of the translation - presumably a string version of the
1362  * error code.
1363  * This routine is in this file because it must "know" the size of the
1364  * NI_TT_STATUS array.
1365  */
1366 void
1367 DtkshCvtTtStatusToString(
1368         Tt_status ttStatus,
1369         XrmValue *pToVal)
1370 {
1371    XrmValue cval[1], fval;
1372    Cardinal nargs;
1373
1374    fval.addr = (caddr_t)&ttStatus;
1375    fval.size = sizeof(Tt_status);
1376    nargs = 1;
1377    cval[0].size = sizeof(NI_TT_STATUS);
1378    cval[0].addr = (caddr_t)NI_TT_STATUS;
1379    DtkshCvtNamedValueToString(cval, &nargs, &fval, pToVal);
1380    return;
1381 }
1382
1383 /*
1384  * DtkshCvtStringToTtStatus - converts a string to the corresponding
1385  * TtStatus value.
1386  */
1387 void
1388 DtkshCvtStringToTtStatus(
1389         char *pString,
1390         XrmValue *pToVal)
1391 {
1392    XrmValue cval[1], fval;
1393    Cardinal nargs;
1394
1395    fval.addr = (caddr_t)pString;
1396    fval.size = strlen(pString);
1397    nargs = 1;
1398    cval[0].size = sizeof(NI_TT_STATUS);
1399    cval[0].addr = (caddr_t)NI_TT_STATUS;
1400    DtkshCvtStringToNamedValue(cval, &nargs, &fval, pToVal);
1401    return;
1402 }
1403
1404 /*
1405  * DtkshCvtStringToBool - takes a string (either "true" or "false")
1406  * and a pointer to an XrmValue struct.  The XrmValue struct will be filled
1407  * out with the results of the conversion of the string to a boolean.
1408  * This routine is in this file because it must "know" the size of the
1409  * NI_XBool array.
1410  */
1411 void
1412 DtkshCvtStringToBool(
1413         char *pString,
1414         XrmValue *pToVal)
1415 {
1416    XrmValue cval[1], fval;
1417    Cardinal nargs;
1418
1419    cval[0].size = sizeof(NI_XBool);
1420    cval[0].addr = (caddr_t)NI_XBool;
1421    fval.addr = pString;
1422    fval.size = strlen(pString);
1423    nargs = 1;
1424    DtkshCvtStringToNamedValue(cval, &nargs, &fval, pToVal);
1425    return;
1426 }
1427
1428
1429 /*
1430  * DtkshCvtStringToTtOp - converts a string to the corresponding
1431  * TtOp value.
1432  */
1433 void
1434 DtkshCvtStringToTtOp(
1435         char *pString,
1436         XrmValue *pToVal)
1437 {
1438    XrmValue cval[1], fval;
1439    Cardinal nargs;
1440
1441    fval.addr = (caddr_t)pString;
1442    fval.size = strlen(pString);
1443    nargs = 1;
1444    cval[0].size = sizeof(NI_TT_OP);
1445    cval[0].addr = (caddr_t)NI_TT_OP;
1446    DtkshCvtStringToNamedValue(cval, &nargs, &fval, pToVal);
1447    return;
1448 }
1449
1450 /*
1451  * DtkshCvtTtOpToString - converts a TtOp to the representative string.
1452  */
1453 void
1454 DtkshCvtTtOpToString(
1455         Tttk_op op,
1456         XrmValue *pToVal)
1457 {
1458    XrmValue cval[1], fval;
1459    Cardinal nargs;
1460
1461    fval.addr = (caddr_t)&op;
1462    fval.size = sizeof(Tttk_op);
1463    nargs = 1;
1464    cval[0].size = sizeof(NI_TT_OP);
1465    cval[0].addr = (caddr_t)NI_TT_OP;
1466    DtkshCvtNamedValueToString(cval, &nargs, &fval, pToVal);
1467    return;
1468 }
1469
1470 /*
1471  * DtkshCvtStringToTtScope - converts a string to the appropriate
1472  * TtScope numeric value.
1473  */
1474 void
1475 DtkshCvtStringToTtScope(
1476         char *pString,
1477         XrmValue *pToVal)
1478 {
1479    XrmValue cval[1], fval;
1480    Cardinal nargs;
1481
1482    fval.addr = (caddr_t)pString;
1483    fval.size = strlen(pString);
1484    nargs = 1;
1485    cval[0].size = sizeof(NI_TT_OP);
1486    cval[0].addr = (caddr_t)NI_TT_OP;
1487    DtkshCvtNamedValueToString(cval, &nargs, &fval, pToVal);
1488    return;
1489 }