home *** CD-ROM | disk | FTP | other *** search
- From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
- Newsgroups: comp.sources.apple2
- Subject: v001SRC038: Nulib - Archive Library Tools (Unix) 07/10
- Message-ID: <May.1.18.13.39.1991.23521@yoko.rutgers.edu>
- Date: 1 May 91 22:13:41 GMT
- Approved: jac@paul.rutgers.edu
-
-
- Submitted-by: Andy McFadden (fadden@cory.berkeley.edu)
- Posting-number: Volume 1, Source:38
- Archive-name: archive/unix/nulib/part07.10
- Architecture: UNIX
- Version-number: 3.03
-
-
- =Benchmarks
- -Some (old) benchmarks for NuLib:
- -
- -Uncompressing Moria GS (from 320K to 577K, ShrinkIt Type I LZW):
- -
- -Program Run / Machine Used Run Time CPU Time
- ----------------------------------------------- -------------- --------------
- -NuLib v2.1 (APW C), running on a //gs 12 min
- -ShrinkIt v3.0.1, running on a //gs (HD) 2 min 03 sec
- -ShrinkIt v3.0.1, running on a //gs (RAM disk) 1 min 21 sec
- -GS/ShrinkIt v1.0.2 (HD) 1 min 30 sec
- -NuLib v2.2 on a lightly loaded VAX 11/750 1 min 33 sec 1 min 28.4 sec
- -NuLib v2.2 on a lightly loaded VAX 11/785 38 sec 34.0 sec
- -NuLib v2.2 on a lightly loaded Sun 3/50 17 sec 13.0 sec
- -NuLib v2.2 on an empty Apollo workstation 12 sec 11.5 sec
- -NuLib v2.2 on an empty DEC 3100 9 sec 2.6 sec
- -NuLib v2.2 on an empty Sun 4 7 sec 2.2 sec
- -
- -"Run Time" is total time from start to finish. "CPU Time" is CPU time
- -actually used under a multiprogrammed OS (in this case, UNIX).
- -
- -The hard drive (HD) used on the //gs is an AI InnerDrive 20. The results
- -obtained from running on a RAM disk could almost be considered the CPU
- -time, but I've decided to keep them separate. All versions of NuLib
- -running on UNIX systems used the optimization features of the C compiler.
- -
- -Doing an uncompressed extract can produce remarkable results... like
- -running to completion in less than one second on the Apollo (local disk).
- -
- -Interestingly enough, 16-bit UNIX uncompress works faster than NuLib does.
- -The reason for this is that the compression code in NuLib actually makes
- -two passes, one to undo the LZW compression, and the other to undo
- -non-repeat compression. Was it worth it do to both kinds? For Moria it
- -was; even though "uncompress" ran faster, ShrinkIt's 12-bit LZW packed
- -the file smaller than compress's 16-bit LZW.
- -
- -No benchmarks for compress yet. Be patient.
- -
- -**********
- -
- -Raw data for benchmarks
- -
- -Times on the //gs were from start to finish of compression, timed with a
- -stop watch.
- -
- -All tests were performed in verbose mode (i.e., the filename was printed
- -as the file was extracted, etc). This is how I would expect it to be
- -run under "normal" conditions. It does add to the overhead, which
- -you can pull out by looking at the data below.
- -
- -/bin/csh time format appears to be (the man page is most unhelpful):
- -user_time system_time real_time cpu% ??+??k ??+??io page_faults+??w
- -
- -user_time is the time actually spent grinding along. This is what appears
- - in the "CPU time" column.
- -system_time is for I/O (disk accesses, writing to terminal).
- -real_time is how long a stopwatch would show (user_time + system_time +
- - overhead starting/stopping NuLib + time spent running other processes
- - on a multiprogrammed OS like UNIX). This appears in the "Run Time" col.
- -cpu% appears to be some kind of estimate of how much time was spent doing
- - useful work.
- -If you don't know what a page fault is, don't worry about it.
- -
- -Both cory and holden used the same copy of NuLib (well not the *same* copy,
- -but they're identical), so any differences in speed can be attributed
- -to the processor.
- -
- -***** holden.berkeley.edu, a VAX 11/750 *****
- -Script started on Sun Mar 25 11:52:52 1990
- ---- reading aliases...done
- -holden 1 c184-cz% ls -s tmp/nulib
- - 68 tmp/nulib*
- -holden 2 c184-cz% uptime
- - 11:52am up 26 days, 3:59, 4 users, load average: 0.31, 0.17, 0.13
- -holden 3 c184-cz% time tmp/nulib xv moria.shk
- -Extracting 'MORIA' (data)...unshrinking (I)...-\|/-done.
- -88.4u 3.3s 1:33 98% 83+252k 49+89io 9pf+0w
- -holden 4 c184-cz% exit
- -holden 5 c184-cz%
- -script done on Sun Mar 25 11:55:34 1990
- -
- -***** cory.berkeley.edu, a VAX 11/785 *****
- -Script started on Sun Mar 25 11:50:07 1990
- ---- reading aliases...done
- -cory 1 foo% ls -s ../bin/nulib
- - 68 ../bin/nulib*
- -cory 2 foo% uptime
- - 11:50am up 2 days, 2:04, 6 users, load average: 0.55, 0.39, 0.27
- -cory 3 foo% time nulib xv moria.shk
- -Extracting 'MORIA' (data)...unshrinking (I)...-\|/-done.
- -34.0u 1.6s 0:37 95% 51+244k 46+82io 5pf+0w
- -cory 4 foo% exit
- -cory 5 foo%
- -script done on Sun Mar 25 11:51:29 1990
- -
- -***** a Sun 3/50 *****
- -Script started on Sat Apr 21 17:00:43 1990
- -ux1:nulib% ls -s nulib
- - 64 nulib*
- -ux1:nulib% uptime
- - 5:01pm up 2 days, 10:06, 6 users, load average: 1.84, 1.66, 1.51
- -ux1:nulib% time nulib xv moria.shk
- -Extracting 'MORIA' (data)...unshrinking (I)...-\|/-done.
- -13.0u 0.6s 0:17 76% 0+168k 1+78io 0pf+0w
- -ux1:nulib% exit
- -ux1:nulib%
- -script done on Sat Apr 21 17:02:33 1990
- -
- -***** avalanche.berkeley.edu, an Apollo DN3500 *****
- -Script started Sat Apr 21 17:04:53 1990
- ---- reading aliases...done
- -avalanche 1 nulib% ls -s nulib
- - 85 nulib*
- -avalanche 2 nulib% uptime
- - 5:05pm up 1 day, 1:50, 3 users, load average: 0.06, 0.16, 0.00
- -avalanche 3 nulib% time nulib xv ../dwn/moria.shk
- -Extracting 'MORIA' (data)...unshrinking (I)...-\|/-done.
- -11.5u 2.6s 0:16 86% 0+0k 577+0io 0pf+0w
- -avalanche 6 nulib% exit
- -avalanche 7 nulib%
- -Script done Sat Apr 21 17:06:59 1990
- -
- -***** a DEC 3100 *****
- -Script started on Sat Apr 21 16:18:10 1990
- -vampire:nulib% ls -s nulib
- - 88 nulib*
- -vampire:nulib% uptime
- - 4:18pm up 30 days, 5 hrs, 2 users, load average: 0.57, 0.25, 0.00
- -vampire:nulib% time nulib xv moria.shk
- -Extracting 'MORIA' (data)...unshrinking (I)...-\|/-done.
- -2.6u 0.5s 0:09 32% 163+404k 71+71io 3pf+0w
- -vampire:nulib% exit
- -vampire:nulib%
- -script done on Sat Apr 21 16:19:40 1990
- -
- -***** a Sun 4 *****
- -Script started on Sat Apr 21 16:23:47 1990
- -ux5:nulib% ls -s nulib
- - 64 nulib*
- -ux5:nulib% uptime
- - 4:23pm up 2 days, 8:50, 7 users, load average: 0.15, 0.24, 0.03
- -ux5:nulib% time nulib xv moria.shk
- -Extracting 'MORIA' (data)...unshrinking (I)...-\|/-done.
- -2.2u 0.2s 0:07 34% 0+368k 0+71io 0pf+0w
- -ux5:nulib% exit
- -ux5:nulib%
- -script done on Sat Apr 21 16:25:20 1990
- -
- =nuread.h
- -/*
- - * nuread.h - linked list structures used for holding NuFX header data,
- - * and structure definitions for archive innards
- - *
- - * (this will be included by all source files which access NuFX archives)
- - *
- - * NuLib v3.0 February 1991 Freeware (distribute, don't sell)
- - * By Andy McFadden (fadden@cory.berkeley.edu)
- - */
- -
- -
- -/* The NuFX master format version we output, and the maximum we can extract */
- -#define OURMVERS 2
- -#define MAXMVERS 2
- -
- -/* The NuFX record format version we output, and the maximum we can extract */
- -#define OURVERS 0
- -#define MAXVERS 3
- -
- -/* "NuFile" in alternating ASCII */
- -static onebyt MasterID[7] = { 0x4e, 0xf5, 0x46, 0xe9, 0x6c, 0xe5, 0x0 };
- -
- -/* "NuFX" in alternating ASCII */
- -static onebyt RecordID[5] = { 0x4e, 0xf5, 0x46, 0xd8, 0x0 };
- -
- -
- -/*
- - * Structure definitions for NuFX innards
- - */
- -
- -/* master header block */
- -typedef struct {
- - onebyt ID[6];
- - twobyt master_crc;
- - fourbyt total_records;
- - Time arc_create_when;
- - Time arc_mod_when;
- - twobyt master_version;
- - onebyt reserved1[8];
- - fourbyt master_eof;
- - onebyt reserved2[6];
- -} MHblock;
- -#define MHsize 48 /* this should not change */
- -
- -/* record header block */
- -typedef struct {
- - onebyt ID[4];
- - twobyt header_crc;
- - twobyt attrib_count;
- - twobyt version_number;
- - twobyt total_threads;
- - twobyt reserved1;
- - twobyt file_sys_id;
- - onebyt file_sys_info;
- - onebyt reserved2;
- - fourbyt access;
- - fourbyt file_type;
- - fourbyt extra_type;
- - twobyt storage_type;
- - Time create_when;
- - Time mod_when;
- - Time archive_when;
- - twobyt option_size;
- - /* future expansion here... */
- -} RHblock;
- -#define RHsize 58 /* sizeof(RHblock) should work, but might not */
- -#define ATTSIZE 64 /* default attrib_count when creating new */
- -
- -/*
- - * This buffer must be able to contain three things (not all at once):
- - * - The master header block (size = MHsize)
- - * - The record header block (size = RHsize)
- - * - Attributes not specified in the RHblock (attrib_count - RHsize - 2)
- - *
- - * Currently, it only needs to be 64 bytes. Since it is allocated as local
- - * storage only once during execution, making it reasonably large should
- - * not cause any problems in performance but will make the program stable
- - * if it encounters an archive with a drastically expanded RHblock.
- - */
- -#define RECBUFSIZ 256
- -
- -/* thread record */
- -typedef struct {
- - twobyt thread_class;
- - twobyt thread_format;
- - twobyt thread_kind;
- - twobyt thread_crc;
- - fourbyt thread_eof;
- - fourbyt comp_thread_eof;
- -} THblock;
- -#define THsize 16 /* this should not change */
- -
- -
- -/*
- - * Definitions for the linked lists
- - * A linked list of Record headers, with linked lists of Threads attached
- - */
- -
- -/* thread nodes */
- -typedef struct TNode_s {
- - THblock *THptr; /* points to thread info */
- - long fileposn; /* absolute position of this thread in the file */
- - struct TNode_s *TNext; /* points to next thread node */
- -} TNode;
- -
- -/* record nodes */
- -typedef struct RNode_s {
- - RHblock *RHptr; /* points to the record header block */
- - char *filename; /* filename of record */
- - twobyt filename_length; /* length of filename (as stored in record hdr) */
- - twobyt real_fn_length; /* length of filename (actual) */
- - TNode *TNodePtr; /* points to first thread node */
- - fourbyt unc_len; /* total uncompressed length of all threads */
- - fourbyt comp_len; /* total compressed length of all threads */
- - struct RNode_s *RNext; /* points to next record node */
- -} RNode;
- -
- -/* head of list */
- -typedef struct {
- - char *arc_name; /* filename of archive */
- - MHblock *MHptr; /* points to master header */
- - RNode *RNodePtr; /* points to first record node */
- - long nextposn; /* abs. position in file to put next record (for ADD) */
- -} ListHdr;
- -
- -
- -/*
- - * function declarations
- - */
- -
- -extern ListHdr *NuRead(); /* read archive info into memory */
- -extern void NuTest(); /* archive integrity check */
- -extern twobyt CalcCRC(); /* calculate a CRC on a range of bytes */
- -extern char *PrintDate(); /* print a date from a (Time *) struct */
- -extern void BCopy(); /* copy bytes: *src, *dest, num, order? */
- -extern void HiSwap(); /* swap bytes (maybe): *ptr, src_index, dst_index */
- =nudefs.h
- -/*
- - * nudefs.h - system-dependent typdefs and #defines for all NuLib files,
- - * plus extern declarations for global variables (allocated in
- - * numain.c).
- - *
- - * IMPORTANT: This file must be first on the list of #includes, since some
- - * include files will be processed based on these #defines
- - *
- - * NuLib v3.0 February 1991 Freeware (distribute, don't sell)
- - * By Andy McFadden (fadden@cory.berkeley.edu)
- - */
- -
- -
- -/* SYSTEM DEPENDENCIES */
- -typedef unsigned char onebyt;
- -typedef unsigned short twobyt;
- -typedef unsigned long fourbyt;
- -
- -/* byte ordering; TRUE if high byte is first (68xxx), else FALSE (65xxx) */
- -extern int HiLo; /* actually part of numain.c */
- -
- -/* Setup for Apple //gs APW */
- -/* [ "APW" is automatically defined by the compiler ] */
- -
- -/* Setup for MS-DOS machines (80xxx based: IBM PC) */
- -/* [ "MSDOS" is defined by the compiler [MS C5.1 anyway] ] */
- -
- -/* Setup for other microcomputers (Macintosh, Amiga) */
- -/* ??? */
- -
- -/* Setup for AIX */
- -/* #define SYSV */
- -/* #define BSD_INCLUDES */
- -
- -/* Setup for BSD UNIX systems */
- -#define UNIX
- -#define BSD43
- -/* #define VAX */
- -
- -/* Setup for XENIX/386 */
- -/* NOTE: if you get error messages about readdir() and opendir() during */
- -/* linking, remove the leading '#' from the line "#CLIBS= -lx" in */
- -/* "Makefile" */
- -/* #define XENIX386 */
- -/* #define UNIX */
- -/* #define SYSV */
- -/* #define NO_RENAME */ /* no rename() call in C library */
- -
- -/* Setup for AOS/VS @ DG */
- -/* #define UNIX */
- -/* #define DATAGENERAL */
- -/* #define AOSVS */
- -
- -/* Setup for other UNIX systems */
- -/* #define UNIX */
- -/* #define SYSV (or whatever) */
- -
- -/* use table lookups to get CRCs */
- -#define CRC_TAB
- -
- -/*
- - * Some global defs
- - */
- -
- -/* errno wasn't defined in <errno.h> on some systems... */
- -#ifndef MSDOS
- -extern int errno;
- -#endif
- -
- -/* Maximum file name length that we intend to handle (watch stack size!) */
- -#define MAXFILENAME 1024
- -
- -/* file operations */
- -#define S_ABS 0 /* seek absolute */
- -#define S_REL 1 /* seek relative */
- -#define S_END 2 /* seek from end */
- -
- -#ifdef UNIX /* stuff for open() */
- -# define WPERMS 0644 /* read/write for owner, read only for others */
- -# define FREAD_STR "r"
- -# define FWRITE_STR "w"
- -# define O_BINARY 0 /* for non-UNIX open(); easier than #ifdefs */
- -#else
- -# ifdef APW
- -# define WPERMS 0666 /* read/write for all; this may not work for some */
- -# define FREAD_STR "rb"
- -# define FWRITE_STR "wb"
- -# endif
- -# ifdef MSDOS
- -# define S_IREAD 0000400 /* read permission, owner */
- -# define S_IWRITE 0000200 /* write permission, owner */
- -# define WPERMS S_IREAD | S_IWRITE
- -# define FREAD_STR "rb"
- -# define FWRITE_STR "wb"
- -# endif
- -# ifndef WPERMS /* other system */
- -# define WPERMS 0666 /* +PORT+ */
- -# define FREAD_STR "rb"
- -# define FWRITE_STR "wb"
- -# endif
- -#endif /*UNIX*/
- -
- -/* Time structure; same as TimeRec from misctool.h */
- -/* one-byte entries should not have alignment problems... */
- -typedef struct {
- - onebyt second;
- - onebyt minute;
- - onebyt hour;
- - onebyt year;
- - onebyt day;
- - onebyt month;
- - onebyt extra;
- - onebyt weekDay;
- -} Time;
- -
- -
- -/*
- - * global to entire program
- - */
- -extern int HiLo; /* byte ordering; FALSE on low-first (65816) */
- -extern int verbose; /* BOOLEAN: print verbose? */
- -extern int interact; /* BOOLEAN: interactive when overwriting? */
- -extern int dopack; /* BOOLEAN: do we want to pack/unpack? */
- -extern int doSubdir; /* BOOLEAN: expand subdirectories? */
- -extern int doExpand; /* BOOLEAN: expand archived filenames? */
- -extern int doMessages; /* BOOLEAN: do comments instead of data? */
- -extern int transfrom; /* how to do CR<->LF translation? (-1 = none) */
- -extern int transto;
- -extern int packMethod; /* how to pack a file (thread_format) */
- -extern fourbyt defFileType; /* default file type */
- -extern fourbyt defAuxType; /* default aux type */
- -extern onebyt *pakbuf; /* used by compression routines; created once to */
- - /* eliminate overhead involved in malloc()ing a 64K buffer */
- -extern char *prgName; /* for errors; don't like argv[0] */
- -
- =crc.h
- -/*
- - * crc.h - tables for fast computation of 16-bit CRCS
- - *
- - * NuLib v3.0 February 1991 Freeware (distribute, don't sell)
- - * By Andy McFadden (fadden@cory.berkeley.edu)
- - */
- -
- -/*
- - * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell.
- - * NOTE: First srgument must be in range 0 to 255.
- - * Second argument is referenced twice.
- - *
- - * Programmers may incorporate any or all code into their programs,
- - * giving proper credit within the source. Publication of the
- - * source routines is permitted so long as proper credit is given
- - * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg,
- - * Omen Technology.
- - */
- -
- -
- -/*#define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp)*/
- -#define updcrc(cp, crc) ( (crctab[((crc >> 8) & 0xFF) ^ cp] ^ (crc << 8)) & 0xFFFF)
- -
- -
- -/* crctab calculated by Mark G. Mendel, Network Systems Corporation */
- -static unsigned short crctab[256] = {
- - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
- - 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
- - 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
- - 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
- - 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
- - 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
- - 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
- - 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
- - 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
- - 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
- - 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
- - 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
- - 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
- - 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
- - 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
- - 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
- - 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
- - 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
- - 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
- - 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
- - 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
- - 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
- - 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
- - 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
- - 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
- - 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
- - 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
- - 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
- - 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
- - 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
- - 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
- - 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
- -};
- -
- =nucompfn.h
- -/*
- - * nucompfn.h - function declarations for nucomp.c
- - *
- - * NuLib v3.0 February 1991 Freeware (distribute, don't sell)
- - * By Andy McFadden (fadden@cory.berkeley.edu)
- - */
- -
- -extern int u_compress(),
- - u_decompress();
- -
- -/* COMPRESS.FNS global function declarations */
- -/* this should be compatible with any type of declaration for external
- - functions. See compress.h for explaination */
- -#ifdef NPROTO
- -extern void Usage();
- -extern int check_error();
- -extern char *name_index();
- -extern char *get_program_name();
- -#ifdef NO_STRCHR
- -extern char *strchr();
- -#endif
- -#ifdef NO_STRRCHR
- -extern char *strrchr();
- -#endif
- -#ifdef NO_REVSEARCH
- -extern char *strrpbrk();
- -#endif
- -extern int is_z_name();
- -extern int cl_block();
- -extern int make_z_name();
- -extern void unmake_z_name();
- -extern void compress();
- -extern void putcode();
- -extern void decompress();
- -extern CODE getcode();
- -extern void writeerr();
- -extern void copystat();
- -#ifndef NOSIGNAL
- -extern int foreground();
- -extern SIGTYPE onintr();
- -extern SIGTYPE oops();
- -#endif
- -extern void prratio();
- -extern void version();
- -#ifdef NEARHEAP
- -extern ALLOCTYPE *emalloc();
- -extern void efree();
- -#else
- -extern ALLOCTYPE FAR *emalloc();
- -extern void efree();
- -#endif
- -extern int alloc_tables();
- -extern void init_tables();
- -extern int nextcode();
- -#else
- -extern void Usage(int);
- -extern int check_error(void);
- -extern char *name_index(char *);
- -extern int cl_block(void);
- -extern char *get_program_name(char *);
- -extern int is_z_name(char *);
- -extern int make_z_name(char *);
- -extern void unmake_z_name(char *);
- -#ifdef NO_STRCHR
- -extern char *strchr(char *,int);
- -#endif
- -#ifdef NO_STRRCHR
- -extern char *strrchr(char *,int);
- -#endif
- -#ifdef NO_REVSEARCH
- -extern char *strrpbrk(char *,char *);
- -#endif
- -extern void compress(void);
- -extern void putcode(CODE,int);
- -extern void decompress(void);
- -extern CODE getcode(void);
- -extern void writeerr(void);
- -extern void copystat(char *,char *);
- -#ifndef NOSIGNAL
- -extern int foreground(void);
- -extern SIGTYPE onintr(void);
- -extern SIGTYPE oops(void);
- -#endif
- -extern void prratio(FILE *,long,long);
- -extern void version(void);
- -#ifdef NEARHEAP
- -extern ALLOCTYPE *emalloc(unsigned int,int);
- -extern void efree(ALLOCTYPE *);
- -#else
- -extern ALLOCTYPE FAR *emalloc(unsigned int,int);
- -extern void efree(ALLOCTYPE FAR *);
- -#endif
- -extern int alloc_tables(CODE,HASH);
- -extern void init_tables(void );
- -extern int nextcode(CODE *);
- -#endif
- -
- + END OF ARCHIVE
-