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

1.1     ! root        1: /* scan.c - display a one-line "scan" listing */
        !             2: 
        !             3: #include "../h/mh.h"
        !             4: #include "../h/formatsbr.h"
        !             5: #include "../h/scansbr.h"
        !             6: #include "../zotnet/tws.h"
        !             7: #include <errno.h>
        !             8: #include <stdio.h>
        !             9: 
        !            10: /*  */
        !            11: 
        !            12: static struct swit switches[] = {
        !            13: #define        CLRSW   0
        !            14:     "clear", 0,
        !            15: #define        NCLRSW  1
        !            16:     "noclear", 0,
        !            17: 
        !            18: #define        FORMSW  2
        !            19:     "form formatfile", 0,
        !            20: #define        FMTSW   3
        !            21:     "format string", 5,
        !            22: 
        !            23: #define        HEADSW  4
        !            24:     "header", 0,
        !            25: #define        NHEADSW 5
        !            26:     "noheader", 0,
        !            27: 
        !            28: #define        WIDSW   6
        !            29:     "width columns", 0,
        !            30: 
        !            31: #ifdef BERK
        !            32: #define        REVSW   7
        !            33:     "reverse", 0,
        !            34: #define        NREVSW  8
        !            35:     "noreverse", 0,
        !            36: 
        !            37: #define        HELPSW  9
        !            38: #else  not BERK
        !            39: #define        HELPSW  7
        !            40: #endif not BERK
        !            41:     "help", 4,
        !            42: 
        !            43:     NULL, NULL
        !            44: };
        !            45: 
        !            46: /*  */
        !            47: 
        !            48: extern int errno;
        !            49: 
        !            50: 
        !            51: void   clear_screen ();
        !            52: 
        !            53: /*  */
        !            54: 
        !            55: /* ARGSUSED */
        !            56: 
        !            57: main (argc, argv)
        !            58: int     argc;
        !            59: char   *argv[];
        !            60: {
        !            61:      int    clearflag = 0,
        !            62:            hdrflag = 0,
        !            63:            width = 0,
        !            64:             msgp = 0,
        !            65:            ontty,
        !            66:            state,
        !            67:             msgnum;
        !            68: #ifdef  BERK
        !            69:     register int    revflag = 0,
        !            70:                    firstlim,
        !            71:                    lastlim,
        !            72:                    incr;
        !            73: #endif  BERK
        !            74:     char   *cp,
        !            75:            *maildir,
        !            76:            *folder = NULL,
        !            77:           *form = NULL,
        !            78:           *format = NULL,
        !            79:             buf[100],
        !            80:           **ap,
        !            81:           **argp,
        !            82:            *nfs,
        !            83:            *arguments[MAXARGS],
        !            84:            *msgs[MAXARGS];
        !            85:     struct msgs *mp;
        !            86:     FILE * in;
        !            87: 
        !            88:     invo_name = r1bindex (argv[0], '/');
        !            89:     if ((cp = m_find (invo_name)) != NULL) {
        !            90:        ap = brkstring (cp = getcpy (cp), " ", "\n");
        !            91:        ap = copyip (ap, arguments);
        !            92:     }
        !            93:     else
        !            94:        ap = arguments;
        !            95:     (void) copyip (argv + 1, ap);
        !            96:     argp = arguments;
        !            97: 
        !            98: /*  */
        !            99: 
        !           100:     while (cp = *argp++) {
        !           101:        if (*cp == '-')
        !           102:            switch (smatch (++cp, switches)) {
        !           103:                case AMBIGSW: 
        !           104:                    ambigsw (cp, switches);
        !           105:                    done (1);
        !           106:                case UNKWNSW: 
        !           107:                    adios (NULLCP, "-%s unknown", cp);
        !           108:                case HELPSW: 
        !           109:                    (void) sprintf (buf, "%s [+folder] [msgs] [switches]",
        !           110:                            invo_name);
        !           111:                    help (buf, switches);
        !           112:                    done (1);
        !           113: 
        !           114:                case CLRSW: 
        !           115:                    clearflag++;
        !           116:                    continue;
        !           117:                case NCLRSW: 
        !           118:                    clearflag = 0;
        !           119:                    continue;
        !           120: 
        !           121:                case FORMSW: 
        !           122:                    if (!(form = *argp++) || *form == '-')
        !           123:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           124:                    format = NULL;
        !           125:                    continue;
        !           126:                case FMTSW: 
        !           127:                    if (!(format = *argp++) || *format == '-')
        !           128:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           129:                    form = NULL;
        !           130:                    continue;
        !           131: 
        !           132:                case HEADSW: 
        !           133:                    hdrflag++;
        !           134:                    continue;
        !           135:                case NHEADSW: 
        !           136:                    hdrflag = 0;
        !           137:                    continue;
        !           138: 
        !           139:                case WIDSW: 
        !           140:                    if (!(cp = *argp++) || *cp == '-')
        !           141:                        adios (NULLCP, "missing argument to %s", argp[-2]);
        !           142:                    width = atoi (cp);
        !           143:                    continue;
        !           144: #ifdef  BERK
        !           145:                case REVSW:
        !           146:                    revflag++;
        !           147:                    continue;
        !           148:                case NREVSW:
        !           149:                    revflag = 0;
        !           150:                    continue;
        !           151: #endif  BERK
        !           152:            }
        !           153:        if (*cp == '+' || *cp == '@') {
        !           154:            if (folder)
        !           155:                adios (NULLCP, "only one folder at a time!");
        !           156:            else
        !           157:                folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
        !           158:        }
        !           159:        else
        !           160:            msgs[msgp++] = cp;
        !           161:     }
        !           162: 
        !           163: /*  */
        !           164: 
        !           165:     if (!m_find ("path"))
        !           166:        free (path ("./", TFOLDER));
        !           167:     if (!msgp)
        !           168:        msgs[msgp++] = "all";
        !           169:     if (!folder)
        !           170:        folder = m_getfolder ();
        !           171:     maildir = m_maildir (folder);
        !           172: 
        !           173:     if (chdir (maildir) == NOTOK)
        !           174:        adios (maildir, "unable to change directory to");
        !           175:     if (!(mp = m_gmsg (folder)))
        !           176:        adios (NULLCP, "unable to read folder %s", folder);
        !           177:     if (mp -> hghmsg == 0)
        !           178:        adios (NULLCP, "no messages in %s", folder);
        !           179: 
        !           180:     for (msgnum = 0; msgnum < msgp; msgnum++)
        !           181:        if (!m_convert (mp, msgs[msgnum]))
        !           182:            done(1);
        !           183:     m_setseq (mp);
        !           184: 
        !           185:     m_replace (pfolder, folder);
        !           186:     m_sync (mp);
        !           187:     m_update ();
        !           188: 
        !           189:     nfs = new_fs (form, format, FORMAT);
        !           190: 
        !           191:     ontty = isatty (fileno (stdout));
        !           192: 
        !           193: /*  */
        !           194: 
        !           195: #ifdef  BERK
        !           196:     if (revflag) {
        !           197:        firstlim = mp -> hghsel;
        !           198:        lastlim = mp -> lowsel;
        !           199:        incr = -1;
        !           200:     }
        !           201:     else {
        !           202:        firstlim = mp -> lowsel;
        !           203:        lastlim = mp -> hghsel;
        !           204:        incr = 1;
        !           205:     }
        !           206: 
        !           207:     for (msgnum = firstlim;
        !           208:            (revflag ? msgnum >= lastlim : msgnum <= lastlim);
        !           209:            msgnum += incr)
        !           210: #else  not BERK
        !           211:     for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
        !           212: #endif  not BERK
        !           213:        if (mp -> msgstats[msgnum] & SELECTED) {
        !           214:            if ((in = fopen (cp = m_name (msgnum), "r")) == NULL) {
        !           215:                if (errno != EACCES)
        !           216:                    admonish (cp, "unable to open message");
        !           217:                else
        !           218:                    printf ("%*d  unreadable\n", DMAXFOLDER, msgnum);
        !           219:                free (cp);
        !           220:                continue;
        !           221:            }
        !           222: 
        !           223:            if (hdrflag)
        !           224:                printf ("Folder %-32s%s\n\n", folder, dtimenow ());
        !           225:            switch (state = scan (in, msgnum, 0, nfs, width,
        !           226:                        msgnum == mp -> curmsg,
        !           227:                        hdrflag, 0L, 1)) {
        !           228:                case SCNMSG: 
        !           229:                case SCNERR: 
        !           230:                    break;
        !           231: 
        !           232:                default: 
        !           233:                    adios (NULLCP, "scan() botch (%d)", state);
        !           234: 
        !           235:                case SCNEOF: 
        !           236:                    printf ("%*d  empty\n", DMAXFOLDER, msgnum);
        !           237:                    break;
        !           238:            }
        !           239:            hdrflag = 0;
        !           240:            (void) fclose (in);
        !           241:            if (ontty)
        !           242:                (void) fflush (stdout);
        !           243:        }
        !           244: 
        !           245: /*  */
        !           246: 
        !           247:     if (clearflag)
        !           248:        clear_screen ();
        !           249: 
        !           250:     done (0);
        !           251: }

unix.superglobalmegacorp.com

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