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