Annotation of 43BSDReno/contrib/mh/uip/anno.c, revision 1.1.1.1

1.1       root        1: /* anno.c - annotate messages */
                      2: 
                      3: #include "../h/mh.h"
                      4: #include <ctype.h>
                      5: #include <stdio.h>
                      6: 
                      7: static void make_comp();
                      8: 
                      9: /*  */
                     10: 
                     11: static struct swit switches[] = {
                     12: #define        COMPSW  0
                     13:     "component field", 0,
                     14: 
                     15: #define        INPLSW  1
                     16:     "inplace", 0,
                     17: #define        NINPLSW 2
                     18:     "noinplace", 0,
                     19: 
                     20: #define        TEXTSW  3
                     21:     "text body", 0,
                     22: 
                     23: #define        HELPSW  4
                     24:     "help", 4,
                     25: 
                     26:     NULL, NULL
                     27: };
                     28: 
                     29: /*  */
                     30: 
                     31: /* ARGSUSED */
                     32: 
                     33: main(argc, argv)
                     34:        int argc;
                     35:        char **argv;
                     36: {
                     37:     int     inplace = 0,
                     38:             msgp = 0,
                     39:             msgnum;
                     40:     char   *cp,
                     41:            *maildir,
                     42:            *comp = NULL,
                     43:            *text = NULL,
                     44:            *folder = NULL,
                     45:             buf[100],
                     46:           **ap,
                     47:           **argp,
                     48:            *arguments[MAXARGS],
                     49:            *msgs[MAXARGS];
                     50:     struct msgs *mp;
                     51: 
                     52:     invo_name = r1bindex (argv[0], '/');
                     53:     if ((cp = m_find (invo_name)) != NULL) {
                     54:        ap = brkstring (cp = getcpy (cp), " ", "\n");
                     55:        ap = copyip (ap, arguments);
                     56:     }
                     57:     else
                     58:        ap = arguments;
                     59:     (void) copyip (argv + 1, ap);
                     60:     argp = arguments;
                     61: 
                     62: /*  */
                     63: 
                     64:     while (cp = *argp++) {
                     65:        if (*cp == '-')
                     66:            switch (smatch (++cp, switches)) {
                     67:                case AMBIGSW:
                     68:                    ambigsw (cp, switches);
                     69:                    done (1);
                     70:                case UNKWNSW:
                     71:                    adios (NULLCP, "-%s unknown", cp);
                     72:                case HELPSW:
                     73:                    (void) sprintf (buf, "%s [+folder] [msgs] [switches]",
                     74:                            invo_name);
                     75:                    help (buf, switches);
                     76:                    done (1);
                     77: 
                     78:                case COMPSW:
                     79:                    if (comp)
                     80:                        adios (NULLCP, "only one component at a time!");
                     81:                    if (!(comp = *argp++) || *comp == '-')
                     82:                        adios (NULLCP, "missing argument to %s", argp[-2]);
                     83:                    continue;
                     84: 
                     85:                case INPLSW:
                     86:                    inplace++;
                     87:                    continue;
                     88:                case NINPLSW:
                     89:                    inplace = 0;
                     90:                    continue;
                     91: 
                     92:                case TEXTSW:
                     93:                    if (text)
                     94:                        adios (NULLCP, "only one body at a time!");
                     95:                    if (!(text = *argp++) || *text == '-')
                     96:                        adios (NULLCP, "missing argument to %s", argp[-2]);
                     97:                    continue;
                     98:            }
                     99:        if (*cp == '+' || *cp == '@') {
                    100:            if (folder)
                    101:                adios (NULLCP, "only one folder at a time!");
                    102:            else
                    103:                folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
                    104:        }
                    105:        else
                    106:            msgs[msgp++] = cp;
                    107:     }
                    108: 
                    109: /*  */
                    110: 
                    111:     if (!m_find ("path"))
                    112:        free (path ("./", TFOLDER));
                    113:     if (!msgp)
                    114:        msgs[msgp++] = "cur";
                    115:     if (!folder)
                    116:        folder = m_getfolder ();
                    117:     maildir = m_maildir (folder);
                    118: 
                    119:     if (chdir (maildir) == NOTOK)
                    120:        adios (maildir, "unable to change directory to");
                    121:     if (!(mp = m_gmsg (folder)))
                    122:        adios (NULLCP, "unable to read folder %s", folder);
                    123:     if (mp -> hghmsg == 0)
                    124:        adios (NULLCP, "no messages in %s", folder);
                    125: 
                    126:     for (msgnum = 0; msgnum < msgp; msgnum++)
                    127:        if (!m_convert (mp, msgs[msgnum]))
                    128:            done (1);
                    129: 
                    130:     make_comp (&comp);
                    131: 
                    132:     for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
                    133:        if (mp -> msgstats[msgnum] & SELECTED)
                    134:            (void) annotate (m_name (msgnum), comp, text, inplace);
                    135: 
                    136:     m_replace (pfolder, folder);
                    137:     if (mp -> lowsel != mp -> curmsg)
                    138:        m_setcur (mp, mp -> lowsel);
                    139:     m_sync (mp);
                    140:     m_update ();
                    141: 
                    142:     done (0);
                    143: }
                    144: 
                    145: /*  */
                    146: 
                    147: static void
                    148: make_comp(ap)
                    149:        register char **ap;
                    150: {
                    151:     register char  *cp;
                    152:     char    buffer[BUFSIZ];
                    153: 
                    154:     if (*ap == NULL) {
                    155:        printf ("Enter component name: ");
                    156:        (void) fflush (stdout);
                    157: 
                    158:        if (fgets (buffer, sizeof buffer, stdin) == NULL)
                    159:            done (1);
                    160:        *ap = trimcpy (buffer);
                    161:     }
                    162: 
                    163:     if ((cp = *ap + strlen (*ap) - 1) > *ap && *cp == ':')
                    164:        *cp = NULL;
                    165:     if (strlen (*ap) == 0)
                    166:        adios (NULLCP, "null component name");
                    167:     if (**ap == '-')
                    168:        adios (NULLCP, "invalid component name %s", *ap);
                    169:     if (strlen (*ap) >= NAMESZ)
                    170:        adios (NULLCP, "too large component name %s", *ap);
                    171: 
                    172:     for (cp = *ap; *cp; cp++)
                    173:        if (!isalnum (*cp) && *cp != '-')
                    174:            adios (NULLCP, "invalid component name %s", *ap);
                    175: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.