🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sources.apple2
1 messages
1 total messages Started by Jonathan A. Chandross Wed, 01 May 1991 22:13
v001SRC038: Nulib - Archive Library Tools (Unix) 07/10
#37
Author: Jonathan A. Chandross
Date: Wed, 01 May 1991 22:13
589 lines
21262 bytes
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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads