Annotation of researchv9/X11/src/X.V11R1/lib/Xtk/Resources.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char rcsid[] = "$Header: Resources.c,v 1.15 87/09/13 20:49:22 newman Exp $";
                      3: #endif lint
                      4: 
                      5: /*
                      6:  * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
                      7:  * 
                      8:  *                         All Rights Reserved
                      9:  * 
                     10:  * Permission to use, copy, modify, and distribute this software and its 
                     11:  * documentation for any purpose and without fee is hereby granted, 
                     12:  * provided that the above copyright notice appear in all copies and that
                     13:  * both that copyright notice and this permission notice appear in 
                     14:  * supporting documentation, and that the name of Digital Equipment
                     15:  * Corporation not be used in advertising or publicity pertaining to
                     16:  * distribution of the software without specific, written prior permission.  
                     17:  * 
                     18:  * 
                     19:  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
                     20:  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
                     21:  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
                     22:  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
                     23:  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
                     24:  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
                     25:  * SOFTWARE.
                     26:  */
                     27: /* Converted to classing toolkit on 28 August 1987 by Joel McCormack */
                     28: 
                     29: /* XtResourceList.c -- compile and process resource lists. */
                     30: 
                     31: 
                     32: #include "Intrinsic.h"
                     33: #include "Atoms.h"
                     34: /*#include "Xresource.h"*/
                     35: #include <stdio.h>
                     36: 
                     37: 
                     38: #ifdef reverseVideoHack
                     39: static XrmName QreverseVideo;
                     40: #endif
                     41: static XrmClass        QBoolean, QString;
                     42: 
                     43: extern void bcopy();
                     44: 
                     45: static void CopyFromArg(src, dst, size)
                     46:     XtArgVal src, dst;
                     47:     register unsigned int size;
                     48: {
                     49:     if (size == sizeof(XtArgVal))
                     50:        *(XtArgVal *)dst = src;
                     51: #ifdef BIGENDIAN
                     52:     else if (size == sizeof(short)) 
                     53:        *(short *)dst = (short)src;
                     54: #endif BIGENDIAN
                     55:     else if (size < sizeof(XtArgVal))
                     56:        bcopy((char *) &src, (char *) dst, (int) size);
                     57:     else
                     58:        bcopy((char *) src, (char *) dst, (int) size);
                     59: 
                     60: }
                     61: 
                     62: static void CopyToArg(src, dst, size)
                     63:     XtArgVal src, *dst;
                     64:     register unsigned int size;
                     65: {
                     66:     if (size == sizeof(XtArgVal))
                     67:        *dst = *(XtArgVal *)src;
                     68: #ifdef BIGENDIAN
                     69:     else if (size == sizeof(short)) 
                     70:        *dst = (XtArgVal) *((short *) src);
                     71: #endif BIGENDIAN
                     72:     else if (size < sizeof(XtArgVal))
                     73:        bcopy((char *) src, (char *) dst, (int) size);
                     74:     else
                     75:        bcopy((char *) src, (char *) *dst, (int) size);
                     76: 
                     77: }
                     78: 
                     79: static void PrintResourceList(list, count)
                     80:     register XtResourceList list;
                     81:     register int count;
                     82: {
                     83:     for (; --count >= 0; list++) {
                     84:         (void) printf("    name: %s, class: %s, type: %s,\n",
                     85:            list->resource_name, list->resource_class, list->resource_type);
                     86:        (void) printf("    size: %d, offset: %x, def_type: %s, def_addr: %x\n",
                     87:            list->resource_size, list->resource_offset,
                     88:            list->default_type, list->default_addr);
                     89:     }
                     90: }
                     91: 
                     92: static Cardinal GetNamesAndClasses(w, names, classes)
                     93:     register Widget      w;
                     94:     register XrmNameList  names;
                     95:     register XrmClassList classes;
                     96: {
                     97:     register Cardinal length, j;
                     98:     register XrmQuark t;
                     99: 
                    100:     for (length = 0; w != NULL; w = (Widget) w->core.parent) {
                    101:        names[length] = w->core.xrm_name;
                    102:        classes[length] = w->core.widget_class->core_class.xrm_class;
                    103:        length++;
                    104:      }
                    105:     /* They're in backwards order, flop them around */
                    106:     for (j = 0; j < length/2; j++) {
                    107:        t = names[j];
                    108:        names[j] = names[length-j-1];
                    109:        names[length-j-1] = t;
                    110:         t = classes[j];
                    111:        classes[j] = classes[length-j-1];
                    112:        classes[length-j-1] = t;
                    113:     }
                    114:     return length;
                    115: }
                    116: 
                    117: 
                    118: /* Spiffy fast compiled form of resource list.                         */
                    119: /* XtResourceLists are compiled in-place into XrmResourceLists         */
                    120: /* All atoms are replaced by quarks, and offsets are -offset-1 to      */
                    121: /* indicate that this list has been compiled already                   */
                    122: 
                    123: typedef struct {
                    124:     XrmQuark   xrm_name;         /* Resource name quark                */
                    125:     XrmQuark   xrm_class;        /* Resource class quark               */
                    126:     XrmQuark   xrm_type;         /* Resource representation type quark */
                    127:     Cardinal   xrm_size;         /* Size in bytes of representation    */
                    128:     long int   xrm_offset;       /* -offset-1                          */
                    129:     XrmQuark   xrm_default_type; /* Default representation type quark  */
                    130:     caddr_t    xrm_default_addr; /* Default resource address           */
                    131: } XrmResource, *XrmResourceList;
                    132: 
                    133: static XrmCompileResourceList(resources, num_resources)
                    134:     register XtResourceList resources;
                    135:             Cardinal     num_resources;
                    136: {
                    137:     register XrmResourceList xrmres;
                    138:     register Cardinal count;
                    139: 
                    140:     for (xrmres = (XrmResourceList) resources, count = 0;
                    141:          count < num_resources;
                    142:         xrmres++, resources++, count++) {
                    143:        xrmres->xrm_name         = StringToName(resources->resource_name);
                    144:        xrmres->xrm_class        = StringToClass(resources->resource_class);
                    145:        xrmres->xrm_type         = StringToQuark(resources->resource_type);
                    146:        xrmres->xrm_size         = resources->resource_size;
                    147:         xrmres->xrm_offset      = -resources->resource_offset - 1;
                    148:        xrmres->xrm_default_type = StringToQuark(resources->default_type);
                    149:        xrmres->xrm_default_addr = resources->default_addr;
                    150:     }
                    151: 
                    152: } /* XrmCompileResourceList */
                    153: 
                    154: /* ||| References to display should be references to screen */
                    155: 
                    156: static void XrmGetResources(
                    157:     dpy, base, names, classes, length, resources, num_resources, args, num_args)
                    158: 
                    159:     Display      *dpy;            /* The widget's display connection     */
                    160:     caddr_t      base;            /* Base address of memory to write to  */
                    161:     register XrmNameList names;           /* Full inheritance name of widget     */
                    162:     register XrmClassList classes; /* Full inheritance class of widget           */
                    163:     Cardinal     length;          /* Number of entries in names, classes */
                    164:     XtResourceList  resources;    /* The list of resources required.     */
                    165:     Cardinal     num_resources;   /* number of items in resource list    */
                    166:     ArgList      args;            /* ArgList to override resources       */
                    167:     Cardinal     num_args;        /* number of items in arg list         */
                    168: {
                    169:     register   ArgList         arg;
                    170:     register   XrmName         argName;
                    171:                XrmResourceList xrmres;
                    172:     register   XrmResourceList res;
                    173:                XrmValue        val, defaultVal;
                    174:     register   int             j;
                    175:                int             i;
                    176:                XrmHashTable    searchList[100];
                    177:     static     Boolean         found[1000];
                    178: 
                    179: #ifdef reverseVideoHack
                    180:                Boolean         reverseVideo, getReverseVideo;
                    181: 
                    182:     reverseVideo    = FALSE;
                    183:     getReverseVideo = TRUE;
                    184: #endif
                    185: 
                    186:     /* ||| This should be passed a compiled arg list, too, but such has to
                    187:        be allocated dynamically */
                    188: 
                    189:     /* ||| Should be warnings? or error? */
                    190:     if ((args == NULL) && (num_args != 0)) {
                    191:        XtError("argument count > 0 on NULL argument list");
                    192:        num_args = 0;
                    193:     }
                    194:     if ((resources == NULL) && (num_resources != 0)) {
                    195:        XtError("resource count > 0 on NULL resource list");
                    196:        return;
                    197:     }
                    198: 
                    199:     if (num_resources != 0) {
                    200:        /* Compile resource list if needed */
                    201:        if (((int)resources->resource_offset) >= 0) {
                    202:            XrmCompileResourceList(resources, num_resources);
                    203:        }
                    204:        xrmres = (XrmResourceList) resources;
                    205: 
                    206:        /* Mark each resource as not found on arg list */
                    207:        for (j = 0; j < num_resources; j++) {
                    208:            found[j] = FALSE;
                    209:        }
                    210: 
                    211:        /* Copy the args into the resources, mark each as found */
                    212:        for (arg = args, i = 0; i < num_args; i++, arg++) {
                    213:            argName = StringToName(arg->name);
                    214: #ifdef reverseVideoHack
                    215:            if (argName == QreverseVideo) {
                    216:                reverseVideo = (Boolean) arg->value;
                    217:                getReverseVideo = FALSE;
                    218:            } else
                    219: #endif
                    220:                for (j = 0, res = xrmres; j < num_resources; j++, res++) {
                    221:                    if (argName == res->xrm_name) {
                    222:                        CopyFromArg(
                    223:                            arg->value,
                    224:                            (XtArgVal) base - res->xrm_offset - 1,
                    225:                            res->xrm_size);
                    226:                        found[j] = TRUE;
                    227:                        break;
                    228:                    }
                    229:                }
                    230:        }
                    231:     }
                    232: 
                    233:     /* Resources name and class will go into names[length], classes[length] */
                    234:     names[length+1]   = NULLQUARK;
                    235:     classes[length+1] = NULLQUARK;
                    236: 
                    237: #ifdef reverseVideoHack
                    238:     if (XDisplayCells(dpy, DefaultScreen(dpy)) > 2) {
                    239:        /* Color box, ignore ReverseVideo */
                    240:        reverseVideo = FALSE;
                    241:     } else if (getReverseVideo) {
                    242:        names[length] = QreverseVideo;
                    243:        classes[length] = QBoolean;
                    244:        XrmGetResource(dpy, names, classes, QBoolean, &val);
                    245:        if (val.addr)
                    246:            reverseVideo = *((Boolean *) val.addr);
                    247:     }
                    248:     /* ||| Nothing is done w/reverseVideo now, but something should be! */
                    249: #endif
                    250: 
                    251:     names[length] = NULLQUARK;
                    252:     classes[length] = NULLQUARK;
                    253: 
                    254:     if (num_resources != 0) {
                    255: 
                    256:        /* Ask resource manager for a list of database levels that we can
                    257:           do a single-level search on each resource */
                    258: 
                    259:        XrmGetSearchList(names, classes, searchList);
                    260:        
                    261:        /* go to the resource manager for those resources not found yet */
                    262:        /* if it's not in the resource database use the default value   */
                    263:     
                    264:        for (res = xrmres, j = 0; j < num_resources; j++, res++) {
                    265:            if (! found[j]) {
                    266:                XrmGetSearchResource(dpy, searchList, res->xrm_name,
                    267:                 res->xrm_class, res->xrm_type, &val);
                    268: /*
                    269:                if (val.addr == NULL && res->xrm_default_addr != NULL) {
                    270: */
                    271:                if (val.addr == NULL) {
                    272:                    /* Convert default value to proper type */
                    273:                    defaultVal.addr = res->xrm_default_addr;
                    274:                    defaultVal.size = sizeof(caddr_t);
                    275:                    _XrmConvert(dpy, res->xrm_default_type, defaultVal, 
                    276:                        res->xrm_type, &val);
                    277:                }
                    278:                if (val.addr) {
                    279:                    if (res->xrm_type == QString) {
                    280:                        *((caddr_t *)(base - res->xrm_offset - 1)) = val.addr;
                    281: #ifdef BIGENDIAN
                    282: /* ||| Why? This should be handled by string to short, etc. conversions */
                    283:                    } else if (res->xrm_size == sizeof(short)) {
                    284:                        *(short *) (base - res->xrm_offset - 1) =
                    285:                                (short)*((int *)val.addr);
                    286: #endif BIGENDIAN
                    287:                    } else {
                    288:                        bcopy(
                    289:                            (char *) val.addr,
                    290:                            (char *) (base - res->xrm_offset - 1), 
                    291:                            (int) res->xrm_size);
                    292:                    }
                    293:                } else if (res->xrm_default_addr != NULL) {
                    294:                    bcopy(
                    295:                        (char *) res->xrm_default_addr,
                    296:                        (char *) (base - res->xrm_offset - 1),
                    297:                        (int) res->xrm_size);
                    298:                } else {
                    299:                   /* didn't find a default value, initialize to NULL... */
                    300:                   bzero(
                    301:                       (char *) (base - res->xrm_offset - 1),
                    302:                       (int) res->xrm_size);
                    303:                }
                    304:            }
                    305:        }
                    306:     }
                    307: }
                    308: 
                    309: static void GetResources(widgetClass, w, names, classes, length, args, num_args)
                    310:     WidgetClass          widgetClass;
                    311:     Widget       w;
                    312:     XrmNameList          names;
                    313:     XrmClassList  classes;
                    314:     Cardinal     length;
                    315:     ArgList      args;
                    316:     Cardinal     num_args;
                    317: {
                    318:     /* First get resources for superclasses */
                    319:     if (widgetClass->core_class.superclass != NULL) {
                    320:         GetResources(widgetClass->core_class.superclass,
                    321:            w, names, classes, length, args, num_args);
                    322:     }
                    323:     /* Then for this class */
                    324:     XrmGetResources(XtDisplay(w), (caddr_t) w, names, classes, length,
                    325:         widgetClass->core_class.resources, widgetClass->core_class.num_resources,
                    326:        args, num_args);
                    327: } /* GetResources */
                    328: 
                    329: 
                    330: void XtGetResources(w, args, num_args)
                    331:     register   Widget    w;
                    332:                ArgList   args;
                    333:                Cardinal  num_args;
                    334: {
                    335:     XrmName    names[100];
                    336:     XrmClass   classes[100];
                    337:     Cardinal   length;
                    338: 
                    339:     /* Make sure xrm_class, xrm_name are valid */
                    340:     if (w->core.widget_class->core_class.xrm_class == NULLQUARK) {
                    341:         w->core.widget_class->core_class.xrm_class =
                    342:            StringToClass(w->core.widget_class->core_class.class_name);
                    343:     }
                    344:     w->core.xrm_name = StringToName(w->core.name);
                    345: 
                    346:     /* Get names, classes for widget on up */
                    347:     length = GetNamesAndClasses(w, names, classes);
                    348:    
                    349:     /* Get resources starting at CorePart on down to this widget */
                    350:     GetResources(w->core.widget_class, w, names, classes, length,
                    351:         args, num_args);
                    352: } /* XtGetResources */
                    353: 
                    354: void XtGetSubresources
                    355:        (w, base, name, class, resources, num_resources, args, num_args)
                    356:     Widget       w;              /* Widget "parent" of subobject */
                    357:     caddr_t      base;           /* Base address to write to     */
                    358:     String       name;           /* name of subobject            */
                    359:     String       class;          /* class of subobject           */
                    360:     XtResourceList  resources;   /* resource list for subobject  */
                    361:     Cardinal     num_resources;
                    362:     ArgList      args;           /* arg list to override resources */
                    363:     Cardinal     num_args;
                    364: {
                    365:     XrmName      names[100];
                    366:     XrmClass     classes[100];
                    367:     Cardinal     length;
                    368: 
                    369:     /* Get full name, class of subobject */
                    370:     length = GetNamesAndClasses(w, names, classes);
                    371:     names[length] = StringToName(name);
                    372:     classes[length] = StringToClass(class);
                    373:     length++;
                    374: 
                    375:     /* Fetch resources */
                    376:     XrmGetResources(XtDisplay(w), base, names, classes, length,
                    377:         resources, num_resources, args, num_args);
                    378: }
                    379: 
                    380: 
                    381: static void XrmGetValues(base, resources, num_resources, args, num_args)
                    382:   caddr_t              base;           /* Base address to fetch values from */
                    383:   register XtResourceList resources;   /* The current resource values.      */
                    384:   register Cardinal    num_resources;  /* number of items in resources      */
                    385:   ArgList              args;           /* The resource values requested     */
                    386:   Cardinal             num_args;       /* number of items in arg list       */
                    387: {
                    388:     register ArgList           arg;
                    389:     register XrmResourceList   xrmres;
                    390:     register int               i;
                    391:     register XrmName           argName;
                    392: 
                    393:     if (num_resources == 0) return;
                    394: 
                    395:     /* Resource lists are assumed to be in compiled form already via the
                    396:        initial XtGetResources, XtGetSubresources calls */
                    397: 
                    398:     for (arg = args ; num_args != 0; num_args--, arg++) {
                    399:        argName = StringToName(arg->name);
                    400:        for (xrmres = (XrmResourceList) resources, i = 0;
                    401:             i < num_resources;
                    402:             i++, xrmres++) {
                    403:            if (argName == xrmres->xrm_name) {
                    404:                CopyToArg(
                    405:                    (XtArgVal) base - xrmres->xrm_offset - 1,
                    406:                    &arg->value,
                    407:                    xrmres->xrm_size);
                    408:                break;
                    409:            }
                    410:        }
                    411:     }
                    412: }
                    413: 
                    414: static void GetValues(widgetClass, w, args, num_args)
                    415:     WidgetClass          widgetClass;
                    416:     Widget       w;
                    417:     ArgList      args;
                    418:     Cardinal     num_args;
                    419: {
                    420:     /* First get resource values for superclass */
                    421:     if (widgetClass->core_class.superclass != NULL) {
                    422:         GetValues(widgetClass->core_class.superclass, w, args, num_args);
                    423:     }
                    424:     /* Then for this class */
                    425:     XrmGetValues(
                    426:        (caddr_t) w,
                    427:         widgetClass->core_class.resources,
                    428:        widgetClass->core_class.num_resources,
                    429:        args, num_args);
                    430: } /* GetValues */
                    431: 
                    432: void XtGetValues(w, args, num_args)
                    433:                Widget    w;
                    434:                ArgList   args;
                    435:                Cardinal  num_args;
                    436: {
                    437:     if (num_args == 0) return;
                    438:     if ((args == NULL) && (num_args != 0)) {
                    439:        XtError("argument count > 0 on NULL argument list");
                    440:        return;
                    441:     }
                    442:     /* Get resource values starting at CorePart on down to this widget */
                    443:     GetValues(w->core.widget_class, w, args, num_args);
                    444: } /* XtGetValues */
                    445:  
                    446: static void XrmSetValues(base, resources, num_resources, args, num_args)
                    447:   caddr_t              base;           /* Base address to write values to   */
                    448:   register XtResourceList resources;   /* The current resource values.      */
                    449:   register Cardinal    num_resources;  /* number of items in resources      */
                    450:   ArgList              args;           /* The resource values to set        */
                    451:   Cardinal             num_args;       /* number of items in arg list       */
                    452: {
                    453:     register ArgList           arg;
                    454:     register XrmResourceList   xrmres;
                    455:     register int               i;
                    456:     register XrmName           argName;
                    457: 
                    458:     if (num_resources == 0) return;
                    459: 
                    460:     /* Resource lists are assumed to be in compiled form already via the
                    461:        initial XtGetResources, XtGetSubresources calls */
                    462: 
                    463:     for (arg = args ; num_args != 0; num_args--, arg++) {
                    464:        argName = StringToName(arg->name);
                    465:        for (xrmres = (XrmResourceList) resources, i = 0;
                    466:             i < num_resources;
                    467:             i++, xrmres++) {
                    468:            if (argName == xrmres->xrm_name) {
                    469:                CopyFromArg(arg->value,
                    470:                            (XtArgVal) base - xrmres->xrm_offset - 1,
                    471:                            xrmres->xrm_size);
                    472:                break;
                    473:            }
                    474:        }
                    475:     }
                    476: } /* XrmSetValues */
                    477: 
                    478: static void SetValues(widgetClass, w, args, num_args)
                    479:     WidgetClass          widgetClass;
                    480:     Widget       w;
                    481:     ArgList      args;
                    482:     Cardinal     num_args;
                    483: {
                    484:     /* First set resource values for superclass */
                    485:     if (widgetClass->core_class.superclass != NULL) {
                    486:         SetValues(widgetClass->core_class.superclass, w, args, num_args);
                    487:     }
                    488:     /* Then for this class */
                    489:     XrmSetValues((caddr_t) w,
                    490:         widgetClass->core_class.resources,
                    491:        widgetClass->core_class.num_resources,
                    492:        args, num_args);
                    493: } /* SetValues */
                    494: 
                    495: static Boolean RecurseSetValues (current, request, new, last, class)
                    496:     Widget current, request, new;
                    497:     Boolean last;
                    498:     WidgetClass class;
                    499: {
                    500:     Boolean redisplay = FALSE;
                    501:     if (class->core_class.superclass)
                    502:                redisplay = RecurseSetValues (current, request, new, FALSE,
                    503:            class->core_class.superclass);
                    504:     if (class->core_class.set_values)
                    505:                redisplay |= (*class->core_class.set_values) (current, request, new,
                    506:            last, class);
                    507:     return (redisplay);
                    508: }
                    509: 
                    510: void XtSetValues(w, args, num_args)
                    511:     Widget   w;
                    512:     ArgList  args;
                    513:     Cardinal num_args;
                    514: {
                    515:     Widget     requestWidget, newWidget;
                    516:     Cardinal   widgetSize;
                    517:     Boolean redisplay;
                    518: 
                    519:     if (num_args == 0) return;
                    520:     if ((args == NULL) && (num_args != 0)) {
                    521:        XtError("argument count > 0 on NULL argument list");
                    522:        return;
                    523:     }
                    524: 
                    525:     /* Allocate and copy current widget into newWidget */
                    526:     widgetSize = w->core.widget_class->core_class.widget_size;
                    527:     requestWidget = (Widget) XtMalloc (widgetSize);
                    528:     newWidget = (Widget) XtMalloc(widgetSize);
                    529:     bcopy((char *) w, (char *) requestWidget, widgetSize);
                    530: 
                    531:     /* Set resource values starting at CorePart on down to this widget */
                    532:     SetValues(w->core.widget_class, requestWidget, args, num_args);
                    533:     bcopy ((char *) requestWidget, (char *) newWidget, widgetSize);
                    534: 
                    535:     /* Inform widget of changes and deallocate newWidget */
                    536:     redisplay = RecurseSetValues (w, requestWidget, newWidget, TRUE,
                    537:         w->core.widget_class);
                    538:     
                    539:     /* If a SetValues proc made a successful geometry request,
                    540:        then "w" contains the new, correct x, y, width, height fields.
                    541:        Make sure not to smash them when copying "new" back into "w". */
                    542:     newWidget->core.x = w->core.x;
                    543:     newWidget->core.y = w->core.y;
                    544:     newWidget->core.width = w->core.width;
                    545:     newWidget->core.height = w->core.height;
                    546:     newWidget->core.border_width = w->core.border_width;
                    547: 
                    548:     bcopy ((char *) newWidget, (char *) w, widgetSize);
                    549:     XtFree((char *) requestWidget);
                    550:     XtFree((char *) newWidget);
                    551: 
                    552:     if (redisplay)
                    553:        /* repaint background of window, and force a full exposure event */
                    554:        XClearArea (XtDisplay(w), XtWindow(w), 0, 0, 0, 0, TRUE);
                    555:        
                    556: } /* XtSetValues */
                    557:  
                    558: 
                    559: static Boolean initialized = FALSE;
                    560: 
                    561: extern void ResourceListInitialize()
                    562: {
                    563:     if (initialized)
                    564:        return;
                    565:     initialized = TRUE;
                    566: 
                    567: #ifdef reverseVideoHack
                    568:     QreverseVideo = StringToName(XtNreverseVideo);
                    569: #endif
                    570:     QBoolean = StringToClass(XtCBoolean);
                    571:     QString = StringToClass(XtCString);
                    572: }

unix.superglobalmegacorp.com

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