|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.