Annotation of 43BSD/contrib/mh/uip/mark.c, revision 1.1

1.1     ! root        1: /* mark.c - mark messages */
        !             2: 
        !             3: #include "../h/mh.h"
        !             4: #include <stdio.h>
        !             5: 
        !             6: /*  */
        !             7: 
        !             8: static struct swit switches[] = {
        !             9: #define        ADDSW   0
        !            10:     "add", 0,
        !            11: #define        DELSW   1
        !            12:     "delete", 0,
        !            13: #define        LSTSW   2
        !            14:     "list", 0,
        !            15: 
        !            16: #define        SEQSW   3
        !            17:     "sequence name", 0,
        !            18: 
        !            19: #define        PUBLSW  4
        !            20:     "public", 0,
        !            21: #define        NPUBLSW 5
        !            22:     "nopublic", 0,
        !            23: 
        !            24: #define        ZEROSW  6
        !            25:     "zero", 0,
        !            26: #define        NZEROSW 7
        !            27:     "nozero", 0,
        !            28: 
        !            29: #define        HELPSW  8
        !            30:     "help", 4,
        !            31: 
        !            32: #define        DEBUGSW 9
        !            33:     "debug", -5,
        !            34: 
        !            35:     NULL, NULL
        !            36: };
        !            37: 
        !            38: /*  */
        !            39: 
        !            40: /* ARGSUSED */
        !            41: 
        !            42: main (argc, argv)
        !            43: int    argc;
        !            44: char  **argv;
        !            45: {
        !            46:     int     addsw = 0,
        !            47:             deletesw = 0,
        !            48:             debugsw = 0,
        !            49:             listsw = 0,
        !            50:            publicsw = -1,
        !            51:             zerosw = 0,
        !            52:             seqp = 0,
        !            53:             msgp = 0,
        !            54:             i,
        !            55:             msgnum;
        !            56:     char   *cp,
        !            57:            *maildir,
        !            58:            *folder = NULL,
        !            59:             buf[100],
        !            60:           **ap,
        !            61:           **argp,
        !            62:            *arguments[MAXARGS],
        !            63:            *seqs[NATTRS + 1],
        !            64:            *msgs[MAXARGS];
        !            65:     struct msgs *mp;
        !            66: 
        !            67:     invo_name = r1bindex (argv[0], '/');
        !            68:     if ((cp = m_find (invo_name)) != NULL) {
        !            69:        ap = brkstring (cp = getcpy (cp), " ", "\n");
        !            70:        ap = copyip (ap, arguments);
        !            71:     }
        !            72:     else
        !            73:        ap = arguments;
        !            74:     (void) copyip (argv + 1, ap);
        !            75:     argp = arguments;
        !            76: 
        !            77: /*  */
        !            78: 
        !            79:     while (cp = *argp++) {
        !            80:        if (*cp == '-')
        !            81:            switch (smatch (++cp, switches)) {
        !            82:                case AMBIGSW: 
        !            83:                    ambigsw (cp, switches);
        !            84:                    done (1);
        !            85:                case UNKWNSW: 
        !            86:                    adios (NULLCP, "-%s unknown\n", cp);
        !            87:                case HELPSW: 
        !            88:                    (void) sprintf (buf, "%s [+folder] [msgs] [switches]",
        !            89:                            invo_name);
        !            90:                    help (buf, switches);
        !            91:                    done (1);
        !            92: 
        !            93:                case ADDSW: 
        !            94:                    addsw++;
        !            95:                    deletesw = listsw = 0;
        !            96:                    continue;
        !            97:                case DELSW: 
        !            98:                    deletesw++;
        !            99:                    addsw = listsw = 0;
        !           100:                    continue;
        !           101:                case LSTSW: 
        !           102:                    listsw++;
        !           103:                    addsw = deletesw = 0;
        !           104:                    continue;
        !           105: 
        !           106:                case SEQSW: 
        !           107:                    if (!(cp = *argp++) || *cp == '-')
        !           108:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           109:                    if (seqp < NATTRS)
        !           110:                        seqs[seqp++] = cp;
        !           111:                    else
        !           112:                        adios (NULLCP, "only %d sequences allowed!", NATTRS);
        !           113:                    continue;
        !           114: 
        !           115:                case PUBLSW: 
        !           116:                    publicsw = 1;
        !           117:                    continue;
        !           118:                case NPUBLSW: 
        !           119:                    publicsw = 0;
        !           120:                    continue;
        !           121: 
        !           122:                case DEBUGSW: 
        !           123:                    debugsw++;
        !           124:                    continue;
        !           125: 
        !           126:                case ZEROSW: 
        !           127:                    zerosw++;
        !           128:                    continue;
        !           129:                case NZEROSW: 
        !           130:                    zerosw = 0;
        !           131:                    continue;
        !           132:            }
        !           133:        if (*cp == '+' || *cp == '@') {
        !           134:            if (folder)
        !           135:                adios (NULLCP, "only one folder at a time!");
        !           136:            else
        !           137:                folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
        !           138:        }
        !           139:        else
        !           140:            msgs[msgp++] = cp;
        !           141:     }
        !           142: 
        !           143: /*  */
        !           144: 
        !           145:     if (!addsw && !deletesw && !listsw)
        !           146:        if (seqp)
        !           147:            addsw++;
        !           148:        else
        !           149:            listsw++;
        !           150: 
        !           151:     if (!m_find ("path"))
        !           152:        free (path ("./", TFOLDER));
        !           153:     if (!msgp)
        !           154:        msgs[msgp++] = listsw ? "all" :"cur";
        !           155:     if (!folder)
        !           156:        folder = m_getfolder ();
        !           157:     maildir = m_maildir (folder);
        !           158: 
        !           159:     if (chdir (maildir) == NOTOK)
        !           160:        adios (maildir, "unable to change directory to");
        !           161:     if (!(mp = m_gmsg (folder)))
        !           162:        adios (NULLCP, "unable to read folder %s", folder);
        !           163:     if (mp -> hghmsg == 0)
        !           164:        adios (NULLCP, "no messages in %s", folder);
        !           165: 
        !           166:     for (msgnum = 0; msgnum < msgp; msgnum++)
        !           167:        if (!m_convert (mp, msgs[msgnum]))
        !           168:            done (1);
        !           169: 
        !           170:     if (publicsw == -1)
        !           171:        publicsw = mp -> msgflags & READONLY ? 0 : 1;
        !           172:     if (publicsw && (mp -> msgflags & READONLY))
        !           173:        adios (NULLCP, "folder %s is read-only, so -public not allowed",
        !           174:                folder);
        !           175: 
        !           176: /*  */
        !           177: 
        !           178:     if (debugsw) {
        !           179:        printf ("invo_name=%s mypath=%s defpath=%s\n",
        !           180:                invo_name, mypath, defpath);
        !           181:        printf ("ctxpath=%s context flags=%s\n",
        !           182:                ctxpath, sprintb (buf, (unsigned) ctxflags, DBITS));
        !           183:        printf ("foldpath=%s flags=%s\n",
        !           184:                mp -> foldpath,
        !           185:                sprintb (buf, (unsigned) mp -> msgflags, FBITS));
        !           186:        printf ("lowmsg=%d hghmsg=%d nummsg=%d curmsg=%d\n",
        !           187:                mp -> lowmsg, mp -> hghmsg, mp -> nummsg, mp -> curmsg);
        !           188:        printf ("lowsel=%d hghsel=%d numsel=%d\n",
        !           189:                mp -> lowsel, mp -> hghsel, mp -> numsel);
        !           190: #ifndef        MTR
        !           191:        printf ("lowoff=%d hghoff=%d\n",
        !           192:                mp -> lowoff, mp -> hghoff);
        !           193: #else  MTR
        !           194:        printf ("lowoff=%d hghoff=%d msgbase=0x%x msgstats=0x%x\n",
        !           195:                mp -> lowoff, mp -> hghoff, mp -> msgbase, mp -> msgstats);
        !           196: #endif MTR
        !           197:     }
        !           198: 
        !           199:     if (seqp == 0 && (addsw || deletesw))
        !           200:        adios (NULLCP, "-%s requires at least one -sequence argument",
        !           201:                addsw ? "add" : "delete");
        !           202:     seqs[seqp] = NULL;
        !           203: 
        !           204:     if (addsw)
        !           205:        for (seqp = 0; seqs[seqp]; seqp++) {
        !           206:            if (zerosw && !m_seqnew (mp, seqs[seqp], publicsw))
        !           207:                done (1);
        !           208:            for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
        !           209:                if (mp -> msgstats[msgnum] & SELECTED)
        !           210:                    if (!m_seqadd (mp, seqs[seqp], msgnum, publicsw))
        !           211:                        done (1);
        !           212:        }
        !           213: 
        !           214:     if (deletesw)
        !           215:        for (seqp = 0; seqs[seqp]; seqp++) {
        !           216:            if (zerosw)
        !           217:                for (msgnum = mp -> lowmsg; msgnum <= mp -> hghmsg; msgnum++)
        !           218:                    if (mp -> msgstats[msgnum] & EXISTS)
        !           219:                        if (!m_seqadd (mp, seqs[seqp], msgnum, publicsw))
        !           220:                            done (1);
        !           221:            for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
        !           222:                if (mp -> msgstats[msgnum] & SELECTED)
        !           223:                    if (!m_seqdel (mp, seqs[seqp], msgnum))
        !           224:                        done (1);
        !           225:        }
        !           226: 
        !           227:     if (listsw) {
        !           228:        int bits = FFATTRSLOT;
        !           229: 
        !           230:        if (seqp == 0)
        !           231:            for (i = 0; mp -> msgattrs[i]; i++)
        !           232:                printf ("%s%s: %s\n", mp -> msgattrs[i],
        !           233:                        mp -> attrstats & (1 << (bits + i))
        !           234:                            ? " (private)" : "",
        !           235:                        m_seq (mp, mp -> msgattrs[i]));
        !           236:        else
        !           237:            for (seqp = 0; seqs[seqp]; seqp++)
        !           238:                printf ("%s: %s\n", seqs[seqp], m_seq (mp, seqs[seqp]));
        !           239: 
        !           240:        if (debugsw)
        !           241:            for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
        !           242:                if (mp -> msgstats[msgnum] & SELECTED)
        !           243:                    printf ("%*d: %s\n", DMAXFOLDER, msgnum,
        !           244:                        sprintb (buf, (unsigned) mp -> msgstats[msgnum],
        !           245:                            m_seqbits (mp)));
        !           246:     }
        !           247: 
        !           248:     m_replace (pfolder, folder);
        !           249:     m_sync (mp);
        !           250:     m_update ();
        !           251: 
        !           252:     done (0);
        !           253: }

unix.superglobalmegacorp.com

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