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

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

?? htndir.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*							       	     HTNDir.c**	GENERIC NEWS LISTINGS****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTNDir.c,v 2.12 1999/02/22 22:10:11 frystyk Exp $****	Creates listings for all kind of News output.**** Authors:**	HF	Henrik Frystyk, MIT, <frystyk@w3.org>**	MP	Maciej Puzio <puzio@zodiac1.mimuw.edu.pl>** History:**	   Oct 95  HFN	written**	   Mar 96  MP	modified heavily     *//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "WWWHTML.h"#include "HTNews.h"#include "HTNewsLs.h"#include "HTNDir.h"					 /* Implemented here *//* Macros and other defines */#define PUTC(c)		(*target->isa->put_character)(target, c)#define PUTS(s)		(*target->isa->put_string)(target, s)#define START(e)	(*target->isa->start_element)(target, e, 0, 0)#define END(e)		(*target->isa->end_element)(target, e)#define FREE_TARGET	(*target->isa->_free)(target)#define DEFAULT_MAXW	80			       /* Default line width *//* Type definitions and global variables etc. local to this module */struct _HTStructured {    const HTStructuredClass *	isa;    /* ... */};struct _HTNewsNode {    int		index;    char *	name;    char *	subject;    char *	from;    time_t	date;    int		refs;			 /* Number of references */    BOOL	is_tmplate;    /* Added by MP: */    HTList* refNames;        /*  referee names list */    HTList* refObjects;      /*  referee objects list */    HTNewsNode * refParent;  /* direct parent (referee) */    HTNewsNode * lastChild;  /* last child (referer) */    BOOL    show;            /* show this node on the list? */    BOOL    fake;            /* create anchor with this node? */    int     refChildren;     /* number of referers */    int     refLevel;        /* reference level - to speed sorting */    int     minRefIndex;     /* minimal index in reference subtree */    int     maxRefIndex;     /* maximal index in reference subtree */    time_t  minRefDate;      /* minimal date in reference subtree */    time_t  maxRefDate;      /* maximal date in reference subtree */};struct _HTNewsDir {    HTStructured *	target;    HTRequest *		request;    HTNewsDirKey	key;				  /* Key for sorting */    char *   	        name;        /* Name of the newsgroup(s) Added by MP */    char *		tmplate;    HTNewsNode *	tmplate_node;    int 	        lastLevel;    /* Last printed ref level Added by MP. */    HTArray *		array;			/* Array for sorted listings */    HTArray *		cache;			  /* Only created on request */};PRIVATE int MaxLineW = DEFAULT_MAXW;/*  Forward references - added by MP. */PRIVATE void HTNewsDir_addLevelTags (HTNewsDir* dir, int level);PRIVATE HTNewsNode* HTNewsDir_addFakeElement (HTNewsDir* dir, char* subject,    char* name);PRIVATE HTNewsNode* HTNewsDir_findNodeNamed (HTNewsDir* dir, char* name);#define FNWS_ANY       0x0000/* Date */#define FNWS_MIN       0x0001#define FNWS_MAX       0x0002/* Fake/not-fake */#define FNWS_ONLYFAKE  0x0010#define FNWS_NOTFAKE   0x0020/* Fake or not-fake with references */#define FNWS_NOTORPHAN 0x0040PRIVATE HTNewsNode* HTNewsDir_findNodeWithSubject (HTNewsDir* dir,     char* subject, int which, HTNewsNode* avoidNode);/* ------------------------------------------------------------------------- *//*				NODE  MANAGEMENT 			     *//* ------------------------------------------------------------------------- */PRIVATE HTNewsNode * HTNewsNode_new (int index, char * subject, char * from,				     time_t date, char * name,				     int refs, HTList * refNames){    HTNewsNode * node;    if ((node = (HTNewsNode *) HT_CALLOC(1, sizeof(HTNewsNode))) == NULL)        HT_OUTOFMEM("HTNewsNode_new");    if (name) StrAllocCopy(node->name, name);    if (subject) {	StrAllocCopy(node->subject, subject);	node->subject = HTStrip(node->subject);    }    if (from) StrAllocCopy(node->from, from);    node->index = index;    node->date = date;    node->refs = refs;    node->refNames = refNames;    node->show = (name != NULL);    node->fake = (name == NULL);    node->minRefIndex = index;    node->maxRefIndex = index;    node->minRefDate = date;    node->maxRefDate = date;    return node;}PRIVATE BOOL HTNewsNode_delete (HTNewsNode * node, BOOL cache){    if (node) {    	if (!cache || node->is_tmplate) HT_FREE(node->name);	HT_FREE(node->subject);	HT_FREE(node->from);        if (node->refNames) {	    HTList * cur = node->refNames;	    char * pres;	                while ((pres = (char *) HTList_nextObject(cur))) HT_FREE(pres);            HTList_delete(node->refNames);        }        if (node->refObjects) HTList_delete(node->refObjects);	HT_FREE(node);	return YES;    }    return NO;}/* Added by MP. */PRIVATE BOOL HTNewsNode_isAncestor (HTNewsNode* node, HTNewsNode* refered){    HTNewsNode* p;    for (p = refered; p; p = p->refParent)        if (p == node) return YES;    return NO;}/* Added by MP. */PRIVATE BOOL HTNewsNode_linkRef (HTNewsNode* node, HTNewsNode* referer){    if (node && referer) {	node->refChildren++;	node->lastChild = referer;	node->minRefIndex = (node->minRefIndex != 0 ? 			     HTMIN(node->minRefIndex, referer->index) :			     referer->index);	node->maxRefIndex = (node->maxRefIndex != 0 ? 			     HTMAX(node->maxRefIndex, referer->index) :			     referer->index);	node->minRefDate = (node->minRefDate != 0 ? 			    HTMIN(node->minRefDate, referer->date) :			    referer->date);	node->maxRefDate = (node->maxRefDate != 0 ? 			    HTMAX(node->maxRefDate, referer->date) :			    referer->date);	referer->refParent = node;	return YES;    }    return NO;}/* Added by MP. */PRIVATE int HTNewsNode_refLevel (HTNewsNode* node){    int cnt = 0;    HTNewsNode* p;    for (p = node->refParent; p && p->show; p = p->refParent)        cnt++;    return cnt;}/* Added by MP. *//* Returns index field for non-fake nodes, minimal or maximal subtreee *//* index for fake nodes. */PRIVATE time_t HTNewsNode_getIndex (HTNewsNode* node, BOOL minimal){    if (node->index != 0)        return node->index;    else if (minimal)        return node->minRefIndex;    else        return node->maxRefIndex;}/* Added by MP. *//* Returns date field for non-fake nodes, minimal or maximal subtreee *//* date for fake nodes. */PRIVATE time_t HTNewsNode_getDate (HTNewsNode* node, BOOL minimal){    if (node->date != 0)        return node->date;    else if (minimal)        return node->minRefDate;    else        return node->maxRefDate;}/* Helper function - added by MP. */PRIVATE char* UnReSubject (char* subject){    if (strlen(subject) >= 3 && strncasecomp(subject, "re:", 3) == 0)    {        char* p = subject + 3;  /* "Re:XXX" */        if (*p == ' ')  p ++;   /* "Re: XXX" */        return p;    }    return subject;}/* Added by MP. */PRIVATE void HTNewsNode_setRefInfo_pass1 (HTNewsDir* dir, HTNewsNode* node){    HTList* ptr = node->refNames;    char* name = NULL;    if (node->fake)        return;    if (ptr != NULL)        name = (char*) HTList_nextObject(ptr);    while (ptr != NULL)    {        HTNewsNode* parent;        parent = HTNewsDir_findNodeNamed(dir, name);        if (parent)        {            if (!node->refObjects)  node->refObjects = HTList_new();            HTList_addObject (node->refObjects, parent);        }        name = (char*) HTList_nextObject(ptr);    }}/* Added by MP. */PRIVATE void HTNewsNode_setRefInfo_pass2 (HTNewsDir* dir, HTNewsNode* node){    HTNewsNode* maxParent = NULL;    HTList* ptr = node->refObjects;    HTNewsNode* parent = NULL;    if (node->fake)        return;    if (ptr != NULL)        parent = (HTNewsNode*) HTList_nextObject(ptr);    while (ptr != NULL)    {        if (!maxParent || maxParent->date < parent->date)            maxParent = parent;        parent = (HTNewsNode*) HTList_nextObject(ptr);    }    if (maxParent)    {        if (!HTNewsNode_isAncestor(node, maxParent))  /* better be careful */            HTNewsNode_linkRef (maxParent, node);    }    else    {        char* refSubject;        BOOL re;        /* Here is the only place we REALLY have to check for circular */        /* references. It is normally possible that a node refers to */        /* orphan node and both have the same subject. In this situation */        /* we can't make the orphan to refer to it's child. Without checking */        /* for circular references this is likely to happen here. */        refSubject = UnReSubject(node->subject);        re = (strcasecomp(refSubject, node->subject) != 0);        if (re)            parent = HTNewsDir_findNodeWithSubject(dir, refSubject,                 FNWS_MIN | FNWS_NOTFAKE, node);        if (!parent || HTNewsNode_isAncestor(node, parent))            parent = HTNewsDir_findNodeWithSubject(dir, refSubject,                FNWS_MIN | FNWS_ONLYFAKE, node);        if (!parent && re)        {            parent = HTNewsDir_findNodeWithSubject(dir, node->subject,                 FNWS_MIN | FNWS_ONLYFAKE, node);        }            if (!parent) parent = HTNewsDir_addFakeElement (dir, refSubject, NULL);	if (parent) {	    HTNewsNode_linkRef (parent, node);	    if (parent->refChildren > 1) /* Multi-children fake node visible */		parent->show = YES;	}    }}/*** Added by MP.*/#if 0PRIVATE void HTNewsNode_setRefInfo_pass3 (HTNewsDir* dir, HTNewsNode* node){    HTNewsNode* parent = NULL;    char* refSubject;    BOOL re;    if (node->fake || node->refParent)        return;  /* This is only for nodes not handled in pass 2 */        /* Here is the only place we REALLY have to check for circular */    /* references. It is normally possible that a node refers to */    /* orphan node and both have the same subject. In this situation */    /* we can't make the orphan to refer to it's child. Without checking */    /* for circular references this is likely to happen here. */    refSubject = UnReSubject(node->subject);    re = (strcasecomp(refSubject, node->subject) != 0);    if (re)        parent = HTNewsDir_findNodeWithSubject(dir, refSubject,             FNWS_MIN | FNWS_NOTFAKE, node);    if (!parent || HTNewsNode_isAncestor(node, parent))        parent = HTNewsDir_findNodeWithSubject(dir, refSubject,            FNWS_MIN | FNWS_ONLYFAKE, node);    if (!parent && re)    {        parent = HTNewsDir_findNodeWithSubject(dir, node->subject,             FNWS_MIN | FNWS_ONLYFAKE, node);    }        if (!parent) parent = HTNewsDir_addFakeElement (dir, refSubject, NULL);    if (parent) {	HTNewsNode_linkRef (parent, node);	if (parent->refChildren > 1)  	 /* multi-children fake node visible */	    parent->show = YES;    }}#elsePRIVATE void HTNewsNode_setRefInfo_pass3 (HTNewsDir* dir, HTNewsNode* node){    if (!node->fake)        node->refLevel = HTNewsNode_refLevel(node);}#endif/* Added by MP. */PRIVATE int HTNewsNode_compareRefThread (HTNewsNode* node1, HTNewsNode* node2){    int level1 = node1->refLevel;    int level2 = node2->refLevel;    int level = HTMAX(level1, level2);    int i;    HTNewsNode* parent1;    HTNewsNode* parent2;    int diff = 0;    for (i = level; i >= 0; i--)    {        parent1 = (i < level1 ? parent1->refParent : node1);        parent2 = (i < level2 ? parent2->refParent : node2);        if (parent1 == parent2)            return diff;  /* related messages (in same subtree) */        else        {            time_t date1 = (i > level1 ? 0 : HTNewsNode_getDate(parent1, YES));            time_t date2 = (i > level2 ? 0 : HTNewsNode_getDate(parent2, YES));            diff = date1 - date2;            if (diff == 0)            {                int idx1 = (i > level1 ? 0 : HTNewsNode_getIndex(parent1, YES));                int idx2 = (i > level2 ? 0 : HTNewsNode_getIndex(parent2, YES));                diff = idx1 - idx2;            }        }    }    return diff;  /* completely unrelated messages */}/***	Output an element in HTML**	Returns YES if OK, else NO*/PRIVATE BOOL HTNewsNode_print (HTNewsDir * dir, HTNewsNode * node){    if (node && node->show) {	HTStructured *target = dir->target;	char  * escaped;    	HTNewsDir_addLevelTags (dir, node->refLevel);  /* Added by MP. */	START(HTML_LI);	/* Start the anchor and put the subject as anchor text */	/*  Changed by MP to allow nodes without names */	if (!node->fake && node->name && node->subject)  {	    escaped = HTEscape(node->name, URL_XPALPHAS);	    HTStartAnchor(target, NULL, escaped);	}	if (node->subject) PUTS(node->subject);	if (!node->fake && node->name && node->subject) {	    END(HTML_A);	    HT_FREE(escaped);	}	/* From field */	if (node->from)  {	    PUTS (" by ");  /* Changed by MP. */	    PUTS(node->from);	}	/*  In group listing, put number of groups in the set; added by MP. */	if (node->name && strrchr(node->name, '*')) {	    char buf[16];	    sprintf (buf, " (%d groups)", node->refChildren);	    PUTS (buf);	}    }    return YES;}/* ------------------------------------------------------------------------- *//*				DIRECTORY MANAGEMENT 			     *//* ------------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲bt欧美bt精品777| 在线观看一区不卡| 久久久99精品久久| 激情综合色播激情啊| 中文字幕精品在线不卡| 波多野结衣在线一区| 亚洲美女精品一区| 欧美三级韩国三级日本一级| 日韩和欧美一区二区| www国产成人| 99这里只有久久精品视频| 亚洲精品大片www| 日韩欧美在线1卡| 国产精品资源在线观看| 中文字幕亚洲一区二区va在线| 91精彩视频在线观看| 日韩国产高清在线| 欧美国产日韩一二三区| 日本道免费精品一区二区三区| 日韩av一区二区三区四区| 欧美精品一区二区三区在线| www.亚洲国产| 丝瓜av网站精品一区二区| 欧美精品一区二区三区一线天视频 | 国产蜜臀av在线一区二区三区| 成人精品鲁一区一区二区| 亚洲激情综合网| 欧美v日韩v国产v| 成人综合婷婷国产精品久久 | 免费视频最近日韩| 国产精品乱码久久久久久| 欧美久久久久久久久中文字幕| 国产一区二区久久| 亚洲国产成人va在线观看天堂| 久久伊人蜜桃av一区二区| 欧美性一区二区| 福利一区二区在线观看| 日本不卡不码高清免费观看| 一区在线观看视频| 精品久久人人做人人爰| 欧美午夜精品一区| 成人在线一区二区三区| 蜜臀av一区二区在线免费观看| 亚洲欧美一区二区视频| 久久久久久毛片| 欧美一区二区在线看| 成人av资源在线| 韩国女主播成人在线| 日本在线不卡视频一二三区| 国产精品美女久久久久高潮| 欧美一级二级三级蜜桃| 在线观看成人免费视频| 国产在线精品一区二区夜色| 亚洲福利视频一区| 亚洲毛片av在线| 国产精品电影院| 久久看人人爽人人| 26uuu亚洲综合色欧美| 欧美电影影音先锋| 欧美日韩免费一区二区三区视频| caoporn国产精品| 国产成人精品免费网站| 国产在线精品一区二区夜色| 久久国产精品无码网站| 免费成人你懂的| 天堂一区二区在线免费观看| 亚洲国产欧美一区二区三区丁香婷| 亚洲欧美一区二区三区国产精品| 日本一区二区三区电影| 国产亚洲欧美日韩日本| 日韩免费福利电影在线观看| 69久久99精品久久久久婷婷| 欧美精品在线一区二区| 欧美日韩国产精品自在自线| 欧美三级中文字| 欧美日韩美女一区二区| 欧美精选在线播放| 日韩一区二区三区免费观看| 日韩一区二区三区电影| 欧美成人bangbros| 欧美精品一区二区在线观看| 久久先锋资源网| 国产亚洲美州欧州综合国| 中文字幕乱码久久午夜不卡 | 欧美性色综合网| 欧洲精品视频在线观看| 欧美日韩亚洲综合在线 | 捆绑调教美女网站视频一区| 免费看欧美女人艹b| 激情六月婷婷综合| 国产精品一区不卡| 91视频国产资源| 在线中文字幕一区二区| 欧美裸体bbwbbwbbw| 日韩欧美的一区| 欧美极品美女视频| 一区二区三区丝袜| 日本少妇一区二区| 国产精品91一区二区| 99re热视频精品| 欧美人与禽zozo性伦| 精品国产乱码91久久久久久网站| 国产亚洲欧美一区在线观看| 综合久久久久综合| 免费国产亚洲视频| 成人手机在线视频| 欧美日韩一级片在线观看| 亚洲精品一区二区三区影院| 中文字幕制服丝袜成人av| 亚洲一区二区三区四区在线观看| 日av在线不卡| 97久久精品人人澡人人爽| 欧美日韩国产在线观看| 国产欧美一区二区精品性色超碰 | kk眼镜猥琐国模调教系列一区二区| 色av成人天堂桃色av| 欧美一区在线视频| 国产精品欧美综合在线| 日韩成人精品在线观看| 成人美女视频在线看| 欧美肥妇毛茸茸| 《视频一区视频二区| 日韩二区三区四区| 91色九色蝌蚪| 日韩精品专区在线影院重磅| 亚洲品质自拍视频| 国产中文字幕精品| 欧美日高清视频| 亚洲欧洲日本在线| 精品一区二区三区免费观看| 欧美在线制服丝袜| 国产精品青草综合久久久久99| 蜜臀av性久久久久蜜臀aⅴ四虎| 99热在这里有精品免费| 欧美www视频| 偷偷要91色婷婷| 91视视频在线直接观看在线看网页在线看 | 美女在线观看视频一区二区| 91蝌蚪国产九色| 日本一区二区免费在线| 久久国产尿小便嘘嘘尿| 欧美福利一区二区| 亚洲主播在线观看| 波多野结衣在线一区| 国产欧美日韩另类视频免费观看| 日本欧洲一区二区| 欧美老女人在线| 亚洲影视在线观看| 色诱视频网站一区| 亚洲欧洲韩国日本视频| 国产成人精品一区二区三区四区 | 日日摸夜夜添夜夜添国产精品| 99天天综合性| 国产精品成人网| 不卡视频一二三| 国产精品美女久久久久aⅴ | 一本色道a无线码一区v| 国产精品丝袜91| 国产99久久久国产精品免费看| 精品捆绑美女sm三区| 蜜桃精品视频在线| 欧美mv日韩mv亚洲| 麻豆freexxxx性91精品| 日韩视频在线一区二区| 毛片一区二区三区| 欧美一级免费大片| 久久99精品一区二区三区三区| 日韩欧美一二三区| 国产在线视视频有精品| 久久久电影一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 欧美r级电影在线观看| 国产精品影视在线观看| 国产日韩av一区二区| 成人国产视频在线观看| 亚洲男人的天堂一区二区| 欧美三级视频在线观看 | 狠狠久久亚洲欧美| 久久日一线二线三线suv| 成人av在线影院| 亚洲乱码中文字幕| 欧美日韩国产综合一区二区| 久久精品国产99国产| www国产成人免费观看视频 深夜成人网| 国产一区二区三区免费在线观看| 欧美激情一区在线观看| 91蜜桃网址入口| 亚洲成人av在线电影| 欧美成人官网二区| 岛国精品一区二区| 亚洲与欧洲av电影| 日韩一二三四区| 不卡av电影在线播放| 视频在线在亚洲| 久久久三级国产网站| 一本一道综合狠狠老| 久久精品国产亚洲5555| 中文av字幕一区| 在线播放欧美女士性生活| 激情六月婷婷综合|