Thread View: de.comp.sources.os9
1 messages
1 total messages
Started by Frank Kaefer
Wed, 23 Dec 1992 19:41
MNews Prerelease Part08/09
Author: Frank Kaefer
Date: Wed, 23 Dec 1992 19:41
Date: Wed, 23 Dec 1992 19:41
1958 lines
47283 bytes
47283 bytes
Submitted-by: Ulrich Dessauer <ud@Nightmare.ddt.sub.org>
Archive-name: mnews/part08
: ----- Cut here ----- Cut here ----- Cut here ----- Cut here -----
: Use sh filename to extract shell archive
: This shell archive contains following files:
: 'RNEWS/compr7.c 3373 bytes'
: 'RNEWS/conv.c 2289 bytes'
: 'RNEWS/logit.c 940 bytes'
: 'RNEWS/mail.c 779 bytes'
: 'RNEWS/rnews.c 5196 bytes'
: 'RNEWS/rnews.h 624 bytes'
: 'RNEWS/send.c 2835 bytes'
: 'SBATCH/Makefile 589 bytes'
: 'SBATCH/batch.c 2157 bytes'
: 'SBATCH/com.c 2736 bytes'
: 'SBATCH/com7.c 1777 bytes'
: 'SBATCH/conv.c 3579 bytes'
: 'SBATCH/exec.c 859 bytes'
: 'SBATCH/file.c 1820 bytes'
: 'SBATCH/none.c 1136 bytes'
: 'SBATCH/sbatch.c 7077 bytes'
:
if test -f 'RNEWS/compr7.c' ; then
echo 'File RNEWS/compr7.c already exists, overwriting it'
del 'RNEWS/compr7.c'
fi
echo Extracting \"'RNEWS/compr7.c'\"
sed "s/^X//" >'RNEWS/compr7.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: compr7.c_v $
X * Revision 1.1 90/08/31 15:38:01 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: compr7.c_v 1.1 90/08/31 15:38:01 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <ctype.h>
X# include <modes.h>
X# include "rnews.h"
X
Xextern void free ();
Xextern void logit ();
Xextern void start_rnews ();
Xextern long lseek ();
Xextern char *findmod ();
Xextern char *index ();
Xextern char *mktemp ();
Xextern char *strcpy ();
X
Xint
Xexec (cmd)
Xchar *cmd;
X{
X extern int os9forkc ();
X extern char **environ;
X char *newcmd;
X register char *x;
X char *arg[10];
X int t,pid;
X
X if ((newcmd = (char *) malloc ((unsigned int) (strlen (cmd) + 2))) == (char *) NULL)
X return (-1);
X t = 0;
X (void) strcpy (newcmd,cmd);
X x = newcmd;
X while (*x && (t < 9)) {
X arg[t++] = x;
X while (*x && (!isspace (*x)))
X ++x;
X if (*x) {
X *x++ = '\0';
X while (isspace (*x))
X ++x;
X }
X }
X arg[t] = NULL;
X logit (4,"Fork: '%s'\n",arg[0]);
X pid = os9exec (os9forkc,findmod (arg[0],arg[0]),arg,environ,0,0,3);
X logit ((pid < 0) ? 2 : 4,"pid of '%s' is %d\n",arg[0],pid);
X free (newcmd);
X return (pid);
X}
X
Xvoid
Xcompr7 (fd,scratch,cmd)
Xint fd;
Xint scratch;
Xchar *cmd;
X{
X int old0, old1;
X int pid1, pid2;
X int pip;
X int o, t, status;
X char tmp[40 + sizeof (TEMPDIR)];
X unsigned int siz, temp;
X register char *x;
X register int n;
X char *buf;
X
X if ((pip = create ("/pipe",S_IREAD | S_IWRITE,03, 0)) < 0) {
X error |= FATAL;
X return;
X }
X (void) sprintf (tmp, "%s/dec.XXXXXX", TEMPDIR);
X (void) mktemp (tmp);
X if ((o = create (tmp,S_IREAD | S_IWRITE,03, 0)) < 0) {
X logit (2,"ERROR: Can't create tmpfile '%s'\n",tmp);
X (void) close (pip);
X error |= FATAL;
X return;
X }
X old0 = dup (0);
X old1 = dup (1);
X if (fd != 0) {
X (void) close (0);
X (void) dup (fd);
X }
X (void) close (1);
X (void) dup (pip);
X if ((pid1 = exec (decode)) < 0) {
X (void) close (1);
X (void) dup (old1);
X if (fd != 0) {
X (void) close (0);
X (void) dup (old0);
X }
X (void) close (pip);
X (void) close (o);
X _unlink (tmp);
X error |= FATAL;
X return;
X }
X (void) close (1);
X (void) close (0);
X if (fd != 0)
X (void) close (fd);
X else {
X (void) close (old0);
X old0 = -1;
X }
X (void) dup (pip);
X (void) close (pip);
X (void) dup (o);
X if ((pid2 = exec (cmd)) < 0) {
X (void) close (1);
X (void) dup (old1);
X (void) close (0);
X if (old0 != -1)
X (void) dup (old0);
X (void) close (o);
X _unlink (tmp);
X error |= FATAL;
X return;
X }
X (void) close (0);
X if (old0 != -1) {
X (void) dup (old0);
X (void) close (old0);
X }
X (void) close (1);
X (void) dup (old1);
X (void) close (old1);
X while (((t = wait (&status)) != -1) && ((pid1 != -1) || (pid2 != -1))) {
X logit (status ? 2 : 4,"%d returns %d\n",t,status);
X if (t == pid1) {
X if (status)
X error |= FATAL;
X pid1 = -1;
X }
X if (t == pid2) {
X if (status)
X error |= FATAL;
X pid2 = -1;
X }
X }
X (void) lseek (o,0,0);
X siz = 20000;
X while (siz && ((buf = (char *) malloc (siz + 5)) == (char *) NULL))
X siz -= 1000;
X if (!siz) {
X (void) close (o);
X _unlink (tmp);
X error |= FATAL;
X return;
X }
X while ((n = read (o,buf,siz)) > 0) {
X temp = n;
X (void) lseek (o,(long) 0-n,1);
X x = buf;
X while (n-- > 0) {
X if (*x && index ("\l\r",*x))
X *x = *x == '\l' ? '\r' : '\l';
X ++x;
X }
X (void) write (o,buf,temp);
X }
X (void) lseek (o,0,0);
X start_rnews (o,scratch);
X (void) close (o);
X free (buf);
X _unlink (tmp);
X}
__END__OF__THIS__FILE__
if test -f 'RNEWS/conv.c' ; then
echo 'File RNEWS/conv.c already exists, overwriting it'
del 'RNEWS/conv.c'
fi
echo Extracting \"'RNEWS/conv.c'\"
sed "s/^X//" >'RNEWS/conv.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: conv.c_v $
X * Revision 1.1 90/08/31 15:38:06 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: conv.c_v 1.1 90/08/31 15:38:06 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include "rnews.h"
X
Xextern char *malloc ();
Xextern char *strdup ();
X
Xtypedef struct _keymap {
X char *seq;
X int len;
X unsigned char map;
X struct _keymap *next;
X} keymap;
X
Xstatic keymap *kmap[256];
X
Xstatic int isinit = FALSE;
X
Xstatic keymap kdefault[] = {
X#ifdef ISO
X "\\\"A", 3, 0xc4, NULL,
X "\\\"O", 3, 0xd6, NULL,
X "\\\"U", 3, 0xdc, NULL,
X "\\\"a", 3, 0xe4, NULL,
X "\\\"o", 3, 0xf6, NULL,
X "\\\"u", 3, 0xfc, NULL,
X "\\\"s", 3, 0xdf, NULL,
X
X "A\\\"", 3, 0xc4, NULL,
X "O\\\"", 3, 0xd6, NULL,
X "U\\\"", 3, 0xdc, NULL,
X "a\\\"", 3, 0xe4, NULL,
X "o\\\"", 3, 0xf6, NULL,
X "u\\\"", 3, 0xfc, NULL,
X "s\\\"", 3, 0xdf, NULL,
X#endif ISO
X#ifdef CUMANA_ST
X "\\\"A", 3, 0x8e, NULL,
X "\\\"O", 3, 0x99, NULL,
X "\\\"U", 3, 0x9a, NULL,
X "\\\"a", 3, 0x84, NULL,
X "\\\"o", 3, 0x94, NULL,
X "\\\"u", 3, 0x81, NULL,
X "\\\"s", 3, 0xe1, NULL,
X
X "A\\\"", 3, 0x8e, NULL,
X "O\\\"", 3, 0x99, NULL,
X "U\\\"", 3, 0x9a, NULL,
X "a\\\"", 3, 0x84, NULL,
X "o\\\"", 3, 0x94, NULL,
X "u\\\"", 3, 0x81, NULL,
X "s\\\"", 3, 0xe1, NULL,
X#endif CUMANA_ST
X NULL, 0, 0, NULL
X};
X
Xstatic void
Xinit_conv ()
X{
X register int t;
X keymap *tmp, *t2;
X
X for (t = 0; t < 256; ++t)
X kmap[t] = NULL;
X for (t = 0; kdefault[t].seq; ++t)
X if (tmp = (keymap *) malloc (sizeof (keymap)))
X if (tmp->seq = strdup (kdefault[t].seq)) {
X tmp->len = kdefault[t].len;
X tmp->map = kdefault[t].map;
X tmp->next = 0;
X if (t2 = kmap[tmp->seq[0] & 0xff]) {
X while (t2->next)
X t2 = t2->next;
X t2->next = tmp;
X } else
X kmap[tmp->seq[0] & 0xff] = tmp;
X } else
X free ((char *) tmp);
X isinit = TRUE;
X}
X
Xvoid
Xconv_8bit (s, n, fp)
Xregister char *s;
Xregister int n;
Xregister FILE *fp;
X{
X unsigned char c;
X register keymap *tmp;
X
X if (!isinit)
X init_conv ();
X while (n-- > 0)
X if (tmp = kmap[((unsigned char) *s) & 0xff]) {
X while (tmp)
X if ((n >= tmp->len) && (!strncmp (s, tmp->seq, tmp->len)))
X break;
X else
X tmp = tmp->next;
X if (tmp) {
X n -= tmp->len - 1;
X s += tmp->len;
X putc (tmp->map, fp);
X } else
X putc (*s++, fp);
X } else
X putc (*s++, fp);
X}
__END__OF__THIS__FILE__
if test -f 'RNEWS/logit.c' ; then
echo 'File RNEWS/logit.c already exists, overwriting it'
del 'RNEWS/logit.c'
fi
echo Extracting \"'RNEWS/logit.c'\"
sed "s/^X//" >'RNEWS/logit.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: logit.c_v $
X * Revision 1.1 90/08/31 15:38:12 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: logit.c_v 1.1 90/08/31 15:38:12 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <time.h>
X# include "rnews.h"
X
Xextern time_t time ();
Xextern char *asctime ();
Xextern struct tm *localtime ();
X
X /*VARARGS2*/
Xvoid
Xlogit (nr,a,b,c,d,e,f)
Xint nr;
Xchar *a,*b,*c,*d,*e,*f;
X{
X static int first = TRUE;
X time_t t;
X struct tm *tt;
X static char tbuf[32];
X
X if (first) {
X (void) time (&t);
X if (tt = localtime (& t))
X sprintf (tbuf, "%02d/%02d/%02d %02d:%02d:%02d",
X tt -> tm_year, tt -> tm_mon + 1, tt -> tm_mday,
X tt -> tm_hour, tt -> tm_min, tt -> tm_sec);
X else
X tbuf[0] = '\0';
X (void) fprintf (stderr,"Start: %s", tbuf);
X first = FALSE;
X }
X (void) fprintf (stderr,a,b,c,d,e,f);
X if ((!lp) || (Debug < nr))
X return;
X (void) fprintf (lp,"%s: ", tbuf);
X (void) fprintf (lp,a,b,c,d,e,f);
X}
__END__OF__THIS__FILE__
if test -f 'RNEWS/mail.c' ; then
echo 'File RNEWS/mail.c already exists, overwriting it'
del 'RNEWS/mail.c'
fi
echo Extracting \"'RNEWS/mail.c'\"
sed "s/^X//" >'RNEWS/mail.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: mail.c_v $
X * Revision 1.1 90/08/31 15:38:14 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: mail.c_v 1.1 90/08/31 15:38:14 ud Exp $";
X# endif LINT
X# include <stdio.h>
X
Xextern char *cuserid ();
Xextern FILE *popen ();
X
Xvoid
Xsend_mail (lost, articles)
Xint lost;
Xint articles;
X{
X char cmd[128];
X char *name;
X FILE *fp;
X
X if ((name = cuserid ()) == (char *) NULL)
X name = "postmaster";
X (void) sprintf (cmd, "%s %s", findmod ("/h0/ETC/CMDS/rmail", "rmail"), name);
X if ((fp = popen (cmd, "w")) == (FILE *) NULL) {
X logit (2, "ERROR: Can't fork rmail\n");
X return;
X }
X (void) fprintf (fp, "Subject: Failed articles\n\n");
X (void) fprintf (fp, "Spooled: %d\n", articles);
X (void) fprintf (fp, "Failed: %d\n", lost);
X (void) pclose (fp);
X}
__END__OF__THIS__FILE__
if test -f 'RNEWS/rnews.c' ; then
echo 'File RNEWS/rnews.c already exists, overwriting it'
del 'RNEWS/rnews.c'
fi
echo Extracting \"'RNEWS/rnews.c'\"
sed "s/^X//" >'RNEWS/rnews.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: main.c_v $
X * Revision 1.1 90/08/31 15:38:17 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: main.c_v 1.1 90/08/31 15:38:17 ud Exp $";
Xstatic char copyright[] = "Copyright (C) 1989, 1990 by Ulrich Dessauer, Germering, Germany.\n";
X# endif LINT
X# include <stdio.h>
X# include <modes.h>
X# define EXTERN
X# include "rnews.h"
X
Xextern void compr ();
Xextern void compr7 ();
Xextern void exit ();
Xextern void logit ();
Xextern void send_mail ();
Xextern long lseek ();
Xextern char *info_str ();
Xextern char *malloc ();
Xextern char *mktemp ();
Xextern char *strcpy ();
Xextern FILE *fopen ();
X
Xvoid start_rnews ();
X
Xextern int errno;
X
Xstatic int yet;
X
Xstatic char *help[] = {
X "Syntax: rnews [<opts>] [<file>] [<opts>]\n",
X "Function: reading standard input or file and parsing batched news\n",
X "Options:\n",
X " -d<=>num Debuglevel\n",
X NULL
X};
X
Xvoid
Xusage ()
X{
X int t;
X
X for (t=0;help[t];++t)
X (void) fputs (help[t],stderr);
X}
X
Xvoid
Xparse_args (ac,av)
Xint ac;
Xchar *av[];
X{
X int t;
X char *x;
X int i;
X
X Debug = 0;
X i = -1;
X for (t=1;t<ac;++t)
X if (*av[t] == '-') {
X x = av[t] + 1;
X while (*x) {
X switch (*x) {
X case 'd':
X x += (*(x+1) == '=' ? 2 : 1);
X Debug = atoi (x);
X while (*x)
X ++x;
X break;
X case '?':
X default:
X usage ();
X exit (1);
X }
X if (*x)
X ++x;
X }
X } else
X if (i == -1)
X if ((i = open (av[t],S_IREAD)) != -1) {
X (void) close (0);
X (void) dup (i);
X (void) close (i);
X i = 0;
X }
X}
X
Xmain (argc,argv)
Xint argc;
Xchar *argv[];
X{
X char tmp[40 + sizeof (TEMPDIR)];
X char s[512];
X int i;
X
X parse_args (argc,argv);
X (void) sprintf (tmp, "%s/rn.XXXXXX", TEMPDIR);
X (void) mktemp (tmp);
X unlink (tmp);
X if ((i = create (tmp,S_IWRITE | S_IREAD,03, 0)) < 0)
X exit (_errmsg (1,"Can't create temp-file!\n"));
X
X if ((info_str (INEWS,s,512) == (char *) NULL) || ((inews= (char *) malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X inews = INEWS;
X else
X (void) strcpy (inews, s);
X if ((info_str (UNCOMPRESS,s,512) == (char *) NULL) || ((uncompress = (char *) malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X uncompress = UNCOMPRESS;
X else
X (void) strcpy (uncompress,s);
X if ((info_str (MELT,s,512) == (char *) NULL) || ((melt = (char *) malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X melt = MELT;
X else
X (void) strcpy (melt,s);
X if ((info_str (DECODE,s,512) == (char *) NULL) || ((decode = (char *) malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X decode = DECODE;
X else
X (void) strcpy (decode,s);
X
X if ((info_str (RNEWSLOG,s,512) == (char *) NULL) || ((lpfn = (char *) malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X lpfn = LPFN;
X else
X (void) strcpy (lpfn,s);
X
X if ((info_str (RNEWS_SPOOL, s, 512) == (char *) NULL) || ((rnews_spool = malloc ((unsigned int) strlen (s) + 2)) == (char *) NULL))
X rnews_spool = RNEWS_SPOOLDIR;
X else
X (void) strcpy (rnews_spool, s);
X
X if (access (lpfn,S_IWRITE) < 0)
X lp = NULL;
X else
X lp = fopen (lpfn,"a");
X
X logit (0,"=== Started (Level %d) ===\n",Debug);
X error = 0;
X lost = 0;
X yet = 0;
X articles = 0;
X start_rnews (0,i);
X (void) close (i);
X _unlink (tmp);
X logit (0,"Exits with error %d (Received %d articles)\n",error, articles);
X
X if (lp) {
X (void) fclose (lp);
X lp = NULL;
X }
X if (lost)
X send_mail (lost, articles);
X exit (error & FATAL ? error : 0);
X}
X
Xvoid
Xstart_rnews (fd,i)
Xint fd;
Xint i;
X{
X char s[512], sav;
X int len,mode;
X int n;
X
X len = -1;
X mode = NONE;
X while ((n = readln (fd,s,512)) > 0) {
X sav = s[n-1];
X s[n-1] = '\0';
X logit (6,"Start_rnews reads '%s'\n",s);
X if (*s == '#')
X if (!strncmp (s,BATCHHEAD,BATCHLEN)) {
X len = get_len (s);
X logit (1,"Receive batched, len = %d\n",len);
X mode = BATCH;
X break;
X } else if (!strncmp (s,COMHEAD,COMLEN)) {
X logit (1,"Receive batch/compr\n");
X mode = COM;
X break;
X } else if (!strncmp (s,COM7HEAD,COM7LEN)) {
X logit (1,"Receive batch/compr/encode\n");
X mode = COM7;
X break;
X } else if (!strncmp (s,FREHEAD,FRELEN)) {
X logit (1,"Receive batch/freeze\n");
X mode = FRE;
X break;
X } else if (!strncmp (s,FRE7HEAD,FRE7LEN)) {
X logit (1,"Receive batch/freeze/encode\n");
X mode = FRE7;
X break;
X } else {
X (void) writeln (i,s,(unsigned int) (n - 1));
X (void) writeln (i, &sav, 1);
X }
X else {
X (void) writeln (i,s,(unsigned int) (n - 1));
X (void) writeln (i, &sav, 1);
X }
X }
X if (yet & (1<<mode)) {
X logit (2,"ERROR: This batch already done\n");
X error |= SIMPLE;
X return;
X } else
X yet |= 1<<mode;
X switch (mode) {
X case NONE:
X (void) lseek (i,0,0);
X n = _gs_size (i);
X logit (3,"Send single File, size = %d\n",n);
X (void) send_to_inews (i,n);
X break;
X case BATCH:
X logit (3,"Send batch to inews\n");
X while ((len = send_to_inews (fd,len)) != -1)
X logit (3,"Sent, next len = %d\n",len);
X logit (3,"Finished sending batch to inews\n");
X break;
X case COM:
X case FRE:
X logit (3,"Send compress\n");
X compr (fd,i,mode == COM ? uncompress : melt);
X break;
X case COM7:
X case FRE7:
X logit (3,"Send compress/encode\n");
X compr7 (fd,i,mode == COM7 ? uncompress : melt);
X break;
X }
X}
__END__OF__THIS__FILE__
if test -f 'RNEWS/rnews.h' ; then
echo 'File RNEWS/rnews.h already exists, overwriting it'
del 'RNEWS/rnews.h'
fi
echo Extracting \"'RNEWS/rnews.h'\"
sed "s/^X//" >'RNEWS/rnews.h' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: rnews.h_v $
X * Revision 1.1 90/08/31 15:38:22 ud
X * Initial revision
X *
X */
X# include "news.h"
X
X# define RNEWSLOG "rnews.logfile"
X# define LPFN MNEWS_RNEWS_LOGFILE
X
X# define RNEWS_SPOOL "RNEWS.DIR"
X# define RNEWS_SPOOLDIR MNEWS_RNEWS_SPOOLDIR
X# define RNEWS_SPOOLSEQ ".seq"
X
X# ifndef EXTERN
X# define EXTERN extern
X# endif EXTERN
X
XEXTERN char *inews;
XEXTERN char *uncompress;
XEXTERN char *melt;
XEXTERN char *decode;
XEXTERN int error;
X
XEXTERN FILE *lp;
XEXTERN char *lpfn;
XEXTERN char *rnews_spool;
XEXTERN int Debug;
XEXTERN int articles;
XEXTERN int lost;
X
X# define _unlink(s) if (Debug < 3) (void) unlink(s)
__END__OF__THIS__FILE__
if test -f 'RNEWS/send.c' ; then
echo 'File RNEWS/send.c already exists, overwriting it'
del 'RNEWS/send.c'
fi
echo Extracting \"'RNEWS/send.c'\"
sed "s/^X//" >'RNEWS/send.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: send.c_v $
X * Revision 1.1 90/08/31 15:38:45 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: send.c_v 1.1 90/08/31 15:38:45 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <ctype.h>
X# include <modes.h>
X# include "rnews.h"
X
Xextern void logit ();
Xextern char *realloc ();
Xextern FILE *xpopen ();
X
Xvoid save_it ();
X
Xint
Xget_len (s)
Xregister char *s;
X{
X if (strlen (s) <= BATCHLEN)
X return (-1);
X s += BATCHLEN;
X while (*s && (!isdigit (*s)))
X ++s;
X if (!*s)
X return (-1);
X else
X return (atoi (s));
X}
X
Xint
Xsend_to_inews (fd,len)
Xint fd,len;
X{
X static char *buf = NULL;
X static int csiz = 0;
X char s[512];
X int n;
X int asone;
X FILE *fp;
X int nlen;
X
X if (!(fp = xpopen (inews,"w"))) {
X logit (1,"Can't execute '%s'\n", inews);
X error |= FATAL;
X return (FALSE);
X }
X asone = FALSE;
X if (len > csiz) {
X while (len > csiz)
X csiz += 2048;
X if (!(buf = (char *) realloc (buf,(unsigned int) (csiz + 5)))) {
X csiz = 0;
X while ((len > 0) && ((n = readln (fd,s,512)) > 0)) {
X s[n] = '\0';
X logit (6,"Send line '%s' to %s\n", s, inews);
X (void) fputs (s,fp);
X len -= n;
X }
X asone = FALSE;
X }
X }
X if (len <= csiz)
X if ((n = read (fd,buf,(unsigned int) len)) == len) {
X logit (4,"Send article with %d Bytes to %s\n", len, inews);
X (void) fwrite (buf,n,1,fp);
X asone = TRUE;
X } else
X logit (2,"ERROR: Can't send to %s (reached eof, errno = %d)\n", inews, errno);
X nlen = -1;
X while ((n = readln (fd,s,512)) > 0) {
X s[n] = '\0';
X if (!strncmp (s,BATCHHEAD,BATCHLEN)) {
X nlen = get_len (s);
X logit (3,"Got next batchentry, len = %d\n",nlen);
X break;
X } else
X logit (6,"Skiping junk '%s'\n",s);
X }
X n = pclose (fp);
X logit (n ? 2 : 3,"Pclose returns %d\n",n);
X if (n)
X if (asone) {
X save_it (buf, len);
X ++lost;
X error |= SIMPLE;
X } else
X error |= FATAL;
X ++articles;
X return (nlen);
X}
X
Xvoid
Xsave_it (buf, len)
Xchar *buf;
Xint len;
X{
X char seq[128];
X char fn[128];
X int fd;
X int nr;
X int t;
X
X (void) sprintf (seq, "%s/%s", rnews_spool, RNEWS_SPOOLSEQ);
X t = 20;
X do {
X if (access (seq, S_IREAD | S_IWRITE) < 0) {
X fd = create (seq, S_IWRITE | S_ISHARE, 03 | S_ISHARE);
X nr = 1;
X } else {
X fd = open (seq, S_IREAD | S_IWRITE | S_ISHARE);
X if (fd > 0) {
X (void) read (fd, &nr, 4);
X (void) lseek (fd, 0, 0L);
X }
X }
X if (fd < 0)
X sleep (1);
X } while ((fd < 0) && (t-- > 0));
X if (fd < 0) {
X logit (2, "Can't get spool-seq (errno = %d)\n", errno);
X error |= FATAL;
X return;
X }
X (void) sprintf (fn, "%s/%05d", rnews_spool, nr++);
X (void) write (fd, &nr, 4);
X (void) close (fd);
X while (access (fn, 0) == 0)
X (void) strcat (fn, "a");
X if ((fd = create (fn, S_IWRITE, 03)) < 0) {
X logit (2, "Can't create spoolfile '%s'\n", fn);
X error |= FATAL;
X return;
X }
X (void) write (fd, buf, (unsigned int) len);
X (void) close (fd);
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/Makefile' ; then
echo 'File SBATCH/Makefile already exists, overwriting it'
del 'SBATCH/Makefile'
fi
echo Extracting \"'SBATCH/Makefile'\"
sed "s/^X//" >'SBATCH/Makefile' <<'__END__OF__THIS__FILE__'
X# $Id: Makefile_v 1.1 90/08/31 15:40:27 ud Exp $
X# $Log: Makefile_v $
X# Revision 1.1 90/08/31 15:40:27 ud
X# Initial revision
X#
X#
XCC= cc
XG= -g
XCFLAGS= -qt=/dd/TMP $G -v=.. -v=../8BIT
XLIBS= -l=/dd/LIB/os9lib.l -l=/h3/LIB/8bit.l
XLFLAGS= -q $(LIBS) $G
XODIR= /h0/ETC/CMDS
X
XBATCHC= sbatch.c batch.c none.c com.c com7.c file.c exec.c conv.c
XBATCHR= sbatch.r batch.r none.r com.r com7.r file.r exec.r conv.r
X
X$(ODIR)/sbatch: $(BATCHR)
X $(CC) $(LFLAGS) $(BATCHR) -f=$(ODIR)/sbatch
X fixmod -uo2.39 -ua8002 $(ODIR)/sbatch
X
Xtags: $(BATCHC)
X echo "Ctags:" $?
X ctags $?
X
Xsbatch.r: sbatch.c sbatch.h
__END__OF__THIS__FILE__
if test -f 'SBATCH/batch.c' ; then
echo 'File SBATCH/batch.c already exists, overwriting it'
del 'SBATCH/batch.c'
fi
echo Extracting \"'SBATCH/batch.c'\"
sed "s/^X//" >'SBATCH/batch.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: batch.c_v $
X * Revision 1.1 90/08/31 15:40:10 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: batch.c_v 1.1 90/08/31 15:40:10 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <modes.h>
X# include <dir.h>
X# include "sbatch.h"
X
Xextern void closedir ();
Xextern void send_file ();
Xextern void free ();
Xextern long lseek ();
Xextern char *conv_8bit ();
Xextern char *malloc ();
Xextern char *mktemp ();
Xextern char *strcat ();
Xextern char *strcpy ();
Xextern DIR *opendir ();
Xextern struct direct *readdir ();
X
Xvoid
Xsend_batch (fd, sys)
Xint fd;
Xchar *sys;
X{
X char tmp[40 + sizeof (TEMPDIR)];
X int i;
X
X (void) sprintf (tmp, "%s/s_bt.XXXXXX", TEMPDIR);
X (void) mktemp (tmp);
X while ((i = make_batch (fd, tmp)) != -1) {
X send_file (sys, i);
X (void) unlink (tmp);
X }
X if (!access (tmp,0))
X (void) unlink (tmp);
X}
X
Xvoid
X_copy (in,out)
Xregister int in, out;
X{
X static char *_bufptr = NULL;
X static char sbuf[130];
X static int siz;
X register int n;
X register char *buf;
X
X if (!_bufptr) {
X siz = 20000;
X while (siz && (!(_bufptr = malloc (siz + 16))))
X siz -= 1000;
X if (!siz) {
X siz = 128;
X _bufptr = sbuf;
X }
X }
X buf = _bufptr;
X while ((n = read (in,buf,siz)) > 0)
X (void) write (out,buf,(unsigned int) n);
X}
X
Xint
Xmake_batch (fd, tmp)
Xint fd;
Xchar *tmp;
X{
X int found;
X char s[128];
X int o,i,siz,fsiz;
X char *fn;
X int n;
X
X if ((o = create (tmp,S_IWRITE | S_IREAD,03,0)) < 0) {
X (void) fprintf (stderr,"Can't create '%s' (errno = %d)\n",tmp,errno);
X error = TRUE;
X return (-1);
X }
X found = FALSE;
X fsiz = 0;
X while ((n = readln (fd, buffer, 500)) > 0) {
X buffer[n-1] = '\0';
X fprintf (stderr, "Spooling %s\n", buffer);
X if (!(fn = conv_8bit (buffer)))
X continue;
X if ((i = open (fn, S_IREAD)) < 0) {
X fprintf (stderr, "File %s doesn't exists?!?\n", fn);
X continue;
X }
X siz = _gs_size (i);
X (void) sprintf (s,"%s %d\n",BATCHHEAD,siz);
X (void) write (o,s,(unsigned int) strlen (s));
X _copy (i,o);
X (void) close (i);
X unlink (fn);
X found = TRUE;
X fsiz += siz;
X if (fsiz > maxsiz)
X break;
X }
X if (found) {
X lseek (o, 0, 0);
X return (o);
X } else {
X close (o);
X return (-1);
X }
X}
X
X
__END__OF__THIS__FILE__
if test -f 'SBATCH/com.c' ; then
echo 'File SBATCH/com.c already exists, overwriting it'
del 'SBATCH/com.c'
fi
echo Extracting \"'SBATCH/com.c'\"
sed "s/^X//" >'SBATCH/com.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: com.c_v $
X * Revision 1.1 90/08/31 15:40:13 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: com.c_v 1.1 90/08/31 15:40:13 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <types.h>
X# include <modes.h>
X# include "sbatch.h"
X
Xextern void free ();
Xextern void send_file ();
Xextern long lseek ();
Xextern char *index ();
Xextern char *malloc ();
Xextern char *mktemp ();
Xextern char *strcpy ();
X
Xvoid
Xlfcr (fd)
Xregister int fd;
X{
X static char *_bufptr = NULL;
X static char sbuf[130];
X static u_int siz;
X register char *buf;
X register char *x;
X register u_int temp;
X register int n;
X
X if (!_bufptr) {
X siz = 20000;
X while (siz && (!(_bufptr = malloc (siz + 5))))
X siz -= 1000;
X if (!siz) {
X siz = 128;
X _bufptr = sbuf;
X }
X }
X buf = _bufptr;
X while ((n = read (fd,buf,siz)) > 0) {
X (void) lseek (fd,(long) -n,1);
X temp = (u_int) n;
X x = buf;
X while (n-- > 0) {
X if (*x && (index ("\l\r",*x) != (char *) NULL))
X *x = *x == '\l' ? '\r' : '\l';
X ++x;
X }
X (void) write (fd,buf,temp);
X }
X}
X
Xvoid
Xsend_com (fd, sys, mode)
Xint fd;
Xchar *sys;
Xint mode;
X{
X char tmp[40 + sizeof (TEMPDIR)];
X int i;
X
X (void) sprintf (tmp, "%s/s_bt.XXXXXX", TEMPDIR);
X (void) mktemp (tmp);
X while ((i = make_batch (fd, tmp)) != -1) {
X lfcr (i);
X (void) lseek (i,0,0);
X i = compress_it (i,tmp,mode == COM ? compress : freeze, TRUE);
X if (i != -1)
X send_file (sys,i);
X (void) unlink (tmp);
X }
X if (!access (tmp,0))
X (void) unlink (tmp);
X}
X
Xvoid
Xexec_cprs (cmd)
Xchar *cmd;
X{
X int t,pid,status;
X
X pid = _exec (cmd);
X if (pid < 0) {
X (void) fprintf (stderr,"Can't fork '%s' (errno = %d)\n", cmd, errno);
X error = TRUE;
X return;
X } else
X while (((t = wait (&status)) != pid) && (t != -1))
X ;
X if (status) {
X (void) fprintf (stderr,"'%s' returns %d (errno = %d)\n",cmd,status,errno);
X error = TRUE;
X }
X return;
X}
X
Xint
Xcompress_it (fd,sf,cmd,header)
Xint fd;
Xchar *sf;
Xchar *cmd;
Xint header;
X{
X char tmp[40 + sizeof (TEMPDIR)];
X int o0, o1;
X int o;
X
X fprintf (stderr, "Compress %d bytes\n", _gs_size (fd));
X (void) sprintf (tmp, "%s/cpr.XXXXXX", TEMPDIR);
X (void) mktemp (tmp);
X if ((o = create (tmp,S_IREAD | S_IWRITE,03, 0)) < 0) {
X (void) fprintf (stderr,"Can't create '%s' (errno = %d)\n",tmp,errno);
X error = TRUE;
X return (-1);
X }
X if (header) {
X (void) write (o,COMHEAD,COMLEN);
X (void) write (o,"\l",1);
X }
X o0 = dup (0);
X o1 = dup (1);
X (void) close (0);
X (void) dup (fd);
X (void) close (fd);
X (void) close (1);
X (void) dup (o);
X exec_cprs (cmd);
X (void) close (0);
X (void) dup (o0);
X (void) close (1);
X (void) dup (o1);
X (void) close (o0);
X (void) close (o1);
X (void) lseek (o,0,0);
X lfcr (o);
X (void) lseek (o,0,0);
X (void) unlink (sf);
X (void) strcpy (sf,tmp);
X return (o);
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/com7.c' ; then
echo 'File SBATCH/com7.c already exists, overwriting it'
del 'SBATCH/com7.c'
fi
echo Extracting \"'SBATCH/com7.c'\"
sed "s/^X//" >'SBATCH/com7.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: com7.c_v $
X * Revision 1.1 90/08/31 15:40:17 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: com7.c_v 1.1 90/08/31 15:40:17 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <modes.h>
X# include "sbatch.h"
X
Xextern void lfcr ();
Xextern void send_file ();
Xextern long lseek ();
Xextern char *mktemp ();
Xextern char *strcpy ();
X
Xvoid
Xsend_com7 (fd, sys, mode)
Xint fd;
Xchar *sys;
Xint mode;
X{
X char tmp[40 + sizeof (TEMPDIR)],
X tmp2[40 + sizeof (TEMPDIR)];
X int i, status, t;
X int o, o0, o1;
X int pid;
X
X (void) sprintf (tmp, "%s/s_bt.XXXXXX", TEMPDIR);
X (void) mktemp (tmp);
X while ((i = make_batch (fd, tmp)) != -1) {
X lfcr (i);
X (void) lseek (i,0,0);
X i = compress_it (i,tmp,mode == COM7 ? compress : freeze, FALSE);
X (void) sprintf (tmp2, "%s/enc.XXXXXX", TEMPDIR);
X (void) mktemp (tmp2);
X if ((o = create (tmp2,S_IREAD | S_IWRITE,03, 0)) < 0) {
X (void) fprintf (stderr,"Can't create tmp2 '%s' (errno = %d)\n",tmp2,errno);
X (void) close (i);
X (void) unlink (tmp);
X error = TRUE;
X return;
X }
X (void) write (o,COM7HEAD,COM7LEN);
X (void) write (o,"\n",1);
X o0 = dup (0);
X (void) close (0);
X (void) dup (i);
X (void) close (i);
X o1 = dup (1);
X (void) close (1);
X (void) dup (o);
X pid = _exec (encode);
X (void) close (1);
X (void) dup (o1);
X (void) close (0);
X (void) dup (o0);
X if (pid < 0) {
X (void) fprintf (stderr,"Can't fork '%s' (errno = %d)\n",encode,errno);
X error = TRUE;
X }
X while (((t = wait (&status)) != pid) && (t != -1))
X ;
X if (status) {
X (void) fprintf (stderr,"'%s' retuns %d (errno = %d)\n",encode,status,errno);
X error = TRUE;
X }
X (void) unlink (tmp);
X (void) lseek (o,0,0);
X send_file (sys,o);
X (void) unlink (tmp2);
X }
X if (!access (tmp,0))
X (void) unlink (tmp);
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/conv.c' ; then
echo 'File SBATCH/conv.c already exists, overwriting it'
del 'SBATCH/conv.c'
fi
echo Extracting \"'SBATCH/conv.c'\"
sed "s/^X//" >'SBATCH/conv.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: conv.c_v $
X * Revision 1.1 90/08/31 15:41:09 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: conv.c_v 1.1 90/08/31 15:41:09 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <c8type.h>
X# include <types.h>
X# include <modes.h>
X# include "sbatch.h"
X
Xextern char *strdup ();
X
Xstatic char *ext_tab[256];
X
Xchar *
Xconv_8bit (ofn)
Xchar *ofn;
X{
X static char tmpfn[40 + sizeof (TEMPDIR)];
X FILE *ifp, *ofp;
X int fd;
X int siz;
X char buf[258];
X int rconv;
X int sizlimit;
X register char *text;
X register int n, t;
X register char *ptr;
X
X sprintf (tmpfn, "%s/convXXXXXX", TEMPDIR);
X mktemp (tmpfn);
X rconv = convmode;
X sizlimit = maxartsiz;
X if (index (ofn, '|')) {
X while (*ofn != '|')
X switch (to8lower (*ofn++)) {
X case 'n':
X rconv = FALSE;
X break;
X case 'c':
X rconv = TRUE;
X break;
X case 's':
X sizlimit = atoi (*ofn == '=' ? ofn + 1 : ofn) << 10;
X break;
X }
X while ((*ofn != '|') && (*ofn != ','))
X ++ofn;
X ++ofn;
X }
X if (! (ifp = fopen (ofn, "r"))) {
X fprintf (stderr, "Can't open %s\n", ofn);
X return (NULL);
X }
X if ((siz = _gs_size (fileno (ifp))) < 0)
X siz = 4096;
X if ((sizlimit != -1) && (siz > sizlimit)) {
X fprintf (stderr, "File exceeds limit of %d kByte (article %s has %d kBytes)\n",
X (sizlimit >> 10) + 1, ofn, (siz >> 10) + 1);
X fclose (ifp);
X return (NULL);
X }
X if ((fd = create (tmpfn, S_IWRITE | S_ISIZE, 03, siz)) != -1) {
X if (! (ofp = fdopen (fd, "w")))
X close (fd);
X } else
X ofp = NULL;
X if (! ofp) {
X fprintf (stderr, "Can't create tempfile %s\n", tmpfn);
X fclose (ifp);
X return (NULL);
X }
X while (fgets (buf, 256, ifp)) {
X n = strlen (buf);
X if (rconv) {
X ptr = buf;
X t = n;
X while (t-- > 0)
X if (!(text = ext_tab[((unsigned char) *ptr++)]))
X putc (*(ptr - 1), ofp);
X else
X fputs (text, ofp);
X } else
X fputs (buf, ofp);
X }
X fclose (ifp);
X fclose (ofp);
X return (tmpfn);
X}
X
Xstatic char *
Xget_tab (s, c)
Xchar *s;
Xunsigned char *c;
X{
X char *ptr;
X
X ptr = s;
X while (*s && (!is8space (*s)))
X ++s;
X if (!*s)
X return (NULL);
X *s++ = '\0';
X while (is8space (*s))
X ++s;
X if (*s == '\\')
X ++s;
X *c = 0;
X switch (*ptr) {
X case '#':
X ++ptr;
X /* Fall through ... */
X case '1': case '2': case '3': case '4': case '5':
X case '6': case '7': case '8': case '9':
X while (*ptr && index ("0123456789", *ptr)) {
X *c *= 10;
X *c += *ptr++ - '0';
X }
X break;
X case '0':
X ++ptr;
X if (*ptr != 'x') {
X while (*ptr && index ("01234567", *ptr)) {
X *c *= 8;
X *c += *ptr++ - '0';
X }
X break;
X }
X /* Fall through ... */
X case '$':
X ++ptr;
X while (*ptr && index ("01234567890abcdefABCDEF", *ptr)) {
X *c *= 16;
X *c += (((*ptr >= '0' && *ptr <= '9')) ? (*ptr - '0') :
X (((*ptr >= 'a' && *ptr <= 'f')) ? (*ptr - 'a' + 10) :
X (*ptr - 'A' + 10)));
X ++ptr;
X }
X break;
X case '\\':
X ++ptr;
X /* Fall through ... */
X default:
X *c = *ptr;
X break;
X }
X return (s);
X}
X
Xvoid
Xsetup_8bit ()
X{
X register int t;
X char *buf;
X int fd, n;
X char *ptr;
X unsigned char c;
X
X for (t = 0; t < 256; ++t)
X ext_tab[t] = NULL;
X if (!(buf = malloc (strlen (newslib) + 64)))
X exit (_errmsg (1, "Can't alloc in setup_8bit for buffer.\n"));
X sprintf (buf, "%s/%s", newslib, EXT_TAB);
X if ((fd = open (buf, S_IREAD)) != -1) {
X while ((n = readln (fd, buf, 64)) > 0) {
X if ((n == 1) || (buf[0] == '#'))
X continue;
X buf[n - 1] = '\0';
X if (ptr = get_tab (buf, &c))
X if (!(ext_tab[c] = strdup (ptr)))
X exit (_errmsg (1, "Can't alloc for conv-table.\n"));
X }
X close (fd);
X }
X free (buf);
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/exec.c' ; then
echo 'File SBATCH/exec.c already exists, overwriting it'
del 'SBATCH/exec.c'
fi
echo Extracting \"'SBATCH/exec.c'\"
sed "s/^X//" >'SBATCH/exec.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: exec.c_v $
X * Revision 1.1 90/08/31 15:40:25 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: exec.c_v 1.1 90/08/31 15:40:25 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include "sbatch.h"
X
Xextern void free ();
Xextern char *malloc ();
Xextern char *findmod ();
Xextern char *strcpy ();
X
Xint
X_exec (lcmd)
Xchar *lcmd;
X{
X char **arg;
X int pid, t;
X register char *x;
X char *cmd;
X
X if ((cmd = malloc ((unsigned int) (strlen (lcmd) + 5))) == (char *) NULL) {
X (void) fprintf (stderr,"Can't malloc (errno = %d)\n",errno);
X error = TRUE;
X return (-1);
X }
X (void) strcpy (cmd, lcmd);
X if (getargs (cmd, &arg) <= 0) {
X fprintf (stderr, "Can't split off %s\n", cmd);
X error = TRUE;
X return (-1);
X }
X pid = os9exec (os9forkc,findmod (arg[0], arg[0]),arg,environ,0,0,3);
X free (cmd);
X free ((char *) arg);
X return (pid);
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/file.c' ; then
echo 'File SBATCH/file.c already exists, overwriting it'
del 'SBATCH/file.c'
fi
echo Extracting \"'SBATCH/file.c'\"
sed "s/^X//" >'SBATCH/file.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: file.c_v $
X * Revision 1.1 90/08/31 15:40:22 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: file.c_v 1.1 90/08/31 15:40:22 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include "sbatch.h"
X
Xextern void free ();
Xextern char *index ();
X
Xint
Xexec_xmit (sys)
Xchar *sys;
X{
X char *cmd;
X int pid;
X register char *p1, *p2, *p3;
X int siz;
X int t;
X
X for (t = 0; t < 2; ++t) {
X if (!t) {
X siz = 0;
X p1 = command;
X } else {
X if (!(cmd = malloc (siz + 32)))
X return (-1);
X p1 = command;
X p2 = cmd;
X }
X while (*p1)
X if (*p1 == '%') {
X ++p1;
X switch (*p1) {
X case 'G':
X if (!t)
X ++siz;
X else {
X if (grade)
X *p2++ = grade;
X else
X *p2++ = DEF_GRADE;
X }
X ++p1;
X break;
X case 'S':
X if (!t)
X siz += strlen (sys);
X else {
X p3 = sys;
X while (*p3)
X *p2++ = *p3++;
X }
X ++p1;
X break;
X default:
X if (!t)
X siz += 2;
X else {
X *p2++ = '%';
X *p2++ = *p1;
X }
X ++p1;
X break;
X }
X } else {
X if (!t)
X ++siz, ++p1;
X else
X *p2++ = *p1++;
X }
X }
X *p2 = '\0';
X pid = _exec (cmd);
X free (cmd);
X return (pid);
X}
X
Xvoid
Xsend_file (sys,fd)
Xchar *sys;
Xint fd;
X{
X int old0;
X int pid,status,ret;
X
X fprintf (stderr, "Sending %d bytes\n", _gs_size (fd));
X old0 = dup (0);
X (void) close (0);
X (void) dup (fd);
X (void) close (fd);
X pid = exec_xmit (sys);
X if (pid < 0)
X (void) fprintf (stderr,"Can't fork '%s' (errno = %d)\n",command,errno);
X (void) close (0);
X (void) dup (old0);
X (void) close (old0);
X if (pid < 0)
X error = TRUE;
X else
X while (((ret = wait (&status)) != -1) && (ret != pid))
X ;
X if (status) {
X (void) fprintf (stderr,"'%s' returns %d (errno = %d)\n",command,status,errno);
X error = TRUE;
X }
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/none.c' ; then
echo 'File SBATCH/none.c already exists, overwriting it'
del 'SBATCH/none.c'
fi
echo Extracting \"'SBATCH/none.c'\"
sed "s/^X//" >'SBATCH/none.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: none.c_v $
X * Revision 1.1 90/08/31 15:40:19 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: none.c_v 1.1 90/08/31 15:40:19 ud Exp $";
X# endif LINT
X# include <stdio.h>
X# include <modes.h>
X# include "sbatch.h"
X
Xextern void free ();
Xextern char *conv_8bit ();
Xextern char *malloc ();
Xextern char *strcat ();
Xextern char *strcpy ();
X
Xint
Xsend_single (fd, sys)
Xint fd;
Xchar *sys;
X{
X int i,old0,t,status,pid;
X int n;
X char *fn;
X
X while ((n = readln (fd, buffer, 500)) > 0) {
X buffer[n-1] = '\0';
X if (!(fn = conv_8bit (buffer)))
X continue;
X if ((i = open (fn, S_IREAD)) < 0)
X continue;
X old0 = dup (0);
X (void) close (0);
X (void) dup (i);
X (void) close (i);
X if ((pid = exec_xmit (sys)) < 0) {
X (void) fprintf (stderr,"Can't fork '%s' (errno = %d)\n",command,errno);
X error = TRUE;
X } else {
X while (((t = wait (&status)) != pid) && (t != -1))
X ;
X if (status) {
X (void) fprintf (stderr,"'%s' returns %d (errno = %d)\n",command,status,errno);
X error = TRUE;
X }
X }
X (void) close (0);
X (void) dup (old0);
X (void) close (old0);
X unlink (fn);
X }
X return (0);
X}
__END__OF__THIS__FILE__
if test -f 'SBATCH/sbatch.c' ; then
echo 'File SBATCH/sbatch.c already exists, overwriting it'
del 'SBATCH/sbatch.c'
fi
echo Extracting \"'SBATCH/sbatch.c'\"
sed "s/^X//" >'SBATCH/sbatch.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log: sbatch.c_v $
X * Revision 1.1 90/08/31 15:40:05 ud
X * Initial revision
X *
X */
X# ifndef LINT
Xstatic char rcsid[] = "$Id: sbatch.c_v 1.1 90/08/31 15:40:05 ud Exp $";
Xstatic char copyright[] = "Copyright (C) 1989, 1990 by Ulrich Dessauer, Germering, Germany.\n";
X# endif LINT
X# include <stdio.h>
X# include <c8type.h>
X# include <modes.h>
X# define EXTERN
X# include "sbatch.h"
X
Xextern char *info_str ();
Xextern char *malloc ();
Xextern char *rindex ();
Xextern char *strcpy ();
Xextern char *strdup ();
X
Xvoid get_info ();
X
Xchar *help[] = {
X "Syntax: sbatch [<opts>] <system> [<opts>]\n",
X "Function: sends spoolt newsarticle to <system>\n",
X "Options:\n",
X " -c Send articles compressed\n",
X " -c7 Send articles compressed and encoded\n",
X " -cf Use freeze as the compression program\n",
X " -cf7 Like c7 but use freeze\n",
X " -B=<bits> Number of bits for compress (12 - 16)\n",
X " -G=<grade> A grading character for the transport mechanism\n",
X " -b Send articles batched (default)\n",
X " -s Send articles as single files\n",
X " -C=<cmd> command to be used when sending articles\n",
X " -f=<nr> sets the maximum spoolfile size to <nr> kByte\n",
X " -a=<nr> sets the maximum size of a single article to <nr> kByte\n",
X " -n=<sys> if systemname for command differs from systemname in filename\n",
X " -t transform 8 bit characters into equivalent 7 bit replacements\n",
X NULL
X};
X
Xstatic void
Xusage ()
X{
X int t;
X
X for (t=0;help[t];++t)
X (void) fputs (help[t],stderr);
X}
X
Xstatic int
Xhand (sig)
Xint sig;
X{
X ++error;
X}
X
Xint
Xmain (argc,argv)
Xint argc;
Xchar *argv[];
X{
X register char *ptr;
X int mode;
X int freeze_it;
X char *system;
X char *sysfn;
X char *x;
X int t, u, st;
X char *spfn;
X int fd;
X char batchtmp[40 + sizeof (BATCH_TMP)];
X
X setuid (getmuid ());
X system = NULL;
X sysfn = NULL;
X mode = BATCH;
X command = NULL;
X maxsiz = DEF_MAXSIZ;
X maxartsiz = DEF_MAXARTSIZ;
X bitsize = DEF_BITSIZE;
X grade = DEF_GRADE;
X convmode = FALSE;
X error = FALSE;
X intercept (hand);
X for (t=1;t<argc;++t)
X if (*argv[t] == '-') {
X x = argv[t] + 1;
X while (*x) {
X switch (*x) {
X case 'b':
X ++x;
X mode = BATCH;
X break;
X case 'c':
X ++x;
X if (*x == 'f') {
X freeze_it = TRUE;
X ++x;
X } else
X freeze_it = FALSE;
X if (*x == '7') {
X mode = freeze_it ? FRE7 : COM7;
X ++x;
X } else
X mode = freeze_it ? FRE : COM;
X break;
X case 's':
X ++x;
X mode = NONE;
X break;
X case 'f':
X x += (*(x+1) == '=') ? 2 : 1;
X /* in kByte, so mult with 1024 */
X maxsiz = atoi (x) << 10;
X while (*x)
X ++x;
X break;
X case 'a':
X x += (*(x+1) == '=') ? 2 : 1;
X maxartsiz = atoi (x) << 10;
X while (*x)
X ++x;
X break;
X case 'B':
X x += (*(x+1) == '=') ? 2 : 1;
X u = atoi (x);
X if ((u >= 12) && (u <= 16))
X bitsize = u;
X while (*x)
X ++x;
X break;
X case 'G':
X x += (*(x+1) == '=') ? 2 : 1;
X grade = *x++;
X break;
X case 'C':
X x += (*(x+1) == '=') ? 2 : 1;
X command = x;
X while (*x)
X ++x;
X break;
X case 'n':
X x += (*(x+1) == '=') ? 2 : 1;
X sysfn = strdup (x);
X while (*x)
X ++x;
X break;
X case 't':
X ++x;
X convmode = TRUE;
X break;
X case '?':
X default:
X usage ();
X if (*x != '?')
X (void) fprintf (stderr,"Unknown Option '%c'\n",*x);
X exit (*x == '?');
X break;
X }
X }
X } else
X if (system)
X exit (_errmsg (1,"Can't send to more than one system at a time\n"));
X else
X system = argv[t];
X if (!system)
X exit (_errmsg (1, "Missing system\n"));
X get_info ();
X setup_8bit ();
X if (!command)
X command = transport;
X if (!sysfn)
X if (!(sysfn = strdup (system)))
X exit (_errmsg (1, "Can't alloc memory\n"));
X ptr = sysfn;
X while (*ptr)
X if (is8ascii (*ptr) && is8alnum (*ptr))
X ++ptr;
X else
X *ptr++ = '_';
X if (!(spfn = malloc (strlen (batchdir) + 40)))
X exit (_errmsg (1, "Can't alloc memory\n"));
X sprintf (spfn, "%s/%s", batchdir, sysfn);
X if (access (spfn, 0) < 0)
X exit (_errmsg (0, "No aritcle spooled\n"));
X if (chdir (newsdir) < 0)
X exit (_errmsg (1, "Can't chdir to %s\n", newsdir));
X sprintf (batchtmp, "%s.%d.%.24s", BATCH_TMP, getpid (), sysfn);
X batchtmp[28] = '\0';
X# if 0
X t = 20;
X while (((st = info_lock (BATCHLOCK,-1)) < 0) && (t-- > 0))
X (void) sleep (1);
X if (st < 0)
X exit (_errmsg (1,"Unable to lock '%s'\n", BATCHLOCK));
X# endif
X error = rename (spfn, batchtmp);
X# if 0
X info_unlock (BATCHLOCK);
X# endif
X if (error)
X exit (_errmsg (1, "Can't rename %s to %s\n", spfn, batchtmp));
X fprintf (stderr, "Spooling news for %s\n", system);
X sprintf (spfn, "%s/%s", batchdir, batchtmp);
X if ((fd = open (spfn, S_IREAD)) < 0)
X exit (_errmsg (1, "Can't open %s\n", spfn));
X switch (mode) {
X case NONE:
X (void) send_single (fd, system);
X break;
X case BATCH:
X send_batch (fd, system);
X break;
X case COM:
X case FRE:
X /* increase maxsiz by 80% */
X maxsiz = (maxsiz * 180) / 100;
X send_com (fd, system, mode);
X break;
X case COM7:
X case FRE7:
X /* increase maxsiz by 40% */
X maxsiz = (maxsiz * 140) / 100;
X send_com7 (fd, system, mode);
X break;
X default:
X exit (_errmsg (1,"Unknown mode %d\n",mode));
X break;
X }
X close (fd);
X if (!error)
X unlink (spfn);
X else
X rename (spfn, sysfn);
X if (error)
X (void) fprintf (stderr,"Error = %d\n",error);
X exit (error);
X}
X
Xvoid
Xget_info ()
X{
X char s[256];
X
X if ((info_str (COMPRESS,s,250) == (char *) NULL) || ((compress = malloc ((unsigned int) (strlen (s) + 10))) == (char *) NULL)) {
X if (!(compress = malloc (sizeof (COMPRESS) + 10)))
X exit (_errmsg (1, "Can't alloc memory.\n"));
X strcpy (compress, COMPRESS);
X } else
X (void) strcpy (compress,s);
X if (bitsize != DEF_BITSIZE) {
X sprintf (s, "-b%d", bitsize);
X strcat (compress, s);
X }
X if ((info_str (FREEZE,s,250) == (char *) NULL) || ((freeze = malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X freeze = FREEZE;
X else
X (void) strcpy (freeze,s);
X if ((info_str (ENCODE,s,250) == (char *) NULL) || ((encode = malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X encode = ENCODE;
X else
X (void) strcpy (encode,s);
X if ((info_str (TRANSPORT, s, 250) == (char *) NULL) || ((transport = malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X transport = TRANSPORT_DFLT;
X else
X (void) strcpy (transport, s);
X if ((info_str (BATCHDIR,s,250) == (char *) NULL) || ((batchdir = malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X batchdir = DEF_BATCHDIR;
X else
X (void) strcpy (batchdir,s);
X if ((info_str (NEWSDIR,s,250) == (char *) NULL) || ((newsdir = malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X newsdir = DEF_NEWSDIR;
X else
X (void) strcpy (newsdir,s);
X if ((info_str (LIBDIR,s,250) == (char *) NULL) || ((newslib = malloc ((unsigned int) (strlen (s) + 2))) == (char *) NULL))
X newslib = DEF_LIBDIR;
X else
X (void) strcpy (newslib,s);
X}
__END__OF__THIS__FILE__
exit 0
: end of shell archive
--
Frank Kaefer # fkk@stasys.sta.sub.org # Starnberg, Germany
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads