00001
00007 #ifndef dkutil_c_OSIndependent__h
00008 #define dkutil_c_OSIndependent__h
00009
00010 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
00011 # pragma once
00012
00013 #else
00014
00015 #endif
00016
00017
00018 #include "dkcDefined.h"
00019 #include <limits.h>
00020
00021
00022 #if defined(_MSC_VER) || defined(WIN32)
00023 typedef unsigned __int64 QWORD;
00024 #else
00025 typedef unsigned long long QWORD;
00026 #endif
00027
00028
00029 #ifndef WIN32
00030
00031 #ifndef ULONGLONG
00032 # define ULONGLONG unsigned long long int
00033 #endif
00034
00035 #ifndef LONGLONG
00036 # define LONGLONG long long int
00037 #endif
00038
00039
00040 #ifndef ULONGLONG_MAX
00041 # define ULONGLONG_MAX DKINGYO_ULONGLONG_MAX
00042 #endif
00043 #ifndef LONGLONG_MAX
00044 # define LONGLONG_MAX DKINGYO_LONGLONG_MAX
00045 #endif
00046 #ifndef LONGLONG_MIN
00047 # define LONGLONG_MIN DKINGYO_LONGLONG_MIN
00048 #endif
00049
00050 #ifndef TRUE
00051 # define TRUE 1
00052 #endif
00053 #ifndef FALSE
00054 # define FALSE 0
00055 #endif
00056
00057 #ifndef NULL
00058 # define NULL 0
00059 #endif
00060
00061 # define dkcdPATH_SEP '/'
00062 # define dkcdPATH_SEP_STR "/"
00063 # define dkcdPATH_LIST_SEP ':'
00064 # define dkcdPATH_LIST_SEP_STR ":"
00065 # define dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c))
00066
00067 # define dkcmIS_INVALID_FILENAME_CHAR(c) ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
00068 || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') )
00069
00070 # define dkcmIS_INVALID_FOLDERNAME_CHAR(c) \
00071 dkcmIS_INVALID_FILENAME_CHAR(c)
00072
00073 #define dkcmIS_INVALID_PATH_CHAR(c) \
00074 ( ( (c)=='\\') || ((c)=='*') || ((c)=='?') || ((c)== '"') || \
00075 ((c) == '<') || ((c) == '>') || ((c) == '|') )
00076
00077
00078 typedef void *(*DKC_REALLOC_F_TYPE)(void *,size_t);
00079
00080 typedef int BOOL;
00081 typedef unsigned char BYTE;
00082
00083
00084
00085
00086 #ifdef _MT//MultiThread
00087 # define dkcdMultiThread
00088 #endif
00089
00090 #ifndef CALLBACK
00091 # define CALLBACK
00092 #endif
00093 #ifndef WINAPI
00094 # define WINAPI
00095 #endif
00096
00097 #else
00098
00099 #ifdef _MSC_VER
00100 # ifdef _DEBUG
00101 # ifndef DEBUG
00102 # define DEBUG
00103 # endif
00104 # else
00105 # ifndef NDEBUG
00106 # define NDEBUG
00107 # endif
00108 # endif
00109
00110 # pragma warning(disable:4115)//union{ } struct{ }
00111 # pragma warning(disable:4100)//引数が関数の本体で 1 度も参照されません。
00112 # pragma warning(disable:4206)//プリプロセス後のファイルが空です。 #if 0 #endif
00113 # pragma warning(disable:4710)//場合によってはインライン処理を行いません。
00114 # pragma warning(disable:4505)//参照されていないローカル関数は削除されました。
00115 #endif
00116
00117 # include <windows.h>
00118
00119
00120
00121
00122
00123 # ifndef CALLBACK
00124 # define CALLBACK __stdcall
00125 # endif
00126 # ifndef WINAPI
00127 # define WINAPI __stdcall
00128 # endif
00129
00130
00131
00132 # define dkcdPATH_SEP '\\'
00133 # define dkcdPATH_SEP_STR "\\"
00134 # define dkcdPATH_LIST_SEP ';'
00135 # define dkcdPATH_LIST_SEP_STR ";"
00136 # define dkcmIS_PATH_SEP(c) (dkcdPATH_SEP==(c) || '/'==(c))
00137
00139 # define dkcmIS_INVALID_FILENAME_CHAR(c) ( ((c) =='\\') || ((c)=='/') || ((c)=='*') || ((c)=='?') \
00140 || ((c)== '"') || ((c) == '<') || ((c) == '>') || ((c) == '|') || (':'== (c)) )
00141
00142 # define dkcmIS_INVALID_FOLDERNAME_CHAR(c) \
00143 dkcmIS_INVALID_FILENAME_CHAR(c)
00144
00146 # define dkcmIS_INVALID_PATH_CHAR(c) \
00147 ((c)=='*') || ((c)=='?') || ((c)== '"') || \
00148 ((c) == '<') || ((c) == '>') || ((c) == '|')
00149
00150 #ifdef _MT
00151 # define dkcdMultiThread
00152 #endif
00153
00154 #ifdef _MSC_VER
00155 #ifdef DEBUG
00156 # pragma comment(linker,"/NODEFAULTLIB:LIBC")
00157 # pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
00158 # ifdef dkcdMultiThread
00159 # pragma comment(linker,"/NODEFAULTLIB:LIBCD")
00160 # else
00161 # pragma comment(linker,"/NODEFAULTLIB:LIBCMTD")
00162 # endif
00163 #else
00164 # pragma comment(linker,"/NODEFAULTLIB:LIBCD")
00165 # pragma comment(linker,"/NODEFAULTLIB:LIBCMTD")
00166 # ifdef dkcdMultiThread
00167 # pragma comment(linker,"/NODEFAULTLIB:LIBC")
00168 # else
00169 # pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
00170 # endif
00171 #endif
00172 #endif //end of _MSC_VER
00173
00174 #endif //end of #ifndef WIN32
00175
00176
00177 #ifdef WIN32
00178
00179 typedef void *(WINAPIV *DKC_REALLOC_F_TYPE)(void *,size_t);
00180
00181 #else
00182
00183 typedef void *(*DKC_REALLOC_F_TYPE)(void *,size_t);
00184
00185 #endif
00186
00187 #ifndef DKC_INLINE
00188 # if _MSC_VER >= 1100
00189 # define DKC_INLINE _inline
00190 # elif defined(__inline)
00191 # define DKC_INLINE __inline
00192 # else
00193 # define DKC_INLINE
00194 # endif
00195 #endif
00196
00197 #ifdef WIN32
00198 # define DKC_EXPORT __declspec(dllexport)
00199 # define DKC_IMPORT __declspec(dllimport)
00200 # ifdef USE_DKCDLL
00201 # ifdef DKCDLL_EXPORTS
00202 # define DKC_EXTERN DKUTIL_EXTERN DKC_EXPORT
00203 # else
00204 # define DKC_EXTERN DKUTIL_EXTERN DKC_INPORT
00205 # endif
00206 # else
00207 # ifdef _MSC_VER
00208 # define DKC_EXTERN DKUTIL_EXTERN DKC_INLINE
00209 # else
00210 # define DKC_EXTERN DKUTIL_EXTERN
00211 # endif
00212 # endif
00213 #else
00214 # define DKC_EXPORT
00215 # define DKC_IMPORT
00216 # define DKC_EXTERN DKUTIL_EXTERN
00217 #endif
00218
00219
00220 #ifdef __BORLANDC__
00221 # include <dir.h>
00222 #else
00223 # include <direct.h>
00224 #endif
00225
00226
00227 #ifndef dkcdMAXPATH
00228 # if defined(PATH_MAX)
00229 # define dkcdMAXPATH PATH_MAX
00230
00231 # elif defined(MAX_PATH)
00232 # define dkcdMAXPATH MAX_PATH
00233
00234 # elif defined(_MAX_PATH)
00235 # define dkcdMAXPATH _MAX_PATH
00236
00237 # else
00238 # define dkcdMAXPATH 1024
00239
00240 # endif
00241 #endif
00242
00243 #ifndef dkcdMAXPATH_LEN
00244 # define dkcdMAXPATH_LEN dkcdMAXPATH
00245 #endif
00246
00247
00248
00249
00250
00251
00252
00253 #ifndef dkcdMAXPATH_BUFFER
00254
00255 # define dkcdMAXPATH_BUFFER dkcdMAXPATH * 2
00256 #endif
00257
00258
00259
00260 #ifndef MAYBE
00261 # define MAYBE 2
00262 #endif
00263
00264 typedef struct dkc_4char{
00265 signed char mode1,mode2,mode3,mode4;
00266 }DKC_4CHAR;
00267
00268
00269
00270
00271 #ifdef __cplusplus
00272
00273 namespace dkutil{
00274
00275
00285
00286 inline bool SaveBinary(const void *data,size_t size,const char *fname,const char *mode="wb"){
00287 FILE *fp;
00288 fp = fopen( fname , mode ) ;
00289 if(fp==NULL) return false;
00290 fwrite( data , size , 1 , fp ) ;
00291
00292 fclose( fp ) ;
00293 return true;
00294 }
00295
00303
00304 inline bool LoadBinary(void *data,size_t size,const char *fname,const char *mode="rb" ){
00305 FILE *fp ;
00306 fp = fopen( fname , mode ) ;
00307 if(fp==NULL)return false;
00308 fread( data , size , 1 , fp ) ;
00309
00310 fclose( fp ) ;
00311 return true;
00312 }
00313
00314 inline bool SaveText(const char *text,size_t length,const char *fname,const char *mode="wt"){
00315 return SaveBinary(text,length,fname,mode);
00316 }
00317 inline bool LoadText(char *text,size_t length,const char *fname,const char *mode="rt"){
00318 return LoadBinary(text,length,fname,mode);
00319 }
00320
00321
00322
00323 }
00324
00325
00326 #else //for c lang
00327
00328
00329 #endif //end of __cplusplus
00330
00332 DKC_EXTERN BOOL WINAPI dkcIsNativePathString(const char *s,size_t size);
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344 DKC_EXTERN size_t dkcReallocateSizeFunction(size_t OldSize,size_t ExpandSize);
00345
00346 DKC_EXTERN void* WINAPIV dkcAllocate(size_t size);
00347
00348 DKC_EXTERN int WINAPIV dkcFree(void **p);
00349
00350 DKC_EXTERN int WINAPI dkcReallocate(
00351 void **NewPtr,size_t NewSize,void **OldPtr
00352 );
00353
00361
00362 DKC_EXTERN int WINAPI dkcReallocateEx(
00363 DKC_REALLOC_F_TYPE your_realloc,void **NewPtr,size_t NewSize,
00364 void **OldPtr
00365 );
00366
00376 DKC_EXTERN int WINAPI dkcReallocateAutoExpand(
00377 DKC_REALLOC_F_TYPE your_realloc,void **NewPtr,
00378 void **OldPtr,size_t OldSize,size_t *reallocated_size
00379 );
00380
00384 DKC_EXTERN void WINAPI
00385 dkcSwap(void *p1,void *p2,size_t size);
00392 DKC_EXTERN void WINAPI dkcSwapFast(void *p1,void *p2,size_t size);
00393
00401 DKC_EXTERN void WINAPI dkcSwap64(ULONGLONG *p1,ULONGLONG *p2,size_t size);
00402
00403
00404
00405
00406
00407
00408
00409
00410
00412 DKC_EXTERN BOOL dkcIs_foepn_mode(const char *s);
00414 DKC_EXTERN FILE * WINAPI dkcFOpen(const char *filename,const char *mode);
00416 DKC_EXTERN int WINAPI dkcFClose(FILE **ptr);
00417
00419 DKC_EXTERN size_t WINAPI dkcFReadAll(void *,size_t size,FILE *fp);
00421 DKC_EXTERN size_t WINAPI dkcFWriteAll(void *,size_t size,FILE *fp);
00422
00423
00425 DKC_EXTERN int WINAPI dkcSaveBinary(const void *data,size_t size,const char *fname);
00426
00428 DKC_EXTERN int WINAPI dkcLoadBinary(void *data,size_t size,const char *fname,size_t *readsize);
00430 DKC_EXTERN int WINAPI dkcSaveText(const char *text,size_t length,const char *fname);
00432 DKC_EXTERN int WINAPI dkcLoadText(char *text,size_t length,const char *fname,size_t *readsize);
00434 DKC_EXTERN BOOL WINAPI dkcCreateEmptyFile(const char *filename);
00435
00436
00437 DKC_EXTERN void WINAPI dkcTwoDWORDToULONGLONG(ULONGLONG *dest,DWORD high,DWORD low);
00438
00439 DKC_EXTERN void WINAPI dkcULONGLONGToTwoDWORD(DWORD *dhigh,DWORD *dlow,ULONGLONG src);
00440
00444 DKC_EXTERN int WINAPI dkcErrorMessage(const char *expression,
00445 const char *filename,size_t line,const char *message,...);
00446
00447
00448
00449 #if defined(DEBUG) || defined(DKUTIL_DEBUG)
00450 # define dkcmNOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00451 # define dkcmASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00452 # define dkcmNOT_ASSERT_MESSAGE(ex,mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00453 # define dkcmASSERT_MESSAGE(ex,mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00454 #else
00455 # define dkcmNOT_ASSERT_MESSAGE(ex,mes) ((void)0)
00456 # define dkcmASSERT_MESSAGE(ex,mes) ((void)0)
00457 # define dkcmNOT_ASSERT(ex) ((void)0)
00458 # define dkcmASSERT(ex) ((void)0)
00459 #endif
00460
00461 # define dkcmFORCE_NOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00462 # define dkcmFORCE_ASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
00463 # define dkcmFORCE_NOT_ASSERT_MESSAGE(ex,mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00464 # define dkcmFORCE_ASSERT_MESSAGE(ex,mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
00465
00467 DKC_EXTERN const char *WINAPI dkcGetPathSep();
00468
00469 DKC_EXTERN void WINAPI dkcCheckMemoryLeak(BOOL flag);
00471 DKC_EXTERN BOOL WINAPI dkcIsMMX();
00472
00473
00474
00476 DKC_EXTERN ULONG dkcReverseEndian32(ULONG x);
00478 DKC_EXTERN ULONGLONG dkcReverseEndian64(ULONGLONG x);
00480 DKC_EXTERN USHORT dkcReverseEndian16(USHORT x);
00481
00483 DKC_EXTERN BOOL dkcIsLittleEndian();
00485 #define dkcIsBigEndian() (!dkcIsLittleEndian())
00486
00487 typedef int (WINAPIV *DKC_COMPARE_TYPE)(const void *,const void *);
00488
00512
00513 DKC_EXTERN int WINAPI dkcSelect(void *dest,const void *a_src,size_t n,int k,size_t width ,DKC_COMPARE_TYPE comp);
00514
00519 DKC_EXTERN int WINAPI dkcSelectMax(void *dest,const void *a, size_t n,size_t width ,DKC_COMPARE_TYPE comp);
00524 DKC_EXTERN int WINAPI dkcSelectMin(void *dest,const void *a, size_t n,size_t width ,DKC_COMPARE_TYPE comp);
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541 #endif //end of include once