[comp.editors] Re^2: rn saving files very slow

jv@mhres.mh.nl (Johan Vromans) (07/05/89)

I have received a number of requests for my quick mailbox saver
program for RN. 
Because it's very small, I post it in this group - where the
question originated. 

Have fun.

#!/bin/sh
# 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 Johan Vromans <jv@mhres> on Wed Jul  5 12:49:58 1989
#
# This archive contains:
#	mbsaver.c	
#

LANG=""; export LANG

echo x - mbsaver.c
cat >mbsaver.c <<'@EOF'
/* mbox.saver - mailbox saver for rn */

#define FULLNAME	argv[1]	/* Full name of article (%A) */
#define ARTNUMBER	argv[2]	/* Article number (%a) */
#define ARTOFFSET	argv[3]	/* Where in article to start (%B) */
#define NEWSGROUP	argv[4]	/* Newsgroup name (%C) */
#define DESTFILE	argv[5]	/* Save destination (%b) */
#define SENDER		argv[6]	/* Sender (%T) */

#include <stdio.h>

main (argc, argv)
int argc;
char *argv[];
{
	long skip = -1;
	char *cp;
	FILE *inp, *outp;
	char buf [BUFSIZ];
	int lines = 0;
	long time ();
	long now = time (&now);
	char *ctime ();

	if ((inp = fopen ((cp = FULLNAME), "r")) == NULL) {
		fprintf (stderr, "Can't open %s\n", cp);
		exit (1);
	}

	if ((outp = fopen ((cp = DESTFILE), "a")) == NULL) {
		fprintf (stderr, "Can't append to %s\n", cp);
		exit (1);
	}
	
	if (*(cp = ARTOFFSET) >= '0' && *cp <= '9')
		skip = atol (cp);

	fprintf (outp, "From %s %s", SENDER, ctime (&now));
	lines++;

	if (skip == 0) {
		fprintf (outp, "Article-Id: %s@%s\n",
			ARTNUMBER, NEWSGROUP);
		lines++;
	}

	while ((cp = fgets (buf, BUFSIZ, inp)) != NULL) {
		if (skip > 0) { 
			skip -= strlen (buf);
			if (skip >= 0)
				continue;
			cp += strlen (buf) + skip;
		}
		if (!strncmp (cp, "From ", 5))
			fputc ('>', outp);
		fputs (cp, outp);
		lines++;
	}
	fputc ('\n', outp);
	fputc ('\n', outp);
	fclose (outp);
	fclose (inp);
	fprintf (stderr, "%d lines ", lines);
	exit (0);
}
@EOF

chmod 644 mbsaver.c

exit 0
-- 
Johan Vromans			 jv@mh.nl via european backbone (mcvax)
Multihouse Automatisering bv		uucp: ..!{mcvax,hp4nl}!mh.nl!jv
Doesburgweg 7					  phone: +31 1820 62944
2803 PL Gouda - The Netherlands			    fax: +31 1820 62500