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

unix.superglobalmegacorp.com

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