Annotation of 43BSDTahoe/new/notes/src/nfprint.c, revision 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.