/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* gos720 src/gos/2d/XTOP/contrib/programs/xditview/XFontName.c 1.2 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1996 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* SCCSID_BEGIN_TAG */ #ifndef lint static char sccsid[] = "@(#)97 1.2 src/gos/2d/XTOP/contrib/programs/xditview/XFontName.c, xsample, gos720 12/9/96 15:09:06"; #endif /* SCCSID_END_TAG */ /* * XFontName.c * * build/parse X Font name strings */ #define _ILS_MACROS # include # include # include "XFontName.h" #include static char * extractStringField (name, buffer, size, attrp, bit) char *name; char *buffer; int size; unsigned int *attrp; unsigned int bit; { char *buf = buffer; if (!*name) return 0; while (*name && *name != '-' && size > 0) { *buf++ = *name++; --size; } if (size <= 0) return 0; *buf = '\0'; if (buffer[0] != '*' || buffer[1] != '\0') *attrp |= bit; if (*name == '-') return name+1; return name; } static char * extractUnsignedField (name, result, attrp, bit) char *name; unsigned int *result; unsigned int *attrp; unsigned int bit; { char buf[256]; char *c; unsigned int i; name = extractStringField (name, buf, sizeof (buf), attrp, bit); if (!name) return 0; if (!(*attrp & bit)) return name; i = 0; for (c = buf; *c; c++) { if (!isdigit (*c)) return 0; i = i * 10 + (*c - '0'); } *result = i; return name; } Bool XParseFontName (fontNameString, fontName, fontNameAttributes) XFontNameString fontNameString; XFontName *fontName; unsigned int *fontNameAttributes; { char *name = fontNameString; XFontName temp; unsigned int attributes = 0; #define GetString(field,bit)\ if (!(name = extractStringField \ (name, temp.field, sizeof (temp.field),\ &attributes, bit))) \ return False; #define GetUnsigned(field,bit)\ if (!(name = extractUnsignedField \ (name, &temp.field, \ &attributes, bit))) \ return False; GetString (Registry, FontNameRegistry) GetString (Foundry, FontNameFoundry) GetString (FamilyName, FontNameFamilyName) GetString (WeightName, FontNameWeightName) GetString (Slant, FontNameSlant) GetString (SetwidthName, FontNameSetwidthName) GetString (AddStyleName, FontNameAddStyleName) GetUnsigned (PixelSize, FontNamePixelSize) GetUnsigned (PointSize, FontNamePointSize) GetUnsigned (ResolutionX, FontNameResolutionX) GetUnsigned (ResolutionY, FontNameResolutionY) GetString (Spacing, FontNameSpacing) GetUnsigned (AverageWidth, FontNameAverageWidth) GetString (CharSetRegistry, FontNameCharSetRegistry) if (!*name) { temp.CharSetEncoding[0] = '\0'; attributes |= FontNameCharSetEncoding; } else { GetString (CharSetEncoding, FontNameCharSetEncoding) } *fontName = temp; *fontNameAttributes = attributes; return True; } static char * utoa (u, s, size) unsigned int u; char *s; int size; { char *t; t = s + size; *--t = '\0'; do *--t = (u % 10) + '0'; while (u /= 10); return t; } Bool XFormatFontName (fontName, fontNameAttributes, fontNameString) XFontName *fontName; unsigned int fontNameAttributes; XFontNameString fontNameString; { XFontNameString tmp; char *name = tmp, *f; int left = sizeof (tmp) - 1; char number[32]; #define PutString(field, bit)\ f = (fontNameAttributes & bit) ? \ fontName->field \ : "*"; \ if ((left -= strlen (f)) < 0) \ return False; \ while (*f) \ if ((*name++ = *f++) == '-') \ return False; #define PutHyphen()\ if (--left < 0) \ return False; \ *name++ = '-'; #define PutUnsigned(field, bit) \ f = (fontNameAttributes & bit) ? \ utoa (fontName->field, number, sizeof (number)) \ : "*"; \ if ((left -= strlen (f)) < 0) \ return False; \ while (*f) \ *name++ = *f++; PutString (Registry, FontNameRegistry) PutHyphen (); PutString (Foundry, FontNameFoundry) PutHyphen (); PutString (FamilyName, FontNameFamilyName) PutHyphen (); PutString (WeightName, FontNameWeightName) PutHyphen (); PutString (Slant, FontNameSlant) PutHyphen (); PutString (SetwidthName, FontNameSetwidthName) PutHyphen (); PutString (AddStyleName, FontNameAddStyleName) PutHyphen (); PutUnsigned (PixelSize, FontNamePixelSize) PutHyphen (); PutUnsigned (PointSize, FontNamePointSize) PutHyphen (); PutUnsigned (ResolutionX, FontNameResolutionX) PutHyphen (); PutUnsigned (ResolutionY, FontNameResolutionY) PutHyphen (); PutString (Spacing, FontNameSpacing) PutHyphen (); PutUnsigned (AverageWidth, FontNameAverageWidth) PutHyphen (); PutString (CharSetRegistry, FontNameCharSetRegistry) PutHyphen (); PutString (CharSetEncoding, FontNameCharSetEncoding) *name = '\0'; strcpy (fontNameString, tmp); return True; } Bool XCompareFontName (name1, name2, fontNameAttributes) XFontName *name1, *name2; unsigned int fontNameAttributes; { #define CompareString(field,bit) \ if (fontNameAttributes & bit) \ if (strcmp (name1->field, name2->field)) \ return False; #define CompareUnsigned(field,bit) \ if (fontNameAttributes & bit) \ if (name1->field != name2->field) \ return False; CompareString (Registry, FontNameRegistry) CompareString (Foundry, FontNameFoundry) CompareString (FamilyName, FontNameFamilyName) CompareString (WeightName, FontNameWeightName) CompareString (Slant, FontNameSlant) CompareString (SetwidthName, FontNameSetwidthName) CompareString (AddStyleName, FontNameAddStyleName) CompareUnsigned (PixelSize, FontNamePixelSize) CompareUnsigned (PointSize, FontNamePointSize) CompareUnsigned (ResolutionX, FontNameResolutionX) CompareUnsigned (ResolutionY, FontNameResolutionY) CompareString (Spacing, FontNameSpacing) CompareUnsigned (AverageWidth, FontNameAverageWidth) CompareString (CharSetRegistry, FontNameCharSetRegistry) CompareString (CharSetEncoding, FontNameCharSetEncoding) return True; } XCopyFontName (name1, name2, fontNameAttributes) XFontName *name1, *name2; unsigned int fontNameAttributes; { #define CopyString(field,bit) \ if (fontNameAttributes & bit) \ strcpy (name2->field, name1->field); #define CopyUnsigned(field,bit) \ if (fontNameAttributes & bit) \ name2->field = name1->field; CopyString (Registry, FontNameRegistry) CopyString (Foundry, FontNameFoundry) CopyString (FamilyName, FontNameFamilyName) CopyString (WeightName, FontNameWeightName) CopyString (Slant, FontNameSlant) CopyString (SetwidthName, FontNameSetwidthName) CopyString (AddStyleName, FontNameAddStyleName) CopyUnsigned (PixelSize, FontNamePixelSize) CopyUnsigned (PointSize, FontNamePointSize) CopyUnsigned (ResolutionX, FontNameResolutionX) CopyUnsigned (ResolutionY, FontNameResolutionY) CopyString (Spacing, FontNameSpacing) CopyUnsigned (AverageWidth, FontNameAverageWidth) CopyString (CharSetRegistry, FontNameCharSetRegistry) CopyString (CharSetEncoding, FontNameCharSetEncoding) return True; }