📄 xfswrap.c
字号:
/* * $XConsortium: XFSWrap.c,v 11.6 91/06/05 08:53:49 rws Exp $ *//* * Copyright 1991 by the Massachusetts Institute of Technology * Copyright 1991 by the Open Software Foundation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of Open Software Foundation and M.I.T. * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Open Software * Foundation and M.I.T. make no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OPEN SOFTWARE FOUNDATION AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR M.I.T. BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF */ #include "Xlibint.h"#include "Xlcint.h"#include <ctype.h>#include <X11/Xos.h>#define MAXLIST 256char **_XParseBaseFontNameList(str, num) char *str; int *num;{ char *plist[MAXLIST]; char **list; char *ptr; *num = 0; if (!str || !*str) { return (char **)NULL; } while (*str && isspace(*str)) str++; if (!*str) return (char **)NULL; if (!(ptr = Xmalloc((unsigned)strlen(str) + 1))) { return (char **)NULL; } strcpy(ptr, str); while (1) { char *back; plist[*num] = ptr; if ((ptr = index(ptr, ','))) { back = ptr; } else { back = plist[*num] + strlen(plist[*num]); } while (isspace(*(back - 1))) back--; *back = '\0'; (*num)++; if (!ptr) break; ptr++; while (*ptr && isspace(*ptr)) ptr++; if (!*ptr) break; } if (!(list = (char **) Xmalloc((unsigned)sizeof(char *) * (*num + 1)))) { Xfree(ptr); return (char **)NULL; } bcopy((char *)plist, (char *)list, sizeof(char *) * (*num)); *(list + *num) = NULL; return list;}#if NeedFunctionPrototypesXFontSetXCreateFontSet ( Display *dpy, _Xconst char *base_font_name_list, char ***missing_charset_list, int *missing_charset_count, char **def_string)#elseXFontSetXCreateFontSet (dpy, base_font_name_list, missing_charset_list, missing_charset_count, def_string) Display *dpy; char *base_font_name_list; char ***missing_charset_list; int *missing_charset_count; char **def_string;#endif{ XLCd lcd = _XlcCurrentLC(); char *base_name; char **name_list; int count; XFontSet font_set; *missing_charset_list = NULL; *missing_charset_count = 0; if (!lcd) return NULL; base_name = (char *)Xmalloc(strlen(base_font_name_list) + 1); if (!base_name) return NULL; strcpy(base_name, base_font_name_list); name_list = _XParseBaseFontNameList(base_name, &count); if (!name_list) { Xfree(base_name); return NULL; } font_set = (*lcd->methods->create_fontset) (lcd, dpy, base_name, name_list, count, missing_charset_list, missing_charset_count); if (!font_set) { XFreeStringList(name_list); Xfree(base_name); } else if (def_string) { *def_string = font_set->core.default_string; if (!*def_string) *def_string = ""; } return font_set;}intXFontsOfFontSet(font_set, font_struct_list, font_name_list) XFontSet font_set; XFontStruct ***font_struct_list; char ***font_name_list;{ *font_name_list = font_set->core.font_name_list; *font_struct_list = font_set->core.font_struct_list; return font_set->core.num_of_fonts;}char *XBaseFontNameListOfFontSet(font_set) XFontSet font_set;{ return font_set->core.base_name_list;}char *XLocaleOfFontSet(font_set) XFontSet font_set;{ return font_set->core.lcd->core.name;}extern Bool XContextDependentDrawing(font_set) XFontSet font_set;{ return font_set->core.context_dependent;}XFontSetExtents *XExtentsOfFontSet(font_set) XFontSet font_set;{ return &font_set->core.font_set_extents;}voidXFreeFontSet(dpy, font_set) Display *dpy; XFontSet font_set;{ int i; (*font_set->methods->free) (dpy, font_set); for (i = 0; i < font_set->core.num_of_fonts; i++) { if (font_set->core.font_struct_list[i]) { if (font_set->core.font_struct_list[i]->fid) XFreeFont(dpy, font_set->core.font_struct_list[i]); else Xfree((char *)font_set->core.font_struct_list[i]); } } Xfree((char *) font_set->core.font_struct_list); Xfree(font_set->core.base_name_list); XFreeStringList(font_set->core.font_name_list); Xfree ((char *) font_set);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -