home *** CD-ROM | disk | FTP | other *** search
- From: rob@mtdiablo.Concord.CA.US (Rob Bernardo)
- Newsgroups: alt.sources
- Subject: New rebatch compatible with cnews of patchdate 24-Mar-1991
- Message-ID: <1991Apr4.031152.17236@mtdiablo.Concord.CA.US>
- Date: 4 Apr 91 03:11:52 GMT
-
-
- I have updated rebatch to deal (only) with compressed news batches that
- end in .Z, as found with cnews of patchdate 24-Mar-1991. The wrapper
- shell script included in in this version of rebatch is **not**
- compatible with earlier versions of cnews that do not suffix compressed
- news batches with .Z. The C program dorebatch has been improved. It
- should work with the older rebatch wrapper shell script, but I have not
- tested them together.
-
- From the README file:
-
- This program will reform news batches that suffer from relaynews 'unbatcher
- out of sync' problems. It presumes that any line beginning with
- #! rnews
- is the beginning of a new article and reforms the news batches by parsing
- them into separate articles and recalculating the article character counts.
-
- This program consists of a C program dorebatch and a wrapper shell
- script.
-
-
- ---- Cut Here and unpack ----
- #!/bin/sh
- # shar: Shell Archiver (v1.22)
- # Packed Wed Apr 3 18:59:08 PST 1991 by mtdiablo!rob
- # from directory /tmp/rebatch
- #
- # Run the following text with /bin/sh to create:
- # Makefile
- # README
- # dorebatch.c
- # rebatch
- #
- if test -f Makefile; then echo "File Makefile exists"; else
- echo "x - extracting Makefile (Text)"
- sed 's/^X//' << 'SHAR_EOF' > Makefile &&
- XNEWSOWNER=bin
- XNEWSGRP=bin
- XMODE=755
- XNEWSLIB=/usr/local/lib
- X
- Xall: dorebatch
- X
- Xinstall: dorebatch
- X install -g ${NEWSGRP} -o ${NEWSOWNER} -m ${MODE} rebatch ${NEWSLIB}/newsbin/batch
- X install -g ${NEWSGRP} -o ${NEWSOWNER} -m ${MODE} dorebatch ${NEWSLIB}/newsbin/batch
- SHAR_EOF
- chmod 0644 Makefile || echo "restore of Makefile fails"
- set `wc -c Makefile`;Sum=$1
- if test "$Sum" != "262"
- then echo original size 262, current size $Sum;fi
- fi
- if test -f README; then echo "File README exists"; else
- echo "x - extracting README (Text)"
- sed 's/^X//' << 'SHAR_EOF' > README &&
- X@(#)README 1.2 Delta Date 4/3/91 Mt. Diablo Software Solutions
- X
- XThis version of rebatch is compatible with cnews with a last patchdate of
- X24-Mar-1991.
- X
- XThis program will reform news batches that suffer from relaynews 'unbatcher
- Xout of sync' problems. It presumes that any line beginning with
- X #! rnews
- Xis the beginning of a new article and reforms the news batches by parsing
- Xthem into separate articles and recalculating the article character counts.
- X
- XThis program consists of a C program dorebatch and a wrapper shell
- Xscript. The command line syntax for dorebatch is
- X
- X dorebatch [-v] -i input_file -o output_file
- X
- Xwhere -v enables slightly verbose messages, and where input_file and
- Xoutput_file are the old and reformed *uncompressed* news archive files,
- Xrespectively.
- X
- XThe shell wrapper rebatch (used with no arguments), will run dorebatch
- Xon all *compressed* .Z files in the cnews in.coming/bad directory and
- Xwill create a reformed *compressed* news archive of the same name in
- Xin.coming/, where cnews newsrun can reprocess them again. If successful
- Xin reforming the batch, rebatch will remove the old .Z file in in.coming/bad.
- X
- XYou may need to tailor rebatch for you particular cnews configuration.
- X
- XA trivial makefile is supplied to compile and install dorebatch and rebatch,
- Xhowever it uses the SUN O/S flavor of install(1), which you may need to
- Xrework for you flavor of UNIX.
- SHAR_EOF
- chmod 0444 README || echo "restore of README fails"
- set `wc -c README`;Sum=$1
- if test "$Sum" != "1388"
- then echo original size 1388, current size $Sum;fi
- fi
- if test -f dorebatch.c; then echo "File dorebatch.c exists"; else
- echo "x - extracting dorebatch.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > dorebatch.c &&
- X#ifndef lint
- Xstatic char sccsid[] = "@(#)dorebatch.c 1.2 Delta Date 4/3/91 Mt. Diablo Software Solutions";
- X#endif
- X
- X#define ZCAT "zcat"
- X#define RNEWSSTRING "#! rnews"
- X
- X#include <stdio.h>
- X
- Xint verbose;
- Xextern int errno;
- Xextern int sys_nerr;
- Xextern char *sys_errlist[];
- X
- X#define ERRNO_MSG (errno < sys_nerr ? sys_errlist[errno] : "unknown errno")
- X
- Xmain(argc, argv)
- Xint argc;
- Xchar **argv;
- X{
- X char dataline[BUFSIZ];
- X char *infile = NULL, *outfile = NULL;
- X FILE *infp, *outfp;
- X long artbegin, artend, nextartbegin;
- X int eofreached, optret, rnewslen, charcnt, artcnt, argerr;
- X extern int optind;
- X extern char *optarg;
- X
- X /* Process command line */
- X argerr = 0;
- X while ((optret = getopt(argc, argv, "vi:o:")) != -1) {
- X switch (optret) {
- X case 'v':
- X verbose = 1;
- X break;
- X case 'i':
- X infile = optarg;
- X break;
- X
- X case 'o':
- X outfile = optarg;
- X break;
- X
- X default:
- X argerr++;
- X }
- X }
- X
- X if(!infile || !outfile || argerr) {
- X fprintf(stderr, "%s: usage: %s -i [infile] -o [outfile]\n",
- X argv[0], argv[0]);
- X exit(-1);
- X }
- X
- X /* Open input file */
- X if((infp = fopen(infile, "r")) == NULL) {
- X fprintf(stderr, "%s: fopen(%s, \"r\") failed\n", argv[0], infile);
- X exit(errno?errno:-1);
- X }
- X
- X /* Open output file */
- X if((outfp = fopen(outfile, "w+")) == NULL) {
- X fprintf(stderr, "%s: fopen(%s, \"w+\") failed\n", argv[0], outfile);
- X fclose(infp);
- X exit(errno?errno:-1);
- X }
- X
- X /* Verify first line is rnews */
- X if(fgets(dataline, BUFSIZ, infp) == NULL) {
- X fprintf(stderr, "%s: premature end of file %s\n", argv[0], infile);
- X fclose(infp);
- X exit(errno?errno:-1);
- X }
- X rnewslen = strlen(RNEWSSTRING);
- X if(strncmp(dataline, RNEWSSTRING, rnewslen)) {
- X fprintf(stderr, "%s: file %s not a news archive\n",
- X argv[0], infile);
- X fclose(infp);
- X exit(errno?errno:-1);
- X }
- X artbegin = artend = ftell(infp);
- X eofreached = 0;
- X artcnt = 0;
- X
- X if(verbose)
- X printf("input = %s output = %s\n", infile, outfile);
- X
- X /* Process each article in batch */
- X while(!eofreached) {
- X
- X /* Read a line from input. If oef or end of article,
- X * capture begin point of next article,
- X * calculate article size from end and begin points
- X * of current article,
- X * write rnews line with size on output file,
- X * rewind to begin point of current article,
- X * copy article to output file and quite loop,
- X * and advance to new article begin point.
- X * Otherwise store current point as provisional
- X * end point of current article.
- X */
- X while (1) {
- X if(fgets(dataline, BUFSIZ, infp) == NULL)
- X eofreached = 1;
- X
- X if(eofreached||(!strncmp(dataline, RNEWSSTRING, rnewslen))) {
- X
- X nextartbegin = ftell(infp);
- X charcnt = artend - artbegin;
- X fprintf(outfp, "%s %d\n", RNEWSSTRING, charcnt);
- X if(verbose)
- X printf("article %d charcnt %d\n", artcnt, charcnt);
- X if(fseek(infp, artbegin, 0) == -1) {
- X fprintf(stderr, "%s: fseek back to article beginning failed\n", argv[0]);
- X fclose(infp);
- X fclose(outfp);
- X exit(errno?errno:-1);
- X }
- X while(ftell(infp) < artend) {
- X if(fgets(dataline, BUFSIZ, infp) == NULL) {
- X fprintf(stderr, "%s: fgets from %s failed\n",
- X argv[0], infile);
- X fclose(infp);
- X fclose(outfp);
- X exit(errno?errno:-1);
- X }
- X if(fputs(dataline, outfp) == EOF) {
- X fprintf(stderr, "%s: fputs to %s failed\n",
- X argv[0], outfile);
- X fclose(infp);
- X fclose(outfp);
- X exit(errno?errno:-1);
- X }
- X }
- X artcnt++;
- X artbegin = artend = nextartbegin;
- X if(fseek(infp, artbegin, 0) == -1) {
- X fprintf(stderr, "%s: fseek back to article beginning failed\n", argv[0]);
- X fclose(infp);
- X fclose(outfp);
- X exit(errno?errno:-1);
- X }
- X break;
- X
- X } else
- X artend = ftell(infp);
- X }
- X }
- X
- X fclose(infp);
- X fclose(outfp);
- X exit(0);
- X}
- SHAR_EOF
- chmod 0444 dorebatch.c || echo "restore of dorebatch.c fails"
- set `wc -c dorebatch.c`;Sum=$1
- if test "$Sum" != "3821"
- then echo original size 3821, current size $Sum;fi
- fi
- if test -f rebatch; then echo "File rebatch exists"; else
- echo "x - extracting rebatch (Text)"
- sed 's/^X//' << 'SHAR_EOF' > rebatch &&
- X#! /bin/sh
- X# @(#)rebatch 1.3 Delta Date 4/3/91 Mt. Diablo Software Solutions
- X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
- X. ${NEWSCONFIG-/usr/local/lib/news/bin/config}
- Xumask $NEWSUMASK
- X
- XPATH=$NEWSCTL/bin:$NEWSBIN/batch:$NEWSBIN:$NEWSPATH ; export PATH
- XTMP=/tmp/rebatch$$
- Xfor file in ${NEWSARTS}/in.coming/bad/*.Z
- Xdo
- X barename=`basename $file`
- X newbatch=`echo "${NEWSARTS}/in.coming/$barename" | sed -e 's/.Z$//'`
- X echo "rebatching $barename"
- X zcat $file > $TMP && dorebatch -i $TMP -o $newbatch && compress $newbatch && rm $file
- X rm -f $TMP
- Xdone
- SHAR_EOF
- chmod 0444 rebatch || echo "restore of rebatch fails"
- set `wc -c rebatch`;Sum=$1
- if test "$Sum" != "561"
- then echo original size 561, current size $Sum;fi
- fi
- exit 0
- --
- Rob Bernardo Mt. Diablo Software Solutions
- email: rob@mtdiablo.Concord.CA.US phone: (415) 827-4301
-