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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tktextbtree.c

?? linux系統下的音頻通信
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*  * tkTextBTree.c -- * *	This file contains code that manages the B-tree representation *	of text for Tk's text widget and implements character and *	toggle segment types. * * Copyright (c) 1992-1994 The Regents of the University of California. * Copyright (c) 1994-1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * SCCS: @(#) tkTextBTree.c 1.37 97/04/25 16:52:00 */#include "tkInt.h"#include "tkPort.h"#include "tkText.h"/* * The data structure below keeps summary information about one tag as part * of the tag information in a node. */typedef struct Summary {    TkTextTag *tagPtr;			/* Handle for tag. */    int toggleCount;			/* Number of transitions into or					 * out of this tag that occur in					 * the subtree rooted at this node. */    struct Summary *nextPtr;		/* Next in list of all tags for same					 * node, or NULL if at end of list. */} Summary;/* * The data structure below defines a node in the B-tree. */typedef struct Node {    struct Node *parentPtr;		/* Pointer to parent node, or NULL if					 * this is the root. */    struct Node *nextPtr;		/* Next in list of siblings with the					 * same parent node, or NULL for end					 * of list. */    Summary *summaryPtr;		/* First in malloc-ed list of info					 * about tags in this subtree (NULL if					 * no tag info in the subtree). */    int level;				/* Level of this node in the B-tree.					 * 0 refers to the bottom of the tree					 * (children are lines, not nodes). */    union {				/* First in linked list of children. */	struct Node *nodePtr;		/* Used if level > 0. */	TkTextLine *linePtr;		/* Used if level == 0. */    } children;    int numChildren;			/* Number of children of this node. */    int numLines;			/* Total number of lines (leaves) in					 * the subtree rooted here. */} Node;/* * Upper and lower bounds on how many children a node may have: * rebalance when either of these limits is exceeded.  MAX_CHILDREN * should be twice MIN_CHILDREN and MIN_CHILDREN must be >= 2. */#define MAX_CHILDREN 12#define MIN_CHILDREN 6/* * The data structure below defines an entire B-tree. */typedef struct BTree {    Node *rootPtr;			/* Pointer to root of B-tree. */    TkText *textPtr;			/* Used to find tagTable in consistency					 * checking code */} BTree;/* * The structure below is used to pass information between * TkBTreeGetTags and IncCount: */typedef struct TagInfo {    int numTags;			/* Number of tags for which there					 * is currently information in					 * tags and counts. */    int arraySize;			/* Number of entries allocated for					 * tags and counts. */    TkTextTag **tagPtrs;		/* Array of tags seen so far.					 * Malloc-ed. */    int *counts;			/* Toggle count (so far) for each					 * entry in tags.  Malloc-ed. */} TagInfo;/* * Variable that indicates whether to enable consistency checks for * debugging. */int tkBTreeDebug = 0;/* * Macros that determine how much space to allocate for new segments: */#define CSEG_SIZE(chars) ((unsigned) (Tk_Offset(TkTextSegment, body) \	+ 1 + (chars)))#define TSEG_SIZE ((unsigned) (Tk_Offset(TkTextSegment, body) \	+ sizeof(TkTextToggle)))/* * Forward declarations for procedures defined in this file: */static void		ChangeNodeToggleCount _ANSI_ARGS_((Node *nodePtr,			    TkTextTag *tagPtr, int delta));static void		CharCheckProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static int		CharDeleteProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr, int treeGone));static TkTextSegment *	CharCleanupProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static TkTextSegment *	CharSplitProc _ANSI_ARGS_((TkTextSegment *segPtr,			    int index));static void		CheckNodeConsistency _ANSI_ARGS_((Node *nodePtr));static void		CleanupLine _ANSI_ARGS_((TkTextLine *linePtr));static void		DeleteSummaries _ANSI_ARGS_((Summary *tagPtr));static void		DestroyNode _ANSI_ARGS_((Node *nodePtr));static TkTextSegment *	FindTagEnd _ANSI_ARGS_((TkTextBTree tree, 			    TkTextTag *tagPtr, TkTextIndex *indexPtr));static void		IncCount _ANSI_ARGS_((TkTextTag *tagPtr, int inc,			    TagInfo *tagInfoPtr));static void		Rebalance _ANSI_ARGS_((BTree *treePtr, Node *nodePtr));static void		RecomputeNodeCounts _ANSI_ARGS_((Node *nodePtr));static TkTextSegment *	SplitSeg _ANSI_ARGS_((TkTextIndex *indexPtr));static void		ToggleCheckProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static TkTextSegment *	ToggleCleanupProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static int		ToggleDeleteProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr, int treeGone));static void		ToggleLineChangeProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static TkTextSegment *	FindTagStart _ANSI_ARGS_((TkTextBTree tree,			    TkTextTag *tagPtr, TkTextIndex *indexPtr));/* * Type record for character segments: */Tk_SegType tkTextCharType = {    "character",				/* name */    0,						/* leftGravity */    CharSplitProc,				/* splitProc */    CharDeleteProc,				/* deleteProc */    CharCleanupProc,				/* cleanupProc */    (Tk_SegLineChangeProc *) NULL,		/* lineChangeProc */    TkTextCharLayoutProc,			/* layoutProc */    CharCheckProc				/* checkProc */};/* * Type record for segments marking the beginning of a tagged * range: */Tk_SegType tkTextToggleOnType = {    "toggleOn",					/* name */    0,						/* leftGravity */    (Tk_SegSplitProc *) NULL,			/* splitProc */    ToggleDeleteProc,				/* deleteProc */    ToggleCleanupProc,				/* cleanupProc */    ToggleLineChangeProc,			/* lineChangeProc */    (Tk_SegLayoutProc *) NULL,			/* layoutProc */    ToggleCheckProc				/* checkProc */};/* * Type record for segments marking the end of a tagged * range: */Tk_SegType tkTextToggleOffType = {    "toggleOff",				/* name */    1,						/* leftGravity */    (Tk_SegSplitProc *) NULL,			/* splitProc */    ToggleDeleteProc,				/* deleteProc */    ToggleCleanupProc,				/* cleanupProc */    ToggleLineChangeProc,			/* lineChangeProc */    (Tk_SegLayoutProc *) NULL,			/* layoutProc */    ToggleCheckProc				/* checkProc */};/* *---------------------------------------------------------------------- * * TkBTreeCreate -- * *	This procedure is called to create a new text B-tree. * * Results: *	The return value is a pointer to a new B-tree containing *	one line with nothing but a newline character. * * Side effects: *	Memory is allocated and initialized. * *---------------------------------------------------------------------- */TkTextBTreeTkBTreeCreate(textPtr)    TkText *textPtr;{    register BTree *treePtr;    register Node *rootPtr;    register TkTextLine *linePtr, *linePtr2;    register TkTextSegment *segPtr;    /*     * The tree will initially have two empty lines.  The second line     * isn't actually part of the tree's contents, but its presence     * makes several operations easier.  The tree will have one node,     * which is also the root of the tree.     */    rootPtr = (Node *) ckalloc(sizeof(Node));    linePtr = (TkTextLine *) ckalloc(sizeof(TkTextLine));    linePtr2 = (TkTextLine *) ckalloc(sizeof(TkTextLine));    rootPtr->parentPtr = NULL;    rootPtr->nextPtr = NULL;    rootPtr->summaryPtr = NULL;    rootPtr->level = 0;    rootPtr->children.linePtr = linePtr;    rootPtr->numChildren = 2;    rootPtr->numLines = 2;    linePtr->parentPtr = rootPtr;    linePtr->nextPtr = linePtr2;    segPtr = (TkTextSegment *) ckalloc(CSEG_SIZE(1));    linePtr->segPtr = segPtr;    segPtr->typePtr = &tkTextCharType;    segPtr->nextPtr = NULL;    segPtr->size = 1;    segPtr->body.chars[0] = '\n';    segPtr->body.chars[1] = 0;    linePtr2->parentPtr = rootPtr;    linePtr2->nextPtr = NULL;    segPtr = (TkTextSegment *) ckalloc(CSEG_SIZE(1));    linePtr2->segPtr = segPtr;    segPtr->typePtr = &tkTextCharType;    segPtr->nextPtr = NULL;    segPtr->size = 1;    segPtr->body.chars[0] = '\n';    segPtr->body.chars[1] = 0;    treePtr = (BTree *) ckalloc(sizeof(BTree));    treePtr->rootPtr = rootPtr;    treePtr->textPtr = textPtr;    return (TkTextBTree) treePtr;}/* *---------------------------------------------------------------------- * * TkBTreeDestroy -- * *	Delete a B-tree, recycling all of the storage it contains. * * Results: *	The tree given by treePtr is deleted.  TreePtr should never *	again be used. * * Side effects: *	Memory is freed. * *---------------------------------------------------------------------- */voidTkBTreeDestroy(tree)    TkTextBTree tree;			/* Pointer to tree to delete. */ {    BTree *treePtr = (BTree *) tree;    DestroyNode(treePtr->rootPtr);    ckfree((char *) treePtr);}/* *---------------------------------------------------------------------- * * DestroyNode -- * *	This is a recursive utility procedure used during the deletion *	of a B-tree. * * Results: *	None. * * Side effects: *	All the storage for nodePtr and its descendants is freed. * *---------------------------------------------------------------------- */static voidDestroyNode(nodePtr)    register Node *nodePtr;{    if (nodePtr->level == 0) {	TkTextLine *linePtr;	TkTextSegment *segPtr;	while (nodePtr->children.linePtr != NULL) {	    linePtr = nodePtr->children.linePtr;	    nodePtr->children.linePtr = linePtr->nextPtr;	    while (linePtr->segPtr != NULL) {		segPtr = linePtr->segPtr;		linePtr->segPtr = segPtr->nextPtr;		(*segPtr->typePtr->deleteProc)(segPtr, linePtr, 1);	    }	    ckfree((char *) linePtr);	}    } else {	register Node *childPtr;	while (nodePtr->children.nodePtr != NULL) {	    childPtr = nodePtr->children.nodePtr;	    nodePtr->children.nodePtr = childPtr->nextPtr;	    DestroyNode(childPtr);	}    }    DeleteSummaries(nodePtr->summaryPtr);    ckfree((char *) nodePtr);}/* *---------------------------------------------------------------------- * * DeleteSummaries -- * *	Free up all of the memory in a list of tag summaries associated *	with a node. * * Results: *	None. * * Side effects: *	Storage is released. * *---------------------------------------------------------------------- */static voidDeleteSummaries(summaryPtr)    register Summary *summaryPtr;	/* First in list of node's tag					 * summaries. */{    register Summary *nextPtr;    while (summaryPtr != NULL) {	nextPtr = summaryPtr->nextPtr;	ckfree((char *) summaryPtr);	summaryPtr = nextPtr;    }}/* *---------------------------------------------------------------------- * * TkBTreeInsertChars -- * *	Insert characters at a given position in a B-tree. * * Results: *	None. * * Side effects: *	Characters are added to the B-tree at the given position. *	If the string contains newlines, new lines will be added, *	which could cause the structure of the B-tree to change. * *---------------------------------------------------------------------- */voidTkBTreeInsertChars(indexPtr, string)    register TkTextIndex *indexPtr;	/* Indicates where to insert text.					 * When the procedure returns, this					 * index is no longer valid because					 * of changes to the segment					 * structure. */    char *string;			/* Pointer to bytes to insert (may					 * contain newlines, must be null-					 * terminated). */{    register Node *nodePtr;    register TkTextSegment *prevPtr;	/* The segment just before the first					 * new segment (NULL means new segment					 * is at beginning of line). */    TkTextSegment *curPtr;		/* Current segment;  new characters					 * are inserted just after this one. 					 * NULL means insert at beginning of					 * line. */    TkTextLine *linePtr;		/* Current line (new segments are					 * added to this line). */    register TkTextSegment *segPtr;    TkTextLine *newLinePtr;    int chunkSize;			/* # characters in current chunk. */    register char *eol;			/* Pointer to character just after last					 * one in current chunk. */    int changeToLineCount;		/* Counts change to total number of					 * lines in file. */    prevPtr = SplitSeg(indexPtr);    linePtr = indexPtr->linePtr;    curPtr = prevPtr;    /*     * Chop the string up into lines and create a new segment for     * each line, plus a new line for the leftovers from the     * previous line.     */    changeToLineCount = 0;    while (*string != 0) {	for (eol = string; *eol != 0; eol++) {	    if (*eol == '\n') {		eol++;		break;	    }	}	chunkSize = eol-string;	segPtr = (TkTextSegment *) ckalloc(CSEG_SIZE(chunkSize));	segPtr->typePtr = &tkTextCharType;	if (curPtr == NULL) {	    segPtr->nextPtr = linePtr->segPtr;	    linePtr->segPtr = segPtr;	} else {	    segPtr->nextPtr = curPtr->nextPtr;	    curPtr->nextPtr = segPtr;	}	segPtr->size = chunkSize;	strncpy(segPtr->body.chars, string, (size_t) chunkSize);	segPtr->body.chars[chunkSize] = 0;	if (eol[-1] != '\n') {	    break;	}	/*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品专区在线影院重磅| 亚洲福中文字幕伊人影院| 日韩一区中文字幕| 麻豆一区二区在线| 一本到一区二区三区| 国产亚洲一二三区| 日韩vs国产vs欧美| 色综合久久久久网| 欧美激情一区二区三区蜜桃视频| 丝袜国产日韩另类美女| 色婷婷亚洲精品| 国产精品国产三级国产a| 国模冰冰炮一区二区| 91精品视频网| 亚洲曰韩产成在线| 91丨九色丨国产丨porny| 国产午夜精品一区二区三区视频| 日本视频一区二区| 欧美日韩国产高清一区二区三区 | 91.成人天堂一区| 亚洲三级在线播放| 成人在线视频一区二区| 久久久久综合网| 狠狠色丁香婷综合久久| 精品免费一区二区三区| 香港成人在线视频| 在线观看91精品国产麻豆| 伊人婷婷欧美激情| 欧美日韩小视频| 亚洲1区2区3区4区| 91超碰这里只有精品国产| 天天色天天操综合| 91精品国产一区二区| 首页欧美精品中文字幕| 欧美丰满美乳xxx高潮www| 五月天精品一区二区三区| 在线不卡一区二区| 蜜桃视频在线一区| 26uuuu精品一区二区| 国产一区不卡在线| 亚洲国产精品精华液2区45| 国产成人亚洲综合a∨婷婷图片| 久久久精品蜜桃| 99r国产精品| 亚洲综合另类小说| 91精品国产高清一区二区三区蜜臀| 免费一级欧美片在线观看| 欧美成人国产一区二区| 粉嫩蜜臀av国产精品网站| 中文字幕欧美一| 欧美精品精品一区| 麻豆精品一区二区综合av| 国产欧美日韩在线观看| 99re在线精品| 日韩精品欧美成人高清一区二区| 日韩精品在线一区二区| 成人免费毛片app| 香港成人在线视频| 国产午夜精品一区二区三区视频| 色综合久久久久久久| 麻豆精品新av中文字幕| 国产精品美女久久久久久| 欧美日韩国产美女| 成人亚洲一区二区一| 亚洲影院理伦片| 久久久久国产免费免费| 欧洲一区二区三区在线| 久88久久88久久久| 日韩伦理电影网| 欧美成人bangbros| 91福利视频久久久久| 精品亚洲成a人| 亚洲综合久久久| 欧美高清在线一区| 日韩久久精品一区| 在线精品视频一区二区三四 | av在线不卡观看免费观看| 亚洲国产欧美在线| 国产欧美一区二区精品性| 欧美亚洲高清一区| 99久久精品国产一区二区三区| 免费xxxx性欧美18vr| 亚洲三级久久久| 国产欧美日韩中文久久| 日韩一级免费一区| 欧美性极品少妇| jvid福利写真一区二区三区| 久久国内精品自在自线400部| 亚洲激情综合网| 国产精品美女久久久久久久| 欧美精品一区二区高清在线观看| 欧美亚洲另类激情小说| 91色porny在线视频| 国产mv日韩mv欧美| 国产一区二区精品在线观看| 美日韩一区二区三区| 偷偷要91色婷婷| 亚洲一区视频在线观看视频| 亚洲人精品午夜| 最新日韩在线视频| 国产精品无圣光一区二区| 久久精品欧美一区二区三区不卡| 欧美一卡2卡3卡4卡| 欧美偷拍一区二区| 欧美系列在线观看| 欧美日韩一区小说| 欧美三片在线视频观看| 欧美性受xxxx黑人xyx| 日本黄色一区二区| 在线观看日韩av先锋影音电影院| 一本色道久久加勒比精品| 91免费版pro下载短视频| 成人免费毛片app| 成人av资源站| 91女厕偷拍女厕偷拍高清| 91在线观看下载| 色婷婷综合久久| 欧美无砖专区一中文字| 欧美三级日韩三级| 在线电影一区二区三区| 欧美一区二区在线播放| 91精品国产综合久久香蕉的特点 | 国产精品久久久久aaaa樱花| 欧美激情在线观看视频免费| 国产精品久久久久久久浪潮网站 | 欧美日本视频在线| 91精品国产综合久久精品| 日韩免费观看高清完整版| 精品国产免费人成在线观看| 国产欧美一区二区精品久导航| 中文字幕亚洲综合久久菠萝蜜| 一区二区三区蜜桃网| 午夜精品福利一区二区三区av| 日韩和欧美一区二区三区| 国模少妇一区二区三区| 99热精品一区二区| 在线观看日韩国产| 日韩精品一区二区三区视频播放 | 日韩精品1区2区3区| 麻豆久久久久久| 波波电影院一区二区三区| 色一情一伦一子一伦一区| 欧美高清hd18日本| 日本一区二区三区电影| 亚洲一二三四在线观看| 久久99久久99小草精品免视看| 国产精品66部| 91久久精品网| 精品国产免费一区二区三区四区 | 国产一区二区精品久久| 色综合天天综合网天天看片| 欧美嫩在线观看| 国产精品色在线| 日本不卡在线视频| 99久久精品免费看国产免费软件| 91精品国产欧美日韩| 国产精品亲子乱子伦xxxx裸| 午夜精品福利一区二区三区av | 亚洲精品一二三| 久草精品在线观看| 色噜噜久久综合| 久久午夜色播影院免费高清| 亚洲国产毛片aaaaa无费看| 国产精品中文有码| 欧美日韩亚洲综合一区| 国产精品美日韩| 久草这里只有精品视频| 欧美日韩在线直播| 国产精品白丝在线| 国产美女在线观看一区| 欧美人与性动xxxx| 中文字幕亚洲在| 国产成人午夜视频| 欧美电影免费观看完整版| 亚洲一区二区五区| 99re免费视频精品全部| 精品福利视频一区二区三区| 午夜久久久久久电影| 色哟哟一区二区在线观看| 久久精品在这里| 精品一区二区综合| 日韩欧美亚洲一区二区| 亚洲妇女屁股眼交7| 日本高清成人免费播放| 中文字幕亚洲视频| 成人av免费观看| 国产女主播一区| 国产精品原创巨作av| 日韩欧美综合一区| 日本va欧美va精品发布| 欧美日韩国产大片| 午夜国产不卡在线观看视频| 在线免费视频一区二区| 亚洲欧美日韩在线| 色老汉一区二区三区| 亚洲免费观看高清完整版在线观看 | 视频一区中文字幕国产| 欧美精品第1页| 男女男精品网站| 日韩精品中文字幕在线不卡尤物|