亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
av在线不卡免费看| 午夜精品福利一区二区三区蜜桃| 久久国产精品一区二区| 欧美日韩免费在线视频| 日韩av一二三| 久久综合狠狠综合久久综合88 | 亚洲精品乱码久久久久久久久| 99久久er热在这里只有精品66| **性色生活片久久毛片| 精品污污网站免费看| 日本欧美在线观看| 久久人人爽人人爽| 91久久精品一区二区| 日韩成人一级片| 国产精品午夜在线观看| 欧美色倩网站大全免费| 国产精品一区二区三区99| 国产精品久久久久一区| 欧美日韩一区二区电影| 成人免费视频视频在线观看免费 | 欧美日本国产视频| 国产精品2024| 亚洲va天堂va国产va久| 2024国产精品视频| 欧美日本国产视频| 中文在线免费一区三区高中清不卡| 日日夜夜免费精品| 在线一区二区三区| 久久99国产精品久久99| 亚洲欧美另类小说| 亚洲在线成人精品| 国产精品久久看| 精品国产乱码久久久久久1区2区| 色婷婷激情综合| eeuss鲁一区二区三区| 另类专区欧美蜜桃臀第一页| 亚洲成人av免费| 亚洲视频在线一区观看| 国产免费久久精品| www亚洲一区| 2024国产精品| 精品国产伦一区二区三区免费| 成人影视亚洲图片在线| 国产在线播放一区| 美腿丝袜在线亚洲一区| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品五月天| 亚洲三级视频在线观看| 一区二区三区鲁丝不卡| 亚洲精品午夜久久久| 夜夜嗨av一区二区三区四季av| 亚洲人成电影网站色mp4| 一区二区三区色| 一区二区三区中文字幕在线观看| 亚洲综合清纯丝袜自拍| 亚洲国产综合91精品麻豆| 午夜精品久久久久久久99樱桃| 亚洲精品综合在线| 午夜精品123| 久久99热这里只有精品| 国产精品456露脸| 一本久道中文字幕精品亚洲嫩| 欧美日韩国产精品成人| 欧美大片拔萝卜| 国产欧美1区2区3区| 亚洲男人电影天堂| 免费成人av资源网| 床上的激情91.| 欧美电影在线免费观看| 中文字幕av资源一区| 日本视频在线一区| 成人午夜av在线| 日韩一区二区在线播放| 欧美韩国一区二区| 亚洲成人av在线电影| 国产91丝袜在线18| 91黄色小视频| 在线不卡免费欧美| 国产精品免费看片| 青青青爽久久午夜综合久久午夜| 不卡的电视剧免费网站有什么| 日韩欧美中文一区二区| 亚洲毛片av在线| 成人性视频网站| 久久久久久久久久久99999| 一区二区三区在线视频免费观看| 国产精品1区二区.| 精品免费一区二区三区| 五月婷婷激情综合| 欧洲精品中文字幕| 国产精品毛片a∨一区二区三区| 美国毛片一区二区三区| 欧美夫妻性生活| 亚洲一区二区免费视频| 一本色道久久综合狠狠躁的推荐| 日韩一区日韩二区| 丁香婷婷综合网| 国产欧美日韩久久| 国产丶欧美丶日本不卡视频| 精品久久国产老人久久综合| 日韩av电影免费观看高清完整版在线观看| 色综合天天综合网天天看片| 一区二区三区中文免费| 欧美丝袜丝交足nylons| 香蕉成人伊视频在线观看| 欧美一级一区二区| 国产精品一区二区你懂的| 椎名由奈av一区二区三区| 91麻豆国产精品久久| 亚洲国产va精品久久久不卡综合| 欧美日产国产精品| 99久久久久久| 精品国产乱码久久| 国产一区二区三区在线观看免费视频| 精品国产乱码久久久久久图片 | 国产精品一二三四区| 国产日韩影视精品| 91美女片黄在线观看91美女| 免费看欧美女人艹b| 中文字幕五月欧美| 69堂精品视频| 国产乱子轮精品视频| 久久影院午夜论| 欧美本精品男人aⅴ天堂| 国产综合色在线| 亚洲影院免费观看| 久久久国产午夜精品 | 不卡电影一区二区三区| 免费在线看一区| 亚洲精品老司机| 国产三级欧美三级日产三级99| 欧美日韩一区二区欧美激情| 波多野结衣中文字幕一区二区三区 | 91黄色小视频| 成人午夜视频免费看| 美国欧美日韩国产在线播放| 亚洲综合激情小说| 亚洲精品视频在线| 日韩一区中文字幕| 国产日韩欧美一区二区三区乱码| 欧美日韩电影一区| 91精品国产全国免费观看| 欧美性一二三区| 色婷婷av久久久久久久| 91精品福利视频| 日本韩国欧美三级| 91亚洲精品久久久蜜桃| 99精品国产99久久久久久白柏| 国产精品伊人色| 国产91丝袜在线18| 99国内精品久久| 91美女片黄在线| 欧美日韩日日骚| 日韩欧美自拍偷拍| 日韩一区二区三区免费观看| 欧美一二区视频| 久久久久国产精品麻豆ai换脸| 国产三级欧美三级日产三级99| 中文字幕在线播放不卡一区| 亚洲日韩欧美一区二区在线| 亚洲最大成人网4388xx| 奇米精品一区二区三区在线观看 | 久久先锋影音av鲁色资源网| 亚洲欧美影音先锋| 亚洲精品少妇30p| 美日韩一区二区| 99在线视频精品| 91精品国产品国语在线不卡| 中文天堂在线一区| 日韩精品乱码免费| 国产一区999| 欧美日韩aaa| 国产精品久久久久久久裸模| 亚洲va国产va欧美va观看| 国产精品一二三四| 91精品午夜视频| 亚洲精品第一国产综合野| 精品一区二区久久久| 欧美性受xxxx| 国产精品国产三级国产aⅴ中文| 日韩二区三区四区| 波多野结衣中文字幕一区 | 7777精品伊人久久久大香线蕉的 | 色香色香欲天天天影视综合网| 欧美精品一区在线观看| 亚洲一区二区三区不卡国产欧美| 成人爽a毛片一区二区免费| 精品国产污网站| 国产一区二区三区日韩| 欧美精品色综合| 亚洲人成人一区二区在线观看| 成人在线视频首页| 国产目拍亚洲精品99久久精品| 激情五月婷婷综合网| 精品国产成人在线影院| 蜜臀va亚洲va欧美va天堂| 精品国产麻豆免费人成网站| 精品亚洲国内自在自线福利| 欧美一区二区三区免费大片| 日韩福利电影在线|