1 module x11.Xresource;
2 
3 version(Posix):
4 
5 import x11.Xlib;
6 
7 extern (C) nothrow:
8 
9 /****************************************************************
10  ****************************************************************
11  ***                                                          ***
12  ***                                                          ***
13  ***          X Resource Manager Intrinsics                   ***
14  ***                                                          ***
15  ***                                                          ***
16  ****************************************************************
17  ***************************************************************
18 
19 
20 /****************************************************************
21  *
22  * Memory Management
23  *
24  ****************************************************************/
25 
26 extern char* Xpermalloc(
27     uint                                                /* size                                                         */
28 );
29 
30 /****************************************************************
31  *
32  * Quark Management
33  *
34  ****************************************************************/
35 
36 alias int   XrmQuark;
37 alias int*  XrmQuarkList;
38 const XrmQuark NULLQUARK = 0;
39 
40 alias char* XrmString;
41 const XrmString NULLSTRING = null;
42 
43                                                         /* find quark for string, create new quark if none already exists */
44 extern XrmQuark XrmStringToQuark(
45     const char*                                         /* string                                                       */
46 );
47 
48 extern XrmQuark XrmPermStringToQuark(
49     const char*                                         /* string                                                       */
50 );
51 
52                                                         /* find string for quark                                        */
53 extern XrmString XrmQuarkToString(
54     XrmQuark                                            /* quark                                                        */
55 );
56 
57 extern XrmQuark XrmUniqueQuark( );
58 
59 bool XrmStringsEqual(XrmString a1, XrmString a2){ return *a1 == *a2; }
60 
61 
62 /****************************************************************
63  *
64  * Conversion of Strings to Lists
65  *
66  ****************************************************************/
67 
68 alias int XrmBinding;
69 enum {XrmBindTightly, XrmBindLoosely}
70 alias XrmBinding* XrmBindingList;
71 
72 extern void XrmStringToQuarkList(
73     const char*                                         /* string                                                       */,
74     XrmQuarkList                                        /* quarks_return                                                */
75 );
76 
77 extern void XrmStringToBindingQuarkList(
78     const char*                                         /* string                                                       */,
79     XrmBindingList                                      /* bindings_return                                              */,
80     XrmQuarkList                                        /* quarks_return                                                */
81 );
82 
83 /****************************************************************
84  *
85  * Name and Class lists.
86  *
87  ****************************************************************/
88 
89 alias XrmQuark     XrmName;
90 alias XrmQuarkList XrmNameList;
91 XrmString   XrmNameToString(XrmName name)                       { return                    XrmQuarkToString( cast(XrmQuark) name );}
92 XrmName     XrmStringToName(XrmString string)                   { return cast(XrmName)      XrmStringToQuark(string);               }
93 void        XrmStringToNameList(XrmString str, XrmNameList name){                           XrmStringToQuarkList(str, name);        }
94 
95 alias XrmQuark     XrmClass;
96 alias XrmQuarkList XrmClassList;
97 XrmString   XrmClassToString( XrmClass c_class )                        { return                    XrmQuarkToString( cast(XrmQuark) c_class);  }
98 XrmClass    XrmStringToClass( XrmString c_class )                       { return cast(XrmClass)     XrmStringToQuark(c_class);                  }
99 void        XrmStringToClassList( XrmString str, XrmClassList c_class)  {                           XrmStringToQuarkList(str, c_class);         }
100 
101 
102 
103 /****************************************************************
104  *
105  * Resource Representation Types and Values
106  *
107  ****************************************************************/
108 
109 alias XrmQuark     XrmRepresentation;
110 XrmRepresentation   XrmStringToRepresentation( XrmString string)        { return cast(XrmRepresentation)    XrmStringToQuark(string);   }
111 XrmString           XrmRepresentationToString( XrmRepresentation type)  { return                            XrmQuarkToString(type);     }
112 
113 struct XrmValue{
114     uint        size;
115     XPointer    addr;
116 }
117 alias XrmValue* XrmValuePtr;
118 
119 
120 /****************************************************************
121  *
122  * Resource Manager Functions
123  *
124  ****************************************************************/
125 struct _XrmHashBucketRec{}
126 alias _XrmHashBucketRec* XrmHashBucket;
127 alias XrmHashBucket* XrmHashTable;
128 alias XrmHashTable[] XrmSearchList;
129 alias _XrmHashBucketRec* XrmDatabase;
130 
131 
132 extern void XrmDestroyDatabase(
133     XrmDatabase                                         /* database                                                     */
134 );
135 
136 extern void XrmQPutResource(
137     XrmDatabase*                                        /* database                                                     */,
138     XrmBindingList                                      /* bindings                                                     */,
139     XrmQuarkList                                        /* quarks                                                       */,
140     XrmRepresentation                                   /* type                                                         */,
141     XrmValue*                                           /* value                                                        */
142 );
143 
144 extern void XrmPutResource(
145     XrmDatabase*                                        /* database                                                     */,
146     const char*                                         /* specifier                                                    */,
147     const char*                                         /* type                                                         */,
148     XrmValue*                                           /* value                                                        */
149 );
150 
151 extern void XrmQPutStringResource(
152     XrmDatabase*                                        /* database                                                     */,
153     XrmBindingList                                      /* bindings                                                     */,
154     XrmQuarkList                                        /* quarks                                                       */,
155     const char*                                         /* value                                                        */
156 );
157 
158 extern void XrmPutStringResource(
159     XrmDatabase*                                        /* database                                                     */,
160     const char*                                         /* specifier                                                    */,
161     const char*                                         /* value                                                        */
162 );
163 
164 extern void XrmPutLineResource(
165     XrmDatabase*                                        /* database                                                     */,
166     const char*                                         /* line                                                         */
167 );
168 
169 extern Bool XrmQGetResource(
170     XrmDatabase                                         /* database                                                     */,
171     XrmNameList                                         /* quark_name                                                   */,
172     XrmClassList                                        /* quark_class                                                  */,
173     XrmRepresentation*                                  /* quark_type_return                                            */,
174     XrmValue*                                           /* value_return                                                 */
175 );
176 
177 extern Bool XrmGetResource(
178     XrmDatabase                                         /* database                                                     */,
179     const char*                                         /* str_name                                                     */,
180     const char*                                         /* str_class                                                    */,
181     char**                                              /* str_type_return                                              */,
182     XrmValue*                                           /* value_return                                                 */
183 );
184 
185 extern Bool XrmQGetSearchList(
186     XrmDatabase                                         /* database                                                     */,
187     XrmNameList                                         /* names                                                        */,
188     XrmClassList                                        /* classes                                                      */,
189     XrmSearchList                                       /* list_return                                                  */,
190     int                                                 /* list_length                                                  */
191 );
192 
193 extern Bool XrmQGetSearchResource(
194     XrmSearchList                                       /* list                                                         */,
195     XrmName                                             /* name                                                         */,
196     XrmClass                                            /* class                                                        */,
197     XrmRepresentation*                                  /* type_return                                                  */,
198     XrmValue*                                           /* value_return                                                 */
199 );
200 
201 /****************************************************************
202  *
203  * Resource Database Management
204  *
205  ****************************************************************/
206 
207 
208 extern void XrmSetDatabase(
209     Display*                                            /* display                                                      */,
210     XrmDatabase                                         /* database                                                     */
211 );
212 
213 extern XrmDatabase XrmGetDatabase(
214     Display*                                            /* display                                                      */
215 );
216 
217 
218 extern XrmDatabase XrmGetFileDatabase(
219     const char*                                         /* filename                                                     */
220 );
221 
222 extern Status XrmCombineFileDatabase(
223     const char*                                         /* filename                                                     */,
224     XrmDatabase*                                        /* target                                                       */,
225     Bool                                                /* override                                                     */
226 );
227 
228 extern XrmDatabase XrmGetStringDatabase(
229     const char*                                         /* data null terminated string                                  */
230 );
231 
232 extern void XrmPutFileDatabase(
233     XrmDatabase                                         /* database                                                     */,
234     const char*                                         /* filename                                                     */
235 );
236 
237 extern void XrmMergeDatabases(
238     XrmDatabase                                         /* source_db                                                    */,
239     XrmDatabase*                                        /* target_db                                                    */
240 );
241 
242 extern void XrmCombineDatabase(
243     XrmDatabase                                         /* source_db                                                    */,
244     XrmDatabase*                                        /* target_db                                                    */,
245     Bool                                                /* override                                                     */
246 );
247 
248 const uint XrmEnumAllLevels = 0;
249 const uint XrmEnumOneLevel  = 1;
250 
251 extern Bool XrmEnumerateDatabase(
252     XrmDatabase                                         /* db                                                           */,
253     XrmNameList                                         /* name_prefix                                                  */,
254     XrmClassList                                        /* class_prefix                                                 */,
255     int                                                 /* mode                                                         */,
256     Bool function(
257          XrmDatabase*                                   /* db                                                           */,
258          XrmBindingList                                 /* bindings                                                     */,
259          XrmQuarkList                                   /* quarks                                                       */,
260          XrmRepresentation*                             /* type                                                         */,
261          XrmValue*                                      /* value                                                        */,
262          XPointer                                       /* closure                                                      */
263     )                                                   /* proc                                                         */,
264     XPointer                                            /* closure                                                      */
265 );
266 
267 extern char* XrmLocaleOfDatabase(
268     XrmDatabase                                         /* database                                                     */
269 );
270 
271 
272 /****************************************************************
273  *
274  * Command line option mapping to resource entries
275  *
276  ****************************************************************/
277 
278 alias int XrmOptionKind;
279 enum {
280     XrmoptionNoArg,                                     /* Value is specified in OptionDescRec.value                    */
281     XrmoptionIsArg,                                     /* Value is the option string itself                            */
282     XrmoptionStickyArg,                                 /* Value is characters immediately following option             */
283     XrmoptionSepArg,                                    /* Value is next argument in argv                               */
284     XrmoptionResArg,                                    /* Resource and value in next argument in argv                  */
285     XrmoptionSkipArg,                                   /* Ignore this option and the next argument in argv             */
286     XrmoptionSkipLine,                                  /* Ignore this option and the rest of argv                      */
287     XrmoptionSkipNArgs                                  /* Ignore this option and the next OptionDescRes.value arguments in argv */
288 }
289 
290 struct XrmOptionDescRec{
291     char*        option;                                /* Option abbreviation in argv                                  */
292     char*        specifier;                             /* Resource specifier                                           */
293     XrmOptionKind   argKind;                            /* Which style of option it is                                  */
294     XPointer        value;                              /* Value to provide if XrmoptionNoArg                           */
295 }
296 alias XrmOptionDescRec* XrmOptionDescList;
297 
298 
299 extern void XrmParseCommand(
300     XrmDatabase*                                        /* database                                                     */,
301     XrmOptionDescList                                   /* table                                                        */,
302     int                                                 /* table_count                                                  */,
303     const char*                                         /* name                                                         */,
304     int*                                                /* argc_in_out                                                  */,
305     char**                                              /* argv_in_out                                                  */
306 );