📄 formatsbr.c
字号:
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 + -