Beispiel #1
0
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;
	}
    }
}
Beispiel #2
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);
    }
}
Beispiel #3
0
/*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;
}
Beispiel #4
0
/*
 * 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);
}
Beispiel #5
0
/*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;
}
Beispiel #6
0
/*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);
    }
}
Beispiel #7
0
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);
}
Beispiel #8
0
/*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;
}
Beispiel #9
0
/*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);
}