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

📄 xmbprptext.c

📁 早期freebsd实现
💻 C
字号:
/* $XConsortium: XmbPrpText.c,v 1.8 91/11/17 15:31:41 rws Exp $ *//* * Copyright 1991 by OMRON Corporation * Copyright 1991 by the Massachusetts Institute of Technology * * 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 OMRON and MIT not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission.  OMRON and MIT make no representations * about the suitability of this software for any purpose.  It is provided * "as is" without express or implied warranty. * * OMRON AND MIT DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OMRON OR MIT 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 * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Author: Hiroshi Kuribayashi    OMRON Corporation * */#include <X11/Xlibint.h>#include <X11/Xatom.h>#include <X11/Xutil.h>#include "Xlocaleint.h"#define XA_COMPOUND_TEXT(d) XInternAtom(d, "COMPOUND_TEXT", False)#if NeedFunctionPrototypesintXmbTextPropertyToTextList(    Display *dpy,    XTextProperty *tp,    char ***list_return,    int *count_return)#elseintXmbTextPropertyToTextList(dpy, tp, list_return, count_return)    Display *dpy;    XTextProperty *tp;    char ***list_return;    int *count_return;#endif{    unsigned char **list;    unsigned int nelements;    unsigned char *cp;    unsigned char *start;    int i, j;    int len, scand;    unsigned int datalen = (int) tp->nitems;    XsiLCd lcd = (XsiLCd)_XlcCurrentLC();    int ret, error = 0;    if (tp->format != 8 ||	(tp->encoding != XA_STRING &&	 tp->encoding != XA_COMPOUND_TEXT(dpy) &&	 !(lcd &&	   tp->encoding == XInternAtom(dpy, lcd->xlc->xlc_db->lc_encoding,				       False))))	return XConverterNotFound;    if (datalen == 0) {	*list_return = (char **)Xmalloc(sizeof(char *));	**list_return = 0;	*count_return = 0;	return Success;    }    nelements = 1;    for (cp = tp->value, i = datalen; i > 0; cp++, i--) {	if (*cp == '\0') nelements++;    }    list = (unsigned char **) Xmalloc (nelements * sizeof (unsigned char *));    if (!list) return XNoMemory;    start = (unsigned char *)Xmalloc ((datalen + 1) * sizeof (unsigned char));    if (!start) {	Xfree ((char *) list);	return XNoMemory;    }    if (tp->encoding == XA_STRING ||	tp->encoding == XA_COMPOUND_TEXT(dpy)) {	cp = (unsigned char *)tp->value;	for (i = j = 0; i < nelements; i++, j++) {	    list[j] = start;	    len = datalen + 1;	    if (i == nelements - 1)		scand = datalen;	    else		scand = strlen((char *)cp);	    if ((ret = _XConvertCTToMB(0, cp, scand, start,				&len, &scand, 0)) < 0) {		XFreeStringList((char **)list);		return (XConverterNotFound);	    }	    error += ret;	    start += len + 1;	    datalen -= len + 1;	    cp += scand + 1;	}    } else {	(void)bcopy ((char *) tp->value, (char *)start, (unsigned)tp->nitems);	start[datalen] = '\0';	 	for (cp = start, i = datalen + 1, j = 0; i > 0; cp++, i--) {	    if (*cp == '\0') {	        list[j] = start;	        start = (cp + 1);	        j++;	    }	}    }    *list_return = (char **)list;    *count_return = nelements;    return error;}

⌨️ 快捷键说明

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