Annotation of 43BSD/contrib/notes/src/nfprint.c, revision 1.1.1.1

1.1       root        1: #define        MAINLINE
                      2: 
                      3: #ifdef RCSIDENT
                      4: static char rcsid[] = "$Header: nfprint.c,v 1.7 85/01/18 15:28:54 notes Rel $";
                      5: #endif RCSIDENT
                      6: 
                      7: /*
                      8:  *     nfprint - print out the contents of a notefile.
                      9:  *
                     10:  *     this program produces line printable output for the 
                     11:  *     notefile specified. Included is a table of contents
                     12:  *     detailing where the notes are.
                     13:  *
                     14:  *     Call:
                     15:  *             nfprint [-lnn] notefile list > output
                     16:  *
                     17:  *     list is an orders list on notenumbers.
                     18:  *
                     19:  *     Original Coding:        Ray Essick      January 1982
                     20:  */
                     21: 
                     22: /*---------------------------------------------------------------------------
                     23:  * COMPION (sep 84-8-21)
                     24:  * added code to allow excluding or limiting to messages with director
                     25:  * flag set (used here to toggle messages between 'pending' and
                     26:  * 'completed' status)
                     27:  *---------------------------------------------------------------------------
                     28:  */
                     29: 
                     30: #include "parms.h"
                     31: #include "structs.h"
                     32: 
                     33: #define        PLENGTH 66                                      /* length of a page */
                     34: 
                     35: int     length;                                                /* length of a page */
                     36: int     left;                                          /* lines left on the current page */
                     37: int     page;                                          /* which page we are on */
                     38: int     justtitles;                                    /* no text */
                     39: int     usepr = 1;                                     /* paginate */
                     40: /* COMPION (sep 84-8-21) added next two declares */
                     41: int     exclude_director;                              /* print no director messages */
                     42: int     director_only;                                 /* print only director messages */
                     43: 
                     44: main (argc, argv)
                     45: char  **argv;
                     46: {
                     47:     struct io_f io;
                     48:     FILE * toc;                                                /* table of contents scratch file */
                     49:     FILE * lprfile;
                     50:     FILE * popen ();
                     51:     char   *p;
                     52:     char    buf[WDLEN];
                     53:     char    cmdline[WDLEN];
                     54:     struct note_f   note;
                     55:     register int    i;
                     56:     char    dfltrange[10];                             /* hold default list */
                     57:     int     bufptr,
                     58:             start,
                     59:             end;
                     60:     int     singlepage;
                     61:     char    fn[WDLEN];                                 /* file name */
                     62:     int     argp;
                     63: 
                     64:     startup (argc, argv);                              /* common initialization */
                     65: 
                     66:     if (argc == 1)                                     /* tell him how */
                     67:     {
                     68:        fprintf (stderr,
                     69:                "Usage: %s [-lnn] [-c] [-p] [-{d,nd}] [-t] notesfile list\n",
                     70:                argv[0]);
                     71:        exit (BAD);
                     72:     }
                     73: 
                     74: 
                     75:     page = 1;
                     76:     singlepage = 0;                                    /* no page break between notes */
                     77:     justtitles = 0;                                    /* include text */
                     78:     usepr = 1;                                         /* default to pr */
                     79:                                                        /* COMPION (sep 84-8-21) next two init lines added */
                     80:     exclude_director = 0;                              /* don't exclude director messages */
                     81:     director_only = 0;                                 /* don't limit to director messages */
                     82:     length = PLENGTH;
                     83:     argp = 1;                                          /* arg parsing */
                     84:     while (argv[argp][0] == '-')
                     85:     {
                     86:        switch (argv[argp][1])
                     87:        {
                     88:            case 'c':                                   /* use cat instead */
                     89:                usepr = 0;
                     90:                break;
                     91:            case 'l':                                   /* page length */
                     92:                length = atoi (&argv[argp][2]);
                     93:                break;
                     94: /* COMPION (sep 84-8-21) next two cases added */
                     95:            case 'd': 
                     96:                director_only++;
                     97:                break;
                     98:            case 'n': 
                     99:                if (argv[argp][2] == 'd')
                    100:                {
                    101:                    exclude_director++;
                    102:                }
                    103:                break;
                    104:            case 'p':                                   /* start all notes on fresh page */
                    105:                singlepage++;
                    106:                break;
                    107: 
                    108:            case 't':                                   /* titles only */
                    109:                justtitles++;
                    110:                break;
                    111: 
                    112:            default: 
                    113:                fprintf (stderr, "Bad switch `%c'\n", argv[argp][1]);
                    114:                exit (BAD);
                    115:        }
                    116: 
                    117:        argp++;                                         /* jump to next one */
                    118:     }
                    119:     if (init (&io, argv[argp]) < 0)                    /* get the notesfile */
                    120:     {
                    121:        exit (NONF);
                    122:     }
                    123:     if (allow (&io, READOK) == 0)
                    124:     {
                    125:        fprintf (stderr, "You are not allowed to read %s\n", argv[argp]);
                    126:        exit (BAD);
                    127:     }
                    128: 
                    129:     sprintf (fn, "/tmp/nf%d", getpid ());              /* build toc file */
                    130:     x ((toc = fopen (fn, "w")) == NULL, "nfprint: no scratch file");
                    131: 
                    132:     p = buf;
                    133:     for (i = 0; i < NNLEN; i++)
                    134:        *p++ = io.descr.d_title[i];                     /* move title */
                    135:     *p = '\0';                                         /* and null terminate */
                    136:     if (usepr)                                         /* paginate with pr */
                    137:        sprintf (cmdline, "pr -l%d -h '(%s) %s'", length, System, buf);
                    138:     else
                    139:        sprintf (cmdline, "cat -");                     /* just use cat */
                    140:     x ((lprfile = popen (cmdline, "w")) == NULL, "nfprint: can't run pr");
                    141: 
                    142: 
                    143:     length -= 10;                                      /* pr uses 5/5 header/footer */
                    144:     left = length;                                     /* empty page */
                    145:     if (argp == (argc - 1))                            /* last arg ... */
                    146:     {
                    147:        sprintf (dfltrange, "%d-%d", 1, io.descr.d_nnote);
                    148:        argv[argp--] = dfltrange;                       /* set up as an arg */
                    149:     }
                    150:     argp++;                                            /* advance to next arg */
                    151:     for (; argp < argc; argp++)
                    152:     {
                    153:        bufptr = 0;
                    154:        while (listget (argv[argp], &bufptr, &start, &end))
                    155:        {
                    156:            if (start > end)
                    157:                continue;                               /* wrong order */
                    158:            if (start > io.descr.d_nnote)
                    159:                continue;                               /* too far out */
                    160:            if (start < 1)
                    161:                start = 1;
                    162:            if (end > io.descr.d_nnote)
                    163:                end = io.descr.d_nnote;                 /* max out */
                    164:            for (i = start; i <= end; i++)
                    165:            {
                    166:                getnrec (&io, i, &note);
                    167:                if (note.n_stat & DELETED)
                    168:                    continue;                           /* its not really there */
                    169: /*---------------------------------------------------------------------------
                    170:  * COMPION (sep 84-8-21)
                    171:  * added test to allow or inclusion/exclusion based on director message
                    172:  * flag
                    173:  *---------------------------------------------------------------------------
                    174:  */
                    175:                if ((exclude_director && (note.n_stat & DIRMES))
                    176:                        || (director_only && !(note.n_stat & DIRMES)))
                    177:                {
                    178:                    continue;
                    179:                }
                    180:                if (singlepage && left != length)       /* want page breaks? */
                    181:                    pagebreak (lprfile);
                    182:                lprnote (&io, lprfile, toc, i, &note, justtitles);
                    183:            }
                    184:        }
                    185:     }
                    186:     x (fclose (toc) == EOF, "nfprint: bad fclose 1");
                    187:     x ((toc = fopen (fn, "r")) == NULL, "nfprint: bad reopen of toc");
                    188:     if (!justtitles)                                   /* only if w/ text */
                    189:        pagebreak (lprfile);                            /* force page break */
                    190:     while ((i = getc (toc)) != EOF)
                    191:        putc (i, lprfile);
                    192:     fclose (toc);
                    193:     x (unlink (fn) < 0, "nfprint: couldnt unlink scratch file");
                    194:     pclose (lprfile);                                  /* flush the pipe */
                    195:                                                        /* and wait too! */
                    196:     exit (GOOD);
                    197: }

unix.superglobalmegacorp.com

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