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

📄 xwcdeglyph.c

📁 早期freebsd实现
💻 C
字号:
/* * $XConsortium: XwcDeGlyph.c,v 1.16 92/04/14 15:55:31 rws Exp $ *//* * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, *                      and Nippon Telegraph and Telephone 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, NTT Software, NTT, and M.I.T. * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. OMRON, NTT Software, * NTT, 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. * * OMRON, NTT SOFTWARE, NTT, AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, NTT, 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. *  *	Authors: Li Yuhong		OMRON Corportaion *		 Hiroshi Kuribayashi	OMRON Corporation *    *//* *      Function Name: _XwcDecomposeGlyphCharset*/#include <stdio.h>#include <X11/Xlibint.h>#include "Xlocaleint.h"#include <X11/Xos.h>#include <X11/Xutil.h>#define MAGIC_NUMBER	(9999)#define Return(result) {                                                \        *cs_bytes = cscnt;                                              \        *scanned_len = wccnt;                                           \        if (cscnt < limit) *cs_str = '\0'; /*additional service*/       \        if (error > 0) return(error);                                   \        return(result);                                                 \    }#define StoreByte(code) {                                               \        int byte = (code);                                              \        if (byte < (int)stateinfo.code_min || 				\	    byte > (int)stateinfo.code_max) {				\            error++;                                                    \            *cs_str++ = stateinfo.code_min;                             \        } else                                                          \            *cs_str++ = byte;                                           \    }int_XwcDecomposeGlyphCharset(xlocale, wc_str, wc_len, cs_str, cs_bytes,			  scanned_len, ctid)    XLocale        xlocale;    wchar	   *wc_str;    int	            wc_len;    unsigned char  *cs_str;    int	           *cs_bytes;    int	           *scanned_len;    int		   *ctid;{    int    	    cscnt, wccnt;    wchar           woffset, newwoffset, code, wc;    int             limit, error;    ISOStateInfo    stateinfo;    char	    *esc;    int i;    char *defstr = XDefaultString();    limit = *cs_bytes;    wccnt = cscnt = error = 0;    woffset = MAGIC_NUMBER;    while (wc_len > 0 && (wc = *wc_str) != WNULL) {	/*	 * filter control characters.	 */        if (_Xiswcntrl(wc)) {	    if (cscnt >= limit) 		Return(BadBuffer);	    *cs_str++ = _Xwctoa(wc);	    cscnt++;	    wc_str++, wc_len--, wccnt++;	    continue;	}	if (woffset == MAGIC_NUMBER) {    	    _XcwGetAll(xlocale, wc, &esc, &woffset, &stateinfo);	    if (woffset == 0) {		/* XXX BUG: need to check designate sequence of default string.		   But current default string is NULL, so OK. :-) */		for (i = 0; *(defstr + i) != 0; i++) {		    *cs_str++ = *(defstr + i);		    cscnt++;		}		error++;		wc_str++, wc_len--, wccnt++;		continue;	    }	    if (ctid != NULL)		*ctid = ctGetid(xlocale);	    newwoffset = woffset;	} else {            if(_XcwGetWoffsetFromLocale(xlocale, wc, &newwoffset) == ND) { /* MUST not change Status */		/* XXX BUG: need to check designate sequence of default string.		   But current default string is NULL, so OK. :-) */		for (i = 0; *(defstr + i) != 0; i++) {		    *cs_str++ = *(defstr + i);		    cscnt++;		}		error++;		wc_str++, wc_len--, wccnt++;		continue;	    }	}	if (woffset != newwoffset)	    break;        code = wc - woffset;        if ((cscnt + stateinfo.code_bytes) > limit)            Return(BadBuffer);		/* The space charcter(0x20) is include into the latin-1 charset */	if (wc == WCHARSPACE && woffset == LATINSCRIPT)	    *cs_str++ = code;	else {	    /*	     * only 2 or 1 byte(s) supported by X.	    */	    if (stateinfo.code_bytes == 2)		StoreByte((code >> 8) & 0x007F | ctGetGLorGR(xlocale));	    StoreByte(code & 0x007F | ctGetGLorGR(xlocale));	}        wc_str++, wc_len--, wccnt++;        cscnt += stateinfo.code_bytes;    }    Return(Success);    }

⌨️ 快捷键说明

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