📄 mshcmds.c
字号:
if (!m_convert (mp, msgs[msgnum])) return; if (debugsw) { printf ("invo_name=%s mypath=%s defpath=%s\n", invo_name, mypath, defpath); printf ("ctxpath=%s context flags=%s\n", ctxpath, sprintb (buf, (unsigned) ctxflags, DBITS)); printf ("foldpath=%s flags=%s\n", mp -> foldpath, sprintb (buf, (unsigned) mp -> msgflags, FBITS)); printf ("hghmsg=%d lowmsg=%d nummsg=%d curmsg=%d\n", mp -> hghmsg, mp -> lowmsg, mp -> nummsg, mp -> curmsg); printf ("lowsel=%d hghsel=%d numsel=%d\n", mp -> lowsel, mp -> hghsel, mp -> numsel);#ifndef MTR printf ("lowoff=%d hghoff=%d\n", mp -> lowoff, mp -> hghoff);#else /* MTR */ printf ("lowoff=%d hghoff=%d msgbase=0x%x msgstats=0x%x\n", mp -> lowoff, mp -> hghoff, mp -> msgbase, mp -> msgstats);#endif /* MTR */ } if (seqp == 0 && (addsw || deletesw)) { advise (NULLCP, "-%s requires at least one -sequence argument", addsw ? "add" : "delete"); return; } seqs[seqp] = NULL; if (addsw) for (seqp = 0; seqs[seqp]; seqp++) { if (zerosw && !m_seqnew (mp, seqs[seqp], 0)) return; for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) if (!m_seqadd (mp, seqs[seqp], msgnum, 0)) return; } if (deletesw) for (seqp = 0; seqs[seqp]; seqp++) { if (zerosw) for (msgnum = mp -> lowmsg; msgnum <= mp -> hghmsg; msgnum++) if (mp -> msgstats[msgnum] & EXISTS) if (!m_seqadd (mp, seqs[seqp], msgnum, 0)) return; for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) if (!m_seqdel (mp, seqs[seqp], msgnum)) return; } if (listsw) { int bits = FFATTRSLOT; if (seqp == 0) for (i = 0; mp -> msgattrs[i]; i++) printf ("%s%s: %s\n", mp -> msgattrs[i], mp -> attrstats & (1 << (bits + i)) ? " (private)" : "", m_seq (mp, mp -> msgattrs[i])); else for (seqp = 0; seqs[seqp]; seqp++) printf ("%s%s: %s\n", seqs[seqp], m_seq (mp, seqs[seqp])); interrupted = 0; if (debugsw) for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel && !interrupted; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) { printf ("%*d: id=%d top=%d start=%ld stop=%ld %s\n", DMAXFOLDER, msgnum, Msgs[msgnum].m_bboard_id, Msgs[msgnum].m_top, Msgs[msgnum].m_start, Msgs[msgnum].m_stop, sprintb (buf, (unsigned) mp -> msgstats[msgnum], m_seqbits (mp))); if (Msgs[msgnum].m_scanl) printf ("%s", Msgs[msgnum].m_scanl); } }}/* */#ifdef MIMEstatic struct swit mhnswit[] = {#define MHNAUTOSW 0 "auto", 0,#define MHNNAUTOSW 1 "noauto", 0,#define MHNDEBUGSW 2 "debug", -5,#define MHNEBCDICSW 3 "ebcdicsafe", 0,#define MHNNEBCDICSW 4 "noebcdicsafe", 0,#define MHNFORMSW 5 "form formfile", 4,#define MHNHEADSW 6 "headers", 0,#define MHNNHEADSW 7 "noheaders", 0,#define MHNLISTSW 8 "list", 0,#define MHNNLISTSW 9 "nolist", 0,#define MHNPARTSW 10 "part number", 0,#define MHNSIZESW 11 "realsize", 0,#define MHNNSIZESW 12 "norealsize", 0,#define MHNRFC934SW 13 "rfc934mode", 0,#define MHNNRFC934SW 14 "norfc934mode", 0,#define MHNSERIALSW 15 "serialonly", 0,#define MHNNSERIALSW 16 "noserialonly", 0,#define MHNSHOWSW 17 "show", 0,#define MHNNSHOWSW 18 "noshow", 0,#define MHNSTORESW 19 "store", 0,#define MHNNSTORESW 20 "nostore", 0,#define MHNTYPESW 21 "type content", 0,#define MHNVERBSW 22 "verbose", 0,#define MHNNVERBSW 23 "noverbose", 0,#define MHNHELPSW 24 "help", 4,#define MHNPROGSW 25 "moreproc program", -4,#define MHNNPROGSW 26 "nomoreproc", -3,#define MHNLENSW 27 "length lines", -4,#define MHNWIDSW 28 "width columns", -4, NULL, 0};/* */mhncmd (args)char **args;{ int msgp = 0, vecp = 1, i, msgnum; char *cp, buf[BUFSIZ], *msgs[MAXARGS], *vec[MAXARGS]; if (fmsh) { forkcmd (args, cmd_name); return; } while (cp = *args++) { if (*cp == '-') switch (smatch (++cp, mhnswit)) { case AMBIGSW: ambigsw (cp, mhnswit); return; case UNKWNSW: fprintf (stderr, "-%s unknown\n", cp); return; case MHNHELPSW: (void) sprintf (buf, "%s [msgs] [switches]", cmd_name); help (buf, mhnswit); return; case MHNAUTOSW: case MHNNAUTOSW: case MHNDEBUGSW: case MHNEBCDICSW: case MHNNEBCDICSW: case MHNHEADSW: case MHNNHEADSW: case MHNLISTSW: case MHNNLISTSW: case MHNSIZESW: case MHNNSIZESW: case MHNRFC934SW: case MHNNRFC934SW: case MHNSERIALSW: case MHNNSERIALSW: case MHNSHOWSW: case MHNNSHOWSW: case MHNSTORESW: case MHNNSTORESW: case MHNVERBSW: case MHNNVERBSW: case MHNNPROGSW: vec[vecp++] = --cp; continue; case MHNFORMSW: case MHNPARTSW: case MHNTYPESW: case MHNPROGSW: case MHNLENSW: case MHNWIDSW: vec[vecp++] = --cp; if (!(cp = *args++) || *cp == '-') { advise (NULLCP, "missing argument to %s", args[-2]); return; } vec[vecp++] = cp; continue; } if (*cp == '+' || *cp == '@') { advise (NULLCP, "sorry, no folders allowed!"); return; } else msgs[msgp++] = cp; } vec[0] = cmd_name; vec[vecp++] = "-file"; vec[vecp] = NULL; if (!msgp) msgs[msgp++] = "cur"; for (msgnum = 0; msgnum < msgp; msgnum++) if (!m_convert (mp, msgs[msgnum])) return; m_setseq (mp); interrupted = 0; for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel && !interrupted; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) if (process (msgnum, cmd_name, vecp, vec)) { mp -> msgstats[msgnum] &= ~SELECTED; mp -> numsel--; } m_setcur (mp, mp -> hghsel);}/* */#endif /* MIME */static struct swit packswit[] = {#define PAFISW 0 "file name", 0,#define PAHELP 1 "help", 4, NULL, 0};/* */packcmd (args)char **args;{ int msgp = 0, md, msgnum; char *cp, *file = NULL, buf[BUFSIZ], *msgs[MAXARGS]; struct stat st; if (fmsh) { forkcmd (args, cmd_name); return; } while (cp = *args++) { if (*cp == '-') switch (smatch (++cp, packswit)) { case AMBIGSW: ambigsw (cp, packswit); return; case UNKWNSW: fprintf (stderr, "-%s unknown\n", cp); return; case PAHELP: (void) sprintf (buf, "%s [msgs] [switches]", cmd_name); help (buf, packswit); return; case PAFISW: if (!(file = *args++) || *file == '-') { advise (NULLCP, "missing argument to %s", args[-2]); return; } continue; } if (*cp == '+' || *cp == '@') { advise (NULLCP, "sorry, no folders allowed!"); return; } else msgs[msgp++] = cp; } if (!file) file = "./msgbox"; file = path (file, TFILE); if (stat (file, &st) == NOTOK) { if (errno != ENOENT) { advise (file, "error on file"); goto done_pack; } md = getanswer (cp = concat ("Create file \"", file, "\"? ", NULLCP)); free (cp); if (!md) goto done_pack; } if (!msgp) msgs[msgp++] = "all"; for (msgnum = 0; msgnum < msgp; msgnum++) if (!m_convert (mp, msgs[msgnum])) goto done_pack; m_setseq (mp); if ((md = mbx_open (file, getuid (), getgid (), m_gmprot ())) == NOTOK) { advise (file, "unable to open"); goto done_pack; } for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) if (pack (file, md, msgnum) == NOTOK) break; (void) mbx_close (file, md); if (mp -> hghsel != mp -> curmsg) m_setcur (mp, mp -> lowsel);done_pack: ; free (file);}/* */int pack (mailbox, md, msgnum)char *mailbox;int md, msgnum;{ register FILE *zp; if (Msgs[msgnum].m_bboard_id == 0) (void) readid (msgnum); zp = msh_ready (msgnum, 1); return mbx_write (mailbox, md, zp, Msgs[msgnum].m_bboard_id, 0L, ftell (zp), Msgs[msgnum].m_stop, 1, 1);}/* */int packhak (args)char **args;{ int result; char *cp, *file = NULL; while (cp = *args++) { if (*cp == '-') switch (smatch (++cp, packswit)) { case AMBIGSW: case UNKWNSW: case PAHELP: return NOTOK; case PAFISW: if (!(file = *args++) || *file == '-') return NOTOK; continue; } if (*cp == '+' || *cp == '@') return NOTOK; } file = path (file ? file : "./msgbox", TFILE); result = access (file, 0) == NOTOK ? OK : NOTOK; free (file); return result;}/* */static struct swit pickswit[] = {#define PIANSW 0 "and", 0,#define PIORSW 1 "or", 0,#define PINTSW 2 "not", 0,#define PILBSW 3 "lbrace", 0,#define PIRBSW 4 "rbrace", 0,#define PICCSW 5 "cc pattern", 0,#define PIDASW 6 "date pattern", 0,#define PIFRSW 7 "from pattern", 0,#define PISESW 8 "search pattern", 0,#define PISUSW 9 "subject pattern", 0,#define PITOSW 10 "to pattern", 0,#define PIOTSW 11 "-othercomponent pattern", 15,#define PIAFSW 12 "after date", 0,#define PIBFSW 13 "before date", 0,#define PIDFSW 14 "datefield field", 5,#define PISQSW 15 "sequence name", 0,#define PIPUSW 16 "public", 0,#define PINPUSW 17 "nopublic", 0,#define PIZRSW 18 "zero", 0,#define PINZRSW 19 "nozero", 0,#define PILISW 20 "list", 0,#define PINLISW 21 "nolist", 0,#define PIHELP 22 "help", 4, NULL, 0};/* */pickcmd (args)char **args;{ int zerosw = 1, msgp = 0, seqp = 0, vecp = 0, hi, lo, msgnum; char *cp, buf[BUFSIZ], *msgs[MAXARGS], *seqs[NATTRS], *vec[MAXARGS]; register FILE *zp; while (cp = *args++) { if (*cp == '-') { if (*++cp == '-') { vec[vecp++] = --cp; goto pattern; } switch (smatch (cp, pickswit)) { case AMBIGSW: ambigsw (cp, pickswit); return; case UNKWNSW: fprintf (stderr, "-%s unknown\n", cp); return; case PIHELP: (void) sprintf (buf, "%s [msgs] [switches]", cmd_name); help (buf, pickswit); return; case PICCSW: case PIDASW: case PIFRSW: case PISUSW: case PITOSW: case PIDFSW: case PIAFSW: case PIBFSW: case PISESW: vec[vecp++] = --cp;pattern: ; if (!(cp = *args++)) {/* allow -xyz arguments */ advise (NULLCP, "missing argument to %s", args[-2]); return; } vec[vecp++] = cp; continue; case PIOTSW: advise (NULLCP, "internal error!"); return; case PIANSW: case PIORSW: case PINTSW: case PILBSW: case PIRBSW: vec[vecp++] = --cp; continue; case PISQSW: if (!(cp = *args++) || *cp == '-') { advise (NULLCP, "missing argument to %s", args[-2]); return; } if (seqp < NATTRS) seqs[seqp++] = cp; else { advise (NULLCP, "only %d sequences allowed!", NATTRS); return; } continue; case PIZRSW: zerosw++; continue; case PINZRSW: zerosw = 0; continue; case PIPUSW: /* not implemented */ case PINPUSW: case PILISW: case PINLISW: continue; } } if (*cp == '+' || *cp == '@') { advise (NULLCP, "sorry, no folders allowed!"); return; } else msgs[msgp++] = cp; } vec[vecp] = NULL; if (!msgp) msgs[msgp++] = "all"; for (msgnum = 0; msgnum < msgp; msgnum++) if (!m_convert (mp, msgs[msgnum])) return; m_setseq (mp); interrupted = 0; if (!pcompile (vec, NULLCP)) return; lo = mp -> lowsel; hi = mp -> hghsel; for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel && !interrupted; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) { zp = msh_ready (msgnum, 1); if (pmatches (zp, msgnum, fmsh ? 0L : Msgs[msgnum].m_start, fmsh ? 0L : Msgs[msgnum].m_stop)) { if (msgnum < lo) lo = msgnum; if (msgnum > hi) hi = msgnum; } else { mp -> msgstats[msgnum] &= ~SELECTED; mp -> numsel--; } } if (interrupted) return; mp -> lowsel = lo; mp -> hghsel = hi; if (mp -> numsel <= 0) { advise (NULLCP, "no messages match specification"); return; } seqs[seqp] = NULL; for (seqp = 0; seqs[seqp]; seqp++) { if (zerosw && !m_seqnew (mp, seqs[seqp], 0)) return; for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++) if (mp -> msgstats[msgnum] & SELECTED) if (!m_seqadd (mp, seqs[seqp], msgnum, 0)) return; } printf ("%d hit%s\n", mp -> numsel, mp -> numsel == 1 ? "" : "s");}/* */static struct swit replswit[] = {#define REANSW 0 "annotate", 0,#define RENANSW 1 "noannotate", 0,#define RECCSW 2 "cc type", 0,#define RENCCSW 3 "nocc type", 0,#define REDFSW 4 "draftfolder +folder", 0,#define REDMSW 5 "draftmessage msg", 0,#define RENDFSW 6 "nodraftfolder", 0,#define REEDTSW 7 "editor editor", 0,#define RENEDSW 8 "noedit", 0,#define REFCCSW 9 "fcc +folder", 0,#define REFLTSW 10 "filter filterfile", 0,#define REFRMSW 11 "form formfile", 0,#define REINSW 12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -