StrToGrav.c

Go to the documentation of this file.
00001 /* $Xorg: StrToGrav.c,v 1.4 2001/02/09 02:03:53 xorgcvs Exp $ */
00002 
00003 /* 
00004 
00005 Copyright 1989, 1998  The Open Group
00006 
00007 Permission to use, copy, modify, distribute, and sell this software and its
00008 documentation for any purpose is hereby granted without fee, provided that
00009 the above copyright notice appear in all copies and that both that
00010 copyright notice and this permission notice appear in supporting
00011 documentation.
00012 
00013 The above copyright notice and this permission notice shall be included in
00014 all copies or substantial portions of the Software.
00015 
00016 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00017 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00018 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00019 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
00020 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00021 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00022 
00023 Except as contained in this notice, the name of The Open Group shall not be
00024 used in advertising or otherwise to promote the sale, use or other dealings
00025 in this Software without prior written authorization from The Open Group.
00026 
00027 */
00028 /* $XFree86: xc/lib/Xmu/StrToGrav.c,v 1.6 2001/01/17 19:42:57 dawes Exp $ */
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  * Initialization
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  * This function is deprecated as of the addition of 
00066  * XtCvtStringToGravity in R6
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 /*ARGSUSED*/
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 }

Generated on Sun Mar 4 15:03:56 2007 for Scilab [trunk] by  doxygen 1.5.1