Annotation of 43BSD/contrib/mh/uip/scan.c, revision 1.1.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.