home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 28
/
amigaformatcd28.iso
/
-seriously_amiga-
/
archivers
/
arcppc
/
src.lha
/
src
/
Patch1
< prev
next >
Wrap
Text File
|
1998-04-08
|
51KB
|
1,942 lines
Article 181 of comp.sources.bugs:
Path: um-math!hyc
From: hyc@math.lsa.umich.edu (Howard Chu)
Newsgroups: comp.sources.bugs,comp.sources.d
Subject: ARC 5.21 Patch #1
Message-ID: <385@clio.math.lsa.umich.edu>
Date: 31 Jul 88 23:39:05 GMT
Sender: usenet@math.lsa.umich.edu
Reply-To: hyc@math.lsa.umich.edu (Howard Chu)
Organization: University of Michigan Math Dept., Ann Arbor
Lines: 1925
Xref: um-math comp.sources.bugs:181 comp.sources.d:451
UUCP-Path: {mailrus,umix}!um-math!hyc
Ok, it's been a little longer than I expected, but here 'tis. There were very
few real bugs, and a few more suggestions, and this reflects all changes from
those suggestions...
A new copy of the Makefile is included - it's about half as long as the diffs
would be. Make.tws is unchanged. New files for System V support are also in a
shar file of their own. Some people had problems with the scandir.c posted in
the previous release - this collection of files should fix things. For folk
using SYSVR2, a rename() function is provided. (Thanks to Janet Walz for this
one, as well as Rich Salz...)
Bugs found & fixed -
fopen() on various systems may or may not accept the 'b' (binary) flag
in the mode parameter, and may or may not ignore it. It's no longer
present when compiled on a Unix system. This seemed to only be a big
problem for Ultrix users, 1.2 & 2.2 inclusive.
The pack routine would bomb with a divide by zero error after storing
a zero length file in an archive. Stupid oversight, fixed.
The memset() routine was omitted, (it's in the library, right?) but
isn't part of the standard BSD library. It's back.
Other changes made -
(Un*x) Temp files will now be created in /tmp unless otherwise specified.
Archive files can have arbitrarily long names.
Filenames longer than 12 chars will be truncated, or the file will be
skipped, when adding to an archive. Behavior is modified by both the
Note and Warn option flags.
Now uses localtime() to parse file timestamps.
(GEMDOS) Can redirect stdout when invoked from GEM desktop
Accepts "*.*" as wildcard, as well as '*'
(MTS) Fixed up handling of file buffers.
Compiled with GNU gcc on a Sun, Mark Williams C 3.0.6 on Atari ST, and C87
on MTS. All of these are ANSI conformant compilers.
Thanks again to John Gilmore, Jon Zeeff, and everyone else who mailed me
comments & bug reports & such. This should take care of 99% of the complaints.
}-)
Howard
#--------------------------------CUT HERE-------------------------------------
#! /bin/sh
#
# This is a shell archive. Save this into a file, edit it
# and delete all lines above this comment. Then give this
# file to sh by executing the command "sh file". The files
# will be extracted into the current directory owned by
# you with default permissions.
#
# The files contained herein are:
#
# -r--r--r-- 1 hyc 3163 Jul 31 18:33 Makefile
# -rw-r--r-- 1 hyc 9367 Jul 22 16:30 Sysvarcstuf
# -rw-r--r-- 1 hyc 32469 Jul 31 18:58 patches
#
echo 'x - Makefile'
if test -f Makefile; then echo 'shar: not overwriting Makefile'; else
sed 's/^X//' << '________This_Is_The_END________' > Makefile
X#
X# Makefile for Hack-attack 1.3
X# VAX 11/780 BSD4.2 "ARC" utility
X#
X# Originals from Dan Lanciani, James Turner, and others...
X#
X# Modified to support squashing, also added targets for the time routine
X# library. -- Howard Chu, hyc@umix.cc.umich.edu, 4-11-88
X#
X# Modified again by John Gilmore & Howard Chu, July 1988.
X#
X# I put SRCDIR on a real disk on the ST, but copy the makefile to a
X# RAMdisk and compile from there. Makes things go a bit quicker...
X# This has to be done in the shell, to get the trailing backslash
X# specified correctly. e.g., setenv SRCDIR='d:\src\arc\'
XSRCDIR =
X
XHEADER = $(SRCDIR)arc.h $(SRCDIR)arcs.h
X
X# Add a ".TTP" suffix to the executable files on an ST.
X#PROG = .ttp
XPROG =
X
X# TWSLIB is only needed on Unix systems. Likewise for TWHEAD.
X#TWSLIB =
X#TWHEAD =
XTWSLIB = libtws.a
XTWHEAD = tws.h
X
X# For MWC 3.0 on the Atari ST, use:
X#CFLAGS = -VCOMPAC -VPEEP
XCFLAGS = -O
X
XOBJS = arc.o arcadd.o arccode.o arccvt.o arcdata.o arcdel.o arcdos.o \
Xarcext.o arcio.o arclst.o arclzw.o arcmatch.o arcpack.o arcrun.o \
Xarcsq.o arcsqs.o arcsvc.o arctst.o arcunp.o arcusq.o arcmisc.o
X
XMOBJ = marc.o arcdata.o arcdos.o arcio.o arcmatch.o arcmisc.o
X
Xarc$(PROG): $(OBJS) $(TWSLIB)
X $(CC) -o arc$(PROG) $(OBJS) $(TWSLIB)
X
Xmarc$(PROG): $(MOBJ) $(TWSLIB)
X $(CC) -o marc$(PROG) $(MOBJ) $(TWSLIB)
X
Xclean:
X -rm *.o arc$(PROG) marc$(PROG) $(TWSLIB)
X
Xarc.o: $(SRCDIR)arc.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arc.c
Xmarc.o: $(SRCDIR)marc.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)marc.c
Xarcadd.o: $(SRCDIR)arcadd.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcadd.c
Xarccode.o: $(SRCDIR)arccode.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arccode.c
Xarccvt.o: $(SRCDIR)arccvt.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arccvt.c
Xarcdata.o: $(SRCDIR)arcdata.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcdata.c
Xarcdel.o: $(SRCDIR)arcdel.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcdel.c
Xarcdir.o: $(SRCDIR)arcdir.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcdir.c
Xarcdos.o: $(SRCDIR)arcdos.c $(HEADER) $(TWHEAD)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcdos.c
Xarcext.o: $(SRCDIR)arcext.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcext.c
Xarcio.o: $(SRCDIR)arcio.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcio.c
Xarclst.o: $(SRCDIR)arclst.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arclst.c
Xarclzw.o: $(SRCDIR)arclzw.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arclzw.c
Xarcmatch.o: $(SRCDIR)arcmatch.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcmatch.c
Xarcmisc.o: $(SRCDIR)arcmisc.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcmisc.c
Xarcpack.o: $(SRCDIR)arcpack.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcpack.c
Xarcrun.o: $(SRCDIR)arcrun.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcrun.c
Xarcsq.o: $(SRCDIR)arcsq.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcsq.c
Xarcsqs.o: $(SRCDIR)arcsqs.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcsqs.c
Xarcsvc.o: $(SRCDIR)arcsvc.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcsvc.c
Xarctst.o: $(SRCDIR)arctst.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arctst.c
Xarcunp.o: $(SRCDIR)arcunp.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcunp.c
Xarcusq.o: $(SRCDIR)arcusq.c $(HEADER)
X $(CC) $(CFLAGS) -c $(SRCDIR)arcusq.c
X
Xlibtws.a:
X make -f Make.tws libtws.a
________This_Is_The_END________
if test `wc -c < Makefile` -ne 3163; then
echo 'shar: Makefile was damaged during transit (should have been 3163 bytes)'
fi
fi ; : end of overwriting check
echo 'x - Sysvarcstuf'
if test -f Sysvarcstuf; then echo 'shar: not overwriting Sysvarcstuf'; else
sed 's/^X//' << '________This_Is_The_END________' > Sysvarcstuf
X#--------------------------------CUT HERE-------------------------------------
X#! /bin/sh
X#
X# This is a shell archive. Save this into a file, edit it
X# and delete all lines above this comment. Then give this
X# file to sh by executing the command "sh file". The files
X# will be extracted into the current directory owned by
X# you with default permissions.
X#
X# The files contained herein are:
X#
X# -rw-r--r-- 1 hyc 539 Jul 22 16:30 README
X# -rw-r--r-- 1 hyc 787 Jul 22 15:10 getwd.c
X# -rw-r--r-- 1 hyc 280 Jul 22 16:14 rename.c
X# -rw-r--r-- 1 hyc 2353 Jul 22 15:55 scandir.3
X# -rw-r--r-- 1 hyc 1875 Jul 22 15:55 scandir.c
X# -rw-r--r-- 1 hyc 397 Jul 22 15:10 utimes.c
X#
Xecho 'x - README'
Xif test -f README; then echo 'shar: not overwriting README'; else
Xsed 's/^X//' << '________This_Is_The_END________' > README
XXThe enclosed files should be sufficient for bringing up ARC on a Sys V R3
XXsystem. As Jon mentions, Doug Gwyn's directory routines are needed for
XXSys V R2. The enclosed copy of scandir is new, as far as I can tell, and
XXI've removed the (unneeded) ftw.? files. Also added a rename() routine,
XXcourtesy of Janet Walz. (And an addition from Rich Salz.)
XX
XX[see comp.sources.unix, volume 9, for gwyn-dir-lib...]
XX
XXThanks again to Jon Zeeff, Janet Walz, and Rich Salz for their help.
XX -- Howard Chu
XX hyc@umix.cc.umich.edu
XX {uunet,rutgers}!umix!hyc
X________This_Is_The_END________
Xif test `wc -c < README` -ne 539; then
X echo 'shar: README was damaged during transit (should have been 539 bytes)'
Xfi
Xfi ; : end of overwriting check
Xecho 'x - getwd.c'
Xif test -f getwd.c; then echo 'shar: not overwriting getwd.c'; else
Xsed 's/^X//' << '________This_Is_The_END________' > getwd.c
XX/*
XX * 4.2bsd getwd simulation for Sys V.3
XX */
XX
XX#include <stdio.h>
XX
XX#define SYSV3
XX
XX#define MAXWD 1024 /* limited by 4.2 getwd(2) */
XX
XX#ifdef SYSV3
XX
XXchar *getcwd();
XX
XXchar *
XXgetwd(path)
XXchar *path;
XX{
XX return(getcwd(path,MAXWD));
XX}
XX
XX#else
XX
XX/*
XX * 4.2bsd getwd simulation for Sys V.2
XX */
XX
XX#include <stdio.h>
XX
XX#define MAXWD 1024 /* limited by 4.2 getwd(2) */
XX
XXchar *
XXgetwd(path)
XXchar *path;
XX{
XX char *nlp;
XX FILE *fp;
XX FILE *popen();
XX char *strrchr();
XX
XX putenv("IFS= \t\n");
XX fp = popen("PATH=/bin:/usr/bin pwd", "r");
XX if (fp == NULL)
XX return 0;
XX if (fgets(path, MAXWD, fp) == NULL) {
XX (void) pclose(fp);
XX return 0;
XX }
XX if ((nlp = strrchr(path, '\n')) != NULL)
XX *nlp = '\0';
XX (void) pclose(fp);
XX return path;
XX}
XX#endif
XX
X________This_Is_The_END________
Xif test `wc -c < getwd.c` -ne 787; then
X echo 'shar: getwd.c was damaged during transit (should have been 787 bytes)'
Xfi
Xfi ; : end of overwriting check
Xecho 'x - rename.c'
Xif test -f rename.c; then echo 'shar: not overwriting rename.c'; else
Xsed 's/^X//' << '________This_Is_The_END________' > rename.c
XX/*
XX * substitute for BSD/SVR3 rename() system call, from
XX * Janet Walz, walz@mimsy.umd.edu & Rich Salz, rsalz@pineapple.bbn.com
XX */
XX
XXint rename(oldname,newname)
XXchar *oldname,*newname;
XX{
XX (void)unlink(newname);
XX if(link(oldname,newname))
XX return(-1);
XX return(unlink(oldname));
XX}
X________This_Is_The_END________
Xif test `wc -c < rename.c` -ne 280; then
X echo 'shar: rename.c was damaged during transit (should have been 280 bytes)'
Xfi
Xfi ; : end of overwriting check
Xecho 'x - scandir.3'
Xif test -f scandir.3; then echo 'shar: not overwriting scandir.3'; else
Xsed 's/^X//' << '________This_Is_The_END________' > scandir.3
XX.TH SCANDIR 3
XX.\" $Header: scandir.3,v 1.1 87/12/29 21:35:54 rsalz Exp $
XX.SH NAME
XXscandir, alphasort \- scan a directory
XX.SH SYNOPSIS
XX.nf
XX.ft B
XX#include <sys/types.h>
XX#include <sys/dirent.h>
XX
XXint
XXscandir(name, list, selector, sorter)
XX.in +4n
XXchar *name;
XXstruct dirent ***list;
XXint (*selector)();
XXint (*sorter)();
XX.in -4n
XX
XXint
XXalphasort(d1, d2)
XX.in +4n
XXstruct dirent **d1;
XXstruct dirent **d2;
XX.in -4n
XX.ft R
XX.fi
XX.SH DESCRIPTION
XX.I Scandir
XXreads the directory
XX.I name
XXand builds a NULL\-terminated array of pointers to the entries found
XXin that directory.
XXThis array is put into the location pointed to by the
XX.I list
XXparameter.
XX.PP
XXIf the
XX.I selector
XXparameter is non\-NULL, it is taken to be a pointer to a function called
XXwith each entry, to determine whether or not it should be included in
XXthe returned list.
XXIf the parameter is NULL, all entries are included.
XX.PP
XXAs an added feature, the entries can be sorted (with
XX.IR qsort (3))
XXbefore the list is returned.
XXIf the
XX.I sorter
XXparameter is non\-NULL, it is passed to qsort to use as the comparison
XXfunction.
XXThe
XX.I alphasort
XXroutine is provided to sort the array alphabetically.
XX.PP
XXThe array pointed to by
XX.I list
XXand the items it points to are all space obtained through
XX.IR malloc (3),
XXand their storage can be reclaimed as shown in the example below.
XX.SH "EXAMPLE"
XXHere is a small
XX.IR ls (1)\-like
XXprogram:
XX.ne 50
XX.RS
XX.nf
XX#include <stdio.h>
XX#include <sys/types.h>
XX#include <sys/stat.h>
XX#include <sys/dir.h>
XX
XXextern int alphasort();
XX
XXstatic int
XXfilesonly(e)
XX struct dirent *e;
XX{
XX struct stat sb;
XX
XX return(stat(e->d_name, &sb) >= 0 && (sb.st_mode & S_IFMT) == S_IFREG);
XX}
XX
XXmain(ac, av)
XX int ac;
XX char *av[];
XX{
XX register int i;
XX register int j;
XX struct dirent **list;
XX
XX if (ac != 2) {
XX fprintf(stderr, "usage: %s dirname\n", av[0]);
XX exit(1);
XX }
XX if (chdir(av[1]) < 0) {
XX perror(av[1]);
XX exit(1);
XX }
XX if ((i = scandir(".", &list, filesonly, alphasort)) < 0) {
XX perror("Error reading directory");
XX exit(1);
XX }
XX for (j = 0; j < i; j++)
XX printf("%s\n", list[j]->d_name);
XX for (j = 0; j < i; j++)
XX free((char *)list[j]);
XX free((char *)list);
XX exit(0);
XX}
XX.fi
XX.RE
XX.SH "SEE ALSO"
XXdirectory(3), qsort(3)
XX.SH DIAGNOSTICS
XXReturns the number of entries in the ``list,'' or \-1 if the directory
XXcould not be opened or a memory allocation failed.
XX.SH BUGS
XXThe routine can be slightly wasteful of space.
X________This_Is_The_END________
Xif test `wc -c < scandir.3` -ne 2353; then
X echo 'shar: scandir.3 was damaged during transit (should have been 2353 bytes)'
Xfi
Xfi ; : end of overwriting check
Xecho 'x - scandir.c'
Xif test -f scandir.c; then echo 'shar: not overwriting scandir.c'; else
Xsed 's/^X//' << '________This_Is_The_END________' > scandir.c
XX/*
XX** SCANDIR
XX** Scan a directory, collecting all (selected) items into a an array.
XX*/
XX#include <stdio.h>
XX#include <sys/types.h>
XX#include <dirent.h>
XX
XX#ifdef RCSID
XXstatic char RCS[] = "$Header: scandir.c,v 1.1 87/12/29 21:35:56 rsalz Exp $";
XX#endif /* RCSID */
XX
XX/* Initial guess at directory size. */
XX#define INITIAL_SIZE 20
XX
XX/* A convenient shorthand. */
XXtypedef struct dirent ENTRY;
XX
XX#define DIRSIZ(d) (sizeof(struct dirent) + strlen(d->d_name) + 1)
XX
XX/* Linked in later. */
XXextern char *malloc();
XXextern char *realloc();
XXextern char *strcpy();
XX
XX
XXint
XXscandir(Name, List, Selector, Sorter)
XX char *Name;
XX ENTRY ***List;
XX int (*Selector)();
XX int (*Sorter)();
XX{
XX register ENTRY **names;
XX register ENTRY *E;
XX register DIR *Dp;
XX register int i;
XX register int size;
XX
XX /* Get initial list space and open directory. */
XX size = INITIAL_SIZE;
XX if ((names = (ENTRY **)malloc(size * sizeof names[0])) == NULL
XX || (Dp = opendir(Name)) == NULL)
XX return(-1);
XX
XX /* Read entries in the directory. */
XX for (i = 0; E = readdir(Dp); )
XX if (Selector == NULL || (*Selector)(E)) {
XX /* User wants them all, or he wants this one. */
XX if (++i >= size) {
XX size <<= 1;
XX names = (ENTRY **)realloc((char *)names, size * sizeof names[0]);
XX if (names == NULL) {
XX closedir(Dp);
XX return(-1);
XX }
XX }
XX
XX /* Copy the entry. */
XX if ((names[i - 1] = (ENTRY *)malloc(DIRSIZ(E))) == NULL) {
XX closedir(Dp);
XX return(-1);
XX }
XX names[i - 1]->d_ino = E->d_ino;
XX names[i - 1]->d_reclen = E->d_reclen;
XX /* names[i - 1]->d_namlen = E->d_namlen; */
XX (void)strcpy(names[i - 1]->d_name, E->d_name);
XX }
XX
XX /* Close things off. */
XX names[i] = NULL;
XX *List = names;
XX closedir(Dp);
XX
XX /* Sort? */
XX if (i && Sorter)
XX qsort((char *)names, i, sizeof names[0], Sorter);
XX
XX return(i);
XX}
X________This_Is_The_END________
Xif test `wc -c < scandir.c` -ne 1875; then
X echo 'shar: scandir.c was damaged during transit (should have been 1875 bytes)'
Xfi
Xfi ; : end of overwriting check
Xecho 'x - utimes.c'
Xif test -f utimes.c; then echo 'shar: not overwriting utimes.c'; else
Xsed 's/^X//' << '________This_Is_The_END________' > utimes.c
XX
XX/* bsd utimes emulation for Sys V */
XX/* by Jon Zeeff */
XX
XX#include <sys/types.h>
XX
XXstruct utimbuf {
XX time_t actime;
XX time_t modtime;
XX};
XX
XXstruct timeval {
XX long tv_sec;
XX long tv_usec;
XX};
XX
XXutimes(path,tvp)
XXchar *path;
XXstruct timeval tvp[2];
XX{
XX
XXstruct utimbuf times;
XX
XXtimes.actime = (time_t) tvp[0].tv_sec;
XXtimes.modtime = (time_t) tvp[1].tv_sec;
XX
XXreturn utime(path,times);
XX
XX}
X________This_Is_The_END________
Xif test `wc -c < utimes.c` -ne 397; then
X echo 'shar: utimes.c was damaged during transit (should have been 397 bytes)'
Xfi
Xfi ; : end of overwriting check
Xexit 0
________This_Is_The_END________
if test `wc -c < Sysvarcstuf` -ne 9367; then
echo 'shar: Sysvarcstuf was damaged during transit (should have been 9367 bytes)'
fi
fi ; : end of overwriting check
echo 'x - patches'
if test -f patches; then echo 'shar: not overwriting patches'; else
sed 's/^X//' << '________This_Is_The_END________' > patches
Xdiff -c /usr2/polymnia/hyc/News/arc/Make.tws arc/Make.tws
X*** /usr2/polymnia/hyc/News/arc/Make.tws Wed Jul 6 02:26:14 1988
X--- arc/Make.tws Sun Jul 31 18:29:28 1988
X***************
X*** 22,33 ****
X
X libtws.a: dtime.o dtimep.o lexstring.o
X ar r libtws.a dtime.o dtimep.o lexstring.o
X! # The following amusing bullshit makes sure that ranlib
X! # gets executed if it is present, no matter which shell
X! # make uses. If there's a better way to do this, someone
X! # please tell me!
X! -if test -r /usr/bin/ranlib ; then ranlib libtws.a ; fi
X! -if ( -r /usr/bin/ranlib ) ranlib libtws.a
X
X dtime.o: dtime.c tws.h
X
X--- 22,29 ----
X
X libtws.a: dtime.o dtimep.o lexstring.o
X ar r libtws.a dtime.o dtimep.o lexstring.o
X! #Hope it goes, but no big deal if not. -- hyc
X! -ranlib libtws.a
X
X dtime.o: dtime.c tws.h
X
Xdiff -c /usr2/polymnia/hyc/News/arc/arc.c arc/arc.c
X*** /usr2/polymnia/hyc/News/arc/arc.c Wed Jul 6 02:26:55 1988
X--- arc/arc.c Sun Jul 31 18:43:40 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arc.c,v 1.10 88/06/17 15:22:48 hyc Locked $
X */
X
X /* ARC - Archive utility
X--- 1,5 ----
X /*
X! * $Header: arc.c,v 1.12 88/07/31 18:39:50 hyc Exp $
X */
X
X /* ARC - Archive utility
X***************
X*** 73,88 ****
X #include <stdio.h>
X #include "arc.h"
X
X int strlen();
X void addarc(), delarc(), extarc(), lstarc(), tstarc(), cvtarc(), runarc();
X void abort();
X #if MTS
X void etoa();
X #endif
X #if GEMDOS
X! long _stksize = 24576;
X #endif
X char *strcpy(), *strcat();
X
X static char **lst; /* files list */
X static int lnum; /* length of files list */
X--- 73,95 ----
X #include <stdio.h>
X #include "arc.h"
X
X+ #if UNIX
X+ #include <sys/types.h>
X+ #include <sys/stat.h>
X+ #endif
X+
X int strlen();
X void addarc(), delarc(), extarc(), lstarc(), tstarc(), cvtarc(), runarc();
X void abort();
X+ static void expandlst();
X #if MTS
X void etoa();
X #endif
X #if GEMDOS
X! long _stksize = 65536L;
X #endif
X char *strcpy(), *strcat();
X+ char *makefnam(); /* filename fixup routine */
X
X static char **lst; /* files list */
X static int lnum; /* length of files list */
X***************
X*** 93,99 ****
X {
X char opt = 0;/* selected action */
X char *a; /* option pointer */
X- char *makefnam(); /* filename fixup routine */
X void upper();/* case conversion routine */
X char *index();/* string index utility */
X char *envfind(); /* environment searcher */
X--- 100,105 ----
X***************
X*** 101,111 ****
X--- 107,121 ----
X char *arctemp2, *calloc(), *mktemp();
X #if GEMDOS
X void exitpause();
X+ int append;
X #endif
X #if MTS
X fortran void guinfo();
X char gotinf[4];
X #endif
X+ #if UNIX
X+ struct stat sbuf;
X+ #endif
X
X if (num < 3) {
X printf("ARC - Archive utility, Version 5.21, created on 04/22/87 at 15:05:21\n");
X***************
X*** 198,207 ****
X if (arctemp[n - 1] != CUTOFF)
X arctemp[n] = CUTOFF;
X }
X #if !MSDOS
X! strcat(arctemp, mktemp("AXXXXXX"));
X #else
X strcat(arctemp, "$ARCTEMP");
X #endif
X #else
X guinfo("SHFSEP ", gotinf);
X--- 208,224 ----
X if (arctemp[n - 1] != CUTOFF)
X arctemp[n] = CUTOFF;
X }
X+ #if UNIX
X+ else strcpy(arctemp, "/tmp/");
X+ #endif
X #if !MSDOS
X! {
X! static char tempname[] = "AXXXXXX";
X! strcat(arctemp, mktemp(tempname));
X! }
X #else
X strcat(arctemp, "$ARCTEMP");
X+ arctemp2 = NULL;
X #endif
X #else
X guinfo("SHFSEP ", gotinf);
X***************
X*** 223,229 ****
X #endif
X
X /* create archive names, supplying defaults */
X! makefnam(arg[2], ".arc", arcname);
X /* makefnam(".$$$",arcname,newname); */
X sprintf(newname, "%s.arc", arctemp);
X makefnam(".BAK", arcname, bakname);
X--- 240,253 ----
X #endif
X
X /* create archive names, supplying defaults */
X! #if UNIX
X! if (!stat(arg[2],&sbuf))
X! strcpy(arcname,arg[2]);
X! else
X! makefnam(arg[2],".arc",arcname);
X! #else
X! makefnam(arg[2], ".ARC", arcname);
X! #endif
X /* makefnam(".$$$",arcname,newname); */
X sprintf(newname, "%s.arc", arctemp);
X makefnam(".BAK", arcname, bakname);
X***************
X*** 298,306 ****
X--- 322,346 ----
X for (n = 0; n < lnum;) {/* expand indirect references */
X if (*lst[n] == '@')
X expandlst(n);
X+ #if GEMDOS /* redirect stdout from the desktop...*/
X+ else if (*lst[n] == '>') {
X+ arctemp2 = (++lst[n]);
X+ lst[n] = lst[lnum-1]; /* delete this entry */
X+ lnum--;
X+ if (arctemp2[0] == '>') {
X+ append = 1;
X+ arctemp2++;
X+ }
X+ else append = 0;
X+ }
X+ #endif
X else
X n++;
X }
X+ #if GEMDOS
X+ if (arctemp2)
X+ freopen(arctemp2,append ? "a" : "w",stdout);
X+ #endif
X
X /* act on whatever action command was given */
X
X***************
X*** 349,355 ****
X #endif
X return nerrs;
X }
X! static
X expandlst(n) /* expand an indirect reference */
X int n; /* number of entry to expand */
X {
X--- 389,395 ----
X #endif
X return nerrs;
X }
X! static void
X expandlst(n) /* expand an indirect reference */
X int n; /* number of entry to expand */
X {
Xdiff -c /usr2/polymnia/hyc/News/arc/arc.h arc/arc.h
X*** /usr2/polymnia/hyc/News/arc/arc.h Wed Jul 6 02:26:56 1988
X--- arc/arc.h Sun Jul 31 18:45:33 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arc.h,v 1.7 88/06/01 17:51:06 hyc Locked $
X */
X
X #undef MSDOS
X--- 1,5 ----
X /*
X! * $Header: arc.h,v 1.9 88/07/31 18:43:18 hyc Exp $
X */
X
X #undef MSDOS
X***************
X*** 27,32 ****
X--- 27,34 ----
X #if MSDOS || GEMDOS
X #define DOS 1
X #define CUTOFF '\\'
X+ #define OPEN_R "rb"
X+ #define OPEN_W "wb"
X #endif
X
X #if !MSDOS
X***************
X*** 37,53 ****
X #if BSD || SYSV
X #define UNIX 1
X #define CUTOFF '/'
X #include <ctype.h>
X #endif
X
X #if MTS
X! #define rindex strrchr
X! #define index strchr
X! #undef USEGFINFO /* define this to use GFINFO for directory */
X! #define USECATSCAN /* scanning, else use CATSCAN/FILEINFO... */
X #define CUTOFF sepchr[0]
X #endif
X
X /* ARC - Archive utility - ARC Header
X
X Version 2.17, created on 04/22/87 at 13:09:43
X--- 39,60 ----
X #if BSD || SYSV
X #define UNIX 1
X #define CUTOFF '/'
X+ #define OPEN_R "r"
X+ #define OPEN_W "w"
X #include <ctype.h>
X #endif
X
X #if MTS
X! #define USEGFINFO 0 /* define this to use GFINFO for directory */
X! #define USECATSCAN 1 /* scanning, else use CATSCAN/FILEINFO... */
X #define CUTOFF sepchr[0]
X #endif
X
X+ #if MTS || SYSV
X+ #define rindex strrchr
X+ #define index strchr
X+ #endif
X+
X /* ARC - Archive utility - ARC Header
X
X Version 2.17, created on 04/22/87 at 13:09:43
X***************
X*** 69,75 ****
X #define ARCVER 9 /* archive header version code */
X #define STRLEN 100 /* system standard string length */
X #define FNLEN 13 /* file name length */
X! #define MAXARG 25 /* maximum number of arguments */
X
X #ifndef DONT_DEFINE /* Defined by arcdata.c */
X #include "arcs.h"
X--- 76,82 ----
X #define ARCVER 9 /* archive header version code */
X #define STRLEN 100 /* system standard string length */
X #define FNLEN 13 /* file name length */
X! #define MAXARG 400 /* maximum number of arguments */
X
X #ifndef DONT_DEFINE /* Defined by arcdata.c */
X #include "arcs.h"
Xdiff -c /usr2/polymnia/hyc/News/arc/arcadd.c arc/arcadd.c
X*** /usr2/polymnia/hyc/News/arc/arcadd.c Wed Jul 6 02:26:57 1988
X--- arc/arcadd.c Sun Jul 31 18:47:27 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcadd.c,v 1.8 88/06/13 00:31:15 hyc Locked $
X */
X
X /*
X--- 1,5 ----
X /*
X! * $Header: arcadd.c,v 1.9 88/07/31 18:45:14 hyc Exp $
X */
X
X /*
X***************
X*** 231,237 ****
X int upd = 0;/* true if replacing an entry */
X
X #if !MTS
X! if (!(f = fopen(path, "rb")))
X #else
X if (image)
X f = fopen(path, "rb");
X--- 231,237 ----
X int upd = 0;/* true if replacing an entry */
X
X #if !MTS
X! if (!(f = fopen(path, OPEN_R)))
X #else
X if (image)
X f = fopen(path, "rb");
X***************
X*** 246,251 ****
X--- 246,280 ----
X }
X return;
X }
X+ #if !DOS
X+ if (strlen(name) >= FNLEN) {
X+ if (warn) {
X+ char buf[STRLEN];
X+ printf("WARNING: File %s name too long!\n", name);
X+ name[FNLEN-1]='\0';
X+ while(1) {
X+ printf(" Truncate to %s (y/n)? ", name);
X+ fflush(stdout);
X+ fgets(buf, STRLEN, stdin);
X+ *buf = toupper(*buf);
X+ if (*buf == 'Y' || *buf == 'N')
X+ break;
X+ }
X+ if (*buf == 'N') {
X+ printf("Skipping...\n");
X+ fclose(f);
X+ return;
X+ }
X+ }
X+ else {
X+ if (note)
X+ printf("Skipping file: %s - name too long.\n",
X+ name);
X+ fclose(f);
X+ return;
X+ }
X+ }
X+ #endif
X strcpy(nhdr.name, name);/* save name */
X nhdr.size = 0; /* clear out size storage */
X nhdr.crc = 0; /* clear out CRC check storage */
X***************
X*** 257,269 ****
X int inlen;
X struct GDDSECT *region;
X
X! region=gdinfo(f->_fd);
X inlen=region->GDINLEN;
X! buffer=malloc(inlen); /* maximum line length */
X setbuf(f,buffer);
X f->_bufsiz=inlen;
X! f->_mods|=0x00040000; /* Don't do "$continue with" */
X! f->_mods&=0xfff7ffff; /* turn it off, if set... */
X }
X getstamp(path, &nhdr.date, &nhdr.time);
X #endif
X--- 286,298 ----
X int inlen;
X struct GDDSECT *region;
X
X! region=gdinfo(f->_fd._fdub);
X inlen=region->GDINLEN;
X! buffer=malloc(inlen); /* maximum line length */
X setbuf(f,buffer);
X f->_bufsiz=inlen;
X! f->_mods|=_NOIC; /* Don't do "$continue with" */
X! f->_mods&=~_IC; /* turn it off, if set... */
X }
X getstamp(path, &nhdr.date, &nhdr.time);
X #endif
X***************
X*** 325,331 ****
X hdrver = ARCVER; /* anything but end marker */
X writehdr(&nhdr, new); /* write out header skeleton */
X pack(f, new, &nhdr); /* pack file into archive */
X- strcpy(nhdr.name, name);
X fseek(new, starts, 0); /* move back to header skeleton */
X writehdr(&nhdr, new); /* write out real header */
X fseek(new, nhdr.size, 1); /* skip over data to next header */
X--- 354,359 ----
Xdiff -c /usr2/polymnia/hyc/News/arc/arcdata.c arc/arcdata.c
X*** /usr2/polymnia/hyc/News/arc/arcdata.c Wed Jul 6 02:26:59 1988
X--- arc/arcdata.c Sun Jul 31 18:48:38 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcdata.c,v 1.6 88/06/01 19:17:58 hyc Locked $
X */
X
X /* ARC - Archive utility - ARCDATA
X--- 1,5 ----
X /*
X! * $Header: arcdata.c,v 1.7 88/07/31 18:47:22 hyc Exp $
X */
X
X /* ARC - Archive utility - ARCDATA
Xdiff -c /usr2/polymnia/hyc/News/arc/arcdos.c arc/arcdos.c
X*** /usr2/polymnia/hyc/News/arc/arcdos.c Wed Jul 6 02:27:00 1988
X--- arc/arcdos.c Sun Jul 31 18:49:42 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcdos.c,v 1.5 88/06/13 00:40:49 hyc Locked $
X */
X
X /*
X--- 1,5 ----
X /*
X! * $Header: arcdos.c,v 1.6 88/07/31 18:48:09 hyc Exp $
X */
X
X /*
X***************
X*** 35,40 ****
X--- 35,41 ----
X #endif
X
X #if SYSV
X+ #include <sys/times.h>
X struct timeval {
X long tv_sec;
X long tv_usec;
X***************
X*** 78,100 ****
X *time = ret[0];
X #endif
X #if UNIX
X! char *ctime();
X! struct stat *buf;
X! int day, hr, min, sec, yr, imon;
X! static char mon[4], *mons[12] = {
X! "Jan", "Feb", "Mar", "Apr", "May", "Jun",
X! "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
X! };
X
X! buf = (struct stat *) malloc(sizeof(struct stat));
X! fstat(fileno(f), buf);
X!
X! sscanf(ctime(&(buf->st_mtime)), "%*4s%3s%d%d:%d:%d%d", mon, &day, &hr, &min,
X! &sec, &yr);
X! for (imon = 0; imon < 12 && strcmp(mon, mons[imon]); imon++);
X!
X! *date = (unsigned short) (((yr - 1980) << 9) + ((imon + 1) << 5) + day);
X! *time = (unsigned short) ((hr << 11) + (min << 5) + sec / 2);
X #endif
X #if MTS
X fortran timein(),
X--- 79,93 ----
X *time = ret[0];
X #endif
X #if UNIX
X! struct stat buf;
X! struct tm *localtime(), *t;
X
X! fstat(fileno(f), &buf);
X! t=localtime(&(buf.st_mtime));
X! *date = (unsigned short) (((t->tm_year - 80) << 9) +
X! ((t->tm_mon + 1) << 5) + t->tm_mday);
X! *time = (unsigned short) ((t->tm_hour << 11) +
X! (t->tm_min << 5) + t->tm_sec / 2);
X #endif
X #if MTS
X fortran timein(),
Xdiff -c /usr2/polymnia/hyc/News/arc/arcext.c arc/arcext.c
X*** /usr2/polymnia/hyc/News/arc/arcext.c Wed Jul 6 02:27:01 1988
X--- arc/arcext.c Fri Jul 22 14:53:29 1988
X***************
X*** 155,161 ****
X }
X }
X #if !MTS
X! if (!(f = fopen(fix, "wb")))
X #else
X {
X fortran create();
X--- 155,161 ----
X }
X }
X #if !MTS
X! if (!(f = fopen(fix, OPEN_W)))
X #else
X {
X fortran create();
Xdiff -c /usr2/polymnia/hyc/News/arc/arcio.c arc/arcio.c
X*** /usr2/polymnia/hyc/News/arc/arcio.c Wed Jul 6 02:27:02 1988
X--- arc/arcio.c Sun Jul 31 18:50:20 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcio.c,v 1.7 88/06/02 16:27:32 hyc Locked $
X */
X
X /* ARC - Archive utility - ARCIO
X--- 1,5 ----
X /*
X! * $Header: arcio.c,v 1.9 88/07/31 18:49:19 hyc Exp $
X */
X
X /* ARC - Archive utility - ARCIO
X***************
X*** 102,112 ****
X #if MTS
X (void) atoe(hdr->name, strlen(hdr->name));
X #endif
X! for (i = 0; i<4; hdr->size<<=8, hdr->size += dummy[16-i], i++);
X hdr->date = (short) ((dummy[18] << 8) + dummy[17]);
X hdr->time = (short) ((dummy[20] << 8) + dummy[19]);
X hdr->crc = (short) ((dummy[22] << 8) + dummy[21]);
X! for (i = 0; i<4; hdr->length<<=8, hdr->length += dummy[26-i], i++);
X #endif
X
X if (hdr->date > olddate
X--- 102,112 ----
X #if MTS
X (void) atoe(hdr->name, strlen(hdr->name));
X #endif
X! for (i = 0, hdr->size=0; i<4; hdr->size<<=8, hdr->size += dummy[16-i], i++);
X hdr->date = (short) ((dummy[18] << 8) + dummy[17]);
X hdr->time = (short) ((dummy[20] << 8) + dummy[19]);
X hdr->crc = (short) ((dummy[22] << 8) + dummy[21]);
X! for (i = 0, hdr->length=0; i<4; hdr->length<<=8, hdr->length += dummy[26-i], i++);
X #endif
X
X if (hdr->date > olddate
X***************
X*** 175,187 ****
X FILE *t; /* file to write to */
X {
X c &= 0xff;
X! if (t)
X #if UNIX
X fputc(c, t);
X #else
X if (fputc(c, t) == EOF)
X abort("Write fail (disk full?)");
X #endif
X }
X
X /*
X--- 175,190 ----
X FILE *t; /* file to write to */
X {
X c &= 0xff;
X! if (t) {
X #if UNIX
X fputc(c, t);
X+ if (ferror(t))
X+ abort("Write failed");
X #else
X if (fputc(c, t) == EOF)
X abort("Write fail (disk full?)");
X #endif
X+ }
X }
X
X /*
Xdiff -c /usr2/polymnia/hyc/News/arc/arclzw.c arc/arclzw.c
X*** /usr2/polymnia/hyc/News/arc/arclzw.c Wed Jul 6 02:27:19 1988
X--- arc/arclzw.c Sun Jul 31 18:50:49 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arclzw.c,v 1.4 88/06/01 16:27:59 hyc Locked $
X */
X
X /*
X--- 1,5 ----
X /*
X! * $Header: arclzw.c,v 1.6 88/07/31 18:49:49 hyc Exp $
X */
X
X /*
X***************
X*** 59,65 ****
X unsigned char follower; /* char following string */
X unsigned short next; /* ptr to next in collision list */
X unsigned short predecessor; /* code for preceeding string */
X! }; /* string_tab[TABSIZE]; /* the code string table */
X
X
X /* definitions for the new dynamic Lempel-Zev crunching */
X--- 59,65 ----
X unsigned char follower; /* char following string */
X unsigned short next; /* ptr to next in collision list */
X unsigned short predecessor; /* code for preceeding string */
X! }; /* string_tab[TABSIZE]; the code string table */
X
X
X /* definitions for the new dynamic Lempel-Zev crunching */
Xdiff -c /usr2/polymnia/hyc/News/arc/arcmatch.c arc/arcmatch.c
X*** /usr2/polymnia/hyc/News/arc/arcmatch.c Wed Jul 6 02:27:20 1988
X--- arc/arcmatch.c Sun Jul 31 18:51:22 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcmatch.c,v 1.5 88/06/01 19:41:08 hyc Locked $
X */
X
X /*
X--- 1,5 ----
X /*
X! * $Header: arcmatch.c,v 1.6 88/07/31 18:50:18 hyc Exp $
X */
X
X /*
X***************
X*** 67,72 ****
X--- 67,77 ----
X upper(t); /* avoid case problems */
X #endif /* UNIX */
X #if GEMDOS
X+ char *strstr(), *i; /* allow "*.*" to mean '*' */
X+ if (i=strstr(t,"*.*")) {
X+ i++;
X+ *i='\0';
X+ }
X return(pnmatch(n, t, 0));
X #else
X /* first match name part */
Xdiff -c /usr2/polymnia/hyc/News/arc/arcmisc.c arc/arcmisc.c
X*** /usr2/polymnia/hyc/News/arc/arcmisc.c Wed Jul 6 02:27:21 1988
X--- arc/arcmisc.c Sun Jul 31 18:52:44 1988
X***************
X*** 1,6 ****
X /*
X * Miscellaneous routines to get ARC running on non-MSDOS systems...
X! * $Header: arcmisc.c,v 1.7 88/06/12 19:23:13 hyc Locked $
X */
X
X #include <stdio.h>
X--- 1,6 ----
X /*
X * Miscellaneous routines to get ARC running on non-MSDOS systems...
X! * $Header: arcmisc.c,v 1.8 88/07/31 18:50:56 hyc Exp $
X */
X
X #include <stdio.h>
X***************
X*** 55,61 ****
X #include <sys/types.h>
X #include <sys/dir.h>
X #include <sys/stat.h>
X! int rename();
X #endif
X
X #if SYSV
X--- 55,61 ----
X #include <sys/types.h>
X #include <sys/dir.h>
X #include <sys/stat.h>
X! int rename(), unlink();
X #endif
X
X #if SYSV
X***************
X*** 65,72 ****
X #define DIRECT direct
X #endif
X
X char *strcpy(), *strcat(), *malloc();
X! int strlen();
X
X int
X move(oldnam, newnam)
X--- 65,85 ----
X #define DIRECT direct
X #endif
X
X+ #if BSD
X+ char *
X+ memset(s, c, n) /* oops. Thought it was standard BSD, but my Sun */
X+ char *s; /* fooled me again. -- hyc */
X+ int c, n;
X+ {
X+ register int i;
X+ for(i=0;i<n;i++)
X+ s[i]=c;
X+ return(s);
X+ }
X+ #endif
X+
X char *strcpy(), *strcat(), *malloc();
X! int strlen(), strcmp(), match();
X
X int
X move(oldnam, newnam)
X***************
X*** 73,79 ****
X--- 86,94 ----
X char *oldnam, *newnam;
X {
X FILE *fopen(), *old, *new;
X+ #if !MTS
X struct stat oldstat;
X+ #endif
X char *strcpy();
X void filecopy();
X #if GEMDOS
X***************
X*** 81,99 ****
X #else
X if (rename(oldnam, newnam))
X #endif
X {
X if (stat(oldnam, &oldstat)) /* different partition? */
X return (-1);
X! old = fopen(oldnam, "rb");
X if (old == NULL)
X return (-1);
X! new = fopen(newnam, "wb");
X if (new == NULL)
X return (-1);
X filecopy(old, new, oldstat.st_size);
X! unlink(oldnam);
X }
X return 0;
X }
X
X static void
X--- 96,118 ----
X #else
X if (rename(oldnam, newnam))
X #endif
X+ #if !MTS
X {
X if (stat(oldnam, &oldstat)) /* different partition? */
X return (-1);
X! old = fopen(oldnam, OPEN_R);
X if (old == NULL)
X return (-1);
X! new = fopen(newnam, OPEN_W);
X if (new == NULL)
X return (-1);
X filecopy(old, new, oldstat.st_size);
X! return(unlink(oldnam));
X }
X return 0;
X+ #else
X+ return(-1);
X+ #endif
X }
X
X static void
X***************
X*** 270,276 ****
X int alphasort();
X int scandir();
X #endif /* UNIX */
X! int fmatch();
X static int Nnum = 0, ii;
X char *rindex();
X
X--- 289,295 ----
X int alphasort();
X int scandir();
X #endif /* UNIX */
X! int fmatch(), free();
X static int Nnum = 0, ii;
X char *rindex();
X
Xdiff -c /usr2/polymnia/hyc/News/arc/arcpack.c arc/arcpack.c
X*** /usr2/polymnia/hyc/News/arc/arcpack.c Wed Jul 6 02:27:22 1988
X--- arc/arcpack.c Sun Jul 31 18:53:25 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcpack.c,v 1.9 88/06/02 16:27:36 hyc Locked $
X */
X
X /* ARC - Archive utility - ARCPACK
X--- 1,5 ----
X /*
X! * $Header: arcpack.c,v 1.11 88/07/31 18:52:08 hyc Exp $
X */
X
X /* ARC - Archive utility - ARCPACK
X***************
X*** 24,30 ****
X #endif
X
X void setcode(), sqinit_cm(), sqputc_cm(), init_cm(), putc_cm();
X! void filecopy(), abort(), putc_tst();
X int getch(), addcrc();
X
X /* stuff for non-repeat packing */
X--- 24,30 ----
X #endif
X
X void setcode(), sqinit_cm(), sqputc_cm(), init_cm(), putc_cm();
X! void filecopy(), abort(), putc_tst(), init_sq(), scan_sq();
X int getch(), addcrc();
X
X /* stuff for non-repeat packing */
X***************
X*** 155,161 ****
X /* standard cleanups common to all methods */
X
X if (note)
X! printf("done. (%ld%%)\n",100L - (100L*hdr->size)/hdr->length);
X }
X
X /*
X--- 155,162 ----
X /* standard cleanups common to all methods */
X
X if (note)
X! printf("done. (%ld%%)\n",hdr->length == 0 ?
X! 0L : 100L - (100L*hdr->size)/hdr->length);
X }
X
X /*
Xdiff -c /usr2/polymnia/hyc/News/arc/arcrun.c arc/arcrun.c
X*** /usr2/polymnia/hyc/News/arc/arcrun.c Wed Jul 6 02:27:22 1988
X--- arc/arcrun.c Sun Jul 31 18:53:59 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcrun.c,v 1.3 88/06/01 19:57:16 hyc Locked $
X */
X
X /*
X--- 1,5 ----
X /*
X! * $Header: arcrun.c,v 1.4 88/07/31 18:52:50 hyc Exp $
X */
X
X /*
X***************
X*** 22,27 ****
X--- 22,29 ----
X #include "arc.h"
X
X void rempath(), openarc(), closearc(), abort();
X+ int readhdr(), match(), unpack();
X+ static void runfile();
X char *strcat();
X
X void
X***************
X*** 33,39 ****
X char *makefnam(); /* filename fixer */
X char buf[STRLEN]; /* filename buffer */
X FILE *fopen();/* file opener */
X- int runfile();
X char *dummy[2];
X
X dummy[0]="dummy";
X--- 35,40 ----
X***************
X*** 56,62 ****
X closearc(0); /* close archive after changes */
X }
X
X! static int
X runfile(hdr, num, arg) /* run a file */
X struct heads *hdr; /* pointer to header data */
X int num; /* number of arguments */
X--- 57,63 ----
X closearc(0); /* close archive after changes */
X }
X
X! static void
X runfile(hdr, num, arg) /* run a file */
X struct heads *hdr; /* pointer to header data */
X int num; /* number of arguments */
X***************
X*** 120,126 ****
X if (warn)
X if (tmp = fopen(buf, "r"))
X abort("Temporary file %s already exists", buf);
X! if (!(tmp = fopen(buf, "wb")))
X abort("Unable to create temporary file %s", buf);
X
X if (note)
X--- 121,127 ----
X if (warn)
X if (tmp = fopen(buf, "r"))
X abort("Temporary file %s already exists", buf);
X! if (!(tmp = fopen(buf, OPEN_W)))
X abort("Unable to create temporary file %s", buf);
X
X if (note)
Xdiff -c /usr2/polymnia/hyc/News/arc/arcsq.c arc/arcsq.c
X*** /usr2/polymnia/hyc/News/arc/arcsq.c Wed Jul 6 02:27:24 1988
X--- arc/arcsq.c Sun Jul 31 18:54:48 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcsq.c,v 1.2 88/06/02 16:27:38 hyc Locked $
X */
X
X /*
X--- 1,5 ----
X /*
X! * $Header: arcsq.c,v 1.3 88/07/31 18:53:32 hyc Exp $
X */
X
X /*
X***************
X*** 65,71 ****
X static int cbitsrem; /* # of code string bits left */
X static unsigned short ccode; /* current code right justified */
X
X! int
X init_sq()
X { /* prepare for scanning pass */
X int i; /* node index */
X--- 65,73 ----
X static int cbitsrem; /* # of code string bits left */
X static unsigned short ccode; /* current code right justified */
X
X! static void scale(), heap(), adjust(), bld_tree(), init_enc(), put_int();
X! static int cmptrees(), buildenc(), maxchar();
X! void
X init_sq()
X { /* prepare for scanning pass */
X int i; /* node index */
X***************
X*** 86,92 ****
X valcount[i] = 0;
X }
X
X! int
X scan_sq(c) /* add a byte to the tables */
X int c; /* byte to add */
X {
X--- 88,94 ----
X valcount[i] = 0;
X }
X
X! void
X scan_sq(c) /* add a byte to the tables */
X int c; /* byte to add */
X {
X***************
X*** 113,123 ****
X unsigned short ceiling;/* limit for scaling */
X long size = 0; /* predicted size */
X int numnodes; /* # of nodes in simplified tree */
X- int scale();
X- int heap();
X- int bld_tree();
X- int buildenc();
X- int init_enc();
X
X scan_sq(EOF); /* signal end of input */
X
X--- 115,120 ----
X***************
X*** 188,194 ****
X * integer. Rescaling is used if necessary to limit the code length.
X */
X
X! static int
X scale(ceil)
X unsigned short ceil; /* upper limit on total weight */
X {
X--- 185,191 ----
X * integer. Rescaling is used if necessary to limit the code length.
X */
X
X! static void
X scale(ceil)
X unsigned short ceil; /* upper limit on total weight */
X {
X***************
X*** 236,247 ****
X * rescaling.
X */
X
X! static int
X heap(list, length)
X int list[], length;
X {
X register int i;
X- int adjust();
X
X for (i = (length - 2) / 2; i >= 0; --i)
X adjust(list, i, length - 1);
X--- 233,243 ----
X * rescaling.
X */
X
X! static void
X heap(list, length)
X int list[], length;
X {
X register int i;
X
X for (i = (length - 2) / 2; i >= 0; --i)
X adjust(list, i, length - 1);
X***************
X*** 249,260 ****
X
X /* Make a heap from a heap with a new top */
X
X! static int
X adjust(list, top, bottom)
X int list[], top, bottom;
X {
X register int k, temp;
X- int cmptrees();
X
X k = 2 * top + 1; /* left child of top */
X temp = list[top]; /* remember root node of top tree */
X--- 245,255 ----
X
X /* Make a heap from a heap with a new top */
X
X! static void
X adjust(list, top, bottom)
X int list[], top, bottom;
X {
X register int k, temp;
X
X k = 2 * top + 1; /* left child of top */
X temp = list[top]; /* remember root node of top tree */
X***************
X*** 282,288 ****
X * comparison rules in previous comments.
X */
X
X! static int
X cmptrees(a, b)
X int a, b; /* root nodes of trees */
X {
X--- 277,283 ----
X * comparison rules in previous comments.
X */
X
X! static int
X cmptrees(a, b)
X int a, b; /* root nodes of trees */
X {
X***************
X*** 308,314 ****
X * element and reheaping the shorter list.
X */
X
X! static int
X bld_tree(list, len)
X int list[];
X int len;
X--- 303,309 ----
X * element and reheaping the shorter list.
X */
X
X! static void
X bld_tree(list, len)
X int list[];
X int len;
X***************
X*** 316,322 ****
X register int freenode; /* next free node in tree */
X register struct nd *frnp; /* free node pointer */
X int lch, rch; /* temps for left, right children */
X- int maxchar();
X
X /*
X * Initialize index to next available (non-leaf) node. Lower numbered
X--- 311,316 ----
X***************
X*** 365,371 ****
X return a > b ? a : b;
X }
X
X! static int
X init_enc()
X {
X register int i;
X--- 359,365 ----
X return a > b ? a : b;
X }
X
X! static void
X init_enc()
X {
X register int i;
X***************
X*** 421,431 ****
X return NULL; /* it worked if we reach here */
X }
X
X! static int
X put_int(n, f) /* output an integer */
X short n; /* integer to output */
X FILE *f; /* file to put it to */
X {
X putc_pak(n & 0xff, f); /* first the low byte */
X putc_pak(n >> 8, f); /* then the high byte */
X }
X--- 415,427 ----
X return NULL; /* it worked if we reach here */
X }
X
X! static void
X put_int(n, f) /* output an integer */
X short n; /* integer to output */
X FILE *f; /* file to put it to */
X {
X+ void putc_pak();
X+
X putc_pak(n & 0xff, f); /* first the low byte */
X putc_pak(n >> 8, f); /* then the high byte */
X }
X***************
X*** 481,486 ****
X--- 477,483 ----
X {
X int rbyte; /* Result byte value */
X int need; /* number of bits */
X+ int getc_ncr();
X
X rbyte = 0;
X need = 8; /* build one byte per call */
Xdiff -c /usr2/polymnia/hyc/News/arc/arcsqs.c arc/arcsqs.c
X*** /usr2/polymnia/hyc/News/arc/arcsqs.c Wed Jul 6 02:27:43 1988
X--- arc/arcsqs.c Sun Jul 31 18:55:21 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcsqs.c,v 1.2 88/06/01 16:31:39 hyc Locked $
X */
X
X /* ARC - Archive utility - SQUASH
X--- 1,5 ----
X /*
X! * $Header: arcsqs.c,v 1.3 88/07/31 18:54:14 hyc Exp $
X */
X
X /* ARC - Archive utility - SQUASH
X***************
X*** 12,18 ****
X */
X
X /*
X! * $Header: arcsqs.c,v 1.2 88/06/01 16:31:39 hyc Locked $
X */
X
X #include <stdio.h>
X--- 12,18 ----
X */
X
X /*
X! * $Header: arcsqs.c,v 1.3 88/07/31 18:54:14 hyc Exp $
X */
X
X #include <stdio.h>
Xdiff -c /usr2/polymnia/hyc/News/arc/arcsvc.c arc/arcsvc.c
X*** /usr2/polymnia/hyc/News/arc/arcsvc.c Wed Jul 6 02:27:44 1988
X--- arc/arcsvc.c Sun Jul 31 18:55:55 1988
X***************
X*** 1,5 ****
X /*
X! * $Header: arcsvc.c,v 1.8 88/06/13 00:42:59 hyc Locked $
X */
X
X /* ARC - Archive utility - ARCSVC
X--- 1,5 ----
X /*
X! * $Header: arcsvc.c,v 1.9 88/07/31 18:54:55 hyc Exp $
X */
X
X /* ARC - Archive utility - ARCSVC
X***************
X*** 31,37 ****
X {
X FILE *fopen();/* file opener */
X
X! if (!(arc = fopen(arcname, "rb"))) {
X if (chg) {
X if (note)
X printf("Creating new archive: %s\n", arcname);
X--- 31,37 ----
X {
X FILE *fopen();/* file opener */
X
X! if (!(arc = fopen(arcname, OPEN_R))) {
X if (chg) {
X if (note)
X printf("Creating new archive: %s\n", arcname);
X***************
X*** 45,51 ****
X int inlen;
X struct GDDSECT *region;
X
X! region=gdinfo(arc->_fd);
X inlen=region->GDINLEN;
X buffer=malloc(inlen);
X setbuf(arc, buffer);
X--- 45,51 ----
X int inlen;
X struct GDDSECT *region;
X
X! region=gdinfo(arc->_fd._fdub);
X inlen=region->GDINLEN;
X buffer=malloc(inlen);
X setbuf(arc, buffer);
X***************
X*** 53,59 ****
X }
X #endif
X if (chg) { /* if opening for changes */
X! if (!(new = fopen(newname, "wb")))
X abort("Cannot create archive copy: %s", newname);
X
X changing = chg; /* note if open for changes */
X--- 53,59 ----
X }
X #endif
X if (chg) { /* if opening for changes */
X! if (!(new = fopen(newname, OPEN_W)))
X abort("Cannot create archive copy: %s", newname);
X
X changing = chg; /* note if open for changes */
X***************
X*** 66,73 ****
X {
X if (arc) { /* if we had an initial archive */
X fclose(arc);
X- if (kludge) /* kludge to update timestamp */
X #if !MTS
X setstamp(arcname, olddate, oldtime);
X #endif
X }
X--- 66,73 ----
X {
X if (arc) { /* if we had an initial archive */
X fclose(arc);
X #if !MTS
X+ if (kludge) /* kludge to update timestamp */
X setstamp(arcname, olddate, oldtime);
X #endif
X }
Xdiff -c /usr2/polymnia/hyc/News/arc/marc.c arc/marc.c
X*** /usr2/polymnia/hyc/News/arc/marc.c Wed Jul 6 02:27:53 1988
X--- arc/marc.c Fri Jul 22 14:59:11 1988
X***************
X*** 25,30 ****
X--- 25,35 ----
X #include <stdio.h>
X #include "arc.h"
X
X+ #if UNIX
X+ #include <sys/types.h>
X+ #include <sys/stat.h>
X+ #endif
X+
X FILE *src; /* source archive */
X char srcname[STRLEN]; /* source archive name */
X
X***************
X*** 46,52 ****
X--- 51,61 ----
X void exitpause();
X #endif
X int n; /* index */
X+ #if UNIX
X+ struct stat sbuf;
X+ #endif
X
X+
X if(nargs<3)
X { printf("MARC - Archive merger, Version 5.21, created on 04/22/87 at 15:05:10\n");
X /* printf("(C) COPYRIGHT 1985,86,87 by System Enhancement Associates;");
X***************
X*** 96,102 ****
X arctemp[n] = CUTOFF;
X }
X #if !MSDOS
X! strcat(arctemp, mktemp("AXXXXXX"));
X #else
X strcat(arctemp, "$ARCTEMP");
X #endif
X--- 105,117 ----
X arctemp[n] = CUTOFF;
X }
X #if !MSDOS
X! {
X! static char tempname[] = "AXXXXXX";
X! #if UNIX
X! strcpy(arctemp, "/tmp/");
X! #endif /*UNIX*/
X! strcat(arctemp, mktemp(tempname));
X! }
X #else
X strcat(arctemp, "$ARCTEMP");
X #endif
X***************
X*** 109,127 ****
X arctemp[0] = tmpchr[0];
X #endif
X
X! makefnam(arg[1],".arc",arcname); /* fix up archive names */
X! makefnam(arg[2],".arc",srcname);
X /* makefnam(".$$$",arcname,newname);*/
X sprintf(newname,"%s.arc",arctemp);
X-
X- #if !UNIX
X- upper(arcname); upper(srcname); upper(newname);
X #endif
X
X! arc = fopen(arcname,"rb"); /* open the archives */
X! if(!(src=fopen(srcname,"rb")))
X abort("Cannot read source archive %s",srcname);
X! if(!(new=fopen(newname,"wb")))
X abort("Cannot create new archive %s",newname);
X
X if(!arc)
X--- 124,149 ----
X arctemp[0] = tmpchr[0];
X #endif
X
X! #if UNIX
X! if (!stat(arg[1],&sbuf))
X! strcpy(arcname,arg[1]);
X! else
X! makefnam(arg[1],".arc",arcname);
X! if (!stat(arg[2],&sbuf))
X! strcpy(srcname,arg[2]);
X! else
X! makefnam(arg[2],".arc",srcname);
X! #else
X! makefnam(arg[1],".ARC",arcname); /* fix up archive names */
X! makefnam(arg[2],".ARC",srcname);
X /* makefnam(".$$$",arcname,newname);*/
X sprintf(newname,"%s.arc",arctemp);
X #endif
X
X! arc = fopen(arcname,OPEN_R); /* open the archives */
X! if(!(src=fopen(srcname,OPEN_R)))
X abort("Cannot read source archive %s",srcname);
X! if(!(new=fopen(newname,OPEN_W)))
X abort("Cannot create new archive %s",newname);
X
X if(!arc)
________This_Is_The_END________
if test `wc -c < patches` -ne 32469; then
echo 'shar: patches was damaged during transit (should have been 32469 bytes)'
fi
fi ; : end of overwriting check
exit 0
--
/
/_ , ,_. Howard Chu
/ /(_/(__ University of Michigan
/ Computing Center College of LS&A
' Unix Project Information Systems