00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <X11/Intrinsic.h>
00031 #include <X11/Xmu/Converters.h>
00032 #include <X11/Xmu/CharSet.h>
00033
00034 #define done(address, type) \
00035 { (*toVal).size = sizeof(type); (*toVal).addr = (XPointer) address; }
00036
00037
00038
00039
00040 static struct _namepair {
00041 XrmQuark quark;
00042 char *name;
00043 XtGravity gravity;
00044 } names[] = {
00045 { NULLQUARK, XtEForget, ForgetGravity },
00046 { NULLQUARK, XtENorthWest, NorthWestGravity },
00047 { NULLQUARK, XtENorth, NorthGravity },
00048 { NULLQUARK, XtENorthEast, NorthEastGravity },
00049 { NULLQUARK, XtEWest, WestGravity },
00050 { NULLQUARK, XtECenter, CenterGravity },
00051 { NULLQUARK, XtEEast, EastGravity },
00052 { NULLQUARK, XtESouthWest, SouthWestGravity },
00053 { NULLQUARK, XtESouth, SouthGravity },
00054 { NULLQUARK, XtESouthEast, SouthEastGravity },
00055 { NULLQUARK, XtEStatic, StaticGravity },
00056 { NULLQUARK, XtEUnmap, UnmapGravity },
00057 { NULLQUARK, XtEleft, WestGravity },
00058 { NULLQUARK, XtEtop, NorthGravity },
00059 { NULLQUARK, XtEright, EastGravity },
00060 { NULLQUARK, XtEbottom, SouthGravity },
00061 { NULLQUARK, NULL, ForgetGravity }
00062 };
00063
00064
00065
00066
00067
00068 void
00069 XmuCvtStringToGravity(XrmValuePtr args, Cardinal *num_args,
00070 XrmValuePtr fromVal, XrmValuePtr toVal)
00071 {
00072 static Boolean haveQuarks = False;
00073 char name[10];
00074 XrmQuark q;
00075 struct _namepair *np;
00076
00077 if (*num_args != 0)
00078 XtWarningMsg("wrongParameters","cvtStringToGravity","XtToolkitError",
00079 "String to Gravity conversion needs no extra arguments",
00080 (String *)NULL, (Cardinal *)NULL);
00081
00082 if (!haveQuarks)
00083 {
00084 for (np = names; np->name; np++)
00085 np->quark = XrmPermStringToQuark(np->name);
00086 haveQuarks = True;
00087 }
00088
00089 XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name));
00090 q = XrmStringToQuark(name);
00091
00092 for (np = names; np->name; np++)
00093 {
00094 if (np->quark == q)
00095 {
00096 done(&np->gravity, XtGravity);
00097 return;
00098 }
00099 }
00100
00101 XtStringConversionWarning((char *)fromVal->addr, XtRGravity);
00102 }
00103
00104
00105 Boolean
00106 XmuCvtGravityToString(Display *dpy, XrmValue *args, Cardinal *num_args,
00107 XrmValue *fromVal, XrmValue *toVal, XtPointer *data)
00108 {
00109 static char *buffer;
00110 Cardinal size;
00111 struct _namepair *np;
00112 XtGravity gravity;
00113
00114 gravity = *(XtGravity *)fromVal->addr;
00115 buffer = NULL;
00116 for (np = names; np->name; np++)
00117 if (np->gravity == gravity)
00118 {
00119 buffer = np->name;
00120 break;
00121 }
00122
00123 if (!buffer)
00124 {
00125 XtAppWarning(XtDisplayToApplicationContext(dpy),
00126 "Cannot convert Gravity to String");
00127 toVal->addr = NULL;
00128 toVal->size = 0;
00129
00130 return (False);
00131 }
00132
00133 size = strlen(buffer) + 1;
00134 if (toVal->addr != NULL)
00135 {
00136 if (toVal->size <= size)
00137 {
00138 toVal->size = size;
00139 return (False);
00140 }
00141 strcpy((char *)toVal->addr, buffer);
00142 }
00143 else
00144 toVal->addr = (XPointer)buffer;
00145 toVal->size = size;
00146
00147 return (True);
00148 }