⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fontfile.c

📁 unix vnc 协议源码. VNC是一款远程控制工具软件.
💻 C
📖 第 1 页 / 共 2 页
字号:
    FontScalablePtr	vals;    fsRange		*ranges;    int			nranges;    int			*max;{    int i;    FontScalableRec	zeroVals, tmpVals;    for (i = 0; i < scaleNames->nnames; i++)    {	char nameChars[MAXFONTNAMELEN];	if (!*max)	    return;	FontParseXLFDName (scaleNames->names[i], &zeroVals,			   FONT_XLFD_REPLACE_NONE);	tmpVals = *vals;	if (FontFileCompleteXLFD (&tmpVals, &zeroVals))	{	    --*max;	    strcpy (nameChars, scaleNames->names[i]);	    if ((vals->values_supplied & PIXELSIZE_MASK) ||		!(vals->values_supplied & PIXELSIZE_WILDCARD) ||		vals->y == 0)	    {		tmpVals.values_supplied =		    (tmpVals.values_supplied & ~PIXELSIZE_MASK) |		    (vals->values_supplied & PIXELSIZE_MASK);		tmpVals.pixel_matrix[0] = vals->pixel_matrix[0];		tmpVals.pixel_matrix[1] = vals->pixel_matrix[1];		tmpVals.pixel_matrix[2] = vals->pixel_matrix[2];		tmpVals.pixel_matrix[3] = vals->pixel_matrix[3];	    }	    if ((vals->values_supplied & POINTSIZE_MASK) ||		!(vals->values_supplied & POINTSIZE_WILDCARD) ||		vals->y == 0)	    {		tmpVals.values_supplied =		    (tmpVals.values_supplied & ~POINTSIZE_MASK) |		    (vals->values_supplied & POINTSIZE_MASK);		tmpVals.point_matrix[0] = vals->point_matrix[0];		tmpVals.point_matrix[1] = vals->point_matrix[1];		tmpVals.point_matrix[2] = vals->point_matrix[2];		tmpVals.point_matrix[3] = vals->point_matrix[3];	    }	    if (vals->width <= 0)		tmpVals.width = 0;	    if (vals->x == 0)		tmpVals.x = 0;	    if (vals->y == 0)		tmpVals.y = 0;	    tmpVals.ranges = ranges;	    tmpVals.nranges = nranges;	    FontParseXLFDName (nameChars, &tmpVals,			       FONT_XLFD_REPLACE_VALUE);	    /* If we're marking aliases with negative lengths, we	       need to concoct a valid target name to follow it.	       Otherwise we're done.  */	    if (scaleNames->length[i] >= 0)	    {		(void) AddFontNamesName (names, nameChars,					 strlen (nameChars));		/* If our original pattern matches the name from		   the table and that name doesn't duplicate what		   we just added, add the name from the table */		if (strcmp(nameChars, scaleNames->names[i]) &&		    FontFileMatchName(scaleNames->names[i],				      scaleNames->length[i],				      nameptr) &&		    *max)		{		    --*max;		    (void) AddFontNamesName (names, scaleNames->names[i],					     scaleNames->length[i]);		}	    }	    else	    {		char *aliasName;		vals->ranges = ranges;		vals->nranges = nranges;		if (transfer_values_to_alias(zeroChars,					     strlen(zeroChars),					     scaleNames->names[++i],					     &aliasName, vals))		{		    (void) AddFontNamesName (names, nameChars,					     strlen (nameChars));		    names->length[names->nnames - 1] =			-names->length[names->nnames - 1];		    (void) AddFontNamesName (names, aliasName,					     strlen (aliasName));		    /* If our original pattern matches the name from		       the table and that name doesn't duplicate what		       we just added, add the name from the table */		    if (strcmp(nameChars, scaleNames->names[i - 1]) &&			FontFileMatchName(scaleNames->names[i - 1],					  -scaleNames->length[i - 1],					  nameptr) &&			*max)		    {			--*max;			(void) AddFontNamesName (names,						 scaleNames->names[i - 1],						 -scaleNames->length[i - 1]);			names->length[names->nnames - 1] =			    -names->length[names->nnames - 1];			(void) AddFontNamesName (names, aliasName,						 strlen (aliasName));		    }		}	    }	}    }}/* ARGSUSED */static int_FontFileListFonts (client, fpe, pat, len, max, names, mark_aliases)    pointer     client;    FontPathElementPtr fpe;    char       *pat;    int         len;    int         max;    FontNamesPtr names;    int		mark_aliases;{    FontDirectoryPtr	dir;    char		lowerChars[MAXFONTNAMELEN], zeroChars[MAXFONTNAMELEN];    FontNameRec		lowerName;    FontNameRec		zeroName;    FontNamesPtr	scaleNames;    FontScalableRec	vals;    int			i;    fsRange		*ranges;    int			nranges;    int			result = BadFontName;    if (len >= MAXFONTNAMELEN)	return AllocError;    dir = (FontDirectoryPtr) fpe->private;    CopyISOLatin1Lowered (lowerChars, pat, len);    lowerChars[len] = '\0';    lowerName.name = lowerChars;    lowerName.length = len;    lowerName.ndashes = FontFileCountDashes (lowerChars, len);    /* Match XLFD patterns */    strcpy (zeroChars, lowerChars);    if (lowerName.ndashes == 14 &&	FontParseXLFDName (zeroChars, &vals, FONT_XLFD_REPLACE_ZERO))    {	ranges = FontParseRanges(lowerChars, &nranges);        result = FontFileFindNamesInScalableDir (&dir->nonScalable,				&lowerName, max, names,				(FontScalablePtr)0,				(mark_aliases ?				 LIST_ALIASES_AND_TARGET_NAMES :				 NORMAL_ALIAS_BEHAVIOR) |				IGNORE_SCALABLE_ALIASES,				&max);	zeroName.name = zeroChars;	zeroName.length = strlen (zeroChars);	zeroName.ndashes = lowerName.ndashes;	/* Look for scalable names and aliases, adding scaled instances of	   them to the output */	/* Scalable names... */	scaleNames = MakeFontNamesRecord (0);	if (!scaleNames)	{	    if (ranges) xfree(ranges);	    return AllocError;	}	FontFileFindNamesInScalableDir (&dir->scalable, &zeroName, max,					scaleNames, &vals,					mark_aliases ?					LIST_ALIASES_AND_TARGET_NAMES :					NORMAL_ALIAS_BEHAVIOR, (int *)0);	_FontFileAddScalableNames(names, scaleNames, &lowerName,				  zeroChars, &vals, ranges, nranges,				  &max);	FreeFontNames (scaleNames);	/* Scalable aliases... */	scaleNames = MakeFontNamesRecord (0);	if (!scaleNames)	{	    if (ranges) xfree(ranges);	    return AllocError;	}	FontFileFindNamesInScalableDir (&dir->nonScalable, &zeroName,					max, scaleNames, &vals,					mark_aliases ?					LIST_ALIASES_AND_TARGET_NAMES :					NORMAL_ALIAS_BEHAVIOR, (int *)0);	_FontFileAddScalableNames(names, scaleNames, &lowerName,				  zeroChars, &vals, ranges, nranges,				  &max);	FreeFontNames (scaleNames);	if (ranges) xfree(ranges);    }    else    {        result = FontFileFindNamesInScalableDir (&dir->nonScalable,				&lowerName, max, names,				(FontScalablePtr)0,				mark_aliases ?				LIST_ALIASES_AND_TARGET_NAMES :				NORMAL_ALIAS_BEHAVIOR,				&max);	if (result == Successful)    	    result = FontFileFindNamesInScalableDir (&dir->scalable,				&lowerName, max, names,				(FontScalablePtr)0,				mark_aliases ?				LIST_ALIASES_AND_TARGET_NAMES :				NORMAL_ALIAS_BEHAVIOR, (int *)0);    }    return result;}typedef struct _LFWIData {    FontNamesPtr    names;    int                   current;} LFWIDataRec, *LFWIDataPtr;FontFileListFonts (client, fpe, pat, len, max, names)    pointer     client;    FontPathElementPtr fpe;    char       *pat;    int         len;    int         max;    FontNamesPtr names;{    return _FontFileListFonts (client, fpe, pat, len, max, names, 0);}FontFileStartListFontsWithInfo(client, fpe, pat, len, max, privatep)    pointer     client;    FontPathElementPtr fpe;    char       *pat;    int         len;    int         max;    pointer    *privatep;{    LFWIDataPtr	data;    int		ret;    data = (LFWIDataPtr) xalloc (sizeof *data);    if (!data)	return AllocError;    data->names = MakeFontNamesRecord (0);    if (!data->names)    {	xfree (data);	return AllocError;    }    ret = FontFileListFonts (client, fpe, pat, len, max, data->names);    if (ret != Successful)    {	FreeFontNames (data->names);	xfree (data);	return ret;    }    data->current = 0;    *privatep = (pointer) data;    return Successful;}/* ARGSUSED */static intFontFileListOneFontWithInfo (client, fpe, namep, namelenp, pFontInfo)    pointer		client;    FontPathElementPtr	fpe;    char		**namep;    int			*namelenp;    FontInfoPtr		*pFontInfo;{    FontDirectoryPtr	dir;    char		lowerName[MAXFONTNAMELEN];    char		fileName[MAXFONTFILENAMELEN*2 + 1];    FontNameRec		tmpName;    FontEntryPtr	entry;    FontScalableRec	vals;    FontScalableEntryPtr   scalable;    FontScaledPtr	scaled;    FontBitmapEntryPtr	bitmap;    FontAliasEntryPtr	alias;    int			ret;    char		*name = *namep;    int			namelen = *namelenp;    Bool		noSpecificSize;        if (namelen >= MAXFONTNAMELEN)	return AllocError;    dir = (FontDirectoryPtr) fpe->private;    CopyISOLatin1Lowered (lowerName, name, namelen);    lowerName[namelen] = '\0';    tmpName.name = lowerName;    tmpName.length = namelen;    tmpName.ndashes = FontFileCountDashes (lowerName, namelen);    /* Match XLFD patterns */    if (tmpName.ndashes == 14 &&	FontParseXLFDName (lowerName, &vals, FONT_XLFD_REPLACE_ZERO))    {	tmpName.length = strlen (lowerName);	entry = FontFileFindNameInScalableDir (&dir->scalable, &tmpName, &vals);	noSpecificSize = FALSE;	/* TRUE breaks XLFD enhancements */    	if (entry && entry->type == FONT_ENTRY_SCALABLE &&	    FontFileCompleteXLFD (&vals, &entry->u.scalable.extra->defaults))	{	    scalable = &entry->u.scalable;	    scaled = FontFileFindScaledInstance (entry, &vals, noSpecificSize);	    /*	     * A scaled instance can occur one of two ways:	     *	     *  Either the font has been scaled to this	     *   size already, in which case scaled->pFont	     *   will point at that font.	     *	     *  Or a bitmap instance in this size exists,	     *   which is handled as if we got a pattern	     *   matching the bitmap font name.	     */	    if (scaled)	    {		if (scaled->pFont)		{		    *pFontInfo = &scaled->pFont->info;		    ret = Successful;		}		else if (scaled->bitmap)		{		    entry = scaled->bitmap;		    bitmap = &entry->u.bitmap;		    if (bitmap->pFont)		    {			*pFontInfo = &bitmap->pFont->info;			ret = Successful;		    }		    else		    {			ret = FontFileGetInfoBitmap (fpe, *pFontInfo, entry);		    }		}		else /* "cannot" happen */		{		    ret = BadFontName;		}	    }	    else	    {#ifdef NOTDEF		/* no special case yet */		ret = FontFileMatchBitmapSource (fpe, pFont, flags, entry, &vals, format, fmask, noSpecificSize);		if (ret != Successful)#endif		{		    char origName[MAXFONTNAMELEN];		    fsRange *ranges;		    CopyISOLatin1Lowered (origName, name, namelen);		    origName[namelen] = '\0';		    vals.xlfdName = origName;		    vals.ranges = FontParseRanges(origName, &vals.nranges);		    ranges = vals.ranges;		    /* Make a new scaled instance */	    	    strcpy (fileName, dir->directory);	    	    strcat (fileName, scalable->fileName);	    	    ret = (*scalable->renderer->GetInfoScalable)			(fpe, *pFontInfo, entry, &tmpName, fileName, &vals);		    if (ranges) xfree(ranges);		}	    }	    if (ret == Successful) return ret;	}	CopyISOLatin1Lowered (lowerName, name, namelen);	tmpName.length = namelen;    }    /* Match non XLFD pattern */    if (entry = FontFileFindNameInDir (&dir->nonScalable, &tmpName))    {	switch (entry->type) {	case FONT_ENTRY_BITMAP:	    bitmap = &entry->u.bitmap;	    if (bitmap->pFont)	    {	    	*pFontInfo = &bitmap->pFont->info;	    	ret = Successful;	    }	    else	    {		ret = FontFileGetInfoBitmap (fpe, *pFontInfo, entry);	    }	    break;	case FONT_ENTRY_ALIAS:	    alias = &entry->u.alias;	    *(char **)pFontInfo = name;	    *namelenp = strlen (*namep = alias->resolved);	    ret = FontNameAlias;	    break;#ifdef NOTYET	case FONT_ENTRY_BC:	    /* no LFWI for this yet */	    bc = &entry->u.bc;	    entry = bc->entry;	    /* Make a new scaled instance */    	    strcpy (fileName, dir->directory);    	    strcat (fileName, scalable->fileName);	    ret = (*scalable->renderer->GetInfoScalable)		    (fpe, *pFontInfo, entry, tmpName, fileName, &bc->vals);	    break;#endif	default:	    ret = BadFontName;	}    }    else    {	ret = BadFontName;    }    return ret;}FontFileListNextFontWithInfo(client, fpe, namep, namelenp, pFontInfo,			     numFonts, private)    pointer		client;    FontPathElementPtr	fpe;    char		**namep;    int			*namelenp;    FontInfoPtr		*pFontInfo;    int			*numFonts;    pointer		private;{    LFWIDataPtr	data = (LFWIDataPtr) private;    int		ret;    char	*name;    int		namelen;    if (data->current == data->names->nnames)    {	FreeFontNames (data->names);	xfree (data);	return BadFontName;    }    name = data->names->names[data->current];    namelen = data->names->length[data->current];    ret = FontFileListOneFontWithInfo (client, fpe, &name, &namelen, pFontInfo);    if (ret == BadFontName)	ret = AllocError;    *namep = name;    *namelenp = namelen;    ++data->current;    *numFonts = data->names->nnames - data->current;    return ret;}intFontFileStartListFontsAndAliases(client, fpe, pat, len, max, privatep)    pointer     client;    FontPathElementPtr fpe;    char       *pat;    int         len;    int         max;    pointer    *privatep;{    LFWIDataPtr	data;    int		ret;    data = (LFWIDataPtr) xalloc (sizeof *data);    if (!data)	return AllocError;    data->names = MakeFontNamesRecord (0);    if (!data->names)    {	xfree (data);	return AllocError;    }    ret = _FontFileListFonts (client, fpe, pat, len, max, data->names, 1);    if (ret != Successful)    {	FreeFontNames (data->names);	xfree (data);	return ret;    }    data->current = 0;    *privatep = (pointer) data;    return Successful;}intFontFileListNextFontOrAlias(client, fpe, namep, namelenp, resolvedp,			    resolvedlenp, private)    pointer		client;    FontPathElementPtr	fpe;    char		**namep;    int			*namelenp;    char		**resolvedp;    int			*resolvedlenp;    pointer		private;{    LFWIDataPtr	data = (LFWIDataPtr) private;    int		ret;    char	*name;    int		namelen;    if (data->current == data->names->nnames)    {	FreeFontNames (data->names);	xfree (data);	return BadFontName;    }    name = data->names->names[data->current];    namelen = data->names->length[data->current];    /* If this is a real font name... */    if (namelen >= 0)    {	*namep = name;	*namelenp = namelen;	ret = Successful;    }    /* Else if an alias */    else    {	/* Tell the caller that this is an alias... let him resolve it to	   see if it's valid */	*namep = name;	*namelenp = -namelen;	*resolvedp = data->names->names[++data->current];	*resolvedlenp = data->names->length[data->current];	ret = FontNameAlias;    }    ++data->current;    return ret;}extern void FontFileEmptyBitmapSource();typedef int (*IntFunc) ();static int  font_file_type;FontFileRegisterLocalFpeFunctions (){    font_file_type = RegisterFPEFunctions(FontFileNameCheck,					  FontFileInitFPE,					  FontFileFreeFPE,					  FontFileResetFPE,					  FontFileOpenFont,					  FontFileCloseFont,					  FontFileListFonts,					  FontFileStartListFontsWithInfo,					  FontFileListNextFontWithInfo,					  (IntFunc) 0,					  (IntFunc) 0,					  (IntFunc) 0,					  FontFileStartListFontsAndAliases,					  FontFileListNextFontOrAlias,					  FontFileEmptyBitmapSource);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -