Tremulous Forum

General => General Discussion => Topic started by: apollyon on July 30, 2006, 06:31:02 AM

Title: I Need Help!!!!!
Post by: apollyon on July 30, 2006, 06:31:02 AM
I have been trying to get new maps(like Pulse) for a while now.
And in oreder to get them I have to put them in my Tremulous Base folder... exc. But every time I try and put them in the Base folder it says .....Tremulous-20060704 can not be modifyed.
So i read the copying page where it tells me to go into src then qcommon then unzip.c. So i do that and it comes up a buch of codes.

Can someone tell me which code or any code to type in to unzip the files so I can Modify them.(I have Mac OS X)
Please help me!!!
Title: Re: I Need Help!!!!!
Post by: Yawn on July 30, 2006, 07:40:41 AM
Quote from: apollyon(I have Mac OS X)

You just gave youself the reason behind your problems.

-Y
Title: I Need Help!!!!!
Post by: kevlarman on July 30, 2006, 06:07:58 PM
see if you have the folder $HOME/Library/Application Support/Tremulous/base
where $HOME is your home folder, that is where the maps should go (though i don't have a mac right now, so i can't test this)
Title: Re: I Need Help!!!!!
Post by: PIE on July 30, 2006, 06:18:33 PM
Quote from: apollyon
I have to put them in my Tremulous Base folder
Think he's got that part, unless he means the tremulous folder instead of the base folder in the tremulous folder.. though its strange its saying it wants to modify some tremulous 022933292 file.... but I don't have mac/don't ever use mac so i don't know... BUUUUt
Quote from: apollyon
So i do that and it comes up a buch of codes.
I might still be able to help if you post some of these codes.
also... your map files are .pk3 files right?...
Title: I Need Help!!!!!
Post by: apollyon on July 30, 2006, 10:02:23 PM
Ya all are pk3 files. I just got a mac and dont know what to do.
Its so confusing. Here is the hole fille where it says the code is but there is
Alot!!

/*****************************************************************************
* name:      unzip.c
*
* desc:      IO on .zip files using portions of zlib
*
* $Archive: /MissionPack/code/qcommon/unzip.c $
*
*****************************************************************************/

#include "../client/client.h"
#include "unzip.h"

/* unzip.h -- IO for uncompress .zip files using zlib
  Version 0.15 beta, Mar 19th, 1998,

  Copyright (C) 1998 Gilles Vollant

  This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g
    WinZip, InfoZip tools and compatible.
  Encryption and multi volume ZipFile (span) are not supported.
  Old compressions used by old PKZip 1.x are not supported

  THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE
  CAN CHANGE IN FUTURE VERSION !!
  I WAIT FEEDBACK at mail info@winimage.com
  Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution

  Condition of use and distribution are the same than zlib :

 This software is provided 'as-is', without any express or implied
 warranty.  In no event will the authors be held liable for any damages
 arising from the use of this software.

 Permission is granted to anyone to use this software for any purpose,
 including commercial applications, and to alter it and redistribute it
 freely, subject to the following restrictions:

 1. The origin of this software must not be misrepresented; you must not
    claim that you wrote the original software. If you use this software
    in a product, an acknowledgment in the product documentation would be
    appreciated but is not required.
 2. Altered source versions must be plainly marked as such, and must not be
    misrepresented as being the original software.
 3. This notice may not be removed or altered from any source distribution.


*/
/* for more info about .ZIP format, see
     ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip
  PkWare has also a specification at :
     ftp://ftp.pkware.com/probdesc.zip */

/* zlib.h -- interface of the 'zlib' general purpose compression library
 version 1.1.3, July 9th, 1998

 Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler

 This software is provided 'as-is', without any express or implied
 warranty.  In no event will the authors be held liable for any damages
 arising from the use of this software.

 Permission is granted to anyone to use this software for any purpose,
 including commercial applications, and to alter it and redistribute it
 freely, subject to the following restrictions:

 1. The origin of this software must not be misrepresented; you must not
    claim that you wrote the original software. If you use this software
    in a product, an acknowledgment in the product documentation would be
    appreciated but is not required.
 2. Altered source versions must be plainly marked as such, and must not be
    misrepresented as being the original software.
 3. This notice may not be removed or altered from any source distribution.

 Jean-loup Gailly        Mark Adler
 jloup@gzip.org          madler@alumni.caltech.edu


 The data format used by the zlib library is described by RFCs (Request for
 Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
 (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
*/

/* zconf.h -- configuration of the zlib compression library
* Copyright (C) 1995-1998 Jean-loup Gailly.
* For conditions of distribution and use, see copyright notice in zlib.h
*/


#ifndef _ZCONF_H
#define _ZCONF_H

/* Maximum value for memLevel in deflateInit2 */
#ifndef MAX_MEM_LEVEL
#  ifdef MAXSEG_64K
#    define MAX_MEM_LEVEL 8
#  else
#    define MAX_MEM_LEVEL 9
#  endif
#endif

/* Maximum value for windowBits in deflateInit2 and inflateInit2.
* WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
* created by gzip. (Files created by minigzip can still be extracted by
* gzip.)
*/
#ifndef MAX_WBITS
#  define MAX_WBITS   15 /* 32K LZ77 window */
#endif

/* The memory requirements for deflate are (in bytes):
           (1 << (windowBits+2)) +  (1 << (memLevel+9))
that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
plus a few kilobytes for small objects. For example, if you want to reduce
the default memory requirements from 256K to 128K, compile with
    make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
Of course this will generally degrade compression (there's no free lunch).

  The memory requirements for inflate are (in bytes) 1 << windowBits
that is, 32K for windowBits=15 (default value) plus a few kilobytes
for small objects.
*/

                       /* Type declarations */

#ifndef OF /* function prototypes */
#define OF(args)  args
#endif

typedef unsigned char  Byte;  /* 8 bits */
typedef unsigned int   uInt;  /* 16 bits or more */
typedef unsigned long  uLong; /* 32 bits or more */
typedef Byte    *voidp;

#ifndef SEEK_SET
#  define SEEK_SET        0       /* Seek from beginning of file.  */
#  define SEEK_CUR        1       /* Seek from current position.  */
#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
#endif

#endif /* _ZCONF_H */

#define ZLIB_VERSION "1.1.3"

/*
    The 'zlib' compression library provides in-memory compression and
 decompression functions, including integrity checks of the uncompressed
 data.  This version of the library supports only one compression method
 (deflation) but other algorithms will be added later and will have the same
 stream interface.

    Compression can be done in a single step if the buffers are large
 enough (for example if an input file is mmap'ed), or can be done by
 repeated calls of the compression function.  In the latter case, the
 application must provide more input and/or consume the output
 (providing more output space) before each call.

    The library also supports reading and writing files in gzip (.gz) format
 with an interface similar to that of stdio.

    The library does not install any signal handler. The decoder checks
 the consistency of the compressed data, so the library should never
 crash even in case of corrupted input.
*/

/*
  The application must update next_in and avail_in when avail_in has
  dropped to zero. It must update next_out and avail_out when avail_out
  has dropped to zero. The application must initialize zalloc, zfree and
  opaque before calling the init function. All other fields are set by the
  compression library and must not be updated by the application.

  The opaque value provided by the application will be passed as the first
  parameter for calls of zalloc and zfree. This can be useful for custom
  memory management. The compression library attaches no meaning to the
  opaque value.

  zalloc must return Z_NULL if there is not enough memory for the object.
  If zlib is used in a multi-threaded application, zalloc and zfree must be
  thread safe.

  On 16-bit systems, the functions zalloc and zfree must be able to allocate
  exactly 65536 bytes, but will not be required to allocate more than this
  if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
  pointers returned by zalloc for objects of exactly 65536 bytes *must*
  have their offset normalized to zero. The default allocation function
  provided by this library ensures this (see zutil.c). To reduce memory
  requirements and avoid any allocation of 64K objects, at the expense of
  compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).

  The fields total_in and total_out can be used for statistics or
  progress reports. After compression, total_in holds the total size of
  the uncompressed data and may be saved for use in the decompressor
  (particularly if the decompressor wants to decompress everything in
  a single step).
*/

                       /* constants */

#define Z_NO_FLUSH      0
#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
#define Z_SYNC_FLUSH    2
#define Z_FULL_FLUSH    3
#define Z_FINISH        4
/* Allowed flush values; see deflate() below for details */

#define Z_OK            0
#define Z_STREAM_END    1
#define Z_NEED_DICT     2
#define Z_ERRNO        (-1)
#define Z_STREAM_ERROR (-2)
#define Z_DATA_ERROR   (-3)
#define Z_MEM_ERROR    (-4)
#define Z_BUF_ERROR    (-5)
#define Z_VERSION_ERROR (-6)
/* Return codes for the compression/decompression functions. Negative
* values are errors, positive values are used for special but normal events.
*/

#define Z_NO_COMPRESSION         0
#define Z_BEST_SPEED             1
#define Z_BEST_COMPRESSION       9
#define Z_DEFAULT_COMPRESSION  (-1)
/* compression levels */

#define Z_FILTERED            1
#define Z_HUFFMAN_ONLY        2
#define Z_DEFAULT_STRATEGY    0
/* compression strategy; see deflateInit2() below for details */

#define Z_BINARY   0
#define Z_ASCII    1
#define Z_UNKNOWN  2
/* Possible values of the data_type field */

#define Z_DEFLATED   8
/* The deflate compression method (the only one supported in this version) */

#define Z_NULL  (void *)0  /* for initializing zalloc, zfree, opaque */

#define zlib_version zlibVersion()
/* for compatibility with versions < 1.0.2 */

                       /* basic functions */

// static const char * zlibVersion OF((void));
/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
  If the first character differs, the library code actually used is
  not compatible with the zlib.h header file used by the application.
  This check is automatically made by deflateInit and inflateInit.
*/

/*
int deflateInit OF((z_streamp strm, int level));

    Initializes the internal stream state for compression. The fields
  zalloc, zfree and opaque must be initialized before by the caller.
  If zalloc and zfree are set to Z_NULL, deflateInit updates them to
  use default allocation functions.

    The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
  1 gives best speed, 9 gives best compression, 0 gives no compression at
  all (the input data is simply copied a block at a time).
  Z_DEFAULT_COMPRESSION requests a default compromise between speed and
  compression (currently equivalent to level 6).

    deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
  enough memory, Z_STREAM_ERROR if level is not a valid compression level,
  Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
  with the version assumed by the caller (ZLIB_VERSION).
  msg is set to null if there is no error message.  deflateInit does not
  perform any compression: this will be done by deflate().
*/


// static int deflate OF((z_streamp strm, int flush));
/*
   deflate compresses as much data as possible, and stops when the input
 buffer becomes empty or the output buffer becomes full. It may introduce some
 output latency (reading input without producing any output) except when
 forced to flush.

   The detailed semantics are as follows. deflate performs one or both of the
 following actions:

 - Compress more input starting at next_in and update next_in and avail_in
   accordingly. If not all input can be processed (because there is not
   enough room in the output buffer), next_in and avail_in are updated and
   processing will resume at this point for the next call of deflate().

 - Provide more output starting at next_out and update next_out and avail_out
   accordingly. This action is forced if the parameter flush is non zero.
   Forcing flush frequently degrades the compression ratio, so this parameter
   should be set only when necessary (in interactive applications).
   Some output may be provided even if flush is not set.

 Before the call of deflate(), the application should ensure that at least
 one of the actions is possible, by providing more input and/or consuming
 more output, and updating avail_in or avail_out accordingly; avail_out
 should never be zero before the call. The application can consume the
 compressed output when it wants, for example when the output buffer is full
 (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
 and with zero avail_out, it must be called again after making room in the
 output buffer because there might be more output pending.

   If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
 flushed to the output buffer and the output is aligned on a byte boundary, so
 that the decompressor can get all input data available so far. (In particular
 avail_in is zero after the call if enough output space has been provided
 before the call.)  Flushing may degrade compression for some compression
 algorithms and so it should be used only when necessary.

   If flush is set to Z_FULL_FLUSH, all output is flushed as with
 Z_SYNC_FLUSH, and the compression state is reset so that decompression can
 restart from this point if previous compressed data has been damaged or if
 random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
 the compression.

   If deflate returns with avail_out == 0, this function must be called again
 with the same value of the flush parameter and more output space (updated
 avail_out), until the flush is complete (deflate returns with non-zero
 avail_out).

   If the parameter flush is set to Z_FINISH, pending input is processed,
 pending output is flushed and deflate returns with Z_STREAM_END if there
 was enough output space; if deflate returns with Z_OK, this function must be
 called again with Z_FINISH and more output space (updated avail_out) but no
 more input data, until it returns with Z_STREAM_END or an error. After
 deflate has returned Z_STREAM_END, the only possible operations on the
 stream are deflateReset or deflateEnd.
 
   Z_FINISH can be used immediately after deflateInit if all the compression
 is to be done in a single step. In this case, avail_out must be at least
 0.1% larger than avail_in plus 12 bytes.  If deflate does not return
 Z_STREAM_END, then it must be called again as described above.

   deflate() sets strm->adler to the adler32 checksum of all input read
 so (that is, total_in bytes).

   deflate() may update data_type if it can make a good guess about
 the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
 binary. This field is only for information purposes and does not affect
 the compression algorithm in any manner.

   deflate() returns Z_OK if some progress has been made (more input
 processed or more output produced), Z_STREAM_END if all input has been
 consumed and all output has been produced (only when flush is set to
 Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
 if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
 (for example avail_in or avail_out was zero).
*/


// static int deflateEnd OF((z_streamp strm));
/*
    All dynamically allocated data structures for this stream are freed.
  This function discards any unprocessed input and does not flush any
  pending output.

    deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
  stream state was inconsistent, Z_DATA_ERROR if the stream was freed
  prematurely (some input or output was discarded). In the error case,
  msg may be set but then points to a static string (which must not be
  deallocated).
*/


/*
int inflateInit OF((z_streamp strm));

    Initializes the internal stream state for decompression. The fields
  next_in, avail_in, zalloc, zfree and opaque must be initialized before by
  the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
  value depends on the compression method), inflateInit determines the
  compression method from the zlib header and allocates all data structures
  accordingly; otherwise the allocation will be deferred to the first call of
  inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
  use default allocation functions.

    inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
  memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
  version assumed by the caller.  msg is set to null if there is no error
  message. inflateInit does not perform any decompression apart from reading
  the zlib header if present: this will be done by inflate().  (So next_in and
  avail_in may be modified, but next_out and avail_out are unchanged.)
*/


static int inflate OF((z_streamp strm, int flush));
/*
   inflate decompresses as much data as possible, and stops when the input
 buffer becomes empty or the output buffer becomes full. It may some
 introduce some output latency (reading input without producing any output)
 except when forced to flush.

 The detailed semantics are as follows. inflate performs one or both of the
 following actions:

 - Decompress more input starting at next_in and update next_in and avail_in
   accordingly. If not all input can be processed (because there is not
   enough room in the output buffer), next_in is updated and processing
   will resume at this point for the next call of inflate().

 - Provide more output starting at next_out and update next_out and avail_out
   accordingly.  inflate() provides as much output as possible, until there
   is no more input data or no more space in the output buffer (see below
   about the flush parameter).

 Before the call of inflate(), the application should ensure that at least
 one of the actions is possible, by providing more input and/or consuming
 more output, and updating the next_* and avail_* values accordingly.
 The application can consume the uncompressed output when it wants, for
 example when the output buffer is full (avail_out == 0), or after each
 call of inflate(). If inflate returns Z_OK and with zero avail_out, it
 must be called again after making room in the output buffer because there
 might be more output pending.

   If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
 output as possible to the output buffer. The flushing behavior of inflate is
 not specified for values of the flush parameter other than Z_SYNC_FLUSH
 and Z_FINISH, but the current implementation actually flushes as much output
 as possible anyway.

   inflate() should normally be called until it returns Z_STREAM_END or an
 error. However if all decompression is to be performed in a single step
 (a single call of inflate), the parameter flush should be set to
 Z_FINISH. In this case all pending input is processed and all pending
 output is flushed; avail_out must be large enough to hold all the
 uncompressed data. (The size of the uncompressed data may have been saved
 by the compressor for this purpose.) The next operation on this stream must
 be inflateEnd to deallocate the decompression state. The use of Z_FINISH
 is never required, but can be used to inform inflate that a faster routine
 may be used for the single inflate() call.

    If a preset dictionary is needed at this point (see inflateSetDictionary
 below), inflate sets strm-adler to the adler32 checksum of the
 dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise
 it sets strm->adler to the adler32 checksum of all output produced
 so (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
 an error code as described below. At the end of the stream, inflate()
 checks that its computed adler32 checksum is equal to that saved by the
 compressor and returns Z_STREAM_END only if the checksum is correct.

   inflate() returns Z_OK if some progress has been made (more input processed
 or more output produced), Z_STREAM_END if the end of the compressed data has
 been reached and all uncompressed output has been produced, Z_NEED_DICT if a
 preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
 corrupted (input stream not conforming to the zlib format or incorrect
 adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
 (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
 enough memory, Z_BUF_ERROR if no progress is possible or if there was not
 enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
 case, the application may then call inflateSync to look for a good
 compression block.
*/


static int inflateEnd OF((z_streamp strm));
/*
    All dynamically allocated data structures for this stream are freed.
  This function discards any unprocessed input and does not flush any
  pending output.

    inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
  was inconsistent. In the error case, msg may be set but then points to a
  static string (which must not be deallocated).
*/

                       /* Advanced functions */

/*
   The following functions are needed only in some special applications.
*/

/*  
int deflateInit2 OF((z_streamp strm,
                                    int  level,
                                    int  method,
                                    int  windowBits,
                                    int  memLevel,
                                    int  strategy));

    This is another version of deflateInit with more compression options. The
  fields next_in, zalloc, zfree and opaque must be initialized before by
  the caller.

    The method parameter is the compression method. It must be Z_DEFLATED in
  this version of the library.

    The windowBits parameter is the base two logarithm of the window size
  (the size of the history buffer).  It should be in the range 8..15 for this
  version of the library. Larger values of this parameter result in better
  compression at the expense of memory usage. The default value is 15 if
  deflateInit is used instead.

    The memLevel parameter specifies how much memory should be allocated
  for the internal compression state. memLevel=1 uses minimum memory but
  is slow and reduces compression ratio; memLevel=9 uses maximum memory
  for optimal speed. The default value is 8. See zconf.h for total memory
  usage as a function of windowBits and memLevel.

    The strategy parameter is used to tune the compression algorithm. Use the
  value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
  filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
  string match).  Filtered data consists mostly of small values with a
  somewhat random distribution. In this case, the compression algorithm is
  tuned to compress them better. The effect of Z_FILTERED is to force more
  Huffman coding and less string matching; it is somewhat intermediate
  between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
  the compression ratio but not the correctness of the compressed output even
  if it is not set appropriately.

     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
  memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
  method). msg is set to null if there is no error message.  deflateInit2 does
  not perform any compression: this will be done by deflate().
*/
                           
/*
static int deflateSetDictionary OF((z_streamp strm,
                                            const Byte *dictionary,
                                            uInt  dictLength));
*/
/*
    Initializes the compression dictionary from the given byte sequence
  without producing any compressed output. This function must be called
  immediately after deflateInit, deflateInit2 or deflateReset, before any
  call of deflate. The compressor and decompressor must use exactly the same
  dictionary (see inflateSetDictionary).

    The dictionary should consist of strings (byte sequences) that are likely
  to be encountered later in the data to be compressed, with the most commonly
  used strings preferably put towards the end of the dictionary. Using a
  dictionary is most useful when the data to be compressed is short and can be
  predicted with good accuracy; the data can then be compressed better than
  with the default empty dictionary.

    Depending on the size of the compression data structures selected by
  deflateInit or deflateInit2, a part of the dictionary may in effect be
  discarded, for example if the dictionary is larger than the window size in
  deflate or deflate2. Thus the strings most likely to be useful should be
  put at the end of the dictionary, not at the front.

    Upon return of this function, strm->adler is set to the Adler32 value
  of the dictionary; the decompressor may later use this value to determine
  which dictionary has been used by the compressor. (The Adler32 value
  applies to the whole dictionary even if only a subset of the dictionary is
  actually used by the compressor.)

    deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
  parameter is invalid (such as NULL dictionary) or the stream state is
  inconsistent (for example if deflate has already been called for this stream
  or if the compression method is bsort). deflateSetDictionary does not
  perform any compression: this will be done by deflate().
*/

/*
static int deflateCopy OF((z_streamp dest,
                                   z_streamp source));
*/
/*
    Sets the destination stream as a complete copy of the source stream.

    This function can be useful when several compression strategies will be
  tried, for example when there are several ways of pre-processing the input
  data with a filter. The streams that will be discarded should then be freed
  by calling deflateEnd.  Note that deflateCopy duplicates the internal
  compression state which can be quite large, so this strategy is slow and
  can consume lots of memory.

    deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
  enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
  (such as zalloc being NULL). msg is left unchanged in both source and
  destination.
*/

// static int deflateReset OF((z_streamp strm));
/*
    This function is equivalent to deflateEnd followed by deflateInit,
  but does not free and reallocate all the internal compression state.
  The stream will keep the same compression level and any other attributes
  that may have been set by deflateInit2.

     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
  stream state was inconsistent (such as zalloc or state being NULL).
*/

/*
static int deflateParams OF((z_streamp strm,
                  int level,
                  int strategy));
*/
/*
    Dynamically update the compression level and compression strategy.  The
  interpretation of level and strategy is as in deflateInit2.  This can be
  used to switch between compression and straight copy of the input data, or
  to switch to a different kind of input data requiring a different
  strategy. If the compression level is changed, the input available so far
  is compressed with the old level (and may be flushed); the new level will
  take effect only at the next call of deflate().

    Before the call of deflateParams, the stream state must be set as for
  a call of deflate(), since the currently available input may have to
  be compressed and flushed. In particular, strm->avail_out must be non-zero.

    deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
  stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
  if strm->avail_out was zero.
*/

/*  
int inflateInit2 OF((z_streamp strm,
                                    int  windowBits));

    This is another version of inflateInit with an extra parameter. The
  fields next_in, avail_in, zalloc, zfree and opaque must be initialized
  before by the caller.

    The windowBits parameter is the base two logarithm of the maximum window
  size (the size of the history buffer).  It should be in the range 8..15 for
  this version of the library. The default value is 15 if inflateInit is used
  instead. If a compressed stream with a larger window size is given as
  input, inflate() will return with the error code Z_DATA_ERROR instead of
  trying to allocate a larger window.

     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
  memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
  memLevel). msg is set to null if there is no error message.  inflateInit2
  does not perform any decompression apart from reading the zlib header if
  present: this will be done by inflate(). (So next_in and avail_in may be
  modified, but next_out and avail_out are unchanged.)
*/

/*
static int inflateSetDictionary OF((z_streamp strm,
                                            const Byte *dictionary,
                                            uInt  dictLength));
*/
/*
    Initializes the decompression dictionary from the given uncompressed byte
  sequence. This function must be called immediately after a call of inflate
  if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
  can be determined from the Adler32 value returned by this call of
  inflate. The compressor and decompressor must use exactly the same
  dictionary (see deflateSetDictionary).

    inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
  parameter is invalid (such as NULL dictionary) or the stream state is
  inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
  expected one (incorrect Adler32 value). inflateSetDictionary does not
  perform any decompression: this will be done by subsequent calls of
  inflate().
*/

// static int inflateSync OF((z_streamp strm));
/*
   Skips invalid compressed data until a full flush point (see above the
 description of deflate with Z_FULL_FLUSH) can be found, or until all
 available input is skipped. No output is provided.

   inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
 if no more input was provided, Z_DATA_ERROR if no flush point has been found,
 or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
 case, the application may save the current current value of total_in which
 indicates where valid compressed data was found. In the error case, the
 application may repeatedly call inflateSync, providing more input each time,
 until success or end of the input data.
*/

static int inflateReset OF((z_streamp strm));
/*
    This function is equivalent to inflateEnd followed by inflateInit,
  but does not free and reallocate all the internal decompression state.
  The stream will keep attributes that may have been set by inflateInit2.

     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
  stream state was inconsistent (such as zalloc or state being NULL).
*/


                       /* utility functions */

/*
    The following utility functions are implemented on top of the
  basic stream-oriented functions. To simplify the interface, some
  default options are assumed (compression level and memory usage,
  standard memory allocation functions). The source code of these
  utility functions can easily be modified if you need special options.
*/

/*
static int compress OF((Byte *dest,   uLong *destLen,
                                const Byte *source, uLong sourceLen));
*/
/*
    Compresses the source buffer into the destination buffer.  sourceLen is
  the byte length of the source buffer. Upon entry, destLen is the total
  size of the destination buffer, which must be at least 0.1% larger than
  sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
  compressed buffer.
    This function can be used to compress a whole file at once if the
  input file is mmap'ed.
    compress returns Z_OK if success, Z_MEM_ERROR if there was not
  enough memory, Z_BUF_ERROR if there was not enough room in the output
  buffer.
*/

/*
static int compress2 OF((Byte *dest,   uLong *destLen,
                                 const Byte *source, uLong sourceLen,
                                 int level));
*/
/*
    Compresses the source buffer into the destination buffer. The level
  parameter has the same meaning as in deflateInit.  sourceLen is the byte
  length of the source buffer. Upon entry, destLen is the total size of the
  destination buffer, which must be at least 0.1% larger than sourceLen plus
  12 bytes. Upon exit, destLen is the actual size of the compressed buffer.

    compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
  memory, Z_BUF_ERROR if there was not enough room in the output buffer,
  Z_STREAM_ERROR if the level parameter is invalid.
*/

/*
static int uncompress OF((Byte *dest,   uLong *destLen,
                                  const Byte *source, uLong sourceLen));
*/                                  
/*
    Decompresses the source buffer into the destination buffer.  sourceLen is
  the byte length of the source buffer. Upon entry, destLen is the total
  size of the destination buffer, which must be large enough to hold the
  entire uncompressed data. (The size of the uncompressed data must have
  been saved previously by the compressor and transmitted to the decompressor
  by some mechanism outside the scope of this compression library.)
  Upon exit, destLen is the actual size of the compressed buffer.
    This function can be used to decompress a whole file at once if the
  input file is mmap'ed.

    uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
  enough memory, Z_BUF_ERROR if there was not enough room in the output
  buffer, or Z_DATA_ERROR if the input data was corrupted.
*/


typedef voidp gzFile;

gzFile gzopen  OF((const char *path, const char *mode));
/*
    Opens a gzip (.gz) file for reading or writing. The mode parameter
  is as in fopen ("rb" or "wb") but can also include a compression level
  ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for
  Huffman only compression as in "wb1h". (See the description
  of deflateInit2 for more information about the strategy parameter.)

    gzopen can be used to read a file which is not in gzip format; in this
  case gzread will directly read from the file without decompression.

    gzopen returns NULL if the file could not be opened or if there was
  insufficient memory to allocate the (de)compression state; errno
  can be checked to distinguish the two cases (if errno is zero, the
  zlib error is Z_MEM_ERROR).  */

gzFile gzdopen  OF((int fd, const char *mode));
/*
    gzdopen() associates a gzFile with the file descriptor fd.  File
  descriptors are obtained from calls like open, dup, creat, pipe or
  fileno (in the file has been previously opened with fopen).
  The mode parameter is as in gzopen.
    The next call of gzclose on the returned gzFile will also close the
  file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
  descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
    gzdopen returns NULL if there was insufficient memory to allocate
  the (de)compression state.
*/

int gzsetparams OF((gzFile file, int level, int strategy));
/*
    Dynamically update the compression level or strategy. See the description
  of deflateInit2 for the meaning of these parameters.
    gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
  opened for writing.
*/

int    gzread  OF((gzFile file, voidp buf, unsigned len));
/*
    Reads the given number of uncompressed bytes from the compressed file.
  If the input file was not in gzip format, gzread copies the given number
  of bytes into the buffer.
    gzread returns the number of uncompressed bytes actually read (0 for
  end of file, -1 for error). */

int    gzwrite OF((gzFile file,
               const voidp buf, unsigned len));
/*
    Writes the given number of uncompressed bytes into the compressed file.
  gzwrite returns the number of uncompressed bytes actually written
  (0 in case of error).
*/

int    QDECL gzprintf OF((gzFile file, const char *format, ...));
/*
    Converts, formats, and writes the args to the compressed file under
  control of the format string, as in fprintf. gzprintf returns the number of
  uncompressed bytes actually written (0 in case of error).
*/

int gzputs OF((gzFile file, const char *s));
/*
     Writes the given null-terminated string to the compressed file, excluding
  the terminating null character.
     gzputs returns the number of characters written, or -1 in case of error.
*/

char * gzgets OF((gzFile file, char *buf, int len));
/*
     Reads bytes from the compressed file until len-1 characters are read, or
  a newline character is read and transferred to buf, or an end-of-file
  condition is encountered.  The string is then terminated with a null
  character.
     gzgets returns buf, or Z_NULL in case of error.
*/

int    gzputc OF((gzFile file, int c));
/*
     Writes c, converted to an unsigned char, into the compressed file.
  gzputc returns the value that was written, or -1 in case of error.
*/

int    gzgetc OF((gzFile file));
/*
     Reads one byte from the compressed file. gzgetc returns this byte
  or -1 in case of end of file or error.
*/

int    gzflush OF((gzFile file, int flush));
/*
    Flushes all pending output into the compressed file. The parameter
  flush is as in the deflate() function. The return value is the zlib
  error number (see function gzerror below). gzflush returns Z_OK if
  the flush parameter is Z_FINISH and all output could be flushed.
    gzflush should be called only when strictly necessary because it can
  degrade compression.
*/

long gzseek OF((gzFile file,
                  long offset, int whence));
/*
     Sets the starting position for the next gzread or gzwrite on the
  given compressed file. The offset represents a number of bytes in the
  uncompressed data stream. The whence parameter is defined as in lseek(2);
  the value SEEK_END is not supported.
    If the file is opened for reading, this function is emulated but can be
  extremely slow. If the file is opened for writing, only forward seeks are
  supported; gzseek then compresses a sequence of zeroes up to the new
  starting position.

     gzseek returns the resulting offset location as measured in bytes from
  the beginning of the uncompressed stream, or -1 in case of error, in
  particular if the file is opened for writing and the new starting position
  would be before the current position.
*/

int    gzrewind OF((gzFile file));
/*
    Rewinds the given file. This function is supported only for reading.

  gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
*/

long    gztell OF((gzFile file));
/*
    Returns the starting position for the next gzread or gzwrite on the
  given compressed file. This position represents a number of bytes in the
  uncompressed data stream.

  gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
*/

int gzeof OF((gzFile file));
/*
    Returns 1 when EOF has previously been detected reading the given
  input stream, otherwise zero.
*/

int    gzclose OF((gzFile file));
/*
    Flushes all pending output if necessary, closes the compressed file
  and deallocates all the (de)compression state. The return value is the zlib
  error number (see function gzerror below).
*/

// static const char * gzerror OF((gzFile file, int *errnum));
/*
    Returns the error message for the last error which occurred on the
  given compressed file. errnum is set to zlib error number. If an
  error occurred in the file system and not in the compression library,
  errnum is set to Z_ERRNO and the application may consult errno
  to get the exact error code.
*/

                       /* checksum functions */

/*
    These functions are not related to compression but are exported
  anyway because they might be useful in applications using the
  compression library.
*/

static uLong adler32 OF((uLong adler, const Byte *buf, uInt len));

/*
    Update a running Adler-32 checksum with the bytes buf[0..len-1] and
  return the updated checksum. If buf is NULL, this function returns
  the required initial value for the checksum.
  An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
  much faster. Usage example:

    uLong adler = adler32(0L, Z_NULL, 0);

    while (read_buffer(buffer, length) != EOF) {
      adler = adler32(adler, buffer, length);
    }
    if (adler != original_adler) error();
*/

                       /* various hacks, don't look :) */

/* deflateInit and inflateInit are macros to allow checking the zlib version
* and the compiler's view of z_stream:
*/
/*
static int deflateInit_ OF((z_streamp strm, int level,
                                    const char *version, int stream_size));
static int inflateInit_ OF((z_streamp strm,
                                    const char *version, int stream_size));
static int deflateInit2_ OF((z_streamp strm, int  level, int  method,
                                     int windowBits, int memLevel,
                                     int strategy, const char *version,
                                     int stream_size));
*/
static int inflateInit2_ OF((z_streamp strm, int  windowBits,
                                     const char *version, int stream_size));

#define deflateInit(strm, level) \
       deflateInit_((strm), (level),       ZLIB_VERSION, sizeof(z_stream))
#define inflateInit(strm) \
       inflateInit_((strm),                ZLIB_VERSION, sizeof(z_stream))
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
       deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
                     (strategy),           ZLIB_VERSION, sizeof(z_stream))
#define inflateInit2(strm, windowBits) \
       inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))


// static const char   * zError           OF((int err));
// static int            inflateSyncPoint OF((z_streamp z));
// static const uLong * get_crc_table    OF((void));

typedef unsigned char  uch;
typedef unsigned short ush;
typedef unsigned long  ulg;

// static const char *z_errmsg[10]; /* indexed by 2-zlib_error */
/* (size given to avoid silly warnings with Visual C++) */

#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]

#define ERR_RETURN(strm,err) \
 return (strm->msg = (char*)ERR_MSG(err), (err))
/* To be used only when the state is known to be valid */

       /* common constants */

#ifndef DEF_WBITS
#  define DEF_WBITS MAX_WBITS
#endif
/* default windowBits for decompression. MAX_WBITS is for compression only */

#if MAX_MEM_LEVEL >= 8
#  define DEF_MEM_LEVEL 8
#else
#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
#endif
/* default memLevel */

#define STORED_BLOCK 0
#define STATIC_TREES 1
#define DYN_TREES    2
/* The three kinds of block type */

#define MIN_MATCH  3
#define MAX_MATCH  258
/* The minimum and maximum match lengths */

#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */

       /* target dependencies */

       /* Common defaults */

#ifndef OS_CODE
#  define OS_CODE  0x03  /* assume Unix */
#endif

#ifndef F_OPEN
#  define F_OPEN(name, mode) fopen((name), (mode))
#endif

        /* functions */

#ifdef HAVE_STRERROR
  extern char *strerror OF((int));
#  define zstrerror(errnum) strerror(errnum)
#else
#  define zstrerror(errnum) ""
#endif

#define zmemcpy Com_Memcpy
#define zmemcmp memcmp
#define zmemzero(dest, len) Com_Memset(dest, 0, len)

/* Diagnostic functions */
#ifdef _ZIP_DEBUG_
  int z_verbose = 0;
#  define Assert(cond,msg) assert(cond);
  //{if(!(cond)) Sys_Error(msg);}
#  define Trace(x) {if (z_verbose>=0) Sys_Error x ;}
#  define Tracev(x) {if (z_verbose>0) Sys_Error x ;}
#  define Tracevv(x) {if (z_verbose>1) Sys_Error x ;}
#  define Tracec(c,x) {if (z_verbose>0 && (c)) Sys_Error x ;}
#  define Tracecv(c,x) {if (z_verbose>1 && (c)) Sys_Error x ;}
#else
#  define Assert(cond,msg)
#  define Trace(x)
#  define Tracev(x)
#  define Tracevv(x)
#  define Tracec(c,x)
#  define Tracecv(c,x)
#endif


typedef uLong (*check_func) OF((uLong check, const Byte *buf, uInt len));
static voidp zcalloc OF((voidp opaque, unsigned items, unsigned size));
static void   zcfree  OF((voidp opaque, voidp ptr));

#define ZALLOC(strm, items, size) \
          (*((strm)->zalloc))((strm)->opaque, (items), (size))
#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidp)(addr))
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}


#if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \
                     !defined(CASESENSITIVITYDEFAULT_NO)
#define CASESENSITIVITYDEFAULT_NO
#endif


#ifndef UNZ_BUFSIZE
#define UNZ_BUFSIZE (65536)
#endif

#ifndef UNZ_MAXFILENAMEINZIP
#define UNZ_MAXFILENAMEINZIP (256)
#endif

#ifndef ALLOC
# define ALLOC(size) (Z_Malloc(size))
#endif
#ifndef TRYFREE
# define TRYFREE(p) {if (p) Z_Free(p);}
#endif

#define SIZECENTRALDIRITEM (0x2e)
#define SIZEZIPLOCALHEADER (0x1e)



/* ===========================================================================
    Read a byte from a gz_stream; update next_in and avail_in. Return EOF
  for end of file.
  IN assertion: the stream s has been sucessfully opened for reading.
*/

/*
static int unzlocal_getByte(FILE *fin,int *pi)
{
   unsigned char c;
   int err = fread(&c, 1, 1, fin);
   if (err==1)
   {
       *pi = (int)c;
       return UNZ_OK;
   }
   else
   {
       if (ferror(fin))
           return UNZ_ERRNO;
       else
           return UNZ_EOF;
   }
}
*/

/* ===========================================================================
  Reads a long in LSB order from the given gz_stream. Sets
*/
static int unzlocal_getShort (FILE* fin, uLong *pX)
{
   short   v;

   fread( &v, sizeof(v), 1, fin );

   *pX = LittleShort( v);
   return UNZ_OK;

/*
   uLong x ;
   int i;
   int err;

   err = unzlocal_getByte(fin,&i);
   x = (uLong)i;
   
   if (err==UNZ_OK)
       err = unzlocal_getByte(fin,&i);
   x += ((uLong)i)<<8;
 
   if (err==UNZ_OK)
       *pX = x;
   else
       *pX = 0;
   return err;
*/
}

static int unzlocal_getLong (FILE *fin, uLong *pX)
{
   int      v;

   fread( &v, sizeof(v), 1, fin );

   *pX = LittleLong( v);
   return UNZ_OK;

/*
   uLong x ;
   int i;
   int err;

   err = unzlocal_getByte(fin,&i);
   x = (uLong)i;
   
   if (err==UNZ_OK)
       err = unzlocal_getByte(fin,&i);
   x += ((uLong)i)<<8;

   if (err==UNZ_OK)
       err = unzlocal_getByte(fin,&i);
   x += ((uLong)i)<<16;

   if (err==UNZ_OK)
       err = unzlocal_getByte(fin,&i);
   x += ((uLong)i)<<24;
 
   if (err==UNZ_OK)
       *pX = x;
   else
       *pX = 0;
   return err;
*/
}


/* My own strcmpi / strcasecmp */
static int strcmpcasenosensitive_internal (const char* fileName1,const char* fileName2)
{
   for (;;)
   {
      char c1=*(fileName1++);
      char c2=*(fileName2++);
      if ((c1>='a') && (c1<='z'))
         c1 -= 0x20;
      if ((c2>='a') && (c2<='z'))
         c2 -= 0x20;
      if (c1=='\0')
         return ((c2=='\0') ? 0 : -1);
      if (c2=='\0')
         return 1;
      if (c1<c2)
         return -1;
      if (c1>c2)
         return 1;
   }
}


#ifdef  CASESENSITIVITYDEFAULT_NO
#define CASESENSITIVITYDEFAULTVALUE 2
#else
#define CASESENSITIVITYDEFAULTVALUE 1
#endif

#ifndef STRCMPCASENOSENTIVEFUNCTION
#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
#endif

/*
  Compare two filename (fileName1,fileName2).
  If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
  If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
                                                               or strcasecmp)
  If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
       (like 1 on Unix, 2 on Windows)

*/
extern  int unzStringFileNameCompare (const char* fileName1,const char* fileName2,int iCaseSensitivity)
{
   if (iCaseSensitivity==0)
      iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;

   if (iCaseSensitivity==1)
      return strcmp(fileName1,fileName2);

   return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
}

#define BUFREADCOMMENT (0x400)

/*
 Locate the Central directory of a zipfile (at the end, just before
   the global comment)
*/
extern uLong unzlocal_SearchCentralDir(FILE *fin)
{
   unsigned char* buf;
   uLong uSizeFile;
   uLong uBackRead;
   uLong uMaxBack=0xffff; /* maximum size of global comment */
   uLong uPosFound=0;
   
   if (fseek(fin,0,SEEK_END) != 0)
      return 0;


   uSizeFile = ftell( fin );
   
   if (uMaxBack>uSizeFile)
      uMaxBack = uSizeFile;

   buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
   if (buf==NULL)
      return 0;

   uBackRead = 4;
   while (uBackRead<uMaxBack)
   {
      uLong uReadSize,uReadPos ;
      int i;
      if (uBackRead+BUFREADCOMMENT>uMaxBack)
         uBackRead = uMaxBack;
      else
         uBackRead+=BUFREADCOMMENT;
      uReadPos = uSizeFile-uBackRead ;
      
      uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
                    (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
      if (fseek(fin,uReadPos,SEEK_SET)!=0)
         break;

      if (fread(buf,(uInt)uReadSize,1,fin)!=1)
         break;

               for (i=(int)uReadSize-3; (i--)>0;)
         if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
            ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
         {
            uPosFound = uReadPos+i;
            break;
         }

      if (uPosFound!=0)
         break;
   }
   TRYFREE(buf);
   return uPosFound;
}

extern unzFile unzReOpen (const char* path, unzFile file)
{
   unz_s *s;
   FILE * fin;

   fin=fopen(path,"rb");
   if (fin==NULL)
      return NULL;

   s=(unz_s*)ALLOC(sizeof(unz_s));
   Com_Memcpy(s, (unz_s*)file, sizeof(unz_s));

   s->file = fin;
   return (unzFile)s;   
}

/*
 Open a Zip file. path contain the full pathname (by example,
    on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer
    "zlib/zlib109.zip".
    If the zipfile cannot be opened (file don't exist or in not valid), the
      return value is NULL.
    Else, the return value is a unzFile Handle, usable with other function
      of this unzip package.
*/
extern unzFile unzOpen (const char* path)
{
   unz_s us;
   unz_s *s;
   uLong central_pos,uL;
   FILE * fin ;

   uLong number_disk;          /* number of the current dist, used for
                           spaning ZIP, unsupported, always 0*/
   uLong number_disk_with_CD;  /* number the the disk with central dir, used
                           for spaning ZIP, unsupported, always 0*/
   uLong number_entry_CD;      /* total number of entries in
                                  the central dir
                                  (same than number_entry on nospan) */

   int err=UNZ_OK;

   fin=fopen(path,"rb");
   if (fin==NULL)
      return NULL;

   central_pos = unzlocal_SearchCentralDir(fin);
   if (central_pos==0)
      err=UNZ_ERRNO;

   if (fseek(fin,central_pos,SEEK_SET)!=0)
      err=UNZ_ERRNO;

   /* the signature, already checked */
   if (unzlocal_getLong(fin,&uL)!=UNZ_OK)
      err=UNZ_ERRNO;

   /* number of this disk */
   if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK)
      err=UNZ_ERRNO;

   /* number of the disk with the start of the central directory */
   if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK)
      err=UNZ_ERRNO;

   /* total number of entries in the central dir on this disk */
   if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK)
      err=UNZ_ERRNO;

   /* total number of entries in the central dir */
   if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK)
      err=UNZ_ERRNO;

   if ((number_entry_CD!=us.gi.number_entry) ||
      (number_disk_with_CD!=0) ||
      (number_disk!=0))
      err=UNZ_BADZIPFILE;

   /* size of the central directory */
   if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK)
      err=UNZ_ERRNO;

   /* offset of start of central directory with respect to the
         starting disk number */
   if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK)
      err=UNZ_ERRNO;

   /* zipfile comment length */
   if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK)
      err=UNZ_ERRNO;

   if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
      (err==UNZ_OK))
      err=UNZ_BADZIPFILE;

   if (err!=UNZ_OK)
   {
      fclose(fin);
      return NULL;
   }

   us.file=fin;
   us.byte_before_the_zipfile = central_pos -
                          (us.offset_central_dir+us.size_central_dir);
   us.central_pos = central_pos;
   us.pfile_in_zip_read = NULL;
   

   s=(unz_s*)ALLOC(sizeof(unz_s));
   *s=us;
//   unzGoToFirstFile((unzFile)s);   
   return (unzFile)s;   
}


/*
 Close a ZipFile opened with unzipOpen.
 If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
   these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
 return UNZ_OK if there is no problem. */
extern int unzClose (unzFile file)
{
   unz_s* s;
   if (file==NULL)
      return UNZ_PARAMERROR;
   s=(unz_s*)file;

   if (s->pfile_in_zip_read!=NULL)
       unzCloseCurrentFile(file);

   fclose(s->file);
   TRYFREE(s);
   return UNZ_OK;
}


/*
 Write info about the ZipFile in the *pglobal_info structure.
 No preparation of the structure is needed
 return UNZ_OK if there is no problem. */
extern int unzGetGlobalInfo (unzFile file,unz_global_info *pglobal_info)
{
   unz_s* s;
   if (file==NULL)
      return UNZ_PARAMERROR;
   s=(unz_s*)file;
   *pglobal_info=s->gi;
   return UNZ_OK;
}


/*
  Translate date/time from Dos format to tm_unz (readable more easilty)
*/
static void unzlocal_DosDateToTmuDate (uLong ulDosDate, tm_unz* ptm)
{
   uLong uDate;
   uDate = (uLong)(ulDosDate>>16);
   ptm->tm_mday = (uInt)(uDate&0x1f) ;
   ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;
   ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;

   ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
   ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;
   ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;
}

/*
 Get Info about the current file in the zipfile, with internal only info
*/
static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
                                                 unz_file_info *pfile_info,
                                                 unz_file_info_internal
                                                 *pfile_info_internal,
                                                 char *szFileName,
                                      uLong fileNameBufferSize,
                                                 void *extraField,
                                      uLong extraFieldBufferSize,
                                                 char *szComment,
                                      uLong commentBufferSize)
{
   unz_s* s;
   unz_file_info file_info;
   unz_file_info_internal file_info_internal;
   int err=UNZ_OK;
   uLong uMagic;
   long lSeek=0;

   if (file==NULL)
      return UNZ_PARAMERROR;
   s=(unz_s*)file;
   if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0)
      err=UNZ_ERRNO;


   /* we check the magic */
   if (err==UNZ_OK) {
      if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
         err=UNZ_ERRNO;
      else if (uMagic!=0x02014b50)
         err=UNZ_BADZIPFILE;
   }
   if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK)
      err=UNZ_ERRNO;

   unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);

   if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK)
      err=UNZ_ERRNO;

   if (unzlocal_getShort(s->file,&file_info.size_filename) !=
Title: I Need Help!!!!!
Post by: apollyon on July 30, 2006, 10:04:11 PM
I hate THIS
Title: I Need Help!!!!!
Post by: apollyon on July 30, 2006, 10:05:38 PM
ITs realy hard
Title: I Need Help!!!!!
Post by: apollyon on July 30, 2006, 10:08:29 PM
If you can help great im still trying to get how to do this
Title: I Need Help!!!!!
Post by: leilei on July 31, 2006, 12:06:58 AM
what the hell

just get access to the base folder contents so you can shove the map's .pk3 file in that folder.
Title: Re: I Need Help!!!!!
Post by: PIE on July 31, 2006, 12:10:43 AM
Quote from: apollyonI have to put them in my Tremulous Base folder
As long as he doesn't meen root folder and means tremulous/base then yes.. i think we're past that step.... this is odd... .pk3s should work with tremulous.. there shouldn't be any kind of error like that.. but ofcourse you know that already :p..
Title: I Need Help!!!!!
Post by: apollyon on July 31, 2006, 12:54:12 AM
I cant put anything in there it says it cant be modifyed
Title: I Need Help!!!!!
Post by: David on July 31, 2006, 12:58:13 AM
QuoteI Need Help!!!!!
I know you do.

QuoteSo i read the copying page where it tells me to go into src then qcommon then unzip.c.
Uh, no it didnt.

You should post more info. What was the exact error? What were you doing exactly?
Read this (http://www.catb.org/~esr/faqs/smart-questions.html)

Also execive use of the ! and zero infomation subject lines are very annoying.  The only reason you haven't been told to STFU and RTFM is becouse this is a not-the-norm error.

also, despite knowing nothing about mac's, and never having used one, I can instanly tell that this is caused because you cant write to that folder. Read-only disk? Wrong file permissions? go post on a mac fourm. (or RTFM)

EDIT:
You are using YOUR tremulous/base folder, not the global one, right?
If you can see the copying file, your in the wrong one.
Title: I Need Help!!!!!
Post by: apollyon on July 31, 2006, 04:15:50 AM
FIxed it
never mind
thanks
Title: I Need Help!!!!!
Post by: PIE on July 31, 2006, 07:16:09 AM
Quote from: apollyonFIxed it
never mind
thanks
I'd really like to know how :D
You never know when someone else will come along with this exact same error... and then we still can't help them.
Title: I Need Help!!!!!
Post by: David on July 31, 2006, 02:16:56 PM
Quote from: David
Read this
You can tell he didnt.
Title: I Need Help!!!!!
Post by: Dio on August 04, 2006, 04:54:31 PM
Here, I am also a Mac OS X user and i found a way to fix the problem with Mac OS X just now. Just go to General and I will put It under MAC OS X WAY TO GETTING NEW MAPS. :)  :)  :)  :)  :)
Title: I Need Help!!!!!
Post by: Lava Croft on August 04, 2006, 11:18:02 PM
This thread shows that Mac users are even worse than Linux users.

he;lp
Title: I Need Help!!!!!
Post by: rasz_pl on August 05, 2006, 12:16:22 AM
Quote from: Lava CroftThis thread shows that Mac users are even worse than Linux users.

he;lp

no, you got it backward, Linux users usually know what they are doing, Windows users kinda know, Mac users are clueless (thats why they got a mac in the first place) :]

ok, I'v got a mac too, but just cos its 'NIX and has all those pretty icons .. mmm icons *drolls*
Title: I Need Help!!!!!
Post by: David on August 05, 2006, 12:20:00 AM
Quote from: rasz_pl

no, you got it backward, Linux users usually know what they are doing, Windows users kinda know, Mac users are clueless (thats why they got a mac in the first place) :]

linux users have to know what thay are doing, otherwise thay get pissed off and go back to windows.
Title: I Need Help!!!!!
Post by: GRANGER HUNTER on August 05, 2006, 01:48:17 AM
macs are better than windows and linux much faster downloads.
But some times and only sometimes weird things happen not like windows my friend has it and messed up his computer in windows everything went slow as hell.....
but everything has its problems.... :roll: