From: frank.kaefer@stasys.sta.sub.org (Frank Kaefer)
Newsgroups: de.comp.sources.os9,comp.os.os9
Subject: MNews Prerelease Part01/09
Date: 23 Dec 92 19:41:22 GMT
Followup-To: de.comp.sources.d
Organization: Stasys News Server, Starnberg, Germany
NNTP-Posting-Host: stasys.sta.sub.org

Submitted-by: Ulrich Dessauer <ud@Nightmare.ddt.sub.org>
Archive-name: mnews/part01

: ----- Cut here ----- Cut here ----- Cut here ----- Cut here -----
: Use  sh filename  to extract shell archive
: This shell archive contains following files:
:     'MANIFEST                                     5347 bytes'
:     'Copyright                                     663 bytes'
:     'inst.prf                                     6163 bytes'
:     '8BIT                                        (Directory)'
:     'INEWS                                       (Directory)'
:     'LIB                                         (Directory)'
:     'LOCK                                        (Directory)'
:     'MAN                                         (Directory)'
:     'MISC                                        (Directory)'
:     'RNEWS                                       (Directory)'
:     'SBATCH                                      (Directory)'
:     'SH                                          (Directory)'
:     'config.h                                     6195 bytes'
:     'news.h                                       2624 bytes'
:     'patchlevel.h                                   52 bytes'
:     'xc                                            315 bytes'
:     '8BIT/Makefile                                 400 bytes'
:     '8BIT/c8type.c                                6247 bytes'
:     '8BIT/c8type.h                                1416 bytes'
:     '8BIT/conv.c                                  3469 bytes'
:     '8BIT/inp.c                                   1516 bytes'
:     'INEWS/Makefile                               2889 bytes'
: 
if test -f 'MANIFEST' ; then
  echo 'File MANIFEST already exists, overwriting it'
  del 'MANIFEST'
fi
echo Extracting \"'MANIFEST'\"
sed "s/^X//" >'MANIFEST' <<'__END__OF__THIS__FILE__'
XFilename                  Part   Description
X----------------------------------------------------
XMANIFEST                  1      This shipping list
XCopyright                 1      Copyright notice
Xinst.prf                  1      installation guide
X8BIT                      1      Library for 8 bit support
XINEWS                     1      The main news manager program
XLIB                       1      Example files
XLOCK                      1      Library for event locking
XMAN                       1      Manual pages
XMISC                      1      Some utilities
XRNEWS                     1      Receive news
XSBATCH                    1      Send batched news
XSH                        1      Shellscripts for sh
Xconfig.h                  1      Global configuration include file
Xnews.h                    1      
Xpatchlevel.h              1      
Xxc                        1      
X8BIT/Makefile             1      
X8BIT/c8type.c             1      
X8BIT/c8type.h             1      
X8BIT/conv.c               1      
X8BIT/inp.c                1      
XINEWS/Makefile            1      
XINEWS/RELS                2      
XINEWS/achk.c              2      
XINEWS/adm.c               2      
XINEWS/alias.c             2      
XINEWS/app.c               2      
XINEWS/arc.c               2      
XINEWS/build.c             2      
XINEWS/ccan.c              2      
XINEWS/cchk.c              2      
XINEWS/cnew.c              2      
XINEWS/crct.c              2      
XINEWS/crm.c               2      
XINEWS/crth.c              2      
XINEWS/csme.c              3      
XINEWS/cssys.c             3      
XINEWS/csuu.c              3      
XINEWS/csver.c             3      
XINEWS/ctrl.c              3      
XINEWS/dbg.c               3      
XINEWS/ddst.c              3      
XINEWS/delh.c              3      
XINEWS/exp.c               3      
XINEWS/ext.h               3      
XINEWS/fcan.c              3      
XINEWS/ffrom.c             3      
XINEWS/ffup.c              3      
XINEWS/getd.c              3      
XINEWS/gfh.c               3      
XINEWS/ghead.c             3      
XINEWS/hact                3      
XINEWS/hash.c              3      
XINEWS/hist.h              3      
XINEWS/ihead.c             3      
XINEWS/inews.c             3      
XINEWS/inews.h             3      
XINEWS/inrd.c              4      
XINEWS/limit.c             4      
XINEWS/list.c              4      
XINEWS/mail.c              4      
XINEWS/makh.c              4      
XINEWS/mcan.c              4      
XINEWS/mhead.c             4      
XINEWS/mid.c               4      
XINEWS/misc.c              4      
XINEWS/mit.c               4      
XINEWS/oart.c              4      
XINEWS/ohist.c             4      
XINEWS/pargs.c             4      
XINEWS/pit.c               4      
XINEWS/pmail.c             4      
XINEWS/psys.c              5      
XINEWS/ract.c              5      
XINEWS/retr.c              5      
XINEWS/rhead.c             5      
XINEWS/rsat.c              5      
XINEWS/rsys.c              5      
XINEWS/sect.c              5      
XINEWS/shead.c             5      
XINEWS/sinfo.c             5      
XINEWS/sit.c               5      
XINEWS/spch.c              5      
XINEWS/store.c             5      
XINEWS/tsys.c              5      
XINEWS/uidummy.c           6      
XINEWS/unln.c              6      
XINEWS/wact.c              6      
XINEWS/wgrp.c              6      
XINEWS/wit.c               6      
XLIB/Active                6      
XLIB/Aliases               6      
XLIB/Archive               6      
XLIB/Checkgroups           6      
XLIB/Convtable             6      
XLIB/Distributions         6      
XLIB/Followup              6      
XLIB/Logfile               6      
XLIB/Sys                   6      
XLIB/send_uuname           6      
XLOCK/Makefile             6      
XLOCK/lock.c               6      
XLOCK/lock.h               6      
XMAN/8bit.prf              6      
XMAN/Active.prf            6      
XMAN/Checkgroups.prf       6      
XMAN/Delold.prf            6      
XMAN/Distributions.prf     6      
XMAN/Followup.prf          6      
XMAN/Inews.prf             6      
XMAN/Manuals.t.Z.uu        6      
XMAN/News_in.prf           7      
XMAN/News_out.prf          7      
XMAN/Rnews.prf             7      
XMAN/Sbatch.prf            7      
XMAN/Sys.prf               7      
XMISC/Makefile             7      
XMISC/decode.c             7      
XMISC/delold.c             7      
XMISC/encode.c             7      
XMISC/news_in.c            7      
XMISC/news_out.c           7      
XMISC/nstat.c              7      
XMISC/rot13.c              7      
XMISC/unmap.c              7      
XRNEWS/Makefile            7      
XRNEWS/compr.c             7      
XRNEWS/compr7.c            8      
XRNEWS/conv.c              8      
XRNEWS/logit.c             8      
XRNEWS/mail.c              8      
XRNEWS/rnews.c             8      
XRNEWS/rnews.h             8      
XRNEWS/send.c              8      
XSBATCH/Makefile           8      
XSBATCH/batch.c            8      
XSBATCH/com.c              8      
XSBATCH/com7.c             8      
XSBATCH/conv.c             8      
XSBATCH/exec.c             8      
XSBATCH/file.c             8      
XSBATCH/none.c             8      
XSBATCH/sbatch.c           8      
XSBATCH/sbatch.h           9      
XSH/check.sh               9      
XSH/install.sh             9      
XSH/respool.sh             9      
__END__OF__THIS__FILE__
if test -f 'Copyright' ; then
  echo 'File Copyright already exists, overwriting it'
  del 'Copyright'
fi
echo Extracting \"'Copyright'\"
sed "s/^X//" >'Copyright' <<'__END__OF__THIS__FILE__'
X			** ATTENTION **
X
X	The whole package is copyrighted by
X
X		Ulrich Dessauer
X		Kerschensteinerstr. 45
X		D-8034 Germering
X
X	Your are allowed to copy and modify the source to your
X	wishes, but you aren't allowed to
X	a.) sell parts or the whole package, so no part of source,
X	    documentation or other parts may be forwarded for profit.
X	b.) use this in an enviroment for which you charge the users.
X	c.) change the source and forward it without the original
X	d.) redistribute the package without this copyright notice.
X	e.) redistribute only parts of the package.
X
X	If you want to use the package for something mentioned above
X	contact me for a special agreement.
__END__OF__THIS__FILE__
if test -f 'inst.prf' ; then
  echo 'File inst.prf already exists, overwriting it'
  del 'inst.prf'
fi
echo Extracting \"'inst.prf'\"
sed "s/^X//" >'inst.prf' <<'__END__OF__THIS__FILE__'
X.define rcs-log
X$Log:	inst.prf_v $
XRevision 1.1  90/08/31  13:58:57  ud
XInitial revision
X
XCopyright (C) 1989, 1990 by Ulrich Dessauer, Germering, Germany.
X.en
X.m1 0
X.m2 0
X.nopaging
X.offset 5
X.rightmargin 70
X.ec \
X.ce
XMNews - pre 2. Release
X
X.ul
X1. Copyright
X
X.in +3
X.ti +2
XThis package is copyrighted by Ulrich Dessauer, Germering, Germany. 
XYou may copy and redistribute this package in whole but only in source
Xand this notice have to be included.  If you made changes then you have
Xto redistribute the original source as well.  Everything else isn't
Xpermitted by the athor; you must not sell the program for profit, you
Xmust not use it in a commercial enviroment and everything else which
Xisn't explicit allowed. 
X
X.ti +2
XThe programs
X.bold
Xencode
Xand
X.bold
Xdecode
Xaren't copyright by me, they are normally part of the BNews 2.11
Xdistribution and are only included to be compatible with this news
Xsystem.
X.in -3
X
X.ul
X2. Installing
X
X.in +3
X.ti +2
XBefore installing the software itself you have to edit your sysinfo
Xdatabase and add some entry for the package:
X.ce 2
Xlck.sbatch,l
Xlck.inews,l
X
X.ti +2
XThe news package needs an own account to run under this uid. I advice
Xto use an user `news' with a group `news'. Remember the uid and gid of
Xthis account; All binaries and configuration files have to be owned by
Xthis account (the file and on modules also the module).
X
X.ti +2
XYou should have unshared the package and find some subdirectories. The
Xdirectory where this paper can be found is now called the root directory
Xof the package. You can find a file `config.h' there; please edit it and
Xadapt it to your local system. This will be everywhere included where it
Xwill be useful.
X
X.ti +2
XThen go through all subdirectories and glance through the makefiles to
Xplace the binaries to proper places. Now compile the whole stuff and
Xcreate the necessary directories. On default these are
X.ce 7
X/h0/USR/LIB/NEWS
X/h0/USR/LIB/NEWS/HISTORY
X/h0/SPOOL/NEWS
X/h0/SPOOL/BATCH
X/h0/SPOOL/RNEWS
Xand
X/h0/SPOOL/TNEWS
X
X.ti +2
XCopy the files found in the `LIB' directory to /h0/USR/LIB/NEWS and
Xedit them to reflect your system.  The format of the files are explained
Xin the manual entries in the `MAN` subdirectory.  (Don't forget to
Xchange the owner of all these directories and files!)
X
X.ti +2
XNow log in as `news' (or just make `su news') and execute the
Xfollowing commands:
X.ce 2
Xinews -c=newgroup:control -v </nil
Xinews -c=newgroup:junk -v </nil
X
X.ti +2
XYou should then create (or get) a file called newsgroups where all
Xnewsgroups are listen (one per line) which you like to have on your
Xsystem. Execute the following command:
X.ce
Xinews -c=checkgroups -v <newsgroups
X
X.ti +2
XNow you can find a mail in the mailbox of the news account. The body
Xof the mail can be fed to `shell' to create all desired newsgroups.
XEverything of the package should now be installed correct. If you have
Xhad some problems have a short look in the logfile in `/h0/USR/LIB/NEWS'
Xwhere some hints may be found.
X
X.ti +2
XOr try the shellscript
X.bold
Xinstall.sh
Xto do the whole thing for you. I am not sure if it really does everthing
Xokay, but it is a handy way to do all theses steps by a program. To run
Xthis script, use `sh', not `shell' or `csh'!
X.in -3
X
X.ul
X3. Setting up the System
X
X.in +3
X.ti +2
XFor a regular use you need to install some entries for cron. First
Xallow the user `news' to use cron (vcron users have to add news as a
Xmember of the group `cron' in /h0/SYS/groups). For UUCP you have to
Xallow the command `rnews' to be executed by a remote machine. For every
Xsystem you feed news to you have to start the `sbatch' program before
Xthis system calls you (or you call it). This will collect all new
Xarticles and batch them for the remote system. If you like to use
Xcompressed sending you need the `compress' program (not the OS-9 one, a
Xgood working version can be found on TOP disks).
X
X.ti +2
XThe more news you receive the faster the available free space on your
Xharddisk will be eaten. So you need to delete old articles from time to
Xtime. This can be done by running `inews' with proper options (refer to
Xthe manual for the exact syntax of expire).
X
X.ti +2
XIf you like, you can run the shell-script
X.bold
Xcheck.sh
Xto glance over your installation and see if everything will be okay.
X.in -3
X
X.ul
X4. Reading and Writing News
X
X.in +3
X.ti +2
XThere are already some ports of newsreader for OS-9. The `NN' has been
Xported, `tass' has been ported and maybe a lot of other readers.
X
X.ti +2
XIf you like to write your own newsreader you can use the predefined
Xuser interface. For details refer to the source.
X.in -3
X
X.ul
X5. Internal
X
X.in +3
X.ti +2
XFirst of all, the programs `rnews' and `sbatch' had originally be
Xwritten for receiving compressed news to forward them to the notes
Xsystem. So the source style may differ from the inews program, but I
Xhope it is still understandable.
X
X.ti +2
XMNews stores the articles as single files in a directory tree matching
Xthe newsgroup of the article. All articles are found under
X/h0/SPOOL/NEWS. Some examples for filenames for some newsgroups (I asume
Xas the current number for each group a one; this will be increased on
Xevery new article in this group):
X.ce 3
Xsub.sources.os9 --> sub/sources/os9/1
Xjunk --> junk/1
Xcomp.lang.c++ --> comp/lang/c__/1
X
X.ti +2
XThe filename converting takes only on creating the filenames
Xthemselves place; the name of the newsgroup aren't changed. A feature of
Xnews are so called `crosspostings'. On UNIX(tm) systems the article in
Xtheses groups are linked together. OS-9 doesn't (officially) supports
Xlinks so MNews writes the article itself in the first newsgroup and in
Xall other newsgroup there is only the filename of the original article,
Xprefixed by some (hopefully) unique characters. In this release hardlinks
Xare also supported. To use hardlinks you must have a call
X.bold
Xlink()
Xanywhere and link it to the inews program. Some versions of this function
Xare available and you may include one into your `os9lib.l'.
X
X.ti +2
XSo if you want to adapt some software which is running on *IX you have
Xto change the accesses on the files in the lib-directory and on the
Xarticles themselves.
X
X.ce
XEnjoy Usenet on OSK!
__END__OF__THIS__FILE__
if test -d '8BIT' ; then
  echo 'Directory 8BIT already exists'
else
  echo Make directory \"'8BIT'\"
  makdir '8BIT'
fi
if test -d 'INEWS' ; then
  echo 'Directory INEWS already exists'
else
  echo Make directory \"'INEWS'\"
  makdir 'INEWS'
fi
if test -d 'LIB' ; then
  echo 'Directory LIB already exists'
else
  echo Make directory \"'LIB'\"
  makdir 'LIB'
fi
if test -d 'LOCK' ; then
  echo 'Directory LOCK already exists'
else
  echo Make directory \"'LOCK'\"
  makdir 'LOCK'
fi
if test -d 'MAN' ; then
  echo 'Directory MAN already exists'
else
  echo Make directory \"'MAN'\"
  makdir 'MAN'
fi
if test -d 'MISC' ; then
  echo 'Directory MISC already exists'
else
  echo Make directory \"'MISC'\"
  makdir 'MISC'
fi
if test -d 'RNEWS' ; then
  echo 'Directory RNEWS already exists'
else
  echo Make directory \"'RNEWS'\"
  makdir 'RNEWS'
fi
if test -d 'SBATCH' ; then
  echo 'Directory SBATCH already exists'
else
  echo Make directory \"'SBATCH'\"
  makdir 'SBATCH'
fi
if test -d 'SH' ; then
  echo 'Directory SH already exists'
else
  echo Make directory \"'SH'\"
  makdir 'SH'
fi
if test -f 'config.h' ; then
  echo 'File config.h already exists, overwriting it'
  del 'config.h'
fi
echo Extracting \"'config.h'\"
sed "s/^X//" >'config.h' <<'__END__OF__THIS__FILE__'
X/*
X *	configuration header file for the mnews package
X *
X * $Log:	config.h_v $
X * Revision 1.2  91/05/21  17:12:51  ud
X * Added defines for in memory operation (possibly a speedup if working on
X * a harddisk) and for short message ids
X * 
X * Revision 1.1  90/08/31  13:58:20  ud
X * Initial revision
X *
X */
X/*
X *	This is the default command to forward News to
X *	another system. The News Articles will be written
X *	on stdin of this program.
X *	(%G will be replaced by the grading character, %S by
X *	the system name)
X */
X/* # define	MNEWS_TRANSPORT		"uux -r - '%S!rnews'"		/* */
X# define	MNEWS_TRANSPORT		"uux -r -g%G - '%S!rnews'"	/* */
X
X/*
X *	This directory contains the list of filenames of new
X *	articles (of ...) to be send to a remote system
X */
X# define	MNEWS_BATCHDIR		"/h0/SPOOL/BATCH"
X
X/*
X *	This is the `root' directory of the news hirarchy
X */
X# define	MNEWS_NEWSDIR		"/h0/SPOOL/NEWS"
X
X/*
X *	If rnews has problems when feeding an article to inews, it moves
X *	this article to a special directory; this is the path of this
X *	directory
X */
X# define	MNEWS_RNEWS_SPOOLDIR	"/h0/SPOOL/RNEWS"
X
X/*
X *	This is the full pathname of the logfile for rnews. It will
X *	only be written, if it already exists. To use it, touch this
X *	file
X */
X# define	MNEWS_RNEWS_LOGFILE	"/h0/SPOOL/UUCP/.LOG/rnews.log"
X
X/*
X *	in this directory are all config file for the news package
X *	(Active, Sys, etc.)
X */
X# define	MNEWS_NEWSLIB		"/h0/USR/LIB/NEWS"
X
X/*
X *	if the articles can't be inserted then store them temporarly
X *	in this temp.spooldir.
X */
X# define	MNEWS_TSPOOLDIR		"/h0/SPOOL/TNEWS"
X
X/*
X *	If you want to include your host including your
X *	hostdomain in the `Path:' field you should define
X *	this.
X */
X/* # define	USE_FULLHOST			/* */
X
X# ifdef		USE_FULLHOST
X/*
X *	If the full hostdomain should be used and no extra entry
X *	for the hostname then define this
X */
X/* # define	USE_ONLY_FULLHOST		/* */
X# endif		USE_FULLHOST
X
X/*
X *	If you don't allow dots in the distribution field then
X *	use this define (I received articles with the whole
X *	group as distribution, this makes no sense...)
X */
X# define	NO_DOT_IN_DIST			/* */
X
X/*
X *	If you like to have the sitename of your neighbor to be
X *	a default distribution then define this
X */
X# define	ADD_SITENAME_AS_DISTRIBUTION	/* */
X
X/*
X *	Headerlines may be split off to several lines,
X *	started with a whitespace. If you prefer to concat
X *	them to one line you should define this
X */
X/* # define	CAT_LINES			/* */
X
X/*
X *	If you want to have the group `control' in the sys entry
X *	for each system (as a default value), then define this
X */
X/* # define	DEFAULT_CTRL			/* */
X
X/*
X *	If you are creating a control message and want always
X *	to place the article in the group `control' too,
X *	define this
X */
X/* # define	ALWAYS_CONTROL			/* */
X
X/*
X *	If you like to automatically insert `world' as a distribution
X *	for every entry in the sys file, define this.
X */
X/* # define	ALWAYS_DIST_WORLD		/* */
X
X/*
X *	If you want to allow controlmessages like sendsys, version
X *	and uuname are executed for world distribution, define this
X */
X# define	SEND_WORLD			/* */
X
X/*
X *	If you don't want to have a group `junk' define this;
X *	you should know what happens, if you have this defined,
X *	so if you aren't sure, don't define this!
X*/
X/* # define	NO_JUNK				/* */
X
X/*
X *	If you want to insert a local Xref: line (used by some
X *	newsreaders) define this
X */
X# define	USE_XREF			/* */
X
X/*
X *	In several cases a mail is send to someone
X *	if you want that a copy of the mail is sent
X *	to the local postmaster define this
X */
X# define	COPY_TO_POSTMASTER		/* */
X
X/*
X *	If someone posts to a moderated group this article will
X *	be send as a mail to the moderator. To disable this feature
X *	define this
X */
X/* # define	NO_MAIL_TO_MODERATOR		/* */
X
X/*
X *	If you want to allow a user to forward a written article
X *	also as a mail, define this (you then also need to define
X *	the command to invoke the mailer):
X */
X# define	CAN_MAIL			/* */
X# ifdef		CAN_MAIL
X# define	MAILCMD			"rmail"
X# endif		/* CAN_MAIL */
X
X/*
X *	If you want to execute a newgroup or a rmgroup control
X *	message automatically then define this here:
X */
X/* # define	AUTO_NEWGROUP			/* */
X/* # define	AUOT_RMGROUP			/* */
X
X/*
X *	Define this if you want to store the history for newsarticle
X *	in a ndbm-file instead of single files
X *	To use dbm, you have to change the Makefile in INEWS. Add
X *	the dbm-Library and increase the -M=<val> value to ensure
X *	that there is enough stack for the dbm Routines (some NDBM
X *	versions are using variables with 1, 2 or 4 kBytes in
X *	local functions).
X */
X/* # define	USE_NDBM			/* */
X
X/*
X *	If you prefer a short message id then define this. The short
X *	message id _may_ cause some problems on systems which aren't
X *	fully RFC 1036 compatible.
X */
X/* # define	SHORT_MSGID			/* */
X
X/*
X *	If you want to speedup your system and you have enough
X *	memory to do all operations in memory, define this
X */
X# define	IN_MEMORY			/* */
X
X/*
X *	If you want to hold some files as datamodules in memory,
X *	define this (not yet supported).
X */
X# define	FILES_IN_MEM			/* */
X
X/*
X *	In some cases a hash search may be more effective than
X *	a line by line search. If you prefer this search method
X *	define this
X */
X# define	HASH_SEARCH			/* */
X# ifdef		HASH_SEARCH
X/*
X *	These are the values for the hashtable size
X *	HASH_ACTIVE	for the active file
X */
X# define	HASH_ACTIVE		37
X# endif		/* HAS_SEARCH */
X
X/*
X *	Normally MNews uses the Sysinfo library for locking purpose.
X *	If you want to use events instead define this. This may cause
X *	problems if inews dies unconditional, but under normal
X *	conditions it's the better solution (IMHO). (currently un-
X *	tested!)
X */
X/* # define	EVENT_LOCK			/* */
X
X/*
X *	If you want to use "hard" links undefine this. Hardlinks aren't
X *	yet offical supported by Microware and the use of them
X *	!!!!! MAY DAMAGE YOUR DISK !!!!!
X */
X/* # define	SOFT_LINKS			/* */
X
X/*
X *	The directory to place temp.files
X */
X# define	TEMPDIR			"/dd/TMP"
X
X# ifndef	OSK
X/*
X *	This can only be defined on OSK to replace some routines by
X *	an assembler version to increase performance
X */
X# define	USE_ASM				/* */
X# endif		/* OSK */
__END__OF__THIS__FILE__
if test -f 'news.h' ; then
  echo 'File news.h already exists, overwriting it'
  del 'news.h'
fi
echo Extracting \"'news.h'\"
sed "s/^X//" >'news.h' <<'__END__OF__THIS__FILE__'
X/*
X *	General headerfile used by several parts of the
X *	whole distribution
X *
X * $Log:	news.h_v $
X * Revision 1.2  91/05/21  17:12:14  ud
X * Added a struct to support in memory handling of the newssystem
X * 
X * Revision 1.1  90/08/31  13:59:15  ud
X * Initial revision
X * 
X */
Xextern char		*malloc ();
Xextern char		*realloc ();
Xextern int		os9forkc ();
X
Xextern int		errno;
Xextern char		**environ;
X
X# include		"config.h"
X
X# define	FATAL		(1 << 1)
X# define	SIMPLE		(1 << 0)
X
X# ifndef	TRUE
X# define	TRUE		1
X# define	FALSE		0
X# endif		/* TRUE */
X
X# ifndef	NULL
X# define	NULL		0
X# endif		/* NULL */
X
X# define	BATCHHEAD	"#! rnews"
X# define	BATCHLEN	8
X# define	COMHEAD		"#! cunbatch"
X# define	COMLEN		11
X# define	COM7HEAD	"#! c7unbatch"
X# define	COM7LEN		12
X# define	FREHEAD		"#! funbatch"
X# define	FRELEN		11
X# define	FRE7HEAD	"#! f7unbatch"
X# define	FRE7LEN		12
X
X# define	NONE		0
X# define	BATCH		1
X# define	COM		2
X# define	COM7		3
X# define	FRE		4
X# define	FRE7		5
X# define	DEL_ART		6
X
X# define	NEWSINPUT	"newsinput"
X# define	INEWS		"inews"
X# define	UNCOMPRESS	"uncompress"
X# define	MELT		"melt"
X# define	DECODE		"decode"
X
X# define	COMPRESS	"compress"
X# define	FREEZE		"freeze"
X# define	ENCODE		"encode"
X# define	TRANSPORT	"mnews.transport"
X# define	TRANSPORT_DFLT	MNEWS_TRANSPORT
X
X# define	BATCHDIR	"MNEWS.BATCH"
X# define	DEF_BATCHDIR	MNEWS_BATCHDIR
X
X# define	NEWSDIR		"MNEWS.DIR"
X# define	DEF_NEWSDIR	MNEWS_NEWSDIR
X# define	LIBDIR		"MNEWS.LIB"
X# define	DEF_LIBDIR	MNEWS_NEWSLIB
X
X# define	TSPOOLDIR	"MNEWS.TSPOOL"
X# define	DEF_TSPOOLDIR	MNEWS_TSPOOLDIR
X
X# define	NEWS_OWNER	"news"
X
X/*
X *	ID for "linked" Files (used by other programs, too)
X */
X# define	LINK_ID		"%(#)$ "
X
X/*
X *	Some macros for speedup
X */
X# define	Streql(s,d)	(((*(s)) == (*(d))) && (!strcmp ((s), (d))))
X# define	Strieql(s,d)	((tolower (*(s)) == tolower (*(d))) && (!_strccmp ((s), (d))))
X# define	Strcmp(s,d)	(((*(s)) != (*(d))) || strcmp ((s), (d)))
X# define	Stricmp(s,d)	((tolower (*(s)) != tolower (*(d))) || _strccmp ((s), (d)))
X
X# define	Strneql(s,d,n)	(((*(s)) == (*(d))) && (!strncmp ((s), (d), (n))))
X# define	Strnieql(s,d,n)	((tolower (*(s)) == tolower (*(d))) && (!_strnccmp ((s), (d), (n))))
X# define	Strncmp(s,d,n)	(((*(s)) != (*(d))) || strncmp ((s), (d), (n)))
X# define	Strnicmp(s,d,n)	((tolower (*(s)) != tolower (*(d))) || _strnccmp ((s), (d), (n)))
X
X# ifdef		IN_MEMORY
X/*
X *	We need an alternative for temp.files - so store them in this
X *	structure
X */
Xtypedef struct _list {
X	char	*text;
X	int	siz;
X	int	len;
X	struct _list	*next;
X} list;
X# endif		/* IN_MEMORY */
X
X# ifdef		HASH_SEARCH
Xtypedef unsigned long	hash_t;
X# endif		/* HASH_SEARCH */
__END__OF__THIS__FILE__
if test -f 'patchlevel.h' ; then
  echo 'File patchlevel.h already exists, overwriting it'
  del 'patchlevel.h'
fi
echo Extracting \"'patchlevel.h'\"
sed "s/^X//" >'patchlevel.h' <<'__END__OF__THIS__FILE__'
X/*
X *	Current patchlevel
X */
X# define	PATCHLEVEL		0
__END__OF__THIS__FILE__
if test -f 'xc' ; then
  echo 'File xc already exists, overwriting it'
  del 'xc'
fi
echo Extracting \"'xc'\"
sed "s/^X//" >'xc' <<'__END__OF__THIS__FILE__'
X$ echo "Version: $Id: xc_v 1.1 90/08/31 13:59:38 ud Exp $"
X$ echo "Copyright (C) 1989, 1990 by Ulrich Dessauer, Germering, Germany."
X$ echo "Making rnews..."
X$ chd RNEWS;make
X$ echo "Making sbatch..."
X$ chd SBATCH;make
X$ echo "Making inews..."
X$ chd INEWS;make
X$ echo "Making MISC..."
X$ chd MISC;make encode decode
__END__OF__THIS__FILE__
if test -f '8BIT/Makefile' ; then
  echo 'File 8BIT/Makefile already exists, overwriting it'
  del '8BIT/Makefile'
fi
echo Extracting \"'8BIT/Makefile'\"
sed "s/^X//" >'8BIT/Makefile' <<'__END__OF__THIS__FILE__'
X# $Log:	Makefile_v $
X# Revision 1.2  91/05/21  17:16:49  ud
X# Add c8type.c
X# 
X# Revision 1.1  90/08/31  13:47:17  ud
X# Initial revision
X# 
X#
X# $Id: Makefile_v 1.2 91/05/21 17:16:49 ud Exp $
X#
XG=	-g
XCC=	cc
XCFLAGS=	-qt=/dd/TMP -V=. $G
XOBJS=	inp.r conv.r c8type.r
XHDRS=	/dd/DEFS/c8type.h
XLIBDIR=	/dd/LIB
X
X$(LIBDIR)/8bit.l:	$(OBJS) $(HDRS)
X	merge $(OBJS) >-$@
X
X$(HDRS):	c8type.h
X	copy -r $? $@
X	touch $@
__END__OF__THIS__FILE__
if test -f '8BIT/c8type.c' ; then
  echo 'File 8BIT/c8type.c already exists, overwriting it'
  del '8BIT/c8type.c'
fi
echo Extracting \"'8BIT/c8type.c'\"
sed "s/^X//" >'8BIT/c8type.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log:	c8type.c_v $
X * Revision 1.1  91/05/21  17:20:28  ud
X * Initial revision
X * 
X */
X# ifndef	LINT
Xstatic char rcsid[] = "$Id: c8type.c_v 1.1 91/05/21 17:20:28 ud Exp $";
X# endif		LINE
X# include	"c8type.h"
X
Xchar8	_ch8codes[256] = {
X	_CONTROL,				/* ^@ */
X	_CONTROL,				/* ^A */
X	_CONTROL,				/* ^B */
X	_CONTROL,				/* ^C */
X	_CONTROL,				/* ^D */
X	_CONTROL,				/* ^E */
X	_CONTROL,				/* ^F */
X	_CONTROL,				/* ^G */
X	_CONTROL,				/* ^H */
X	_CONTROL | _WHITE,			/* ^I */
X	_CONTROL | _WHITE,			/* ^J */
X	_CONTROL,				/* ^K */
X	_CONTROL | _WHITE,			/* ^L */
X	_CONTROL | _WHITE,			/* ^M */
X	_CONTROL,				/* ^N */
X	_CONTROL,				/* ^O */
X	_CONTROL,				/* ^P */
X	_CONTROL,				/* ^Q */
X	_CONTROL,				/* ^R */
X	_CONTROL,				/* ^S */
X	_CONTROL,				/* ^T */
X	_CONTROL,				/* ^U */
X	_CONTROL,				/* ^V */
X	_CONTROL,				/* ^W */
X	_CONTROL,				/* ^X */
X	_CONTROL,				/* ^Y */
X	_CONTROL,				/* ^Z */
X	_CONTROL,				/* ^[ */
X	_CONTROL,				/* ^\ */
X	_CONTROL,				/* ^] */
X	_CONTROL,				/* ^~ */
X	_CONTROL,				/* ^_ */
X	_WHITE | _PUNCT,			/*   */
X	_PUNCT,					/* ! */
X	_PUNCT,					/* " */
X	_PUNCT,					/* # */
X	_PUNCT,					/* $ */
X	_PUNCT,					/* % */
X	_PUNCT,					/* & */
X	_PUNCT,					/* ' */
X	_PUNCT,					/* ( */
X	_PUNCT,					/* ) */
X	_PUNCT,					/* * */
X	_PUNCT,					/* + */
X	_PUNCT,					/* , */
X	_PUNCT,					/* - */
X	_PUNCT,					/* . */
X	_PUNCT,					/* / */
X	_DIGIT | _HEXDIG,			/* 0 */
X	_DIGIT | _HEXDIG,			/* 1 */
X	_DIGIT | _HEXDIG,			/* 2 */
X	_DIGIT | _HEXDIG,			/* 3 */
X	_DIGIT | _HEXDIG,			/* 4 */
X	_DIGIT | _HEXDIG,			/* 5 */
X	_DIGIT | _HEXDIG,			/* 6 */
X	_DIGIT | _HEXDIG,			/* 7 */
X	_DIGIT | _HEXDIG,			/* 8 */
X	_DIGIT | _HEXDIG,			/* 9 */
X	_PUNCT,					/* : */
X	_PUNCT,					/* ; */
X	_PUNCT,					/* < */
X	_PUNCT,					/* = */
X	_PUNCT,					/* > */
X	_PUNCT,					/* ? */
X	_PUNCT,					/* @ */
X	_UPPER | _HEXDIG,			/* A */
X	_UPPER | _HEXDIG,			/* B */
X	_UPPER | _HEXDIG,			/* C */
X	_UPPER | _HEXDIG,			/* D */
X	_UPPER | _HEXDIG,			/* E */
X	_UPPER | _HEXDIG,			/* F */
X	_UPPER,					/* G */
X	_UPPER,					/* H */
X	_UPPER,					/* I */
X	_UPPER,					/* J */
X	_UPPER,					/* K */
X	_UPPER,					/* L */
X	_UPPER,					/* M */
X	_UPPER,					/* N */
X	_UPPER,					/* O */
X	_UPPER,					/* P */
X	_UPPER,					/* Q */
X	_UPPER,					/* R */
X	_UPPER,					/* S */
X	_UPPER,					/* T */
X	_UPPER,					/* U */
X	_UPPER,					/* V */
X	_UPPER,					/* W */
X	_UPPER,					/* X */
X	_UPPER,					/* Y */
X	_UPPER,					/* Z */
X	_PUNCT,					/* [ */
X	_PUNCT,					/* \ */
X	_PUNCT,					/* ] */
X	_PUNCT,					/* ^ */
X	_PUNCT,					/* _ */
X	_PUNCT,					/* ` */
X	_LOWER | _HEXDIG,			/* a */
X	_LOWER | _HEXDIG,			/* b */
X	_LOWER | _HEXDIG,			/* c */
X	_LOWER | _HEXDIG,			/* d */
X	_LOWER | _HEXDIG,			/* e */
X	_LOWER | _HEXDIG,			/* f */
X	_LOWER,					/* g */
X	_LOWER,					/* h */
X	_LOWER,					/* i */
X	_LOWER,					/* j */
X	_LOWER,					/* k */
X	_LOWER,					/* l */
X	_LOWER,					/* m */
X	_LOWER,					/* n */
X	_LOWER,					/* o */
X	_LOWER,					/* p */
X	_LOWER,					/* q */
X	_LOWER,					/* r */
X	_LOWER,					/* s */
X	_LOWER,					/* t */
X	_LOWER,					/* u */
X	_LOWER,					/* v */
X	_LOWER,					/* w */
X	_LOWER,					/* x */
X	_LOWER,					/* y */
X	_LOWER,					/* z */
X	_PUNCT,					/* { */
X	_PUNCT,					/* | */
X	_PUNCT,					/* } */
X	_PUNCT,					/* ~ */
X	_CONTROL,				/* ^? */
X/* 8 bit */
X	_CONTROL,				/* 80 */
X	_CONTROL,				/* 81 */
X	_CONTROL,				/* 82 */
X	_CONTROL,				/* 83 */
X	_CONTROL,				/* 84 */
X	_CONTROL,				/* 85 */
X	_CONTROL,				/* 86 */
X	_CONTROL,				/* 87 */
X	_CONTROL,				/* 88 */
X	_CONTROL,				/* 89 */
X	_CONTROL,				/* 8a */
X	_CONTROL,				/* 8b */
X	_CONTROL,				/* 8c */
X	_CONTROL,				/* 8d */
X	_CONTROL,				/* 8e */
X	_CONTROL,				/* 8f */
X	_CONTROL,				/* 90 */
X	_CONTROL,				/* 91 */
X	_CONTROL,				/* 92 */
X	_CONTROL,				/* 93 */
X	_CONTROL,				/* 94 */
X	_CONTROL,				/* 95 */
X	_CONTROL,				/* 96 */
X	_CONTROL,				/* 97 */
X	_CONTROL,				/* 98 */
X	_CONTROL,				/* 99 */
X	_CONTROL,				/* 9a */
X	_CONTROL,				/* 9b */
X	_CONTROL,				/* 9c */
X	_CONTROL,				/* 9d */
X	_CONTROL,				/* 9e */
X	_CONTROL,				/* 9f */
X	_WHITE | _PUNCT,			/* a0 */
X	_PUNCT,					/* a1 */
X	_PUNCT,					/* a2 */
X	_PUNCT,					/* a3 */
X	_PUNCT,					/* a4 */
X	_PUNCT,					/* a5 */
X	_PUNCT,					/* a6 */
X	_PUNCT,					/* a7 */
X	_PUNCT,					/* a8 */
X	_PUNCT,					/* a9 */
X	_PUNCT,					/* aa */
X	_PUNCT,					/* ab */
X	_PUNCT,					/* ac */
X	_PUNCT,					/* ad */
X	_PUNCT,					/* ae */
X	_PUNCT,					/* af */
X	_PUNCT,					/* b0 */
X	_PUNCT,					/* b1 */
X	_PUNCT,					/* b2 */
X	_PUNCT,					/* b3 */
X	_PUNCT,					/* b4 */
X	_LOWER,					/* b5 */
X	_PUNCT,					/* b6 */
X	_PUNCT,					/* b7 */
X	_PUNCT,					/* b8 */
X	_PUNCT,					/* b9 */
X	_PUNCT,					/* ba */
X	_PUNCT,					/* bb */
X	_PUNCT,					/* bc */
X	_PUNCT,					/* bd */
X	_PUNCT,					/* be */
X	_PUNCT,					/* bf */
X	_UPPER,					/* c0 */
X	_UPPER,					/* c1 */
X	_UPPER,					/* c2 */
X	_UPPER,					/* c3 */
X	_UPPER,					/* c4 */
X	_UPPER,					/* c5 */
X	_UPPER,					/* c6 */
X	_UPPER,					/* c7 */
X	_UPPER,					/* c8 */
X	_UPPER,					/* c9 */
X	_UPPER,					/* ca */
X	_UPPER,					/* cb */
X	_UPPER,					/* cc */
X	_UPPER,					/* cd */
X	_UPPER,					/* ce */
X	_UPPER,					/* cf */
X	_UPPER,					/* d0 */
X	_UPPER,					/* d1 */
X	_UPPER,					/* d2 */
X	_UPPER,					/* d3 */
X	_UPPER,					/* d4 */
X	_UPPER,					/* d5 */
X	_UPPER,					/* d6 */
X	_PUNCT,					/* d7 */
X	_UPPER,					/* d8 */
X	_UPPER,					/* d9 */
X	_UPPER,					/* da */
X	_UPPER,					/* db */
X	_UPPER,					/* dc */
X	_UPPER,					/* dd */
X	_UPPER,					/* de */
X	_UPPER,					/* df */
X	_LOWER,					/* e0 */
X	_LOWER,					/* e1 */
X	_LOWER,					/* e2 */
X	_LOWER,					/* e3 */
X	_LOWER,					/* e4 */
X	_LOWER,					/* e5 */
X	_LOWER,					/* e6 */
X	_LOWER,					/* e7 */
X	_LOWER,					/* e8 */
X	_LOWER,					/* e9 */
X	_LOWER,					/* ea */
X	_LOWER,					/* eb */
X	_LOWER,					/* ec */
X	_LOWER,					/* ed */
X	_LOWER,					/* ee */
X	_LOWER,					/* ef */
X	_LOWER,					/* f0 */
X	_LOWER,					/* f1 */
X	_LOWER,					/* f2 */
X	_LOWER,					/* f3 */
X	_LOWER,					/* f4 */
X	_LOWER,					/* f5 */
X	_LOWER,					/* f6 */
X	_PUNCT,					/* f7 */
X	_LOWER,					/* f8 */
X	_LOWER,					/* f9 */
X	_LOWER,					/* fa */
X	_LOWER,					/* fb */
X	_LOWER,					/* fc */
X	_LOWER,					/* fd */
X	_LOWER,					/* fe */
X	_LOWER					/* ff */
X};
X
Xchar8
X_to8lower (c)
Xregister char8 c;
X{
X	return (is8upper (c) ? c | 0x20 : c);
X}
X
Xchar8
X_to8upper (c)
Xregister char8 c;
X{
X	return (is8lower (c) ? c & (~ 0x20) : c);
X}
X
__END__OF__THIS__FILE__
if test -f '8BIT/c8type.h' ; then
  echo 'File 8BIT/c8type.h already exists, overwriting it'
  del '8BIT/c8type.h'
fi
echo Extracting \"'8BIT/c8type.h'\"
sed "s/^X//" >'8BIT/c8type.h' <<'__END__OF__THIS__FILE__'
X/*
X * $Log:	c8type.h_v $
X * Revision 1.1  91/05/21  17:20:02  ud
X * Initial revision
X * 
X */
X# ifndef	_C8TYPE_H
X# define	_C8TYPE_H
X# ifndef	isascii
X# include	<ctype.h>
X# endif		/* isascii */
X
Xtypedef unsigned char	char8;
X
Xextern char8	_ch8codes[];
X
X# define	is8ascii(c)	(((char8) (c)) <= 0x7f)
X# define	is8alpha(c)	(_ch8codes[(char8) (c)] & (_UPPER | _LOWER))
X# define	is8upper(c)	(_ch8codes[(char8) (c)] & _UPPER)
X# define	is8lower(c)	(_ch8codes[(char8) (c)] & _LOWER)
X# define	is8digit(c)	(_ch8codes[(char8) (c)] & _DIGIT)
X# define	is8xdigit(c)	(_ch8codes[(char8) (c)] & _HEXDIG)
X# define	is8space(c)	(_ch8codes[(char8) (c)] & _WHITE)
X# define	is8punct(c)	(_ch8codes[(char8) (c)] & _PUNCT)
X# define	is8alnum(c)	(_ch8codes[(char8) (c)] & (_UPPER | _LOWER | _DIGIT))
X# define	is8print(c)	(_ch8codes[(char8) (c)] & (_PUNCT | _UPPER | _LOWER | _DIGIT))
X# define	is8cntrl(c)	(_ch8codes[(char8) (c)] & _CONTROL)
X
Xextern char8	_to8upper ();
Xextern char8	_to8lower ();
X
X# define	to8upper(c)	_to8upper ((char8) (c))
X# define	to8lower(c)	_to8lower ((char8) (c))
X
X/*
X *	conversion functions
X */
Xextern void	setup_convtable ();
Xextern void	conv_charset ();
Xextern char8	conv_char ();
X
X/*
X *	I/O functions with character conversion
X */
Xextern int	c8read (), c8readln ();
Xextern int	c8write (), c8writeln ();
Xextern char8	*c8fgets ();
Xextern int	c8fputs ();
Xextern int	c8getc ();
Xextern int	c8putc ();
X
X# endif		/* _C8TYPE_H */
__END__OF__THIS__FILE__
if test -f '8BIT/conv.c' ; then
  echo 'File 8BIT/conv.c already exists, overwriting it'
  del '8BIT/conv.c'
fi
echo Extracting \"'8BIT/conv.c'\"
sed "s/^X//" >'8BIT/conv.c' <<'__END__OF__THIS__FILE__'
X/*
X *	this small library is used to convert between different
X *	international character sets into a unique (ISO 8859/1)
X *	one. See Manualpage for details.
X *
X * $Log:	conv.c_v $
X * Revision 1.2  91/05/21  17:14:46  ud
X * Used my ctype for 8 bit access
X * 
X * Revision 1.1  90/08/31  13:47:50  ud
X * Initial revision
X * 
X */
X# ifndef	LINT
Xstatic char rcsid[] = "$Id: conv.c_v 1.2 91/05/21 17:14:46 ud Exp $";
Xstatic char copyright[] = "Copyright (C) 1989, 1990 by Ulrich Dessauer, Germering, Germany.\n";
X# endif		/* LINT */
X
X# include	<c8type.h>
X# include	<modes.h>
X
X# define	TRUE		1
X# define	FALSE		0
X
X# define	CHARSET_LIB	"/h0/USR/LIB/CHARSET"
X
Xextern char	*getenv ();
Xextern char	*malloc ();
X
Xstatic char	ttab[256];
Xstatic int	doconv;
X
X/*
X *	Convert a string containing a number to any base up to 16
X *	to a decimal number
X */
Xstatic int
Xconv_value (s, base)
Xregister char *s;
Xregister int base;
X{
X	register int	ret;
X
X	ret = 0;
X	while (*s) {
X		ret *= base;
X		if (index ("0123456789", *s))
X			ret += (*s - '0');
X		else if (index ("ABCDEF", *s))
X			ret += (*s - 'A' + 10);
X		else if (index ("abcdef", *s))
X			ret += (*s - 'a' + 10);
X		++s;
X	}
X	return (ret);
X}
X
X/*
X *	parses an expression which represents a charcter between 0..255
X */
Xstatic int
Xget_value (s)
Xregister char *s;
X{
X	int	t;
X
X	switch (*s++) {
X		default:
X			--s;
X		case '\'':
X			t = *s;
X			break;
X		case '$':
X			t = conv_value (s, 16);
X			break;
X		case '1': case '2': case '3': case '4': case '5':
X		case '6': case '7': case '8': case '9':
X			--s;
X		case '#':
X			t = conv_value (s, 10);
X			break;
X		case '0':
X			if (*s == 'x') {
X				++s;
X				t = conv_value (s, 16);
X			} else
X				t = conv_value (s, 8);
X			break;
X		case '%':
X			t = conv_value (s, 2);
X			break;
X	}
X	t &= 0xff;
X	return (t);
X}
X
X/*
X *	Reads in the translation table
X */			
Xstatic int
Xget_convtable (type, rev)
Xchar *type;
Xint rev;
X{
X	char		*buf;
X	int		n;
X	int		fd;
X	int		in, out;
X	register char	*pin, *pout;
X
X	if (!(buf = malloc (256)))
X		return (FALSE);
X	if (!info_str ("CHARSET.LIB", buf, 200))
X		strcpy (buf, CHARSET_LIB);
X	strcat (buf, "/");
X	strcat (buf, type);
X	if ((fd = open (buf, S_IREAD)) != -1) {
X		while ((n = readln (fd, buf, 256)) > 0) {
X			buf[n - 1] = '\0';
X			if ((n == 1) || (buf[0] == '#'))
X				continue;
X			pin = buf;
X			pout = buf;
X			while (*pout && (!is8space (*pout)))
X				++pout;
X			if (*pout) {
X				*pout++ = '\0';
X				while (is8space (*pout))
X					++pout;
X			}
X			if (!*pout)
X				continue;
X			in = get_value (pin);
X			out = get_value (pout);
X			if ((in >= 0) && (in < 256) && (out >= 0) && (out < 256))
X				if (rev)
X					ttab[out] = (char) in;
X				else
X					ttab[in] = (char) out;
X		}
X		close (fd);
X	}
X	free (buf);
X	return (fd != -1);
X}
X
X/*
X *	have to be called as one of the first functions in a program
X *	which uses the library
X */
Xvoid
Xsetup_convtable (doit, rev)
Xint doit;
Xint rev;
X{
X	register int	t;
X	char		*ptr;
X
X	ptr = getenv ("CHARSET");
X	if ((!doit) || (!ptr)) {
X		doconv = FALSE;
X		return;
X	}
X	for (t = 0; t < 256; ++t)
X		ttab[t] = (char) t;
X	doconv = get_convtable (ptr, rev);
X}
X
X/*
X *	this function converts a string using the stored
X *	translation table (siz is the length of the string
X *	to convert)
X */
Xvoid
Xconv_charset (buf, siz)
Xregister char8 *buf;
Xregister int siz;
X{
X	register char	*_ttab;
X
X	if (!doconv)
X		return;
X	_ttab = ttab;
X	while (siz-- > 0) {
X		*buf = _ttab[*buf];
X		++buf;
X	}
X}
X
X/*
X *	converts just one character
X */
Xchar8
Xconv_char (c)
Xchar8 c;
X{
X	return (doconv ? ttab[c] : c);
X}
__END__OF__THIS__FILE__
if test -f '8BIT/inp.c' ; then
  echo 'File 8BIT/inp.c already exists, overwriting it'
  del '8BIT/inp.c'
fi
echo Extracting \"'8BIT/inp.c'\"
sed "s/^X//" >'8BIT/inp.c' <<'__END__OF__THIS__FILE__'
X/*
X * $Log$
X * 
X */
X# ifndef	LINT
Xstatic char rcsid[] = "$Id$";
X# endif		/* LINT */
X
X# include	<stdio.h>
X# include	<c8type.h>
X
Xint
Xc8read (fd, buf, cnt)
Xregister int fd;
Xregister char8 *buf;
Xregister unsigned int cnt;
X{
X	register int	n;
X
X	if ((n = read (fd, (char *) buf, cnt)) > 0)
X		conv_charset (buf, n);
X	return (n);
X}
X
Xint
Xc8readln (fd, buf, cnt)
Xregister int fd;
Xregister char8 *buf;
Xregister unsigned int cnt;
X{
X	register int	n;
X
X	if ((n = readln (fd, (char *) buf, cnt)) > 0)
X		conv_charset (buf, n);
X	return (n);
X}
X
Xint
Xc8write (fd, buf, cnt)
Xregister int fd;
Xregister char8 *buf;
Xregister unsigned int cnt;
X{
X	register int	n;
X
X	conv_charset (buf, cnt);
X	return (write (fd, (char *) buf, cnt));
X}
X
Xint
Xc8writeln (fd, buf, cnt)
Xregister int fd;
Xregister char8 *buf;
Xregister unsigned int cnt;
X{
X	register int	n;
X
X	conv_charset (buf, cnt);
X	return (writeln (fd, (char *) buf, cnt));
X}
X
Xchar8 *
Xc8fgets (buf, cnt, fp)
Xregister char8 *buf;
Xregister int cnt;
Xregister FILE *fp;
X{
X	if (fgets ((char *) buf, cnt, fp)) {
X		conv_charset (buf, strlen (buf));
X		return (buf);
X	}
X	return (NULL);
X}
X
Xint
Xc8fputs (buf, fp)
Xregister char8 *buf;
Xregister FILE *fp;
X{
X	conv_charset (buf, strlen (buf));
X	return (fputs ((char *) buf, fp));
X}
X
Xint
Xc8getc (fp)
Xregister FILE *fp;
X{
X	register int	ch;
X
X	if ((ch = getc (fp)) >= 0)
X		return (conv_char (ch & 0xff) & 0xff);
X	return (ch);
X}
X
Xint
Xc8putc (ch, fp)
Xregister int ch;
Xregister FILE *fp;
X{
X	register int	ch;
X
X	ch = conv_char (ch & 0xff) & 0xff;
X	return (putc (ch, fp));
X}
__END__OF__THIS__FILE__
if test -f 'INEWS/Makefile' ; then
  echo 'File INEWS/Makefile already exists, overwriting it'
  del 'INEWS/Makefile'
fi
echo Extracting \"'INEWS/Makefile'\"
sed "s/^X//" >'INEWS/Makefile' <<'__END__OF__THIS__FILE__'
X# $Id: Makefile_v 1.4 91/09/11 18:16:06 ud Exp $
X#
X# $Log:	Makefile_v $
X# Revision 1.4  91/09/11  18:16:06  ud
X# Added pmail.[cr]
X# 
X# Revision 1.3  91/01/02  21:27:07  ud
X# Added optional ndbm support
X# Added optional profiling options
X# 
X# Revision 1.2  90/12/01  15:50:22  ud
X# Inserted two new files (adm.c and arc.c)
X# 
X# Revision 1.1  90/08/31  15:05:15  ud
X# Initial revision
X# 
X#
X# LIBDIR: where to find the converting library and (if desired) dbm-lib
XLIBDIR=	/dd/LIB
X#
X# If you use NDBM for history, then enter here the name of your library
X# DBMLIB=	-l=$(LIBDIR)/sdbm.l
XDBMLIB=
X#
X# If you are using event locking use this library and include-directory
X# EVLIB=	-l=$(LIBDIR)/lock.l
X# EVDIR=	-v=../LOCK
XEVLIB=
XEVDIR=
X#
X# ODIR: where to place the binary
XRDIR=	RELS
XODIR=	/h0/ETC/CMDS
XCC=	cc
XG=	-g
XCFLAGS=	$G -qt=/dd/TMP -v=.. -v=../8BIT $(EVDIR)
XLIBS=	-l=/dd/LIB/os9lib.l -l=$(LIBDIR)/8bit.l \
X	$(DBMLIB) $(EVLIB)
X#CURSES=	-l=/dd/LIB/ncurses.l
XCURSES=	-l=.../MLIB/menulib.l -l=/dd/LIB/termlib.l
XLFLAGS=	$G -m=10 -q $(LIBS)
X
XREV=	1.7
XSTATE=	Exp
XCI=	ci -wud -u$(REV) -s$(STATE)
X
XSCTRL=	ctrl.c ccan.c cnew.c crm.c cssys.c csuu.c csver.c cchk.c csme.c \
X	getd.c mcan.c
XSUTIL=	limit.c list.c store.c ohist.c oart.c dbg.c pmail.c gfh.c hash.c
XSHEAD=	delh.c ghead.c makh.c ihead.c mhead.c rhead.c shead.c spch.c app.c
XSHEAD2=	ddst.c alias.c
XSACT=	achk.c ract.c wact.c
XSSYS=	psys.c rsys.c tsys.c
XSADM=	adm.c arc.c build.c crct.c exp.c retr.c sect.c
XSMISC=	ffrom.c ffup.c mail.c mid.c misc.c sinfo.c unln.c rsat.c inrd.c
XSINEWS=	inews.c pargs.c wgrp.c wit.c sit.c pit.c crth.c
X
XINEWSSRC=$(SINEWS) $(SCTRL) $(SUTIL) $(SHEAD) $(SHEAD2) $(SACT) $(SSYS) \
X	$(SADM) $(SMISC)
XIUSERSRC=uidummy.c
XMNEWSSRC=$(SINEWS) $(SCTRL) $(SUTIL) $(SHEAD) $(SHEAD2) $(SACT) $(SSYS) \
X	$(SADM) $(SMISC)
XMNEWSSRC=
XHEADS=	ext.h inews.h hist.h
XFILES=	$(INEWSSRC) $(HEADS) Makefile
X
XOCTRL=	ctrl.r ccan.r cnew.r crm.r cssys.r csuu.r csver.r cchk.r csme.r \
X	getd.r mcan.r
XOUTIL=	limit.r list.r store.r ohist.r oart.r dbg.r pmail.r gfh.r hash.r
XOHEAD=	delh.r ghead.r makh.r ihead.r mhead.r rhead.r shead.r spch.r app.r
XOHEAD2=	ddst.r alias.r
XOACT=	achk.r ract.r wact.r
XOSYS=	psys.r rsys.r tsys.r
XOADM=	adm.r arc.r build.r crct.r exp.r retr.r sect.r
XOMISC=	ffrom.r ffup.r mail.r mid.r misc.r sinfo.r unln.r rsat.r inrd.r
XOINEWS=	inews.r pargs.r wgrp.r wit.r sit.r pit.r crth.r
X
XINEWS=	$(OINEWS) $(OUTIL) $(OCTRL) $(OHEAD) $(OHEAD2) $(OACT) $(OSYS) \
X	$(OADM) $(OMISC)
XIUSER=	../uidummy.r
XMNEWS=	$(OINEWS) $(OUTIL) $(OCTRL) $(OHEAD) $(OHEAD2) $(OACT) $(OSYS) \
X	$(OADM) $(OMISC)
XMUSER=
X
X$(ODIR)/inews:	$(INEWS) $(IUSER)
X	chd $(RDIR);$(CC) *.r $(IUSER) -f=$@ $(LFLAGS)
X	fixmod -uo2.39 -ua8002 $(ODIR)/inews
X
Xinews.r:	inews.c inews.h
X
X$(IUSER):	$(IUSERSRC)
X	$(CC) $(CFLAGS) -r=. $(IUSERSRC)
X
Xinews.tags:
X	ctags $(INEWSSRC)
X
Xmnews:	$(MNEWS)
X	$(CC) $(MNEWS) $(MUSER) UI/*.r -f=mnews $(CURSES) $(LFLAGS)
X
Xrcs:
X	$(CI) $(FILES)
__END__OF__THIS__FILE__
exit 0
: end of shell archive

-- 
Frank Kaefer # fkk@stasys.sta.sub.org # Starnberg, Germany
Xref: sparky de.comp.sources.os9:14 comp.os.os9:1559