亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? alloc_ttype.c

?? ncurses-5.4 需要的就來下把 一定會有用的哦
?? C
字號:
/**************************************************************************** * Copyright (c) 1999-2002,2003 Free Software Foundation, Inc.              * *                                                                          * * Permission is hereby granted, free of charge, to any person obtaining a  * * copy of this software and associated documentation files (the            * * "Software"), to deal in the Software without restriction, including      * * without limitation the rights to use, copy, modify, merge, publish,      * * distribute, distribute with modifications, sublicense, and/or sell       * * copies of the Software, and to permit persons to whom the Software is    * * furnished to do so, subject to the following conditions:                 * *                                                                          * * The above copyright notice and this permission notice shall be included  * * in all copies or substantial portions of the Software.                   * *                                                                          * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    * * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               * *                                                                          * * Except as contained in this notice, the name(s) of the above copyright   * * holders shall not be used in advertising or otherwise to promote the     * * sale, use or other dealings in this Software without prior written       * * authorization.                                                           * ****************************************************************************//**************************************************************************** *  Author: Thomas E. Dickey <dickey@clark.net> 1999                        * ****************************************************************************//* * align_ttype.c --  functions for TERMTYPE * *	_nc_align_termtype() *	_nc_copy_termtype() * */#include <curses.priv.h>#include <tic.h>#include <term_entry.h>MODULE_ID("$Id: alloc_ttype.c,v 1.14 2003/05/24 21:10:28 tom Exp $")#if NCURSES_XNAMES/* * Merge the a/b lists into dst.  Both a/b are sorted (see _nc_extend_names()), * so we do not have to worry about order dependencies. */static intmerge_names(char **dst, char **a, int na, char **b, int nb){    int n = 0;    while (na > 0 && nb > 0) {	int cmp = strcmp(*a, *b);	if (cmp < 0) {	    dst[n++] = *a++;	    na--;	} else if (cmp > 0) {	    dst[n++] = *b++;	    nb--;	} else if (cmp == 0) {	    dst[n++] = *a;	    a++, b++;	    na--, nb--;	}    }    while (na-- > 0) {	dst[n++] = *a++;    }    while (nb-- > 0) {	dst[n++] = *b++;    }    DEBUG(4, ("merge_names -> %d", n));    return n;}static boolfind_name(char **table, int length, char *name){    while (length-- > 0) {	if (!strcmp(*table++, name)) {	    DEBUG(4, ("found name '%s'", name));	    return TRUE;	}    }    DEBUG(4, ("did not find name '%s'", name));    return FALSE;}static voidrealign_data(TERMTYPE * to, char **ext_Names,	     int ext_Booleans,	     int ext_Numbers,	     int ext_Strings){    int n, m, base;    int limit = (to->ext_Booleans + to->ext_Numbers + to->ext_Strings);    if (to->ext_Booleans != ext_Booleans) {	to->num_Booleans += (ext_Booleans - to->ext_Booleans);	to->Booleans = typeRealloc(char, to->num_Booleans, to->Booleans);	for (n = to->ext_Booleans - 1,	     m = ext_Booleans - 1,	     base = to->num_Booleans - (m + 1); m >= 0; m--) {	    if (find_name(to->ext_Names, limit, ext_Names[m])) {		to->Booleans[base + m] = to->Booleans[base + n--];	    } else {		to->Booleans[base + m] = FALSE;	    }	}	to->ext_Booleans = ext_Booleans;    }    if (to->ext_Numbers != ext_Numbers) {	to->num_Numbers += (ext_Numbers - to->ext_Numbers);	to->Numbers = typeRealloc(short, to->num_Numbers, to->Numbers);	for (n = to->ext_Numbers - 1,	     m = ext_Numbers - 1,	     base = to->num_Numbers - (m + 1); m >= 0; m--) {	    if (find_name(to->ext_Names, limit, ext_Names[m + ext_Booleans])) {		to->Numbers[base + m] = to->Numbers[base + n--];	    } else {		to->Numbers[base + m] = ABSENT_NUMERIC;	    }	}	to->ext_Numbers = ext_Numbers;    }    if (to->ext_Strings != ext_Strings) {	to->num_Strings += (ext_Strings - to->ext_Strings);	to->Strings = typeRealloc(char *, to->num_Strings, to->Strings);	for (n = to->ext_Strings - 1,	     m = ext_Strings - 1,	     base = to->num_Strings - (m + 1); m >= 0; m--) {	    if (find_name(to->ext_Names, limit, ext_Names[m + ext_Booleans + ext_Numbers])) {		to->Strings[base + m] = to->Strings[base + n--];	    } else {		to->Strings[base + m] = ABSENT_STRING;	    }	}	to->ext_Strings = ext_Strings;    }}/* * Returns the first index in ext_Names[] for the given token-type */static int_nc_first_ext_name(TERMTYPE * tp, int token_type){    int first;    switch (token_type) {    case BOOLEAN:	first = 0;	break;    case NUMBER:	first = tp->ext_Booleans;	break;    case STRING:	first = tp->ext_Booleans + tp->ext_Numbers;	break;    default:	first = 0;	break;    }    return first;}/* * Returns the last index in ext_Names[] for the given token-type */static int_nc_last_ext_name(TERMTYPE * tp, int token_type){    int last;    switch (token_type) {    case BOOLEAN:	last = tp->ext_Booleans;	break;    case NUMBER:	last = tp->ext_Booleans + tp->ext_Numbers;	break;    default:    case STRING:	last = NUM_EXT_NAMES(tp);	break;    }    return last;}/* * Lookup an entry from extended-names, returning -1 if not found */static int_nc_find_ext_name(TERMTYPE * tp, char *name, int token_type){    unsigned j;    unsigned first = _nc_first_ext_name(tp, token_type);    unsigned last = _nc_last_ext_name(tp, token_type);    for (j = first; j < last; j++) {	if (!strcmp(name, tp->ext_Names[j])) {	    return j;	}    }    return -1;}/* * Translate an index into ext_Names[] into the corresponding index into data * (e.g., Booleans[]). */static int_nc_ext_data_index(TERMTYPE * tp, int n, int token_type){    switch (token_type) {    case BOOLEAN:	n += (tp->num_Booleans - tp->ext_Booleans);	break;    case NUMBER:	n += (tp->num_Numbers - tp->ext_Numbers)	    - (tp->ext_Booleans);	break;    default:    case STRING:	n += (tp->num_Strings - tp->ext_Strings)	    - (tp->ext_Booleans + tp->ext_Numbers);    }    return n;}/* * Adjust tables to remove (not free) an extended name and its corresponding * data. */static bool_nc_del_ext_name(TERMTYPE * tp, char *name, int token_type){    int j;    int first, last;    if ((first = _nc_find_ext_name(tp, name, token_type)) >= 0) {	last = NUM_EXT_NAMES(tp) - 1;	for (j = first; j < last; j++) {	    tp->ext_Names[j] = tp->ext_Names[j + 1];	}	first = _nc_ext_data_index(tp, first, token_type);	switch (token_type) {	case BOOLEAN:	    last = tp->num_Booleans - 1;	    for (j = first; j < last; j++)		tp->Booleans[j] = tp->Booleans[j + 1];	    tp->ext_Booleans -= 1;	    tp->num_Booleans -= 1;	    break;	case NUMBER:	    last = tp->num_Numbers - 1;	    for (j = first; j < last; j++)		tp->Numbers[j] = tp->Numbers[j + 1];	    tp->ext_Numbers -= 1;	    tp->num_Numbers -= 1;	    break;	case STRING:	    last = tp->num_Strings - 1;	    for (j = first; j < last; j++)		tp->Strings[j] = tp->Strings[j + 1];	    tp->ext_Strings -= 1;	    tp->num_Strings -= 1;	    break;	}	return TRUE;    }    return FALSE;}/* * Adjust tables to insert an extended name, making room for new data.  The * index into the corresponding data array is returned. */static int_nc_ins_ext_name(TERMTYPE * tp, char *name, int token_type){    unsigned first = _nc_first_ext_name(tp, token_type);    unsigned last = _nc_last_ext_name(tp, token_type);    unsigned total = NUM_EXT_NAMES(tp) + 1;    unsigned j, k;    for (j = first; j < last; j++) {	int cmp = strcmp(name, tp->ext_Names[j]);	if (cmp == 0)	    /* already present */	    return _nc_ext_data_index(tp, (int) j, token_type);	if (cmp < 0) {	    break;	}    }    tp->ext_Names = typeRealloc(char *, total, tp->ext_Names);    for (k = total - 1; k > j; k--)	tp->ext_Names[k] = tp->ext_Names[k - 1];    tp->ext_Names[j] = name;    j = _nc_ext_data_index(tp, (int) j, token_type);    switch (token_type) {    case BOOLEAN:	tp->ext_Booleans += 1;	tp->num_Booleans += 1;	tp->Booleans = typeRealloc(char, tp->num_Booleans, tp->Booleans);	for (k = tp->num_Booleans - 1; k > j; k--)	    tp->Booleans[k] = tp->Booleans[k - 1];	break;    case NUMBER:	tp->ext_Numbers += 1;	tp->num_Numbers += 1;	tp->Numbers = typeRealloc(short, tp->num_Numbers, tp->Numbers);	for (k = tp->num_Numbers - 1; k > j; k--)	    tp->Numbers[k] = tp->Numbers[k - 1];	break;    case STRING:	tp->ext_Strings += 1;	tp->num_Strings += 1;	tp->Strings = typeRealloc(char *, tp->num_Strings, tp->Strings);	for (k = tp->num_Strings - 1; k > j; k--)	    tp->Strings[k] = tp->Strings[k - 1];	break;    }    return j;}/* * Look for strings that are marked cancelled, which happen to be the same name * as a boolean or number.  We'll get this as a special case when we get a * cancellation of a name that is inherited from another entry. */static voidadjust_cancels(TERMTYPE * to, TERMTYPE * from){    int first = to->ext_Booleans + to->ext_Numbers;    int last = first + to->ext_Strings;    int j, k;    for (j = first; j < last;) {	char *name = to->ext_Names[j];	unsigned j_str = to->num_Strings - first - to->ext_Strings;	if (to->Strings[j + j_str] == CANCELLED_STRING) {	    if ((k = _nc_find_ext_name(from, to->ext_Names[j], BOOLEAN)) >= 0) {		if (_nc_del_ext_name(to, name, STRING)		    || _nc_del_ext_name(to, name, NUMBER)) {		    k = _nc_ins_ext_name(to, name, BOOLEAN);		    to->Booleans[k] = FALSE;		} else {		    j++;		}	    } else if ((k = _nc_find_ext_name(from, to->ext_Names[j],					      NUMBER)) >= 0) {		if (_nc_del_ext_name(to, name, STRING)		    || _nc_del_ext_name(to, name, BOOLEAN)) {		    k = _nc_ins_ext_name(to, name, NUMBER);		    to->Numbers[k] = CANCELLED_NUMERIC;		} else {		    j++;		}	    }	} else {	    j++;	}    }}NCURSES_EXPORT(void)_nc_align_termtype(TERMTYPE * to, TERMTYPE * from){    int na = NUM_EXT_NAMES(to);    int nb = NUM_EXT_NAMES(from);    int n;    bool same;    char **ext_Names;    int ext_Booleans, ext_Numbers, ext_Strings;    DEBUG(2, ("align_termtype to(%d:%s), from(%d:%s)", na, to->term_names,	      nb, from->term_names));    if (na != 0 || nb != 0) {	if ((na == nb)		/* check if the arrays are equivalent */	    &&(to->ext_Booleans == from->ext_Booleans)	    && (to->ext_Numbers == from->ext_Numbers)	    && (to->ext_Strings == from->ext_Strings)) {	    for (n = 0, same = TRUE; n < na; n++) {		if (strcmp(to->ext_Names[n], from->ext_Names[n])) {		    same = FALSE;		    break;		}	    }	    if (same)		return;	}	/*	 * This is where we pay for having a simple extension representation. 	 * Allocate a new ext_Names array and merge the two ext_Names arrays	 * into it, updating to's counts for booleans, etc.  Fortunately we do	 * this only for the terminfo compiler (tic) and comparer (infocmp).	 */	ext_Names = typeMalloc(char *, na + nb);	if (to->ext_Strings && (from->ext_Booleans + from->ext_Numbers))	    adjust_cancels(to, from);	if (from->ext_Strings && (to->ext_Booleans + to->ext_Numbers))	    adjust_cancels(from, to);	ext_Booleans = merge_names(ext_Names,				   to->ext_Names,				   to->ext_Booleans,				   from->ext_Names,				   from->ext_Booleans);	ext_Numbers = merge_names(ext_Names + ext_Booleans,				  to->ext_Names				  + to->ext_Booleans,				  to->ext_Numbers,				  from->ext_Names				  + from->ext_Booleans,				  from->ext_Numbers);	ext_Strings = merge_names(ext_Names + ext_Numbers + ext_Booleans,				  to->ext_Names				  + to->ext_Booleans				  + to->ext_Numbers,				  to->ext_Strings,				  from->ext_Names				  + from->ext_Booleans				  + from->ext_Numbers,				  from->ext_Strings);	/*	 * Now we must reallocate the Booleans, etc., to allow the data to be	 * overlaid.	 */	if (na != (ext_Booleans + ext_Numbers + ext_Strings)) {	    realign_data(to, ext_Names, ext_Booleans, ext_Numbers, ext_Strings);	    FreeIfNeeded(to->ext_Names);	    to->ext_Names = ext_Names;	    DEBUG(2, ("realigned %d extended names for '%s' (to)",		      NUM_EXT_NAMES(to), to->term_names));	}	if (nb != (ext_Booleans + ext_Numbers + ext_Strings)) {	    nb = (ext_Booleans + ext_Numbers + ext_Strings);	    realign_data(from, ext_Names, ext_Booleans, ext_Numbers, ext_Strings);	    from->ext_Names = typeRealloc(char *, nb, from->ext_Names);	    memcpy(from->ext_Names, ext_Names, sizeof(char *) * nb);	    DEBUG(2, ("realigned %d extended names for '%s' (from)",		      NUM_EXT_NAMES(from), from->term_names));	}    }}#endifNCURSES_EXPORT(void)_nc_copy_termtype(TERMTYPE * dst, TERMTYPE * src){    unsigned i;    *dst = *src;		/* ...to copy the sizes and string-tables */    dst->Booleans = typeMalloc(char, NUM_BOOLEANS(dst));    dst->Numbers = typeMalloc(short, NUM_NUMBERS(dst));    dst->Strings = typeMalloc(char *, NUM_STRINGS(dst));    /* FIXME: use memcpy for these and similar loops */    for_each_boolean(i, dst)	dst->Booleans[i] = src->Booleans[i];    for_each_number(i, dst)	dst->Numbers[i] = src->Numbers[i];    for_each_string(i, dst)	dst->Strings[i] = src->Strings[i];    /* FIXME: we probably should also copy str_table and ext_str_table,     * but tic and infocmp are not written to exploit that (yet).     */#if NCURSES_XNAMES    if ((i = NUM_EXT_NAMES(src)) != 0) {	dst->ext_Names = typeMalloc(char *, i);	memcpy(dst->ext_Names, src->ext_Names, i * sizeof(char *));    } else {	dst->ext_Names = 0;    }#endif}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美www视频| 韩国精品主播一区二区在线观看| 欧美男女性生活在线直播观看 | 三级亚洲高清视频| 国产欧美日韩一区二区三区在线观看| 欧美日韩在线播放| 高清免费成人av| 99久久综合色| 久久精品国产一区二区三 | 97精品国产97久久久久久久久久久久| 日韩高清国产一区在线| 国产精品短视频| 久久久久久97三级| 精品乱人伦一区二区三区| 欧美色欧美亚洲另类二区| 99国产精品久久久| 国产一区二区三区久久悠悠色av| 亚洲国产一二三| 一区二区三区波多野结衣在线观看| 久久精品欧美一区二区三区不卡| 91精品国产麻豆国产自产在线| 欧美在线小视频| 成人av影视在线观看| 黄页视频在线91| 轻轻草成人在线| 日本成人在线视频网站| 午夜亚洲福利老司机| 一区二区三区四区精品在线视频| 国产欧美日韩亚州综合| 久久综合久久鬼色| 精品少妇一区二区三区视频免付费| 欧美日韩三级视频| 欧美撒尿777hd撒尿| 91视频国产资源| 99国产精品一区| 91视频观看视频| 99精品久久久久久| 97精品视频在线观看自产线路二| 成人性生交大片免费看视频在线| 国产成人午夜精品5599| 国产成人精品免费视频网站| 国产在线观看免费一区| 国产成人啪午夜精品网站男同| 国产一区福利在线| 国产风韵犹存在线视精品| 高清在线成人网| www.亚洲激情.com| 欧美亚一区二区| 欧美精三区欧美精三区| 欧美一区二区大片| 欧美成人激情免费网| 久久久久久9999| 国产精品福利影院| 一区二区三区四区高清精品免费观看| 亚洲自拍偷拍av| 日本欧美在线观看| 国产在线一区二区综合免费视频| 国产成人免费网站| 色吊一区二区三区| 9191成人精品久久| 久久先锋资源网| 国产精品欧美一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲一区二区三区爽爽爽爽爽| 日韩av一区二区在线影视| 亚洲精品免费视频| 91国产免费观看| 欧美日产国产精品| 欧美一级二级三级蜜桃| 久久久91精品国产一区二区三区| 中文字幕第一页久久| 亚洲国产视频一区| 美女任你摸久久| 暴力调教一区二区三区| 欧美片网站yy| 中文在线资源观看网站视频免费不卡 | 国产精品高清亚洲| 婷婷久久综合九色综合绿巨人| 国内精品写真在线观看| 色av成人天堂桃色av| 日韩欧美国产wwwww| 成人欧美一区二区三区视频网页| 亚洲va国产天堂va久久en| 国产美女av一区二区三区| 日本高清成人免费播放| 久久精品人人做| 亚州成人在线电影| 成人久久久精品乱码一区二区三区| 欧亚洲嫩模精品一区三区| 国产精品网曝门| 国产精品嫩草99a| 午夜亚洲国产au精品一区二区| 国产精品综合久久| 欧美久久一二区| 中文字幕在线一区| 久久国产精品第一页| 91免费观看视频| 久久影院电视剧免费观看| 香蕉影视欧美成人| 色综合色狠狠综合色| 久久久久国产成人精品亚洲午夜| 午夜激情一区二区三区| 色综合久久久久综合体| 欧美激情一区二区三区在线| 91精品国产色综合久久| 精品中文字幕一区二区小辣椒| 日韩丝袜情趣美女图片| 一区二区三区高清在线| 99热99精品| 亚洲一二三四久久| 在线观看区一区二| 最新高清无码专区| 成人动漫在线一区| 国产精品色婷婷| 国产91在线看| 国产精品麻豆视频| 99久久精品费精品国产一区二区| 国产精品入口麻豆九色| 国产一区二区三区美女| 精品对白一区国产伦| 99久久国产综合精品女不卡| 国产精品沙发午睡系列990531| 欧美日韩亚洲国产综合| 亚洲综合在线视频| 日本一区二区三区视频视频| 91精品视频网| 国产乱人伦偷精品视频不卡| 欧洲激情一区二区| 玉足女爽爽91| 日韩一区二区视频在线观看| 丁香啪啪综合成人亚洲小说 | 国产精品伦一区二区三级视频| 国产大陆a不卡| 国产调教视频一区| 91精品久久久久久久99蜜桃| 欧美精品一区二| 亚洲最新在线观看| 在线观看网站黄不卡| 国产人伦精品一区二区| 国产高清精品久久久久| 日本一区二区三区电影| 国产不卡在线视频| 中文字幕久久午夜不卡| 99re6这里只有精品视频在线观看| 国产精品久久99| 色8久久人人97超碰香蕉987| 亚洲综合丝袜美腿| 欧美日本韩国一区| 精品亚洲成a人| 国产精品美女久久久久久久久久久| 成人国产精品免费观看动漫| 亚洲欧美日韩中文字幕一区二区三区 | 欧美变态tickling挠脚心| 六月丁香婷婷久久| 国产欧美精品区一区二区三区 | 精品日韩欧美在线| 国产一二精品视频| 国产精品天干天干在线综合| 91香蕉视频污在线| 日韩中文字幕一区二区三区| 欧美v日韩v国产v| 99re在线精品| 午夜精品爽啪视频| 亚洲精品一区二区三区精华液| 精品视频在线免费观看| 丝袜美腿一区二区三区| 亚洲精品一区二区三区蜜桃下载| 99视频国产精品| 日韩福利电影在线| 久久婷婷久久一区二区三区| 91蝌蚪porny| 免费观看一级欧美片| 国产精品一区二区黑丝| 久久综合狠狠综合久久综合88| 99综合电影在线视频| 肉肉av福利一精品导航| 日本一区二区三区国色天香| 欧美日韩亚洲丝袜制服| 国产成人亚洲综合a∨婷婷图片 | 麻豆91免费观看| 亚洲三级小视频| 精品动漫一区二区三区在线观看| 99精品久久只有精品| 美女视频黄久久| 一区二区三区在线视频免费观看| 欧美精品一区二区三区蜜桃视频| 色婷婷精品大在线视频| 国产精品资源网站| 亚洲18女电影在线观看| 中文字幕亚洲精品在线观看| 欧美xxxxxxxxx| 欧美视频中文一区二区三区在线观看| 国产中文字幕精品| 日韩国产成人精品| 亚洲精品免费在线观看| 欧美国产一区二区| 精品国产一区二区三区不卡 | 免费成人在线观看| 夜夜夜精品看看| 中文字幕亚洲视频|