2 Skelton for retropc emulator
4 Author : Takeda.Toshiya
13 // move shared codes to DLL???
15 // #define USE_SHARED_DLL
18 // use zlib to decompress gzip file???
20 #if defined(_MSC_VER) && (_MSC_VER >= 1500)
26 // check environemnt/language
29 // Microsoft Visual C++
31 // variable scope of 'for' loop for Microsoft Visual C++ 6.0
32 #define for if(0);else for
35 // Microsoft Visual C++ 6.0 or later
36 #define SUPPORT_TCHAR_TYPE
39 // Microsoft Visual C++ 8.0 (2005) or later
40 #define SUPPORT_SECURE_FUNCTIONS
41 #pragma warning( disable : 4819 )
42 //#pragma warning( disable : 4995 )
43 #pragma warning( disable : 4996 )
46 // Microsoft Visual C++ 12.0 (2013) or later
47 #define SUPPORT_CPLUSPLUS_11
49 #define CSP_OS_WINDOWS
51 // Win32, but not Microsoft Visual C++
52 #define SUPPORT_TCHAR_TYPE
53 // #define SUPPORT_SECURE_FUNCTIONS
57 #if defined(Q_OS_CYGWIN)
58 #define CSP_OS_GCC_CYGWIN
59 #define CSP_OS_WINDOWS
60 #elif defined(Q_OS_WIN) || defined(__WIN32) || defined(__WIN64)
61 #define CSP_OS_GCC_WINDOWS
62 #define CSP_OS_WINDOWS
64 #define DLL_PREFIX __declspec(dllexport)
65 #define DLL_PREFIX_I __declspec(dllimport)
68 #define CSP_OS_GCC_GENERIC
69 #define CSP_OS_GENERIC
73 #if defined(__clang__)
74 #define __CSP_COMPILER_CLANG
76 #define __CSP_COMPILER_GCC
78 #define SUPPORT_CPLUSPLUS_11
84 #ifndef SUPPORT_CPLUSPLUS_11
85 #if defined(__cplusplus) && (__cplusplus > 199711L)
86 #define SUPPORT_CPLUSPLUS_11
89 #ifndef SUPPORT_TCHAR_TYPE
90 // secure functions need tchar type
91 #undef SUPPORT_SECURE_FUNCTIONS
100 // include common header files
101 #ifdef SUPPORT_TCHAR_TYPE
104 #ifdef SUPPORT_CPLUSPLUS_11
111 #include <typeinfo.h>
118 // include environment/language dependent header files
121 #include <windowsx.h>
123 #include <mmsystem.h>
134 #if defined(__MINGW32__) || (__MINGW64__)
139 #include <QtCore/QString>
140 #include <QtCore/QFile>
142 #include <sys/param.h>
145 #define _MAX_PATH 2048
149 #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
150 #if defined(__BYTE_ORDER) && (defined(__LITTLE_ENDIAN) || defined(__BIG_ENDIAN))
151 #if __BYTE_ORDER == __LITTLE_ENDIAN
152 #define __LITTLE_ENDIAN__
153 #elif __BYTE_ORDER == __BIG_ENDIAN
154 #define __BIG_ENDIAN__
156 #elif defined(SDL_BYTEORDER) && (defined(SDL_LIL_ENDIAN) || defined(SDL_BIG_ENDIAN))
157 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
158 #define __LITTLE_ENDIAN__
159 #elif SDL_BYTEORDER == SDL_BIG_ENDIAN
160 #define __BIG_ENDIAN__
162 #elif defined(WORDS_LITTLEENDIAN)
163 #define __LITTLE_ENDIAN__
164 #elif defined(WORDS_BIGENDIAN)
165 #define __BIG_ENDIAN__
168 #if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
169 // may be Microsoft Visual C++
170 #define __LITTLE_ENDIAN__
174 #ifndef SUPPORT_TCHAR_TYPE
180 #ifndef SUPPORT_CPLUSPLUS_11
182 typedef signed char int8_t;
185 typedef signed short int16_t;
188 typedef signed int int32_t;
191 typedef signed long long int64_t;
194 typedef unsigned char uint8_t;
197 typedef unsigned short uint16_t;
200 typedef unsigned int uint32_t;
203 typedef unsigned long long uint64_t;
209 typedef _TCHAR* LPTSTR;
212 typedef const _TCHAR* LPCTSTR;
224 typedef uint8_t BYTE;
227 typedef uint16_t WORD;
230 typedef uint32_t DWORD;
233 typedef uint64_t QWORD;
239 typedef int16_t INT16;
242 typedef int32_t INT32;
245 typedef int64_t INT64;
248 typedef uint8_t UINT8;
251 typedef uint16_t UINT16;
254 typedef uint32_t UINT32;
257 typedef uint64_t UINT64;
263 typedef unsigned int UINT;
269 #ifdef __BIG_ENDIAN__
276 #ifdef __BIG_ENDIAN__
285 inline void read_2bytes_le_from(uint8_t *t)
287 b.l = t[0]; b.h = t[1];
289 inline void write_2bytes_le_to(uint8_t *t)
291 t[0] = b.l; t[1] = b.h;
293 inline void read_2bytes_be_from(uint8_t *t)
295 b.h = t[0]; b.l = t[1];
297 inline void write_2bytes_be_to(uint8_t *t)
299 t[0] = b.h; t[1] = b.l;
302 inline void set_2bytes_be_from(uint16_t n)
311 b.l = bigv.b.l; b.h = bigv.b.h;
313 inline void set_2bytes_le_from(uint16_t n)
322 b.l = littlev.b.l; b.h = littlev.b.h;
324 inline uint16_t get_2bytes_be_to()
332 bigv.b.l = b.l; bigv.b.h = b.h;
335 inline uint16_t get_2bytes_le_to()
343 littlev.b.l = b.l; littlev.b.h = b.h;
351 #ifdef __BIG_ENDIAN__
352 uint8_t h3, h2, h, l;
354 uint8_t l, h, h2, h3;
358 #ifdef __BIG_ENDIAN__
365 #ifdef __BIG_ENDIAN__
372 #ifdef __BIG_ENDIAN__
379 #ifdef __BIG_ENDIAN__
388 inline void read_2bytes_le_from(uint8_t *t)
390 b.l = t[0]; b.h = t[1]; b.h2 = b.h3 = 0;
392 inline void write_2bytes_le_to(uint8_t *t)
394 t[0] = b.l; t[1] = b.h;
396 inline void read_2bytes_be_from(uint8_t *t)
398 b.h3 = b.h2 = 0; b.h = t[0]; b.l = t[1];
400 inline void write_2bytes_be_to(uint8_t *t)
402 t[0] = b.h; t[1] = b.l;
404 inline void read_4bytes_le_from(uint8_t *t)
406 b.l = t[0]; b.h = t[1]; b.h2 = t[2]; b.h3 = t[3];
408 inline void write_4bytes_le_to(uint8_t *t)
410 t[0] = b.l; t[1] = b.h; t[2] = b.h2; t[3] = b.h3;
412 inline void read_4bytes_be_from(uint8_t *t)
414 b.h3 = t[0]; b.h2 = t[1]; b.h = t[2]; b.l = t[3];
416 inline void write_4bytes_be_to(uint8_t *t)
418 t[0] = b.h3; t[1] = b.h2; t[2] = b.h; t[3] = b.l;
421 inline void set_2bytes_be_from(uint16_t n)
430 b.l = bigv.b.l; b.h = bigv.b.h;
433 inline void set_2bytes_le_from(uint16_t n)
442 b.l = littlev.b.l; b.h = littlev.b.h;
445 inline uint16_t get_2bytes_be_to()
453 bigv.b.l = b.l; bigv.b.h = b.h;
456 inline uint16_t get_2bytes_le_to()
464 littlev.b.l = b.l; littlev.b.h = b.h;
468 inline void set_4bytes_be_from(uint32_t n)
473 uint8_t h3, h2, h, l;
477 b.l = bigv.b.l; b.h = bigv.b.h; b.h2 = bigv.b.h2; b.h3 = bigv.b.h3;
479 inline void set_4bytes_le_from(uint32_t n)
484 uint8_t l, h, h2, h3;
488 b.l = littlev.b.l; b.h = littlev.b.h; b.h2 = littlev.b.h2; b.h3 = littlev.b.h3;
490 inline uint32_t get_4bytes_be_to()
495 uint8_t h3, h2, h, l;
498 bigv.b.l = b.l; bigv.b.h = b.h; bigv.b.h2 = b.h2; bigv.b.h3 = b.h3;
501 inline uint32_t get_4bytes_le_to()
506 uint8_t l, h, h2, h3;
509 littlev.b.l = b.l; littlev.b.h = b.h; littlev.b.h2 = b.h2; littlev.b.h3 = b.h3;
517 #ifdef __BIG_ENDIAN__
518 uint8_t h7, h6, h5, h4, h3, h2, h, l;
520 uint8_t l, h, h2, h3, h4, h5, h6, h7;
524 #ifdef __BIG_ENDIAN__
525 int8_t h7, h6, h5, h4, h3, h2, h, l;
527 int8_t l, h, h2, h3, h4, h5, h6, h7;
531 #ifdef __BIG_ENDIAN__
532 uint16_t h3, h2, h, l;
534 uint16_t l, h, h2, h3;
538 #ifdef __BIG_ENDIAN__
539 int16_t h3, h2, h, l;
541 int16_t l, h, h2, h3;
545 #ifdef __BIG_ENDIAN__
546 pair16_t h3, h2, h, l;
548 pair16_t l, h, h2, h3;
552 #ifdef __BIG_ENDIAN__
559 #ifdef __BIG_ENDIAN__
566 #ifdef __BIG_ENDIAN__
575 inline void read_2bytes_le_from(uint8_t *t)
577 b.l = t[0]; b.h = t[1]; b.h2 = b.h3 = 0;
578 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
580 inline void write_2bytes_le_to(uint8_t *t)
582 t[0] = b.l; t[1] = b.h;
584 inline void read_2bytes_be_from(uint8_t *t)
586 b.h3 = b.h2 = 0; b.h = t[0]; b.l = t[1];
587 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
589 inline void write_2bytes_be_to(uint8_t *t)
591 t[0] = b.h; t[1] = b.l;
593 inline void read_4bytes_le_from(uint8_t *t)
595 b.l = t[0]; b.h = t[1]; b.h2 = t[2]; b.h3 = t[3];
596 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
598 inline void write_4bytes_le_to(uint8_t *t)
600 t[0] = b.l; t[1] = b.h; t[2] = b.h2; t[3] = b.h3;
602 inline void read_4bytes_be_from(uint8_t *t)
604 b.h3 = t[0]; b.h2 = t[1]; b.h = t[2]; b.l = t[3];
605 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
607 inline void write_4bytes_be_to(uint8_t *t)
609 t[0] = b.h3; t[1] = b.h2; t[2] = b.h; t[3] = b.l;
612 inline void read_8bytes_le_from(uint8_t *t)
614 b.l = t[0]; b.h = t[1]; b.h2 = t[2]; b.h3 = t[3];
615 b.h4 = t[4]; b.h5 = t[5]; b.h6 = t[6]; b.h7 = t[7];
617 inline void write_8bytes_le_to(uint8_t *t)
619 t[0] = b.l; t[1] = b.h; t[2] = b.h2; t[3] = b.h3;
620 t[4] = b.h4; t[5] = b.h5; t[6] = b.h6; t[7] = b.h7;
622 inline void read_8bytes_be_from(uint8_t *t)
624 b.h7 = t[0]; b.h6 = t[1]; b.h5 = t[2]; b.h4 = t[3];
625 b.h3 = t[4]; b.h2 = t[5]; b.h = t[6]; b.l = t[7];
627 inline void write_8bytes_be_to(uint8_t *t)
629 t[0] = b.h7; t[1] = b.h6; t[2] = b.h5; t[3] = b.h4;
630 t[4] = b.h3; t[5] = b.h2; t[6] = b.h; t[7] = b.l;
633 inline void set_2bytes_be_from(uint16_t n)
642 b.l = bigv.b.l; b.h = bigv.b.h;
644 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
646 inline void set_2bytes_le_from(uint16_t n)
655 b.l = littlev.b.l; b.h = littlev.b.h;
657 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
659 inline uint16_t get_2bytes_be_to()
667 bigv.b.l = b.l; bigv.b.h = b.h;
670 inline uint16_t get_2bytes_le_to()
678 littlev.b.l = b.l; littlev.b.h = b.h;
682 inline void set_4bytes_be_from(uint32_t n)
687 uint8_t h3, h2, h, l;
691 b.l = bigv.b.l; b.h = bigv.b.h; b.h2 = bigv.b.h2; b.h3 = bigv.b.h3;
692 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
694 inline void set_4bytes_le_from(uint32_t n)
699 uint8_t l, h, h2, h3;
703 b.l = littlev.b.l; b.h = littlev.b.h; b.h2 = littlev.b.h2; b.h3 = littlev.b.h3;
704 b.h4 = 0; b.h5 = 0; b.h6 = 0; b.h7 = 0;
706 inline uint32_t get_4bytes_be_to()
711 uint8_t h3, h2, h, l;
714 bigv.b.l = b.l; bigv.b.h = b.h; bigv.b.h2 = b.h2; bigv.b.h3 = b.h3;
717 inline uint32_t get_4bytes_le_to()
722 uint8_t l, h, h2, h3;
725 littlev.b.l = b.l; littlev.b.h = b.h; littlev.b.h2 = b.h2; littlev.b.h3 = b.h3;
729 inline void set_8bytes_be_from(uint64_t n)
734 uint8_t h7, h6, h5, h4, h3, h2, h, l;
738 b.l = bigv.b.l; b.h = bigv.b.h; b.h2 = bigv.b.h2; b.h3 = bigv.b.h3;
739 b.h4 = bigv.b.h4; b.h5 = bigv.b.h5; b.h6 = bigv.b.h6; b.h7 = bigv.b.h7;
741 inline void set_8bytes_le_from(uint64_t n)
746 uint8_t l, h, h2, h3, h4, h5, h6, h7;
750 b.l = littlev.b.l; b.h = littlev.b.h; b.h2 = littlev.b.h2; b.h3 = littlev.b.h3;
751 b.h4 = littlev.b.h4; b.h5 = littlev.b.h5; b.h6 = littlev.b.h6; b.h7 = littlev.b.h7;
753 inline uint64_t get_8bytes_be_to()
758 uint8_t h7, h6, h5, h4, h3, h2, h, l;
761 bigv.b.l = b.l; bigv.b.h = b.h; bigv.b.h2 = b.h2; bigv.b.h3 = b.h3;
762 bigv.b.h4 = b.h4; bigv.b.h5 = b.h5; bigv.b.h6 = b.h6; bigv.b.h7 = b.h7;
765 inline uint64_t get_8bytes_le_to()
770 uint8_t l, h, h2, h3, h4, h5, h6, h7;
773 littlev.b.l = b.l; littlev.b.h = b.h; littlev.b.h2 = b.h2; littlev.b.h3 = b.h3;
774 littlev.b.h4 = b.h4; littlev.b.h5 = b.h5; littlev.b.h6 = b.h6; littlev.b.h7 = b.h7;
780 uint32_t DLL_PREFIX EndianToLittle_DWORD(uint32_t x);
781 uint16_t DLL_PREFIX EndianToLittle_WORD(uint16_t x);
782 uint32_t DLL_PREFIX EndianFromLittle_DWORD(uint32_t x);
783 uint16_t DLL_PREFIX EndianFromLittle_WORD(uint16_t x);
785 uint32_t DLL_PREFIX EndianToBig_DWORD(uint32_t x);
786 uint16_t DLL_PREFIX EndianToBig_WORD(uint16_t x);
787 uint32_t DLL_PREFIX EndianFromBig_DWORD(uint32_t x);
788 uint16_t DLL_PREFIX EndianFromBig_WORD(uint16_t x);
793 int DLL_PREFIX max(int a, int b);
794 unsigned int DLL_PREFIX max(int a, unsigned int b);
795 unsigned int DLL_PREFIX max(unsigned int a, int b);
796 unsigned int DLL_PREFIX max(unsigned int a, unsigned int b);
797 int DLL_PREFIX min(int a, int b);
798 int DLL_PREFIX min(unsigned int a, int b);
799 int DLL_PREFIX min(int a, unsigned int b);
800 unsigned int DLL_PREFIX min(unsigned int a, unsigned int b);
804 #if defined(__GNUC__) || defined(__CYGWIN__) || defined(Q_OS_CYGWIN)
805 #define stricmp(a,b) strcasecmp(a,b)
806 #define strnicmp(a,b,n) strncasecmp(a,b,n)
809 #ifndef SUPPORT_TCHAR_TYPE
811 #define _fgetts fgets
814 #define _ftprintf printf
817 #define _tfopen fopen
820 #define _tcscmp strcmp
823 #define _tcscpy strcpy
826 #define _tcsicmp stricmp
829 #define _tcslen strlen
832 #define _tcscat strcat
835 #define _tcsncat strncat
838 #define _tcsncpy strncpy
841 #define _tcsncicmp strnicmp
844 #define _tcschr strchr
847 #define _tcsrchr strrchr
850 #define _tcsstr strstr
853 #define _tcstok strtok
859 #define _tcstol strtol
862 #define _tcstoul strtoul
865 #define _stprintf sprintf
868 #define _vstprintf vsprintf
871 #define _taccess access
874 #define _tremove remove
877 #define _trename rename
881 #define _TEXT(x) __T(x)
884 #ifndef SUPPORT_SECURE_FUNCTIONS
888 // errno_t DLL_PREFIX my_tfopen_s(FILE** pFile, const _TCHAR *filename, const _TCHAR *mode);
889 errno_t DLL_PREFIX my_tcscat_s(_TCHAR *strDestination, size_t numberOfElements, const _TCHAR *strSource);
890 errno_t DLL_PREFIX my_strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource);
891 errno_t DLL_PREFIX my_tcscpy_s(_TCHAR *strDestination, size_t numberOfElements, const _TCHAR *strSource);
892 errno_t DLL_PREFIX my_strncpy_s(char *strDestination, size_t numberOfElements, const char *strSource, size_t count);
893 errno_t DLL_PREFIX my_tcsncpy_s(_TCHAR *strDestination, size_t numberOfElements, const _TCHAR *strSource, size_t count);
894 char * DLL_PREFIX my_strtok_s(char *strToken, const char *strDelimit, char **context);
895 _TCHAR *DLL_PREFIX my_tcstok_s(_TCHAR *strToken, const char *strDelimit, _TCHAR **context);
896 #define my_fprintf_s fprintf
897 #define my_ftprintf_s fprintf
898 int DLL_PREFIX my_sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format, ...);
899 int DLL_PREFIX my_swprintf_s(wchar_t *buffer, size_t sizeOfBuffer, const wchar_t *format, ...);
900 int DLL_PREFIX my_stprintf_s(_TCHAR *buffer, size_t sizeOfBuffer, const _TCHAR *format, ...);
901 int DLL_PREFIX my_vsprintf_s(char *buffer, size_t numberOfElements, const char *format, va_list argptr);
902 int DLL_PREFIX my_vstprintf_s(_TCHAR *buffer, size_t numberOfElements, const _TCHAR *format, va_list argptr);
904 // #define my_tfopen_s _tfopen_s
905 #define my_tcscat_s _tcscat_s
906 #define my_strcpy_s strcpy_s
907 #define my_tcscpy_s _tcscpy_s
908 #define my_strncpy_s strncpy_s
909 #define my_tcsncpy_s _tcsncpy_s
910 #define my_strtok_s strtok_s
911 #define my_tcstok_s _tcstok_s
912 #define my_fprintf_s fprintf_s
913 #define my_ftprintf_s _ftprintf_s
914 #define my_sprintf_s sprintf_s
915 #define my_swprintf_s swprintf_s
916 #define my_stprintf_s _stprintf_s
917 #define my_vsprintf_s vsprintf_s
918 #define my_vstprintf_s _vstprintf_s
923 void *DLL_PREFIX my_memcpy(void *dst, void *src, size_t len);
925 #define my_memcpy memcpy
929 #if defined(__clang__)
930 #define __DECL_VECTORIZED_LOOP _Pragma("clang loop vectorize(enable) interleave(enable)")
931 #elif defined(__GNUC__)
932 #define __DECL_VECTORIZED_LOOP _Pragma("GCC ivdep")
934 #define __DECL_VECTORIZED_LOOP
937 // C99 math functions
939 #define my_isfinite _finite
940 #define my_log2(v) (log((double)(v)) / log(2.0))
943 #define my_isfinite std::isfinite
949 BOOL MyWritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);
950 DWORD MyGetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);
951 UINT MyGetPrivateProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName);
952 // used only in winmain and win32 osd class
953 // #define ZeroMemory(p,s) memset(p,0x00,s)
954 // #define CopyMemory(t,f,s) memcpy(t,f,s)
956 #define MyWritePrivateProfileString WritePrivateProfileString
957 #define MyGetPrivateProfileString GetPrivateProfileString
958 #define MyGetPrivateProfileInt GetPrivateProfileInt
962 #if !defined(_RGB555) && !defined(_RGB565) && !defined(_RGB888)
966 #if defined(_RGB555) || defined(_RGB565)
967 typedef uint16_t scrntype_t;
968 scrntype_t DLL_PREFIX RGB_COLOR(uint32_t r, uint32_t g, uint32_t b);
969 scrntype_t DLL_PREFIX RGBA_COLOR(uint32_t r, uint32_t g, uint32_t b, uint32_t a);
970 uint8_t DLL_PREFIX R_OF_COLOR(scrntype_t c);
971 uint8_t DLL_PREFIX G_OF_COLOR(scrntype_t c);
972 uint8_t DLL_PREFIX B_OF_COLOR(scrntype_t c);
973 uint8_t DLL_PREFIX A_OF_COLOR(scrntype_t c);
974 #elif defined(_RGB888)
975 typedef uint32_t scrntype_t;
976 #if defined(__LITTLE_ENDIAN__)
977 #define RGB_COLOR(r, g, b) (((uint32_t)(b) << 16) | ((uint32_t)(g) << 8) | ((uint32_t)(r) << 0) | (0xff << 24))
978 #define RGBA_COLOR(r, g, b, a) (((uint32_t)(b) << 16) | ((uint32_t)(g) << 8) | ((uint32_t)(r) << 0) | ((uint32_t)(a) << 24))
979 #define R_OF_COLOR(c) (((c) ) & 0xff)
980 #define G_OF_COLOR(c) (((c) >> 8) & 0xff)
981 #define B_OF_COLOR(c) (((c) >> 16) & 0xff)
982 #define A_OF_COLOR(c) (((c) >> 24) & 0xff)
984 #define RGB_COLOR(r, g, b) (((uint32_t)(r) << 16) | ((uint32_t)(g) << 8) | ((uint32_t)(b) << 0) | (0xff << 24))
985 #define RGBA_COLOR(r, g, b, a) (((uint32_t)(r) << 16) | ((uint32_t)(g) << 8) | ((uint32_t)(b) << 0) | ((uint32_t)(a) << 24))
986 #define R_OF_COLOR(c) (((c) >> 16) & 0xff)
987 #define G_OF_COLOR(c) (((c) >> 8) & 0xff)
988 #define B_OF_COLOR(c) (((c) ) & 0xff)
989 #define A_OF_COLOR(c) (((c) >> 24) & 0xff)
993 inline uint64_t ExchangeEndianU64(uint64_t __in)
1000 __o.b.h4 = __i.b.h3;
1001 __o.b.h3 = __i.b.h4;
1002 __o.b.h2 = __i.b.h5;
1008 inline int64_t ExchangeEndianS64(uint64_t __in)
1014 __o.b.h5 = __i.b.h2;
1015 __o.b.h4 = __i.b.h3;
1016 __o.b.h3 = __i.b.h4;
1017 __o.b.h2 = __i.b.h5;
1022 inline uint32_t ExchangeEndianU32(uint32_t __in)
1033 inline int32_t ExchangeEndianS32(uint32_t __in)
1044 inline uint16_t ExchangeEndianU16(uint16_t __in)
1053 inline int16_t ExchangeEndianS16(uint16_t __in)
1072 wav_chunk_t riff_chunk;
1074 wav_chunk_t fmt_chunk;
1077 uint32_t sample_rate;
1078 uint32_t data_speed;
1079 uint16_t block_size;
1080 uint16_t sample_bits;
1084 // See http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html.
1087 wav_chunk_t riff_chunk;
1089 wav_chunk_t fmt_chunk;
1092 uint32_t sample_rate;
1093 uint32_t data_speed;
1094 uint16_t block_size;
1095 uint16_t sample_bits;
1096 uint16_t cbsize; // Extension size.Normaly set to 0.
1097 wav_chunk_t fact_chunk; // "fact", 4.
1098 } wav_header_float_t;
1101 // Use this before writing wav_data.
1102 bool DLL_PREFIX write_dummy_wav_header(void *__fio);
1103 // Use this after writng wav_data.
1104 bool DLL_PREFIX set_wav_header(wav_header_t *header, wav_chunk_t *first_chunk, uint16_t channels, uint32_t rate,
1105 uint16_t bits, size_t file_length);
1106 bool DLL_PREFIX load_wav_to_stereo(void *__fio, int16_t **left_buf, int16_t **right_buf, uint32_t *rate, int *got_samples);
1107 bool DLL_PREFIX load_wav_to_monoral(void *__fio, int16_t **buffer, uint32_t *rate, int *got_samples);
1110 const _TCHAR *DLL_PREFIX get_application_path();
1111 const _TCHAR *DLL_PREFIX get_initial_current_path();
1112 const _TCHAR *DLL_PREFIX create_local_path(const _TCHAR *format, ...);
1113 void DLL_PREFIX create_local_path(_TCHAR *file_path, int length, const _TCHAR *format, ...);
1114 const _TCHAR *DLL_PREFIX create_date_file_path(const _TCHAR *extension);
1115 bool DLL_PREFIX is_absolute_path(const _TCHAR *file_path);
1116 void DLL_PREFIX create_date_file_path(_TCHAR *file_path, int length, const _TCHAR *extension);
1117 bool DLL_PREFIX check_file_extension(const _TCHAR *file_path, const _TCHAR *ext);
1118 const _TCHAR *DLL_PREFIX get_file_path_without_extensiton(const _TCHAR *file_path);
1119 void DLL_PREFIX get_long_full_path_name(const _TCHAR* src, _TCHAR* dst, size_t dst_len);
1120 const _TCHAR* DLL_PREFIX get_parent_dir(const _TCHAR* file);
1123 const _TCHAR *DLL_PREFIX create_string(const _TCHAR* format, ...);
1124 const wchar_t *DLL_PREFIX char_to_wchar(const char *cs);
1125 const char *DLL_PREFIX wchar_to_char(const wchar_t *ws);
1126 const _TCHAR *DLL_PREFIX char_to_tchar(const char *cs);
1127 const char *DLL_PREFIX tchar_to_char(const _TCHAR *ts);
1128 const _TCHAR *DLL_PREFIX wchar_to_tchar(const wchar_t *ws);
1129 const wchar_t *DLL_PREFIX tchar_to_wchar(const _TCHAR *ts);
1133 void DLL_PREFIX common_initialize();
1135 int32_t DLL_PREFIX muldiv_s32(int32_t nNumber, int32_t nNumerator, int32_t nDenominator);
1136 uint32_t DLL_PREFIX muldiv_u32(uint32_t nNumber, uint32_t nNumerator, uint32_t nDenominator);
1138 uint32_t DLL_PREFIX get_crc32(uint8_t data[], int size);
1139 uint32_t DLL_PREFIX calc_crc32(uint32_t seed, uint8_t data[], int size);
1140 uint16_t DLL_PREFIX jis_to_sjis(uint16_t jis);
1142 int DLL_PREFIX decibel_to_volume(int decibel);
1143 int32_t DLL_PREFIX apply_volume(int32_t sample, int volume);
1145 #define array_length(array) (sizeof(array) / sizeof(array[0]))
1147 #define FROM_BCD(v) (((v) & 0x0f) + (((v) >> 4) & 0x0f) * 10)
1148 #define TO_BCD(v) ((int)(((v) % 100) / 10) << 4) | ((v) % 10)
1149 #define TO_BCD_LO(v) ((v) % 10)
1150 #define TO_BCD_HI(v) (int)(((v) % 100) / 10)
1153 #define LEAP_YEAR(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
1155 #define dll_cur_time_t DLL_PREFIX_I struct cur_time_s
1157 typedef DLL_PREFIX struct cur_time_s {
1158 int year, month, day, day_of_week, hour, minute, second;
1162 initialized = false;
1166 void update_day_of_week();
1167 bool process_state(void *f, bool loading);
1170 void DLL_PREFIX get_host_time(cur_time_t* cur_time);
1171 const _TCHAR DLL_PREFIX *get_lib_common_version();
1174 typedef struct symbol_s {
1177 struct symbol_s *next_symbol;
1180 const _TCHAR* DLL_PREFIX get_symbol(symbol_t *first_symbol, uint32_t addr);
1181 const _TCHAR* DLL_PREFIX get_value_or_symbol(symbol_t *first_symbol, const _TCHAR *format, uint32_t addr);
1182 const _TCHAR* DLL_PREFIX get_value_and_symbol(symbol_t *first_symbol, const _TCHAR *format, uint32_t addr);