home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sources / misc / 3852 < prev    next >
Encoding:
Text File  |  1992-08-22  |  62.0 KB  |  1,500 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: zip-bugs@cs.ucla.edu (Info-ZIP group)
  4. Subject:  v31i102:  zip19 - Info-ZIP portable Zip, version 1.9, Part10/11
  5. Message-ID: <1992Aug23.065015.29701@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 045ddeab004bbd47d01c4755a5d59a76
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Sterling Software
  10. References: <csm-v31i093=zip19.014410@sparky.IMD.Sterling.COM>
  11. Date: Sun, 23 Aug 1992 06:50:15 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 1485
  14.  
  15. Submitted-by: zip-bugs@cs.ucla.edu (Info-ZIP group)
  16. Posting-number: Volume 31, Issue 102
  17. Archive-name: zip19/part10
  18. Supersedes: zip: Volume 23, Issue 88-96
  19. Environment: UNIX, VMS, OS/2, MS-DOS, MACINTOSH, WIN-NT, LINUX, MINIX, XOS, !AMIGA, ATARI, symlink, SGI, DEC, Cray, Convex, Amdahl, Sun, PC
  20.  
  21. #! /bin/sh
  22. # This is a shell archive.  Remove anything before this line, then feed it
  23. # into a shell via "sh file" or similar.  To overwrite existing files,
  24. # type "sh file -c".
  25. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  26. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  27. # Contents:  Readme Where algorith.doc atari/atari.c atari/tc.cfg.UU
  28. #   contents globals.c install.doc match.s mktime.c
  29. #   msdos/doturboc.bat.UU msdos/makefile.bor.UU nt/makefile.nt.UU
  30. #   os2/os2zip.h.UU ziperr.h
  31. # Wrapped by kent@sparky on Sun Aug 23 01:00:47 1992
  32. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  33. echo If this archive is complete, you will see the following message:
  34. echo '          "shar: End of archive 10 (of 11)."'
  35. if test -f 'Readme' -a "${1}" != "-c" ; then 
  36.   echo shar: Will not clobber existing file \"'Readme'\"
  37. else
  38.   echo shar: Extracting \"'Readme'\" \(5257 characters\)
  39.   sed "s/^X//" >'Readme' <<'END_OF_FILE'
  40. XCopyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  41. XKai Uwe Rommel and Igor Mandrichenko.
  42. XPermission is granted to any individual or institution to use, copy, or
  43. Xredistribute this software so long as all of the original files are included
  44. Xunmodified, that it is not sold for profit, and that this copyright notice
  45. Xis retained.
  46. X
  47. X
  48. XZip 1.9 is a compression and file packaging utility.  It is analogous to a
  49. Xcombination of tar and compress and is compatible with PKZIP 1.93a
  50. X(Phil Katz ZIP) for MSDOS systems.  There is a companion to zip called
  51. Xunzip (of course) which you should be able to find the same place you
  52. Xgot zip. (See the file 'where' for details on ftp sites and mail
  53. Xservers.)
  54. X
  55. XThis version of zip has been ported to a wide array of Unix and other
  56. Xmainframes, minis, and micros including VMS, OS/2, Minix, MSDOS,
  57. XWindows NT, Atari, and Macintosh (the latter two have not been tested
  58. Xrecently).  Although highly compatible with PKware's PKZIP and PKUNZIP
  59. Xutilities of MSDOS fame, our primary objective has been one of
  60. Xportability and other-than-MSDOS functionality.  Features not found in
  61. Xthe PKWare version include creation of zip files in a pipe or on a
  62. Xdevice, VMS and OS/2 extended file attributes, conversion from Unix to
  63. XMSDOS text file format; and, of course, the ability to run on most of
  64. Xyour favorite operating systems. And it's free.
  65. X
  66. XIf you got this file from zip19.zip, you can extract the rest only
  67. Xwith unzip 5.0 or pkzip 1.93a. See the file 'Where' if you do not
  68. Xhave them already.
  69. X
  70. XPlease read the file install.doc for information on how to compile and
  71. Xinstall zip, zipsplit and zipnote.  Please read the file zip.doc for
  72. Xinformation on how to use them.  The file "contents" is a complete
  73. Xlist of the files you should have in this distribution.  Also, if you
  74. Xare using MSDOS, you should read the note on file formats at the end
  75. Xof the contents file.
  76. X
  77. XThis version supports encryption, but the encryption code is distributed
  78. Xseparately because of the US export regulations. See the file 'Where'
  79. Xfor access to the encryption code. Decryption can be made with unzip 5.0
  80. Xor later, or with zipcloak (which is provided in the encryption supplement).
  81. X
  82. XAll bug reports and patches should go to zip-bugs@cs.ucla.edu, and
  83. Xsuggestions for new features can be sent to info-zip@cs.ucla.edu
  84. X(although we don't promise to use all suggestions).  Patches should be
  85. Xsent as context diffs only (diff -c).
  86. X
  87. XIf you're considering a port, please check in with zip-bugs FIRST,
  88. Xsince the code is constantly being updated behind the scenes.  We'll
  89. Xarrange to give you access to the latest source.  The alternative is the
  90. Xpossibility that your hard work will be tucked away in a sub-archive
  91. Xand pretty much ignored. A port to VM/CMS would be welcome.
  92. X
  93. XIf you'd like to keep up to date with our zip (and companion unzip utility)
  94. Xdevelopment, join the ranks of BETA testers, add your own thoughts and
  95. Xcontributions, etc., send your request to Info-ZIP-Request@cs.ucla.edu and 
  96. Xyou will be added to the Info-ZIP newsletter mailing list.
  97. X
  98. X
  99. XIMPORTANT NOTES:
  100. X
  101. X- pkzip 1.93a is only an alpha version (see historical notes below). If
  102. X  you wish to create zip files compatible with the official version of
  103. X  pkzip (1.10), you must use zip 1.0. zip 1.9 cannot create files
  104. X  with the old compression method (implosion).
  105. X
  106. X- zip 1.9 is is compatible with pkzip 1.93a, except when two features
  107. X  are used: encryption or zip file created in a pipe or on a non
  108. X  seekable device. pkzip versions of 2.0 will support such files, and
  109. X  unzip 5.0 already supports them. (Thanks to Phil Katz for accepting
  110. X  our suggested minor changes to the zip file format.)
  111. X
  112. X- the ports to the Macintosh and the Atari ST have been provided in
  113. X  the hope that they can be useful, but they have been adapted from an
  114. X  older version of zip (1.0) and are still completely untested. A
  115. X  makefile is still missing for the Mac. Another Macintosh port is
  116. X  being made by Johnny Lee <johnnyl@microsoft.com> but it requires
  117. X  more substantial changes so it will be distributed separately.
  118. X
  119. X- Please read the file zip.doc, and in particular its list of known bugs
  120. X  at the end.
  121. X
  122. XHistorical notes:
  123. X
  124. XAt the time of release of zip 1.9, the official released version of
  125. XPKZIP is version 1.10. PKZIP 1.93a is only an alpha version, which was
  126. Xreleased in October 1991. It was supposed to be replaced soon after
  127. Xwith an official release of pkzip 2.0.  However, Phil Katz has not yet
  128. Xannounced a release date at the time of writing (Aug 19th, 1992).
  129. X
  130. XBeta versions of zip compatible with pkzip 1.93a have been available
  131. Xsince February 1992 to the info-zip group (see the file 'history').
  132. XThe zip authors would have preferred to release zip 2.0 only after
  133. Xpkzip 2.0(*), to ensure full compatibility in case of archive format
  134. Xchanges between pkzip 1.93a and 2.0. However we feel that we cannot
  135. Xdelay any further the release of zip 1.9, since all the major features
  136. Xthat we wanted to put in are now available and well tested by the
  137. Xinfo-zip group.
  138. X
  139. X(*) The version number for the new pkzip was planned to be 2.00, but may
  140. X    be increased to a number greater than 2.2 to prevent confusion with
  141. X    several bogus versions, which may destroy all the data on your hard
  142. X    disk if you run them.
  143. END_OF_FILE
  144.   if test 5257 -ne `wc -c <'Readme'`; then
  145.     echo shar: \"'Readme'\" unpacked with wrong size!
  146.   fi
  147.   # end of 'Readme'
  148. fi
  149. if test -f 'Where' -a "${1}" != "-c" ; then 
  150.   echo shar: Will not clobber existing file \"'Where'\"
  151. else
  152.   echo shar: Extracting \"'Where'\" \(4412 characters\)
  153.   sed "s/^X//" >'Where' <<'END_OF_FILE'
  154. X__________________________________________________________________________
  155. X
  156. X  This is the Info-ZIP file ``Where,'' last updated on 20 August 1992.
  157. X__________________________________________________________________________
  158. X
  159. X
  160. X  SITE OWNERS:  If you're listed in here but the information is not
  161. X  correct (or if you're a big site but aren't listed at all), please
  162. X  let us know!  E-mail to zip-bugs at the address given in Readme
  163. X  and we'll update this file.
  164. X
  165. XBasic source-archive names for Info-ZIP's portable Zip, UnZip, and related
  166. Xutilities (on some ftp sites, the .zip files may have a .zoo equivalent
  167. Xin zoo 2.10 format):
  168. X
  169. X    zip19.zip    Zip 1.9 (includes zipnote and zipsplit)
  170. X    zip19.tar.Z    ditto, compress'd tar format
  171. X
  172. X    unzip50.zip    UnZip 5.0 (includes zipinfo and funzip)
  173. X    unzip50.tar.Z    ditto, compress'd tar format
  174. X
  175. X    wunz12sr.zip    WizUnZip 1.2 support files for Windows 3.1, UnZip 5.0
  176. X
  177. X    zcrypt19.zip    encryption/decryption support (includes zipcloak)
  178. X
  179. XRelated archives and files:
  180. X
  181. X    UnzpHist.zip    changes history of UnZip, back to 2.0
  182. X
  183. X    zip19x.zip      MSDOS executables and docs for zip, zipnote, zipsplit
  184. X    unzip50.exe     MSDOS executable for unzip
  185. X
  186. X    zip19_16.zip    OS/2 1.x 16-bit executables and docs
  187. X    zip19_32.zip    OS/2 2.x 32-bit executables and docs
  188. X    unz50_16.exe    OS/2 1.x 16-bit executable
  189. X    unz50_32.exe    OS/2 2.x 32-bit executable
  190. X
  191. X    zip19vms.zip    VMS executables and docs for zip, zipnote, zipsplit
  192. X    unz50vms.exe    VMS executable for unzip
  193. X
  194. X    zip_unzip.hqx   Macinstosh executables (zip 1.0 only, 1.9 not ready)
  195. X
  196. X    winunz12.zip    Windows 3.1 executables (zip 1.0 only, 1.9 not ready)
  197. X
  198. X    pkz110eu.exe    MS-DOS PKZIP/PKUNZIP 1.1 (self-extracting archive)
  199. X    pkz193a.exe    MS-DOS PKZIP/PKUNZIP beta 1.93 (self-extracting)
  200. X    pkz102-2.exe    OS/2 PKZIP/PKUNZIP 1.02 (self-extracting)
  201. X
  202. Xftp sites for the US-exportable sources and executables.  Look for
  203. Xthe file names given above in the following directories.  Some sites
  204. Xlike to use slightly different names, such as zip-1.9.tar-z instead
  205. Xof zip19.tar.Z.
  206. X
  207. X    wuarchive.wustl.edu:/packages/compression/...
  208. X    wuarchive.wustl.edu:/mirrors/misc/unix/...
  209. X    wuarchive.wustl.edu:/mirrors/misc/vaxvms/...
  210. X    wuarchive.wustl.edu:/mirrors/msdos/zip/...
  211. X    wuarchive.wustl.edu:/mirrors/msdos/windows3/...
  212. X
  213. X    ftp.uu.net:/pub/zip/...
  214. X
  215. X    ftp-os2.nmsu.edu:/pub/os2/2.0/archivers/...
  216. X    ftp-os2.nmsu.edu:/pub/os2/all/archivers/...
  217. X
  218. X    Zip 1.9 and UnZip 5.0 will also be available at any comp.sources.misc
  219. X    archive site as soon as they are posted.
  220. X
  221. X    wuarchive.wustl.edu:/mirrors/msdos/zip/pkz110eu.exe
  222. X    ux1.cso.uiuc.edu:/pc/exec-pc/pkz193a.exe    [128.174.5.59]
  223. X
  224. Xftp sites for the encryption and decryption sources:
  225. X
  226. X    NOTE:  Non-US users, please do NOT ftp from the US site (US
  227. X    regulations and all that).  Likewise, US users, please do not
  228. X    ftp from the European sites (it's not illegal, but it sure is
  229. X    a waste of expensive bandwidth).
  230. X
  231. X    From the US:
  232. X       wuarchive.wustl.edu:/mirrors3/garbo.uwasa.fi/arcutil/zcrypt19.zip
  233. X
  234. X    Outside the US:
  235. X       garbo.uwasa.fi:/pc/arcutil/zcrypt19.zip
  236. X       ftp.win.tue.nl:/pub/compression/zip/zcrypt19.zip
  237. X       ftp.inria.fr:/system/arch-compr/zcrypt19.zip
  238. X       ftp.informatik.tu-muenchen.de:/pub/utils/archiver/zcrypt19.zip
  239. X         (mail server at ftp-mailer@ftp.informatik.tu-muenchen.de)
  240. X
  241. XTo find other ftp sites:
  242. X
  243. X    The "archie" ftp database utility can be used to find an ftp site
  244. X    near you.  If you don't know how to use it, DON'T ASK US--check the
  245. X    Usenet groups news.newusers.questions or news.answers or some such,
  246. X    or ask your system administrator.
  247. X
  248. XUUCP sites:
  249. X
  250. X    uunet!~/pub/zip/ ...
  251. X
  252. XMail servers:
  253. X
  254. X    If you don't have anonymous FTP capability, you can mail one
  255. X    of the following commands (in the body of an e-mail message) to
  256. X    listserv@vm1.nodak.edu or listserv@vm.ecs.rpi.edu in order to
  257. X    get a copy via e-mail:
  258. X
  259. X    /pdget mail pd:<misc.unix>unzip50.tar-z uuencode
  260. X    /pdget mail pd:<misc.unix>zip19.zip uuencode
  261. X   or:    /pdget mail pd:<misc.unix>zip19.tar-z uuencode
  262. X
  263. X    To get the encryption source by email, send the following commands
  264. X    to ftp-mailer@ftp.informatik.tu-muenchen.de:
  265. X
  266. X    get /pub/utils/archiver/zcrypt19.zip
  267. X        quit
  268. X
  269. X__________________________________________________________________________
  270. X
  271. XAgain, if someone repackages any of the source or executable archives in
  272. XVMS-, Mac- or Atari-specific formats, please let us know (send e-mail to 
  273. Xzip-bugs at the address listed in README).
  274. X__________________________________________________________________________
  275. X
  276. END_OF_FILE
  277.   if test 4412 -ne `wc -c <'Where'`; then
  278.     echo shar: \"'Where'\" unpacked with wrong size!
  279.   fi
  280.   # end of 'Where'
  281. fi
  282. if test -f 'algorith.doc' -a "${1}" != "-c" ; then 
  283.   echo shar: Will not clobber existing file \"'algorith.doc'\"
  284. else
  285.   echo shar: Extracting \"'algorith.doc'\" \(2948 characters\)
  286.   sed "s/^X//" >'algorith.doc' <<'END_OF_FILE'
  287. XZip's deflation algorithm is a variation of LZ77 (Lempel-Ziv 1977, see
  288. Xreference below). It finds duplicated strings in the input data.  The
  289. Xsecond occurrence of a string is replaced by a pointer to the previous
  290. Xstring, in the form of a pair (distance, length).  Distances are
  291. Xlimited to 32K bytes, and lengths are limited to 258 bytes. When a
  292. Xstring does not occur anywhere in the previous 32K bytes, it is
  293. Xemitted as a sequence of literal bytes.  (In this description,
  294. X'string' must be taken as an arbitrary sequence of bytes, and is not
  295. Xrestricted to printable characters.)
  296. X
  297. XLiterals or match lengths are compressed with one Huffman tree, and
  298. Xmatch distances are compressed with another tree. The trees are stored
  299. Xin a compact form at the start of each block. The blocks can have any
  300. Xsize (except that the compressed data for one block must fit in
  301. Xavailable memory). A block is terminated when zip determines that it
  302. Xwould be useful to start another block with fresh trees. (This is
  303. Xsomewhat similar to compress.)
  304. X
  305. XDuplicated strings are found using a hash table. All input strings of
  306. Xlength 3 are inserted in the hash table. A hash index is computed for
  307. Xthe next 3 bytes. If the hash chain for this index is not empty, all
  308. Xstrings in the chain are compared with the current input string, and
  309. Xthe longest match is selected.
  310. X
  311. XThe hash chains are searched starting with the most recent strings, to
  312. Xfavor small distances and thus take advantage of the Huffman encoding.
  313. XThe hash chains are singly linked. There are no deletions from the
  314. Xhash chains, the algorithm simply discards matches that are too old.
  315. X
  316. XTo avoid a worst-case situation, very long hash chains are arbitrarily
  317. Xtruncated at a certain length, determined by a runtime option (zip -1
  318. Xto -9). So zip does not always find the longest possible match but
  319. Xgenerally finds a match which is long enough.
  320. X
  321. Xzip also defers the selection of matches with a lazy evaluation
  322. Xmechanism. After a match of length N has been found, zip searches for a
  323. Xlonger match at the next input byte. If a longer match is found, the
  324. Xprevious match is truncated to a length of one (thus producing a single
  325. Xliteral byte) and the longer match is emitted afterwards.  Otherwise,
  326. Xthe original match is kept, and the next match search is attempted only
  327. XN steps later.
  328. X
  329. XThe lazy match evaluation is also subject to a runtime parameter. If
  330. Xthe current match is long enough, zip reduces the search for a longer
  331. Xmatch, thus speeding up the whole process. If compression ratio is more
  332. Ximportant than speed, zip attempts a complete second search even if
  333. Xthe first match is already long enough.
  334. X
  335. XJean-loup Gailly
  336. Xjloup@chorus.fr
  337. X
  338. XReferences:
  339. X
  340. X[LZ77] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data
  341. XCompression", IEEE Transactions on Information Theory", Vol. 23, No. 3,
  342. Xpp. 337-343.
  343. X
  344. XAPPNOTE.TXT documentation file in PKZIP 1.93a. It is available by
  345. Xftp in ux1.cso.uiuc.edu:/pc/exec-pc/pkz193a.exe [128.174.5.59]
  346. END_OF_FILE
  347.   if test 2948 -ne `wc -c <'algorith.doc'`; then
  348.     echo shar: \"'algorith.doc'\" unpacked with wrong size!
  349.   fi
  350.   # end of 'algorith.doc'
  351. fi
  352. if test -f 'atari/atari.c' -a "${1}" != "-c" ; then 
  353.   echo shar: Will not clobber existing file \"'atari/atari.c'\"
  354. else
  355.   echo shar: Extracting \"'atari/atari.c'\" \(1896 characters\)
  356.   sed "s/^X//" >'atari/atari.c' <<'END_OF_FILE'
  357. X/*
  358. X * ATARI.C
  359. X *
  360. X * Necessary interface functions, mostly for conversion
  361. X * of path names.
  362. X */
  363. X#ifdef ATARI_ST
  364. X
  365. X#include <stdio.h>
  366. X#include <stdlib.h>
  367. X#include <tos.h>
  368. X#include <ext.h>
  369. X
  370. X#define FNMAX 256
  371. X#define OF(sig) sig
  372. X
  373. Xchar *st_fn OF((char *));
  374. X
  375. Xchar *st_fn(s)
  376. Xchar *s;
  377. X{
  378. Xstatic char tosname [ FNMAX ];
  379. Xchar *t = tosname;
  380. X
  381. X  while ( *t=*s++ ) {
  382. X    if ( *t == '/' )
  383. X      *t = '\\';
  384. X    t++;
  385. X  }
  386. X  
  387. X  return(tosname);
  388. X}
  389. X
  390. Xint st_unlink(f)
  391. Xchar *f;
  392. X{
  393. X  return(unlink(st_fn(f)));
  394. X}
  395. X
  396. X/* Fake chmod with minimalistic functionality.
  397. X * [ anyway people will be in trouble with the readonly files
  398. X *   produces by this, since 'normal' users don't own the
  399. X *   'tools' to manipulate these. ]
  400. X */
  401. Xint st_chmod(f, a)
  402. Xchar *f;                /* file path */
  403. Xint a;                  /* attributes returned by getfileattr() */
  404. X/* Give the file f the attributes a, return non-zero on failure */
  405. X{
  406. X  if ( ! ( a & S_IWRITE ) )
  407. X    if (Fattrib(st_fn(f), 1, FA_READONLY) < 0 )
  408. X      return(-1);
  409. X  return 0;
  410. X}
  411. X
  412. X/*
  413. X * mktemp is not part of the Turbo C library.
  414. X */ 
  415. Xchar *st_mktemp(s)
  416. Xchar *s;
  417. X{
  418. Xchar *t;
  419. Xlong i;
  420. X  for(t=s; *t; t++)
  421. X    if ( *t == '/' )
  422. X      *t = '\\';
  423. X  t -= 6;
  424. X  i = (unsigned long)s % 1000000L;
  425. X  do {
  426. X    sprintf(t, "%06ld", i++);
  427. X  } while ( Fsfirst(s, 0x21) == 0 );
  428. X  return(s);
  429. X}
  430. X
  431. XFILE *st_fopen(f,m)
  432. Xchar *f;
  433. Xchar *m;
  434. X{
  435. X  return(fopen(st_fn(f),m));
  436. X}
  437. X
  438. Xint st_open(f,m)
  439. Xchar *f;
  440. Xint m;
  441. X{
  442. X  return(open(st_fn(f),m));
  443. X}
  444. X
  445. Xint st_stat(f, b)
  446. Xchar *f;
  447. Xstruct stat *b;
  448. X{
  449. X  return(stat(st_fn(f),b));
  450. X}
  451. X
  452. Xint st_findfirst(n,d,a)
  453. Xchar *n;
  454. Xstruct ffblk *d;
  455. Xint a;
  456. X{
  457. X  return(findfirst( st_fn(n),(struct ffblk *)d,a));
  458. X}
  459. X
  460. X
  461. Xint st_rename(s, d)
  462. Xchar *s, *d;
  463. X{
  464. Xchar tosname [ FNMAX ];
  465. Xchar *t = tosname;
  466. X
  467. X  while ( *t=*s++ ) {
  468. X    if ( *t == '/' )
  469. X      *t = '\\';
  470. X    t++;
  471. X  }
  472. X  return(rename(tosname, st_fn(d)));
  473. X}  
  474. X
  475. Xint st_rmdir(d)
  476. Xchar *d;
  477. X{
  478. X  return(Ddelete(st_fn(d)));
  479. X}
  480. X
  481. X#endif /* ?ATARI_ST */
  482. END_OF_FILE
  483.   if test 1896 -ne `wc -c <'atari/atari.c'`; then
  484.     echo shar: \"'atari/atari.c'\" unpacked with wrong size!
  485.   fi
  486.   # end of 'atari/atari.c'
  487. fi
  488. if test -f 'atari/tc.cfg.UU' -a "${1}" != "-c" ; then 
  489.   echo shar: Will not clobber existing file \"'atari/tc.cfg.UU'\"
  490. else
  491.   echo shar: Extracting \"'atari/tc.cfg.UU'\" \(3563 characters\)
  492.   sed "s/^X//" >'atari/tc.cfg.UU' <<'END_OF_FILE'
  493. Xbegin 666 atari/tc.cfg
  494. XM @( "C0                                                     
  495. XM                                                            
  496. XM                                                            
  497. XM                                                            
  498. XM                                                            
  499. XM                                                            
  500. XM                                                            
  501. XM                                                            
  502. XM                                                            
  503. XM                                              0             
  504. XM            93I<=&-<:6YC;'5D90                              
  505. XM     $%405))7U-4  !84$]25   3U)4                            
  506. XM                                                    ,C4  #$P
  507. XM,  S,@  ,@                                                  
  508. XM                                                            
  509. XM                                                            
  510. XM                                                            
  511. XM                                                            
  512. XM                                                            
  513. XM                                                            
  514. XM                                                            
  515. XM                                                            
  516. XM                                                            
  517. XM                                                            
  518. XM                                                            
  519. XM                                                            
  520. XM                                                !           
  521. XM                                           X,3DR        93I<
  522. XM=&-<;&EB                                                    
  523. XM                                                            
  524. XM                                                            
  525. XM                                                            
  526. XM1CI<6DE07%I)4%Q:25 N4%)*                                    
  527. XM                                                            
  528. XM                                                  !&.EQ:25!<
  529. XM6DE07 !#+EI)4                                               
  530. XM                                                            
  531. XM                                                            
  532. XM                                                            
  533. XM                                                            
  534. XM                                /S\_                        
  535. XM @ # $8 %$8Z7%I)4%Q:25!<34%+149)3$4 7$U!2T5&24Q%      ,     
  536. XM       )^?H  #>* P  ")'D    $   -XH#$  (FIH "LUN        # @ 
  537. XM   0                  GZ(@       0 (  $ "  !     0   !  "=)P
  538. XM      !#    0P      1@ 41CI<6DE07%I)4%Q:25 N4%)*  !<34%+149)
  539. XM3$4      P            GY^@  -XH#   (D>0    0   WB@,0  B:F@ *
  540. XMS6X        ,"    !                  "?HB       !  @  0 (  $ 
  541. XM   !    $  )TG                   0!& !1%.EQ40UQ$149!54Q4+E!2
  542. XM2@   %Q-04M%1DE,10     #            "?GZ   WB@,   B1Y    !  
  543. XM #>* Q  ")J:  K-;@        P(    $                  )^B(     
  544. XM  $ "  !  @  0    $    0  G2<  !    L@   +(    ! $8 %$UE<W-A
  545. XM9V5S                                                        
  546. XM                                                            
  547. XM                                              (             
  548. XM                                                            
  549. XM                                                            
  550. XL                                                            
  551. Xend
  552. END_OF_FILE
  553.  if test 3563 -ne `wc -c <'atari/tc.cfg.UU'`; then
  554.     echo shar: \"'atari/tc.cfg.UU'\" unpacked with wrong size!
  555.   else
  556.     echo shar: Uudecoding \"'atari/tc.cfg'\" \(2564 characters\)
  557.     cat atari/tc.cfg.UU | uudecode
  558.     if test 2564 -ne `wc -c <'atari/tc.cfg'`; then
  559.       echo shar: \"'atari/tc.cfg'\" uudecoded with wrong size!
  560.     else
  561.       rm atari/tc.cfg.UU
  562.     fi
  563.   fi
  564.   # end of 'atari/tc.cfg.UU'
  565. fi
  566. if test -f 'contents' -a "${1}" != "-c" ; then 
  567.   echo shar: Will not clobber existing file \"'contents'\"
  568. else
  569.   echo shar: Extracting \"'contents'\" \(4614 characters\)
  570.   sed "s/^X//" >'contents' <<'END_OF_FILE'
  571. XCopyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  572. XKai Uwe Rommel and Igor Mandrichenko.
  573. XPermission is granted to any individual or institution to use, copy, or
  574. Xredistribute this software so long as all of the original files are included
  575. Xunmodified, that it is not sold for profit, and that this copyright notice
  576. Xis retained.
  577. X
  578. XThis file is a complete list of files mentioned in the above copyright.  Some
  579. Xof the files in this list explicitly state in their text that they are public
  580. Xdomain or not copyrighted.  These files can be distributed separately and are
  581. Xmarked below with asterisks.
  582. X
  583. Xfile            what it is
  584. X----            ----------
  585. XReadme          What zip is; general information.
  586. XWhere           where Zip/UnZip and encryption/decryption support can be found
  587. Xalgorith.doc    Description of the deflation algorithm
  588. Xbits.c          Output variable-length bit strings.
  589. Xcontents        This file.
  590. Xdeflate.c       Deflation compression method
  591. Xfileio.c        System dependent routines (most of them anyway).
  592. Xglobals.c       Global variables.
  593. Xhistory         List of changes in the versions leading up to this one.
  594. Xinfozip.who     List of contributors to the portable Zip project.
  595. Xinstall.doc     Documentation for Zip compilation and installation
  596. Xmakecrc.c       * Generate the CRC table in util.c and shrink.c.
  597. Xmakefile        Unix make file.
  598. Xmatch.s         Optimized 386 version of longest_match() (Unix & OS/2)
  599. Xmktime.c        Version of mktime for systems without it (currently unused)
  600. Xrevision.h      Contains the program version number and revision date.
  601. Xtailor.h        * Tailors the compilation to the system being compiled on.
  602. Xtrees.c         Encode source values using variable-length binary code trees.
  603. Xutil.c          Miscellaneous utility routines.
  604. Xzip.1           Source for the Zip man page (zip.doc).
  605. Xzip.c           Main routine for Zip.
  606. Xzip.doc         Documentation for Zip (zip.1 processed).
  607. Xzip.h           Header for all Zip modules.
  608. Xziperr.h        Error messages in Zip.
  609. Xzipfile.c       Zip file format handler.
  610. Xzipnote.c       Main routine for ZipNote.
  611. Xzipsplit.c      Main routine for ZipSplit.
  612. Xzipup.c         Applies deflate or store methods to compress an entry.
  613. Xatari/atari.c         Atari ST specific routines
  614. Xatari/makefile.st     Turbo C makefile
  615. Xatari/stzip.lnk       Linker command file for zip
  616. Xatari/stzip.prj       Turbo C project file
  617. Xatari/stzipn.lnk      Linker command file for zipnote
  618. Xatari/stzips.lnk      Linker command file for zipsplit
  619. Xatari/tc.cfg          Turbo C configuration file
  620. Xmac/macfile.c         Macintosh specific routines
  621. Xmac/macstat.c         Macintosh specific routines
  622. Xmac/macstat.h         Macintosh specific header file
  623. Xmsdos/doturboc.bat    Batch file for compiling under Turbo C 2.0.
  624. Xmsdos/makefile.bor    MSDOS Borland C++ make file.
  625. Xmsdos/makefile.gcc    MSDOS DJGCC make file.
  626. Xmsdos/makefile.msc    MSDOS Microsoft C make file.
  627. Xmsdos/match.asm       Optimized 8086 version of longest_match().
  628. Xmsdos/tcconfig.tc     TurboC 2.0 configuration file
  629. Xmsdos/zip.prj         Project file for Borland (Turbo) C++.
  630. Xmsdos/zipnote.prj     Project file for Borland (Turbo) C++.
  631. Xmsdos/zipsplit.prj    Project file for Borland (Turbo) C++.
  632. Xnt/makefile.nt        Makefile for Windows NT
  633. Xos2/makefile.os2      OS/2 make file.
  634. Xos2/match32.asm       Optimized 386 version of longest_match() (*untested*)
  635. Xos2/os2zip.c          * Directory routines for OS/2.
  636. Xos2/os2zip.h          * Definitions of functions in os2zip.c.
  637. Xos2/zip.def           OS/2 def file for Zip.
  638. Xvms/VMSmunch.c        file manipulation, adapted from Joe Meadows' FILE
  639. Xvms/VMSmunch.h        definitions for VMSmunch.c
  640. Xvms/descrip.mms       VMS makefile
  641. Xvms/make_gcc.com      VMS command file for compilation with gcc.
  642. Xvms/make_vaxc.com     VMS command file for compilation with Vax C.
  643. Xvms/makefile.vms      VMS makefile for use with Todd Aven's MAKE/VMS
  644. Xvms/vaxclib.opt       VMS option file
  645. Xvms/vms.c             VMS specific code
  646. Xvms/vms_zip.rnh       VMS manual page
  647. X
  648. XAll of the files are in Unix (LF only) format except for the msdos and os2
  649. Xfiles.  On MSDOS and OS/2 systems, you can use the -a option of unzip to
  650. Xconvert the source files to CRLF format.  This is only necessary if you wish
  651. Xto edit the files -- they will compile as is with Microsoft C and
  652. XTurbo/Borland C++ 1.0 or later.  However, you will have to convert the files
  653. X(using unzip -a) to the CRLF format to compile with the older Turbo C 1.0 or
  654. X2.0. In this case, do not convert the binary file turboc.cfg.
  655. XYou should be able to find unzip the same place you found this (see the
  656. Xfile 'where').
  657. END_OF_FILE
  658.   if test 4614 -ne `wc -c <'contents'`; then
  659.     echo shar: \"'contents'\" unpacked with wrong size!
  660.   fi
  661.   # end of 'contents'
  662. fi
  663. if test -f 'globals.c' -a "${1}" != "-c" ; then 
  664.   echo shar: Will not clobber existing file \"'globals.c'\"
  665. else
  666.   echo shar: Extracting \"'globals.c'\" \(2576 characters\)
  667.   sed "s/^X//" >'globals.c' <<'END_OF_FILE'
  668. X/*
  669. X
  670. X Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  671. X Kai Uwe Rommel and Igor Mandrichenko.
  672. X Permission is granted to any individual or institution to use, copy, or
  673. X redistribute this software so long as all of the original files are included
  674. X unmodified, that it is not sold for profit, and that this copyright notice
  675. X is retained.
  676. X
  677. X*/
  678. X
  679. X/*
  680. X *  globals.c by Mark Adler.
  681. X */
  682. X
  683. X#define GLOBALS         /* include definition of errors[] in zip.h */
  684. X#include "zip.h"
  685. X
  686. X
  687. X/* Handy place to build error messages */
  688. Xchar errbuf[FNMAX+81];
  689. X
  690. X/* Argument processing globals */
  691. Xint recurse = 0;        /* 1=recurse into directories encountered */
  692. Xint pathput = 1;        /* 1=store path with name */
  693. Xint method = BEST;      /* one of BEST, DEFLATE (only), or STORE (only) */
  694. Xint dosify = 0;         /* 1=make new entries look like MSDOS */
  695. Xint verbose = 0;        /* 1=report oddities in zip file structure */
  696. Xint level = 5;          /* 0=fastest compression, 9=best compression */
  697. Xint translate_eol = 0;  /* Translate end-of-line LF -> CR LF */
  698. X#ifdef VMS
  699. X   int vmsver = 0;      /* 1=append VMS version number to file names */
  700. X   int vms_native = 0;  /* 1=store in VMS format */
  701. X#endif /* VMS */
  702. X#ifdef OS2
  703. X   int use_longname_ea = 0; /* 1=use the .LONGNAME EA as the file's name */
  704. X#endif /* OS2 */
  705. Xint linkput = 0;        /* 1=store symbolic links as such */
  706. Xint noisy = 1;          /* 0=quiet operation */
  707. Xchar *special = ".Z:.zip:.zoo:.arc:.lzh:.arj"; /* List of special suffixes */
  708. Xchar *key = NULL;       /* Scramble password if scrambling */
  709. Xchar *tempath = NULL;   /* Path for temporary files */
  710. XFILE *mesg;             /* stdout by default, stderr for piping */
  711. X
  712. X/* Zip file globals */
  713. Xchar *zipfile;          /* New or existing zip archive (zip file) */
  714. Xulg zipbeg;             /* Starting offset of zip structures */
  715. Xulg cenbeg;             /* Starting offset of central directory */
  716. Xstruct zlist far *zfiles = NULL;  /* Pointer to list of files in zip file */
  717. Xextent zcount;          /* Number of files in zip file */
  718. Xextent zcomlen;         /* Length of zip file comment */
  719. Xchar *zcomment;         /* Zip file comment (not zero-terminated) */
  720. Xstruct zlist far **zsort;       /* List of files sorted by name */
  721. Xulg tempzn;             /* Count of bytes written to output zip file */
  722. X
  723. X/* Files to operate on that are not in zip file */
  724. Xstruct flist far *found = NULL; /* List of names found */
  725. Xstruct flist far * far *fnxt = &found;
  726. X                        /* Where to put next name in found list */
  727. Xextent fcount;          /* Count of files in list */
  728. END_OF_FILE
  729.   if test 2576 -ne `wc -c <'globals.c'`; then
  730.     echo shar: \"'globals.c'\" unpacked with wrong size!
  731.   fi
  732.   # end of 'globals.c'
  733. fi
  734. if test -f 'install.doc' -a "${1}" != "-c" ; then 
  735.   echo shar: Will not clobber existing file \"'install.doc'\"
  736. else
  737.   echo shar: Extracting \"'install.doc'\" \(4088 characters\)
  738.   sed "s/^X//" >'install.doc' <<'END_OF_FILE'
  739. XHOW TO INSTALL ZIP
  740. X     Zip is distributed as C source code that can be compiled on
  741. X     a wide range of Unix machines, VAXes running VMS, and MSDOS
  742. X     machines using Microsoft or Borland C++, and OS/2 machines
  743. X     using Microsoft C.  You will need Unzip 5.0 (under Unix, MSDOS,
  744. X     or VMS) or PKUNZIP 1.93a (under MSDOS) to unpack the distribution
  745. X     file, zip19.zip. But since you read this, you have unpacked it
  746. X     already, or you cheated and got a tar.Z file...
  747. X
  748. X     Let's assume however that you start from scratch and have not yet
  749. X     unpacked the sources. First, unpack the source as follows,
  750. X     assuming that you have zip19.zip in the current directory.
  751. X
  752. X          mkdir zipsrc
  753. X          cd zipsrc
  754. X          unzip ../zip19
  755. X
  756. X     This extracts all source files and documentation in the
  757. X     directory called "zipsrc". If you wish to build a version
  758. X     of zip with encryption capabilities, you must also get the
  759. X     separate package zcrypt19.zip and uncomment the definition
  760. X     of MAKE at the beginning of the makefile.
  761. X
  762. X     You then do:
  763. X
  764. X          make system
  765. X
  766. X     where "system" is one of: bsd, bsdold, sysv, sysv_386, sysv_old, sun,
  767. X     sun_gcc, next, next10, hpux, dnix, cray, 3b1, zilog, aux, convex, aix,
  768. X     minix, isc, dynix, ultrix, dec_osf1 or xos. If you are using a NeXT
  769. X     running version 2.0 or greater, then make next.  If you are using 1.0,
  770. X     then make next10.  If you are using Sun OS 4.x, then make sun (or
  771. X     sun_gcc if you use gcc). If you are using SVR4 on a 386, use
  772. X     sysv_386 to get the optimized asm code.
  773. X
  774. X     The other special systems are HPUX, DNIX 5.2 or 5.3, Cray Unicos,
  775. X     AT&T 3B1 (also known as Unix PC or PC 7300), Zilog Zeus, A/UX,
  776. X     Convex, AIX, MINIX, ISC System V/386, Dynix, Ultrix and DEC OSF/1.
  777. X
  778. X     Otherwise, if you are using BSD Unix, try bsd.  If the linker
  779. X     cannot find _memset or _memcpy, try bsdold.  If you are using
  780. X     System V Unix or SCO Unix, try sysv or sysv_old.  Also use sysv
  781. X     on a Silicon Graphics (SGI) machine.  You can also cross-compile
  782. X     Zip for MSDOS under SCO 386 Unix using "make scodos".
  783. X
  784. X     If none of these compiles, links, and functions properly on
  785. X     your Unix system, see the section BUGS below for how to get
  786. X     help.
  787. X
  788. X     If the appropriate system was selected, then the executables
  789. X     zip, zipnote and zipsplit will be created.  You can copy them
  790. X     to an appropriate directory in the search path using:
  791. X
  792. X          make install
  793. X
  794. X     The defaults are /usr/local/bin for the executables and
  795. X     /usr/man/man1 for the manual page. Change the macros BINDIR
  796. X     and MANDIR in makefile if appropriate.
  797. X
  798. X     You can use the command "set" to see the current search
  799. X     path.  If you are using the C-Shell (csh), enter the com-
  800. X     mand:
  801. X
  802. X          rehash
  803. X
  804. X     so csh can find the new command in the path.  You are now
  805. X     ready to use Zip.
  806. X
  807. X     You can get rid of the now unnecessary source and object
  808. X     files with:
  809. X
  810. X          cd ..
  811. X          rm -r zipsrc
  812. X
  813. X     This will remove the directory zip and its contents created
  814. X     by unzip.  You should keep the zip19.zip file around though,
  815. X     in case you need to build it again or want to give it to a
  816. X     colleague.
  817. X
  818. X     The steps for installation under MSDOS, OS/2, and VMS are
  819. X     similar to the above: first unzip the distribution files
  820. X     into their own directory. The system dependant files are
  821. X     stored in special subdirectories. You may have to
  822. X     copy or move them to the main sources directory.
  823. X     Then under MSDOS do one of:
  824. X
  825. X          make makefile.msc
  826. X          make -fmakefile.bor
  827. X
  828. X     for Microsoft or Borland C++, respectively. For Turbo C 2.0,
  829. X     use the configuration file tcconfig.tc, the batch file
  830. X     doturboc.bat and the project files zip.prj, zipnote.prj
  831. X     and zipsplit.prj. Make sure to use the compact model.
  832. X
  833. X     Under OS/2:
  834. X
  835. X          nmake -f makefile.os2
  836. X
  837. X     for Microsoft C 6.00.  Under VAX VMS:
  838. X
  839. X          @make_vaxc
  840. X     or:  @make_gcc
  841. X
  842. X     For command help on any of the zip* utilities, simply enter
  843. X     the name with no arguments.
  844. END_OF_FILE
  845.   if test 4088 -ne `wc -c <'install.doc'`; then
  846.     echo shar: \"'install.doc'\" unpacked with wrong size!
  847.   fi
  848.   # end of 'install.doc'
  849. fi
  850. if test -f 'match.s' -a "${1}" != "-c" ; then 
  851.   echo shar: Will not clobber existing file \"'match.s'\"
  852. else
  853.   echo shar: Extracting \"'match.s'\" \(5410 characters\)
  854.   sed "s/^X//" >'match.s' <<'END_OF_FILE'
  855. X/
  856. X/ Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  857. X/ Kai Uwe Rommel and Igor Mandrichenko.
  858. X/ Permission is granted to any individual or institution to use, copy, or
  859. X/ redistribute this software so long as all of the original files are included
  860. X/ unmodified, that it is not sold for profit, and that this copyright notice
  861. X/ is retained.
  862. X/
  863. X/ match.s by Jean-loup Gailly. Translated to 32 bit code by Kai Uwe Rommel.
  864. X
  865. X/ match.s, optimized version of longest_match() in deflate.c
  866. X/ This version is for 386 Unix or OS/2 in 32 bit mode.
  867. X/ Warning: it uses the AT&T syntax: mov source,dest
  868. X/ This file is only optional. If you want to force the C version,
  869. X/ add -DNO_ASM to CFLAGS in makefile and remove match.o from OBJI).
  870. X/ If you have reduced WSIZE in zip.h, then change its value below.
  871. X/ This version assumes static allocation of the arrays (-DDYN_ALLOC not used).
  872. X
  873. X    .file   "match.s"
  874. X
  875. X#if defined(__GO32__) && defined(unix)
  876. X#  undef unix
  877. X#endif
  878. X
  879. X#ifdef unix
  880. X#  define _prev             prev
  881. X#  define _window           window
  882. X#  define _match_start        match_start
  883. X#  define _prev_length        prev_length
  884. X#  define _good_match        good_match
  885. X#  define _strstart        strstart
  886. X#  define _max_chain_length max_chain_length
  887. X
  888. X#  define _match_init       match_init
  889. X#  define _longest_match    longest_match
  890. X#endif
  891. X
  892. X#define MAX_MATCH     258
  893. X#define MAX_MATCH2      128     /* MAX_MATCH/2-1 */
  894. X#define MIN_MATCH    3
  895. X#define WSIZE         32768
  896. X#define MAX_DIST     WSIZE - MAX_MATCH - MIN_MATCH - 1
  897. X
  898. X    .globl    _match_init
  899. X    .globl  _longest_match
  900. X
  901. X    .text
  902. X
  903. X_match_init:
  904. X    ret
  905. X
  906. X/ -----------------------------------------------------------------------
  907. X/ Set match_start to the longest match starting at the given string and
  908. X/ return its length. Matches shorter or equal to prev_length are discarded,
  909. X/ in which case the result is equal to prev_length and match_start is
  910. X/ garbage.
  911. X/ IN assertions: cur_match is the head of the hash chain for the current
  912. X/   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
  913. X
  914. X_longest_match:    /* int longest_match(cur_match) */
  915. X
  916. X#define cur_match   20(%esp)
  917. X        / return address                / esp+16
  918. X        push    %ebp                    / esp+12
  919. X        push    %edi                    / esp+8
  920. X    push    %esi                    / esp+4
  921. X    push    %ebx            / esp
  922. X
  923. X/       match        equ esi
  924. X/       scan         equ edi
  925. X/       chain_length equ ebp
  926. X/       best_len     equ ebx
  927. X/       limit        equ edx
  928. X
  929. X    mov     cur_match,%esi
  930. X        mov     _max_chain_length,%ebp  / chain_length = max_chain_length
  931. X    mov     _strstart,%edi
  932. X    mov     %edi,%edx
  933. X    sub    $ MAX_DIST,%edx         / limit = strstart-MAX_DIST
  934. X    jae    limit_ok
  935. X    sub    %edx,%edx               / limit = NIL
  936. Xlimit_ok:
  937. X        add    $_window+2,%edi         / edi = offset(window + strstart + 2)
  938. X        mov    _prev_length,%ebx       / best_len = prev_length
  939. X        movw     -3(%ebx,%edi),%ax       / ax = scan[best_len-1..best_len]
  940. X        movw     -2(%edi),%cx            / cx = scan[0..1]
  941. X    cmp    _good_match,%ebx        / do we have a good match already?
  942. X        jb      do_scan
  943. X    shr     $2,%ebp                 / chain_length >>= 2
  944. X        jmp     do_scan
  945. X
  946. X        .align  4
  947. Xlong_loop:
  948. X/ at this point, edi == scan+2, esi == cur_match
  949. X        movw    -3(%ebx,%edi),%ax       / ax = scan[best_len-1..best_len]
  950. X        movw     -2(%edi),%cx            / cx = scan[0..1]
  951. Xshort_loop:
  952. X        dec     %ebp                    / --chain_length
  953. X        jz      the_end
  954. X/ at this point, di == scan+2, si == cur_match,
  955. X/ ax = scan[best_len-1..best_len] and cx = scan[0..1]
  956. X        and     $ WSIZE-1, %esi
  957. X        movw     _prev(%esi,%esi),%si    / cur_match = prev[cur_match]
  958. X                                        / top word of esi is still 0
  959. X        cmp     %edx,%esi        / cur_match <= limit ?
  960. X        jbe     the_end
  961. Xdo_scan:
  962. X        cmpw    _window-1(%ebx,%esi),%ax /check match at best_len-1
  963. X        jne     short_loop
  964. X        cmpw    _window(%esi),%cx       / check min_match_length match
  965. X        jne     short_loop
  966. X
  967. X        lea     _window+2(%esi),%esi    / si = match
  968. X        mov     %edi,%eax               / ax = scan+2
  969. X        mov     $ MAX_MATCH2,%ecx       / scan for at most MAX_MATCH bytes
  970. X#ifdef unix
  971. X        repz;   cmpsw                   / loop until mismatch
  972. X#else
  973. X        repe;   cmpsw
  974. X#endif
  975. X        je      maxmatch                / match of length MAX_MATCH?
  976. Xmismatch:
  977. X        movb    -2(%edi),%cl            / mismatch on first or second byte?
  978. X        subb    -2(%esi),%cl            / cl = 0 if first bytes equal
  979. X        xchg    %edi,%eax               / edi = scan+2, eax = end of scan
  980. X        sub     %edi,%eax               / eax = len
  981. X    sub    %eax,%esi               / esi = cur_match + 2 + offset(window)
  982. X    sub    $_window+2,%esi         / esi = cur_match
  983. X        subb    $1,%cl                  / set carry if cl == 0 (cannot use DEC)
  984. X        adc     $0,%eax                 / eax = carry ? len+1 : len
  985. X        cmp     %ebx,%eax               / len > best_len ?
  986. X        jle     long_loop
  987. X        mov     %esi,_match_start       / match_start = cur_match
  988. X        mov     %eax,%ebx               / ebx = best_len = len
  989. X        cmp     $ MAX_MATCH,%eax        / len >= MAX_MATCH ?
  990. X        jl      long_loop
  991. Xthe_end:
  992. X        mov     %ebx,%eax               / result = eax = best_len
  993. X    pop     %ebx
  994. X        pop     %esi
  995. X        pop     %edi
  996. X        pop     %ebp
  997. X        ret
  998. Xmaxmatch:
  999. X        cmpsb
  1000. X        jmp     mismatch
  1001. END_OF_FILE
  1002.   if test 5410 -ne `wc -c <'match.s'`; then
  1003.     echo shar: \"'match.s'\" unpacked with wrong size!
  1004.   fi
  1005.   # end of 'match.s'
  1006. fi
  1007. if test -f 'mktime.c' -a "${1}" != "-c" ; then 
  1008.   echo shar: Will not clobber existing file \"'mktime.c'\"
  1009. else
  1010.   echo shar: Extracting \"'mktime.c'\" \(3614 characters\)
  1011.   sed "s/^X//" >'mktime.c' <<'END_OF_FILE'
  1012. X/* free mktime function
  1013. X   Copyright 1988, 1989 by David MacKenzie <djm@ai.mit.edu>
  1014. X   and Michael Haertel <mike@ai.mit.edu>
  1015. X   Unlimited distribution permitted provided this copyright notice is
  1016. X   retained and any functional modifications are prominently identified.  */
  1017. X
  1018. X/* Note: This version of mktime is ignorant of the tzfile; it does not
  1019. X   return correct results during the few hours around when daylight savings
  1020. X   time goes in to or out of effect.  It also does not allow or adjust
  1021. X   for invalid values in any of the fields, contrary to the ANSI C
  1022. X   specification. */
  1023. X
  1024. X#ifdef MKTIME_MISSING
  1025. X#include <sys/types.h>
  1026. X#include <time.h>
  1027. X
  1028. Xtime_t mkgmtime ();
  1029. X
  1030. X/* Return the equivalent in seconds past 12:00:00 a.m. Jan 1, 1970 GMT
  1031. X   of the local time and date in the exploded time structure `tm',
  1032. X   and set `tm->tm_yday', `tm->tm_wday', and `tm->tm_isdst'.
  1033. X   Return -1 if any of the other fields in `tm' has an invalid value. */
  1034. X
  1035. Xtime_t
  1036. Xmktime (tm)
  1037. X     struct tm *tm;
  1038. X{
  1039. X  struct tm save_tm;            /* Copy of contents of `*tm'. */
  1040. X  struct tm *ltm;               /* Local time. */
  1041. X  time_t then;                  /* The time to return. */
  1042. X
  1043. X  then = mkgmtime (tm);
  1044. X  if (then == -1)
  1045. X    return -1;
  1046. X
  1047. X  /* In case `tm' points to the static area used by localtime,
  1048. X     save its contents and restore them later. */
  1049. X  save_tm = *tm;
  1050. X  /* Correct for the timezone and any daylight savings time.
  1051. X     If a change to or from daylight savings time occurs between when
  1052. X     it is the time in `tm' locally and when it is that time in Greenwich,
  1053. X     the change to or from dst is ignored, but that is a rare case. */
  1054. X  then += then - mkgmtime (localtime (&then));
  1055. X
  1056. X  ltm = localtime (&then);
  1057. X  save_tm.tm_yday = ltm->tm_yday;
  1058. X  save_tm.tm_wday = ltm->tm_wday;
  1059. X  save_tm.tm_isdst = ltm->tm_isdst;
  1060. X  *tm = save_tm;
  1061. X
  1062. X  return then;
  1063. X}
  1064. X
  1065. X/* Nonzero if `y' is a leap year, else zero. */
  1066. X#define leap(y) (((y) % 4 == 0 && (y) % 100 != 0) || (y) % 400 == 0)
  1067. X
  1068. X/* Number of leap years from 1970 to `y' (not including `y' itself). */
  1069. X#define nleap(y) (((y) - 1969) / 4 - ((y) - 1901) / 100 + ((y) - 1601) / 400)
  1070. X
  1071. X/* Number of days in each month of the year. */
  1072. Xstatic char monlens[] =
  1073. X{
  1074. X  31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  1075. X};
  1076. X
  1077. X/* Return the equivalent in seconds past 12:00:00 a.m. Jan 1, 1970 GMT
  1078. X   of the Greenwich Mean time and date in the exploded time structure `tm',
  1079. X   and set `tm->tm_yday', `tm->tm_wday', and `tm->tm_isdst'.
  1080. X   Return -1 if any of the other fields in `tm' has an invalid value. */
  1081. X
  1082. Xtime_t
  1083. Xmkgmtime (tm)
  1084. X     struct tm *tm;
  1085. X{
  1086. X  int years, months, days, hours, minutes, seconds;
  1087. X
  1088. X  years = tm->tm_year + 1900;   /* year - 1900 -> year */
  1089. X  months = tm->tm_mon;          /* 0..11 */
  1090. X  days = tm->tm_mday - 1;       /* 1..31 -> 0..30 */
  1091. X  hours = tm->tm_hour;          /* 0..23 */
  1092. X  minutes = tm->tm_min;         /* 0..59 */
  1093. X  seconds = tm->tm_sec;         /* 0..61 in ANSI C. */
  1094. X
  1095. X  if (years < 1970
  1096. X      || months < 0 || months > 11
  1097. X      || days < 0
  1098. X      || days > monlens[months] + (months == 1 && leap (years)) - 1
  1099. X      || hours < 0 || hours > 23
  1100. X      || minutes < 0 || minutes > 59
  1101. X      || seconds < 0 || seconds > 61)
  1102. X  return -1;
  1103. X
  1104. X  /* Set `days' to the number of days into the year. */
  1105. X  if (months > 1 && leap (years))
  1106. X    ++days;
  1107. X  while (months-- > 0)
  1108. X    days += monlens[months];
  1109. X  tm->tm_yday = days;
  1110. X
  1111. X  /* Now set `days' to the number of days since Jan 1, 1970. */
  1112. X  days += 365 * (years - 1970) + nleap (years);
  1113. X  tm->tm_wday = (days + 4) % 7; /* Jan 1, 1970 was Thursday. */
  1114. X  tm->tm_isdst = 0;
  1115. X
  1116. X  return 86400 * days + 3600 * hours + 60 * minutes + seconds;
  1117. X}
  1118. X#endif
  1119. END_OF_FILE
  1120.   if test 3614 -ne `wc -c <'mktime.c'`; then
  1121.     echo shar: \"'mktime.c'\" unpacked with wrong size!
  1122.   fi
  1123.   # end of 'mktime.c'
  1124. fi
  1125. if test -f 'msdos/doturboc.bat.UU' -a "${1}" != "-c" ; then 
  1126.   echo shar: Will not clobber existing file \"'msdos/doturboc.bat.UU'\"
  1127. else
  1128.   echo shar: Extracting \"'msdos/doturboc.bat.UU'\" \(669 characters\)
  1129.   sed "s/^X//" >'msdos/doturboc.bat.UU' <<'END_OF_FILE'
  1130. Xbegin 666 msdos/doturboc.bat
  1131. XM.B!4:&ES(&9I;&4@:7,@82!C;VUP;&5M96YT('1O('II<"YP<FH@9F]R(%1U
  1132. XM<F)O($,@,BXP('5S97)S+@T*.B!#:&%N9V4@=&AE(&-O;7!I;&%T:6]N(&9L
  1133. XM86=S(&EF('EO=2!W:7-H("AA9&0@4TU!3$Q?345-(&]R($U%1$E535]-14T-
  1134. XM"CH@=&\@<F5D=6-E('1H92!M96UO<GD@<F5Q=6ER96UE;G1S*2P@86YD('!R
  1135. XM97-S($8Y+BXN#0HZ(%=!4DY)3D<Z('EO=2!M=7-T('5S92!T:&4@8V]M<&%C
  1136. XM="!O<B!L87)G92!M;V1E;"!I;B!T:&ES('9E<G-I;VXN#0H-"G1A<VT@+6UL
  1137. XM("U$1%E.7T%,3$]#("U$4U-?3D517T13(&UA=&-H.PT*#0HZ(%1O(&-O;7!I
  1138. XM;&4@>FEP<W!L:70@86YD('II<&YO=&4L(&1E;&5T92!A;&P@+F]B:B!F:6QE
  1139. XM<RP@861D('1H92!C;VUP:6QA=&EO;@T*.B!F;&%G(%5424PL(&%N9"!U<V4@
  1140. XM>FEP<W!L:70N<')J(&]R('II<&YO=&4N<')J('1O(')E8V]M<&EL92!E=F5R
  1141. X)>71H:6YG+@T*
  1142. Xend
  1143. END_OF_FILE
  1144.   if test 669 -ne `wc -c <'msdos/doturboc.bat.UU'`; then
  1145.     echo shar: \"'msdos/doturboc.bat.UU'\" unpacked with wrong size!
  1146.   else
  1147.     echo shar: Uudecoding \"'msdos/doturboc.bat'\" \(459 characters\)
  1148.     cat msdos/doturboc.bat.UU | uudecode
  1149.     if test 459 -ne `wc -c <'msdos/doturboc.bat'`; then
  1150.       echo shar: \"'msdos/doturboc.bat'\" uudecoded with wrong size!
  1151.     else
  1152.       rm msdos/doturboc.bat.UU
  1153.     fi
  1154.   fi
  1155.   # end of 'msdos/doturboc.bat.UU'
  1156. fi
  1157. if test -f 'msdos/makefile.bor.UU' -a "${1}" != "-c" ; then 
  1158.   echo shar: Will not clobber existing file \"'msdos/makefile.bor.UU'\"
  1159. else
  1160.   echo shar: Extracting \"'msdos/makefile.bor.UU'\" \(5393 characters\)
  1161.   sed "s/^X//" >'msdos/makefile.bor.UU' <<'END_OF_FILE'
  1162. Xbegin 666 msdos/makefile.bor
  1163. XM(R!-86ME9FEL92!F;W(@6FEP+"!::7!#;&]A:RP@6FEP3F]T92!A;F0@6FEP
  1164. XM4W!L:70@9F]R#0HC($)O<FQA;F0@*%1U<F)O*2!#*RL@,2XP(&]R(#(N,"X-
  1165. XM"B,@5V%R;FEN9SH@=&AI<R!F:6QE(&ES(&YO="!S=6ET86)L92!F;W(@5'5R
  1166. XM8F\@0R R+C N(%5S92!Z:7 N<')J(&EN<W1E860N#0H-"B,@5&\@=7-E+"!D
  1167. XM;R B;6%K92 M9FUA:V5F:6QE+F)O<B(-"@T*(R!705).24Y'.B!T:&4@<VUA
  1168. XM;&P@;6]D96P@:7,@;F]T('-U<'!O<G1E9"X@66]U(&UU<W0@=7-E('1H92!C
  1169. XM;VUP86-T(&UO9&5L+@T*(R!!9&0@+41334%,3%]-14T@;W(@+41-141)54U?
  1170. XM345-('1O($-&3$%'4R!I9B!Y;W4@=VES:"!T;R!R961U8V4@=&AE(&UE;6]R
  1171. XM>0T*(R!R97%U:7)E;65N=',N($%D9" M1$Y/7T%332!T;R!#1DQ!1U,@86YD
  1172. XM(')E;6]V92!M871C:"YO8FH@9G)O;2!/0DI)(&EF#0HC('EO=2!D;R!N;W0@
  1173. XM:&%V92!T87-M+@T*#0I#4EE05$\]#0I#3$]!2ST-"D-21DQ!1ST-"@T*(R @
  1174. XM*BHJ($9O<B!E;F-R>7!T:6]N('9E<G-I;VXL(')E;6]V92!T:&4@(R!A="!T
  1175. XM:&4@9G)O;G0@;V8@;F5X=" S(&QI;F5S("HJ*@T*(T-265!43SUC<GEP="YO
  1176. XM8FH-"B-#3$]!2SUZ:7!C;&]A:RYE>&4-"B-#4D9,04<]+41#4EE05 T*#0HC
  1177. XM("TM+2TM+2TM+2TM+2T@5'5R8F\@0RLK+"!";W)L86YD($,K*R M+2TM+2TM
  1178. XM+2TM+2TM#0I-3T1%3#TM;6,-"B-#1DQ!1U,]+7<@+7<M969F("UW+61E9B M
  1179. XM=RUS:6<@+7<M8VQN("UA("UD("U'("U/("U:("0H34]$14PI("0H0U)&3$%'
  1180. XM*0T*0T9,04=3/2U/,B M=R M=RUC;&X@)"A-3T1%3"D@)"A#4D9,04<I#0I5
  1181. XM5$E,1DQ!1U,]+4155$E,("0H0T9,04=3*2 M;PT*0T,]8F-C#0I,1#UB8V,-
  1182. XM"B,@("!R97!L86-E(&)C8R!W:71H('1C8R!F;W(@5'5R8F\@0RLK(#$N, T*
  1183. XM3$1&3$%'4STD*$U/1$5,*0T*05,]=&%S;0T*05-&3$%'4STM;6P@+70@+41$
  1184. XM64Y?04Q,3T,@+4134U].15%?1%,-"@T*(R M+2TM+2TM+2TM+2TM($-O;6UO
  1185. XM;B!D96-L87)A=&EO;G,Z#0I35%))4#UR96T-"B,@(" @268@>6]U(&1O;B=T
  1186. XM(&AA=F4@;'IE>&4L(&=E="!I="X@5&AE;B!D969I;F4Z#0HC4U1225 ];'IE
  1187. XM>&4-"B,@(" @3W(@:68@>6]U)W9E(')E9VES=&5R960@4$M,251%+"!T:&5N
  1188. XM(&1E9FEN93H-"B-35%))4#UP:VQI=&4-"B,@(" @5&AI<R!M86ME<R!A(&)I
  1189. XM9R!D:69F97)E;F-E(&EN("YE>&4@<VEZ92 H86YD('!O<W-I8FQY(&QO860@
  1190. XM=&EM92D-"@T*(R M+2TM+2TM+2TM+2TM(%5S960@8GD@:6YS=&%L;"!R=6QE
  1191. XM#0HC('-E="!"24X@=&\@=&AE(&1I<F5C=&]R>2!Y;W4@=V%N="!T;R!I;G-T
  1192. XM86QL('1H92!E>&5C=71A8FQE<R!T;PT*0DE.(#T@8SI<=71I; T*#0HC('9A
  1193. XM<FEA8FQE<PT*3T)*6B ]('II<"YO8FH@>FEP9FEL92YO8FH@>FEP=7 N;V)J
  1194. XM(&9I;&5I;RYO8FH@=71I;"YO8FH@9VQO8F%L<RYO8FH@)"A#4EE05$\I#0H-
  1195. XM"D]"2DD@/2!D969L871E+F]B:B!T<F5E<RYO8FH@8FET<RYO8FH@;6%T8V@N
  1196. XM;V)J#0HC(')E;6]V92!M871C:"YO8FH@:68@>6]U(&1O(&YO="!H879E('1A
  1197. XM<VT-"@T*3T)*52 ]('II<&9I;&5?+F]B:B!Z:7!U<%\N;V)J(&9I;&5I;U\N
  1198. XM;V)J('5T:6Q?+F]B:B!G;&]B86QS+F]B:@T*3T)*3B ]('II<&YO=&4N;V)J
  1199. XM(" D*$]"2E4I#0I/0DI#(#T@>FEP8VQO86LN;V)J("0H3T)*52D@8W)Y<'1?
  1200. XM+F]B:@T*3T)*4R ]('II<'-P;&ET+F]B:B D*$]"2E4I#0H-"EI)4%,@/2!Z
  1201. XM:7 N97AE('II<&YO=&4N97AE('II<'-P;&ET+F5X92 D*$-,3T%+*0T*#0IZ
  1202. XM:7!S.@DD*%I)4%,I#0H-"GII<"YO8FHZ"7II<"YH('II<&5R<BYH('1A:6QO
  1203. XM<BYH(')E=FES:6]N+F@@>FEP+F,-"@DD*$-#*2 M8R D*$-&3$%'4RD@)"HN
  1204. XM8PT*#0IZ:7!F:6QE+F]B:CH)>FEP+F@@>FEP97)R+F@@=&%I;&]R+F@@>FEP
  1205. XM9FEL92YC#0H))"A#0RD@+6,@)"A#1DQ!1U,I("0J+F,-"@T*>FEP=7 N;V)J
  1206. XM.@EZ:7 N:"!Z:7!E<G(N:"!T86EL;W(N:"!R979I<VEO;BYH('II<'5P+F,-
  1207. XM"@DD*$-#*2 M8R D*$-&3$%'4RD@)"HN8PT*#0IF:6QE:6\N;V)J.@EZ:7 N
  1208. XM:"!Z:7!E<G(N:"!T86EL;W(N:"!F:6QE:6\N8PT*"20H0T,I("UC("0H0T9,
  1209. XM04=3*2 D*BYC#0H-"G5T:6PN;V)J.@EZ:7 N:"!Z:7!E<G(N:"!T86EL;W(N
  1210. XM:"!U=&EL+F,-"@DD*$-#*2 M8R D*$-&3$%'4RD@)"HN8PT*#0IG;&]B86QS
  1211. XM+F]B:CH)>FEP+F@@>FEP97)R+F@@=&%I;&]R+F@@9VQO8F%L<RYC#0H))"A#
  1212. XM0RD@+6,@)"A#1DQ!1U,I("0J+F,-"@T*9&5F;&%T92YO8FHZ"7II<"YH('II
  1213. XM<&5R<BYH('1A:6QO<BYH(&1E9FQA=&4N8PT*"20H0T,I("UC("0H0T9,04=3
  1214. XM*2 D*BYC#0H-"G1R965S+F]B:CH)>FEP+F@@>FEP97)R+F@@=&%I;&]R+F@@
  1215. XM=')E97,N8PT*"20H0T,I("UC("0H0T9,04=3*2 D*BYC#0H-"F)I=',N;V)J
  1216. XM.@EZ:7 N:"!Z:7!E<G(N:"!T86EL;W(N:"!B:71S+F,-"@DD*$-#*2 M8R D
  1217. XM*$-&3$%'4RD@)"HN8PT*#0IC<GEP="YO8FHZ"7II<"YH('II<&5R<BYH('1A
  1218. XM:6QO<BYH(&-R>7!T+F,-"@DD*$-#*2 M8R D*$-&3$%'4RD@)"HN8PT*#0IZ
  1219. XM:7!C;&]A:RYO8FHZ"7II<"YH('II<&5R<BYH('1A:6QO<BYH(')E=FES:6]N
  1220. XM+F@@>FEP8VQO86LN8PT*"20H0T,I("UC("0H0T9,04=3*2 D*BYC#0H-"GII
  1221. XM<&YO=&4N;V)J.@EZ:7 N:"!Z:7!E<G(N:"!T86EL;W(N:"!R979I<VEO;BYH
  1222. XM('II<&YO=&4N8PT*"20H0T,I("UC("0H0T9,04=3*2 D*BYC#0H-"GII<'-P
  1223. XM;&ET+F]B:CH)>FEP<W!L:70N8R!Z:7 N:"!Z:7!E<G(N:"!T86EL;W(N:"!R
  1224. XM979I<VEO;BYH#0H))"A#0RD@+6,@)"A#1DQ!1U,I("0J+F,-"@T*>FEP9FEL
  1225. XM95\N;V)J.@EZ:7!F:6QE+F,@>FEP+F@@>FEP97)R+F@@=&%I;&]R+F@-"@DD
  1226. XM*$-#*2 M8R D*%5424Q&3$%'4RDD*B!Z:7!F:6QE+F,-"@T*>FEP=7!?+F]B
  1227. XM:CH)>FEP=7 N8R!Z:7 N:"!Z:7!E<G(N:"!T86EL;W(N: T*"20H0T,I("UC
  1228. XM("0H551)3$9,04=3*20J('II<'5P+F,-"@T*9FEL96EO7RYO8FHZ"69I;&5I
  1229. XM;RYC('II<"YH('II<&5R<BYH('1A:6QO<BYH#0H))"A#0RD@+6,@)"A55$E,
  1230. XM1DQ!1U,I)"H@9FEL96EO+F,-"@T*=71I;%\N;V)J.@EU=&EL+F,@>FEP+F@@
  1231. XM>FEP97)R+F@@=&%I;&]R+F@-"@DD*$-#*2 M8R D*%5424Q&3$%'4RDD*B!F
  1232. XM:6QE:6\N8PT*#0IC<GEP=%\N;V)J.@EC<GEP="YC('II<"YH('II<&5R<BYH
  1233. XM('1A:6QO<BYH#0H))"A#0RD@+6,@)"A55$E,1DQ!1U,I)"H@8W)Y<'0N8PT*
  1234. XM#0IM871C:"YO8FHZ"6UA=&-H+F%S;0T*"20H05,I("0H05-&3$%'4RD@;6%T
  1235. XM8V@[#0H-"B,@=V4@;75S="!C=70@=&AE(&-O;6UA;F0@;&EN92!T;R!F:70@
  1236. XM:6X@=&AE($U3+T1/4R Q,C@@8GET92!L:6UI=#H-"GII<"YE>&4Z("0H3T)*
  1237. XM6BD@)"A/0DI)*0T*"65C:&\@)"A/0DI:*2 ^('II<"YR<W -"@EE8VAO("0H
  1238. XM3T)*22D@/CX@>FEP+G)S< T*"20H3$0I("0H3$1&3$%'4RD@0'II<"YR<W -
  1239. XM"@ED96P@>FEP+G)S< T*"20H4U1225 I('II<"YE>&4-"@T*>FEP8VQO86LN
  1240. XM97AE.B D*$]"2D,I#0H)96-H;R D*$]"2D,I(#X@>FEP8RYR<W -"@DD*$Q$
  1241. XM*2 D*$Q$1DQ!1U,I($!Z:7!C+G)S< T*"61E;"!Z:7!C+G)S< T*"20H4U12
  1242. XM25 I('II<&-L;V%K+F5X90T*#0IZ:7!N;W1E+F5X93H@)"A/0DI.*0T*"65C
  1243. XM:&\@)"A/0DI.*2 ^('II<&XN<G-P#0H))"A,1"D@)"A,1$9,04=3*2! >FEP
  1244. XM;BYR<W -"@ED96P@>FEP;BYR<W -"@DD*%-44DE0*2!Z:7!N;W1E+F5X90T*
  1245. XM#0IZ:7!S<&QI="YE>&4Z("0H3T)*4RD-"@EE8VAO("0H3T)*4RD@/B!Z:7!S
  1246. XM+G)S< T*"20H3$0I("0H3$1&3$%'4RD@0'II<',N<G-P#0H)9&5L('II<',N
  1247. XM<G-P#0H))"A35%))4"D@>FEP<W!L:70N97AE#0H-"FEN<W1A;&PZ"20H6DE0
  1248. XM4RD-"@EC;W!Y("]B("HN97AE("0H0DE.*0T*#0IC;&5A;CH-"@ED96P@*BYO
  1249. X08FH-"@ED96P@*BYE>&4-"GAE
  1250. Xend
  1251. END_OF_FILE
  1252.   if test 5393 -ne `wc -c <'msdos/makefile.bor.UU'`; then
  1253.     echo shar: \"'msdos/makefile.bor.UU'\" unpacked with wrong size!
  1254.   else
  1255.     echo shar: Uudecoding \"'msdos/makefile.bor'\" \(3886 characters\)
  1256.     cat msdos/makefile.bor.UU | uudecode
  1257.     if test 3886 -ne `wc -c <'msdos/makefile.bor'`; then
  1258.       echo shar: \"'msdos/makefile.bor'\" uudecoded with wrong size!
  1259.     else
  1260.       rm msdos/makefile.bor.UU
  1261.     fi
  1262.   fi
  1263.   # end of 'msdos/makefile.bor.UU'
  1264. fi
  1265. if test -f 'nt/makefile.nt.UU' -a "${1}" != "-c" ; then 
  1266.   echo shar: Will not clobber existing file \"'nt/makefile.nt.UU'\"
  1267. else
  1268.   echo shar: Extracting \"'nt/makefile.nt.UU'\" \(2631 characters\)
  1269.   sed "s/^X//" >'nt/makefile.nt.UU' <<'END_OF_FILE'
  1270. Xbegin 666 nt/makefile.nt
  1271. XM(R!.34%+12!-86ME9FEL90T*(R!$+D9E:6YL96EB(#<O.3(@="UD879E9F5 
  1272. XM;6EC<F]S;V9T+F-O;0T*(R!7:6YD;W=S($Y4#0H-"B,@3FUA:V4@;6%C<F]S
  1273. XM(&9O<B!B=6EL9&EN9R!7:6YD;W=S($Y4(&%P<&QI8V%T:6]N<PT*(6EN8VQU
  1274. XM9&4@/&YT=VEN,S(N;6%K/@T*#0I04D]*/7II< T*3T)*/4))5%,N;V)J($-2
  1275. XM65!4+F]B:B!$149,051%+F]B:B!&24Q%24\N;V)J($=,3T)!3%,N;V)J($U+
  1276. XM5$E-12YO8FH@5%)%15,N;V)J(%5424PN;V)J(%I)4"YO8FH@6DE01DE,12YO
  1277. XM8FH@6DE055 N;V)J#0I,24)303UC;VUD;&<S,BYL:6(@9V1I,S(N;&EB(&ME
  1278. XM<FYE;#,R+FQI8B!L:6)C+FQI8B!L:6)C>#,R+FQI8B!L>C,R+FQI8B!M<'(N
  1279. XM;&EB(&YE=&%P:3,R+FQI8B!N=&1L;"YL:6(@#0I,24)30CUW:6YS=')M+FQI
  1280. XM8B!R<&-N9'(N;&EB(')P8VYS-"YL:6(@<G!C<G0T+FQI8B!S:&5L;#,R+FQI
  1281. XM8B!U<V5R,S(N;&EB('5S97)R=&PN;&EB#0I,24)3/20H3$E"4T$I("0H3$E"
  1282. XM4T(I#0IC=F%R<STD*&-V87)S*2 M1$U31$]3("U$0U)94%0@+41.3U]!4TT-
  1283. XM"@T*86QL(#H@>FEP+F5X90T*#0I"2513+F]B:B Z($))5%,N8PT*(" @("0H
  1284. XM8V,I("0H8V9L86=S*2 D*&-V87)S*2!"2513+F,-"B @(" D*&-V=&]B:BD@
  1285. XM0DE44RYO8FH-"@T*0U)94%0N;V)J(#H@0U)94%0N8PT*(" @("0H8V,I("0H
  1286. XM8V9L86=S*2 D*&-V87)S*2!#4EE05"YC#0H@(" @)"AC=G1O8FHI($-265!4
  1287. XM+F]B:@T*#0I$149,051%+F]B:B Z($1%1DQ!5$4N8PT*(" @("0H8V,I("0H
  1288. XM8V9L86=S*2 D*&-V87)S*2!$149,051%+F,-"B @(" D*&-V=&]B:BD@1$5&
  1289. XM3$%412YO8FH-"@T*1DE,14E/+F]B:B Z($9)3$5)3RYC#0H@(" @)"AC8RD@
  1290. XM)"AC9FQA9W,I("0H8W9A<G,I($9)3$5)3RYC#0H@(" @)"AC=G1O8FHI($9)
  1291. XM3$5)3RYO8FH-"@T*1TQ/0D%,4RYO8FH@.B!'3$]"04Q3+F,-"B @(" D*&-C
  1292. XM*2 D*&-F;&%G<RD@)"AC=F%R<RD@1TQ/0D%,4RYC#0H@(" @)"AC=G1O8FHI
  1293. XM($=,3T)!3%,N;V)J#0H-"DU+5$E-12YO8FH@.B!-2U1)344N8PT*(" @("0H
  1294. XM8V,I("0H8V9L86=S*2 D*&-V87)S*2!-2U1)344N8PT*(" @("0H8W9T;V)J
  1295. XM*2!-2U1)344N;V)J#0H-"E121453+F]B:B Z(%121453+F,-"B @(" D*&-C
  1296. XM*2 D*&-F;&%G<RD@)"AC=F%R<RD@5%)%15,N8PT*(" @("0H8W9T;V)J*2!4
  1297. XM4D5%4RYO8FH-"@T*551)3"YO8FH@.B!55$E,+F,-"B @(" D*&-C*2 D*&-F
  1298. XM;&%G<RD@)"AC=F%R<RD@551)3"YC#0H@(" @)"AC=G1O8FHI(%5424PN;V)J
  1299. XM#0H-"EI)4"YO8FH@.B!:25 N8PT*(" @("0H8V,I("0H8V9L86=S*2 D*&-V
  1300. XM87)S*2!:25 N8PT*(" @("0H8W9T;V)J*2!:25 N;V)J#0H-"EI)4$-,3T%+
  1301. XM+F]B:B Z(%I)4$-,3T%++F,-"B @(" D*&-C*2 D*&-F;&%G<RD@)"AC=F%R
  1302. XM<RD@6DE00TQ/04LN8PT*(" @("0H8W9T;V)J*2!:25!#3$]!2RYO8FH-"@T*
  1303. XM6DE01DE,12YO8FH@.B!:25!&24Q%+F,-"B @(" D*&-C*2 D*&-F;&%G<RD@
  1304. XM)"AC=F%R<RD@6DE01DE,12YC#0H@(" @)"AC=G1O8FHI(%I)4$9)3$4N;V)J
  1305. XM#0H-"EI)4$Y/5$4N;V)J(#H@6DE03D]412YC#0H@(" @)"AC8RD@)"AC9FQA
  1306. XM9W,I("0H8W9A<G,I(%I)4$Y/5$4N8PT*(" @("0H8W9T;V)J*2!:25!.3U1%
  1307. XM+F]B:@T*#0I:25!34$Q)5"YO8FH@.B!:25!34$Q)5"YC#0H@(" @)"AC8RD@
  1308. XM)"AC9FQA9W,I("0H8W9A<G,I(%I)4%-03$E4+F,-"B @(" D*&-V=&]B:BD@
  1309. XM6DE04U!,250N;V)J#0H-"EI)4%50+F]B:B Z(%I)4%50+F,-"B @(" D*&-C
  1310. XM*2 D*&-F;&%G<RD@)"AC=F%R<RD@6DE055 N8PT*(" @("0H8W9T;V)J*2!:
  1311. XM25!54"YO8FH-"@T*>FEP+F5X92 Z("0H3T)**0T*(" @("0H;&EN:RD@)"AC
  1312. XJ;VYF;&%G<RD@+6]U=#HD*%!23THI+F5X92 D*$]"2BD@)"A,24)3*0T*
  1313. Xend
  1314. END_OF_FILE
  1315.  if test 2631 -ne `wc -c <'nt/makefile.nt.UU'`; then
  1316.     echo shar: \"'nt/makefile.nt.UU'\" unpacked with wrong size!
  1317.   else
  1318.     echo shar: Uudecoding \"'nt/makefile.nt'\" \(1887 characters\)
  1319.     cat nt/makefile.nt.UU | uudecode
  1320.     if test 1887 -ne `wc -c <'nt/makefile.nt'`; then
  1321.       echo shar: \"'nt/makefile.nt'\" uudecoded with wrong size!
  1322.     else
  1323.       rm nt/makefile.nt.UU
  1324.     fi
  1325.   fi
  1326.   # end of 'nt/makefile.nt.UU'
  1327. fi
  1328. if test -f 'os2/os2zip.h.UU' -a "${1}" != "-c" ; then 
  1329.   echo shar: Will not clobber existing file \"'os2/os2zip.h.UU'\"
  1330. else
  1331.   echo shar: Extracting \"'os2/os2zip.h.UU'\" \(3399 characters\)
  1332.   sed "s/^X//" >'os2/os2zip.h.UU' <<'END_OF_FILE'
  1333. Xbegin 666 os2/os2zip.h
  1334. XM+RH-"B J($ H(RD@9&ER+F@@,2XT(#@W+S$Q+S V(" @4'5B;&EC($1O;6%I
  1335. XM;BX-"B J#0H@*B @02!P=6)L:6,@9&]M86EN(&EM<&QE;65N=&%T:6]N(&]F
  1336. XM($)31"!D:7)E8W1O<GD@<F]U=&EN97,@9F]R#0H@*B @35,M1$]3+B @5W)I
  1337. XM='1E;B!B>2!-:6-H865L(%)E;F1E;&P@*'MU=6YE="QU=&%I?6UI8VAA96Q 
  1338. XM9V%R9FEE;&0I+ T*("H@($%U9W5S=" Q.3@W#0H@*@T*("H@($5N:&%N8V5D
  1339. XM(&%N9"!P;W)T960@=&\@3U,O,B!B>2!+86D@57=E(%)O;6UE;#L@861D960@
  1340. XM<V-A;F1I<B@I('!R;W1O='EP90T*("H@($1E8V5M8F5R(#$Y.#DL($9E8G)U
  1341. XM87)Y(#$Y.3 -"B J("!#:&%N9V4@;V8@34%84$%42$Q%3B!F;W(@2%!&4RP@
  1342. XM3V-T;V)E<B Q.3DP#0H@*B\-"@T*#0HC9&5F:6YE($U!6$Y!34Q%3B @,C4V
  1343. XM#0HC9&5F:6YE($U!6%!!5$A,14X@,C4V#0H-"B-D969I;F4@05]23TY,62 @
  1344. XM(" P># Q#0HC9&5F:6YE($%?2$E$1$5.(" @,'@P,@T*(V1E9FEN92!!7U-9
  1345. XM4U1%32 @(#!X,#0-"B-D969I;F4@05],04)%3" @(" P># X#0HC9&5F:6YE
  1346. XM($%?1$E2(" @(" @,'@Q, T*(V1E9FEN92!!7T%20TA)5D4@(#!X,C -"@T*
  1347. XM#0IS=')U8W0@9&ER96-T#0I[#0H@(&EN;U]T(" @(&1?:6YO.R @(" @(" @
  1348. XM(" @(" @(" @(" O*B!A(&)I="!O9B!A(&9A<F-E("HO#0H@(&EN=" @(" @
  1349. XM(&1?<F5C;&5N.R @(" @(" @(" @(" @(" O*B!M;W)E(&9A<F-E("HO#0H@
  1350. XM(&EN=" @(" @(&1?;F%M;&5N.R @(" @(" @(" @(" @(" O*B!L96YG=&@@
  1351. XM;V8@9%]N86UE("HO#0H@(&-H87(@(" @(&1?;F%M95M-05A.04U,14X@*R Q
  1352. XM73L@(" O*B!N=6QL('1E<FUI;F%T960@*B\-"B @+RH@;F]N<W1A;F1A<F0@
  1353. XM9FEE;&1S("HO#0H@(&QO;F<@(" @(&1?<VEZ93L@(" @(" @(" @(" @(" @
  1354. XM(" O*B!S:7IE(&EN(&)Y=&5S("HO#0H@('5N<VEG;F5D(&1?;6]D93L@(" @
  1355. XM(" @(" @(" @(" @(" O*B!$3U,@;W(@3U,O,B!F:6QE(&%T=')I8G5T97,@
  1356. XM*B\-"B @=6YS:6=N960@9%]T:6UE.PT*("!U;G-I9VYE9"!D7V1A=&4[#0I]
  1357. XM.PT*#0HO*B!4:&4@9FEE;&1S(&1?<VEZ92!A;F0@9%]M;V1E(&%R92!E>'1E
  1358. XM;G-I;VYS(&)Y(&UE("A+86D@57=E(%)O;6UE;"DN#0H@*B!4:&4@9FEN9%]F
  1359. XM:7)S="!A;F0@9FEN9%]N97AT(&-A;&QS(&1E;&EV97(@=&AI<R!D871A('=I
  1360. XM=&AO=70@86YY(&5X=')A(&-O<W0N#0H@*B!)9B!T:&ES(&1A=&$@:7,@;F5E
  1361. XM9&5D+"!T:&5S92!F:65L9',@<V%V92!A(&QO="!O9B!E>'1R82!C86QL<R!T
  1362. XM;R!S=&%T*"D-"B J("AE86-H('-T870H*2!A9V%I;B!P97)F;W)M<R!A(&9I
  1363. XM;F1?9FER<W0@8V%L;" A*2X-"B J+PT*#0IS=')U8W0@7V1I<F-O;G1E;G1S
  1364. XM#0I[#0H@(&-H87(@*E]D7V5N=')Y.PT*("!L;VYG(%]D7W-I>F4[#0H@('5N
  1365. XM<VEG;F5D(%]D7VUO9&4L(%]D7W1I;64L(%]D7V1A=&4[#0H@('-T<G5C="!?
  1366. XM9&ER8V]N=&5N=',@*E]D7VYE>'0[#0I].PT*#0IT>7!E9&5F('-T<G5C="!?
  1367. XM9&ER9&5S8PT*>PT*("!I;G0@(&1D7VED.R @(" @(" @(" @(" @(" @(" O
  1368. XM*B!U;FEQ=65L>2!I9&5N=&EF>2!E86-H(&]P96X@9&ER96-T;W)Y("HO#0H@
  1369. XM(&QO;F<@9&1?;&]C.R @(" @(" @(" @(" @(" @("\J('=H97)E('=E(&%R
  1370. XM92!I;B!D:7)E8W1O<GD@96YT<GD@:7,@=&AI<R J+PT*("!S=')U8W0@7V1I
  1371. XM<F-O;G1E;G1S("ID9%]C;VYT96YT<SL@(" O*B!P;VEN=&5R('1O(&-O;G1E
  1372. XM;G1S(&]F(&1I<B J+PT*("!S=')U8W0@7V1I<F-O;G1E;G1S("ID9%]C<#L@
  1373. XM(" @(" @(" O*B!P;VEN=&5R('1O(&-U<G)E;G0@<&]S:71I;VX@*B\-"GT-
  1374. XM"D1)4CL-"@T*#0IE>'1E<FX@1$E2("IO<&5N9&ER*&-H87(@*BD[#0IE>'1E
  1375. XM<FX@<W1R=6-T(&1I<F5C=" J<F5A9&1I<BA$25(@*BD[#0IE>'1E<FX@=F]I
  1376. XM9"!S965K9&ER*$1)4B J+"!L;VYG*3L-"F5X=&5R;B!L;VYG('1E;&QD:7(H
  1377. XM1$E2("HI.PT*97AT97)N('9O:60@8VQO<V5D:7(H1$E2("HI.PT*(V1E9FEN
  1378. XM92!R97=I;F1D:7(H9&ER<"D@<V5E:V1I<BAD:7)P+" P3"D-"@T*:6YT($=E
  1379. XM=$9I;&5-;V1E*&-H87(@*FYA;64I.PT*;&]N9R!'971&:6QE5&EM92AC:&%R
  1380. XM("IN86UE*3L-"G9O:60@4V5T1FEL951I;64H8VAA<B J<&%T:"P@;&]N9R!S
  1381. XM=&%M<"D[#0H-"FEN="!)<T9I;&5.86UE5F%L:60H8VAA<B J;F%M92D[#0II
  1382. XM;G0@27-&:6QE4WES=&5M1D%4*&-H87(@*F1I<BD[#0IV;VED($-H86YG94YA
  1383. XM;65&;W)&050H8VAA<B J;F%M92D[#0H-"F-H87(@*D=E=$QO;F=.86UE14$H
  1384. XM8VAA<B J;F%M92D[#0IC:&%R("I'971,;VYG4&%T:$5!*&-H87(@*FYA;64I
  1385. XM.PT*=F]I9"!'971%07,H8VAA<B J;F%M92P@8VAA<B J*F)U9G!T<BP@=6YS
  1386. XM:6=N960@*G-I>F4L#0H@(" @(" @(" @(" @(" @(" @(" @("!C:&%R("HJ
  1387. XM8V)U9G!T<BP@=6YS:6=N960@*F-S:7IE*3L-"@T*8VAA<B J4W1R:6YG3&]W
  1388. X-97(H8VAA<B J*3L-"F=N
  1389. Xend
  1390. END_OF_FILE
  1391.  if test 3399 -ne `wc -c <'os2/os2zip.h.UU'`; then
  1392.     echo shar: \"'os2/os2zip.h.UU'\" unpacked with wrong size!
  1393.   else
  1394.     echo shar: Uudecoding \"'os2/os2zip.h'\" \(2443 characters\)
  1395.     cat os2/os2zip.h.UU | uudecode
  1396.     if test 2443 -ne `wc -c <'os2/os2zip.h'`; then
  1397.       echo shar: \"'os2/os2zip.h'\" uudecoded with wrong size!
  1398.     else
  1399.       rm os2/os2zip.h.UU
  1400.     fi
  1401.   fi
  1402.   # end of 'os2/os2zip.h.UU'
  1403. fi
  1404. if test -f 'ziperr.h' -a "${1}" != "-c" ; then 
  1405.   echo shar: Will not clobber existing file \"'ziperr.h'\"
  1406. else
  1407.   echo shar: Extracting \"'ziperr.h'\" \(2586 characters\)
  1408.   sed "s/^X//" >'ziperr.h' <<'END_OF_FILE'
  1409. X/*
  1410. X
  1411. X Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  1412. X Kai Uwe Rommel and Igor Mandrichenko.
  1413. X Permission is granted to any individual or institution to use, copy, or
  1414. X redistribute this software so long as all of the original files are included
  1415. X unmodified, that it is not sold for profit, and that this copyright notice
  1416. X is retained.
  1417. X
  1418. X*/
  1419. X
  1420. X/*
  1421. X *  ziperr.h by Mark Adler.
  1422. X */
  1423. X
  1424. X/* Error return values.  The values 0..4 and 12..18 follow the conventions
  1425. X   of PKZIP.   The values 4..10 are all assigned to "insufficient memory"
  1426. X   by PKZIP, so the codes 5..10 are used here for other purposes. */
  1427. X#define ZE_MISS         -1      /* used by procname(), zipbare() */
  1428. X#define ZE_OK           0       /* success */
  1429. X#define ZE_EOF          2       /* unexpected end of zip file */
  1430. X#define ZE_FORM         3       /* zip file structure error */
  1431. X#define ZE_MEM          4       /* out of memory */
  1432. X#define ZE_LOGIC        5       /* internal logic error */
  1433. X#define ZE_BIG          6       /* entry too large to split */
  1434. X#define ZE_NOTE         7       /* invalid comment format */
  1435. X#define ZE_ABORT        9       /* user interrupt or termination */
  1436. X#define ZE_TEMP         10      /* error using a temp file */
  1437. X#define ZE_READ         11      /* read or seek error */
  1438. X#define ZE_NONE         12      /* nothing to do */
  1439. X#define ZE_NAME         13      /* missing or empty zip file */
  1440. X#define ZE_WRITE        14      /* error writing to a file */
  1441. X#define ZE_CREAT        15      /* couldn't open to write */
  1442. X#define ZE_PARMS        16      /* bad command line */
  1443. X#define ZE_OPEN         18      /* could not open a specified file to read */
  1444. X/* Macro to determine whether to call perror() or not */
  1445. X#define PERR(e) (e==ZE_READ||e==ZE_WRITE||e==ZE_CREAT||e==ZE_TEMP||e==ZE_OPEN)
  1446. X
  1447. X#ifdef GLOBALS
  1448. X/* Error messages for the err() function in the zip programs */
  1449. Xchar *errors[] = {
  1450. X/*  1 */  "",
  1451. X/*  2 */  "Unexpected end of zip file",
  1452. X/*  3 */  "Zip file structure invalid",
  1453. X/*  4 */  "Out of memory",
  1454. X/*  5 */  "Internal logic error",
  1455. X/*  6 */  "Entry too big to split",
  1456. X/*  7 */  "Invalid comment format",
  1457. X/*  8 */  "",
  1458. X/*  9 */  "Interrupted",
  1459. X/* 10 */  "Temporary file failure",
  1460. X/* 11 */  "Input file read failure",
  1461. X/* 12 */  "Nothing to do!",
  1462. X/* 13 */  "Missing or empty zip file",
  1463. X/* 14 */  "Output file write failure",
  1464. X/* 15 */  "Could not create output file",
  1465. X/* 16 */  "Invalid command arguments",
  1466. X/* 17 */  "",
  1467. X/* 18 */  "File not found or no read permission",
  1468. X};
  1469. X#else /* !GLOBALS */
  1470. Xextern char *errors[];          /* Error messages for err() */
  1471. X#endif /* ?GLOBALS */
  1472. END_OF_FILE
  1473.   if test 2586 -ne `wc -c <'ziperr.h'`; then
  1474.     echo shar: \"'ziperr.h'\" unpacked with wrong size!
  1475.   fi
  1476.   # end of 'ziperr.h'
  1477. fi
  1478. echo shar: End of archive 10 \(of 11\).
  1479. cp /dev/null ark10isdone
  1480. MISSING=""
  1481. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  1482.     if test ! -f ark${I}isdone ; then
  1483.     MISSING="${MISSING} ${I}"
  1484.     fi
  1485. done
  1486. if test "${MISSING}" = "" ; then
  1487.     echo You have unpacked all 11 archives.
  1488.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1489. else
  1490.     echo You still must unpack the following archives:
  1491.     echo "        " ${MISSING}
  1492. fi
  1493. exit 0
  1494. exit 0 # Just in case...
  1495.