chd 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +30 -0
  3. data/chd.gemspec +29 -0
  4. data/ext/chd.c +1008 -0
  5. data/ext/extconf.rb +60 -0
  6. data/lib/chd/cd.rb +272 -0
  7. data/lib/chd/metadata.rb +196 -0
  8. data/lib/chd/version.rb +4 -0
  9. data/lib/chd.rb +21 -0
  10. data/libchdr/CMakeLists.txt +104 -0
  11. data/libchdr/LICENSE.txt +24 -0
  12. data/libchdr/README.md +7 -0
  13. data/libchdr/deps/lzma-19.00/CMakeLists.txt +33 -0
  14. data/libchdr/deps/lzma-19.00/LICENSE +3 -0
  15. data/libchdr/deps/lzma-19.00/include/7zTypes.h +375 -0
  16. data/libchdr/deps/lzma-19.00/include/Alloc.h +51 -0
  17. data/libchdr/deps/lzma-19.00/include/Bra.h +64 -0
  18. data/libchdr/deps/lzma-19.00/include/Compiler.h +33 -0
  19. data/libchdr/deps/lzma-19.00/include/CpuArch.h +336 -0
  20. data/libchdr/deps/lzma-19.00/include/Delta.h +19 -0
  21. data/libchdr/deps/lzma-19.00/include/LzFind.h +121 -0
  22. data/libchdr/deps/lzma-19.00/include/LzHash.h +57 -0
  23. data/libchdr/deps/lzma-19.00/include/Lzma86.h +111 -0
  24. data/libchdr/deps/lzma-19.00/include/LzmaDec.h +234 -0
  25. data/libchdr/deps/lzma-19.00/include/LzmaEnc.h +76 -0
  26. data/libchdr/deps/lzma-19.00/include/LzmaLib.h +131 -0
  27. data/libchdr/deps/lzma-19.00/include/Precomp.h +10 -0
  28. data/libchdr/deps/lzma-19.00/include/Sort.h +18 -0
  29. data/libchdr/deps/lzma-19.00/lzma-history.txt +446 -0
  30. data/libchdr/deps/lzma-19.00/lzma.txt +328 -0
  31. data/libchdr/deps/lzma-19.00/lzma.vcxproj +543 -0
  32. data/libchdr/deps/lzma-19.00/lzma.vcxproj.filters +17 -0
  33. data/libchdr/deps/lzma-19.00/src/Alloc.c +455 -0
  34. data/libchdr/deps/lzma-19.00/src/Bra86.c +82 -0
  35. data/libchdr/deps/lzma-19.00/src/BraIA64.c +53 -0
  36. data/libchdr/deps/lzma-19.00/src/CpuArch.c +218 -0
  37. data/libchdr/deps/lzma-19.00/src/Delta.c +64 -0
  38. data/libchdr/deps/lzma-19.00/src/LzFind.c +1127 -0
  39. data/libchdr/deps/lzma-19.00/src/Lzma86Dec.c +54 -0
  40. data/libchdr/deps/lzma-19.00/src/LzmaDec.c +1185 -0
  41. data/libchdr/deps/lzma-19.00/src/LzmaEnc.c +1330 -0
  42. data/libchdr/deps/lzma-19.00/src/Sort.c +141 -0
  43. data/libchdr/deps/zlib-1.2.11/CMakeLists.txt +29 -0
  44. data/libchdr/deps/zlib-1.2.11/ChangeLog +1515 -0
  45. data/libchdr/deps/zlib-1.2.11/FAQ +368 -0
  46. data/libchdr/deps/zlib-1.2.11/INDEX +68 -0
  47. data/libchdr/deps/zlib-1.2.11/Makefile +5 -0
  48. data/libchdr/deps/zlib-1.2.11/Makefile.in +410 -0
  49. data/libchdr/deps/zlib-1.2.11/README +115 -0
  50. data/libchdr/deps/zlib-1.2.11/adler32.c +186 -0
  51. data/libchdr/deps/zlib-1.2.11/compress.c +86 -0
  52. data/libchdr/deps/zlib-1.2.11/configure +921 -0
  53. data/libchdr/deps/zlib-1.2.11/crc32.c +442 -0
  54. data/libchdr/deps/zlib-1.2.11/crc32.h +441 -0
  55. data/libchdr/deps/zlib-1.2.11/deflate.c +2163 -0
  56. data/libchdr/deps/zlib-1.2.11/deflate.h +349 -0
  57. data/libchdr/deps/zlib-1.2.11/doc/algorithm.txt +209 -0
  58. data/libchdr/deps/zlib-1.2.11/doc/rfc1950.txt +619 -0
  59. data/libchdr/deps/zlib-1.2.11/doc/rfc1951.txt +955 -0
  60. data/libchdr/deps/zlib-1.2.11/doc/rfc1952.txt +675 -0
  61. data/libchdr/deps/zlib-1.2.11/doc/txtvsbin.txt +107 -0
  62. data/libchdr/deps/zlib-1.2.11/gzclose.c +25 -0
  63. data/libchdr/deps/zlib-1.2.11/gzguts.h +218 -0
  64. data/libchdr/deps/zlib-1.2.11/gzlib.c +637 -0
  65. data/libchdr/deps/zlib-1.2.11/gzread.c +654 -0
  66. data/libchdr/deps/zlib-1.2.11/gzwrite.c +665 -0
  67. data/libchdr/deps/zlib-1.2.11/infback.c +640 -0
  68. data/libchdr/deps/zlib-1.2.11/inffast.c +323 -0
  69. data/libchdr/deps/zlib-1.2.11/inffast.h +11 -0
  70. data/libchdr/deps/zlib-1.2.11/inffixed.h +94 -0
  71. data/libchdr/deps/zlib-1.2.11/inflate.c +1561 -0
  72. data/libchdr/deps/zlib-1.2.11/inflate.h +125 -0
  73. data/libchdr/deps/zlib-1.2.11/inftrees.c +304 -0
  74. data/libchdr/deps/zlib-1.2.11/inftrees.h +62 -0
  75. data/libchdr/deps/zlib-1.2.11/make_vms.com +867 -0
  76. data/libchdr/deps/zlib-1.2.11/treebuild.xml +116 -0
  77. data/libchdr/deps/zlib-1.2.11/trees.c +1203 -0
  78. data/libchdr/deps/zlib-1.2.11/trees.h +128 -0
  79. data/libchdr/deps/zlib-1.2.11/uncompr.c +93 -0
  80. data/libchdr/deps/zlib-1.2.11/zconf.h +534 -0
  81. data/libchdr/deps/zlib-1.2.11/zconf.h.cmakein +536 -0
  82. data/libchdr/deps/zlib-1.2.11/zconf.h.in +534 -0
  83. data/libchdr/deps/zlib-1.2.11/zlib.3 +149 -0
  84. data/libchdr/deps/zlib-1.2.11/zlib.3.pdf +0 -0
  85. data/libchdr/deps/zlib-1.2.11/zlib.h +1912 -0
  86. data/libchdr/deps/zlib-1.2.11/zlib.map +94 -0
  87. data/libchdr/deps/zlib-1.2.11/zlib.pc.cmakein +13 -0
  88. data/libchdr/deps/zlib-1.2.11/zlib.pc.in +13 -0
  89. data/libchdr/deps/zlib-1.2.11/zlib2ansi +152 -0
  90. data/libchdr/deps/zlib-1.2.11/zutil.c +325 -0
  91. data/libchdr/deps/zlib-1.2.11/zutil.h +271 -0
  92. data/libchdr/include/dr_libs/dr_flac.h +12280 -0
  93. data/libchdr/include/libchdr/bitstream.h +43 -0
  94. data/libchdr/include/libchdr/cdrom.h +110 -0
  95. data/libchdr/include/libchdr/chd.h +427 -0
  96. data/libchdr/include/libchdr/chdconfig.h +10 -0
  97. data/libchdr/include/libchdr/coretypes.h +60 -0
  98. data/libchdr/include/libchdr/flac.h +50 -0
  99. data/libchdr/include/libchdr/huffman.h +90 -0
  100. data/libchdr/pkg-config.pc.in +10 -0
  101. data/libchdr/src/libchdr_bitstream.c +125 -0
  102. data/libchdr/src/libchdr_cdrom.c +415 -0
  103. data/libchdr/src/libchdr_chd.c +2744 -0
  104. data/libchdr/src/libchdr_flac.c +302 -0
  105. data/libchdr/src/libchdr_huffman.c +545 -0
  106. data/libchdr/src/link.T +5 -0
  107. data/libchdr/tests/CMakeLists.txt +2 -0
  108. data/libchdr/tests/benchmark.c +52 -0
  109. metadata +183 -0
@@ -0,0 +1,94 @@
1
+ ZLIB_1.2.0 {
2
+ global:
3
+ compressBound;
4
+ deflateBound;
5
+ inflateBack;
6
+ inflateBackEnd;
7
+ inflateBackInit_;
8
+ inflateCopy;
9
+ local:
10
+ deflate_copyright;
11
+ inflate_copyright;
12
+ inflate_fast;
13
+ inflate_table;
14
+ zcalloc;
15
+ zcfree;
16
+ z_errmsg;
17
+ gz_error;
18
+ gz_intmax;
19
+ _*;
20
+ };
21
+
22
+ ZLIB_1.2.0.2 {
23
+ gzclearerr;
24
+ gzungetc;
25
+ zlibCompileFlags;
26
+ } ZLIB_1.2.0;
27
+
28
+ ZLIB_1.2.0.8 {
29
+ deflatePrime;
30
+ } ZLIB_1.2.0.2;
31
+
32
+ ZLIB_1.2.2 {
33
+ adler32_combine;
34
+ crc32_combine;
35
+ deflateSetHeader;
36
+ inflateGetHeader;
37
+ } ZLIB_1.2.0.8;
38
+
39
+ ZLIB_1.2.2.3 {
40
+ deflateTune;
41
+ gzdirect;
42
+ } ZLIB_1.2.2;
43
+
44
+ ZLIB_1.2.2.4 {
45
+ inflatePrime;
46
+ } ZLIB_1.2.2.3;
47
+
48
+ ZLIB_1.2.3.3 {
49
+ adler32_combine64;
50
+ crc32_combine64;
51
+ gzopen64;
52
+ gzseek64;
53
+ gztell64;
54
+ inflateUndermine;
55
+ } ZLIB_1.2.2.4;
56
+
57
+ ZLIB_1.2.3.4 {
58
+ inflateReset2;
59
+ inflateMark;
60
+ } ZLIB_1.2.3.3;
61
+
62
+ ZLIB_1.2.3.5 {
63
+ gzbuffer;
64
+ gzoffset;
65
+ gzoffset64;
66
+ gzclose_r;
67
+ gzclose_w;
68
+ } ZLIB_1.2.3.4;
69
+
70
+ ZLIB_1.2.5.1 {
71
+ deflatePending;
72
+ } ZLIB_1.2.3.5;
73
+
74
+ ZLIB_1.2.5.2 {
75
+ deflateResetKeep;
76
+ gzgetc_;
77
+ inflateResetKeep;
78
+ } ZLIB_1.2.5.1;
79
+
80
+ ZLIB_1.2.7.1 {
81
+ inflateGetDictionary;
82
+ gzvprintf;
83
+ } ZLIB_1.2.5.2;
84
+
85
+ ZLIB_1.2.9 {
86
+ inflateCodesUsed;
87
+ inflateValidate;
88
+ uncompress2;
89
+ gzfread;
90
+ gzfwrite;
91
+ deflateGetDictionary;
92
+ adler32_z;
93
+ crc32_z;
94
+ } ZLIB_1.2.7.1;
@@ -0,0 +1,13 @@
1
+ prefix=@CMAKE_INSTALL_PREFIX@
2
+ exec_prefix=@CMAKE_INSTALL_PREFIX@
3
+ libdir=@INSTALL_LIB_DIR@
4
+ sharedlibdir=@INSTALL_LIB_DIR@
5
+ includedir=@INSTALL_INC_DIR@
6
+
7
+ Name: zlib
8
+ Description: zlib compression library
9
+ Version: @VERSION@
10
+
11
+ Requires:
12
+ Libs: -L${libdir} -L${sharedlibdir} -lz
13
+ Cflags: -I${includedir}
@@ -0,0 +1,13 @@
1
+ prefix=@prefix@
2
+ exec_prefix=@exec_prefix@
3
+ libdir=@libdir@
4
+ sharedlibdir=@sharedlibdir@
5
+ includedir=@includedir@
6
+
7
+ Name: zlib
8
+ Description: zlib compression library
9
+ Version: @VERSION@
10
+
11
+ Requires:
12
+ Libs: -L${libdir} -L${sharedlibdir} -lz
13
+ Cflags: -I${includedir}
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/perl
2
+
3
+ # Transform K&R C function definitions into ANSI equivalent.
4
+ #
5
+ # Author: Paul Marquess
6
+ # Version: 1.0
7
+ # Date: 3 October 2006
8
+
9
+ # TODO
10
+ #
11
+ # Asumes no function pointer parameters. unless they are typedefed.
12
+ # Assumes no literal strings that look like function definitions
13
+ # Assumes functions start at the beginning of a line
14
+
15
+ use strict;
16
+ use warnings;
17
+
18
+ local $/;
19
+ $_ = <>;
20
+
21
+ my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments
22
+
23
+ my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ;
24
+ my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ;
25
+ my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ;
26
+
27
+
28
+ while (s/^
29
+ ( # Start $1
30
+ ( # Start $2
31
+ .*? # Minimal eat content
32
+ ( ^ \w [\w\s\*]+ ) # $3 -- function name
33
+ \s* # optional whitespace
34
+ ) # $2 - Matched up to before parameter list
35
+
36
+ \( \s* # Literal "(" + optional whitespace
37
+ ( [^\)]+ ) # $4 - one or more anythings except ")"
38
+ \s* \) # optional whitespace surrounding a Literal ")"
39
+
40
+ ( (?: $dList )+ ) # $5
41
+
42
+ $sp ^ { # literal "{" at start of line
43
+ ) # Remember to $1
44
+ //xsom
45
+ )
46
+ {
47
+ my $all = $1 ;
48
+ my $prefix = $2;
49
+ my $param_list = $4 ;
50
+ my $params = $5;
51
+
52
+ StripComments($params);
53
+ StripComments($param_list);
54
+ $param_list =~ s/^\s+//;
55
+ $param_list =~ s/\s+$//;
56
+
57
+ my $i = 0 ;
58
+ my %pList = map { $_ => $i++ }
59
+ split /\s*,\s*/, $param_list;
60
+ my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ;
61
+
62
+ my @params = split /\s*;\s*/, $params;
63
+ my @outParams = ();
64
+ foreach my $p (@params)
65
+ {
66
+ if ($p =~ /,/)
67
+ {
68
+ my @bits = split /\s*,\s*/, $p;
69
+ my $first = shift @bits;
70
+ $first =~ s/^\s*//;
71
+ push @outParams, $first;
72
+ $first =~ /^(\w+\s*)/;
73
+ my $type = $1 ;
74
+ push @outParams, map { $type . $_ } @bits;
75
+ }
76
+ else
77
+ {
78
+ $p =~ s/^\s+//;
79
+ push @outParams, $p;
80
+ }
81
+ }
82
+
83
+
84
+ my %tmp = map { /$pMatch/; $_ => $pList{$1} }
85
+ @outParams ;
86
+
87
+ @outParams = map { " $_" }
88
+ sort { $tmp{$a} <=> $tmp{$b} }
89
+ @outParams ;
90
+
91
+ print $prefix ;
92
+ print "(\n" . join(",\n", @outParams) . ")\n";
93
+ print "{" ;
94
+
95
+ }
96
+
97
+ # Output any trailing code.
98
+ print ;
99
+ exit 0;
100
+
101
+
102
+ sub StripComments
103
+ {
104
+
105
+ no warnings;
106
+
107
+ # Strip C & C++ coments
108
+ # From the perlfaq
109
+ $_[0] =~
110
+
111
+ s{
112
+ /\* ## Start of /* ... */ comment
113
+ [^*]*\*+ ## Non-* followed by 1-or-more *'s
114
+ (
115
+ [^/*][^*]*\*+
116
+ )* ## 0-or-more things which don't start with /
117
+ ## but do end with '*'
118
+ / ## End of /* ... */ comment
119
+
120
+ | ## OR C++ Comment
121
+ // ## Start of C++ comment //
122
+ [^\n]* ## followed by 0-or-more non end of line characters
123
+
124
+ | ## OR various things which aren't comments:
125
+
126
+ (
127
+ " ## Start of " ... " string
128
+ (
129
+ \\. ## Escaped char
130
+ | ## OR
131
+ [^"\\] ## Non "\
132
+ )*
133
+ " ## End of " ... " string
134
+
135
+ | ## OR
136
+
137
+ ' ## Start of ' ... ' string
138
+ (
139
+ \\. ## Escaped char
140
+ | ## OR
141
+ [^'\\] ## Non '\
142
+ )*
143
+ ' ## End of ' ... ' string
144
+
145
+ | ## OR
146
+
147
+ . ## Anything other char
148
+ [^/"'\\]* ## Chars which doesn't start a comment, string or escape
149
+ )
150
+ }{$2}gxs;
151
+
152
+ }
@@ -0,0 +1,325 @@
1
+ /* zutil.c -- target dependent utility functions for the compression library
2
+ * Copyright (C) 1995-2017 Jean-loup Gailly
3
+ * For conditions of distribution and use, see copyright notice in zlib.h
4
+ */
5
+
6
+ /* @(#) $Id$ */
7
+
8
+ #include "zutil.h"
9
+ #ifndef Z_SOLO
10
+ # include "gzguts.h"
11
+ #endif
12
+
13
+ z_const char * const z_errmsg[10] = {
14
+ (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
15
+ (z_const char *)"stream end", /* Z_STREAM_END 1 */
16
+ (z_const char *)"", /* Z_OK 0 */
17
+ (z_const char *)"file error", /* Z_ERRNO (-1) */
18
+ (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */
19
+ (z_const char *)"data error", /* Z_DATA_ERROR (-3) */
20
+ (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */
21
+ (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */
22
+ (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
23
+ (z_const char *)""
24
+ };
25
+
26
+
27
+ const char * ZEXPORT zlibVersion()
28
+ {
29
+ return ZLIB_VERSION;
30
+ }
31
+
32
+ uLong ZEXPORT zlibCompileFlags()
33
+ {
34
+ uLong flags;
35
+
36
+ flags = 0;
37
+ switch ((int)(sizeof(uInt))) {
38
+ case 2: break;
39
+ case 4: flags += 1; break;
40
+ case 8: flags += 2; break;
41
+ default: flags += 3;
42
+ }
43
+ switch ((int)(sizeof(uLong))) {
44
+ case 2: break;
45
+ case 4: flags += 1 << 2; break;
46
+ case 8: flags += 2 << 2; break;
47
+ default: flags += 3 << 2;
48
+ }
49
+ switch ((int)(sizeof(voidpf))) {
50
+ case 2: break;
51
+ case 4: flags += 1 << 4; break;
52
+ case 8: flags += 2 << 4; break;
53
+ default: flags += 3 << 4;
54
+ }
55
+ switch ((int)(sizeof(z_off_t))) {
56
+ case 2: break;
57
+ case 4: flags += 1 << 6; break;
58
+ case 8: flags += 2 << 6; break;
59
+ default: flags += 3 << 6;
60
+ }
61
+ #ifdef ZLIB_DEBUG
62
+ flags += 1 << 8;
63
+ #endif
64
+ #if defined(ASMV) || defined(ASMINF)
65
+ flags += 1 << 9;
66
+ #endif
67
+ #ifdef ZLIB_WINAPI
68
+ flags += 1 << 10;
69
+ #endif
70
+ #ifdef BUILDFIXED
71
+ flags += 1 << 12;
72
+ #endif
73
+ #ifdef DYNAMIC_CRC_TABLE
74
+ flags += 1 << 13;
75
+ #endif
76
+ #ifdef NO_GZCOMPRESS
77
+ flags += 1L << 16;
78
+ #endif
79
+ #ifdef NO_GZIP
80
+ flags += 1L << 17;
81
+ #endif
82
+ #ifdef PKZIP_BUG_WORKAROUND
83
+ flags += 1L << 20;
84
+ #endif
85
+ #ifdef FASTEST
86
+ flags += 1L << 21;
87
+ #endif
88
+ #if defined(STDC) || defined(Z_HAVE_STDARG_H)
89
+ # ifdef NO_vsnprintf
90
+ flags += 1L << 25;
91
+ # ifdef HAS_vsprintf_void
92
+ flags += 1L << 26;
93
+ # endif
94
+ # else
95
+ # ifdef HAS_vsnprintf_void
96
+ flags += 1L << 26;
97
+ # endif
98
+ # endif
99
+ #else
100
+ flags += 1L << 24;
101
+ # ifdef NO_snprintf
102
+ flags += 1L << 25;
103
+ # ifdef HAS_sprintf_void
104
+ flags += 1L << 26;
105
+ # endif
106
+ # else
107
+ # ifdef HAS_snprintf_void
108
+ flags += 1L << 26;
109
+ # endif
110
+ # endif
111
+ #endif
112
+ return flags;
113
+ }
114
+
115
+ #ifdef ZLIB_DEBUG
116
+ #include <stdlib.h>
117
+ # ifndef verbose
118
+ # define verbose 0
119
+ # endif
120
+ int ZLIB_INTERNAL z_verbose = verbose;
121
+
122
+ void ZLIB_INTERNAL z_error (m)
123
+ char *m;
124
+ {
125
+ fprintf(stderr, "%s\n", m);
126
+ exit(1);
127
+ }
128
+ #endif
129
+
130
+ /* exported to allow conversion of error code to string for compress() and
131
+ * uncompress()
132
+ */
133
+ const char * ZEXPORT zError(err)
134
+ int err;
135
+ {
136
+ return ERR_MSG(err);
137
+ }
138
+
139
+ #if defined(_WIN32_WCE)
140
+ /* The Microsoft C Run-Time Library for Windows CE doesn't have
141
+ * errno. We define it as a global variable to simplify porting.
142
+ * Its value is always 0 and should not be used.
143
+ */
144
+ int errno = 0;
145
+ #endif
146
+
147
+ #ifndef HAVE_MEMCPY
148
+
149
+ void ZLIB_INTERNAL zmemcpy(dest, source, len)
150
+ Bytef* dest;
151
+ const Bytef* source;
152
+ uInt len;
153
+ {
154
+ if (len == 0) return;
155
+ do {
156
+ *dest++ = *source++; /* ??? to be unrolled */
157
+ } while (--len != 0);
158
+ }
159
+
160
+ int ZLIB_INTERNAL zmemcmp(s1, s2, len)
161
+ const Bytef* s1;
162
+ const Bytef* s2;
163
+ uInt len;
164
+ {
165
+ uInt j;
166
+
167
+ for (j = 0; j < len; j++) {
168
+ if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
169
+ }
170
+ return 0;
171
+ }
172
+
173
+ void ZLIB_INTERNAL zmemzero(dest, len)
174
+ Bytef* dest;
175
+ uInt len;
176
+ {
177
+ if (len == 0) return;
178
+ do {
179
+ *dest++ = 0; /* ??? to be unrolled */
180
+ } while (--len != 0);
181
+ }
182
+ #endif
183
+
184
+ #ifndef Z_SOLO
185
+
186
+ #ifdef SYS16BIT
187
+
188
+ #ifdef __TURBOC__
189
+ /* Turbo C in 16-bit mode */
190
+
191
+ # define MY_ZCALLOC
192
+
193
+ /* Turbo C malloc() does not allow dynamic allocation of 64K bytes
194
+ * and farmalloc(64K) returns a pointer with an offset of 8, so we
195
+ * must fix the pointer. Warning: the pointer must be put back to its
196
+ * original form in order to free it, use zcfree().
197
+ */
198
+
199
+ #define MAX_PTR 10
200
+ /* 10*64K = 640K */
201
+
202
+ local int next_ptr = 0;
203
+
204
+ typedef struct ptr_table_s {
205
+ voidpf org_ptr;
206
+ voidpf new_ptr;
207
+ } ptr_table;
208
+
209
+ local ptr_table table[MAX_PTR];
210
+ /* This table is used to remember the original form of pointers
211
+ * to large buffers (64K). Such pointers are normalized with a zero offset.
212
+ * Since MSDOS is not a preemptive multitasking OS, this table is not
213
+ * protected from concurrent access. This hack doesn't work anyway on
214
+ * a protected system like OS/2. Use Microsoft C instead.
215
+ */
216
+
217
+ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
218
+ {
219
+ voidpf buf;
220
+ ulg bsize = (ulg)items*size;
221
+
222
+ (void)opaque;
223
+
224
+ /* If we allocate less than 65520 bytes, we assume that farmalloc
225
+ * will return a usable pointer which doesn't have to be normalized.
226
+ */
227
+ if (bsize < 65520L) {
228
+ buf = farmalloc(bsize);
229
+ if (*(ush*)&buf != 0) return buf;
230
+ } else {
231
+ buf = farmalloc(bsize + 16L);
232
+ }
233
+ if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
234
+ table[next_ptr].org_ptr = buf;
235
+
236
+ /* Normalize the pointer to seg:0 */
237
+ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
238
+ *(ush*)&buf = 0;
239
+ table[next_ptr++].new_ptr = buf;
240
+ return buf;
241
+ }
242
+
243
+ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
244
+ {
245
+ int n;
246
+
247
+ (void)opaque;
248
+
249
+ if (*(ush*)&ptr != 0) { /* object < 64K */
250
+ farfree(ptr);
251
+ return;
252
+ }
253
+ /* Find the original pointer */
254
+ for (n = 0; n < next_ptr; n++) {
255
+ if (ptr != table[n].new_ptr) continue;
256
+
257
+ farfree(table[n].org_ptr);
258
+ while (++n < next_ptr) {
259
+ table[n-1] = table[n];
260
+ }
261
+ next_ptr--;
262
+ return;
263
+ }
264
+ Assert(0, "zcfree: ptr not found");
265
+ }
266
+
267
+ #endif /* __TURBOC__ */
268
+
269
+
270
+ #ifdef M_I86
271
+ /* Microsoft C in 16-bit mode */
272
+
273
+ # define MY_ZCALLOC
274
+
275
+ #if (!defined(_MSC_VER) || (_MSC_VER <= 600))
276
+ # define _halloc halloc
277
+ # define _hfree hfree
278
+ #endif
279
+
280
+ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
281
+ {
282
+ (void)opaque;
283
+ return _halloc((long)items, size);
284
+ }
285
+
286
+ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
287
+ {
288
+ (void)opaque;
289
+ _hfree(ptr);
290
+ }
291
+
292
+ #endif /* M_I86 */
293
+
294
+ #endif /* SYS16BIT */
295
+
296
+
297
+ #ifndef MY_ZCALLOC /* Any system without a special alloc function */
298
+
299
+ #ifndef STDC
300
+ extern voidp malloc OF((uInt size));
301
+ extern voidp calloc OF((uInt items, uInt size));
302
+ extern void free OF((voidpf ptr));
303
+ #endif
304
+
305
+ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
306
+ voidpf opaque;
307
+ unsigned items;
308
+ unsigned size;
309
+ {
310
+ (void)opaque;
311
+ return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
312
+ (voidpf)calloc(items, size);
313
+ }
314
+
315
+ void ZLIB_INTERNAL zcfree (opaque, ptr)
316
+ voidpf opaque;
317
+ voidpf ptr;
318
+ {
319
+ (void)opaque;
320
+ free(ptr);
321
+ }
322
+
323
+ #endif /* MY_ZCALLOC */
324
+
325
+ #endif /* !Z_SOLO */