diff options
Diffstat (limited to 'src/StrToGrav.c')
-rw-r--r-- | src/StrToGrav.c | 97 |
1 files changed, 72 insertions, 25 deletions
diff --git a/src/StrToGrav.c b/src/StrToGrav.c index 7f74745..7ccb04a 100644 --- a/src/StrToGrav.c +++ b/src/StrToGrav.c @@ -25,13 +25,18 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ +/* $XFree86: xc/lib/Xmu/StrToGrav.c,v 1.7 2001/12/14 19:55:52 dawes Exp $ */ #include <X11/Intrinsic.h> #include <X11/Xmu/Converters.h> +#include <X11/Xmu/CharSet.h> #define done(address, type) \ - { (*toVal).size = sizeof(type); (*toVal).addr = (XPointer) address; } +{ (*toVal).size = sizeof(type); (*toVal).addr = (XPointer) address; } +/* + * Initialization + */ static struct _namepair { XrmQuark quark; char *name; @@ -58,44 +63,86 @@ static struct _namepair { /* * This function is deprecated as of the addition of - * XtCvtStringToGravity in R6. + * XtCvtStringToGravity in R6 */ - -void XmuCvtStringToGravity (args, num_args, fromVal, toVal) - XrmValuePtr args; - Cardinal *num_args; - XrmValuePtr fromVal; - XrmValuePtr toVal; +void +XmuCvtStringToGravity(XrmValuePtr args, Cardinal *num_args, + XrmValuePtr fromVal, XrmValuePtr toVal) { - static Boolean haveQuarks = FALSE; - char lowerName[40]; + static Boolean haveQuarks = False; + char name[10]; XrmQuark q; - char *s; struct _namepair *np; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToGravity","XtToolkitError", "String to Gravity conversion needs no extra arguments", - (String *) NULL, (Cardinal *)NULL); + (String *)NULL, (Cardinal *)NULL); - if (!haveQuarks) { - for (np = names; np->name; np++) { - np->quark = XrmPermStringToQuark (np->name); - } - haveQuarks = TRUE; + if (!haveQuarks) + { + for (np = names; np->name; np++) + np->quark = XrmPermStringToQuark(np->name); + haveQuarks = True; } - s = (char *) fromVal->addr; - if (strlen(s) < sizeof lowerName) { - XmuCopyISOLatin1Lowered (lowerName, s); - q = XrmStringToQuark (lowerName); + XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name)); + q = XrmStringToQuark(name); - for (np = names; np->name; np++) { - if (np->quark == q) { - done (&np->gravity, XtGravity); + for (np = names; np->name; np++) + { + if (np->quark == q) + { + done(&np->gravity, XtGravity); return; } } + + XtStringConversionWarning((char *)fromVal->addr, XtRGravity); +} + +/*ARGSUSED*/ +Boolean +XmuCvtGravityToString(Display *dpy, XrmValue *args, Cardinal *num_args, + XrmValue *fromVal, XrmValue *toVal, XtPointer *data) +{ + static char *buffer; + Cardinal size; + struct _namepair *np; + XtGravity gravity; + + gravity = *(XtGravity *)fromVal->addr; + buffer = NULL; + for (np = names; np->name; np++) + if (np->gravity == gravity) + { + buffer = np->name; + break; + } + + if (!buffer) + { + XtAppWarning(XtDisplayToApplicationContext(dpy), + "Cannot convert Gravity to String"); + toVal->addr = NULL; + toVal->size = 0; + + return (False); + } + + size = strlen(buffer) + 1; + if (toVal->addr != NULL) + { + if (toVal->size <= size) + { + toVal->size = size; + return (False); + } + strcpy((char *)toVal->addr, buffer); } - XtStringConversionWarning((char *) fromVal->addr, XtRGravity); + else + toVal->addr = (XPointer)buffer; + toVal->size = size; + + return (True); } |