Annotation of researchv9/X11/src/X.V11R1/lib/oldXrm/Conversion.c, revision 1.1

1.1     ! root        1: /* $Header: Conversion.c,v 1.1 87/09/11 08:16:01 toddb Exp $ */
        !             2: #ifndef lint
        !             3: static char *sccsid = "@(#)Conversion.c        1.11    3/19/87";
        !             4: #endif lint
        !             5: 
        !             6: /*
        !             7:  * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
        !             8:  * 
        !             9:  *                         All Rights Reserved
        !            10:  * 
        !            11:  * Permission to use, copy, modify, and distribute this software and its 
        !            12:  * documentation for any purpose and without fee is hereby granted, 
        !            13:  * provided that the above copyright notice appear in all copies and that
        !            14:  * both that copyright notice and this permission notice appear in 
        !            15:  * supporting documentation, and that the name of Digital Equipment
        !            16:  * Corporation not be used in advertising or publicity pertaining to
        !            17:  * distribution of the software without specific, written prior permission.  
        !            18:  * 
        !            19:  * 
        !            20:  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
        !            21:  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
        !            22:  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            23:  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
        !            24:  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
        !            25:  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
        !            26:  * SOFTWARE.
        !            27:  */
        !            28: 
        !            29: 
        !            30: /* Conversion.c - implementations of resource type conversion procs */
        !            31: 
        !            32: #include       "Xlib.h"
        !            33: #include       "Xutil.h"
        !            34: #include       "Xresource.h"
        !            35: #include       "XrmConvert.h"
        !            36: #include       "Conversion.h"
        !            37: #include       "Quarks.h"
        !            38: #include       <sys/file.h>
        !            39: #include       <stdio.h>
        !            40: 
        !            41: #define        done(address, type) \
        !            42:        { (*toVal).size = sizeof(type); (*toVal).addr = (caddr_t) address; }
        !            43: 
        !            44: static void CvtXColorToPixel();
        !            45: 
        !            46: static void CvtGeometryToDims();
        !            47: 
        !            48: static void CvtIntToBoolean();
        !            49: static void CvtIntToFont();
        !            50: static void CvtIntOrPixelToXColor();
        !            51: static void CvtIntToPixel();
        !            52: 
        !            53: static void CvtStringToBoolean();
        !            54: static void CvtStringToXColor();
        !            55: static void CvtStringToDisplay();
        !            56: extern void CvtStringToEventBindings();
        !            57: static void CvtStringToFile();
        !            58: static void CvtStringToFont();
        !            59: static void CvtStringToFontStruct();
        !            60: static void CvtStringToGeometry();
        !            61: static void CvtStringToInt();
        !            62: static void CvtStringToPixel();
        !            63: static void CvtStringToPixmap();
        !            64: 
        !            65: void _XLowerCase(source, dest)
        !            66:     register char  *source, *dest;
        !            67: {
        !            68:     register char ch;
        !            69: 
        !            70:     for (; (ch = *source) != 0; source++, dest++) {
        !            71:        if ('A' <= ch && ch <= 'Z')
        !            72:            *dest = ch - 'A' + 'a';
        !            73:        else
        !            74:            *dest = ch;
        !            75:     }
        !            76:     *dest = 0;
        !            77: }
        !            78: 
        !            79: 
        !            80: /*ARGSUSED*/
        !            81: static void CvtIntToBoolean(dpy, fromVal, toVal)
        !            82:     Display    *dpy;
        !            83:     XrmValue   fromVal;
        !            84:     XrmValue   *toVal;
        !            85: {
        !            86:     static int b;
        !            87: 
        !            88:     b = (int) (*(int *)fromVal.addr != 0);
        !            89:     done(&b, int);
        !            90: };
        !            91: 
        !            92: 
        !            93: /*ARGSUSED*/
        !            94: static void CvtStringToBoolean(dpy, fromVal, toVal)
        !            95:     Display    *dpy;
        !            96:     XrmValue   fromVal;
        !            97:     XrmValue   *toVal;
        !            98: {
        !            99:     static int b;
        !           100:     XrmQuark   q;
        !           101:     char       lowerName[1000];
        !           102: 
        !           103:     _XLowerCase((char *) fromVal.addr, lowerName);
        !           104:     q = XrmAtomToQuark(lowerName);
        !           105: 
        !           106:     if (q == XrmQEtrue)        { b = 1; done(&b, int); return; }
        !           107:     if (q == XrmQEon)  { b = 1; done(&b, int); return; }
        !           108:     if (q == XrmQEyes) { b = 1; done(&b, int); return; }
        !           109: 
        !           110:     if (q == XrmQEfalse)       { b = 0; done(&b, int); return; }
        !           111:     if (q == XrmQEoff) { b = 0; done(&b, int); return; }
        !           112:     if (q == XrmQEno)  { b = 0; done(&b, int); return; }
        !           113: };
        !           114: 
        !           115: 
        !           116: /*ARGSUSED*/
        !           117: static void CvtIntOrPixelToXColor(dpy, fromVal, toVal)
        !           118:     Display    *dpy;
        !           119:     XrmValue   fromVal;
        !           120:     XrmValue   *toVal;
        !           121: {    
        !           122:     static XColor      c;
        !           123: 
        !           124:     if (DefaultVisual(dpy, DefaultScreen(dpy))->class == StaticGray)
        !           125:        return;
        !           126: 
        !           127:     c.pixel = *(int *)fromVal.addr;
        !           128:     XQueryColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), &c);
        !           129:                                /* !!! Need some error checking ... ||| */
        !           130:     done(&c, XColor);
        !           131: };
        !           132: 
        !           133: 
        !           134: /*ARGSUSED*/
        !           135: static void CvtStringToXColor(dpy, fromVal, toVal)
        !           136:     Display    *dpy;
        !           137:     XrmValue   fromVal;
        !           138:     XrmValue   *toVal;
        !           139: {
        !           140:     static XColor      c;
        !           141:     Status             s;
        !           142: 
        !           143:     if (DefaultVisual(dpy, DefaultScreen(dpy))->class == StaticGray)
        !           144:        return;
        !           145: 
        !           146:     s = XParseColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)),
        !           147:                        (char *)fromVal.addr, &c);
        !           148:     if (s == 0) return;
        !           149:     s = XAllocColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)), &c);
        !           150:     if (s == 0) return;
        !           151:     done(&c, XColor);
        !           152: };
        !           153: 
        !           154: 
        !           155: /*ARGSUSED*/
        !           156: static void CvtGeometryToDims(dpy, fromVal, toVal)
        !           157:     Display    *dpy;
        !           158:     XrmValue   fromVal;
        !           159:     XrmValue   *toVal;
        !           160: {
        !           161:     done(&((Geometry *)fromVal.addr)->dims, Dims);
        !           162: };
        !           163: 
        !           164: 
        !           165: /*ARGSUSED*/
        !           166: static void CvtStringToDisplay(dpy, fromVal, toVal)
        !           167:     Display    *dpy;
        !           168:     XrmValue   fromVal;
        !           169:     XrmValue   *toVal;
        !           170: {
        !           171:     static Display     *d;
        !           172: 
        !           173:     d = XOpenDisplay((char *)fromVal.addr);
        !           174:     if (d != NULL) { done(d, Display); }
        !           175: };
        !           176: 
        !           177: 
        !           178: /*ARGSUSED*/
        !           179: static void CvtStringToFile(dpy, fromVal, toVal)
        !           180:     Display    *dpy;
        !           181:     XrmValue   fromVal;
        !           182:     XrmValue   *toVal;
        !           183: {
        !           184:     static FILE        *f;
        !           185: 
        !           186:     f = fopen((char *)fromVal.addr, "r");
        !           187:     if (f != NULL) { done(f, FILE); }
        !           188: };
        !           189: 
        !           190: 
        !           191: /*ARGSUSED*/
        !           192: static void CvtStringToFont(dpy, fromVal, toVal)
        !           193:     Display    *dpy;
        !           194:     XrmValue   fromVal;
        !           195:     XrmValue   *toVal;
        !           196: {
        !           197:     static Font        f;
        !           198: 
        !           199:     f = XLoadFont(dpy, (char *)fromVal.addr);
        !           200:     if (f != 0) { done(&f, Font); }
        !           201: }
        !           202: 
        !           203: 
        !           204: /*ARGSUSED*/
        !           205: static void CvtIntToFont(dpy, fromVal, toVal)
        !           206:     Display    *dpy;
        !           207:     XrmValue   fromVal;
        !           208:     XrmValue   *toVal;
        !           209: {
        !           210:     done(fromVal.addr, int);
        !           211: };
        !           212: 
        !           213: 
        !           214: /*ARGSUSED*/
        !           215: static void CvtStringToFontStruct(dpy, fromVal, toVal)
        !           216:     Display    *dpy;
        !           217:     XrmValue   fromVal;
        !           218:     XrmValue   *toVal;
        !           219: {
        !           220:     static XFontStruct *f;
        !           221: 
        !           222:     f = XLoadQueryFont(dpy, (char *)fromVal.addr);
        !           223:     if (f != NULL) { done(&f, XFontStruct *); }
        !           224: }
        !           225: 
        !           226: /*ARGSUSED*/
        !           227: static void CvtStringToGeometry(dpy, fromVal, toVal)
        !           228:     Display    *dpy;
        !           229:     XrmValue   fromVal;
        !           230:     XrmValue   *toVal;
        !           231: {
        !           232:     static Geometry    g;
        !           233:     int                        i;
        !           234: 
        !           235:     g.pos.xpos = g.pos.ypos = g.dims.width = g.dims.height = 0;
        !           236:     i = XParseGeometry((char *) fromVal.addr,
        !           237:            &g.pos.xpos, &g.pos.ypos, &g.dims.width, &g.dims.height);
        !           238:     if (i == NoValue) return;
        !           239:     if (i & XNegative)
        !           240:        g.pos.xpos = DisplayWidth(dpy, DefaultScreen(dpy))-1-g.pos.xpos;
        !           241:     if (i & YNegative)
        !           242:        g.pos.ypos = DisplayHeight(dpy, DefaultScreen(dpy))-1-g.pos.ypos;
        !           243:     done(&g, Geometry);
        !           244: };
        !           245: 
        !           246: 
        !           247: /*ARGSUSED*/
        !           248: static void CvtStringToInt(dpy, fromVal, toVal)
        !           249:     Display    *dpy;
        !           250:     XrmValue   fromVal;
        !           251:     XrmValue   *toVal;
        !           252: {
        !           253:     static int i;
        !           254: 
        !           255:     if (sscanf((char *)fromVal.addr, "%d", &i) == 1) { done(&i, int); }
        !           256: }
        !           257: 
        !           258: 
        !           259: /*ARGSUSED*/
        !           260: static void CvtStringToPixel(dpy, fromVal, toVal)
        !           261:     Display    *dpy;
        !           262:     XrmValue   fromVal;
        !           263:     XrmValue   *toVal;
        !           264: {
        !           265:     _XrmConvert(dpy, XrmQString, fromVal, XrmQColor, toVal);
        !           266:     if ((*toVal).addr == NULL) return;
        !           267:     done(&((XColor *)((*toVal).addr))->pixel, int)
        !           268: };
        !           269: 
        !           270: 
        !           271: /*ARGSUSED*/
        !           272: static void CvtXColorToPixel(dpy, fromVal, toVal)
        !           273:     Display    *dpy;
        !           274:     XrmValue   fromVal;
        !           275:     XrmValue   *toVal;
        !           276: {
        !           277:     done(&((XColor *)fromVal.addr)->pixel, int);
        !           278: };
        !           279: 
        !           280: 
        !           281: /*ARGSUSED*/
        !           282: static void CvtIntToPixel(dpy, fromVal, toVal)
        !           283:     Display    *dpy;
        !           284:     XrmValue   fromVal;
        !           285:     XrmValue   *toVal;
        !           286: {
        !           287:        done(fromVal.addr, int);
        !           288: };
        !           289: 
        !           290: 
        !           291: /*ARGSUSED*/
        !           292: static void CvtStringToPixmap(dpy, fromVal, toVal)
        !           293:     Display    *dpy;
        !           294:     XrmValue   fromVal;
        !           295:     XrmValue   *toVal;
        !           296: {
        !           297:     XrmValue   pixelVal;
        !           298: 
        !           299:     _XrmConvert(dpy, XrmQString, fromVal, XrmQPixel, &pixelVal);
        !           300:     if (pixelVal.addr == NULL) return;
        !           301:     _XrmConvert(dpy, XrmQPixel, pixelVal, XrmQPixmap, toVal);
        !           302: }
        !           303: 
        !           304: 
        !           305: static Bool initialized = False;
        !           306: 
        !           307: void XrmInitialize()
        !           308: {
        !           309:     if (initialized)
        !           310:        return;
        !           311:     initialized = True;
        !           312: 
        !           313:     _XrmRegisterTypeConverter(XrmQColor, XrmQPixel,    CvtXColorToPixel);
        !           314: 
        !           315:     _XrmRegisterTypeConverter(XrmQGeometry, XrmQDims,  CvtGeometryToDims);
        !           316: 
        !           317:     _XrmRegisterTypeConverter(XrmQInt,         XrmQBoolean,    CvtIntToBoolean);
        !           318:     _XrmRegisterTypeConverter(XrmQInt,         XrmQPixel,      CvtIntToPixel);
        !           319:     _XrmRegisterTypeConverter(XrmQInt,         XrmQFont,       CvtIntToFont);
        !           320:     _XrmRegisterTypeConverter(XrmQInt,         XrmQColor,      CvtIntOrPixelToXColor);
        !           321: 
        !           322:     _XrmRegisterTypeConverter(XrmQString, XrmQBoolean, CvtStringToBoolean);
        !           323:     _XrmRegisterTypeConverter(XrmQString, XrmQColor,   CvtStringToXColor);
        !           324:     _XrmRegisterTypeConverter(XrmQString, XrmQDisplay, CvtStringToDisplay);
        !           325:     _XrmRegisterTypeConverter(XrmQString, XrmQFile,    CvtStringToFile);
        !           326:     _XrmRegisterTypeConverter(XrmQString, XrmQFont,    CvtStringToFont);
        !           327:     _XrmRegisterTypeConverter(XrmQString, XrmQFontStruct,      CvtStringToFontStruct);
        !           328:     _XrmRegisterTypeConverter(XrmQString, XrmQGeometry,        CvtStringToGeometry);
        !           329:     _XrmRegisterTypeConverter(XrmQString, XrmQInt,     CvtStringToInt);
        !           330:     _XrmRegisterTypeConverter(XrmQString, XrmQPixel,   CvtStringToPixel);
        !           331:     _XrmRegisterTypeConverter(XrmQString, XrmQPixmap,  CvtStringToPixmap);
        !           332: 
        !           333:     _XrmRegisterTypeConverter(XrmQPixel, XrmQColor,    CvtIntOrPixelToXColor);
        !           334: 
        !           335: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.