home *** CD-ROM | disk | FTP | other *** search
- Xref: sparky de.comp.sources.os9:6 comp.os.os9:1548
- Path: sparky!uunet!zaphod.mps.ohio-state.edu!cs.utexas.edu!sun-barr!news2me.EBay.Sun.COM!seven-up.East.Sun.COM!sungy!stasys!stasys!not-for-mail
- From: frank.kaefer@stasys.sta.sub.org (Frank Kaefer)
- Newsgroups: de.comp.sources.os9,comp.os.os9
- Subject: MNews Prerelease Part08/09
- Message-ID: <1hafdpINNptp@stasys.sta.sub.org>
- Date: 23 Dec 92 19:41:45 GMT
- Sender: news@stasys.sta.sub.org
- Followup-To: de.comp.sources.d
- Organization: Stasys News Server, Starnberg, Germany
- Lines: 1958
- Approved: frank.kaefer@stasys.sta.sub.org (Frank Kaefer)
- NNTP-Posting-Host: stasys.sta.sub.org
-
- 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
-