⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formatsbr.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
	    if (!(value = (str && match (str, fmt->f_text)))) {		fmt += fmt->f_skip;		continue;	    }	    break;	case FT_V_MATCH:	    if (str)		value = match (str, fmt->f_text);	    else		value = 0;	    break;	case FT_IF_AMATCH:	    if (!(value = (str && uprf (str, fmt->f_text)))) {		fmt += fmt->f_skip;		continue;	    }	    break;	case FT_V_AMATCH:	    value = uprf (str, fmt->f_text);	    break;	case FT_S_NONNULL:	    value = (str != NULLCP && *str != 0);	    break;	case FT_S_NULL:	    value = (str == NULLCP || *str == 0);	    break;	case FT_V_EQ:	    value = (fmt->f_value == value);	    break;	case FT_V_NE:	    value = (fmt->f_value != value);	    break;	case FT_V_GT:	    value = (fmt->f_value > value);	    break;	case FT_GOTO:	    fmt += fmt->f_skip;	    continue;	case FT_NOP:	    break;	case FT_LS_COMP:	    str = fmt->f_comp->c_text;	    break;	case FT_LS_LIT:	    str = fmt->f_text;	    break;	case FT_LS_GETENV:	    if (!(str = getenv (fmt->f_text)))		str = "";	    break;	case FT_LS_MFIND:	    if (!(str = m_find (fmt->f_text)))		str = "";	    break;	case FT_LS_TRIM:	    if (str) {		    register char *xp;		    (void) strcpy(buffer, str);		    str = buffer;		    while (isspace(*str))			    str++;		    ljust = 0;		    if ((i = fmt->f_width) < 0) {			    i = -i;			    ljust++;		    }		    if (!ljust && i > 0 && strlen(str) > i)			    str[i] = '\0';		    xp = str;		    xp += strlen(str) - 1;		    while (xp > str && isspace(*xp))			    *xp-- = '\0';		    if (ljust && i > 0 && strlen(str) > i)			str += strlen(str) - i;	    }	    break;	case FT_LV_COMPFLAG:	    value = fmt->f_comp->c_flags;	    break;	case FT_LV_COMP:	    value = (comp = fmt->f_comp)->c_text ? atoi(comp->c_text) : 0;	    break;	case FT_LV_LIT:	    value = fmt->f_value;	    break;	case FT_LV_DAT:	    value = dat[fmt->f_value];	    break;	case FT_LV_STRLEN:	    value = strlen(str);	    break;	case FT_LV_CHAR_LEFT:	    value = width - (cp - scanl);	    break;	case FT_LV_PLUS_L:	    value += fmt->f_value;	    break;	case FT_LV_MINUS_L:	    value = fmt->f_value - value;	    break;	case FT_LV_DIVIDE_L:	    if (fmt->f_value)		value = value / fmt->f_value;	    else		value = 0;	    break;	case FT_LV_MODULO_L:	    if (fmt->f_value)		value = value % fmt->f_value;	    else		value = 0;	    break;	case FT_SAVESTR:	    savestr = str;	    break;	case FT_LV_SEC:	    value = fmt->f_comp->c_tws->tw_sec;	    break;	case FT_LV_MIN:	    value = fmt->f_comp->c_tws->tw_min;	    break;	case FT_LV_HOUR:	    value = fmt->f_comp->c_tws->tw_hour;	    break;	case FT_LV_MDAY:	    value = fmt->f_comp->c_tws->tw_mday;	    break;	case FT_LV_MON:	    value = fmt->f_comp->c_tws->tw_mon + 1;	    break;	case FT_LS_MONTH:	    str = tw_moty[fmt->f_comp->c_tws->tw_mon];	    break;	case FT_LS_LMONTH:	    str = lmonth[fmt->f_comp->c_tws->tw_mon];	    break;	case FT_LS_ZONE:	    str = dtwszone (fmt->f_comp->c_tws);	    break;	case FT_LV_YEAR:#ifndef	YEARMOD	    value = fmt->f_comp->c_tws->tw_year;#else	/* YEARMOD */	    value = (fmt->f_comp->c_tws->tw_year) % 100;#endif	/* YEARMOD */	    break;	case FT_LV_WDAY:	    if (!(((tws = fmt->f_comp->c_tws)->tw_flags) & (TW_SEXP|TW_SIMP)))		set_dotw (tws);	    value = tws->tw_wday;	    break;	case FT_LS_DAY:	    if (!(((tws = fmt->f_comp->c_tws)->tw_flags) & (TW_SEXP|TW_SIMP)))		set_dotw (tws);	    str = tw_dotw[tws->tw_wday];	    break;	case FT_LS_WEEKDAY:	    if (!(((tws = fmt->f_comp->c_tws)->tw_flags) & (TW_SEXP|TW_SIMP)))		set_dotw (tws);	    str = tw_ldotw[tws->tw_wday];	    break;	case FT_LV_YDAY:	    value = fmt->f_comp->c_tws->tw_yday;	    break;	case FT_LV_ZONE:	    value = fmt->f_comp->c_tws->tw_zone;	    break;	case FT_LV_CLOCK:	    if ((value = fmt->f_comp->c_tws->tw_clock) == 0)		value = twclock(fmt->f_comp->c_tws);	    break;	case FT_LV_RCLOCK:	    if ((value = fmt->f_comp->c_tws->tw_clock) == 0)		value = twclock(fmt->f_comp->c_tws);	    value = time((long *) 0) - value;	    break;	case FT_LV_DAYF:	    if (!(((tws = fmt->f_comp->c_tws)->tw_flags) & (TW_SEXP|TW_SIMP)))		set_dotw (tws);	    switch (fmt->f_comp->c_tws->tw_flags & TW_SDAY) {		case TW_SEXP:		    value = 1; break;		case TW_SIMP:		    value = 0; break;		default:		    value = -1; break;	    }	case FT_LV_ZONEF:	    if ((fmt->f_comp->c_tws->tw_flags & TW_SZONE) == TW_SZEXP)		    value = 1;	    else		    value = -1;	    break;	case FT_LV_DST:	    value = fmt->f_comp->c_tws->tw_flags & TW_DST;	    break;	case FT_LS_822DATE:	    str = dasctime ( fmt->f_comp->c_tws , TW_ZONE);	    break;	case FT_LS_PRETTY:	    str = dasctime ( fmt->f_comp->c_tws, TW_NULL);	    break;	case FT_LS_PERS:	    str = fmt->f_comp->c_mn->m_pers;	    break;	case FT_LS_MBOX:	    str = fmt->f_comp->c_mn->m_mbox;	    break;	case FT_LS_HOST:	    str = fmt->f_comp->c_mn->m_host;	    break;	case FT_LS_PATH:	    str = fmt->f_comp->c_mn->m_path;	    break;	case FT_LS_GNAME:	    str = fmt->f_comp->c_mn->m_gname;	    break;	case FT_LS_NOTE:	    str = fmt->f_comp->c_mn->m_note;	    break;	case FT_LS_822ADDR:	    str = adrformat( fmt->f_comp->c_mn );	    break;	case FT_LV_HOSTTYPE:	    value = fmt->f_comp->c_mn->m_type;	    break;	case FT_LV_INGRPF:	    value = fmt->f_comp->c_mn->m_ingrp;	    break;	case FT_LV_NOHOSTF:	    value = fmt->f_comp->c_mn->m_nohost;	    break;	case FT_LS_ADDR:	case FT_LS_FRIENDLY:#ifdef BERK	    str = fmt->f_comp->c_mn->m_mbox;#else	/* not BERK */	    if ((mn = fmt -> f_comp -> c_mn) == &fmt_mnull) {		str = fmt -> f_comp -> c_text;		break;	    }	    if (fmt -> f_type == FT_LS_ADDR)		goto unfriendly;	    if ((str = mn -> m_pers) == NULL)	        if ((str = mn -> m_note)) {	            (void) strcpy (buffer, str);	            str = buffer;	            if (*str == '(')	            	str++;	            sp = str + strlen(str) - 1;	            if (*sp == ')') {	            	*sp-- = '\0';	        	while (sp >= str)	            	    if (*sp == ' ')	            		*sp-- = '\0';	            	    else	            		break;	            }	        } else if (!(str = get_x400_friendly (mn -> m_mbox, buffer))) {	unfriendly: ;		  switch (mn -> m_type) {		    case LOCALHOST:			str = mn -> m_mbox;			break;		    case UUCPHOST:			(void) sprintf (buffer, "%s!%s",					mn -> m_host, mn -> m_mbox);			str = buffer;			break;		    default:			if (mn -> m_mbox) {			    (void) sprintf (buffer, "%s@%s",					    mn -> m_mbox, mn -> m_host);			    str= buffer;			}			else			    str = mn -> m_text;			break;		  }		}#endif	/* BERK */	    break;	case FT_LOCALDATE:	    comp = fmt->f_comp;	    if ((l = comp->c_tws->tw_clock) == 0)		l = twclock(comp->c_tws);	    tws = dlocaltime(&l);	    *comp->c_tws = *tws;	    break;	case FT_GMTDATE:	    comp = fmt->f_comp;	    if ((l = comp->c_tws->tw_clock) == 0)		l = twclock(comp->c_tws);	    tws = dgmtime(&l);	    *comp->c_tws = *tws;	    break;	case FT_PARSEDATE:	    comp = fmt->f_comp;	    if ((sp = comp->c_text) && (tws = dparsetime(sp))) {		*comp->c_tws = *tws;		comp->c_flags = 0;	    } else if (comp->c_flags >= 0) {		bzero ((char *) comp -> c_tws, sizeof *comp -> c_tws);		comp->c_flags = 1;	    }	    break;	case FT_FORMATADDR:	    /* hook for custom address list formatting (see replsbr.c) */	    str = formataddr (savestr, str);	    break;	case FT_PUTADDR:	    /* output the str register as an address component,	     * splitting it into multiple lines if necessary.  The	     * value reg. contains the max line length.  The lit.	     * field may contain a string to prepend to the result	     * (e.g., "To: ")	     */	    {	    register char *lp = str;	    register int indent;	    register int wid = value;	    register int len = strlen (str);	    register char *lastb;	    sp = fmt->f_text;	    indent = strlen (sp);	    wid -= indent;	    while( (c = *sp++) && cp < ep)		*cp++ = c;	    while (len > wid) {		/* try to break at a comma; failing that, break at a		 * space, failing that, just split the line.		 */		lastb = 0; sp = lp + wid;		while (sp > lp && (c = *--sp) != ',') {		    if (! lastb && isspace(c))			lastb = sp - 1;		}		if (sp == lp)		    if (! (sp = lastb))			sp = lp + wid - 1;		len -= sp - lp + 1;		while (cp < ep && lp <= sp)		    *cp++ = *lp++;		*cp++ = '\n';		for (i=indent; cp < ep && i > 0; i--)		    *cp++ = ' ';		while (isspace(*lp))		    lp++, len--;	    }	    PUTS (cp, lp);	    }	    break;	case FT_PARSEADDR:	    comp = fmt->f_comp;	    if (comp->c_mn != &fmt_mnull)		mnfree (comp->c_mn);	    if ((sp = comp->c_text) && (sp = getname(sp)) &&		(mn = getm (sp, NULLCP, 0, fmt_norm, NULLCP))) {		comp->c_mn = mn;		while (getname(""))		    ;	    } else {		while (getname(""))		/* XXX */		    ;		comp->c_mn = &fmt_mnull;	    }	    break;	    	case FT_MYMBOX:	    /*	     * if there's no component, we say true.  Otherwise we	     * say "true" only if we can parse the address and it	     * matches one of our addresses.	     */	    comp = fmt->f_comp;	    if (comp->c_mn != &fmt_mnull)		mnfree (comp->c_mn);	    if ((sp = comp->c_text) && (sp = getname(sp)) &&		(mn = getm (sp, NULLCP, 0, AD_NAME, NULLCP))) {		comp->c_mn = mn;		comp->c_flags = ismymbox(mn);		while (sp = getname(sp))		    if (comp->c_flags == 0 &&			(mn = getm (sp, NULLCP, 0, AD_NAME, NULLCP)))			comp->c_flags |= ismymbox(mn);	    } else {		while (getname(""))		/* XXX */		    ;		comp->c_flags = (comp->c_text == 0);		comp->c_mn = &fmt_mnull;	    }	    break;	case FT_ADDTOSEQ:#ifdef	LBL	    /* If we're working on a folder (as opposed to a file), add the	     * current msg to sequence given in literal field.  Don't	     * disturb string or value registers.	     */	    if (fmt_current_folder)		    (void)m_seqadd(fmt_current_folder, fmt->f_text, dat[0], -1);#endif	    break;	}	fmt++;    }#ifndef JLR    finished:;    if (cp[-1] != '\n')	*cp++ = '\n';    *cp   = 0;    return ((struct format *)0);#else	/* JLR */    if (cp[-1] != '\n')	*cp++ = '\n';    while (fmt->f_type != FT_DONE)	fmt++;    finished:;        *cp = '\0';    return (fmt -> f_value ? ++fmt : (struct format *)0);#endif /* JLR */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -