void XmCvtStringToUnitType(XrmValuePtr args, Cardinal *num_args, XrmValue *from_val, XrmValue *to_val) { int result; static unsigned char value; /* Much like __XmCvtStringToRep, but there's no display * so it can't be called directly. */ if (from_val->addr == NULL) { XtStringConversionWarning(from_val->addr, XmRUnitType); to_val->addr = NULL; to_val->size = 0; return; } result = __XmRepTypeStringToValue(rep_types + XmRepTypeGetId(XmRUnitType), (String)from_val->addr); if (result < 0) { XtStringConversionWarning(from_val->addr, XmRUnitType); to_val->addr = NULL; to_val->size = 0; return; } value = (unsigned char)result; if (to_val->addr == NULL) { to_val->addr = (XPointer)&value; to_val->size = sizeof value; } else { if (to_val->size >= sizeof value) { *(unsigned char *)to_val->addr = value; to_val->size = sizeof value; } else { XtStringConversionWarning(from_val->addr, XmRUnitType); to_val->addr = NULL; to_val->size = 0; } } }
/*ARGSUSED*/ void XmuCvtStringToJustify(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static XtJustify e; XrmQuark q; char *s = (char *)fromVal->addr; char name[7]; if (s == NULL) return; InitializeQuarks(); XmuNCopyISOLatin1Lowered(name, s, sizeof(name)); q = XrmStringToQuark(name); toVal->size = sizeof(XtJustify); toVal->addr = (XPointer)&e; if (q == Qleft) e = XtJustifyLeft; else if (q == Qcenter) e = XtJustifyCenter; else if (q == Qright) e = XtJustifyRight; else { toVal->addr = NULL; XtStringConversionWarning((char *)fromVal->addr, XtRJustify); } }
/*ARGSUSED*/ void XmuCvtStringToBackingStore(XrmValue *args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { XrmQuark q; char name[11]; static int backingStoreType; if (*num_args != 0) XtWarning("String to BackingStore conversion needs no extra arguments"); InitializeQuarks(); XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name)); q = XrmStringToQuark (name); if (q == QnotUseful) backingStoreType = NotUseful; else if (q == QwhenMapped) backingStoreType = WhenMapped; else if (q == Qalways) backingStoreType = Always; else if (q == Qdefault) backingStoreType = Always + WhenMapped + NotUseful; else { XtStringConversionWarning((char *)fromVal->addr, XtRBackingStore); return; } toVal->size = sizeof(int); toVal->addr = (XPointer)&backingStoreType; }
/* * This function is deprecated as of the addition of * XtCvtStringToGravity in R6 */ void XmuCvtStringToGravity(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static Boolean haveQuarks = False; char name[10]; XrmQuark q; struct _namepair *np; if (*num_args != 0) XtWarningMsg("wrongParameters","cvtStringToGravity","XtToolkitError", "String to Gravity conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); if (!haveQuarks) { for (np = names; np->name; np++) np->quark = XrmPermStringToQuark(np->name); haveQuarks = True; } XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name)); q = XrmStringToQuark(name); for (np = names; np->name; np++) { if (np->quark == q) { done(&np->gravity, XtGravity); return; } } XtStringConversionWarning((char *)fromVal->addr, XtRGravity); }
/*ARGSUSED*/ static void _CvtStringToEdgeType(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static XtEdgeType edgeType; XrmQuark q; char name[12]; XmuNCopyISOLatin1Lowered(name, (char*)fromVal->addr, sizeof(name)); q = XrmStringToQuark(name); if (q == QchainLeft) edgeType = XtChainLeft; else if (q == QchainRight) edgeType = XtChainRight; else if (q == QchainTop) edgeType = XtChainTop; else if (q == QchainBottom) edgeType = XtChainBottom; else if (q == Qrubber) edgeType = XtRubber; else { XtStringConversionWarning(fromVal->addr, XtREdgeType); toVal->size = 0; toVal->addr = NULL; return; } toVal->size = sizeof(XtEdgeType); toVal->addr = (XPointer)&edgeType; }
/*ARGSUSED*/ void XmuCvtStringToOrientation(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static XtOrientation orient; XrmQuark q; char name[11]; InitializeQuarks(); XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name)); q = XrmStringToQuark(name); toVal->size = sizeof(XtJustify); toVal->addr = (XPointer)&orient; if (q == Qhorizontal) orient = XtorientHorizontal; else if (q == Qvertical) orient = XtorientVertical; else { toVal->addr = NULL; XtStringConversionWarning((char *)fromVal->addr, XtROrientation); } }
void XmuCvtStringToLong(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static long l; if (*num_args != 0) XtWarning("String to Long conversion needs no extra arguments"); if (sscanf((char *)fromVal->addr, "%ld", &l) == 1) { toVal->size = sizeof(long); toVal->addr = (XPointer)&l; } else XtStringConversionWarning((char *)fromVal->addr, XtRLong); }
/*ARGSUSED*/ static void CvtStringToAsciiType(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static XawAsciiType type; XrmQuark q; char name[7]; XmuNCopyISOLatin1Lowered(name, (char *)fromVal->addr, sizeof(name)); q = XrmStringToQuark(name); if (q == Qstring) type = XawAsciiString; else if (q == Qfile) type = XawAsciiFile; else { toVal->size = 0; toVal->addr = NULL; XtStringConversionWarning((char *)fromVal->addr, XtRAsciiType); } toVal->size = sizeof(XawAsciiType); toVal->addr = (XPointer)&type; }
/*ARGSUSED*/ void XmuCvtStringToCursor(XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal) { static Cursor cursor; /* static for cvt magic */ char *name = (char *)fromVal->addr; Screen *screen; register int i; char maskname[PATH_MAX]; Pixmap source, mask = 0; /* XXX - make fg/bg resources */ static XColor bgColor = {0, 0xffff, 0xffff, 0xffff}; static XColor fgColor = {0, 0, 0, 0}; int xhot, yhot; int len; if (*num_args != 1) XtErrorMsg("wrongParameters","cvtStringToCursor","XtToolkitError", "String to cursor conversion needs screen argument", (String *)NULL, (Cardinal *)NULL); if (XmuCompareISOLatin1(name, "None") == 0) { cursor = None; done(&cursor, Cursor); return; } screen = *((Screen **) args[0].addr); if (0 == strncmp(FONTSPECIFIER, name, strlen(FONTSPECIFIER))) { char source_name[PATH_MAX], mask_name[PATH_MAX]; int source_char, mask_char, fields = 0; Font source_font, mask_font; XrmValue fromString, toFont; XrmValue cvtArg; Boolean success; Display *dpy = DisplayOfScreen(screen); char *strspec = NULL; int strspeclen; #ifdef XMU_KLUDGE Cardinal num; #endif strspeclen = strlen("FONT %s %d %s %d") + 21; strspec = XtMalloc(strspeclen); if (strspec != NULL) { snprintf(strspec, strspeclen, "FONT %%%lds %%d %%%lds %%d", (unsigned long)sizeof(source_name) - 1, (unsigned long)sizeof(mask_name) - 1); fields = sscanf(name, strspec, source_name, &source_char, mask_name, &mask_char); XtFree(strspec); } if (fields < 2) { XtStringConversionWarning(name, XtRCursor); return; } fromString.addr = source_name; fromString.size = strlen(source_name) + 1; toFont.addr = (XPointer) &source_font; toFont.size = sizeof(Font); cvtArg.addr = (XPointer) &dpy; cvtArg.size = sizeof(Display *); /* XXX using display of screen argument as message display */ #ifdef XMU_KLUDGE /* XXX Sacrifice caching */ num = 1; success = XtCvtStringToFont(dpy, &cvtArg, &num, &fromString, &toFont, NULL); #else success = XtCallConverter(dpy, XtCvtStringToFont, &cvtArg, (Cardinal)1, &fromString, &toFont, NULL); #endif if (!success) { XtStringConversionWarning(name, XtRCursor); return; } switch (fields) { case 2: /* defaulted mask font & char */ mask_font = source_font; mask_char = source_char; break; case 3: /* defaulted mask font */ mask_font = source_font; mask_char = atoi(mask_name); break; case 4: /* specified mask font & char */ fromString.addr = mask_name; fromString.size = strlen(mask_name) + 1; toFont.addr = (XPointer) &mask_font; toFont.size = sizeof(Font); /* XXX using display of screen argument as message display */ #ifdef XMU_KLUDGE /* XXX Sacrifice caching */ num = 1; success = XtCvtStringToFont(dpy, &cvtArg, &num, &fromString, &toFont, NULL); #else success = XtCallConverter(dpy, XtCvtStringToFont, &cvtArg, (Cardinal)1, &fromString, &toFont, NULL); #endif if (!success) { XtStringConversionWarning(name, XtRCursor); return; } } cursor = XCreateGlyphCursor( DisplayOfScreen(screen), source_font, mask_font, source_char, mask_char, &fgColor, &bgColor ); done(&cursor, Cursor); return; } i = XmuCursorNameToIndex (name); if (i != -1) { cursor = XCreateFontCursor (DisplayOfScreen(screen), i); done(&cursor, Cursor); return; } if ((source = XmuLocateBitmapFile (screen, name, maskname, (sizeof maskname) - 4, NULL, NULL, &xhot, &yhot)) == None) { XtStringConversionWarning (name, XtRCursor); cursor = None; done(&cursor, Cursor); return; } len = strlen (maskname); for (i = 0; i < 2; i++) { strcpy (maskname + len, i == 0 ? "Mask" : "msk"); if ((mask = XmuLocateBitmapFile (screen, maskname, NULL, 0, NULL, NULL, NULL, NULL)) != None) break; } cursor = XCreatePixmapCursor( DisplayOfScreen(screen), source, mask, &fgColor, &bgColor, xhot, yhot ); XFreePixmap( DisplayOfScreen(screen), source ); if (mask != None) XFreePixmap( DisplayOfScreen(screen), mask ); done(&cursor, Cursor); }