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

1.1     ! root        1: /* $Header: Conversion.c,v 1.2 87/09/12 12:34:55 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(screen, fromVal, toVal)
        !            82:     Screen     *screen;
        !            83:     XrmValuePtr        fromVal;
        !            84:     XrmValuePtr        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(screen, fromVal, toVal)
        !            95:     Screen     *screen;
        !            96:     XrmValuePtr        fromVal;
        !            97:     XrmValuePtr        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(screen, fromVal, toVal)
        !           118:     Screen     *screen;
        !           119:     XrmValuePtr        fromVal;
        !           120:     XrmValuePtr        toVal;
        !           121: {    
        !           122:     static XColor      c;
        !           123: 
        !           124:     if (DefaultVisualOfScreen(screen)->class == StaticGray)
        !           125:        return;
        !           126: 
        !           127:     c.pixel = *(int *)fromVal->addr;
        !           128:     XQueryColor(DisplayOfScreen(screen),
        !           129:        DefaultColormapOfScreen(screen), &c);
        !           130:                                /* !!! Need some error checking ... ||| */
        !           131:     done(&c, XColor);
        !           132: };
        !           133: 
        !           134: 
        !           135: /*ARGSUSED*/
        !           136: static void CvtStringToXColor(screen, fromVal, toVal)
        !           137:     Screen     *screen;
        !           138:     XrmValuePtr        fromVal;
        !           139:     XrmValuePtr        toVal;
        !           140: {
        !           141:     static XColor      c;
        !           142:     Status             s;
        !           143: 
        !           144:     if (DefaultVisualOfScreen(screen)->class == StaticGray)
        !           145:        return;
        !           146: 
        !           147:     s = XParseColor(DisplayOfScreen(screen), DefaultColormapOfScreen(screen),
        !           148:                        (char *)fromVal->addr, &c);
        !           149:     if (s == 0) return;
        !           150:     s = XAllocColor(DisplayOfScreen(screen), DefaultColormapOfScreen(screen), &c);
        !           151:     if (s == 0) return;
        !           152:     done(&c, XColor);
        !           153: };
        !           154: 
        !           155: 
        !           156: /*ARGSUSED*/
        !           157: static void CvtGeometryToDims(screen, fromVal, toVal)
        !           158:     Screen     *screen;
        !           159:     XrmValuePtr        fromVal;
        !           160:     XrmValuePtr        toVal;
        !           161: {
        !           162:     done(&((Geometry *)fromVal->addr)->dims, Dims);
        !           163: };
        !           164: 
        !           165: 
        !           166: /*ARGSUSED*/
        !           167: static void CvtStringToDisplay(screen, fromVal, toVal)
        !           168:     Screen     *screen;
        !           169:     XrmValuePtr        fromVal;
        !           170:     XrmValuePtr        toVal;
        !           171: {
        !           172:     static Display     *d;
        !           173: 
        !           174:     d = XOpenDisplay((char *)fromVal->addr);
        !           175:     if (d != NULL) { done(d, Display); }
        !           176: };
        !           177: 
        !           178: 
        !           179: /*ARGSUSED*/
        !           180: static void CvtStringToFile(screen, fromVal, toVal)
        !           181:     Screen     *screen;
        !           182:     XrmValuePtr        fromVal;
        !           183:     XrmValuePtr        toVal;
        !           184: {
        !           185:     static FILE        *f;
        !           186: 
        !           187:     f = fopen((char *)fromVal->addr, "r");
        !           188:     if (f != NULL) { done(f, FILE); }
        !           189: };
        !           190: 
        !           191: 
        !           192: /*ARGSUSED*/
        !           193: static void CvtStringToFont(screen, fromVal, toVal)
        !           194:     Screen     *screen;
        !           195:     XrmValuePtr        fromVal;
        !           196:     XrmValuePtr        toVal;
        !           197: {
        !           198:     static Font        f;
        !           199: 
        !           200:     f = XLoadFont(DisplayOfScreen(screen), (char *)fromVal->addr);
        !           201:     if (f != 0) { done(&f, Font); }
        !           202: }
        !           203: 
        !           204: 
        !           205: /*ARGSUSED*/
        !           206: static void CvtIntToFont(screen, fromVal, toVal)
        !           207:     Screen     *screen;
        !           208:     XrmValuePtr        fromVal;
        !           209:     XrmValuePtr        toVal;
        !           210: {
        !           211:     done(fromVal->addr, int);
        !           212: };
        !           213: 
        !           214: 
        !           215: /*ARGSUSED*/
        !           216: static void CvtStringToFontStruct(screen, fromVal, toVal)
        !           217:     Screen     *screen;
        !           218:     XrmValuePtr        fromVal;
        !           219:     XrmValuePtr        toVal;
        !           220: {
        !           221:     static XFontStruct *f;
        !           222: 
        !           223:     f = XLoadQueryFont(DisplayOfScreen(screen), (char *)fromVal->addr);
        !           224:     if (f != NULL) { done(&f, XFontStruct *); }
        !           225: }
        !           226: 
        !           227: /*ARGSUSED*/
        !           228: static void CvtStringToGeometry(screen, fromVal, toVal)
        !           229:     Screen     *screen;
        !           230:     XrmValuePtr        fromVal;
        !           231:     XrmValuePtr        toVal;
        !           232: {
        !           233:     static Geometry    g;
        !           234:     int                        i;
        !           235: 
        !           236:     g.pos.xpos = g.pos.ypos = g.dims.width = g.dims.height = 0;
        !           237:     i = XParseGeometry((char *) fromVal->addr,
        !           238:            &g.pos.xpos, &g.pos.ypos, &g.dims.width, &g.dims.height);
        !           239:     if (i == NoValue) return;
        !           240:     if (i & XNegative)
        !           241:        g.pos.xpos = WidthOfScreen(screen)-1-g.pos.xpos;
        !           242:     if (i & YNegative)
        !           243:        g.pos.ypos = HeightOfScreen(screen)-1-g.pos.ypos;
        !           244:     done(&g, Geometry);
        !           245: };
        !           246: 
        !           247: 
        !           248: /*ARGSUSED*/
        !           249: static void CvtStringToInt(screen, fromVal, toVal)
        !           250:     Screen     *screen;
        !           251:     XrmValuePtr        fromVal;
        !           252:     XrmValuePtr        toVal;
        !           253: {
        !           254:     static int i;
        !           255: 
        !           256:     if (sscanf((char *)fromVal->addr, "%d", &i) == 1) { done(&i, int); }
        !           257: }
        !           258: 
        !           259: 
        !           260: /*ARGSUSED*/
        !           261: static void CvtStringToPixel(screen, fromVal, toVal)
        !           262:     Screen     *screen;
        !           263:     XrmValuePtr        fromVal;
        !           264:     XrmValuePtr        toVal;
        !           265: {
        !           266:     _XrmConvert(screen, XrmQString, fromVal, XrmQColor, toVal);
        !           267:     if ((*toVal).addr == NULL) return;
        !           268:     done(&((XColor *)((*toVal).addr))->pixel, int)
        !           269: };
        !           270: 
        !           271: 
        !           272: /*ARGSUSED*/
        !           273: static void CvtXColorToPixel(screen, fromVal, toVal)
        !           274:     Screen     *screen;
        !           275:     XrmValuePtr        fromVal;
        !           276:     XrmValuePtr        toVal;
        !           277: {
        !           278:     done(&((XColor *)fromVal->addr)->pixel, int);
        !           279: };
        !           280: 
        !           281: 
        !           282: /*ARGSUSED*/
        !           283: static void CvtIntToPixel(screen, fromVal, toVal)
        !           284:     Screen     *screen;
        !           285:     XrmValuePtr        fromVal;
        !           286:     XrmValuePtr        toVal;
        !           287: {
        !           288:        done(fromVal->addr, int);
        !           289: };
        !           290: 
        !           291: 
        !           292: /*ARGSUSED*/
        !           293: static void CvtStringToPixmap(screen, fromVal, toVal)
        !           294:     Screen     *screen;
        !           295:     XrmValuePtr        fromVal;
        !           296:     XrmValuePtr        toVal;
        !           297: {
        !           298:     XrmValue   pixelVal;
        !           299: 
        !           300:     _XrmConvert(screen, XrmQString, fromVal, XrmQPixel, &pixelVal);
        !           301:     if (pixelVal.addr == NULL) return;
        !           302:     _XrmConvert(screen, XrmQPixel, &pixelVal, XrmQPixmap, toVal);
        !           303: }
        !           304: 
        !           305: 
        !           306: static Bool initialized = False;
        !           307: 
        !           308: void XrmInitialize()
        !           309: {
        !           310:     if (initialized)
        !           311:        return;
        !           312:     initialized = True;
        !           313: 
        !           314:     _XrmRegisterTypeConverter(XrmQColor, XrmQPixel,    CvtXColorToPixel);
        !           315: 
        !           316:     _XrmRegisterTypeConverter(XrmQGeometry, XrmQDims,  CvtGeometryToDims);
        !           317: 
        !           318:     _XrmRegisterTypeConverter(XrmQInt,         XrmQBoolean,    CvtIntToBoolean);
        !           319:     _XrmRegisterTypeConverter(XrmQInt,         XrmQPixel,      CvtIntToPixel);
        !           320:     _XrmRegisterTypeConverter(XrmQInt,         XrmQFont,       CvtIntToFont);
        !           321:     _XrmRegisterTypeConverter(XrmQInt,         XrmQColor,      CvtIntOrPixelToXColor);
        !           322: 
        !           323:     _XrmRegisterTypeConverter(XrmQString, XrmQBoolean, CvtStringToBoolean);
        !           324:     _XrmRegisterTypeConverter(XrmQString, XrmQColor,   CvtStringToXColor);
        !           325:     _XrmRegisterTypeConverter(XrmQString, XrmQDisplay, CvtStringToDisplay);
        !           326:     _XrmRegisterTypeConverter(XrmQString, XrmQFile,    CvtStringToFile);
        !           327:     _XrmRegisterTypeConverter(XrmQString, XrmQFont,    CvtStringToFont);
        !           328:     _XrmRegisterTypeConverter(XrmQString, XrmQFontStruct,      CvtStringToFontStruct);
        !           329:     _XrmRegisterTypeConverter(XrmQString, XrmQGeometry,        CvtStringToGeometry);
        !           330:     _XrmRegisterTypeConverter(XrmQString, XrmQInt,     CvtStringToInt);
        !           331:     _XrmRegisterTypeConverter(XrmQString, XrmQPixel,   CvtStringToPixel);
        !           332:     _XrmRegisterTypeConverter(XrmQString, XrmQPixmap,  CvtStringToPixmap);
        !           333: 
        !           334:     _XrmRegisterTypeConverter(XrmQPixel, XrmQColor,    CvtIntOrPixelToXColor);
        !           335: 
        !           336: }
        !           337: 
        !           338: #ifndef lint
        !           339: /*
        !           340:  * This hack is to pull in the right error description code from
        !           341:  * the resource manager library if you have a load line:
        !           342:  *     cc -o foo *.o -loldRm -lX
        !           343:  * or
        !           344:  *     cc -o foo *.o -lnewRm -lX
        !           345:  * This should be removed as soon as the resource manager makes its way
        !           346:  * into Xlib.
        !           347:  */
        !           348: static kludge()
        !           349: {
        !           350:        XGetErrorText();
        !           351: }
        !           352: #endif /* lint */

unix.superglobalmegacorp.com

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