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

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

?? htndir.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*	HTNewsDir_setWidth**	------------------**	The module automatically ajusts the width of the directory listing as**	a function of the file name. The width can flows dynamically between**	an upper and a lower limit.*/PUBLIC BOOL HTNewsDir_setWidth (int max_width){    MaxLineW = (max_width > 0) ? max_width : DEFAULT_MAXW;    return YES;}/*	HTNewsDir_new**	----------**    	Creates a structured stream object and sets up the initial HTML stuff**	Returns the newsdir object if OK, else NULL*/PUBLIC HTNewsDir * HTNewsDir_new (HTRequest * request, const char * title,				  HTNewsDirKey key, BOOL cache){    HTNewsDir *dir;    if (!request) return NULL;    /* Create object */    if ((dir = (HTNewsDir *) HT_CALLOC(1, sizeof (HTNewsDir))) == NULL)        HT_OUTOFMEM("HTNewsDir_new");    dir->target = HTMLGenerator(request, NULL, WWW_HTML,				HTRequest_outputFormat(request),				HTRequest_outputStream(request));    HTAnchor_setFormat(HTRequest_anchor(request), WWW_HTML);    dir->request = request;    dir->key = key;    dir->lastLevel = -1;  /* Added by MP. */    /*  Get the newsgroup(s) name; added by MP. */    {        char* url = HTAnchor_physical(HTRequest_anchor(request));        char* p = url+strlen(url);        while (p > url && p[-1] != ':' && p[-1] != '/' && p[-1] != '\\')            p--;        StrAllocCopy (dir->name, p);    }    if (key != HT_NDK_NONE) {			       /* Thread is unsorted */	int total = HTNews_maxArticles();	dir->array = HTArray_new(total > 0 ? total : 128);    }    /* If we are asked to prepare a cache entry then create the cache array */    if (cache) {	int total = HTNews_maxArticles();	dir->cache = HTArray_new(total > 0 ? total : 128);    }    /* Start the HTML stuff */    {	HTStructured *target = dir->target;	const char *msg = title ? title : "News Listing";	START(HTML_HTML);	START(HTML_HEAD);	START(HTML_TITLE);	PUTS(msg);	END(HTML_TITLE);	END(HTML_HEAD);	START(HTML_BODY);	START(HTML_H1);	PUTS(msg);	END(HTML_H1);    }    return dir;}/*	HTNewsDir_addElement**	--------------------**    	This function accepts a news line. Everything except dir and name can**	can be 0 or NULL.**	Returns new node pointer if OK, else NULL**	Changed by MP: reference list added.**	Note: Unlike other parameters, refNames is not copied, but assigned, so**	it has to contain copies of message names, not the originals.*/PUBLIC HTNewsNode* HTNewsDir_addElement (HTNewsDir * dir, int index, 					 char * subject, char * from,					 time_t date, char * name,					 int refs, HTList * refNames){    if (dir && name) {	HTNewsNode * node = HTNewsNode_new(index, subject, from,					   date, name, refs, refNames);	if (dir->key == HT_NDK_NONE) {	    HTNewsNode_print(dir, node);	    HTNewsNode_delete(node, (dir->cache!=NULL));	} else	    HTArray_addObject(dir->array, (void *) node);	return node;    }    return NULL;}/* Helper function - added by MP. */PRIVATE HTNewsNode* HTNewsDir_addFakeElement (HTNewsDir * dir, 					      char * subject, char * name){    HTNewsNode * node =	HTNewsDir_addElement(dir, 0, subject, NULL, 0, name, 0, NULL);    if (node) {	node->show = NO;	node->fake = YES;    }    return node;}/* Helper function - added by MP. */PUBLIC HTNewsNode * HTNewsDir_addGroupElement (HTNewsDir * dir, char * group,					       BOOL tmplate){    HTNewsNode * node = NULL;    if (dir && group) {	if (HTNewsDir_belongsToSet(dir, group))	    node=HTNewsDir_addElement (dir, 0, group, NULL, 0, group, 0, NULL);	/* If we are building a cache object then add the entry */	if (dir->cache && !tmplate) {	    char * name = node ? node->name : NULL;	    if (!name) StrAllocCopy(name, group);	    HTArray_addObject(dir->cache, name);	}    }    return node;}/* Added by MP. */PUBLIC BOOL HTNewsDir_belongsToSet (HTNewsDir* dir, char* group){    char* p;    if (!dir->name || !*(dir->name))        return YES;    p = strrchr(dir->name, '*');    if (!p)        return strcasecomp(group, dir->name) == 0;    else    {        int len = p - dir->name;        return strncasecomp(group, dir->name, len) == 0;    }}/* Added by MP. */PRIVATE void HTNewsDir_addLevelTags (HTNewsDir* dir, int level){    HTStructured *target = dir->target;    int i = level;    while (i > dir->lastLevel)    {        START(HTML_UL);        i--;    }    while (i < dir->lastLevel)    {        END(HTML_UL);        i++;    }    dir->lastLevel = level;}/* Added by MP. */PRIVATE HTNewsNode* HTNewsDir_findNodeNamed (HTNewsDir* dir, char* name){    int i;    for (i = 0; i < HTArray_size(dir->array); i++)    {        HTNewsNode* node = (HTNewsNode*)(HTArray_data(dir->array)[i]);        if (node->name && strcasecomp(node->name, name) == 0)            return node;    }    return NULL;}/* Added by MP. */PRIVATE HTNewsNode* HTNewsDir_findNodeWithSubject (HTNewsDir* dir,     char* subject, int which, HTNewsNode* avoidNode){    int i;    int whichDate = (which & FNWS_MIN ? -1 : (which & FNWS_MAX ? 1 : 0));    HTNewsNode* foundNode = NULL;    for (i = 0; i < HTArray_size(dir->array); i++)    {        HTNewsNode* node = (HTNewsNode*)(HTArray_data(dir->array)[i]);        if (!(which & FNWS_ONLYFAKE && !node->fake) &&             !(which & FNWS_NOTFAKE && node->fake) &&            !(which & FNWS_NOTORPHAN && !node->fake && !node->refNames) &&            node != avoidNode && node->subject &&             strcasecomp(node->subject, subject) == 0)        {            if (which == FNWS_ANY)                return node;            else if (!foundNode || (node->date != 0 &&                 (node->date - foundNode->date) * (long)whichDate > 0))                foundNode = node;        }                      }    return foundNode;}/* Added by MP. */PRIVATE void HTNewsDir_setRefInfo (HTNewsDir* dir){    /* Array grows when fake elements are added.  */    /* We don't want to set reference info for fake elements. */    int size = HTArray_size(dir->array);    int i;    for (i = 0; i < size; i++)        HTNewsNode_setRefInfo_pass1 (dir, (HTNewsNode*)(HTArray_data(dir->array)[i]));    for (i = 0; i < size; i++)        HTNewsNode_setRefInfo_pass2 (dir, (HTNewsNode*)(HTArray_data(dir->array)[i]));    for (i = 0; i < size; i++)        HTNewsNode_setRefInfo_pass3 (dir, (HTNewsNode*)(HTArray_data(dir->array)[i]));}PRIVATE void make_template (HTNewsDir * dir, HTNewsNode * node){    HT_FREE(dir->tmplate);    if ((dir->tmplate = (char *) HT_MALLOC(strlen(node->name) + 3)) == NULL)	HT_OUTOFMEM("HTNewsNode_setGroupInfo");    {	char * p1 = dir->name;	char * p2 = dir->tmplate;	strcpy(p2, node->name);	while (*p1 && *p2 && *p1 == *p2)  p1++, p2++;	while (*p2 && *p2 != '.') p2++;	if (*p2) {	    strcpy(p2, ".*");	    dir->tmplate_node=HTNewsDir_addGroupElement(dir, dir->tmplate,YES);	    dir->tmplate_node->is_tmplate = YES;	} else {	    HT_FREE(dir->tmplate);	    dir->tmplate_node = node;	}	dir->tmplate_node->show = YES;    }}/***	Runs through a sorted list of news groups and identifies the group**	hierarchy. Template groups are added to the list, for example as**	"alt.*"*/PRIVATE void HTNewsDir_setGroupInfo (HTNewsDir * dir){    HTArray * array = dir->array;    HTNewsNode * node;    int cur_size = HTArray_size(array);    int cnt;    /*    ** If we don't have a template to test against then create one    ** A template can be something like "alt.*" for example    */    for (cnt=0; cnt<cur_size; cnt++) {	node = (HTNewsNode *) HTArray_data(array)[cnt];	/*	** Make a template if we don't have any	*/	if (!dir->tmplate) make_template(dir, node);    	/*	** Now, if we do have a template then test the node name against	** it to see if we have this group already or it is a new group	** at this level in the hierarchy	*/	if (dir->tmplate) {	    if (HTStrCaseMatch(dir->tmplate, node->name) == NULL) {		make_template(dir, node);	    } else {		HTNewsNode * tmp_node = dir->tmplate_node;				/* Should we show this element in the list? */		if (tmp_node->lastChild) {		    tmp_node->lastChild->show = NO;		    node->show = NO;		}	    }	    HTNewsNode_linkRef(dir->tmplate_node, node);	}    }}PRIVATE int NDirIndexSort (const void *a, const void *b){    int aa = (*((HTNewsNode **)a))->index;    int bb = (*((HTNewsNode **)b))->index;    return aa-bb;}PRIVATE int NDirSubjectSort (const void *a, const void *b){    char *aa = (*((HTNewsNode **)a))->subject;    char *bb = (*((HTNewsNode **)b))->subject;    return strcasecomp(aa?aa:"", bb?bb:"");}PRIVATE int NDirFromSort (const void *a, const void *b){    char *aa = (*((HTNewsNode **)a))->from;    char *bb = (*((HTNewsNode **)b))->from;    return strcasecomp(aa?aa:"", bb?bb:"");}PRIVATE int NDirDateSort (const void *a, const void *b){    time_t aa = (*((HTNewsNode **)a))->date;    time_t bb = (*((HTNewsNode **)b))->date;    return bb-aa;}PRIVATE int NDirGroupSort (const void *a, const void *b){    char *aa = (*((HTNewsNode **)a))->name;    char *bb = (*((HTNewsNode **)b))->name;    while (*aa && *bb && TOLOWER(*aa)==TOLOWER(*bb)) aa++, bb++;    return (*aa=='.' && *bb) ? -1 : (*aa && *bb=='.') ?	1 : TOLOWER(*aa)-TOLOWER(*bb);}/* Added by MP. */PRIVATE int NDirRefThreadSort (const void* a, const void* b){    HTNewsNode* aa = *((HTNewsNode**)a);    HTNewsNode* bb = *((HTNewsNode**)b);    return HTNewsNode_compareRefThread(aa,bb);}/*	HTNewsDir_free**	--------------**    	If we are sorting then do the sorting and put out the list,**	else just append the end of the list.*/PUBLIC BOOL HTNewsDir_free (HTNewsDir * dir){    if (!dir) return NO;    if (dir->key != HT_NDK_NONE) {    	HTArray * array = dir->array;	HTArray * cache = NULL;    	HTComparer * comp = NULL;	/*	** Find a suitable sort key for this listing. The sort function	** depends on the type of new listing we have received.	*/    	if (dir->key == HT_NDK_INDEX)	           /* Sort by Message Number */    	    comp = NDirIndexSort;    	else if (dir->key == HT_NDK_DATE)	             /* Sort by Date */    	    comp = NDirDateSort;    	else if (dir->key == HT_NDK_SUBJECT)           /* Sort after Subject */    	    comp = NDirSubjectSort;             	else if (dir->key == HT_NDK_FROM)		  /* Sort after From */    	    comp = NDirFromSort;    	else if (dir->key == HT_NDK_GROUP) {	  /* Sort as group hierarchi */	    comp = NDirGroupSort;        } else if (dir->key == HT_NDK_REFTHREAD) {    /* Added by MP. */            HTNewsDir_setRefInfo (dir);            comp = NDirRefThreadSort;        } else {    	    HTTRACE(STREAM_TRACE, "NewsListing. Invalid sortkey\n");    	    return NO;    	}	/*	** Now sort the array of news items that we have read with the sort	** function defined by the sort key above.	*/    	HTArray_sort(array, comp);	/*	** If we are showing a group listing then run through the list and	** identify group hierarchy. We have to sort the thing again in order	** to get the new template groups included	*/	if (dir->key == HT_NDK_GROUP) {	    HTNewsDir_setGroupInfo(dir);	    HTArray_sort(array, comp);	}		/*	** After we have sorted the listing, we can write out the result and	** free the array.	*/    	{    	    void ** data;    	    HTNewsNode *node = (HTNewsNode *) HTArray_firstObject(array, data);    	    while (node) {		HTNewsNode_print(dir, node);		/*		** Create a special array for the cache containing the group		** names only and no templates		*/		if (dir->key == HT_NDK_GROUP && !node->is_tmplate)		    HTArray_addObject(cache, node->name);		HTNewsNode_delete(node, (dir->cache!=NULL));		node = (HTNewsNode *) HTArray_nextObject(array, data);    	    }	    HTArray_delete(array);		}	/* Update the cache */	if (dir->cache) HTNewsCache_after(dir->request, NULL, dir->cache, 0);    }    /* Put out the end of the HTML stuff */    {	HTStructured *target = dir->target;	/* END(HTML_UL); */        HTNewsDir_addLevelTags (dir, -1);	START(HTML_HR);	END(HTML_BODY);	END(HTML_HTML);	FREE_TARGET;    }    /* Clean up the dir object */    HT_FREE(dir->name);    HT_FREE(dir->tmplate);    HT_FREE(dir);    return YES;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线亚洲人成电影网站色www| 精品国产一区二区三区忘忧草| 亚洲线精品一区二区三区| 在线观看一区不卡| 亚洲成人在线观看视频| 3atv一区二区三区| 精品综合久久久久久8888| 国产网红主播福利一区二区| 成人一区二区三区中文字幕| 亚洲人成网站在线| 欧美日韩一级片在线观看| 热久久一区二区| 国产欧美日韩视频一区二区| 91美女视频网站| 午夜成人免费视频| 国产亚洲欧美中文| 日本韩国一区二区三区| 日韩黄色小视频| 久久久99精品免费观看| 99久久精品国产精品久久| 亚洲成人资源在线| 久久久不卡网国产精品二区| 色综合久久九月婷婷色综合| 日产欧产美韩系列久久99| 久久久久久免费网| 91国偷自产一区二区开放时间 | 91激情五月电影| 日韩精品亚洲专区| 日本一区二区三区免费乱视频| 色综合色综合色综合| 日本欧美加勒比视频| 欧美高清在线视频| 欧美日韩精品一区二区三区四区| 国产一区高清在线| 一区二区在线观看免费视频播放| 欧美一级搡bbbb搡bbbb| 成人福利视频在线| 视频在线观看一区| 国产精品嫩草影院com| 欧美日韩激情一区二区| 国产成人精品免费看| 亚洲成a人在线观看| 国产日韩三级在线| 制服.丝袜.亚洲.另类.中文| 国产99精品国产| 日韩av中文字幕一区二区| 国产精品理伦片| 日韩免费视频一区二区| 91网站最新网址| 精品午夜久久福利影院| 亚洲自拍偷拍av| 欧美极品xxx| 欧美一区二区在线免费播放| 95精品视频在线| 激情欧美一区二区三区在线观看| 伊人夜夜躁av伊人久久| 国产三级精品三级| 69堂国产成人免费视频| 99精品欧美一区二区三区小说| 蜜臀av性久久久久蜜臀av麻豆| 亚洲色图.com| 国产亚洲综合色| 欧美一区二区三区影视| 91黄色免费版| 不卡大黄网站免费看| 久久99久久久欧美国产| 亚洲已满18点击进入久久| 国产精品亲子伦对白| 欧美mv日韩mv亚洲| 欧美日韩国产天堂| 色婷婷久久久久swag精品| 国产成人av电影| 激情五月激情综合网| 午夜精品一区二区三区电影天堂| 成人欧美一区二区三区黑人麻豆| 精品福利一区二区三区| 欧美伦理电影网| 一本色道久久综合亚洲精品按摩| 国产成人无遮挡在线视频| 久久精品99国产国产精| 亚洲第一狼人社区| 伊人夜夜躁av伊人久久| 亚洲欧洲精品一区二区三区不卡| 久久青草国产手机看片福利盒子 | 久久久精品中文字幕麻豆发布| 欧美男生操女生| 欧日韩精品视频| 色综合天天性综合| 成人精品视频一区二区三区| 国产麻豆视频精品| 久久er精品视频| 久久电影网站中文字幕| 免费成人av在线| 日韩av中文字幕一区二区 | 亚洲五码中文字幕| 亚洲精品中文在线影院| 自拍偷自拍亚洲精品播放| 国产精品女主播在线观看| 国产视频不卡一区| 国产在线不卡视频| 99v久久综合狠狠综合久久| 一本色道久久综合亚洲aⅴ蜜桃| 久久国产精品第一页| 日韩福利电影在线| 日韩综合一区二区| 日韩电影在线一区二区| 三级欧美在线一区| 午夜欧美在线一二页| 午夜伊人狠狠久久| 午夜欧美视频在线观看| 亚洲成人综合网站| 视频一区免费在线观看| 欧美aaaaaa午夜精品| 青青国产91久久久久久| 蜜桃视频在线观看一区二区| 蜜臀av一区二区在线免费观看| 久久99这里只有精品| 国产精品538一区二区在线| 国产黄色91视频| 成人av网站大全| 91麻豆免费观看| 欧美这里有精品| 欧美肥妇free| 精品久久国产老人久久综合| 久久久精品国产免大香伊| 国产精品色哟哟| 亚洲欧美电影一区二区| 亚洲一区二区三区国产| 偷窥国产亚洲免费视频| 日本午夜精品一区二区三区电影 | 曰韩精品一区二区| 五月天中文字幕一区二区| 蜜乳av一区二区三区| 国产一区中文字幕| voyeur盗摄精品| 91国偷自产一区二区使用方法| 欧美日韩国产影片| 精品福利在线导航| 成人欧美一区二区三区黑人麻豆| 亚洲精品ww久久久久久p站| 午夜精品久久久久久久久久久| 日本不卡一区二区三区| 国产一区二区在线观看视频| 成人性色生活片免费看爆迷你毛片| 色综合视频在线观看| 欧美精品黑人性xxxx| 久久麻豆一区二区| 亚洲女人的天堂| 日韩电影在线观看一区| 国产精品一卡二卡在线观看| 99视频在线观看一区三区| 欧美日韩国产大片| 久久只精品国产| 亚洲视频在线一区| 青青青伊人色综合久久| 成人福利视频在线| 欧美高清性hdvideosex| 久久久亚洲国产美女国产盗摄 | 欧美色精品在线视频| 欧美一级午夜免费电影| 国产精品久久久久久久久久久免费看 | 国产亚洲综合在线| 亚洲自拍偷拍综合| 国产一区二区h| 在线观看视频一区二区欧美日韩| 日韩精品一区二区三区中文精品| 国产精品另类一区| 午夜精品视频一区| 风流少妇一区二区| 欧美男女性生活在线直播观看| 久久久亚洲精品一区二区三区| 亚洲一区二区三区激情| 国产成人免费视频| 精品视频在线免费观看| 国产视频一区在线观看| 午夜精品爽啪视频| 99久久精品免费看国产免费软件| 日韩欧美中文字幕制服| 亚洲欧美日韩人成在线播放| 另类成人小视频在线| 日本道在线观看一区二区| 26uuu久久天堂性欧美| 亚洲国产欧美一区二区三区丁香婷| 国产一区二区三区高清播放| 欧美亚洲综合久久| 国产精品入口麻豆九色| 免费观看在线色综合| 色婷婷综合久久| 国产欧美一区在线| 人人精品人人爱| 91国产成人在线| 日本一区二区在线不卡| 秋霞电影一区二区| 在线观看国产91| 国产精品乱码妇女bbbb| 久久精品国产**网站演员| 欧美日韩一卡二卡| 伊人开心综合网| www.一区二区| 久久久99免费|