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

📄 show.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
/* show.c - list messages */#ifndef	lintstatic char ident[] = "@(#)$Id: show.c,v 1.2 90/11/25 19:05:51 sharpe Exp $";#endif	lint#include "../h/mh.h"#include <stdio.h>/*  */static struct swit switches[] = {#define	DRFTSW	0    "draft", 5,#define	FORMSW	1    "form formfile", 4,#define	PROGSW	2    "moreproc program", 4,#define	NPROGSW	3    "nomoreproc", 3,#define	LENSW	4    "length lines", 4,#define	WIDSW	5    "width columns", 4,#define	SHOWSW	6    "showproc program", 4,#define	NSHOWSW	7    "noshowproc", 3,#define	HEADSW	8    "header", 4,#define	NHEADSW	9    "noheader", 3,#define	FILESW	10    "file file", -4,		/* interface from showfile */#define	HELPSW	11    "help", 4,    NULL, NULL};#define	SHOW	0#define	NEXT	1#define	PREV	2/*  *//* ARGSUSED */main (argc, argv)int     argc;char  **argv;{    int     draftsw = 0,            headersw = 1,            nshow = 0,            msgp = 0,            vecp = 1,	    procp = 1,	    isdf = 0,	    mode = SHOW,            msgnum;    char   *cp,           *maildir,           *file = NULL,           *folder = NULL,           *proc,            buf[100],          **ap,          **argp,           *arguments[MAXARGS],           *msgs[MAXARGS],           *vec[MAXARGS];    struct msgs *mp;    invo_name = r1bindex (argv[0], '/');    if (uleq (invo_name, "next"))	mode = NEXT;    else	if (uleq (invo_name, "prev"))	    mode = PREV;    if ((cp = m_find (invo_name)) != NULL) {	ap = brkstring (cp = getcpy (cp), " ", "\n");	ap = copyip (ap, arguments);    }    else	ap = arguments;    (void) copyip (argv + 1, ap);    argp = arguments;/*  */    while (cp = *argp++) {	if (*cp == '-')	    switch (smatch (++cp, switches)) {		case AMBIGSW: 		    ambigsw (cp, switches);		    done (1);		case UNKWNSW: 		case NPROGSW:		    vec[vecp++] = --cp;		    continue;		case HELPSW: 		    (void) sprintf (buf,			   "%s [+folder] %s[switches] [switches for showproc]",			    invo_name, mode == SHOW ? "[msgs] ": "");		    help (buf, switches);		    done (1);		case DRFTSW: 		    if (file)			adios (NULLCP, "only one file at a time!");		    draftsw++;		    if (mode == SHOW)			continue;	    usage:  ;		    adios (NULLCP,			    "usage: %s [+folder] [switches] [switches for showproc]",			    invo_name);		case FILESW: 		    if (mode != SHOW)			goto usage;		    if (draftsw || file)			adios (NULLCP, "only one file at a time!");		    if (!(cp = *argp++) || *cp == '-')			adios (NULLCP, "missing argument to %s", argp[-2]);		    file = path (cp, TFILE);		    continue;		case HEADSW: 		    headersw++;		    continue;		case NHEADSW: 		    headersw = 0;		    continue;		case FORMSW:		    vec[vecp++] = --cp;		    if (!(cp = *argp++) || *cp == '-')			adios (NULLCP, "missing argument to %s", argp[-2]);		    vec[vecp++] = getcpy (libpath(cp));		    continue;		case PROGSW:		case LENSW:		case WIDSW:		    vec[vecp++] = --cp;		    if (!(cp = *argp++) || *cp == '-')			adios (NULLCP, "missing argument to %s", argp[-2]);		    vec[vecp++] = cp;		    continue;		case SHOWSW: 		    if (!(showproc = *argp++) || *showproc == '-')			adios (NULLCP, "missing argument to %s", argp[-2]);		    nshow = 0;		    continue;		case NSHOWSW: 		    nshow++;		    continue;	    }	if (*cp == '+' || *cp == '@') {	    if (folder)		adios (NULLCP, "only one folder at a time!");	    else		folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);	}	else	    if (mode != SHOW)		goto usage;	    else		msgs[msgp++] = cp;    }    procp = vecp;/*  */    if (!m_find ("path"))	free (path ("./", TFOLDER));    if (draftsw || file) {	if (msgp > 1)	    adios (NULLCP, "only one file at a time!");	vec[vecp++] = draftsw	    ? getcpy (m_draft (folder, msgp ? msgs[0] : NULL, 1, &isdf))	    : file;	goto go_to_it;    }#ifdef	WHATNOW    if (!msgp && mode == SHOW && (cp = getenv ("mhdraft")) && *cp) {	draftsw++;	vec[vecp++] = cp;	goto go_to_it;    }#endif	WHATNOW    if (!msgp)	msgs[msgp++] = mode == NEXT ? "next" : mode == PREV ? "prev" : "cur";    if (!folder)	folder = m_getfolder ();    maildir = m_maildir (folder);    if (chdir (maildir) == NOTOK)	adios (maildir, "unable to change directory to");    if (!(mp = m_gmsg (folder)))	adios (NULLCP, "unable to read folder %s", folder);    if (mp -> hghmsg == 0)	adios (NULLCP, "no messages in %s", folder);    for (msgnum = 0; msgnum < msgp; msgnum++)	if (!m_convert (mp, msgs[msgnum]))	    done (1);    for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)	if (mp -> msgstats[msgnum] & SELECTED)	    mp -> msgstats[msgnum] |= UNSEEN;    m_setseq (mp);    m_setvis (mp, 1);    if (mp -> numsel > MAXARGS - 2)	adios (NULLCP, "more than %d messages for show exec", MAXARGS - 2);    for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)	if (mp -> msgstats[msgnum] & SELECTED)	    vec[vecp++] = getcpy (m_name (msgnum));    m_replace (pfolder, folder);    if (mp -> hghsel != mp -> curmsg)	m_setcur (mp, mp -> hghsel);    m_sync (mp);    m_update ();    if (vecp == 2 && headersw)	printf ("(Message %s:%s)\n", folder, vec[1]);/*  */go_to_it: ;    (void) fflush (stdout);    vec[vecp] = NULL;    if (nshow)	proc = "/bin/cat";    else {	(void) putenv ("mhfolder", folder);	if (strcmp (r1bindex (showproc, '/'), "mhl") == 0) {	    vec[0] = "mhl";	    (void) mhl (vecp, vec);	    done (0);	}	proc = showproc;    }    if (!draftsw	    && !file	    && chdir (maildir = concat (m_maildir (""), "/", NULLCP))	    != NOTOK) {	mp -> foldpath = concat (mp -> foldpath, "/", NULLCP);	cp = ssequal (maildir, mp -> foldpath)	    ? mp -> foldpath + strlen (maildir)	    : mp -> foldpath;	for (msgnum = procp; msgnum < vecp; msgnum++)	    vec[msgnum] = concat (cp, vec[msgnum], NULLCP);    }    vec[0] = r1bindex (proc, '/');    execvp (proc, vec);    adios (proc, "unable to exec");}/*  *//* Cheat:  we are loaded with adrparse, which wants a routine called   OfficialName().  We call adrparse:getm() with the correct arguments   to prevent OfficialName() from being called.  Hence, the following   is to keep the loader happy. */char   *OfficialName (name)register char  *name;{    return name;}

⌨️ 快捷键说明

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