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

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

?? rt-util.c

?? 早期freebsd實現
?? C
字號:
/* $Id: rt-util.c,v 3.0 1992/12/14 00:14:12 davison Trn $*/#include "EXTERN.h"#include "common.h"#include "cache.h"#include "ngdata.h"#include "artio.h"#include "rthread.h"#include "rt-select.h"#include "term.h"#include "INTERN.h"#include "rt-util.h"/* Name-munging routines written by Ross Ridge.** Enhanced by Wayne Davison.*//* Extract the full-name part of an email address, returning NULL if not** found.*/char *extract_name(name)char *name;{    char *s;    char *lparen, *rparen;    char *langle;    while (isspace(*name)) {	name++;    }    lparen = index(name, '(');    rparen = rindex(name, ')');    langle = index(name, '<');    if (!lparen && !langle) {	return NULL;    } else    if (langle && (!lparen || !rparen || lparen > langle || rparen < langle)) {	if (langle == name) {	    return NULL;	}	*langle = '\0';    } else {	name = lparen;	*name++ = '\0';	while (isspace(*name)) {	    name++;	}	if (name == rparen) {	    return NULL;	}	if (rparen != NULL) {	    *rparen = '\0';	}    }    if (*name == '"') {	name++;	while (isspace(*name)) {	    name++;	}	if ((s = rindex(name, '"')) != NULL) {	    *s = '\0';	}    }    return name;}/* If necessary, compress a net user's full name by playing games with** initials and the middle name(s).  If we start with "Ross Douglas Ridge"** we try "Ross D Ridge", "Ross Ridge", "R D Ridge" and finally "R Ridge"** before simply truncating the thing.  We also turn "R. Douglas Ridge"** into "Douglas Ridge" if it fits, otherwise it goes through the normal** modification route.*/char *compress_name(name, max)char *name;int max;{    register char *s, *last, *mid, *d;    register int len, namelen, midlen;    int notlast;    /* First remove white space from both ends. */    while (isspace(*name)) {	name++;    }    if ((len = strlen(name)) == 0) {	return name;    }    s = name + len - 1;    while (isspace(*s)) {	s--;    }    s[1] = '\0';    if (s - name + 1 <= max) {	return name;    }    /* Look for characters that likely mean the end of the name    ** and the start of some hopefully uninteresting additional info.    ** Spliting at a comma is somewhat questionalble, but since    ** "Ross Ridge, The Great HTMU" comes up much more often than     ** "Ridge, Ross" and since "R HTMU" is worse than "Ridge" we do    ** it anyways.    */    for (d = name + 1; *d; d++) {	if (*d == ',' || *d == ';' || *d == '(' || *d == '@'	 || (*d == '-' && (d[1] == '-' || d[1] == ' '))) {	    *d-- = '\0';	    s = d;	    break;	}    }    /* Find the last name */    do {	notlast = 0;	while (isspace(*s)) {	    s--;	}	s[1] = '\0';	len = s - name + 1;	if (len <= max) {	    return name;	}	while (!isspace(*s)) {	    if (s == name) {	/* only one name */		name[max] = '\0';		return name;	    }	    if (isdigit(*s)) {	/* probably a phone number */		notlast = 1;	/* so chuck it */	    }	    s--;	}    } while (notlast);    last = s-- + 1;    /* Look for a middle name */    while (isspace(*s)) {	/* get rid of any extra space */	len--;		s--;    }    mid = name;    while (!isspace(*mid)) {	mid++;    }    namelen = mid - name + 1;    if (mid == s+1) {	/* no middle name */	mid = 0;    } else {	*mid++ = '\0';	while (isspace(*mid)) {	    len--;	    mid++;	}	midlen = s - mid + 2;	/* If first name is an initial and middle isn't and it all fits	** without the first initial, drop it. */	if (len > max && mid != s && mid[1] != '.'	 && (!name[1] || (name[1] == '.' && !name[2]))	 && len - namelen <= max) {	    len -= namelen;	    name = mid;	    mid = 0;	}    }    s[1] = '\0';    if (mid && len > max) {	/* Turn middle names into intials */	len -= s - mid + 2;	d = s = mid;	while (*s) {	    if (isalpha(*s)) {		if (d != mid) {		    *d++ = ' ';		}		*d++ = *s++;	    }	    while (*s && !isspace(*s)) {		s++;	    }	    while (isspace(*s)) {		s++;	    }	}	if (d != mid) {	    *d = '\0';	    midlen = d - mid + 1;	    len += midlen;	} else {	    mid = 0;	}    }    if (len > max) {	/* If the first name fits without the middle initials, drop them */	if (mid && len - midlen <= max) {	    len -= midlen;	    mid = 0;	} else {	    /* Turn the first name into an initial */	    len -= namelen - 2;	    name[1] = '\0';	    namelen = 2;	    if (len > max) {		/* Dump the middle initials (if present) */		if (mid) {		    len -= midlen;		    mid = 0;		}		if (len > max) {		    /* Finally just truncate the last name */		    last[max - 2] = '\0';		}	    }	}    }    /* Paste the names back together */    d = name + namelen;    if (mid) {	d[-1] = ' ';	strcpy(d, mid);	d += midlen;    }    d[-1] = ' ';    strcpy(d, last);    return name;}/* Compress an email address, trying to keep as much of the local part of** the addresses as possible.  The order of precence is @ ! %, but** @ % ! may be better...*/static char *compress_address(name, max)char *name;int max;{    char *s, *at, *bang, *hack, *start;    int len;    /* Remove white space from both ends. */    while (isspace(*name)) {	name++;    }    if ((len = strlen(name)) == 0) {	return name;    }    s = name + len - 1;    while (isspace(*s)) {	s--;    }    s[1] = '\0';    if (*name == '<') {	name++;	if (*s == '>') {	    *s-- = '\0';	}    }    if ((len = s - name + 1) <= max) {	return name;    }    at = bang = hack = NULL;    for (s = name + 1; *s; s++) {	/* If there's whitespace in the middle then it's probably not	** really an email address. */	if (isspace(*s)) {	    name[max] = '\0';	    return name;	}	switch (*s) {	case '@':	    if (at == NULL) {		at = s;	    }	    break;	case '!':	    if (at == NULL) {		bang = s;		hack = NULL;	    }	    break;	case '%':	    if (at == NULL && hack == NULL) {		hack = s;	    }	    break;	}    }    if (at == NULL) {	at = name + len;    }    if (hack != NULL) {	if (bang != NULL) {	    if (at - bang - 1 >= max) {		start = bang + 1;	    } else if (at - name >= max) {		start = at - max;	    } else {		start = name;	    }	} else {	    start = name;	}    } else if (bang != NULL) {	if (at - name >= max) {	    start = at - max;	} else {	    start = name;	}    } else {	start = name;    }    if (len - (start - name) > max) {	start[max] = '\0';    }    return start;}/* Fit the author name in <max> chars.  Uses the comment portion if present** and pads with spaces.*/char *compress_from(ap, size)ARTICLE *ap;int size;{    char *s;    int len;    strcpy(cmd_buf, ap && ap->from? ap->from : nullstr);    if ((s = extract_name(cmd_buf)) != NULL)	s = compress_name(s, size);    else	s = compress_address(cmd_buf, size);    len = strlen(s);    if (!len) {	strcpy(s,"NO NAME");	len = 7;    }    while (len < size)	s[len++] = ' ';    s[size] = '\0';    return s;}#define EQ(x,y) ((isupper(x) ? tolower(x) : (x)) == (y))/* Parse the subject to skip past any "Re[:^]"s at the start.*/char *get_subject_start(str)register char *str;{    while (*str && (unsigned char)*str <= ' ')	str++;    while (EQ(str[0], 'r') && EQ(str[1], 'e')) {	/* check for Re: */      register char *cp = str + 2;	if (*cp == '^') {				/* allow Re^2: */	    while (*++cp <= '9' && *cp >= '0')		;	}	if (*cp != ':')	    break;	while (*++cp == ' ')	    ;	str = cp;    }    return str;}/* Output a subject in <max> chars.  Does intelligent trimming that tries to** save the last two words on the line, excluding "(was: blah)" if needed.*/char *compress_subj(ap, max)ARTICLE *ap;int max;{    register char *cp;    register int len;    ARTICLE *first;    if (!ap)	return "<MISSING>";    /* Put a preceeding '>' on subjects that are replies to other articles */    cp = buf;    first = (ThreadedGroup? ap->subj->thread : ap->subj->articles);    if (ap != first || (ap->flags & AF_HAS_RE)     || !(!(ap->flags&AF_READ) ^ sel_rereading))	*cp++ = '>';    strcpy(cp, ap->subj->str + 4);    /* Remove "(was: oldsubject)", because we already know the old subjects.    ** Also match "(Re: oldsubject)".  Allow possible spaces after the ('s.    */    for (cp = buf; (cp = index(cp+1, '(')) != Nullch;) {	while (*++cp == ' ')	    ;	if (EQ(cp[0], 'w') && EQ(cp[1], 'a') && EQ(cp[2], 's')	 && (cp[3] == ':' || cp[3] == ' ')) {	    *--cp = '\0';	    break;	}	if (EQ(cp[0], 'r') && EQ(cp[1], 'e')	 && ((cp[2]==':' && cp[3]==' ') || (cp[2]=='^' && cp[4]==':'))) {	    *--cp = '\0';	    break;	}    }    len = strlen(buf);    if (!unbroken_subjects && len > max) {	char *last_word;	/* Try to include the last two words on the line while trimming */ 	if ((last_word = rindex(buf, ' ')) != Nullch) {	    char *next_to_last;	    *last_word = '\0';	    if ((next_to_last = rindex(buf, ' ')) != Nullch) {		if (next_to_last-buf >= len - max + 3 + 10-1)		    cp = next_to_last;		else		    cp = last_word;	    } else		cp = last_word;	    *last_word = ' ';	    if (cp-buf >= len - max + 3 + 10-1) {		sprintf(buf + max - (len-(cp-buf)+3), "...%s", cp + 1);		len = max;	    }	}    }    if (len > max)	buf[max] = '\0';    return buf;}#ifndef HAS_STRCASECMPstatic unsigned char casemap[256] = {    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,    0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,    0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,    0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,    0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,    0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,    0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,    0x78,0x79,0x7A,0x7B,0x5C,0x5D,0x5E,0x5F,    0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,    0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,    0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,    0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,    0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,    0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,    0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,    0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,    0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,    0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,    0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,    0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,    0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,    0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,    0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,    0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,    0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,    0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,    0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF};intstrCASEcmp(s1, s2)register char *s1, *s2;{    do {	if (casemap[(unsigned)*s1++] != casemap[(unsigned)*s2])	    return casemap[(unsigned)s1[-1]] - casemap[(unsigned)*s2];    } while (*s2++ != '\0');    return 0;}intstrnCASEcmp(s1, s2, len)register char *s1, *s2;register int len;{    while (len--) {	if (casemap[(unsigned)*s1++] != casemap[(unsigned)*s2])	    return casemap[(unsigned)s1[-1]] - casemap[(unsigned)*s2];	if (*s2++ == '\0')	    break;    }    return 0;}#endif/* Modified version of a spinner originally found in Clifford Adams' strn. */static char spinchars[] = {'|','/','-','\\'};static int spin_place;		/* represents place in spinchars array */static int spin_count;		/* counter for when to spin */static int spin_level INIT(0);	/* used to allow non-interfering nested spins */static int spin_mode;static ART_NUM spin_art;static ART_POS spin_tell;voidsetspin(mode)int mode;{    switch (mode) {    case SPIN_FOREGROUND:    case SPIN_BACKGROUND:	if (!spin_level++) {	    if ((spin_art = openart) != 0)		spin_tell = ftell(artfp);	    spin_count = 1;	/* not 0 to prevent immediate spin display */	    spin_place = 1;	/* start with slash... */	}	spin_mode = mode;	break;    case SPIN_POP:	if (--spin_level > 0)	    break;	/* FALL THROUGH */    case SPIN_OFF:	spin_level = 0;	if (spin_place > 1) {	/* we have spun at least once */	    putchar(spin_char); /* get rid of spin character */	    backspace();	    fflush(stdout);	    spin_place = 0;	}	if (spin_art) {	    artopen(spin_art);	    fseek(artfp,spin_tell,0);	/* do not screw up the pager */	    spin_art = 0;	}	break;    }}voidspin(count)int count;		/* modulus for the spin... */{    if (!spin_level || (!bkgnd_spinner && spin_mode == SPIN_BACKGROUND))	return;    if (!(spin_count++%count)) {	if (spin_mode == SPIN_FOREGROUND)	    putchar('.');	else {	    putchar(spinchars[spin_place++%4]);	    backspace();	}	fflush(stdout);    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
jizz一区二区| 久久精品国产免费| 国产欧美日韩三级| 欧美精品一区二区三区一线天视频 | 亚洲激情图片qvod| 中文字幕亚洲在| 亚洲免费色视频| 一区二区成人在线视频| 亚洲一二三区视频在线观看| 亚洲午夜久久久久中文字幕久| 亚洲精品免费在线| 亚洲成人av在线电影| 午夜精品一区二区三区三上悠亚| 日韩综合在线视频| 毛片av中文字幕一区二区| 韩国欧美国产一区| jlzzjlzz亚洲女人18| 91国偷自产一区二区三区成为亚洲经典 | 久久激情五月激情| 国产一区二区日韩精品| 成人爽a毛片一区二区免费| 97久久超碰国产精品电影| 欧美色大人视频| 日韩三级在线观看| 国产精品欧美经典| 亚洲第一主播视频| 国产精一区二区三区| av一二三不卡影片| 日韩一区二区不卡| 国产精品成人在线观看| 午夜精品福利久久久| 韩国欧美一区二区| 91精品办公室少妇高潮对白| 日韩天堂在线观看| 中文字幕在线观看一区| 日韩制服丝袜av| eeuss鲁片一区二区三区| 欧美日韩视频在线观看一区二区三区 | 午夜视频在线观看一区二区三区| 日日欢夜夜爽一区| www.一区二区| 欧美第一区第二区| 亚洲专区一二三| 国产成人精品1024| 欧美一区二区三区的| 国产精品国产三级国产有无不卡 | 91免费国产视频网站| 91精品国产麻豆| 亚洲女人小视频在线观看| 精品一区二区三区免费观看| 色综合久久久久综合体| 久久日韩粉嫩一区二区三区| 午夜精品福利视频网站| 91麻豆产精品久久久久久 | 国产黑丝在线一区二区三区| 欧美伊人久久久久久久久影院| 国产亚洲综合性久久久影院| 日本视频一区二区| 欧美日韩一区小说| 亚洲日本欧美天堂| 成人精品在线视频观看| 国产欧美一区二区三区网站| 午夜久久电影网| 欧洲一区二区三区在线| 亚洲天堂网中文字| 成人av第一页| 欧美国产激情二区三区| 国产美女精品在线| 26uuu另类欧美亚洲曰本| 热久久免费视频| 欧美一级淫片007| 天天免费综合色| 欧美日韩在线三区| 亚洲国产日韩在线一区模特| 在线国产电影不卡| 一区二区三区精品久久久| 色综合天天视频在线观看| 一区在线观看免费| 色域天天综合网| 一区二区三区高清| 欧美日韩五月天| 日本成人在线看| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩av成人高清| 日韩精品一区国产麻豆| 精品亚洲国产成人av制服丝袜| 欧美一级黄色大片| 激情五月婷婷综合网| 国产欧美日韩麻豆91| 成人h动漫精品一区二区| 1024成人网色www| 欧美性猛片xxxx免费看久爱| 午夜在线成人av| 日韩精品一区二区在线观看| 国产精品66部| 亚洲欧美国产高清| 欧美电影在线免费观看| 免费欧美高清视频| 中文字幕不卡在线播放| 色吊一区二区三区 | 欧美一区二区在线免费播放| 青椒成人免费视频| 亚洲国产成人在线| 日本韩国一区二区| 韩国精品主播一区二区在线观看| 欧美国产亚洲另类动漫| 在线视频观看一区| 蜜臀av一区二区| 中文字幕在线不卡一区二区三区| 欧美视频在线观看一区二区| 狠狠色2019综合网| 一二三区精品视频| 久久亚洲精华国产精华液| www.欧美亚洲| 久久超碰97中文字幕| 亚洲欧美另类久久久精品| 日韩欧美综合在线| 色天天综合久久久久综合片| 久久精品99国产精品日本| 亚洲欧洲日韩女同| 精品国内二区三区| 欧美丝袜自拍制服另类| 极品少妇一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 欧美巨大另类极品videosbest | 首页亚洲欧美制服丝腿| 国产日产欧美一区二区视频| 欧美在线一二三| 成人av网址在线| 麻豆成人91精品二区三区| 亚洲免费伊人电影| 欧美国产激情一区二区三区蜜月| 欧美一区二区三区四区在线观看| 99久久精品免费观看| 国产很黄免费观看久久| 麻豆精品久久久| 日韩精品亚洲专区| 亚洲国产精品精华液网站| 国产精品传媒入口麻豆| 国产欧美日韩综合| 久久你懂得1024| 日韩精品一区二| 欧美成人a∨高清免费观看| 欧美精品日韩一区| 欧美日韩国产小视频在线观看| aa级大片欧美| 波多野结衣精品在线| 成人动漫一区二区在线| 成人综合在线网站| 狠狠色综合色综合网络| 九色综合国产一区二区三区| 免费在线观看精品| 久久66热偷产精品| 激情综合亚洲精品| 国产激情91久久精品导航| 激情成人午夜视频| 福利电影一区二区| 国产xxx精品视频大全| 丁香婷婷综合激情五月色| 国产乱码精品一区二区三区忘忧草 | 国产黄色精品网站| 风间由美一区二区av101 | 亚洲一区二区三区免费视频| 亚洲欧美日韩在线播放| 亚洲午夜免费福利视频| 午夜久久久影院| 老司机精品视频一区二区三区| 精品亚洲porn| 成人av动漫在线| 91久久奴性调教| 欧美卡1卡2卡| 久久久www成人免费无遮挡大片| 国产三级欧美三级日产三级99 | 亚洲国产cao| 美女在线视频一区| 国产精品资源网| 91色porny在线视频| 8x8x8国产精品| 久久精品免费在线观看| 亚洲美女偷拍久久| 日本欧美在线观看| 国产精品123区| 欧美午夜在线一二页| 日韩丝袜美女视频| 亚洲欧洲色图综合| 美腿丝袜亚洲综合| 成人黄色777网| 69av一区二区三区| 亚洲欧洲在线观看av| 日韩国产高清在线| 不卡一区二区中文字幕| 欧美日韩精品是欧美日韩精品| 精品国产乱码久久久久久影片| 国产精品成人一区二区艾草 | 国产精品一区二区在线观看网站 | 亚洲va欧美va天堂v国产综合| 国内精品国产三级国产a久久| 91视视频在线观看入口直接观看www| 欧美精品少妇一区二区三区| 国产精品美日韩|