1 #ifndef APE_ALL_H
2 #define APE_ALL_H
3 
4 #include "config.h"
5 #include "MACUtils.h"
6 
7 /*****************************************************************************************
8 Unicode
9 *****************************************************************************************/
10 #ifdef _UNICODE
11 
12 #else
13 
14 #endif // #ifdef _UNICODE
15 
16 
17 /*****************************************************************************************
18 Global includes
19 *****************************************************************************************/
20 #ifndef BUILD_CROSS_PLATFORM
21     #include <windows.h>
22 #endif
23 
24 #ifdef _WIN32
25     #include <mmsystem.h>
26     #include <tchar.h>
27 #else
28     #include <unistd.h>
29     #include <time.h>
30     #include <sys/time.h>
31     #include <sys/types.h>
32     #include <sys/stat.h>
33     #include <wchar.h>
34     #include "NoWindows.h"
35 #endif
36 
37 #include <stdlib.h>
38 #include <memory.h>
39 #include <stdio.h>
40 #include <math.h>
41 #include <string.h>
42 #include "SmartPtr.h"
43 
44 /*****************************************************************************************
45 Global compiler settings (useful for porting)
46 *****************************************************************************************/
47 
48 #define ENABLE_COMPRESSION_MODE_FAST
49 #define ENABLE_COMPRESSION_MODE_NORMAL
50 #define ENABLE_COMPRESSION_MODE_HIGH
51 #define ENABLE_COMPRESSION_MODE_EXTRA_HIGH
52 
53 #ifdef _WIN32
54     typedef unsigned __int32                            uint32;
55     typedef __int32                                     int32;
56     typedef unsigned __int16                            uint16;
57     typedef __int16                                     int16;
58     typedef unsigned __int8                             uint8;
59     typedef __int8                                      int8;
60     typedef long long                                   int64;
61     typedef unsigned long long                          uint64;
62     typedef char                                        str_ansi;
63     typedef unsigned char                               str_utf8;
64     typedef wchar_t                                     str_utf16;
65 
66     #define IO_USE_WIN_FILE_IO
67     #define IO_HEADER_FILE                              "WinFileIO.h"
68     #define IO_CLASS_NAME                               CWinFileIO
69     #define DLLEXPORT                                   __declspec(dllexport)
70     #define SLEEP(MILLISECONDS)                         ::Sleep(MILLISECONDS)
71     #define MESSAGEBOX(PARENT, TEXT, CAPTION, TYPE)     ::MessageBox(PARENT, TEXT, CAPTION, TYPE)
72     #define PUMP_MESSAGE_LOOP                           { MSG Msg; while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) != 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } }
73     #define ODS                                         OutputDebugString
74     #define TICK_COUNT_TYPE                             unsigned long
75     #define TICK_COUNT_READ(VARIABLE)                   VARIABLE = GetTickCount()
76     #define TICK_COUNT_FREQ                             1000
77 #else
78     #define IO_USE_STD_LIB_FILE_IO
79     #define IO_HEADER_FILE                              "StdLibFileIO.h"
80     #define IO_CLASS_NAME                               CStdLibFileIO
81     #define DLLEXPORT
82     #define SLEEP(MILLISECONDS)                         { struct timespec t; t.tv_sec = (MILLISECONDS) / 1000; t.tv_nsec = (MILLISECONDS) % 1000 * 1000000; nanosleep(&t, NULL); }
83     #define MESSAGEBOX(PARENT, TEXT, CAPTION, TYPE)
84     #define PUMP_MESSAGE_LOOP
85     #define ODS                                         printf
86     #define TICK_COUNT_TYPE                             unsigned long long
87     #define TICK_COUNT_READ(VARIABLE)                   { struct timeval t; gettimeofday(&t, NULL); VARIABLE = t.tv_sec * 1000000LLU + t.tv_usec; }
88     #define TICK_COUNT_FREQ                             1000000
89 #endif
90 
91 #ifdef IS_64BIT
92 /*
93     typedef uint64 ptr_t;
94     typedef int64 intptr_t;
95     typedef uint64 uintptr_t;
96 */
97 #else
98 /*
99     typedef uint32 prt_t;
100     typedef int32 intptr_t;
101     typedef uint32 uintptr_t;
102 */
103 #endif
104 
105 /*****************************************************************************************
106 Global defines
107 *****************************************************************************************/
108 #define MAC_VERSION_NUMBER                              3990
109 #define MAC_VERSION_STRING                              _T("3.99")
110 #define MAC_NAME                                        _T("Monkey's Audio 3.99")
111 #define PLUGIN_NAME                                     "Monkey's Audio Player v3.99"
112 #define MJ_PLUGIN_NAME                                  _T("APE Plugin (v3.99)")
113 #ifdef SHNTOOL
114 #define CONSOLE_NAME                                    "-- Monkey's Audio Console Front End (v " VERSION ") (c) Matthew T. Ashland --\n"
115 #else
116 #define CONSOLE_NAME                                    "--- Monkey's Audio Console Front End (v 3.99) (c) Matthew T. Ashland ---\n"
117 #endif
118 #define PLUGIN_ABOUT                                    _T("Monkey's Audio Player v3.99\nCopyrighted (c) 2000-2004 by Matthew T. Ashland")
119 #define MAC_DLL_INTERFACE_VERSION_NUMBER                1000
120 
121 /*****************************************************************************************
122 Byte order
123 *****************************************************************************************/
124 #if defined(__DragonFly__)
125 #include <sys/endian.h>
126 #endif
127 
128 #ifndef __LITTLE_ENDIAN
129 #define __LITTLE_ENDIAN     1234
130 #endif
131 #ifndef __BIG_ENDIAN
132 #define __BIG_ENDIAN        4321
133 #endif
134 
135 #ifdef WORDS_BIGENDIAN
136 
137 #ifndef __BYTE_ORDER
138 #define __BYTE_ORDER        __BIG_ENDIAN
139 #endif
140 
141 #else
142 
143 #ifndef __BYTE_ORDER
144 #define __BYTE_ORDER        __LITTLE_ENDIAN
145 #endif
146 
147 #endif
148 
149 #ifdef WORDS_BIGENDIAN
150 
swap_int16(int16 x)151 static inline int16 swap_int16(int16 x)
152 {
153     int16 y = x;
154 
155 #if __BYTE_ORDER == __BIG_ENDIAN
156     y = ((x & 0x00ff) << 8) |
157 	((x & 0xff00) >> 8);
158 #endif
159     return y;
160 }
161 
swap_int32(int32 x)162 static inline int32 swap_int32(int32 x)
163 {
164     int32 y = x;
165 
166 #if __BYTE_ORDER == __BIG_ENDIAN
167     y = ((x & 0x000000ff) << 24) |
168 	((x & 0x0000ff00) << 8) |
169 	((x & 0x00ff0000) >> 8) |
170 	((x & 0xff000000) >> 24);
171 #endif
172     return y;
173 }
174 
175 #else
176 
177 #define swap_int16(a) (a)
178 #define swap_int32(a) (a)
179 
180 #endif
181 
182 /*****************************************************************************************
183 Macros
184 *****************************************************************************************/
185 #define MB(TEST) MESSAGEBOX(NULL, TEST, _T("Information"), MB_OK);
186 #define MBN(NUMBER) { TCHAR cNumber[16]; _stprintf(cNumber, _T("%d"), NUMBER); MESSAGEBOX(NULL, cNumber, _T("Information"), MB_OK); }
187 
188 #define SAFE_DELETE(POINTER) if (POINTER) { delete POINTER; POINTER = NULL; }
189 #define SAFE_ARRAY_DELETE(POINTER) if (POINTER) { delete [] POINTER; POINTER = NULL; }
190 #define SAFE_VOID_CLASS_DELETE(POINTER, Class) { Class *pClass = (Class *) POINTER; if (pClass) { delete pClass; POINTER = NULL; } }
191 #define SAFE_FILE_CLOSE(HANDLE) if (HANDLE != INVALID_HANDLE_VALUE) { CloseHandle(HANDLE); HANDLE = INVALID_HANDLE_VALUE; }
192 
193 #define ODN(NUMBER) { TCHAR cNumber[16]; _stprintf(cNumber, _T("%d\n"), int(NUMBER)); ODS(cNumber); }
194 
195 #define CATCH_ERRORS(CODE) try { CODE } catch(...) { }
196 
197 #define RETURN_ON_ERROR(FUNCTION) {    int nRetVal = FUNCTION; if (nRetVal != 0) { return nRetVal; } }
198 #define RETURN_VALUE_ON_ERROR(FUNCTION, VALUE) { int nRetVal = FUNCTION; if (nRetVal != 0) { return VALUE; } }
199 #define RETURN_ON_EXCEPTION(CODE, VALUE) { try { CODE } catch(...) { return VALUE; } }
200 
201 #define THROW_ON_ERROR(CODE) { int nRetVal = CODE; if (nRetVal != 0) throw(nRetVal); }
202 
203 #define EXPAND_1_TIMES(CODE) CODE
204 #define EXPAND_2_TIMES(CODE) CODE CODE
205 #define EXPAND_3_TIMES(CODE) CODE CODE CODE
206 #define EXPAND_4_TIMES(CODE) CODE CODE CODE CODE
207 #define EXPAND_5_TIMES(CODE) CODE CODE CODE CODE CODE
208 #define EXPAND_6_TIMES(CODE) CODE CODE CODE CODE CODE CODE
209 #define EXPAND_7_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE
210 #define EXPAND_8_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE
211 #define EXPAND_9_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE
212 #define EXPAND_12_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
213 #define EXPAND_14_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
214 #define EXPAND_15_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
215 #define EXPAND_16_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
216 #define EXPAND_30_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
217 #define EXPAND_31_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
218 #define EXPAND_32_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
219 #define EXPAND_64_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE
220 #define EXPAND_N_TIMES(NUMBER, CODE) EXPAND_##NUMBER##_TIMES(CODE)
221 
222 #define UNROLL_4_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3)
223 #define UNROLL_8_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7)
224 #define UNROLL_15_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14)
225 #define UNROLL_16_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15)
226 #define UNROLL_64_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) MACRO(16) MACRO(17) MACRO(18) MACRO(19) MACRO(20) MACRO(21) MACRO(22) MACRO(23) MACRO(24) MACRO(25) MACRO(26) MACRO(27) MACRO(28) MACRO(29) MACRO(30) MACRO(31) MACRO(32) MACRO(33) MACRO(34) MACRO(35) MACRO(36) MACRO(37) MACRO(38) MACRO(39) MACRO(40) MACRO(41) MACRO(42) MACRO(43) MACRO(44) MACRO(45) MACRO(46) MACRO(47) MACRO(48) MACRO(49) MACRO(50) MACRO(51) MACRO(52) MACRO(53) MACRO(54) MACRO(55) MACRO(56) MACRO(57) MACRO(58) MACRO(59) MACRO(60) MACRO(61) MACRO(62) MACRO(63)
227 #define UNROLL_128_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) MACRO(16) MACRO(17) MACRO(18) MACRO(19) MACRO(20) MACRO(21) MACRO(22) MACRO(23) MACRO(24) MACRO(25) MACRO(26) MACRO(27) MACRO(28) MACRO(29) MACRO(30) MACRO(31) MACRO(32) MACRO(33) MACRO(34) MACRO(35) MACRO(36) MACRO(37) MACRO(38) MACRO(39) MACRO(40) MACRO(41) MACRO(42) MACRO(43) MACRO(44) MACRO(45) MACRO(46) MACRO(47) MACRO(48) MACRO(49) MACRO(50) MACRO(51) MACRO(52) MACRO(53) MACRO(54) MACRO(55) MACRO(56) MACRO(57) MACRO(58) MACRO(59) MACRO(60) MACRO(61) MACRO(62) MACRO(63) MACRO(64) MACRO(65) MACRO(66) MACRO(67) MACRO(68) MACRO(69) MACRO(70) MACRO(71) MACRO(72) MACRO(73) MACRO(74) MACRO(75) MACRO(76) MACRO(77) MACRO(78) MACRO(79) MACRO(80) MACRO(81) MACRO(82) MACRO(83) MACRO(84) MACRO(85) MACRO(86) MACRO(87) MACRO(88) MACRO(89) MACRO(90) MACRO(91) MACRO(92) MACRO(93) MACRO(94) MACRO(95) MACRO(96) MACRO(97) MACRO(98) MACRO(99) MACRO(100) MACRO(101) MACRO(102) MACRO(103) MACRO(104) MACRO(105) MACRO(106) MACRO(107) MACRO(108) MACRO(109) MACRO(110) MACRO(111) MACRO(112) MACRO(113) MACRO(114) MACRO(115) MACRO(116) MACRO(117) MACRO(118) MACRO(119) MACRO(120) MACRO(121) MACRO(122) MACRO(123) MACRO(124) MACRO(125) MACRO(126) MACRO(127)
228 #define UNROLL_256_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) MACRO(16) MACRO(17) MACRO(18) MACRO(19) MACRO(20) MACRO(21) MACRO(22) MACRO(23) MACRO(24) MACRO(25) MACRO(26) MACRO(27) MACRO(28) MACRO(29) MACRO(30) MACRO(31) MACRO(32) MACRO(33) MACRO(34) MACRO(35) MACRO(36) MACRO(37) MACRO(38) MACRO(39) MACRO(40) MACRO(41) MACRO(42) MACRO(43) MACRO(44) MACRO(45) MACRO(46) MACRO(47) MACRO(48) MACRO(49) MACRO(50) MACRO(51) MACRO(52) MACRO(53) MACRO(54) MACRO(55) MACRO(56) MACRO(57) MACRO(58) MACRO(59) MACRO(60) MACRO(61) MACRO(62) MACRO(63) MACRO(64) MACRO(65) MACRO(66) MACRO(67) MACRO(68) MACRO(69) MACRO(70) MACRO(71) MACRO(72) MACRO(73) MACRO(74) MACRO(75) MACRO(76) MACRO(77) MACRO(78) MACRO(79) MACRO(80) MACRO(81) MACRO(82) MACRO(83) MACRO(84) MACRO(85) MACRO(86) MACRO(87) MACRO(88) MACRO(89) MACRO(90) MACRO(91) MACRO(92) MACRO(93) MACRO(94) MACRO(95) MACRO(96) MACRO(97) MACRO(98) MACRO(99) MACRO(100) MACRO(101) MACRO(102) MACRO(103) MACRO(104) MACRO(105) MACRO(106) MACRO(107) MACRO(108) MACRO(109) MACRO(110) MACRO(111) MACRO(112) MACRO(113) MACRO(114) MACRO(115) MACRO(116) MACRO(117) MACRO(118) MACRO(119) MACRO(120) MACRO(121) MACRO(122) MACRO(123) MACRO(124) MACRO(125) MACRO(126) MACRO(127)    \
229     MACRO(128) MACRO(129) MACRO(130) MACRO(131) MACRO(132) MACRO(133) MACRO(134) MACRO(135) MACRO(136) MACRO(137) MACRO(138) MACRO(139) MACRO(140) MACRO(141) MACRO(142) MACRO(143) MACRO(144) MACRO(145) MACRO(146) MACRO(147) MACRO(148) MACRO(149) MACRO(150) MACRO(151) MACRO(152) MACRO(153) MACRO(154) MACRO(155) MACRO(156) MACRO(157) MACRO(158) MACRO(159) MACRO(160) MACRO(161) MACRO(162) MACRO(163) MACRO(164) MACRO(165) MACRO(166) MACRO(167) MACRO(168) MACRO(169) MACRO(170) MACRO(171) MACRO(172) MACRO(173) MACRO(174) MACRO(175) MACRO(176) MACRO(177) MACRO(178) MACRO(179) MACRO(180) MACRO(181) MACRO(182) MACRO(183) MACRO(184) MACRO(185) MACRO(186) MACRO(187) MACRO(188) MACRO(189) MACRO(190) MACRO(191) MACRO(192) MACRO(193) MACRO(194) MACRO(195) MACRO(196) MACRO(197) MACRO(198) MACRO(199) MACRO(200) MACRO(201) MACRO(202) MACRO(203) MACRO(204) MACRO(205) MACRO(206) MACRO(207) MACRO(208) MACRO(209) MACRO(210) MACRO(211) MACRO(212) MACRO(213) MACRO(214) MACRO(215) MACRO(216) MACRO(217) MACRO(218) MACRO(219) MACRO(220) MACRO(221) MACRO(222) MACRO(223) MACRO(224) MACRO(225) MACRO(226) MACRO(227) MACRO(228) MACRO(229) MACRO(230) MACRO(231) MACRO(232) MACRO(233) MACRO(234) MACRO(235) MACRO(236) MACRO(237) MACRO(238) MACRO(239) MACRO(240) MACRO(241) MACRO(242) MACRO(243) MACRO(244) MACRO(245) MACRO(246) MACRO(247) MACRO(248) MACRO(249) MACRO(250) MACRO(251) MACRO(252) MACRO(253) MACRO(254) MACRO(255)
230 
231 /*****************************************************************************************
232 Error Codes
233 *****************************************************************************************/
234 
235 // success
236 #ifndef ERROR_SUCCESS
237 #define ERROR_SUCCESS                                   0
238 #endif
239 
240 // file and i/o errors (1000's)
241 #define ERROR_IO_READ                                   1000
242 #define ERROR_IO_WRITE                                  1001
243 #define ERROR_INVALID_INPUT_FILE                        1002
244 #define ERROR_INVALID_OUTPUT_FILE                       1003
245 #define ERROR_INPUT_FILE_TOO_LARGE                      1004
246 #define ERROR_INPUT_FILE_UNSUPPORTED_BIT_DEPTH          1005
247 #define ERROR_INPUT_FILE_UNSUPPORTED_SAMPLE_RATE        1006
248 #define ERROR_INPUT_FILE_UNSUPPORTED_CHANNEL_COUNT      1007
249 #define ERROR_INPUT_FILE_TOO_SMALL                      1008
250 #define ERROR_INVALID_CHECKSUM                          1009
251 #define ERROR_DECOMPRESSING_FRAME                       1010
252 #define ERROR_INITIALIZING_UNMAC                        1011
253 #define ERROR_INVALID_FUNCTION_PARAMETER                1012
254 #define ERROR_UNSUPPORTED_FILE_TYPE                     1013
255 #define ERROR_UPSUPPORTED_FILE_VERSION                  1014
256 
257 // memory errors (2000's)
258 #define ERROR_INSUFFICIENT_MEMORY                       2000
259 
260 // dll errors (3000's)
261 #define ERROR_LOADINGAPE_DLL                            3000
262 #define ERROR_LOADINGAPE_INFO_DLL                       3001
263 #define ERROR_LOADING_UNMAC_DLL                         3002
264 
265 // general and misc errors
266 #define ERROR_USER_STOPPED_PROCESSING                   4000
267 #define ERROR_SKIPPED                                   4001
268 
269 // programmer errors
270 #define ERROR_BAD_PARAMETER                             5000
271 
272 // IAPECompress errors
273 #define ERROR_APE_COMPRESS_TOO_MUCH_DATA                6000
274 
275 // unknown error
276 #define ERROR_UNDEFINED                                -1
277 
278 #define ERROR_EXPLANATION \
279     { ERROR_IO_READ                               , "I/O read error" },                         \
280     { ERROR_IO_WRITE                              , "I/O write error" },                        \
281     { ERROR_INVALID_INPUT_FILE                    , "invalid input file" },                     \
282     { ERROR_INVALID_OUTPUT_FILE                   , "invalid output file" },                    \
283     { ERROR_INPUT_FILE_TOO_LARGE                  , "input file file too large" },              \
284     { ERROR_INPUT_FILE_UNSUPPORTED_BIT_DEPTH      , "input file unsupported bit depth" },       \
285     { ERROR_INPUT_FILE_UNSUPPORTED_SAMPLE_RATE    , "input file unsupported sample rate" },     \
286     { ERROR_INPUT_FILE_UNSUPPORTED_CHANNEL_COUNT  , "input file unsupported channel count" },   \
287     { ERROR_INPUT_FILE_TOO_SMALL                  , "input file too small" },                   \
288     { ERROR_INVALID_CHECKSUM                      , "invalid checksum" },                       \
289     { ERROR_DECOMPRESSING_FRAME                   , "decompressing frame" },                    \
290     { ERROR_INITIALIZING_UNMAC                    , "initializing unmac" },                     \
291     { ERROR_INVALID_FUNCTION_PARAMETER            , "invalid function parameter" },             \
292     { ERROR_UNSUPPORTED_FILE_TYPE                 , "unsupported file type" },                  \
293     { ERROR_INSUFFICIENT_MEMORY                   , "insufficient memory" },                    \
294     { ERROR_LOADINGAPE_DLL                        , "loading MAC.dll" },                        \
295     { ERROR_LOADINGAPE_INFO_DLL                   , "loading MACinfo.dll" },                    \
296     { ERROR_LOADING_UNMAC_DLL                     , "loading UnMAC.dll" },                      \
297     { ERROR_USER_STOPPED_PROCESSING               , "user stopped processing" },                \
298     { ERROR_SKIPPED                               , "skipped" },                                \
299     { ERROR_BAD_PARAMETER                         , "bad parameter" },                          \
300     { ERROR_APE_COMPRESS_TOO_MUCH_DATA            , "APE compress too much data" },             \
301     { ERROR_UNDEFINED                             , "undefined" },                              \
302 
303 #endif // #ifndef APE_ALL_H
304