kit to install 2.10.2 news under Eunice
Chip Rosenthal
chip at t4test.UUCP
Mon Oct 1 11:13:43 AEST 1984
: This is a shar archive. Extract with sh, not csh.
: This archive contains the following files
: README.vms do.changes Makefile.vms vmsfuncs.c
: Total number of files: 4
echo x - README.vms [file 1 of 4]
sed 's/^|//' > README.vms << '!-FUNKY-STUFF-!'
|This kit allows conversion of the version 2.10.2 USENET software so that
|it may be installed under the Eunice operating system. The following
|files are included:
|
| README.vms - these very words
| do.changes - script to automatically update various sources
| Makefile.vms - the skeleton makefile which should be used
| vmsfuncs.c - additional functions to make Eunice happy
|
|To install news in a Eunice environment, take the following steps:
|
|1) Unbundle the version 2.10.2 software.
|2) Copy the files from this kit into the same directory as the news sources.
|3) Type "sh do.changes" to update the distributed software.
|4) Proceed as usual (i.e. create a "localize.sh", run make, etc.)
|
|Note: You will probably want to remove the -DDBM flag from 'Makefile'
|when you write a 'localize.sh'. Until TWG makes files like 'history.dir'
|work correctly, the database subroutines look to me like a dangerous thing
|to be running.
|
|Disclaimer: Do not expect 'vnews' to work perfectly. Although it
|compiles alright, it appears to have some bugs in it. Your possible
|actions are: (1) just use readnews, (2) debug vnews, or (3) get and
|install the 'rn' news reader. We have taken the latter action, and
|recommend the same. The 'rn' program has been designed to work in the
|Eunice environment. Furthermore, it is a very good piece of software.
|
!-FUNKY-STUFF-!
echo x - do.changes [file 2 of 4]
sed 's/^|//' > do.changes << '!-FUNKY-STUFF-!'
|#! /bin/sh
|: add Eunice patches to version 2.10.2 news sources
|: use sh, not csh
|
|cat << 'EOF'
|
|This script will perform the required updates upon the distributed
|version 2.10.2 programs to allow them to run under Eunice. Note that
|all software will remain compatible with non-Eunice systems. The
|following files will be updated:
|
| fullname.c
| ifuncs.c
| inews.c
| postnews.c
| recmail.c
|
|EOF
|
|
|echo "verifying that required files are available..."
|flag=""
|for file in fullname.c ifuncs.c inews.c recmail.c postnews.c ; do
| if test ! -f $file ; then
| echo "$file not found"
| flag="failed"
| elif test ! -w $file ; then
| echo "no write access to $file"
| flag="failed"
| fi
|done
|if test $flag ; then
| echo "please make required changes, and then start $0 again"
| exit 1
|fi
|echo "all required files are present and accounted for"
|
|
|echo ""
|echo "performing updates on fullname.c"
|cp fullname.c fullname.c.old
|echo "old copy is saved as fullname.c.old"
|ed fullname.c << 'EOF'
|25a
|#ifdef VMS
|struct passwd *getpwent(), *getpwuid(), *getpwnam();
|#endif VMS
|.
|w
|q
|EOF
|
|
|echo ""
|echo "performing updates on ifuncs.c"
|cp ifuncs.c ifuncs.c.old
|echo "old copy is saved as ifuncs.c.old"
|ed ifuncs.c << 'EOF'
|833d
|449a
|
|#endif !VMS
|
|.
|448d
|444,446c
|
|.
|430d
|422a
|
|.
|421a
| (void) time(&now);
| i = stat(lockname, &sbuf);
| if (i < 0) {
| xerror("Directory permission problem in /tmp");
| }
| if (sbuf.st_mtime + 10*60 < now) {
| unlink(lockname);
| logerr("Article %s locked up", str);
| } else {
| log("waiting on lock for %s", lockname);
| sleep((unsigned)60);
| }
| }
| close(fd);
| unlink(tempname);
|
|.
|419a
| int fd;
|.
|418d
|416a
|
|.
|w
|q
|EOF
|
|
|echo ""
|echo "performing updates on inews.c"
|cp inews.c inews.c.old
|echo "old copy is saved as inews.c.old"
|ed inews.c << 'EOF'
|496a
|#ifdef DEBUG
| fprintf(stderr,"updated size of newsgroup %s to %05ld\n",ngname,ngsize+1);
|#endif
|.
|491a
|#ifdef VMS
| unixtovms(ACTIVE);
|#endif
|.
|484c
|#ifdef VMS
| vmstounix(ACTIVE);
|#endif
| actfp = xfopen(ACTIVE, "r+");
|.
|472c
| logerr("Cannot install article as %s (%d)", bfr, e);
|.
|470a
|#ifdef DEBUG
| perror(bfr);
|#endif
|.
|457,466c
| if (vmslink(ARTICLE, bfr) == 0)
| break;
|.
|449a
|#ifdef DEBUG
| fprintf(stderr,"localize current size of '%s' is '%d'\n",bfr,ngsize);
|#endif
|.
|428a
|#ifdef DEBUG
| fprintf(stderr,"localize entered for '%s'\n",ngname);
|#endif
|
|.
|380c
|#endif !VMS
|.
|w
|q
|EOF
|
|
|echo ""
|echo "performing updates on postnews.c"
|cp postnews.c postnews.c.old
|echo "old copy is saved as postnews.c.old"
|ed postnews.c << 'EOF'
|18a
|#ifdef VMS
|struct passwd *getpwent(), *getpwuid(), *getpwnam();
|#define unlink vmsdelete
|#endif VMS
|.
|w
|q
|EOF
|
|
|echo ""
|echo "performing updates on recmail.c"
|cp recmail.c recmail.c.old
|echo "old copy is saved as recmail.c.old"
|ed recmail.c << 'EOF'
|18a
|#ifdef VMS
|struct passwd *getpwent(), *getpwuid(), *getpwnam();
|#endif
|.
|w
|q
|EOF
|
|
|echo ""
|echo "Updates have been performed."
|
!-FUNKY-STUFF-!
echo x - Makefile.vms [file 3 of 4]
sed 's/^|//' > Makefile.vms << '!-FUNKY-STUFF-!'
|# @(#)Makefile.vms 1.00 9/22/84
|# Makefile for the Eunice VMS-based system
|
|# definitions
|
|NEWSUSR = news
|NEWSGRP = news
|# HOME is the user name whose home dir has all the news stuff in it.
|HOME= exptools
|# Use the -DHOME line if you want dynamic lookup in /etc/passwd
|#HOMENAME= -DHOME=\"$(HOME)\"
|HOMENAME=
|SPOOLDIR = /usr/spool/news
|BATCHDIR = /usr/spool/batch
|LIBDIR = /usr/lib/news
|BINDIR = /usr/bin
|UUXFLAGS = -r -z
|
|DEBUG =
|IBMFLAGS =
|DEFS = -DRNEWS=\"$(BINDIR)/rnews\" -DSPOOLDIR=\"$(SPOOLDIR)\" \
| -DBATCHDIR=\"$(BATCHDIR)\" -DLIBDIR=\"$(LIBDIR)\" \
| -DBINDIR=\"$(BINDIR)\" -DNEWSUSR=\"$(NEWSUSR)\" \
| -DNEWSGRP=\"$(NEWSGRP)\"
|CFLAGS = ${DEBUG} -O -DVMS -DDBM ${DEFS}
|LFLAGS =
|LIBS = -ldbm
|LINTFLAGS = -chba -DVMS -DDBM ${DEFS}
|
|MISC = uname.o
|OBJECTS = funcs.o funcs2.o getdate.o header.o ndir.o $(MISC)
|VMSOBJECTS = vmsfuncs.o
|IOBJECTS = inews.o ifuncs.o iextern.o control.o fullname.o \
| ipathinit.o $(OBJECTS) $(VMSOBJECTS)
|POBJECTS = postnews.o rextern.o rpathinit.o funcs.o $(VMSOBJECTS) $(MISC)
|ROBJECTS = readnews.o rfuncs.o rfuncs2.o rextern.o readr.o \
| process.o rpathinit.o digest.o $(OBJECTS)
|VOBJECTS = readnews.o rfuncs.o rfuncs2.o rextern.o process.o rpathinit.o \
| $(OBJECTS) visual.o virtterm.o
|EXPOBJS= expire.o header.o funcs.o getdate.o rextern.o epathinit.o \
| funcs2.o ndir.o $(MISC)
|
|SRCS = funcs.c funcs2.c header.c
|VMSSRCS = vmsfuncs.c
|ISRCS = inews.c ifuncs.c iextern.c control.c fullname.c $(SRCS) $(VMSSRCS)
|PSRCS = postnews.c rextern.c funcs.c $(VMSSRCS)
|RSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c readr.c process.c \
| digest.c $(SRCS)
|VSRCS = readnews.c rfuncs.c rfuncs2.c rextern.c process.c $(SRCS) \
| visual.c virtterm.c
|EXPSRCS = expire.c header.c funcs.c getdate.c rextern.c \
| funcs2.c
|OSRCS = uurec.c recnews.c sendnews.c batch.c unbatch.c caesar.c \
| recmail.c compress.c
|
|OTHERS = inews uurec recnews sendnews expire batch unbatch caesar recmail \
| compress sendbatch csendbatch rmgroup checkgroups
|COMMANDS = readnews checknews postnews vnews cunbatch
|
|# dependencies
|all: $(COMMANDS) $(OTHERS)
|
|cp: all $(LIBDIR) $(BINDIR) help vnews.help
| cp $(COMMANDS) $(BINDIR)
| -cd $(BINDIR); chown $(NEWSUSR) $(COMMANDS); chgrp $(NEWSGRP) $(COMMANDS);\
| chmod 755 $(COMMANDS)
| @echo "Reminder: uux must permit cunbatch if running over uucp."
| unixtovms help
| unixtovms vnews.help
| cp help vnews.help $(OTHERS) $(LIBDIR)
| cd $(LIBDIR); chown $(NEWSUSR) $(OTHERS); chgrp $(NEWSGRP) $(OTHERS);\
| chmod 755 $(OTHERS)
| chmod 6755 $(LIBDIR)/inews
| -rm -f $(BINDIR)/rnews
| cp $(LIBDIR)/inews $(BINDIR)/rnews
|
|defs.h: defs.dist localize.sh
| sh localize.sh
|
|Makefile: Makefile.vms localize.sh defs.dist
| sh localize.sh
|
|install: cp install.sh makeactive.sh
| unixtovms install.sh
| unixtovms makeactive.sh
| sh install.sh $(SPOOLDIR) $(LIBDIR) $(NEWSUSR) $(NEWSGRP) v7
|
|clean:
| vms purge/log
| rm -f $(COMMANDS) $(OTHERS) *.o a.out
| rm -f core index errs getdate.c
|
|lint: ilint vlint rlint elint plint olint
|
|ilint: defs.h params.h iparams.h header.h $(ISRCS)
| lint $(LINTFLAGS) $(ISRCS)
|
|vlint: defs.h params.h rparams.h header.h $(VSRCS)
| lint $(LINTFLAGS) $(VSRCS)
|
|rlint: defs.h params.h rparams.h header.h $(RSRCS)
| lint $(LINTFLAGS) $(RSRCS)
|
|elint: defs.h params.h iparams.h header.h $(ESRCS)
| lint $(LINTFLAGS) $(ESRCS)
|
|plint: defs.h params.h iparams.h header.h $(PSRCS)
| lint $(LINTFLAGS) $(PSRCS)
|
|olint: defs.h params.h iparams.h header.h $(OSRCS)
| for i in $(OSRCS); do lint $(LINTFLAGS) $$i; done
|
|inews: Makefile $(IOBJECTS)
| $(CC) $(LFLAGS) $(IOBJECTS) -o inews $(LIBS)
|
|readnews: Makefile $(ROBJECTS)
| $(CC) $(LFLAGS) $(ROBJECTS) -o readnews $(LIBS)
|
|funcs.o: funcs.c params.h defs.h header.h
| $(CC) $(CFLAGS) -c funcs.c
|
|getdate.o: getdate.y
| @echo "expect 6 shift/reduce conflicts"
| yacc getdate.y
| mv ytab.c getdate.c
| $(CC) $(CFLAGS) -c getdate.c
| -rm -f getdate.c
|
|inews.o: inews.c iparams.h defs.h params.h header.h
| $(CC) $(CFLAGS) -c inews.c
|
|ifuncs.o: ifuncs.c iparams.h defs.h params.h header.h
| $(CC) $(CFLAGS) $(HOMENAME) -c ifuncs.c
|
|iextern.o: iextern.c iparams.h defs.h params.h Makefile header.h
| $(CC) $(CFLAGS) -c iextern.c
|
|postnews: Makefile $(POBJECTS)
| $(CC) $(CFLAGS) $(LFLAGS) $(POBJECTS) -o postnews
|
|postnews.o: postnews.c defs.h
| $(CC) $(CFLAGS) -c postnews.c
|
|readnews.o: readnews.c rparams.h defs.h params.h header.h
| $(CC) $(CFLAGS) $(HOMENAME) -c readnews.c
|
|rfuncs.o: rfuncs.c rparams.h defs.h params.h header.h
| $(CC) $(CFLAGS) -c rfuncs.c
|
|rfuncs2.o: rfuncs2.c rparams.h defs.h params.h header.h
| $(CC) $(CFLAGS) -c rfuncs2.c
|
|rextern.o: rextern.c rparams.h defs.h params.h Makefile header.h
| $(CC) $(CFLAGS) -c rextern.c
|
|readr.o: readr.c rparams.h defs.h params.h Makefile ndir.h header.h
| $(CC) $(CFLAGS) -c readr.c
|
|checknews.o: checknews.c defs.h header.h Makefile
| $(CC) $(CFLAGS) -c checknews.c
|
|vnews: $(VOBJECTS)
| $(CC) $(LFLAGS) $(VOBJECTS) -ltermcap $(LIBS) -o $@
|
|visual.o: visual.c rparams.h defs.h params.h ndir.h header.h
| $(CC) $(CFLAGS) -c visual.c
|
|control.o: control.c defs.h iparams.h params.h header.h
| $(CC) $(CFLAGS) -c control.c
|
|logdir.o: logdir.c
| $(CC) $(CFLAGS) -c logdir.c
|
|uname.o: uname.c defs.h
| $(CC) $(CFLAGS) -c uname.c
|
|ndir.o: ndir.c ndir.h
| $(CC) $(CFLAGS) -c ndir.c
|
|uurec: uurec.c defs.h
| $(CC) $(CFLAGS) -s uurec.c -o uurec
|
|recnews: recnews.c defs.h
| $(CC) $(CFLAGS) -s recnews.c -o recnews
|
|sendnews: sendnews.o uname.o
| $(CC) $(LFLAGS) sendnews.o uname.o -o sendnews
|
|batch: batch.c Makefile
| $(CC) $(CFLAGS) -s batch.c -o batch
|
|unbatch: unbatch.c
| $(CC) $(CFLAGS) -s unbatch.c -o unbatch
|
|caesar: caesar.c
| $(CC) $(CFLAGS) -s caesar.c -o caesar -lm
|
|# do NOT compile this with -O on a vax due to a bug in the optimizer
|compress: compress.c
| $(CC) -o compress compress.c
|
|recmail: recmail.c
| $(CC) $(CFLAGS) -s recmail.c -o recmail
|
|process.o: process.c rparams.h defs.h params.h header.h
| $(CC) $(CFLAGS) -c process.c
|
|
|checknews: Makefile checknews.o process.o cpathinit.o
| $(CC) $(LFLAGS) checknews.o process.o cpathinit.o -o checknews
|
|csendbatch: csendbatch.sh Makefile
| unixtovms csendbatch.sh
| sed -e "s%LIBDIR%$(LIBDIR)%g" \
| -e "s%UUXFLAGS%$(UUXFLAGS)%g" \
| -e "s%BATCHDIR%$(BATCHDIR)%g" csendbatch.sh > csendbatch
| unixtovms csendbatch
|
|sendbatch: sendbatch.sh Makefile
| unixtovms sendbatch.sh
| sed -e "s%LIBDIR%$(LIBDIR)%g" \
| -e "s%UUXFLAGS%$(UUXFLAGS)%g" \
| -e "s%BATCHDIR%$(BATCHDIR)%g" sendbatch.sh > sendbatch
| unixtovms sendbatch
|
|cunbatch: cunbatch.sh Makefile
| unixtovms cunbatch.sh
| sed -e "s%LIBDIR%$(LIBDIR)%g" \
| -e "s%BINDIR%$(BINDIR)%g" cunbatch.sh > cunbatch
| unixtovms cunbatch
|
|rmgroup: rmgroup.sh Makefile
| unixtovms rmgroup.sh
| sed -e "s%LIBDIR%$(LIBDIR)%g" \
| -e "s%SPOOLDIR%$(SPOOLDIR)%g" rmgroup.sh > rmgroup
| unixtovms rmgroup
|
|checkgroups: checkgroups.sh Makefile
| unixtovms checkgroups.sh
| sed -e "s%LIBDIR%$(LIBDIR)%g" checkgroups.sh > checkgroups
| unixtovms checkgroups
|
|sendnews.o: sendnews.c defs.h
| $(CC) $(CFLAGS) -c sendnews.c
|
|fullname.o: defs.h
|
|expire: Makefile $(EXPOBJS)
| $(CC) $(LFLAGS) -o expire $(EXPOBJS) $(LIBS)
|
|header.o: header.c header.h defs.h
| $(CC) $(CFLAGS) -c header.c
|
|expire.o: expire.c defs.h Makefile params.h ndir.h header.h
| $(CC) $(CFLAGS) -c expire.c
|
|digest.o: digest.c
| $(CC) $(CFLAGS) -c digest.c
|
|params.h: defs.h header.h
|
|# Some silliness here to get pathinit for both readnews & inews
|rpathinit.o: pathinit.c rparams.h header.h params.h
| $(CC) $(CFLAGS) $(HOMENAME) -DREAD -c pathinit.c
| mv pathinit.o rpathinit.o
|
|ipathinit.o: pathinit.c iparams.h header.h params.h
| $(CC) $(CFLAGS) $(HOMENAME) -DINEW -c pathinit.c
| mv pathinit.o ipathinit.o
|
|cpathinit.o: pathinit.c iparams.h header.h params.h
| $(CC) $(CFLAGS) $(HOMENAME) -DCHKN -c pathinit.c
| mv pathinit.o cpathinit.o
|
|epathinit.o: pathinit.c iparams.h header.h params.h
| $(CC) $(CFLAGS) $(HOMENAME) -DEXP -c pathinit.c
| mv pathinit.o epathinit.o
|
|vmsfuncs:o vmsfuncs.c
| $(CC) $(CFLAGS) -c vmsfuncs.c
|
|tags: /tmp
| ctags -w *.h *.c
|
|$(LIBDIR):
| mkdir $(LIBDIR)
| chmod 755 $(LIBDIR)
| chown $(NEWSUSR) $(LIBDIR)
| chgrp $(NEWSGRP) $(LIBDIR)
|
|$(BINDIR):
| mkdir $(BINDIR)
| chmod 755 $(BINDIR)
| chown $(NEWSUSR) $(BINDIR)
| chgrp $(NEWSGRP) $(BINDIR)
!-FUNKY-STUFF-!
echo x - vmsfuncs.c [file 4 of 4]
sed 's/^|//' > vmsfuncs.c << '!-FUNKY-STUFF-!'
|/*
| * vmsfuncs - perform various functions for news running under Eunice
| */
|#include <errno.h>
|extern int errno;
|
|/*
| * vmslink allows simulation of file linking under VMS. It actually
| * performs a copy of the file. It attempts to appear as link(2)
| * in most other respects.
| */
|vmslink(infile,outfile)
|char *infile, *outfile;
|{
| int in, out;
| char buf[2];
|
| if ( (access(outfile,0) == 0) ) {
| errno = EEXIST;
| return -1;
| }
|
| out = creat(outfile,0766);
| if ( out == -1 ) {
| errno = EACCES;
| return -1;
| }
|
| in = open(infile, 0);
| if ( in < 0 ) {
| unlink(outfile);
| errno = ENOENT;
| return -1;
| }
|
| while( read(in, buf, 1) > 0 ) {
| if ( write(out, buf, 1) != 1 ) {
| close(in);
| close(out);
| errno = EIO;
| return -1;
| }
| }
|
| close(in);
| close(out);
| return 0;
|}
|
|
|/*
| * vmsdelete deletes all revisions of a file. It attempts to
| * appear as unlink(2) under conventional Unix in other respects.
| */
|vmsdelete(file)
|char *file;
|{
| int i;
|
| i = unlink(file);
| if ( i != 0 )
| return i;
|
| i = errno;
| while ( unlink(file) == 0 ) ;
| errno = i;
|
| return 0;
|}
|
|/*
| * Convert a Unix file to a VMS fixed record format file by
| * executing the 'unixtovms' command.
| */
|unixtovms(file)
|char *file;
|{
| char buf[128];
| strcpy(buf,"exec /etc/unixtovms ");
| strcat(buf,file);
| return system(buf);
|}
|
|
|/*
| * Convert a VMS fixed record format file to a Unix file by
| * executing the 'vmstounix' command.
| */
|vmstounix(file)
|char *file;
|{
| char buf[128];
| strcpy(buf,"exec /etc/vmstounix ");
| strcat(buf,file);
| return system(buf);
|}
|
|
!-FUNKY-STUFF-!
exit
--
Chip Rosenthal, Intel/Santa Clara
{ idi|intelca|icalqa|kremvax|qubix|ucscc } ! t4test ! { chip|news }
More information about the Comp.sources.unix
mailing list