home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume31 / zip19 / part10 < prev    next >
Encoding:
Text File  |  1992-08-22  |  61.8 KB  |  1,494 lines

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