home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume10 / notes-mod.pch / diffs.src < prev    next >
Text File  |  1987-07-29  |  24KB  |  866 lines

  1. *** /tmp/,RCSt1020325    Wed Jul  1 13:38:12 1987
  2. --- Makefile    Wed Jul  1 13:10:53 1987
  3. ***************
  4. *** 10,22 ****
  5.   #    217-333-7937
  6.   #
  7.   
  8. ! BIN = /usr/local
  9.   MSTDIR = /usr/spool/notes
  10.   ARCHDIR = /usr/spool/oldnotes
  11.   NET = /usr/bin
  12.   AUTOSEQ = autoseq
  13.   NOTES = notes
  14. ! NOTESUID = 10
  15.   NOTESGRP = notes
  16.   ANON = anon
  17.   ANONUID = 4
  18. --- 10,22 ----
  19.   #    217-333-7937
  20.   #
  21.   
  22. ! BIN = /usr/local/bin
  23.   MSTDIR = /usr/spool/notes
  24.   ARCHDIR = /usr/spool/oldnotes
  25.   NET = /usr/bin
  26.   AUTOSEQ = autoseq
  27.   NOTES = notes
  28. ! NOTESUID = 24
  29.   NOTESGRP = notes
  30.   ANON = anon
  31.   ANONUID = 4
  32. ***************
  33. *** 124,130 ****
  34.         pattern.o perms.o recsio.o startup.o expand.o
  35.   NFTIMESTAMP = check.o cursor.o datein.o gname.o gtime.o misc.o miscio.o \
  36.         pattern.o permit.o recsio.o startup.o times.o expand.o \
  37. !       getdate.o perms.o ftime.o
  38.   NFXMIT    = check.o cursor.o dmpnote.o dmpresp.o getnet.o gname.o \
  39.         gtime.o lrsp.o misc.o miscio.o next.o nfalias.o nfsend.o \
  40.         pageout.o pattern.o permit.o perms.o recsio.o \
  41. --- 124,130 ----
  42.         pattern.o perms.o recsio.o startup.o expand.o
  43.   NFTIMESTAMP = check.o cursor.o datein.o gname.o gtime.o misc.o miscio.o \
  44.         pattern.o permit.o recsio.o startup.o times.o expand.o \
  45. !       getdate.o perms.o
  46.   NFXMIT    = check.o cursor.o dmpnote.o dmpresp.o getnet.o gname.o \
  47.         gtime.o lrsp.o misc.o miscio.o next.o nfalias.o nfsend.o \
  48.         pageout.o pattern.o permit.o perms.o recsio.o \
  49. ***************
  50. *** 216,224 ****
  51.       -chgrp $(NOTESGRP) $(UTILITY)/coredump
  52.   #    generate the available notesfile file here - only once!
  53.       echo "available notesfiles" > $(UTILITY)/avail.notes
  54.       touch $(UTILITY)/Dflt-Seq
  55. !     -chown $(NOTES) $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq
  56. !     -chgrp $(NOTESGRP) $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq
  57.       chmod 664 $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq
  58.       touch spool
  59.       @echo Notesfile Spool directories ready
  60. --- 216,225 ----
  61.       -chgrp $(NOTESGRP) $(UTILITY)/coredump
  62.   #    generate the available notesfile file here - only once!
  63.       echo "available notesfiles" > $(UTILITY)/avail.notes
  64. +     cp moderators $(UTILITY)/moderators
  65.       touch $(UTILITY)/Dflt-Seq
  66. !     -chown $(NOTES) $(UTILITY)/moderators $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq
  67. !     -chgrp $(NOTESGRP) $(UTILITY)/moderators $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq
  68.       chmod 664 $(UTILITY)/avail.notes $(UTILITY)/Dflt-Seq
  69.       touch spool
  70.       @echo Notesfile Spool directories ready
  71. *** /tmp/,RCSt1020338    Wed Jul  1 13:38:22 1987
  72. --- dropt.c    Wed Jul  1 12:54:59 1987
  73. ***************
  74. *** 24,29 ****
  75. --- 24,31 ----
  76.    *         -4 if the user hit cntrl d ( to total exit)
  77.    *
  78.    *    original author/outliner : Ray Essick may 29, 1981
  79. +  *      added the "moderated" flag:Rich $alz  aug 19, 1985
  80. +  *      added "local" flag, toggle, YorN:    Rich $alz  aug 19, 1985
  81.    *
  82.    */
  83.   
  84. ***************
  85. *** 35,43 ****
  86.               netrow,                    /* networked */
  87.               expirerow,                    /* expire age */
  88.               longrow,                    /* longest ok text */
  89. !             worksetrow;                    /* working set */
  90.   static int  lastrow;
  91.   
  92.   direct (io) struct io_f *io;
  93.   {
  94.       int     i;                        /* scratch */
  95. --- 37,51 ----
  96.               netrow,                    /* networked */
  97.               expirerow,                    /* expire age */
  98.               longrow,                    /* longest ok text */
  99. !             worksetrow,                    /* working set */
  100. !         modrow,                    /* moderated flag */
  101. !         localrow;                    /* local flag */
  102.   static int  lastrow;
  103.   
  104. + #define YorN(c)        ((c) != 0 ? YES : NO)
  105. + static char YES[] = "YES";
  106. + static char NO[] = "NO ";
  107.   direct (io) struct io_f *io;
  108.   {
  109.       int     i;                        /* scratch */
  110. ***************
  111. *** 113,143 ****
  112.           break;                    /* skipt out of the loop */
  113.   
  114.           case 'a':                     /* toggle anonymous option */
  115. !         locknf (io, DSCRLOCK);            /* lock the thing for a minute */
  116. !         getdscr (io, &io -> descr);        /* get up to date descriptor */
  117. !         if (io -> descr.d_stat & ANONOK)
  118. !             io -> descr.d_stat &= NOT ANONOK;
  119. !         else
  120. !             io -> descr.d_stat |= ANONOK;
  121. !         putdscr (io, &io -> descr);
  122. !         unlocknf (io, DSCRLOCK);
  123. !         at (anonrow, 18);
  124. !         printf (io -> descr.d_stat & ANONOK ? "ON " : "OFF");
  125. !         redraw = 0;
  126.           break;
  127.   
  128.           case 'A':                     /* Archive option */
  129. !         locknf (io, DSCRLOCK);            /* lock the thing for a minute */
  130. !         getdscr (io, &io -> descr);        /* get up to date descriptor */
  131. !         if (io -> descr.d_stat & ISARCH)
  132. !             io -> descr.d_stat &= NOT ISARCH;
  133. !         else
  134. !             io -> descr.d_stat |= ISARCH;
  135. !         putdscr (io, &io -> descr);
  136. !         unlocknf (io, DSCRLOCK);
  137. !         at (archrow, 18);
  138. !         printf (io -> descr.d_stat & ISARCH ? "YES" : "NO ");
  139. !         redraw = 0;
  140.           break;
  141.   
  142.           case 'l':                     /* message length */
  143. --- 121,131 ----
  144.           break;                    /* skipt out of the loop */
  145.   
  146.           case 'a':                     /* toggle anonymous option */
  147. !         toggle(io, ANONOK, anonrow);
  148.           break;
  149.   
  150.           case 'A':                     /* Archive option */
  151. !         toggle(io, ISARCH, archrow);
  152.           break;
  153.   
  154.           case 'l':                     /* message length */
  155. ***************
  156. *** 173,183 ****
  157.           unlocknf (io, DSCRLOCK);        /* all done ... */
  158.           at (longrow, 27);
  159.           printf ("%ld bytes   ", io -> descr.d_longnote);
  160. -         redraw = 0;
  161.           break;
  162.   
  163.           case 'c':                     /* compress the notefile */
  164. -         redraw = 0;
  165.           if (io -> descr.d_stat & OPEN)
  166.           {
  167.               at (lastrow, 10);
  168. --- 161,169 ----
  169. ***************
  170. *** 265,271 ****
  171.               printf ("%ld days     ", io -> descr.d_archtime);
  172.               break;
  173.           }
  174. -         redraw = 0;
  175.           break;
  176.   
  177.           case 'W':                     /* working Set size */
  178. --- 251,256 ----
  179. ***************
  180. *** 311,317 ****
  181.               default: 
  182.               printf ("%ld Notes    ", io -> descr.d_workset);
  183.           }
  184. -         redraw = 0;
  185.           break;
  186.   
  187.           case 'E':                     /* keep/delete/default */
  188. --- 296,301 ----
  189. ***************
  190. *** 348,354 ****
  191.               printf ("UNKNOWN");
  192.               break;
  193.           }
  194. -         redraw = 0;
  195.           break;
  196.   
  197.           case 'D':                     /* Archive dirmsg */
  198. --- 332,337 ----
  199. ***************
  200. *** 397,435 ****
  201.               printf ("UNKNOWN  ");
  202.               break;
  203.           }
  204. -         redraw = 0;
  205.           break;
  206.   
  207.           case 'o':                     /* toggle open status */
  208. !         locknf (io, DSCRLOCK);
  209. !         getdscr (io, &io -> descr);
  210. !         if (io -> descr.d_stat & OPEN)
  211. !             io -> descr.d_stat &= NOT OPEN;
  212. !         else
  213. !             io -> descr.d_stat |= OPEN;
  214. !         putdscr (io, &io -> descr);
  215. !         unlocknf (io, DSCRLOCK);
  216. !         at (openrow, 18);
  217. !         printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
  218. !         redraw = 0;
  219.           break;
  220.   
  221.           case 'n':                     /* toggle network status */
  222. !         locknf (io, DSCRLOCK);
  223. !         getdscr (io, &io -> descr);
  224. !         if (io -> descr.d_stat & NETWRKD)
  225. !         {
  226. !             io -> descr.d_stat &= NOT NETWRKD;
  227. !         }
  228. !         else
  229. !         {
  230. !             io -> descr.d_stat |= NETWRKD;
  231. !         }
  232. !         putdscr (io, &io -> descr);
  233. !         unlocknf (io, DSCRLOCK);
  234. !         at (netrow, 18);
  235. !         printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
  236. !         redraw = 0;
  237.           break;
  238.   
  239.   
  240. --- 380,401 ----
  241.               printf ("UNKNOWN  ");
  242.               break;
  243.           }
  244.           break;
  245.   
  246.           case 'o':                     /* toggle open status */
  247. !         toggle (io, OPEN, openrow);
  248.           break;
  249.   
  250. +         case 'M':                     /* toggle moderated status */
  251. +         toggle (io, MODERATED, modrow);
  252. +         break;
  253. +         case 'L':                     /* toggle local status */
  254. +         toggle(io, LOCAL, localrow);
  255. +         break;
  256.           case 'n':                     /* toggle network status */
  257. !         toggle(io, NETWRKD, netrow);
  258.           break;
  259.   
  260.   
  261. ***************
  262. *** 530,536 ****
  263.   
  264.           default: 
  265.           printf ("\07");
  266. -         redraw = 0;
  267.           goto getkey;                /* hit a bad key */
  268.   
  269.       }
  270. --- 496,501 ----
  271. ***************
  272. *** 559,568 ****
  273.       printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
  274.       at (netrow = atrow++, atcol);
  275.       printf ("(n) Networked:   ");            /* at(5,18); */
  276. !     printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
  277.       at (archrow = atrow++, atcol);
  278.       printf ("(A) Is Archive:  ");            /* at(6,18); */
  279. !     printf (io -> descr.d_stat & ISARCH ? "YES" : "NO");
  280.       at (expirerow = atrow++, atcol);
  281.       printf ("(e) Expiration Threshold: ");        /* at (6,27); */
  282.       switch ((int) (io -> descr.d_archtime))
  283. --- 524,539 ----
  284.       printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
  285.       at (netrow = atrow++, atcol);
  286.       printf ("(n) Networked:   ");            /* at(5,18); */
  287. !     printf (YorN(io -> descr.d_stat & NETWRKD));
  288.       at (archrow = atrow++, atcol);
  289.       printf ("(A) Is Archive:  ");            /* at(6,18); */
  290. !     printf (YorN(io -> descr.d_stat & ISARCH));
  291. !     at (modrow = atrow++, atcol);
  292. !     printf ("(M) Moderated:   ");
  293. !     printf (YorN(io -> descr.d_stat & MODERATED));
  294. !     at (localrow = atrow++, atcol);
  295. !     printf ("(L) Local:       ");
  296. !     printf (YorN(io -> descr.d_stat & LOCAL));
  297.       at (expirerow = atrow++, atcol);
  298.       printf ("(e) Expiration Threshold: ");        /* at (6,27); */
  299.       switch ((int) (io -> descr.d_archtime))
  300. ***************
  301. *** 640,646 ****
  302.       atrow = 4;
  303.       atcol = 40;
  304.       at (atrow++, atcol);
  305. !     printf ("Policy Note Exists: %s", io -> descr.d_plcy ? "YES" : "NO");
  306.       at (atrow++, atcol);
  307.       printf ("Next note in slot: %d", io -> descr.d_nnote + 1);
  308.       at (atrow++, atcol);
  309. --- 611,617 ----
  310.       atrow = 4;
  311.       atcol = 40;
  312.       at (atrow++, atcol);
  313. !     printf ("Policy Note Exists: %s", YorN(io -> descr.d_plcy));
  314.       at (atrow++, atcol);
  315.       printf ("Next note in slot: %d", io -> descr.d_nnote + 1);
  316.       at (atrow++, atcol);
  317. ***************
  318. *** 655,658 ****
  319. --- 626,646 ----
  320.       if (atrow > lastrow)
  321.       lastrow = atrow;
  322.       lastrow++;
  323. + }
  324. + toggle(io, flag, row)
  325. +     struct io_f *io;
  326. +     int flag;
  327. +     int row;
  328. + {
  329. +     locknf (io, DSCRLOCK);
  330. +     getdscr (io, &io -> descr);
  331. +     if (io -> descr.d_stat & flag)
  332. +     io -> descr.d_stat &= NOT flag;
  333. +     else
  334. +     io -> descr.d_stat |= flag;
  335. +     putdscr (io, &io -> descr);
  336. +     unlocknf (io, DSCRLOCK);
  337. +     at (row, 18);
  338. +     printf (YorN(io -> descr.d_stat & flag));
  339.   }
  340. *** /tmp/,RCSt1020349    Wed Jul  1 13:38:31 1987
  341. --- gtext.c    Wed Jul  1 12:56:31 1987
  342. ***************
  343. *** 1,5 ****
  344. --- 1,7 ----
  345.   #include "parms.h"
  346.   #include "structs.h"
  347. + #include <sys/types.h>
  348. + #include <sys/stat.h>
  349.   
  350.   #ifdef    RCSIDENT
  351.   static char rcsid[] = "$Header: gtext.c,v 1.7 87/07/01 12:39:33 paul Locked $";
  352. ***************
  353. *** 17,24 ****
  354. --- 19,31 ----
  355.    *    modified again:    rbe 12 nov 81    fix to version 7 and general shtuff
  356.    *    modified a third time to add insert-text for user
  357.    *        Ray Essick    December 1981
  358. +  *    modified to add non-portable way of appending a signature file.
  359. +  *        Rich $alz    July, 1985
  360. +  *    did signatures the "right" way (better, at least) - LOCAL flag
  361. +  *        Rich $alz    August, 1985
  362.    */
  363.   
  364. + extern char hissig[];
  365.   long    gettext (io, where, preface, editflag)
  366.   struct io_f *io;
  367.   struct daddr_f *where;                    /* where we left it */
  368. ***************
  369. *** 29,34 ****
  370. --- 36,42 ----
  371.       register int    c;
  372.       long    count;
  373.       char    fn[20];                    /* scratch file name */
  374. +     struct stat    sbuf;
  375.   
  376.       sprintf (fn, "/tmp/nf%d", getpid ());
  377.       x ((scr = fopen (fn, "w")) == NULL, "gettext: create scratch");
  378. ***************
  379. *** 69,74 ****
  380. --- 77,106 ----
  381.       {
  382.       unlink (fn);                    /* might just be protections */
  383.       return ((long) 0);
  384. +     }
  385. +     (void) fstat (fileno (scr), &sbuf);
  386. +     if (sbuf.st_size > (off_t) 0 && hissig[0]
  387. +      && io -> descr.d_stat & NETWRKD && !(io -> descr.d_stat & LOCAL))
  388. +     {
  389. +     c = askyn ("Add signature (y/n): ");
  390. +     printf ("\r                      \r");
  391. +     if (c == 'y')
  392. +     {
  393. +         FILE * siggy;
  394. +         if ((siggy = fopen (hissig, "r")) == NULL)
  395. +         printf ("Can't find %s", hissig);
  396. +         else
  397. +         {
  398. +         /* Flop to append mode, append, flip back to read */
  399. +         freopen (fn, "a", scr);
  400. +         while ((c = getc (siggy)) != EOF)
  401. +             putc (c, scr);
  402. +         fclose (siggy);
  403. +         freopen (fn, "r", scr);
  404. +         }
  405. +     }
  406.       }
  407.   
  408.       count = pagein (io, scr, where);            /* move text in */
  409. *** /tmp/,RCSt1020354    Wed Jul  1 13:38:35 1987
  410. --- index.c    Wed Jul  1 12:55:09 1987
  411. ***************
  412. *** 20,27 ****
  413. --- 20,33 ----
  414.    *
  415.    *    Original Coding:    Rob Kolstad    Winter 1980
  416.    *    modifications:        Ray Essick    December 1981
  417. +  *    added MODERATED code:    Rich $alz    August 1985
  418. +  *    added LOCAL flag:    Rich $alz    August 1985
  419.    */
  420.   
  421. + static char YES[] = "YES";
  422. + static char NO[] = "NO ";
  423. + #define YorN(c)        ((c) != 0 ? YES : NO)
  424.   indx (io, firstdis, lastdis, respnum)
  425.   struct io_f *io;
  426.   int    *firstdis,
  427. ***************
  428. *** 58,66 ****
  429.   
  430.           case 'W':                     /* this too shall write a note */
  431.           case 'w':                     /* write a note */
  432. !         return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT);
  433. !                             /* do it */
  434.   
  435.           case 'B':                     /* bitch, bitch, bitch */
  436.           if (init (&io2, GRIPES) < 0)        /* no gripe file */
  437.           {
  438. --- 64,77 ----
  439.   
  440.           case 'W':                     /* this too shall write a note */
  441.           case 'w':                     /* write a note */
  442. !         if ( ! (io -> descr.d_stat & MODERATED ) )
  443. !             return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT);
  444. !         if (askyn ("Moderated; send mail to moderator? ") == 'y')
  445. !             mailit(io, (struct daddr_f *)0, (struct auth_f *)0,
  446. !             (struct when_f *)0, (char *)0, MODERATED, 0);
  447. !         return (-1);
  448.   
  449.           case 'B':                     /* bitch, bitch, bitch */
  450.           if (init (&io2, GRIPES) < 0)        /* no gripe file */
  451.           {
  452. ***************
  453. *** 167,175 ****
  454.           else
  455.           {
  456.               at (0, PROMPTMSGX);
  457. !             printf (" Anonymous: %s   Networked: %s",
  458. !                 (io -> descr.d_stat & ANONOK) ? "YES" : "NO",
  459. !                 (io -> descr.d_stat & NETWRKD) ? "YES" : "NO");
  460.               continue;
  461.           }
  462.   
  463. --- 178,190 ----
  464.           else
  465.           {
  466.               at (0, PROMPTMSGX);
  467. !             printf (
  468. !          "Anonymous: %s   Networked: %s   Moderated: %s   Local: %s",
  469. !                 YorN (io -> descr.d_stat & ANONOK),
  470. !                 YorN (io -> descr.d_stat & NETWRKD),
  471. !                 YorN (io -> descr.d_stat & MODERATED),
  472. !                 YorN (io -> descr.d_stat & LOCAL));
  473.               continue;
  474.           }
  475.   
  476. *** /tmp/,RCSt1020366    Wed Jul  1 13:38:40 1987
  477. --- mailit.c    Wed Jul  1 12:55:11 1987
  478. ***************
  479. *** 20,25 ****
  480. --- 20,27 ----
  481.    *    modified:    Ray Essick    December 1981.
  482.    *    modified again:    Thanks to Malcolm Slaney of Purdue EE dept.
  483.    *        added the SUPERMAILER processing. May 25, 1982
  484. +  *    added code to handle the MODERATED flag.
  485. +  *        rich $alz, mirror systems, august 19, 1985
  486.    *
  487.    */
  488.   
  489. ***************
  490. *** 38,51 ****
  491.       char    fn[20];                    /* hold scratch file name */
  492.       int     f;
  493.       char   *p;
  494. -     int     i;
  495.       FILE * txtfile;
  496.   #ifdef    SUPERMAILER
  497.       char    subject[TITLEN + 20];            /* mailer subject */
  498.   #endif
  499.   
  500. !     if (toauth)
  501.       {
  502.       if (strcmp (author -> aname, "Anonymous") == 0)
  503.       {
  504.           printf ("Can't send to Anonymous\n");
  505. --- 40,70 ----
  506.       char    fn[20];                    /* hold scratch file name */
  507.       int     f;
  508.       char   *p;
  509.       FILE * txtfile;
  510.   #ifdef    SUPERMAILER
  511.       char    subject[TITLEN + 20];            /* mailer subject */
  512.   #endif
  513.   
  514. !     if (toauth == MODERATED)
  515.       {
  516. +     f = 1;
  517. +     toauth = 0;
  518. +     }
  519. +     else
  520. +     f = 0;
  521. +     if (f && io -> descr.d_stat & MODERATED)
  522. +     {
  523. +     if (modaddress (io -> nf, whoto) == 1)
  524. +     {
  525. +         at (0, 1);
  526. +         printf ("\nComplain to a guru; can't find moderator!\007\n");
  527. +         fflush (stdout);
  528. +         sleep (1);
  529. +         return (-1);                /* no letter sent */
  530. +     }
  531. +     }
  532. +     else if (toauth)
  533. +     {
  534.       if (strcmp (author -> aname, "Anonymous") == 0)
  535.       {
  536.           printf ("Can't send to Anonymous\n");
  537. ***************
  538. *** 53,62 ****
  539.           sleep (2);
  540.           return (-1);
  541.       }
  542. -     }
  543. -     if (toauth)
  544. -     {
  545.       if (strcmp (System, author -> asystem) != 0)
  546.       {
  547.   #ifdef    USERHOST
  548. --- 72,77 ----
  549. ***************
  550. *** 189,192 ****
  551. --- 204,246 ----
  552.   #endif    SUPERMAILER
  553.   
  554.       return 0;
  555. + }
  556. + modaddress (notesname, address)
  557. +     char *notesname;
  558. +     char *address;
  559. + {
  560. +     char buff[WDLEN];
  561. +     register FILE *mods;
  562. +     register char *p;
  563. +     sprintf (buff, "%s/%s/moderators", MSTDIR, UTILITY);
  564. +     if ((mods = fopen (buff, "r")) == NULL)
  565. +     {
  566. +     printf ("Can't open moderators file!\n");
  567. +     return 1;
  568. +     }
  569. +     while (fgets ( buff, sizeof buff, mods))
  570. +     {
  571. +     /* read lines of the form <name><whitespace>path; blanks and lines */
  572. +     /* starting with "#" are comments. */
  573. +     if (buff[0] == '\0' || buff[0] == '#'
  574. +      || (((p=index(buff, ' ')) == NULL) && (p=index(buff, '\t')) == NULL))
  575. +         continue;
  576. +     *p++ = '\0';                    /* split into halves */
  577. +     while (*p == ' ' || *p == '\t')
  578. +         p++;                    /* skip whitespace */
  579. +     if (!strcmp (notesname, buff))
  580. +     {
  581. +         strcpy (address, p);
  582. +         address[strlen(address) - 1] = '\0';    /* kill the \n */
  583. +         fclose (mods);
  584. +         return 0;
  585. +     }
  586. +     }
  587. +     fclose (mods);
  588. +     return 1;
  589.   }
  590. *** /tmp/,RCSt1020372    Wed Jul  1 13:38:45 1987
  591. --- main.c    Wed Jul  1 12:55:13 1987
  592. ***************
  593. *** 16,27 ****
  594.    *    Original author: Rob Kolstad    Winter, 1980.
  595.    *    Modifications:    Ray Essick    June, 1981.
  596.    *    Modified more:    Ray Essick    May, 1982.
  597.    *
  598. -  *
  599.    */
  600.   
  601.   
  602.   static int  seqon = NOSEQ;                /* sequencer mode */
  603.   
  604.   main (argc, argv)
  605.   char  **argv;
  606. --- 16,29 ----
  607.    *    Original author: Rob Kolstad    Winter, 1980.
  608.    *    Modifications:    Ray Essick    June, 1981.
  609.    *    Modified more:    Ray Essick    May, 1982.
  610. +  *    modified:    Rich $alz    July, 1985
  611. +  *        To add the hissig (signature file) variable.
  612.    *
  613.    */
  614.   
  615.   
  616.   static int  seqon = NOSEQ;                /* sequencer mode */
  617. + char hissig[WDLEN];                    /* signature file */
  618.   
  619.   main (argc, argv)
  620.   char  **argv;
  621. ***************
  622. *** 60,65 ****
  623. --- 62,69 ----
  624.   /*
  625.    *    grab some variables from the environment
  626.    */
  627. +     if ((p = getenv ("NFSIG")) != 0 && access (p, 04) >= 0)
  628. +     strcpy(hissig, p);                /* his signature file */
  629.       if ((p = getenv ("SHELL")) != 0)
  630.       hisshell = p;                    /* his shell */
  631.       if ((p = getenv ("NFED")) != 0)
  632. *** /tmp/,RCSt1020383    Wed Jul  1 13:38:49 1987
  633. --- nfadmin.c    Wed Jul  1 12:58:15 1987
  634. ***************
  635. *** 21,33 ****
  636.       int     argn;
  637.       struct nflist_f *nfptr;
  638.       int        change, newexp;
  639. !     int        newanon, newopen, newnet, newarch;
  640.       int        newwset, newdir, newact, newlen;
  641.   
  642.       startup (argc, argv);                /* common init code */
  643.   
  644.       newdir = newact = newwset = newlen = newexp = -2;
  645. !     newanon = newopen = newnet = newarch = change = 0;
  646.       for ( argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++)
  647.       {
  648.       switch(argv[0][1])
  649. --- 21,33 ----
  650.       int     argn;
  651.       struct nflist_f *nfptr;
  652.       int        change, newexp;
  653. !     int        newanon, newopen, newnet, newarch, newlocal, newmod;
  654.       int        newwset, newdir, newact, newlen;
  655.   
  656.       startup (argc, argv);                /* common init code */
  657.   
  658.       newdir = newact = newwset = newlen = newexp = -2;
  659. !     newanon = newopen = newnet = newarch = newlocal = newmod = change = 0;
  660.       for ( argc--, argv++; argc > 0 && argv[0][0] == '-'; argc--, argv++)
  661.       {
  662.       switch(argv[0][1])
  663. ***************
  664. *** 48,53 ****
  665. --- 48,61 ----
  666.           change = 1;
  667.           newopen = newval(argv[0][2]);
  668.           break;
  669. +     case 'L':
  670. +         change = 1;
  671. +         newlocal = newval(argv[0][2]);
  672. +         break;
  673. +     case 'M':
  674. +         change = 1;
  675. +         newmod = newval(argv[0][2]);
  676. +         break;
  677.       case 'A':
  678.           change = 1;
  679.           newarch = newval(argv[0][2]);
  680. ***************
  681. *** 151,156 ****
  682. --- 159,174 ----
  683.               io.descr.d_stat |= OPEN;
  684.           else
  685.               io.descr.d_stat &= ~OPEN;
  686. +         if (newlocal)
  687. +         if (newlocal > 0)
  688. +             io.descr.d_stat |= LOCAL;
  689. +         else
  690. +             io.descr.d_stat &= ~LOCAL;
  691. +         if (newmod)
  692. +         if (newmod > 0)
  693. +             io.descr.d_stat |= MODERATED;
  694. +         else
  695. +             io.descr.d_stat &= ~MODERATED;
  696.           if (newarch)
  697.           if (newarch > 0)
  698.               io.descr.d_stat |= ISARCH;
  699. ***************
  700. *** 210,217 ****
  701.   
  702.       if (!flag)
  703.       {
  704. !         printf("notesfile title NetW Open Anon Arch   WSet Arch. Keep DirM     #         Max\n");
  705. !         printf("                -------status------   Size Time  Actn Stat   Notes       Size\n");
  706.       }
  707.       flag = 1;
  708.       switch(d->d_dmesgstat)
  709. --- 228,235 ----
  710.   
  711.       if (!flag)
  712.       {
  713. !         printf("    notesfile title     NetW Open Anon Arch Locl Mod    WSet Arch. Keep DirM     #         Max\n");
  714. !         printf("                        ------------status-----------   Size Time  Actn Stat   Notes       Size\n");
  715.       }
  716.       flag = 1;
  717.       switch(d->d_dmesgstat)
  718. ***************
  719. *** 247,255 ****
  720.       else    sprintf(archtime, "%4d ", d->d_archtime);
  721.   
  722.   
  723. !     printf("%14.14s: %s %s %s %s  %5d %s %s %s   %5d%12d\n",
  724.           d->d_title, yes(d->d_stat & NETWRKD), yes(d->d_stat & OPEN),
  725.           yes(d->d_stat & ANONOK), yes(d->d_stat & ISARCH), 
  726.           d->d_workset, archtime, archkeep, msgstat, d->d_nnote, 
  727.           d->d_longnote);
  728.   
  729. --- 265,274 ----
  730.       else    sprintf(archtime, "%4d ", d->d_archtime);
  731.   
  732.   
  733. !     printf("%22.22s: %s %s %s %s %s %s  %5d %s %s %s   %5d%12d\n",
  734.           d->d_title, yes(d->d_stat & NETWRKD), yes(d->d_stat & OPEN),
  735.           yes(d->d_stat & ANONOK), yes(d->d_stat & ISARCH), 
  736. +         yes(d->d_stat & LOCAL), yes(d->d_stat & MODERATED), 
  737.           d->d_workset, archtime, archkeep, msgstat, d->d_nnote, 
  738.           d->d_longnote);
  739.   
  740. *** /tmp/,RCSt1020391    Wed Jul  1 13:38:57 1987
  741. --- readem.c    Wed Jul  1 12:55:20 1987
  742. ***************
  743. *** 19,26 ****
  744. --- 19,32 ----
  745.   *    modified    : ray essick may 22, 1981
  746.   *    modified (again): Ray Essick December 1981
  747.   *    modified (more):  Ray Essick, February 1982
  748. + *    added MODERATED:  Rich $alz, August 1985
  749. + *    added LOCAL and YorN: Rich $alz, August 1985
  750.   *
  751.   */
  752. + static char YES[] = "YES";
  753. + static char NO[] = "NO ";
  754. + #define YorN(c)        ((c) != 0 ? YES : NO)
  755.   readem (io, readnum, firstdis, resp)
  756.   struct io_f *io;
  757.   int    *firstdis;
  758. ***************
  759. *** 333,347 ****
  760.           toauth = 0;
  761.           wtext = 1;                /* to others with text */
  762.           goto sendmail;
  763.           case 'P': 
  764. -         toauth = 1;
  765. -         wtext = 1;                /* to author with text */
  766. -         goto sendmail;
  767.           case 'p': 
  768.           toauth = 1;
  769. !         wtext = 0;                /* to author, no text */
  770. !         goto sendmail;
  771.       sendmail:                     /* jump to here once set mail parms */
  772.           if (resp)
  773.           {
  774. --- 339,358 ----
  775.           toauth = 0;
  776.           wtext = 1;                /* to others with text */
  777.           goto sendmail;
  778. +         /* mail to author, possibly with text. */
  779.           case 'P': 
  780.           case 'p': 
  781. + #ifdef NO_Pp_FOR_MODERATED
  782. +         /* some people may want this */
  783. +         if (io -> d_descr.d_stat & MODERATED)
  784. +         {
  785. +             at (0, 10);
  786. +             printf ("Moderated; use 'm' or 'M' command\n");
  787. +             continue;
  788. +         }
  789. + #endif NO_Pp_FOR_MODERATED
  790.           toauth = 1;
  791. !         wtext = c == 'P';            /* to author with text */
  792.       sendmail:                     /* jump to here once set mail parms */
  793.           if (resp)
  794.           {
  795. ***************
  796. *** 454,462 ****
  797.           if (allow (io, DRCTOK) == 0)
  798.           {                    /* tell him what's up */
  799.               at (0, PROMPTMSGX);
  800. !             printf (" Anonymous: %s   Networked: %s",
  801. !                 (io -> descr.d_stat & ANONOK) ? "YES" : "NO",
  802. !                 (io -> descr.d_stat & NETWRKD) ? "YES" : "NO");
  803.               replot = 0;                /* leave on screen */
  804.               goto showit;
  805.           }
  806. --- 465,476 ----
  807.           if (allow (io, DRCTOK) == 0)
  808.           {                    /* tell him what's up */
  809.               at (0, PROMPTMSGX);
  810. !             printf (
  811. !          "Anonymous: %s   Networked: %s   Moderated: %s   Local: %s",
  812. !                 YorN (io -> descr.d_stat & ANONOK),
  813. !                 YorN (io -> descr.d_stat & NETWRKD),
  814. !                 YorN (io -> descr.d_stat & MODERATED),
  815. !                 YorN (io -> descr.d_stat & LOCAL));
  816.               replot = 0;                /* leave on screen */
  817.               goto showit;
  818.           }
  819. ***************
  820. *** 528,533 ****
  821. --- 542,555 ----
  822.           case 'W':                     /* write a response with the text */
  823.           case 'w':                     /* let him write a response */
  824.           getdscr (io, &io -> descr);        /* get up to date */
  825. +         if (io -> descr.d_stat & MODERATED)
  826. +         {
  827. +             wtext = c == 'W';
  828. +             toauth = MODERATED;        /* toauth distinguishes m/w */
  829. +             goto sendmail;
  830. +         }
  831.           if (allow (io, RESPOK) == 0)
  832.           {
  833.               at (0, PROMPTMSGX);
  834. *** /tmp/,RCSt1020405    Wed Jul  1 13:39:16 1987
  835. --- structs.h    Wed Jul  1 12:55:22 1987
  836. ***************
  837. *** 105,110 ****
  838. --- 105,112 ----
  839.   #define        WRITONLY   0100                /* writeonly access when written */
  840.   #define        ORPHND       0200                /* foster parent */
  841.   #define        ISARCH       0400                /* is an archive */
  842. + #define        MODERATED 01000                /* mail to moderator */
  843. + #define        LOCAL     02000                /* no signature */
  844.   
  845.   /*    change these only after modifying the table in access.c        */
  846.   #define        READOK    01                /* allow user to read */
  847.