xref: /netbsd-src/external/bsd/nvi/dist/motif_l/m_util.c (revision 2f698edb5c1cb2dcd9e762b0abb50c41dde8b6b7)
1dbd550edSchristos /*-
2dbd550edSchristos  * Copyright (c) 1996
3dbd550edSchristos  *	Rob Zimmermann.  All rights reserved.
4dbd550edSchristos  * Copyright (c) 1996
5dbd550edSchristos  *	Keith Bostic.  All rights reserved.
6dbd550edSchristos  *
7dbd550edSchristos  * See the LICENSE file for redistribution information.
8dbd550edSchristos  */
9dbd550edSchristos 
10dbd550edSchristos #include "config.h"
11dbd550edSchristos 
12*2f698edbSchristos #include <sys/cdefs.h>
13*2f698edbSchristos #if 0
14dbd550edSchristos #ifndef lint
15dbd550edSchristos static const char sccsid[] = "Id: m_util.c,v 8.12 2003/11/05 17:10:00 skimo Exp  (Berkeley) Date: 2003/11/05 17:10:00 ";
16dbd550edSchristos #endif /* not lint */
17*2f698edbSchristos #else
18*2f698edbSchristos __RCSID("$NetBSD: m_util.c,v 1.2 2014/01/26 21:43:45 christos Exp $");
19*2f698edbSchristos #endif
20dbd550edSchristos 
21dbd550edSchristos #include <sys/types.h>
22dbd550edSchristos #include <sys/queue.h>
23dbd550edSchristos 
24dbd550edSchristos #include <X11/Intrinsic.h>
25dbd550edSchristos #include <X11/StringDefs.h>
26dbd550edSchristos #include <X11/Shell.h>
27dbd550edSchristos #include <X11/Xatom.h>
28dbd550edSchristos 
29dbd550edSchristos #include <bitstring.h>
30dbd550edSchristos #include <stdio.h>
31dbd550edSchristos #include <string.h>
32dbd550edSchristos 
33dbd550edSchristos #undef LOCK_SUCCESS
34dbd550edSchristos #include "../common/common.h"
35dbd550edSchristos #include "../ipc/ip.h"
36dbd550edSchristos #include "m_motif.h"
37dbd550edSchristos 
38dbd550edSchristos 
39dbd550edSchristos /* Widget hierarchy routines
40dbd550edSchristos  *
41dbd550edSchristos  * void XutShowWidgetTree( FILE *fp, Widget root, int indent )
42dbd550edSchristos  *	prints the widgets and sub-widgets beneath the named root widget
43dbd550edSchristos  */
44dbd550edSchristos #ifdef DEBUG
45dbd550edSchristos #if defined(__STDC__)
XutShowWidgetTree(FILE * fp,Widget root,int indent)46dbd550edSchristos void	XutShowWidgetTree( FILE *fp, Widget root, int indent )
47dbd550edSchristos #else
48dbd550edSchristos void	XutShowWidgetTree( fp, root, indent )
49dbd550edSchristos FILE	*fp;
50dbd550edSchristos Widget	root;
51dbd550edSchristos int	indent;
52dbd550edSchristos #endif
53dbd550edSchristos {
54dbd550edSchristos #if ! defined(DECWINDOWS)
55dbd550edSchristos     WidgetList	l, l2;
56dbd550edSchristos     int		i, count = 0;
57dbd550edSchristos 
58dbd550edSchristos     /* print where we are right now */
59dbd550edSchristos     fprintf( fp,
60dbd550edSchristos 	     "%*.*swidget => 0x%x name => \"%s\"\n\r",
61dbd550edSchristos 	     indent,
62dbd550edSchristos 	     indent,
63dbd550edSchristos 	     "",
64dbd550edSchristos 	     root,
65dbd550edSchristos 	     XtName(root) );
66dbd550edSchristos 
67dbd550edSchristos     /* get the correct widget values */
68dbd550edSchristos     XtVaGetValues( root, XtNchildren, &l, 0 );
69dbd550edSchristos     XtVaGetValues( root, XtNchildren, &l2, 0 );
70dbd550edSchristos     XtVaGetValues( root, XtNnumChildren, &count, 0 );
71dbd550edSchristos 
72dbd550edSchristos     /* print the sub-widgets */
73dbd550edSchristos     for ( i=0; i<count; i++ ) {
74dbd550edSchristos 	XutShowWidgetTree( fp, l[i], indent+4 );
75dbd550edSchristos     }
76dbd550edSchristos 
77dbd550edSchristos     /* tidy up if this thing contained children */
78dbd550edSchristos     if ( count > 0 ) {
79dbd550edSchristos 	/* we may or may not have to free the children */
80dbd550edSchristos 	if ( l != l2 ) {
81dbd550edSchristos 	    XtFree( (char *) l );
82dbd550edSchristos 	    XtFree( (char *) l2 );
83dbd550edSchristos 	}
84dbd550edSchristos     }
85dbd550edSchristos #endif
86dbd550edSchristos }
87dbd550edSchristos #endif
88dbd550edSchristos 
89dbd550edSchristos 
90dbd550edSchristos /* Utilities for converting X resources...
91dbd550edSchristos  *
92dbd550edSchristos  * __XutConvertResources( Widget, String root, XutResource *, int count )
93dbd550edSchristos  *	The resource block is loaded with converted values
94dbd550edSchristos  *	If the X resource does not exist, no change is made to the value
95dbd550edSchristos  *	'root' should be the application name.
96dbd550edSchristos  *
97dbd550edSchristos  * PUBLIC: void __XutConvertResources __P((Widget, String, XutResource *, int));
98dbd550edSchristos  */
__XutConvertResources(Widget wid,String root,XutResource * resources,int count)99dbd550edSchristos void __XutConvertResources(Widget wid, String root, XutResource *resources, int count)
100dbd550edSchristos {
101dbd550edSchristos     int		i;
102dbd550edSchristos     XrmValue	from, to;
103dbd550edSchristos     String	kind;
104dbd550edSchristos     Boolean	success = True;
105dbd550edSchristos 
106dbd550edSchristos     /* for each resource */
107dbd550edSchristos     for (i=0; i<count; i++) {
108dbd550edSchristos 
109dbd550edSchristos 	/* is there a value in the database? */
110dbd550edSchristos 	from.addr = XGetDefault( XtDisplay(wid), root, resources[i].name );
111dbd550edSchristos 	if ( from.addr == NULL || *from.addr == '\0' )
112dbd550edSchristos 	    continue;
113dbd550edSchristos 
114dbd550edSchristos 	/* load common parameters */
115dbd550edSchristos 	from.size = strlen( from.addr );
116dbd550edSchristos 	to.addr   = resources[i].value;
117dbd550edSchristos 
118dbd550edSchristos 	/* load type-specific parameters */
119dbd550edSchristos 	switch ( resources[i].kind ) {
120dbd550edSchristos 	    case XutRKinteger:
121dbd550edSchristos 		to.size	= sizeof(int);
122dbd550edSchristos 		kind	= XtRInt;
123dbd550edSchristos 		break;
124dbd550edSchristos 
125dbd550edSchristos 	    case XutRKboolean:
126dbd550edSchristos 		/* String to Boolean */
127dbd550edSchristos 		to.size	= sizeof(Boolean);
128dbd550edSchristos 		kind	= XtRBoolean;
129dbd550edSchristos 		break;
130dbd550edSchristos 
131dbd550edSchristos 	    case XutRKfont:
132dbd550edSchristos 		/* String to Font structure */
133dbd550edSchristos 		to.size	= sizeof(XFontStruct *);
134dbd550edSchristos 		kind	= XtRFontStruct;
135dbd550edSchristos 		break;
136dbd550edSchristos 
137dbd550edSchristos 	    case XutRKpixelBackup:
138dbd550edSchristos 		/* String to Pixel backup algorithm */
139dbd550edSchristos 		if ( success ) continue;
140dbd550edSchristos 		/* FALL through */
141dbd550edSchristos 
142dbd550edSchristos 	    case XutRKpixel:
143dbd550edSchristos 		/* String to Pixel */
144dbd550edSchristos 		to.size	= sizeof(Pixel);
145dbd550edSchristos 		kind	= XtRPixel;
146dbd550edSchristos 		break;
147dbd550edSchristos 
148dbd550edSchristos 	    case XutRKcursor:
149dbd550edSchristos 		/* String to Cursor */
150dbd550edSchristos 		to.size	= sizeof(int);
151dbd550edSchristos 		kind	= XtRCursor;
152dbd550edSchristos 		break;
153dbd550edSchristos 
154dbd550edSchristos 	    default:
155dbd550edSchristos 		return;
156dbd550edSchristos 	}
157dbd550edSchristos 
158dbd550edSchristos 	/* call the converter */
159dbd550edSchristos 	success = XtConvertAndStore( wid, XtRString, &from, kind, &to );
160dbd550edSchristos     }
161dbd550edSchristos }
162