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

📄 mshcmds.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 + -