diff -Naur ar.h.old ar.h
--- ar.h.old	1993-05-01 04:04:22.000000000 +0000
+++ ar.h	2009-11-25 22:12:20.000000000 +0000
@@ -15,11 +15,9 @@
 /* uchar should be 8 bits or more */
 /* typedef unsigned char  uchar;   -- already in zoo.h */
 
-typedef unsigned int   uint;    /* 16 bits or more */
-#if !defined(__386BSD__) || !defined(_TYPES_H_)
-typedef unsigned short ushort;  /* 16 bits or more */
-#endif
-typedef unsigned long  ulong;   /* 32 bits or more */
+typedef unsigned int   my_uint;    /* 16 bits or more */
+typedef unsigned short my_ushort;  /* 16 bits or more */
+typedef unsigned long  my_ulong;   /* 32 bits or more */
 
 /* T_UINT16 must be #defined in options.h to be 
 a 16-bit unsigned integer type */
@@ -49,7 +47,7 @@
 /* ar.c */
 
 extern int unpackable;
-extern ulong origsize, compsize;
+extern my_ulong origsize, compsize;
 
 /* all the prototypes follow here for all files */
 
@@ -78,7 +76,7 @@
 
 /* DECODE.C */
 void decode_start PARMS((void ));
-int decode PARMS((uint count , uchar *buffer));
+int decode PARMS((uint count , uchar buffer []));
 
 /* ENCODE.C */
 void encode PARMS((FILE *, FILE *));
@@ -87,14 +85,14 @@
 void output PARMS((uint c , uint p ));
 void huf_encode_start PARMS((void ));
 void huf_encode_end PARMS((void ));
-uint decode_c PARMS((void ));
-uint decode_p PARMS((void ));
+my_uint decode_c PARMS((void ));
+my_uint decode_p PARMS((void ));
 void huf_decode_start PARMS((void ));
 
 /* IO.C */
 void make_crctable PARMS((void ));
 void fillbuf PARMS((int n ));
-uint getbits PARMS((int n ));
+my_uint getbits PARMS((int n ));
 void putbits PARMS((int n , uint x ));
 int fread_crc PARMS((uchar *p , int n , FILE *f ));
 void fwrite_crc PARMS((uchar *p , int n , FILE *f ));
diff -Naur basename.c.old basename.c
--- basename.c.old	1991-07-16 15:48:04.000000000 +0000
+++ basename.c	2009-11-25 22:12:20.000000000 +0000
@@ -18,7 +18,7 @@
 
 /* This function strips device/directory information from
 a pathname and returns just the plain filename */
-void basename (pathname, fname)
+void mybasename (pathname, fname)
 char *pathname;
 char fname[];
 {
diff -Naur bsd.c.old bsd.c
--- bsd.c.old	1993-05-01 04:21:53.000000000 +0000
+++ bsd.c	2009-11-25 22:12:20.000000000 +0000
@@ -74,26 +74,14 @@
 #define SEC_IN_DAY	(24L * 60L * 60L)
 #define INV_VALUE		(SEC_IN_DAY + 1L)
 	static long retval = INV_VALUE;	     /* cache, init to impossible value */
-#ifndef __386BSD__
    struct timeval tp;
    struct timezone tzp;
-#else
-   time_t lt;
-   struct tm *tm;
-#endif
 	if (retval != INV_VALUE)				 /* if have cached value, return it */
 		return retval;
-#ifndef __386BSD__
    gettimeofday (&tp, &tzp);              /* specific to 4.3BSD */
    /* return (tzp.tz_minuteswest * 60); */ /* old incorrect code */
 	/* Timezone fix thanks to Bill Davidsen <wedu@ge-crd.ARPA> */
-	/* !! - ache@hq.demos.su */
-	retval = tzp.tz_minuteswest * 60 - (tzp.tz_dsttime != 0) * 3600L;
-#else
-	time(&lt);
-	tm = localtime(&lt);
-	retval = -tm->tm_gmtoff;
-#endif
+	retval = tzp.tz_minuteswest * 60 - tzp.tz_dsttime * 3600L;
 	return retval;
 }
 
diff -Naur decode.c.old decode.c
--- decode.c.old	1993-05-01 04:04:21.000000000 +0000
+++ decode.c	2009-11-25 22:12:21.000000000 +0000
@@ -27,8 +27,8 @@
 */
 
 int decode(count, buffer)
-uint count;
-uchar *buffer;
+my_uint count;
+uchar buffer[];
 	/* The calling function must keep the number of
 	   bytes to be processed.  This function decodes
 	   either 'count' bytes or 'DICSIZ' bytes, whichever
@@ -37,8 +37,8 @@
 	   Call decode_start() once for each new file
 	   before calling this function. */
 {
-	static uint i;
-	uint r, c;
+	static my_uint i;
+	my_uint r, c;
 
 	r = 0;
 	while (--j >= 0) {
diff -Naur encode.c.old encode.c
--- encode.c.old	1993-05-01 03:46:58.000000000 +0000
+++ encode.c	2009-11-25 22:12:21.000000000 +0000
@@ -5,11 +5,6 @@
 Adapted from "ar" archiver written by Haruhiko Okumura.
 */
 
-#ifdef ANSI_HDRS
-# include <stdlib.h>
-# include <string.h>
-#endif
-
 #include "options.h"
 #include "zoo.h"
 #include "ar.h"
@@ -20,6 +15,11 @@
 
 #include <assert.h>
 
+#ifdef ANSI_HDRS
+# include <stdlib.h>
+# include <string.h>
+#endif
+
 #include "errors.i"
 
 FILE *lzh_infile;
diff -Naur huf.c.old huf.c
--- huf.c.old	1993-05-01 03:46:40.000000000 +0000
+++ huf.c	2009-11-25 22:12:21.000000000 +0000
@@ -5,10 +5,6 @@
 
 Adapted from "ar" archiver written by Haruhiko Okumura.
 ***********************************************************/
-#ifdef ANSI_HDRS
-# include <stdlib.h>
-#endif
-
 #include "options.h"
 #include "zoo.h"
 #include "ar.h"
@@ -17,6 +13,10 @@
 
 extern void prterror();
 
+#ifdef ANSI_HDRS
+# include <stdlib.h>
+#endif
+
 #define NP (DICBIT + 1)
 #define NT (CODE_BIT + 3)
 #define PBIT 4  /* smallest integer such that (1U << PBIT) > NP */
diff -Naur lzd.c.old lzd.c
--- lzd.c.old	1993-05-01 04:06:19.000000000 +0000
+++ lzd.c	2009-11-25 22:12:21.000000000 +0000
@@ -59,7 +59,7 @@
 extern unsigned int filt_lzd_word;
 #endif /* FILTER */
 
-void xwr_dchar PARMS ((int));
+void xwr_dchar PARMS ((char));
 static int firstchar PARMS ((int));
 static void cbfill PARMS ((void));
 
diff -Naur lzh.c.old lzh.c
--- lzh.c.old	1993-05-01 04:04:21.000000000 +0000
+++ lzh.c	2009-11-25 22:12:21.000000000 +0000
@@ -45,14 +45,14 @@
 
 	decode_start();
 	while (!decoded) {
-		n = decode((uint) DICSIZ, (uchar *)out_buf_adr); /* n = count of chars decoded */
+		n = decode((my_uint) DICSIZ, out_buf_adr); /* n = count of chars decoded */
 #ifdef COUNT_BYTES
 		bytes_decoded += n;	/*debug*/
 #endif
 #ifdef CHECK_BREAK
 		check_break();
 #endif
-		fwrite_crc((uchar *)out_buf_adr, n, outfile);
+		fwrite_crc(out_buf_adr, n, outfile);
 #ifdef SHOW_DOTS
 		(void) putc('.', stderr);
 		(void) fflush(stderr);
diff -Naur lzh.h.old lzh.h
--- lzh.h.old	1991-07-16 15:51:50.000000000 +0000
+++ lzh.h	2009-11-25 22:12:21.000000000 +0000
@@ -34,4 +34,4 @@
 #define CBIT 9  /* $\lfloor \log_2 NC \rfloor + 1$ */
 #define CODE_BIT  16  /* codeword length */
 
-extern ushort left[], right[];
+extern my_ushort left[], right[];
diff -Naur makefile.old makefile
--- makefile.old	1991-07-16 15:52:08.000000000 +0000
+++ makefile	2009-11-25 22:51:22.000000000 +0000
@@ -18,13 +18,16 @@
 
 MAKE = make	      # needed for some systems e.g. older BSD
 
-CC = cc
+CC = gcc
 CFLAGS =
 MODEL =
 EXTRA = -DBIG_MEM -DNDEBUG
 LINTFLAGS = -DLINT
-OPTIM = -O
-DESTDIR = /usr/local/bin
+OPTIM = -O2 
+DESTDIR = /boot/common
+BINDIR = $(DESTDIR)/bin
+MANDIR = $(DESTDIR)/man/man1
+
 
 #List of all object files created for Zoo
 ZOOOBJS = addbfcrc.o addfname.o basename.o comment.o crcdefs.o \
@@ -50,6 +53,7 @@
 	@echo "generic:      generic **IX environment, minimal functionlity"
 	@echo "bsd:          4.3BSD or reasonable equivalent"
 	@echo "bsdansi:      4.3BSD with ANSI C"
+	@echo "haiku:	     Haiku"
 	@echo "ultrix:       ULTRIX 4.1"
 	@echo "convex:       Convex C200 series"
 	@echo "sysv:         System V Release 2 or 3; or SCO Xenix"
@@ -68,16 +72,17 @@
 
 # install alpha zoo as "tzoo"
 install:
-	mv zoo $(DESTDIR)/tzoo
+	mv zoo $(BINDIR)/tzoo
 
 # install beta zoo as "bzoo"
 inst_beta:
-	mv zoo $(DESTDIR)/bzoo
+	mv zoo $(BINDIR)/bzoo
 
 # install production zoo as "zoo"
 inst_prod:
-	mv zoo $(DESTDIR)/zoo
-
+	cp zoo fiz $(BINDIR)
+	cp zoo.1 fiz.1 $(MANDIR)
+	
 # executable targets
 TARGETS = zoo fiz
 
@@ -106,6 +111,10 @@
 convex:
 	$(MAKE) CFLAGS="-c $(OPTIM) -DBSD4_3 -DANSI_HDRS" $(TARGETS)
 
+# Haiku
+haiku:
+	$(MAKE) CFLAGS="-c $(OPTIM) -DSYS_V -DANSI_HDRS -DHAVE_MKDIR" $(TARGETS)
+
 # SysV.2, V.3, SCO Xenix
 sysv:
 	$(MAKE) CFLAGS="-c $(OPTIM) -DSYS_V" $(TARGETS)
@@ -189,73 +198,62 @@
 # DO NOT DELETE THIS LINE -- it marks the beginning of this dependency list
 
 addbfcrc.o: options.h
-addfname.o: /usr/include/stdio.h options.h various.h zoo.h zoofns.h zooio.h
+addfname.o: options.h various.h zoo.h zoofns.h zooio.h
 addfname.o: zoomem.h
-basename.o: /usr/include/stdio.h assert.h debug.h options.h parse.h various.h
+basename.o: assert.h debug.h options.h parse.h various.h
 basename.o: zoo.h zoofns.h zooio.h
-bsd.o: /usr/include/sys/stat.h /usr/include/sys/time.h
-bsd.o: /usr/include/sys/types.h nixmode.i nixtime.i
-comment.o: /usr/include/signal.h /usr/include/stdio.h
-comment.o: /usr/include/sys/signal.h errors.i options.h portable.h various.h
+bsd.o: nixmode.i nixtime.i
+comment.o: errors.i options.h portable.h various.h
 comment.o: zoo.h zoofns.h zooio.h
 crcdefs.o: options.h
-decode.o: /usr/include/stdio.h ar.h lzh.h options.h zoo.h
-encode.o: /usr/include/assert.h /usr/include/stdio.h ar.h errors.i lzh.h
+decode.o: ar.h lzh.h options.h zoo.h
+encode.o: ar.h errors.i lzh.h
 encode.o: options.h zoo.h
-fiz.o: /usr/include/stdio.h options.h portable.h various.h zoo.h zoofns.h
+fiz.o: options.h portable.h various.h zoo.h zoofns.h
 fiz.o: zooio.h
-generic.o: /usr/include/sys/stat.h /usr/include/sys/types.h
-generic.o: /usr/include/time.h nixmode.i nixtime.i
-getfile.o: /usr/include/stdio.h options.h various.h zoo.h zoofns.h zooio.h
+generic.o: nixmode.i nixtime.i
+getfile.o: options.h various.h zoo.h zoofns.h zooio.h
 getfile.o: zoomem.h
-huf.o: /usr/include/stdio.h ar.h errors.i lzh.h options.h zoo.h
-io.o: /usr/include/stdio.h ar.h errors.i lzh.h options.h portable.h zoo.h
+huf.o: ar.h errors.i lzh.h options.h zoo.h
+io.o: ar.h errors.i lzh.h options.h portable.h zoo.h
 io.o: zooio.h
-lzc.o: /usr/include/stdio.h assert.h debug.h lzconst.h options.h various.h
+lzc.o: assert.h debug.h lzconst.h options.h various.h
 lzc.o: zoo.h zoofns.h zooio.h zoomem.h
-lzd.o: /usr/include/stdio.h assert.h debug.h lzconst.h options.h various.h
+lzd.o: assert.h debug.h lzconst.h options.h various.h
 lzd.o: zoo.h zoofns.h zooio.h zoomem.h
-lzh.o: /usr/include/stdio.h ar.h errors.i options.h zoo.h
-machine.o: /usr/include/stdio.h options.h various.h zoo.h zoofns.h zooio.h
-makelist.o: /usr/include/stdio.h assert.h debug.h errors.i options.h
+lzh.o: ar.h errors.i options.h zoo.h
+machine.o: options.h various.h zoo.h zoofns.h zooio.h
+makelist.o: assert.h debug.h errors.i options.h
 makelist.o: portable.h various.h zoo.h zoofns.h zooio.h
-maketbl.o: /usr/include/stdio.h ar.h lzh.h options.h zoo.h
-maketree.o: /usr/include/stdio.h ar.h lzh.h options.h zoo.h
-misc.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/sys/signal.h
+maketbl.o: ar.h lzh.h options.h zoo.h
+maketree.o: ar.h lzh.h options.h zoo.h
 misc.o: errors.i options.h portable.h various.h zoo.h zoofns.h zooio.h
-misc2.o: /usr/include/stdio.h errors.i options.h portable.h various.h zoo.h
+misc2.o: errors.i options.h portable.h various.h zoo.h
 misc2.o: zoofns.h zooio.h zoomem.h
-msdos.o: /usr/include/stdio.h errors.i options.h zoo.h zoofns.h zooio.h
-needed.o: /usr/include/stdio.h debug.h options.h portable.h various.h zoo.h
+msdos.o: errors.i options.h zoo.h zoofns.h zooio.h
+needed.o: debug.h options.h portable.h various.h zoo.h
 needed.o: zoofns.h zooio.h
-nextfile.o: /usr/include/stdio.h options.h various.h zoo.h
-options.o: /usr/include/stdio.h errors.i options.h various.h zoo.h zoofns.h
+nextfile.o: options.h various.h zoo.h
+options.o: errors.i options.h various.h zoo.h zoofns.h
 options.o: zooio.h
-parse.o: /usr/include/stdio.h assert.h options.h parse.h various.h zoo.h
+parse.o: assert.h options.h parse.h various.h zoo.h
 parse.o: zoofns.h zooio.h
-portable.o: /usr/include/stdio.h assert.h debug.h machine.h options.h
+portable.o: assert.h debug.h machine.h options.h
 portable.o: portable.h various.h zoo.h zoofns.h zooio.h
-prterror.o: /usr/include/stdio.h /usr/include/varargs.h options.h various.h
+prterror.o: options.h various.h
 prterror.o: zoofns.h zooio.h
-sysv.o: /usr/include/sys/stat.h /usr/include/sys/types.h /usr/include/time.h
 sysv.o: nixmode.i nixtime.i
-turboc.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/sys/signal.h
-vms.o: /usr/include/time.h
-vmstime.o: /usr/include/stdio.h
-zoo.o: /usr/include/stdio.h errors.i options.h various.h zoo.h zoofns.h
+zoo.o: errors.i options.h various.h zoo.h zoofns.h
 zoo.o: zooio.h zoomem.h
-zooadd.o: /usr/include/stdio.h debug.h errors.i options.h parse.h portable.h
+zooadd.o: debug.h errors.i options.h parse.h portable.h
 zooadd.o: various.h zoo.h zoofns.h zooio.h zoomem.h
-zooadd2.o: /usr/include/stdio.h assert.h debug.h errors.i options.h parse.h
+zooadd2.o: assert.h debug.h errors.i options.h parse.h
 zooadd2.o: various.h zoo.h zoofns.h zooio.h
-zoodel.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/sys/signal.h
 zoodel.o: errors.i options.h portable.h various.h zoo.h zoofns.h zooio.h
-zooext.o: /usr/include/signal.h /usr/include/stdio.h /usr/include/sys/signal.h
 zooext.o: errors.i machine.h options.h parse.h portable.h various.h zoo.h
 zooext.o: zoofns.h zooio.h
 zoofilt.o: options.h
-zoolist.o: /usr/include/stdio.h errors.i options.h portable.h various.h zoo.h
+zoolist.o: errors.i options.h portable.h various.h zoo.h
 zoolist.o: zoofns.h zooio.h zoomem.h
-zoopack.o: /usr/include/signal.h /usr/include/stdio.h
-zoopack.o: /usr/include/sys/signal.h errors.i options.h portable.h various.h
+zoopack.o: errors.i options.h portable.h various.h
 zoopack.o: zoo.h zoofns.h zooio.h
diff -Naur maketbl.c.old maketbl.c
--- maketbl.c.old	1991-07-16 15:52:32.000000000 +0000
+++ maketbl.c	2009-11-25 22:12:21.000000000 +0000
@@ -16,10 +16,10 @@
 int nchar;
 uchar bitlen[];
 int tablebits;
-ushort table[];
+my_ushort table[];
 {
-	ushort count[17], weight[17], start[18], *p;
-	uint i, k, len, ch, jutbits, avail, nextcode, mask;
+	my_ushort count[17], weight[17], start[18], *p;
+	my_uint i, k, len, ch, jutbits, avail, nextcode, mask;
 
 	for (i = 1; i <= 16; i++) count[i] = 0;
 	for (i = 0; i < nchar; i++) count[bitlen[i]]++;
@@ -27,7 +27,7 @@
 	start[1] = 0;
 	for (i = 1; i <= 16; i++)
 		start[i + 1] = start[i] + (count[i] << (16 - i));
-	if (start[17] != (ushort)((unsigned) 1 << 16))
+	if (start[17] != (my_ushort)((unsigned) 1 << 16))
 		prterror('f', "Bad decode table\n");
 
 	jutbits = 16 - tablebits;
@@ -41,7 +41,7 @@
         }
 
 	i = start[tablebits + 1] >> jutbits;
-	if (i != (ushort)((unsigned) 1 << 16)) {
+	if (i != (my_ushort)((unsigned) 1 << 16)) {
 		k = 1 << tablebits;
 		while (i != k) table[i++] = 0;
 	}
diff -Naur maketree.c.old maketree.c
--- maketree.c.old	1991-07-16 15:52:38.000000000 +0000
+++ maketree.c	2009-11-25 22:12:21.000000000 +0000
@@ -12,7 +12,7 @@
 
 static int    n, heapsize;
 static short  heap[NC + 1];
-static ushort *freq, *sortptr, len_cnt[17];
+static my_ushort *freq, *sortptr, len_cnt[17];
 static uchar  *len;
 
 static void count_len(i)  /* call with i = root */
@@ -33,7 +33,7 @@
 int root;
 {
 	int i, k;
-	uint cum;
+	my_uint cum;
 
 	for (i = 0; i <= 16; i++) len_cnt[i] = 0;
 	count_len(root);
@@ -75,10 +75,10 @@
 static void make_code(j, length, code)
 int j;
 uchar length[];
-ushort code[];
+my_ushort code[];
 {
 	int    i;
-	ushort start[18];
+	my_ushort start[18];
 
 	start[1] = 0;
 	for (i = 1; i <= 16; i++)
@@ -88,9 +88,9 @@
 
 int make_tree(nparm, freqparm, lenparm, codeparm)
 int nparm;
-ushort freqparm[];
+my_ushort freqparm[];
 uchar lenparm[];
-ushort codeparm[];
+my_ushort codeparm[];
 	/* make tree, calculate len[], return root */
 {
 	int i, j, k, avail;
diff -Naur options.h.old options.h
--- options.h.old	1993-05-01 04:27:59.000000000 +0000
+++ options.h	2009-11-25 22:12:21.000000000 +0000
@@ -31,7 +31,7 @@
 #define GETTZ
 #define FATTR
 #define T_SIGNAL	void
-#define VARARGS
+#define STDARG
 #define NEED_MEMMOVE
 /* #define NEED_MEMCPY */
 #define T_UINT16		unsigned short		/* must be 16 bit unsigned */
@@ -73,6 +73,7 @@
 /* #define UNBUF_LIMIT	512 */
 #define  T_SIGNAL void
 #define DIRECT_CONVERT
+#define STDARG
 #define CHECK_BREAK
 #define check_break kbhit
 #define HAVE_ISATTY
@@ -88,6 +89,7 @@
 /***********************************************************************/
 
 #ifdef BSD4_3
+#define NOSTRCHR /* not really needed for 4.3BSD */
 #define FILTER
 #define IO_MACROS
 #define EXISTS(f)		(access(f, 00) == 0)
@@ -101,23 +103,12 @@
 #define SETBUF
 #define GETTZ
 #define FATTR
-#ifdef __STDC__
-#ifndef ANSI_HDRS
-#define ANSI_HDRS
-#endif
-#define T_SIGNAL        void
-#define STDARG
-#define ANSI_PROTO
-#define VOIDPTR		void *
-#else
-#define NOSTRCHR /* not really needed for 4.3BSD */
 #define T_SIGNAL	int
 #define VARARGS
 #define NEED_MEMMOVE
-#define NEED_VPRINTF		/* older BSDs only; newer ones have vprintf */
-#endif
 #define T_UINT16		unsigned short		/* must be 16 bit unsigned */
 #define HAVE_ISATTY
+#define NEED_VPRINTF		/* older BSDs only; newer ones have vprintf */
 #endif /* BSD4_3 */
 
 /*  Ultrix 4.1 */
diff -Naur prterror.c.old prterror.c
--- prterror.c.old	1991-07-16 15:55:28.000000000 +0000
+++ prterror.c	2009-11-25 22:12:21.000000000 +0000
@@ -23,15 +23,7 @@
 # include <ctype.h>	/* for isdigit() */
 #endif
 
-#ifdef STDARG
 # include <stdarg.h>
-#else
-# ifdef VARARGS
-#  include <varargs.h>
-# else
-#  include "MUST DEFINE STDARG OR VARARGS"
-# endif
-#endif
 
 #ifdef NEED_VPRINTF
 static int zvfprintf();
@@ -115,29 +107,11 @@
 char could_not_open[] = "Could not open %s.\n";
 #endif
 
-#ifdef STDARG
-void prterror(int level, char *format, ...)
-#else
-/*VARARGS*/
-void prterror(va_alist)
-va_dcl
-#endif
+void prterror(level, format, a, b, c, d)
+register int level;
+char *format, *a, *b, *c, *d;
 {
-	va_list args;
    char string[120];       /* local format string */
-#ifdef VARARGS
-	int level;
-	char *format;
-#endif
-
-#ifdef STDARG
-	va_start(args, format);
-#else
-	va_start(args);
-	level = va_arg(args, int);
-	format = va_arg(args, char *);
-#endif
-
    *string = '\0';         /* get a null string to begin with */
 
 #ifdef OOZ
@@ -149,7 +123,7 @@
    switch (level) {
       case 'M': *string = '\0';                    /* fall through to 'm' */
       case 'm': if (quiet) return; break;
-      case 'w': 
+      case 'w':
 			if (quiet > 1) return;
 			strcat (string, "WARNING:  "); break;
       case 'e': 
@@ -163,12 +137,8 @@
    strcat (string, format);      /* just append supplied format string */
 
 	/* and print the whole thing */
-#ifdef NEED_VPRINTF
-	(void) zvfprintf(stdout, string, args);
-#else
-   (void) vprintf(string, args);
-#endif
-	fflush (stdout);
+   printf (string, a, b, c, d);   /* and print the whole thing */
+        fflush (stdout);
 
    if (level == 'f')       /* and abort on fatal error 'f' but not 'F' */
       zooexit (1);
diff -Naur sysv.c.old sysv.c
--- sysv.c.old	1991-07-16 15:55:34.000000000 +0000
+++ sysv.c	2009-11-25 22:12:21.000000000 +0000
@@ -129,6 +129,7 @@
 exists by the name of the needed directory.
 */
 
+#ifndef HAVE_MKDIR
 int mkdir(dirname)
 char *dirname;
 {
@@ -140,6 +141,7 @@
    }
 	return (0);
 }
+#endif
 
 /* No file truncate system call in older System V.  If yours has one,
 add it here -- see bsd.c for example.  It's ok for zootrunc to be
diff -Naur zoo.c.old zoo.c
--- zoo.c.old	1991-07-17 12:28:43.000000000 +0000
+++ zoo.c	2009-11-25 22:12:21.000000000 +0000
@@ -225,17 +225,17 @@
    if (cmd != NONE) {
       switch (cmd) {
 
-	 case ADD:      zooadd (zooname, filecount, &argv[3], "ahP"); break;
-	 case FRESHEN:  zooadd (zooname, filecount, &argv[3], "ahuP"); break;
-	 case UPDATE:   zooadd (zooname, filecount, &argv[3], "ahunP"); break;
-	 case MOVE:     zooadd (zooname, filecount, &argv[3], "ahMP"); break;
+	 case ADD:      zooadd (zooname, filecount, &argv[3], "aP:"); break;
+	 case FRESHEN:  zooadd (zooname, filecount, &argv[3], "auP:"); break;
+	 case UPDATE:   zooadd (zooname, filecount, &argv[3], "aunP:"); break;
+	 case MOVE:     zooadd (zooname, filecount, &argv[3], "aMP:"); break;
 
          case EXTRACT:  zooext (zooname, "x"); break;
          case TEST:     zooext (zooname, "xNd"); break;
          case PRINT:    zooext (zooname, "xp"); break;
 
          case DELETE:   zoodel (zooname, "DP",1); break;
-	 case LIST:     zoolist (&argv[2], "Vm", argc-2); break;
+	 case LIST:     zoolist (&argv[2], "VC", argc-2); break;
          case COMMENT:  comment (zooname, "c"); break;
          default: goto show_usage;
       }
diff -Naur zoo.h.old zoo.h
--- zoo.h.old	1993-05-01 03:40:56.000000000 +0000
+++ zoo.h	2009-11-25 22:12:21.000000000 +0000
@@ -1,9 +1,5 @@
 /* derived from: zoo.h 2.16 88/01/27 23:21:36 */
 
-#ifndef ZOO_H
-
-#define ZOO_H
-
 /*
 The contents of this file are hereby released to the public domain.
 
@@ -131,7 +127,7 @@
    char fname[FNAMESIZE]; 		/* filename */
 
    int var_dir_len;           /* length of variable part of dir entry */
-   char tz;                   /* timezone where file was archived */
+   uchar tz;                   /* timezone where file was archived */
    unsigned int dir_crc;      /* CRC of directory entry */
 
    /* fields for variable part of directory entry follow */
@@ -244,5 +240,3 @@
 #define	MAXGEN				0x0f
 /* version mask to prune down to correct size on large-word machines */
 #define VER_MASK				0xffff
-
-#endif  /* ZOO_H */
diff -Naur zoo.man.old zoo.man
--- zoo.man.old	1991-07-17 13:12:22.000000000 +0000
+++ zoo.man	2009-11-25 22:12:21.000000000 +0000
@@ -121,15 +121,15 @@
      Novice                                        Equivalent
      Command    Description                        Expert Command
      ____________________________________________________________
-     -add       add files to archive               ahP
+     -add       add files to archive               aP
      -extract   extract files from archive         x
-     -move      move files to archive              ahMP
+     -move      move files to archive              aMP
      -test      test archive integrity             xNd
      -print     extract files to standard output   xp
      -delete    delete files from archive          DP
-     -list      list archive contents              Vm
-     -update    add new or newer files             ahunP
-     -freshen   by add newer files                 ahuP
+     -list      list archive contents              VC
+     -update    add new or newer files             aunP
+     -freshen   by add newer files                 auP
      -comment   add comments to files              c
 
      Expert commands
diff -Naur zooadd.c.old zooadd.c
--- zooadd.c.old	1993-05-01 03:43:38.000000000 +0000
+++ zooadd.c	2009-11-25 22:12:21.000000000 +0000
@@ -34,9 +34,7 @@
                int *, int *, int *, int *, int *, int *, int *, int *));
 int ver_too_high PARMS ((struct zoo_header *));
 void get_comment PARMS ((struct direntry *, ZOOFILE, char *));
-#ifndef PORTABLE
 void copyfields PARMS ((struct direntry *, struct tiny_header *));
-#endif
 void storefname PARMS ((struct direntry *, char *, int));
 char *choosefname PARMS ((struct direntry *));
 
@@ -134,7 +132,7 @@
 
 if (zoo_file == NOFILE)
    prterror ('f', could_not_open, zoo_path);
-basename(zoo_path, zoo_fname);      /* get basename of archive */
+mybasename(zoo_path, zoo_fname);      /* get basename of archive */
 rootname (zoo_path, zoo_bak);       /* name without extension */
 strcat (zoo_bak, BACKUP_EXT);       /* name of backup of this archive */
 
@@ -224,7 +222,7 @@
 		break;
 	}
 
-   basename (this_path, this_fname);   /* get just filename for later */
+   mybasename (this_path, this_fname);   /* get just filename for later */
 
    this_file = zooopen(this_path, Z_READ);
    if (this_file == NOFILE) {
diff -Naur zooadd2.c.old zooadd2.c
--- zooadd2.c.old	1991-07-19 23:38:10.000000000 +0000
+++ zooadd2.c	2009-11-25 22:12:21.000000000 +0000
@@ -263,7 +263,7 @@
    direntry->zoo_tag = ZOO_TAG;
    direntry->type = 2;                  /* type is now 2 */
 #ifdef GETTZ
-	direntry->tz = gettz() / (15 * 60); /* seconds => 15-min units */
+	direntry->tz = (uchar) (gettz() / (15 * 60)); /* seconds => 15-min units */
 #else
    direntry->tz = NO_TZ;                /* timezone unknown */
 #endif
diff -Naur zooext.c.old zooext.c
--- zooext.c.old	1993-05-01 03:58:50.000000000 +0000
+++ zooext.c	2009-11-25 22:12:21.000000000 +0000
@@ -626,7 +626,7 @@
 
 /* Ctrl_c() is called if ^C is hit while a file is being extracted.
    It closes the files, deletes it, and exits. */
-T_SIGNAL ctrl_c(int foo)
+T_SIGNAL ctrl_c()
 {
 #ifndef NOSIGNAL
    signal (SIGINT, SIG_IGN);     /* ignore any more */
diff -Naur zoofns.h.old zoofns.h
--- zoofns.h.old	1993-05-01 03:57:35.000000000 +0000
+++ zoofns.h	2009-11-25 22:12:21.000000000 +0000
@@ -42,12 +42,12 @@
 int cfactor PARMS ((long, long));
 int chname PARMS ((char *, char *));
 int cmpnum PARMS ((unsigned int, unsigned int, unsigned int, unsigned int));
-T_SIGNAL ctrl_c PARMS ((int));
+T_SIGNAL ctrl_c PARMS ((void));
 int exists PARMS ((char *));
 int getfile PARMS ((ZOOFILE, ZOOFILE, long, int));
 int getutime PARMS ((char *, unsigned *, unsigned *));
 int gettime PARMS ((ZOOFILE, unsigned *, unsigned *));
-T_SIGNAL handle_break PARMS ((int));
+T_SIGNAL handle_break PARMS ((void));
 
 #ifdef USE_ASCII
 int isupper PARMS ((int));
@@ -85,7 +85,7 @@
 void addfname PARMS ((char *, long, unsigned int, unsigned int, 
 							unsigned, unsigned));
 void add_version PARMS ((char *, struct direntry *));
-void basename PARMS ((char *, char []));
+void mybasename PARMS ((char *, char []));
 void break_off PARMS ((void));
 void close_file PARMS ((ZOOFILE));
 void comment PARMS ((char *, char *));
diff -Naur zooio.h.old zooio.h
--- zooio.h.old	1993-05-01 03:39:50.000000000 +0000
+++ zooio.h	2009-11-25 22:12:21.000000000 +0000
@@ -12,8 +12,6 @@
 #define	OK_STDIO
 #endif
 
-#include "zoo.h"
-
 #ifndef PARMS
 #ifdef LINT_ARGS
 #define	PARMS(x)		x
diff -Naur zoopack.c.old zoopack.c
--- zoopack.c.old	1993-05-01 03:59:21.000000000 +0000
+++ zoopack.c	2009-11-25 22:12:21.000000000 +0000
@@ -171,7 +171,7 @@
 } else {
    strcpy (temp_file, xes);
 }
-mktemp (temp_file);                    /* ... and make unique */
+mkstemp (temp_file);                    /* ... and make unique */
 new_file = zoocreate (temp_file);
 if (new_file == NOFILE)
    prterror ('f', "Could not create temporary file %s.\n", temp_file);
@@ -388,7 +388,7 @@
 
 /* handle_break() */
 /* Sets break_hit to 1 when called */
-T_SIGNAL handle_break(int foo)
+T_SIGNAL handle_break()
 {
 #ifndef NOSIGNAL
    signal (SIGINT, SIG_IGN);     /* ignore future control ^Cs for now */
