[mod.sources] changes to notes

sources-request@panda.UUCP (08/22/85)

Mod.sources:  Volume 2, Issue 36
Submitted by: genrad!mit-eddie!mirror!rs (Rich Salz)


This note contains modifications to the latest version of notes, 1.7.

The diffs listed below will modify notes (version 1.7, at least) to
understand moderated newsgroups, as well as "local" notesfiles.

In a MODERATED notesfile, any attempt to write a note or send mail
is turned into a call that sends mail to the moderator.  For example,
is the MODERATED flag is on for net.announce, any attempt to post
their will instead be sent as mail to mark@cbosgd.att (or whatever).
Note that it is still possible to "Copy" a note into a MODERATED
notesfile.  This can be prohibited by (a) turning off write permission
on the all MODERATED notesfiles, or (b) added some trivial code to
adnote.c.  I did (a); if anyone wants the code for (b), let me know.

The mapping of notesfile names to moderators is done in a file
named "moderators" in the notesfile utility directory (default is
/usr/spool/notes/.utilities).  This file contains lines like:
    notesfile_name <spaces_or_tabs> mail_address
Blank lines, or lines starting with '#', are ignored.  Here are
a couple of lines from my "moderators" file:

Here are a couple of lines from my .utilties/moderator file:
# This comes from the posting by Gene Spafford
# Correct addresses for mirror systems by R$, 19aug85.
mod.map		wjh12!ihnp4!cbosgd!mark
mod.map.uucp	wjh12!ihnp4!cbosgd!uucpmap
# Here's handling an ARPA gateway'd list
fa.laser-lover		furuta%washington@cca

# Here's one that we gateway ourselves
ms.loops		loops-users%berkeley@cca
# Any valid address is ok
ms.prisoner		inmet!masscomp!allegra!sjuvax!ianucci

Enough talk, here are the diffs.
NOTE:  THE RCS REVISIONS SHOW ARE WRONG.  I BLEW IT!

===============================CUT HERE===============================

# This is a shell archive.  Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by mirror!rs on Tue Aug 20 12:22:27 EDT 1985
# Contents:  DIFFS
 
echo x - DIFFS
sed 's/^XX//' > "DIFFS" <<'@//E*O*F DIFFS//'
XXRCS file: RCS/dropt.c,v
XXretrieving revision 1.1
XXdiff -c -r1.1 dropt.c
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:16:53 1985
XX--- dropt.c	Tue Aug 20 11:53:19 1985
XX***************
XX*** 2,8
XX  #include "structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: dropt.c,v 1.1 85/08/19 15:50:25 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  #define BUFSZ	128

XX--- 2,8 -----
XX  #include "structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: dropt.c,v 1.6 85/08/20 11:52:58 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  #define BUFSZ	128
XX***************
XX*** 24,29
XX   *		 -4 if the user hit cntrl d ( to total exit)
XX   *
XX   *	original author/outliner : Ray Essick may 29, 1981
XX   *
XX   */
XX  

XX--- 24,31 -----
XX   *		 -4 if the user hit cntrl d ( to total exit)
XX   *
XX   *	original author/outliner : Ray Essick may 29, 1981
XX+  *      added the "moderated" flag:Rich $alz  aug 19, 1985
XX+  *      added "local" flag, toggle, YorN:    Rich $alz  aug 19, 1985
XX   *
XX   */
XX  
XX***************
XX*** 35,41
XX              netrow,					/* networked */
XX              expirerow,					/* expire age */
XX              longrow,					/* longest ok text */
XX!             worksetrow;					/* working set */
XX  static int  lastrow;
XX  
XX  direct (io) struct io_f *io;

XX--- 37,45 -----
XX              netrow,					/* networked */
XX              expirerow,					/* expire age */
XX              longrow,					/* longest ok text */
XX!             worksetrow,					/* working set */
XX! 	    modrow,					/* moderated flag */
XX! 	    localrow;					/* local flag */
XX  static int  lastrow;
XX  
XX  #define YorN(c)		((c) != 0 ? YES : NO)
XX***************
XX*** 38,43
XX              worksetrow;					/* working set */
XX  static int  lastrow;
XX  
XX  direct (io) struct io_f *io;
XX  {
XX      int     i;						/* scratch */

XX--- 42,51 -----
XX  	    localrow;					/* local flag */
XX  static int  lastrow;
XX  
XX+ #define YorN(c)		((c) != 0 ? YES : NO)
XX+ static char YES[] = "YES";
XX+ static char NO[] = "NO ";
XX+ 
XX  direct (io) struct io_f *io;
XX  {
XX      int     i;						/* scratch */
XX***************
XX*** 113,129
XX  		break;					/* skipt out of the loop */
XX  
XX  	    case 'a': 					/* toggle anonymous option */
XX! 		locknf (io, DSCRLOCK);			/* lock the thing for a minute */
XX! 		getdscr (io, &io -> descr);		/* get up to date descriptor */
XX! 		if (io -> descr.d_stat & ANONOK)
XX! 		    io -> descr.d_stat &= NOT ANONOK;
XX! 		else
XX! 		    io -> descr.d_stat |= ANONOK;
XX! 		putdscr (io, &io -> descr);
XX! 		unlocknf (io, DSCRLOCK);
XX! 		at (anonrow, 18);
XX! 		printf (io -> descr.d_stat & ANONOK ? "ON " : "OFF");
XX! 		redraw = 0;
XX  		break;
XX  
XX  	    case 'A': 					/* Archive option */

XX--- 121,127 -----
XX  		break;					/* skipt out of the loop */
XX  
XX  	    case 'a': 					/* toggle anonymous option */
XX! 		toggle(io, ANONOK, anonrow);
XX  		break;
XX  
XX  	    case 'A': 					/* Archive option */
XX***************
XX*** 127,143
XX  		break;
XX  
XX  	    case 'A': 					/* Archive option */
XX! 		locknf (io, DSCRLOCK);			/* lock the thing for a minute */
XX! 		getdscr (io, &io -> descr);		/* get up to date descriptor */
XX! 		if (io -> descr.d_stat & ISARCH)
XX! 		    io -> descr.d_stat &= NOT ISARCH;
XX! 		else
XX! 		    io -> descr.d_stat |= ISARCH;
XX! 		putdscr (io, &io -> descr);
XX! 		unlocknf (io, DSCRLOCK);
XX! 		at (archrow, 18);
XX! 		printf (io -> descr.d_stat & ISARCH ? "YES" : "NO ");
XX! 		redraw = 0;
XX  		break;
XX  
XX  	    case 'l': 					/* message length */

XX--- 125,131 -----
XX  		break;
XX  
XX  	    case 'A': 					/* Archive option */
XX! 		toggle(io, ISARCH, archrow);
XX  		break;
XX  
XX  	    case 'l': 					/* message length */
XX***************
XX*** 173,179
XX  		unlocknf (io, DSCRLOCK);		/* all done ... */
XX  		at (longrow, 27);
XX  		printf ("%ld bytes   ", io -> descr.d_longnote);
XX- 		redraw = 0;
XX  		break;
XX  
XX  	    case 'c': 					/* compress the notefile */

XX--- 161,166 -----
XX  		unlocknf (io, DSCRLOCK);		/* all done ... */
XX  		at (longrow, 27);
XX  		printf ("%ld bytes   ", io -> descr.d_longnote);
XX  		break;
XX  
XX  	    case 'c': 					/* compress the notefile */
XX***************
XX*** 177,183
XX  		break;
XX  
XX  	    case 'c': 					/* compress the notefile */
XX- 		redraw = 0;
XX  		if (io -> descr.d_stat & OPEN)
XX  		{
XX  		    at (lastrow, 10);

XX--- 164,169 -----
XX  		break;
XX  
XX  	    case 'c': 					/* compress the notefile */
XX  		if (io -> descr.d_stat & OPEN)
XX  		{
XX  		    at (lastrow, 10);
XX***************
XX*** 265,271
XX  			printf ("%ld days     ", io -> descr.d_archtime);
XX  			break;
XX  		}
XX- 		redraw = 0;
XX  		break;
XX  
XX  	    case 'W': 					/* working Set size */

XX--- 251,256 -----
XX  			printf ("%ld days     ", io -> descr.d_archtime);
XX  			break;
XX  		}
XX  		break;
XX  
XX  	    case 'W': 					/* working Set size */
XX***************
XX*** 311,317
XX  		    default: 
XX  			printf ("%ld Notes    ", io -> descr.d_workset);
XX  		}
XX- 		redraw = 0;
XX  		break;
XX  
XX  	    case 'E': 					/* keep/delete/default */

XX--- 296,301 -----
XX  		    default: 
XX  			printf ("%ld Notes    ", io -> descr.d_workset);
XX  		}
XX  		break;
XX  
XX  	    case 'E': 					/* keep/delete/default */
XX***************
XX*** 348,354
XX  			printf ("UNKNOWN");
XX  			break;
XX  		}
XX- 		redraw = 0;
XX  		break;
XX  
XX  	    case 'D': 					/* Archive dirmsg */

XX--- 332,337 -----
XX  			printf ("UNKNOWN");
XX  			break;
XX  		}
XX  		break;
XX  
XX  	    case 'D': 					/* Archive dirmsg */
XX***************
XX*** 391,397
XX  			printf ("UNKNOWN  ");
XX  			break;
XX  		}
XX- 		redraw = 0;
XX  		break;
XX  
XX  	    case 'o': 					/* toggle open status */

XX--- 374,379 -----
XX  			printf ("UNKNOWN  ");
XX  			break;
XX  		}
XX  		break;
XX  
XX  	    case 'o': 					/* toggle open status */
XX***************
XX*** 395,411
XX  		break;
XX  
XX  	    case 'o': 					/* toggle open status */
XX! 		locknf (io, DSCRLOCK);
XX! 		getdscr (io, &io -> descr);
XX! 		if (io -> descr.d_stat & OPEN)
XX! 		    io -> descr.d_stat &= NOT OPEN;
XX! 		else
XX! 		    io -> descr.d_stat |= OPEN;
XX! 		putdscr (io, &io -> descr);
XX! 		unlocknf (io, DSCRLOCK);
XX! 		at (openrow, 18);
XX! 		printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
XX! 		redraw = 0;
XX  		break;
XX  
XX  	    case 'n': 					/* toggle network status */

XX--- 377,383 -----
XX  		break;
XX  
XX  	    case 'o': 					/* toggle open status */
XX! 		toggle (io, OPEN, openrow);
XX  		break;
XX  
XX  	    case 'M': 					/* toggle moderated status */
XX***************
XX*** 408,413
XX  		redraw = 0;
XX  		break;
XX  
XX  	    case 'n': 					/* toggle network status */
XX  		locknf (io, DSCRLOCK);
XX  		getdscr (io, &io -> descr);

XX--- 380,393 -----
XX  		toggle (io, OPEN, openrow);
XX  		break;
XX  
XX+ 	    case 'M': 					/* toggle moderated status */
XX+ 		toggle (io, MODERATED, modrow);
XX+ 		break;
XX+ 
XX+ 	    case 'L': 					/* toggle local status */
XX+ 		toggle(io, LOCAL, localrow);
XX+ 		break;
XX+ 
XX  	    case 'n': 					/* toggle network status */
XX  		toggle(io, NETWRKD, netrow);
XX  		break;
XX***************
XX*** 409,429
XX  		break;
XX  
XX  	    case 'n': 					/* toggle network status */
XX! 		locknf (io, DSCRLOCK);
XX! 		getdscr (io, &io -> descr);
XX! 		if (io -> descr.d_stat & NETWRKD)
XX! 		{
XX! 		    io -> descr.d_stat &= NOT NETWRKD;
XX! 		}
XX! 		else
XX! 		{
XX! 		    io -> descr.d_stat |= NETWRKD;
XX! 		}
XX! 		putdscr (io, &io -> descr);
XX! 		unlocknf (io, DSCRLOCK);
XX! 		at (netrow, 18);
XX! 		printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
XX! 		redraw = 0;
XX  		break;
XX  
XX  

XX--- 389,395 -----
XX  		break;
XX  
XX  	    case 'n': 					/* toggle network status */
XX! 		toggle(io, NETWRKD, netrow);
XX  		break;
XX  
XX  
XX***************
XX*** 524,530
XX  
XX  	    default: 
XX  		printf ("\07");
XX- 		redraw = 0;
XX  		goto getkey;				/* hit a bad key */
XX  
XX  	}

XX--- 490,495 -----
XX  
XX  	    default: 
XX  		printf ("\07");
XX  		goto getkey;				/* hit a bad key */
XX  
XX  	}
XX***************
XX*** 553,559
XX      printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
XX      at (netrow = atrow++, atcol);
XX      printf ("(n) Networked:   ");			/* at(5,18); */
XX!     printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
XX      at (archrow = atrow++, atcol);
XX      printf ("(A) Is Archive:  ");			/* at(6,18); */
XX      printf (io -> descr.d_stat & ISARCH ? "YES" : "NO");

XX--- 518,524 -----
XX      printf (io -> descr.d_stat & OPEN ? "OPEN  " : "CLOSED");
XX      at (netrow = atrow++, atcol);
XX      printf ("(n) Networked:   ");			/* at(5,18); */
XX!     printf (YorN(io -> descr.d_stat & NETWRKD));
XX      at (archrow = atrow++, atcol);
XX      printf ("(A) Is Archive:  ");			/* at(6,18); */
XX      printf (YorN(io -> descr.d_stat & ISARCH));
XX***************
XX*** 556,562
XX      printf (io -> descr.d_stat & NETWRKD ? "YES" : "NO ");
XX      at (archrow = atrow++, atcol);
XX      printf ("(A) Is Archive:  ");			/* at(6,18); */
XX!     printf (io -> descr.d_stat & ISARCH ? "YES" : "NO");
XX      at (expirerow = atrow++, atcol);
XX      printf ("(e) Expiration Threshold: ");		/* at (6,27); */
XX      switch ((int) (io -> descr.d_archtime))

XX--- 521,533 -----
XX      printf (YorN(io -> descr.d_stat & NETWRKD));
XX      at (archrow = atrow++, atcol);
XX      printf ("(A) Is Archive:  ");			/* at(6,18); */
XX!     printf (YorN(io -> descr.d_stat & ISARCH));
XX!     at (modrow = atrow++, atcol);
XX!     printf ("(M) Moderated:   ");
XX!     printf (YorN(io -> descr.d_stat & MODERATED));
XX!     at (localrow = atrow++, atcol);
XX!     printf ("(L) Local:       ");
XX!     printf (YorN(io -> descr.d_stat & LOCAL));
XX      at (expirerow = atrow++, atcol);
XX      printf ("(e) Expiration Threshold: ");		/* at (6,27); */
XX      switch ((int) (io -> descr.d_archtime))
XX***************
XX*** 631,637
XX      atrow = 4;
XX      atcol = 40;
XX      at (atrow++, atcol);
XX!     printf ("Policy Note Exists: %s", io -> descr.d_plcy ? "YES" : "NO");
XX      at (atrow++, atcol);
XX      printf ("Next note in slot: %d", io -> descr.d_nnote + 1);
XX      at (atrow++, atcol);

XX--- 602,608 -----
XX      atrow = 4;
XX      atcol = 40;
XX      at (atrow++, atcol);
XX!     printf ("Policy Note Exists: %s", YorN(io -> descr.d_plcy));
XX      at (atrow++, atcol);
XX      printf ("Next note in slot: %d", io -> descr.d_nnote + 1);
XX      at (atrow++, atcol);
XX***************
XX*** 646,649
XX      if (atrow > lastrow)
XX  	lastrow = atrow;
XX      lastrow++;
XX  }

XX--- 617,637 -----
XX      if (atrow > lastrow)
XX  	lastrow = atrow;
XX      lastrow++;
XX+ }
XX+ 
XX+ toggle(io, flag, row)
XX+     struct io_f *io;
XX+     int flag;
XX+     int row;
XX+ {
XX+     locknf (io, DSCRLOCK);
XX+     getdscr (io, &io -> descr);
XX+     if (io -> descr.d_stat & flag)
XX+ 	io -> descr.d_stat &= NOT flag;
XX+     else
XX+ 	io -> descr.d_stat |= flag;
XX+     putdscr (io, &io -> descr);
XX+     unlocknf (io, DSCRLOCK);
XX+     at (row, 18);
XX+     printf (YorN(io -> descr.d_stat & flag));
XX  }
XX===================================================================
XXRCS file: RCS/gtext.c,v
XXretrieving revision 1.1
XXdiff -c -r1.1 gtext.c
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:17:05 1985
XX--- gtext.c	Tue Aug 20 12:10:09 1985
XX***************
XX*** 2,8
XX  #include "structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: gtext.c,v 1.1 85/08/19 19:50:41 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*

XX--- 2,8 -----
XX  #include "structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: gtext.c,v 1.4 85/08/20 12:09:38 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*
XX***************
XX*** 17,22
XX   *	modified again:	rbe 12 nov 81	fix to version 7 and general shtuff
XX   *	modified a third time to add insert-text for user
XX   *		Ray Essick	December 1981
XX   */
XX  
XX  long    gettext (io, where, preface, editflag)

XX--- 17,26 -----
XX   *	modified again:	rbe 12 nov 81	fix to version 7 and general shtuff
XX   *	modified a third time to add insert-text for user
XX   *		Ray Essick	December 1981
XX+  *	modified to add non-portable way of appending a signature file.
XX+  *		Rich $alz	July, 1985
XX+  *	did signatures the "right" way (better, at least) - LOCAL flag
XX+  *		Rich $alz	August, 1985
XX   */
XX  
XX  extern char hissig[];
XX***************
XX*** 19,24
XX   *		Ray Essick	December 1981
XX   */
XX  
XX  long    gettext (io, where, preface, editflag)
XX  struct io_f *io;
XX  struct daddr_f *where;					/* where we left it */

XX--- 23,29 -----
XX   *		Rich $alz	August, 1985
XX   */
XX  
XX+ extern char hissig[];
XX  long    gettext (io, where, preface, editflag)
XX  struct io_f *io;
XX  struct daddr_f *where;					/* where we left it */
XX***************
XX*** 58,63
XX      {
XX  	unlink (fn);					/* might just be protections */
XX  	return ((long) 0);
XX      }
XX  
XX      count = pagein (io, scr, where);			/* move text in */

XX--- 63,91 -----
XX      {
XX  	unlink (fn);					/* might just be protections */
XX  	return ((long) 0);
XX+     }
XX+ 
XX+     if (hissig[0] && io -> descr.d_stat & NETWRKD
XX+      && !(io -> descr.d_stat & LOCAL))
XX+     {
XX+ 	c = askyn ("Add signature (y/n): ");
XX+ 	printf ("\r                      \r");
XX+ 	if (c == 'y')
XX+ 	{
XX+ 	    FILE * siggy;
XX+ 
XX+ 	    if ((siggy = fopen (hissig, "r")) == NULL)
XX+ 		printf ("Can't find %s", hissig);
XX+ 	    else
XX+ 	    {
XX+ 		/* Flop to append mode, append, flip back to read */
XX+ 		freopen (fn, "a", scr);
XX+ 		while ((c = getc (siggy)) != EOF)
XX+ 		    putc (c, scr);
XX+ 		fclose (siggy);
XX+ 		freopen (fn, "r", scr);
XX+ 	    }
XX+ 	}
XX      }
XX  
XX      count = pagein (io, scr, where);			/* move text in */
XX===================================================================
XXRCS file: RCS/index.c,v
XXretrieving revision 1.1
XXdiff -c -r1.1 index.c
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:17:12 1985
XX--- index.c	Tue Aug 20 10:12:39 1985
XX***************
XX*** 2,8
XX  #include	"structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: index.c,v 1.1 85/08/19 17:42:07 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*

XX--- 2,8 -----
XX  #include	"structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: index.c,v 1.3 85/08/20 10:10:23 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*
XX***************
XX*** 20,25
XX   *
XX   *	Original Coding:	Rob Kolstad	Winter 1980
XX   *	modifications:		Ray Essick	December 1981
XX   */
XX  
XX  indx (io, firstdis, lastdis, respnum)

XX--- 20,27 -----
XX   *
XX   *	Original Coding:	Rob Kolstad	Winter 1980
XX   *	modifications:		Ray Essick	December 1981
XX+  *	added MODERATED code:	Rich $alz	August 1985
XX+  *	added LOCAL flag:	Rich $alz	August 1985
XX   */
XX  
XX  static char YES[] = "YES";
XX***************
XX*** 22,27
XX   *	modifications:		Ray Essick	December 1981
XX   */
XX  
XX  indx (io, firstdis, lastdis, respnum)
XX  struct io_f *io;
XX  int    *firstdis,

XX--- 24,33 -----
XX   *	added LOCAL flag:	Rich $alz	August 1985
XX   */
XX  
XX+ static char YES[] = "YES";
XX+ static char NO[] = "NO ";
XX+ #define YorN(c)		((c) != 0 ? YES : NO)
XX+ 
XX  indx (io, firstdis, lastdis, respnum)
XX  struct io_f *io;
XX  int    *firstdis,
XX***************
XX*** 58,65
XX  
XX  	    case 'W': 					/* this too shall write a note */
XX  	    case 'w': 					/* write a note */
XX! 		return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT);
XX! 							/* do it */
XX  
XX  	    case 'B': 					/* bitch, bitch, bitch */
XX  		if (init (&io2, GRIPES) < 0)		/* no gripe file */

XX--- 64,80 -----
XX  
XX  	    case 'W': 					/* this too shall write a note */
XX  	    case 'w': 					/* write a note */
XX! 		if ( ! (io -> descr.d_stat & MODERATED ) )
XX! 		    return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT);
XX! 		if (askyn ("Moderated; send mail to moderator? ") == 'y')
XX! 		{
XX! 		    at (0, 1);
XX! 		    printf ("Subject: ");
XX! 		    if (gline (nfname, WDLEN) > 1)
XX! 			mailit(io, (struct daddr_f *)0, (struct auth_f *)0,
XX! 				(struct when_f *)0, nfname, 0, 0);
XX! 		}
XX! 		return (-1);
XX  
XX  
XX  	    case 'B': 					/* bitch, bitch, bitch */
XX***************
XX*** 61,66
XX  		return addnote (io, NULL, "Edit Note text:", "Note Title: ", NULL, EDIT);
XX  							/* do it */
XX  
XX  	    case 'B': 					/* bitch, bitch, bitch */
XX  		if (init (&io2, GRIPES) < 0)		/* no gripe file */
XX  		{

XX--- 76,82 -----
XX  		}
XX  		return (-1);
XX  
XX+ 
XX  	    case 'B': 					/* bitch, bitch, bitch */
XX  		if (init (&io2, GRIPES) < 0)		/* no gripe file */
XX  		{
XX***************
XX*** 168,176
XX  		else
XX  		{
XX  		    at (0, 10);
XX! 		    printf (" Anonymous: %s   Networked: %s",
XX! 			    (io -> descr.d_stat & ANONOK) ? "YES" : "NO",
XX! 			    (io -> descr.d_stat & NETWRKD) ? "YES" : "NO");
XX  		    continue;
XX  		}
XX  

XX--- 184,196 -----
XX  		else
XX  		{
XX  		    at (0, 10);
XX! 		    printf (
XX!          "Anonymous: %s   Networked: %s   Moderated: %s   Local: %s",
XX! 			    YorN (io -> descr.d_stat & ANONOK),
XX! 			    YorN (io -> descr.d_stat & NETWRKD),
XX! 			    YorN (io -> descr.d_stat & MODERATED),
XX! 			    YorN (io -> descr.d_stat & LOCAL));
XX! 
XX  		    continue;
XX  		}
XX  
XX===================================================================
XXRCS file: RCS/mailit.c,v
XXretrieving revision 1.1
XXdiff -c -r1.1 mailit.c
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:17:19 1985
XX--- mailit.c	Mon Aug 19 19:32:00 1985
XX***************
XX*** 2,8
XX  #include "structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: mailit.c,v 1.1 85/08/19 16:34:03 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*

XX--- 2,8 -----
XX  #include "structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: mailit.c,v 1.2 85/08/19 19:31:29 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*
XX***************
XX*** 20,25
XX   *	modified:	Ray Essick	December 1981.
XX   *	modified again:	Thanks to Malcolm Slaney of Purdue EE dept.
XX   *		added the SUPERMAILER processing. May 25, 1982
XX   *
XX   */
XX  

XX--- 20,27 -----
XX   *	modified:	Ray Essick	December 1981.
XX   *	modified again:	Thanks to Malcolm Slaney of Purdue EE dept.
XX   *		added the SUPERMAILER processing. May 25, 1982
XX+  *	added code to handle the MODERATED flag.
XX+  *		rich $alz, mirror systems, august 19, 1985
XX   *
XX   */
XX  
XX***************
XX*** 41,47
XX  #ifdef	SUPERMAILER
XX      char    subject[TITLEN + 20];			/* subject line for super mailer */
XX  #endif
XX-     int     i;
XX      FILE * txtfile;
XX  
XX      if (toauth)

XX--- 43,48 -----
XX  #ifdef	SUPERMAILER
XX      char    subject[TITLEN + 20];			/* subject line for super mailer */
XX  #endif
XX      FILE * txtfile;
XX  
XX      if (io -> descr.d_stat & MODERATED)
XX***************
XX*** 44,50
XX      int     i;
XX      FILE * txtfile;
XX  
XX!     if (toauth)
XX      {
XX  	if (strcmp (author -> aname, "Anonymous") == 0)
XX  	{

XX--- 45,51 -----
XX  #endif
XX      FILE * txtfile;
XX  
XX!     if (io -> descr.d_stat & MODERATED)
XX      {
XX  	if (modaddress (io -> nf, whoto) == 1)
XX  	{
XX***************
XX*** 46,51
XX  
XX      if (toauth)
XX      {
XX  	if (strcmp (author -> aname, "Anonymous") == 0)
XX  	{
XX  	    printf ("Can't send to Anonymous\n");

XX--- 47,63 -----
XX  
XX      if (io -> descr.d_stat & MODERATED)
XX      {
XX+ 	if (modaddress (io -> nf, whoto) == 1)
XX+ 	{
XX+ 	    at (0, 1);
XX+ 	    printf ("\nComplain to a guru; can't find moderator!\007\n");
XX+ 	    fflush (stdout);
XX+ 	    sleep (1);
XX+ 	    return (-1);				/* no letter sent */
XX+ 	}
XX+     }
XX+     else if (toauth)
XX+     {
XX  	if (strcmp (author -> aname, "Anonymous") == 0)
XX  	{
XX  	    printf ("Can't send to Anonymous\n");
XX***************
XX*** 53,62
XX  	    sleep (1);
XX  	    return (-1);
XX  	}
XX-     }
XX- 
XX-     if (toauth)
XX-     {
XX  	if (strcmp (System, author -> asystem) != 0)
XX  	{
XX  #ifdef	USERHOST

XX--- 65,70 -----
XX  	    sleep (1);
XX  	    return (-1);
XX  	}
XX  	if (strcmp (System, author -> asystem) != 0)
XX  	{
XX  #ifdef	USERHOST
XX***************
XX*** 169,172
XX  #endif	SUPERMAILER
XX  
XX      return 0;
XX  }

XX--- 177,219 -----
XX  #endif	SUPERMAILER
XX  
XX      return 0;
XX+ }
XX+ 
XX+ modaddress (notesname, address)
XX+     char *notesname;
XX+     char *address;
XX+ {
XX+     char buff[WDLEN];
XX+     register FILE *mods;
XX+     register char *p;
XX+ 
XX+     sprintf (buff, "%s/%s/moderators", MSTDIR, UTILITY);
XX+ 
XX+     if ((mods = fopen (buff, "r")) == NULL)
XX+     {
XX+ 	printf ("Can't open moderators file!\n");
XX+ 	return 1;
XX+     }
XX+ 
XX+     while (fgets ( buff, sizeof buff, mods))
XX+     {
XX+ 	/* read lines of the form <name><whitespace>path; blanks and lines */
XX+ 	/* starting with "#" are comments. */
XX+ 	if (buff[0] == '\0' || buff[0] == '#'
XX+ 	 || (((p=index(buff, ' ')) == NULL) && (p=index(buff, '\t')) == NULL))
XX+ 	    continue;
XX+ 	*p++ = '\0';					/* split into halves */
XX+ 	while (*p == ' ' || *p == '\t')
XX+ 	    p++;					/* skip whitespace */
XX+ 	if (!strcmp (notesname, buff))
XX+ 	{
XX+ 	    strcpy (address, p);
XX+ 	    address[strlen(address) - 1] = '\0';	/* kill the \n */
XX+ 	    fclose (mods);
XX+ 	    return 0;
XX+ 	}
XX+     }
XX+ 
XX+     fclose (mods);
XX+     return 1;
XX  }
XX===================================================================
XXRCS file: RCS/main.c,v
XXretrieving revision 1.1
XXdiff -c -r1.1 main.c
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:17:27 1985
XX--- main.c	Mon Aug 19 19:57:27 1985
XX***************
XX*** 3,9
XX  #include	"structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: main.c,v 1.1 85/08/19 19:54:09 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*

XX--- 3,9 -----
XX  #include	"structs.h"
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: main.c,v 1.2 85/08/19 19:57:11 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  /*
XX***************
XX*** 16,21
XX   *	Original author: Rob Kolstad	Winter, 1980.
XX   *	Modifications:	Ray Essick	June, 1981.
XX   *	Modified more:	Ray Essick	May, 1982.
XX   *
XX   *
XX   */

XX--- 16,23 -----
XX   *	Original author: Rob Kolstad	Winter, 1980.
XX   *	Modifications:	Ray Essick	June, 1981.
XX   *	Modified more:	Ray Essick	May, 1982.
XX+  *	modified:	Rich $alz	July, 1985
XX+  *		To add the hissig (signature file) variable.
XX   *
XX   */
XX  
XX***************
XX*** 17,23
XX   *	Modifications:	Ray Essick	June, 1981.
XX   *	Modified more:	Ray Essick	May, 1982.
XX   *
XX-  *
XX   */
XX  
XX  

XX--- 19,24 -----
XX   *	modified:	Rich $alz	July, 1985
XX   *		To add the hissig (signature file) variable.
XX   *
XX   */
XX  
XX  
XX***************
XX*** 22,27
XX  
XX  
XX  static int  seqon = NOSEQ;				/* sequencer mode */
XX  
XX  main (argc, argv)
XX  char  **argv;

XX--- 23,29 -----
XX  
XX  
XX  static int  seqon = NOSEQ;				/* sequencer mode */
XX+ char hissig[WDLEN];					/* signature file */
XX  
XX  main (argc, argv)
XX  char  **argv;
XX***************
XX*** 60,65
XX  /*
XX   *	grab some variables from the environment
XX   */
XX      if ((p = getenv ("SHELL")) != 0)
XX  	hisshell = p;					/* his shell */
XX      if ((p = getenv ("NFED")) != 0)

XX--- 62,69 -----
XX  /*
XX   *	grab some variables from the environment
XX   */
XX+     if ((p = getenv ("NFSIG")) != 0 && access (p, 04) >= 0)
XX+ 	strcpy(hissig, p);				/* his signature file */
XX      if ((p = getenv ("SHELL")) != 0)
XX  	hisshell = p;					/* his shell */
XX      if ((p = getenv ("NFED")) != 0)
XX===================================================================
XXRCS file: RCS/readem.c,v
XXretrieving revision 1.1
XXdiff -c -r1.1 readem.c
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:17:55 1985
XX--- readem.c	Tue Aug 20 10:22:09 1985
XX***************
XX*** 4,10
XX  #include	<sys/stat.h>
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: readem.c,v 1.1 85/08/19 16:33:49 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  

XX--- 4,10 -----
XX  #include	<sys/stat.h>
XX  
XX  #ifdef	RCSIDENT
XX! static char rcsid[] = "$Header: readem.c,v 1.3 85/08/20 10:21:11 rs Exp $";
XX  #endif	RCSIDENT
XX  
XX  
XX***************
XX*** 19,24
XX  *	modified	: ray essick may 22, 1981
XX  *	modified (again): Ray Essick December 1981
XX  *	modified (more):  Ray Essick, February 1982
XX  *
XX  */
XX  readem (io, readnum, firstdis, resp)

XX--- 19,26 -----
XX  *	modified	: ray essick may 22, 1981
XX  *	modified (again): Ray Essick December 1981
XX  *	modified (more):  Ray Essick, February 1982
XX+ *	added MODERATED:  Rich $alz, August 1985
XX+ *	added LOCAL and YorN: Rich $alz, August 1985
XX  *
XX  */
XX  static char YES[] = "YES";
XX***************
XX*** 21,26
XX  *	modified (more):  Ray Essick, February 1982
XX  *
XX  */
XX  readem (io, readnum, firstdis, resp)
XX  struct io_f *io;
XX  int    *firstdis;

XX--- 23,32 -----
XX  *	added LOCAL and YorN: Rich $alz, August 1985
XX  *
XX  */
XX+ static char YES[] = "YES";
XX+ static char NO[] = "NO ";
XX+ #define YorN(c)		((c) != 0 ? YES : NO)
XX+ 
XX  readem (io, readnum, firstdis, resp)
XX  struct io_f *io;
XX  int    *firstdis;
XX***************
XX*** 333,338
XX  		toauth = 0;
XX  		wtext = 1;				/* to others with text */
XX  		goto sendmail;
XX  	    case 'P': 
XX  		toauth = 1;
XX  		wtext = 1;				/* to author with text */

XX--- 339,345 -----
XX  		toauth = 0;
XX  		wtext = 1;				/* to others with text */
XX  		goto sendmail;
XX+ 	    /* mail to author, possibly with text. */
XX  	    case 'P': 
XX  	    case 'p': 
XX  #ifdef NO_Pp_FOR_MODERATED
XX***************
XX*** 334,342
XX  		wtext = 1;				/* to others with text */
XX  		goto sendmail;
XX  	    case 'P': 
XX- 		toauth = 1;
XX- 		wtext = 1;				/* to author with text */
XX- 		goto sendmail;
XX  	    case 'p': 
XX  		toauth = 1;
XX  		wtext = 0;				/* to author, no text */

XX--- 341,346 -----
XX  		goto sendmail;
XX  	    /* mail to author, possibly with text. */
XX  	    case 'P': 
XX  	    case 'p': 
XX  #ifdef NO_Pp_FOR_MODERATED
XX  		/* some people may want this */
XX***************
XX*** 338,343
XX  		wtext = 1;				/* to author with text */
XX  		goto sendmail;
XX  	    case 'p': 
XX  		toauth = 1;
XX  		wtext = 0;				/* to author, no text */
XX  		goto sendmail;

XX--- 342,356 -----
XX  	    /* mail to author, possibly with text. */
XX  	    case 'P': 
XX  	    case 'p': 
XX+ #ifdef NO_Pp_FOR_MODERATED
XX+ 		/* some people may want this */
XX+ 		if (io -> d_descr.d_stat & MODERATED)
XX+ 		{
XX+ 		    at (0, 10);
XX+ 		    printf ("Moderated; use 'm' or 'M' command\n");
XX+ 		    continue;
XX+ 		}
XX+ #endif NO_Pp_FOR_MODERATED
XX  		toauth = 1;
XX  		wtext = c == 'P';			/* to author with text */
XX  	sendmail: 					/* jump to here once set mail parms */
XX***************
XX*** 339,347
XX  		goto sendmail;
XX  	    case 'p': 
XX  		toauth = 1;
XX! 		wtext = 0;				/* to author, no text */
XX! 		goto sendmail;
XX! 
XX  	sendmail: 					/* jump to here once set mail parms */
XX  		if (resp)
XX  		{

XX--- 352,358 -----
XX  		}
XX  #endif NO_Pp_FOR_MODERATED
XX  		toauth = 1;
XX! 		wtext = c == 'P';			/* to author with text */
XX  	sendmail: 					/* jump to here once set mail parms */
XX  		if (resp)
XX  		{
XX***************
XX*** 454,462
XX  		if (allow (io, DRCTOK) == 0)
XX  		{					/* tell him what's up */
XX  		    at (0, 10);
XX! 		    printf (" Anonymous: %s   Networked: %s",
XX! 			    (io -> descr.d_stat & ANONOK) ? "YES" : "NO",
XX! 			    (io -> descr.d_stat & NETWRKD) ? "YES" : "NO");
XX  		    replot = 0;				/* leave on screen */
XX  		    goto showit;
XX  		}

XX--- 465,476 -----
XX  		if (allow (io, DRCTOK) == 0)
XX  		{					/* tell him what's up */
XX  		    at (0, 10);
XX! 		    printf (
XX!          "Anonymous: %s   Networked: %s   Moderated: %s   Local: %s",
XX! 			    YorN (io -> descr.d_stat & ANONOK),
XX! 			    YorN (io -> descr.d_stat & NETWRKD),
XX! 			    YorN (io -> descr.d_stat & MODERATED),
XX! 			    YorN (io -> descr.d_stat & LOCAL));
XX  		    replot = 0;				/* leave on screen */
XX  		    goto showit;
XX  		}
XX***************
XX*** 527,532
XX  	    case 'W': 					/* write a response with the text */
XX  	    case 'w': 					/* let him write a response */
XX  		getdscr (io, &io -> descr);		/* get up to date */
XX  		if (allow (io, RESPOK) == 0)
XX  		{
XX  		    at (0, 10);

XX--- 541,553 -----
XX  	    case 'W': 					/* write a response with the text */
XX  	    case 'w': 					/* let him write a response */
XX  		getdscr (io, &io -> descr);		/* get up to date */
XX+ 
XX+ 		if (io -> descr.d_stat & MODERATED)
XX+ 		{
XX+ 		    wtext = c == 'W';			/* don't care about toauth */
XX+ 		    goto sendmail;
XX+ 		}
XX+ 
XX  		if (allow (io, RESPOK) == 0)
XX  		{
XX  		    at (0, 10);
XX===================================================================
XXRCS file: RCS/structs.h,v
XXretrieving revision 1.1
XXdiff -c -r1.1 structs.h
XX*** /tmp/,RCSt1001754	Tue Aug 20 12:18:12 1985
XX--- structs.h	Tue Aug 20 10:27:02 1985
XX***************
XX*** 1,7
XX  #include <stdio.h>
XX  
XX  #if	defined(RCSIDENT) && defined(MAINLINE)
XX! static char zzstructs[] = "$Header: structs.h,v 1.1 85/08/19 16:04:13 rs Exp $";
XX  #endif	defined(RCSIDENT) && defined(MAINLINE)
XX  
XX  /*

XX--- 1,7 -----
XX  #include <stdio.h>
XX  
XX  #if	defined(RCSIDENT) && defined(MAINLINE)
XX! static char zzstructs[] = "$Header: structs.h,v 1.7 85/08/20 10:25:43 rs Exp $";
XX  #endif	defined(RCSIDENT) && defined(MAINLINE)
XX  
XX  /*
XX***************
XX*** 105,110
XX  #define		WRITONLY   0100				/* writeonly access when written */
XX  #define		ORPHND	   0200				/* foster parent */
XX  #define		ISARCH	   0400				/* is an archive */
XX  
XX  /*	change these only after modifying the table in access.c		*/
XX  #define		READOK	01				/* allow user to read */

XX--- 105,112 -----
XX  #define		WRITONLY   0100				/* writeonly access when written */
XX  #define		ORPHND	   0200				/* foster parent */
XX  #define		ISARCH	   0400				/* is an archive */
XX+ #define		MODERATED 01000				/* mail to moderator */
XX+ #define		LOCAL     02000				/* no signature */
XX  
XX  /*	change these only after modifying the table in access.c		*/
XX  #define		READOK	01				/* allow user to read */
@//E*O*F DIFFS//
chmod u=rw,g=rw,o=rw DIFFS
 
echo Inspecting for damage in transit...
temp=/tmp/shar$$; dtemp=/tmp/.shar$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
    1165    4297   28165 DIFFS
!!!
wc  DIFFS | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
if [ -s $dtemp ]
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0