# 2.11BSD#431 - /usr/src/new/notes/src/nfprint.c

##### Functions

    main              X

##### Variables

    director_only     X
    exclude_director  X
    justtitles        X
    left              X
    length            X
    page              X
    usepr             X

##### Macros

    MAINLINE          X
    PLENGTH           X

       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: }

#### Defined functions

main defined in line 44; never used

#### Defined variables

director_only defined in line 42; used 3 times

- in line 81, 96, 176

exclude_director defined in line 41; used 3 times

- in line 80, 101, 175

justtitles defined in line 38; used 4 times

- in line 77, 109, 182, 188

left defined in line 36; used 13 times

- in line 144, 180
- in /usr/src/new/notes/src/lprnote.c line 45, 90-97(4), 123, 144-151(4), 164

length defined in line 35; used 9 times

- in line 82, 92, 137, 143-144(2), 180
- in /usr/src/new/notes/src/lprnote.c line 97, 151, 164

page defined in line 37; used 5 times

- in line 75
- in /usr/src/new/notes/src/lprnote.c line 65, 96, 150, 163

rcsid defined in line 4; never used
usepr defined in line 39; used 3 times

- in line 78, 89, 136

#### Defined macros

MAINLINE defined in line 1; never used
PLENGTH defined in line 33; used 1 times

- in line 82

Last modified: 1985-01-19 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 859 |