メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcOSIndependent.h

独立系 [詳細]

`#include "dkc_misc.h"`

dkcOSIndependent.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

## 構成
union | dkc_byte_order_check_union
## マクロ定義
#define | dkcmNOT_ASSERT_MESSAGE(ex, mes) ((void)0)
#define | dkcmASSERT_MESSAGE(ex, mes) ((void)0)
#define | dkcmNOT_ASSERT(ex) ((void)0)
#define | dkcmASSERT(ex) ((void)0)
#define | dkcmFORCE_NOT_ASSERT(ex) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
#define | dkcmFORCE_ASSERT(ex) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )
#define | dkcmFORCE_NOT_ASSERT_MESSAGE(ex, mes) ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
#define | dkcmFORCE_ASSERT_MESSAGE(ex, mes) ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )
#define | dkcmREVERSE_ENDIAN16(x) ( (USHORT)( (x >> 8) | (x << 8) ) )
#define | dkcmREVERSE_ENDIAN32(x) ( (x << 24) | ( (x & 0x0000ff00) << 8) | ( (x & 0x00ff0000) >> 8 ) | (x >> 24) )
#define | dkcmREVERSE_ENDIAN64(x) dkcReverseEndian64(x)
#define | dkcIsBigEndian() (!dkcIsLittleEndian())
#define | dkcCheckOverflow32(a, b) dkcCheckOverflowULONG(a,b)
#define | dkcCheckOverflow64(a, b) dkcCheckOverflowULONGLONG(a,b)
## 型定義
typedef void *(WINAPIV * | DKC_ALLOC_FUNC_TYPE )(size_t)
| malloc()系 関数の型
typedef void(WINAPIV * | DKC_FREE_FUNC_TYPE )(void *)
| free()系 関数の型
typedef dkc_byte_order_check_union | DKC_BYTE_ORDER_CHECK_UNION
typedef int(WINAPIV * | DKC_COMPARE_TYPE )(const void *, const void *)
## 列挙型
enum | edkcByteOrder { edkcByteOrder_ABCD = 0, edkcByteOrder_DCBA, edkcByteOrder_BADC, edkcByteOrder_Unknown = 255 }
## 関数
DKC_EXTERN BOOL WINAPI | dkcIsNativePathString (const char *s, size_t size)
DKC_EXTERN size_t | dkcReallocateSizeFunction (size_t OldSize, size_t ExpandSize)
DKC_EXTERN void *WINAPIV | dkcMallocAdapter (size_t)
DKC_EXTERN void WINAPIV | dkcFreeAdapter (void *)
DKC_EXTERN void *WINAPIV | dkcAllocate (size_t size)
DKC_EXTERN int WINAPIV | dkcFree (void **p)
DKC_EXTERN void *WINAPIV | dkcAllocateFast (size_t size)
DKC_EXTERN void *WINAPIV | dkcAllocateFill (size_t size, BYTE fill)
DKC_EXTERN int WINAPI | dkcReallocate (void **NewPtr, size_t NewSize, void **OldPtr)
DKC_EXTERN int WINAPI | dkcReallocateEx (DKC_REALLOC_F_TYPE your_realloc, void **NewPtr, size_t NewSize, void **OldPtr)
DKC_EXTERN int WINAPI | dkcReallocateAutoExpand (DKC_REALLOC_F_TYPE your_realloc, void **NewPtr, void **OldPtr, size_t OldSize, size_t *reallocated_size)
DKC_EXTERN int WINAPI | dkcGetMemorySize (uint64 *pTotalMemory, uint64 *pFreeMemory)
DKC_EXTERN void WINAPI | dkcSwap (void *p1, void *p2, size_t size)
DKC_EXTERN BOOL WINAPI | dkcSwapFast (void *p1, void *p2, size_t size)
DKC_EXTERN void WINAPI | dkcSwap64 (ULONGLONG *p1, ULONGLONG *p2, size_t size)
DKC_EXTERN BOOL | dkcIs_foepn_mode (const char *s)
| fopenの時の第二引数が有効な値かどうか調べる。
DKC_EXTERN FILE *WINAPI | dkcFOpen (const char *filename, const char *mode)
| fopenのラッパー
DKC_EXTERN int WINAPI | dkcFClose (FILE **ptr)
| fcloseのラッパー
DKC_EXTERN size_t WINAPI | dkcFReadAll (void *, size_t size, FILE *fp)
| freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror)
DKC_EXTERN size_t WINAPI | dkcFWriteAll (const void *, size_t size, FILE *fp)
DKC_EXTERN size_t WINAPI | dkcFSize (FILE *fp)
| dkcFileSize()を普段はお使いください。エラー時の時は動作は未定義です。
DKC_EXTERN int WINAPI | dkcSaveBinary (const void *data, size_t size, const char *fname)
| fopenのファイル関数を使ってバイナリセーブを行う。
DKC_EXTERN int WINAPI | dkcLoadBinary (void *data, size_t size, const char *fname, size_t *readsize)
| バイナリデータをメモリに読み込む。dkcSaveBinary()と対
DKC_EXTERN int WINAPI | dkcSaveText (const char *text, size_t length, const char *fname)
| fopenでテキストセーブを行う
DKC_EXTERN int WINAPI | dkcLoadText (char *text, size_t length, const char *fname, size_t *readsize)
| テキストデータをメモリに読み込む。dkcSaveText()と対
DKC_EXTERN BOOL WINAPI | dkcCreateEmptyFile (const char *filename)
| 空ファイルを作る。
DKC_EXTERN int WINAPI | dkcInitFileFast (const char *filename)
| エラーログ(ファイル)を高速に初期化する、
DKC_EXTERN int WINAPI | dkcAddLogFile (const char *filename, const char *str,...)
| ログを吐く
DKC_EXTERN void WINAPI | dkcTwoDWORDToULONGLONG (ULONGLONG *dest, DWORD high, DWORD low)
DKC_EXTERN void WINAPI | dkcULONGLONGToTwoDWORD (DWORD *dhigh, DWORD *dlow, ULONGLONG src)
DKC_EXTERN void WINAPI | dkcLONGLONGToTwoLONG (LONG *high, LONG *low, LONGLONG src)
DKC_EXTERN void WINAPI | dkcTwoLONGToLONGLONG (LONGLONG *dest, LONG high, LONG low)
DKC_INLINE void | dkcTwoLONGToULONGLONG (ULONGLONG *dest, LONG high, LONG low)
DKC_EXTERN int WINAPI | dkcOutputDebugString (const char *str,...)
DKC_EXTERN int WINAPI | dkcErrorMessage (const char *expression, const char *filename, size_t line, const char *message,...)
DKC_EXTERN const char *WINAPI | dkcGetPathSep ()
DKC_EXTERN int | dkcDynamicCheckEnvironment (BOOL isForceExit)
DKC_EXTERN void WINAPI | dkcCheckMemoryLeak (BOOL flag)
DKC_EXTERN BOOL WINAPI | dkcIsMMX ()
DKC_EXTERN ULONG | dkcReverseEndian32 (ULONG x)
DKC_EXTERN ULONGLONG | dkcReverseEndian64 (ULONGLONG x)
DKC_EXTERN USHORT | dkcReverseEndian16 (USHORT x)
| endian change 16 bit version
DKC_EXTERN BOOL | dkcIsLittleEndian ()
DKC_EXTERN int WINAPI | dkcGetByteOrder ()
DKC_EXTERN BOOL | dkcCheckOverflowULONG (ULONG a1, ULONG a2)
| unsigned long型の二つの整数をプラスしたらオーバーフローするかどうかをチェックする。
DKC_EXTERN BOOL | dkcCheckOverflowULONGLONG (ULONGLONG a1, ULONGLONG a2)
DKC_EXTERN int WINAPI | dkcSelect (void *dest, const void *a_src, size_t n, int k, size_t width, DKC_COMPARE_TYPE comp)
| いわいるセレクト(選択)アルゴリズム
DKC_EXTERN int WINAPI | dkcSelectMax (void *dest, const void *a, size_t n, size_t width, DKC_COMPARE_TYPE comp)
DKC_EXTERN int WINAPI | dkcSelectMin (void *dest, const void *a, size_t n, size_t width, DKC_COMPARE_TYPE comp)
DKC_INLINE int | dkcRotateShiftRightMemoryLogic (void *dest, size_t size, size_t n, void *workbuff, size_t worksize)
DKC_EXTERN int WINAPI | dkcRotateShiftRightMemory (void *dest, size_t size, size_t n)

## 説明

独立系

覚え書き:
  詳しい説明はdkc.hに書いています。

dkcOSIndependent.h で定義されています。

## マクロ定義

#define dkcCheckOverflow32 | ( | a,
|  | b |  | ) | dkcCheckOverflowULONG(a,b)

| dkcOSIndependent.h の 250 行で定義されています。 参照元 dkcCirculerMemoryStreamSeek(), と dkcMemoryStreamSeekLogic().

#define dkcCheckOverflow64 | ( | a,
|  | b |  | ) | dkcCheckOverflowULONGLONG(a,b)

| dkcOSIndependent.h の 251 行で定義されています。

#define dkcIsBigEndian | (
|  | ) | (!dkcIsLittleEndian())

| 戻り値: big endianならTRUE dkcOSIndependent.h の 228 行で定義されています。 参照元 dkcSNOW2GetInitializeVector().

#define dkcmASSERT | ( | ex |  | ) | ((void)0)

| dkcOSIndependent.h の 180 行で定義されています。 参照元 calc_tst_node_offset(), calc_tst_node_ptr(), dkc2TreeFindEqual(), dkc2TreeFindMaximumLess(), dkc2TreeFindMinimalGreater(), dkcHC256EncryptNoDestDOE(), dkcHMACDigest(), dkcHMACDigestStr(), dkcHMACInit(), dkcHMACKeyInner(), dkcHMACLoad(), dkcSNOW2_64Byte(), dkcSNOW2EncryptNoDestDOE(), find_lg_base(), output_hash_code(), と output_tst_code().

#define dkcmASSERT_MESSAGE | ( | ex,
|  | mes |  | ) | ((void)0)

| dkcOSIndependent.h の 178 行で定義されています。

#define dkcmFORCE_ASSERT | ( | ex |  | ) | ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )

| dkcOSIndependent.h の 184 行で定義されています。

#define dkcmFORCE_ASSERT_MESSAGE | ( | ex,
|  | mes |  | ) | ( (ex) || dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )

| dkcOSIndependent.h の 186 行で定義されています。

#define dkcmFORCE_NOT_ASSERT | ( | ex |  | ) | ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,NULL) )

| dkcOSIndependent.h の 183 行で定義されています。 参照元 BufferResize(), check_init(), dkcArrayOneByOnePop(), dkcCRCLoadBlock(), dkcFileCopyEx(), dkcFreeThreadLock(), dkcMD5LoadDouble(), dkcPathStringGetFileName(), dkcPrime79(), dkcSemiRealRandomInit(), dkcThreadLock_Lock(), dkcThreadLock_Unlock(), dkcThreadLockIsLockedByThisThread(), init_lzw(), load_dll(), RegLexerGetTokenImpl(), と setData().

#define dkcmFORCE_NOT_ASSERT_MESSAGE | ( | ex,
|  | mes |  | ) | ( (ex) && dkcErrorMessage(#ex,__FILE__,__LINE__,mes) )

| dkcOSIndependent.h の 185 行で定義されています。

#define dkcmNOT_ASSERT | ( | ex |  | ) | ((void)0)

| dkcOSIndependent.h の 179 行で定義されています。 参照元 add_hash(), decode_hash(), dkc2TreeFindMaximumLess(), dkc2TreeFindMinimalGreater(), dkcAllocBufferCopy_INL(), dkcAllocCircularMemoryStreamCopy(), dkcAllocMemoryStreamCopy(), dkcArrayOneByOneSize(), dkcBitMemoryStreamTellBit(), dkcCreateDirectory(), dkcCurrentDirectoryConcatenate(), dkcDirectoryConcatenate(), dkcFileBinaryCompare(), dkcFileCopyEx(), dkcFReadAll(), dkcFreeBitMemoryStream(), dkcFreeStream(), dkcFreeThreadLock(), dkcFWriteAll(), dkcHC256EncryptNoDestDOE(), dkcHC256Process(), dkcHMACFinal(), dkcIsRelativityPath(), dkcLZSSEncode(), dkcMD5LoadDouble(), dkcMemoryStreamClear(), dkcPathStringConcatenate(), dkcPathStringCopy(), dkcPathStringDevideBegin_Logic(), dkcPathStringNormalizeCopyLogic(), dkcQueuePop(), dkcQueuePush(), dkcQueueTop(), dkcRedBlackTree_deleteNode(), dkcRedBlackTree_insertNode(), dkcSameObjectPoolAlloc(), dkcSameObjectPoolReserve(), dkcSameObjectPoolReserveFast(), dkcSetCurrentDirectory(), dkcSingleListChain(), dkcSingleListInsert(), dkcSNOW2EncryptNoDestDOE(), dkcSNOW2Process(), dkcStackDynamicPush(), dkcStackPop(), dkcStackPush(), dkcStackTop(), dkcStreamReadObayAnOrder(), dkcStreamWriteObayAnOrder(), dkcStringConcatenate(), dkcStringCopy(), dkcStringInsert(), dkcThreadLock_Unlock(), dkcULONGLONGToTwoDWORD(), encode_byte(), encode_hash(), find_child_node_number(), free_2tree_node(), hash_final(), hc256_byte(), SetStreamInfo(), と store().

#define dkcmNOT_ASSERT_MESSAGE | ( | ex,
|  | mes |  | ) | ((void)0)

| dkcOSIndependent.h の 177 行で定義されています。 参照元 dkcCreateDirectory().

#define dkcmREVERSE_ENDIAN16 | ( | x |  | ) | ( (USHORT)( (x >> 8) | (x << 8) ) )

| dkcOSIndependent.h の 203 行で定義されています。

#define dkcmREVERSE_ENDIAN32 | ( | x |  | ) | ( (x << 24) | ( (x & 0x0000ff00) << 8) | ( (x & 0x00ff0000) >> 8 ) | (x >> 24) )

| dkcOSIndependent.h の 205 行で定義されています。

#define dkcmREVERSE_ENDIAN64 | ( | x |  | ) | dkcReverseEndian64(x)

| dkcOSIndependent.h の 215 行で定義されています。

## 型定義

typedef void*( WINAPIV * DKC_ALLOC_FUNC_TYPE)(size_t)

| malloc()系 関数の型 dkcOSIndependent.h の 33 行で定義されています。

typedef union dkc_byte_order_check_union DKC_BYTE_ORDER_CHECK_UNION

typedef int(WINAPIV * DKC_COMPARE_TYPE)(const void *, const void *)

| dkcOSIndependent.h の 254 行で定義されています。

typedef void(WINAPIV * DKC_FREE_FUNC_TYPE)(void *)

| free()系 関数の型 dkcOSIndependent.h の 35 行で定義されています。

## 列挙型

enum edkcByteOrder

  | 列挙型の値:
  edkcByteOrder_ABCD | big-endian motorola
  edkcByteOrder_DCBA | little-endian intel
  edkcByteOrder_BADC | BADC - vax i386?
  edkcByteOrder_Unknown |
dkcOSIndependent.h の 230 行で定義されています。
    00230                   {
    00232     edkcByteOrder_ABCD = 0,
    00234     edkcByteOrder_DCBA,
    00236     edkcByteOrder_BADC,
    00237     edkcByteOrder_Unknown = 255,
    00238 };

## 関数

DKC_EXTERN int WINAPI dkcAddLogFile | ( | const char * | filename,
|  | const char * | str,
|  |  | ...
| ) |

  | ログを吐く 引数:
  | filename[in] | ファイルネーム
  | str[in] | 吐く文字列
覚え書き: 出力速度が遅いので多用は奨励しない dkcOSIndependent.c の 524 行で定義されています。 参照先 NULL.
    00524                                                                                   {
    00525     FILE *fp=NULL;
    00526     char s[2048]="";
    00527     va_list VaList;
    00528     int r;
    00529     //SET_VA_LIST_INSERT_YEN_N(s,2048,str);
    00530     SET_VA_LIST_C(VaList,r,s,sizeof(s),str);
    00531
    00532     //ファイルをオープン
    00533     if(NULL == (fp = fopen( filename , "at" )))
    00534         return edk_FAILED;
    00535     // エラーログファイルに書き出す
    00536     fputs( s , fp ) ;
    00537     fclose( fp ) ;
    00538     return edk_SUCCEEDED;
    00539 }

DKC_EXTERN void* WINAPIV dkcAllocate | ( | size_t | size | ) |

| dkcOSIndependent.c の 189 行で定義されています。 参照先 dkcAllocate_INL(). 参照元 alloc_hash(), alloc_RegNFA(), alloc_sameobjectpool(), dkcAlloc2TreeRoot(), dkcAllocArcfour(), dkcAllocArcfour2Byte(), dkcAllocArrayOneByOne(), dkcAllocBitMemoryStream(), dkcAllocBlowfish(), dkcAllocBuffer(), dkcAllocCircularMemoryStream(), dkcAllocCRC(), dkcAllocDCF_Version01_SNOW2(), dkcAllocDeque(), dkcAllocFile64(), dkcAllocFindFile(), dkcAllocHC256(), dkcAllocHMAC(), dkcAllocLZSS(), dkcAllocLZW(), dkcAllocMD2(), dkcAllocMD4(), dkcAllocMD5(), dkcAllocMD5Adapter(), dkcAllocMemoryStream(), dkcAllocMemoryStreamAdapter(), dkcAllocPathString(), dkcAllocQueue(), dkcAllocRedBlackTreeRoot(), dkcAllocRegex(), dkcAllocReplace(), dkcAllocRijndael(), dkcAllocRijndaelDecrypt(), dkcAllocRijndaelEncrypt(), dkcAllocRLE(), dkcAllocSemiRealRandomFromGFS(), dkcAllocSemiRealRandomWin32(), dkcAllocSHA1(), dkcAllocSHA256(), dkcAllocSHA384(), dkcAllocSHA512(), dkcAllocSHO(), dkcAllocSingleList(), dkcAllocSingleListObject(), dkcAllocSNOW2(), dkcAllocStack(), dkcAllocStream(), dkcAllocString(), dkcAllocTaskEngine(), dkcAllocThread(), dkcAllocThreadLock(), dkcAllocUniqueID(), dkcBufferCopy(), dkcBufferInit(), dkcDistCountSortChar(), dkcDistCountSortInt(), dkcDistCountSortShort(), dkcLoadLibrary(), dkcNewSingleList(), と dkcOpenFileWithSignature().
    00189                                          {
    00190     return dkcAllocate_INL(size);
    00191 }

DKC_EXTERN void* WINAPIV dkcAllocateFast | ( | size_t | size | ) |

| dkcOSIndependent.c の 186 行で定義されています。 参照先 dkcAllocateFast_INL(). 参照元 alloc_2tree_node(), decode_hash(), decode_tst(), dkcSameObjectPoolReserveFast(), と malloc_adapter().
    00186                                              {
    00187     return dkcAllocateFast_INL(size);
    00188 }

DKC_EXTERN void* WINAPIV dkcAllocateFill | ( | size_t | size,
|  | BYTE | fill
| ) |

| dkcOSIndependent.c の 183 行で定義されています。 参照先 dkcAllocateFill_INL().
    00183                                                        {
    00184     return dkcAllocateFill_INL(size,fill);
    00185 }

DKC_EXTERN void WINAPI dkcCheckMemoryLeak | ( | BOOL | flag | ) |

  | 引数:
  | flag[in] | TRUEでチェックを有効
dkcOSIndependent.c の 748 行で定義されています。
    00748                                          {
    00749
    00750 }

DKC_EXTERN BOOL dkcCheckOverflowULONG | ( | ULONG | a1,
|  | ULONG | a2
| ) |

| unsigned long型の二つの整数をプラスしたらオーバーフローするかどうかをチェックする。 dkcOSIndependent.c の 843 行で定義されています。 参照先 FALSE, と TRUE. 参照元 dkcRLEPackBitsDecode(), と dkcRLEPackBitsEncode().
    00843                                                         {
    00844     ULONG maxv = ULONG_MAX;
    00845   ULONG halfv = maxv / 2 ;
    00846   ULONG x = a1,y = a2;
    00847   if(x < y){
    00848     SWAP_NUM(x,y);
    00849   }
    00850   if(x > halfv + 1){
    00851     if(y >= halfv){
    00852       return TRUE;
    00853     }
    00854   }
    00855   return FALSE;
    00856 }

DKC_EXTERN BOOL dkcCheckOverflowULONGLONG | ( | ULONGLONG | a1,
|  | ULONGLONG | a2
| ) |

| dkcOSIndependent.c の 858 行で定義されています。 参照先 FALSE, TRUE, ULONGLONG, と ULONGLONG_MAX.
    00859 {
    00860     ULONGLONG maxv = ULONGLONG_MAX;
    00861   ULONGLONG halfv = maxv / 2 ;
    00862   ULONGLONG x = a1,y = a2;
    00863   if(x < y){
    00864     SWAP_NUM(x,y);
    00865   }
    00866   if(x > halfv + 1){
    00867     if(y >= halfv){
    00868       return TRUE;
    00869     }
    00870   }
    00871   return FALSE;
    00872 }

DKC_EXTERN BOOL WINAPI dkcCreateEmptyFile | ( | const char * | filename | ) |

| 空ファイルを作る。 dkcOSIndependent.c の 491 行で定義されています。 参照先 FALSE, NULL, と TRUE. 参照元 dkcFileCopyEx().
    00491                                                                {
    00492     FILE *fp;
    00493     fp = fopen( filename , "wb" ) ;//wb
    00494     if(fp==NULL) return FALSE;
    00495     fclose( fp ) ;
    00496     return TRUE;
    00497 }

DKC_EXTERN int dkcDynamicCheckEnvironment | ( | BOOL | isForceExit | ) |

  | 引数:
  | isForceExit[in] | TRUEを指定するとdkutil_cの奨励環境と違った場合、強制終了する。
戻り値: edk_Result dkcOSIndependent.c の 49 行で定義されています。
    00049                                                 {
    00050
    00051 }

DKC_EXTERN int WINAPI dkcErrorMessage | ( | const char * | expression,
|  | const char * | filename,
|  | size_t | line,
|  | const char * | message,
|  |  | ...
| ) |

| 戻り値: almost TRUE(1) dkcOSIndependent.c の 87 行で定義されています。 参照先 MB, NULL, ODS, と TRUE.
    00089 {
    00090     char s[1024];
    00091     char ss[1024 * 2];
    00092
    00093     int va_list_result;
    00094     va_list Valist;
    00095
    00096     NULL_CHAR_ARRAY(s);
    00097     NULL_CHAR_ARRAY(ss);
    00098
    00099     if(message){
    00100         SET_VA_LIST_C(Valist,va_list_result,s,sizeof(s),message);
    00101     }else{
    00102         //SET_VA_LIST(s,sizeof(s),"No message");
    00103         _snprintf(s,sizeof(s),"No message\n");
    00104     }
    00105
    00106     _snprintf(ss,sizeof(ss),
    00107         "DKUTIL_ASSERT(%s):\nfile:%s / \n line:%d / \n message: %s",
    00108         expression,filename,line,s);
    00109
    00110
    00111
    00112 #ifdef NDEBUG//release
    00113 #   ifdef WIN32
    00114         ODS(ss);
    00115     //::MessageBox(NULL,ss,"ERROR ASSERTION !!",MB_OK);
    00116     {
    00117         LPCTSTR name="ERROR_TEMP.txt";
    00118         {
    00119             //ファイルをオープン
    00120             FILE *fp;
    00121             if(NULL != (fp = fopen( name , "at" ))){
    00122
    00123                 // エラーログファイルに書き出す
    00124                 fputs( ss , fp ) ;
    00125                 fclose( fp ) ;
    00126                 Sleep(800);
    00127             }
    00128         }
    00129         ShellExecute(NULL, "open",name, NULL, NULL, SW_SHOWNORMAL);
    00130         //Sleep(1000);
    00131         //DeleteFile(name);
    00132     }
    00133     MB("このテキストをこのソフトの開発者に渡せば、バグ発見の近道なります。\n \
    00134         開発者に知らせるときはこのテキストを転記してあげましょう。");
    00135
    00136     /*if(IDYES==MessageBox(NULL,
    00137         "このままこのソフトを起動しつづけると、更なるエラーが発生する可能性があります。\n終了しますか？",
    00138         "あってはいけない エラー!!!",
    00139         MB_YESNO))
    00140     {
    00141         exit(edk_FAILED);
    00142         //terminate();
    00143     }else{
    00144     }*/
    00145     exit(edk_FAILED);
    00146 #   else    //else of win32
    00147
    00148     fprintf(stderr,ss);
    00149     exit(edk_FAILED);
    00150
    00151 #   endif //end of win32
    00152
    00153 #else //debug
    00154
    00155 #   ifdef WIN32
    00156         ODS(ss);
    00157     fprintf(stderr,ss);
    00158     //_CrtDebugBreak();
    00159     DebugBreak();
    00160 #   else //else of win32
    00161
    00162     fprintf(stderr,ss);
    00163     Debugger();
    00164
    00165 #   endif //end of win32
    00166
    00167     return TRUE;
    00168 #endif//end of NDEBUG
    00169     //assert(ss);
    00170
    00171 }

DKC_EXTERN int WINAPI dkcFClose | ( | FILE ** | ptr | ) |

| fcloseのラッパー dkcOSIndependent.c の 379 行で定義されています。 参照先 NULL. 参照元 dkcFileCopyEx(), dkcFreeStream(), と GetHeader().
    00379                                            {
    00380     if(NULL==ptr || NULL==*ptr) return edk_ArgumentException;
    00381     fclose(*ptr);
    00382     *ptr = NULL;
    00383     return edk_SUCCEEDED;
    00384 }

DKC_EXTERN FILE* WINAPI dkcFOpen | ( | const char * | filename,
|  | const char * | mode
| ) |

| fopenのラッパー dkcOSIndependent.c の 375 行で定義されています。 参照元 dkcAllocStream(), dkcFileCopyEx(), と GetHeader().
    00375                                                                         {
    00376     return fopen(filename,mode);
    00377 }

DKC_EXTERN size_t WINAPI dkcFReadAll | ( | void * | ,
|  | size_t | size,
|  | FILE * | fp
| ) |

| freadの全部責任持って読み込みますバージョン。(読み込めない場合はEOFかerror) dkcOSIndependent.c の 385 行で定義されています。 参照先 BYTE, と dkcmNOT_ASSERT. 参照元 dkcLoadFile(), と GetHeader().
    00386 {
    00387     size_t count;
    00388     size_t tc,tsize;
    00389     BYTE *tbuffer;
    00390
    00391     //read size
    00392     tsize = size;
    00393     //temp variable
    00394     tc = 0;
    00395     //offset counter
    00396     count = 0;
    00397     //byte type pointer
    00398     tbuffer = (BYTE *)buffer;
    00399     for(;;)
    00400     {
    00401         //error check
    00402         if(ferror(fp) ){
    00403             break;
    00404         }
    00405         if(feof(fp)){
    00406             break;
    00407         }
    00408         //read
    00409         tc = fread(&tbuffer[count],1,tsize,fp);
    00410         //update
    00411         tsize -= tc;
    00412         count += tc;
    00413
    00414         if(count == size){
    00415             break;
    00416         }
    00417 #   ifdef DEBUG
    00418         //ありえないエラーチェック
    00419         dkcmNOT_ASSERT(count > size);
    00420 #   else
    00421         if(count > size){
    00422             break;
    00423         }
    00424 #   endif
    00425     }
    00426     return count;
    00427 }

DKC_EXTERN int WINAPIV dkcFree | ( | void ** | p | ) |

| dkcOSIndependent.c の 193 行で定義されています。 参照先 dkcFree_INL(). 参照元 alloc_RegNFA(), decode_hash(), decode_tst(), dkcAlloc2TreeRoot(), dkcAllocArrayOneByOne(), dkcAllocBitMemoryStream(), dkcAllocBuffer(), dkcAllocCircularMemoryStream(), dkcAllocCRC(), dkcAllocDCF_Version01_SNOW2(), dkcAllocDeque(), dkcAllocLZW(), dkcAllocMD5Adapter(), dkcAllocMemoryStream(), dkcAllocPathString(), dkcAllocQueue(), dkcAllocRedBlackTreeRoot(), dkcAllocReplace(), dkcAllocRijndael(), dkcAllocSingleList(), dkcAllocSingleListObject(), dkcAllocStack(), dkcAllocStream(), dkcAllocString(), dkcAllocTaskEngine(), dkcAllocUniqueID(), dkcBufferCopy(), dkcBufferUninit(), dkcCloseFileWithSignature(), dkcDistCountSortChar(), dkcDistCountSortInt(), dkcDistCountSortShort(), dkcFreeArcfour(), dkcFreeArcfour2Byte(), dkcFreeArrayOneByOne(), dkcFreeBitMemoryStream(), dkcFreeBlowfish(), dkcFreeBuffer(), dkcFreeCircularMemoryStream(), dkcFreeCRC(), dkcFreeDCF01(), dkcFreeDeque(), dkcFreeFile64(), dkcFreeFindFile(), dkcFreeGenericFileSystem(), dkcFreeHC256(), dkcFreeHMAC(), dkcFreeLZSS(), dkcFreeLZW(), dkcFreeMD2(), dkcFreeMD4(), dkcFreeMD5(), dkcFreeMD5Adapter(), dkcFreeMemoryStream(), dkcFreeMemoryStreamAdapter(), dkcFreePathString(), dkcFreeQueue(), dkcFreeRedBlackTreeRoot(), dkcFreeRegex(), dkcFreeReplace(), dkcFreeRijndael(), dkcFreeRLE(), dkcFreeSemiRealRandom(), dkcFreeSHA1(), dkcFreeSHA256(), dkcFreeSHA384(), dkcFreeSHA512(), dkcFreeSHO(), dkcFreeSingleListObject(), dkcFreeSNOW2(), dkcFreeStack(), dkcFreeStream(), dkcFreeString(), dkcFreeTaskEngine(), dkcFreeThread(), dkcFreeThreadLock(), dkcFreeUniqueID(), dkcLoadLibrary(), dkcOpenFileWithSignature(), dkcSingleListErase(), dkcUnloadLibrary(), free_2tree_node(), free_2tree_root(), free_adapter(), free_hash(), free_RegNFA(), と free_sameobjectpool().
    00193                                  {
    00194     return dkcFree_INL(p);
    00195 }

DKC_EXTERN void WINAPIV dkcFreeAdapter | ( | void * |  | ) |

| dkcOSIndependent.c の 177 行で定義されています。 参照元 dkcSameObjectPoolInit().
    00177                                     {
    00178     if(p){
    00179         free(p);
    00180     }
    00181 }

DKC_EXTERN size_t WINAPI dkcFSize | ( | FILE * | fp | ) |

| dkcFileSize()を普段はお使いください。エラー時の時は動作は未定義です。 dkcOSIndependent.c の 474 行で定義されています。
    00475 {
    00476     long t;
    00477     size_t len;
    00478     //temporary
    00479     t = ftell(fp);
    00480     fseek(fp,0,SEEK_END);
    00481     len = ftell(fp);
    00482     fseek(fp,t,SEEK_SET);
    00483     return len;
    00484 }

DKC_EXTERN size_t WINAPI dkcFWriteAll | ( | const void * | ,
|  | size_t | size,
|  | FILE * | fp
| ) |

| 参照: dkcFReadAll() dkcFReadAllのfwrite版 dkcOSIndependent.c の 429 行で定義されています。 参照先 BYTE, と dkcmNOT_ASSERT. 参照元 dkcSaveFile().
    00429                                                                               {
    00430     size_t count;
    00431     size_t tc,tsize;
    00432     BYTE *tbuffer;
    00433
    00434     //read size
    00435     tsize = size;
    00436     //temp variable
    00437     tc = 0;
    00438     //offset counter
    00439     count = 0;
    00440     //byte type pointer
    00441     tbuffer = (BYTE *)buffer;
    00442     for(;;)
    00443     {
    00444         //error check
    00445         if(ferror(fp) ){
    00446             break;
    00447         }
    00448         if(feof(fp)){
    00449             break;
    00450         }
    00451         //read
    00452         tc = fwrite(&tbuffer[count],1,tsize,fp);
    00453         //update
    00454         tsize -= tc;
    00455         count += tc;
    00456
    00457         if(count == size){
    00458             break;
    00459         }
    00460 #   ifdef DEBUG
    00461         //ありえないエラーチェック
    00462         dkcmNOT_ASSERT(count > size);
    00463 #   else
    00464         if(count > size){
    00465             break;
    00466         }
    00467 #   endif
    00468     }
    00469     return count;
    00470
    00471 }

DKC_EXTERN int WINAPI dkcGetByteOrder | ( |  | ) |

| 戻り値: enum edkcByteOrder dkcOSIndependent.c の 826 行で定義されています。 参照先 dkc_byte_order_check_union::abcd, edkcByteOrder_ABCD, edkcByteOrder_BADC, edkcByteOrder_DCBA, edkcByteOrder_Unknown, と dkc_byte_order_check_union::x.
    00827 {
    00828     DKC_BYTE_ORDER_CHECK_UNION a;
    00829     a.x = 0x04030201;
    00830     switch(a.abcd[0]){
    00831     case 0x01:
    00832         return edkcByteOrder_DCBA;
    00833     case 0x02:
    00834         return edkcByteOrder_Unknown;
    00835     case 0x03:
    00836         return edkcByteOrder_BADC;
    00837     case 0x04:
    00838         return edkcByteOrder_ABCD;
    00839     }
    00840     return edkcByteOrder_Unknown;
    00841 }

DKC_EXTERN int WINAPI dkcGetMemorySize | ( | uint64 * | pTotalMemory,
|  | uint64 * | pFreeMemory
| ) |

| dkcOSIndependent.c の 323 行で定義されています。 参照先 NULL.
    00324 {
    00325 #ifdef WIN32
    00326     MEMORYSTATUS ms;
    00327     memset(&ms,0,sizeof(ms));
    00328     ms.dwLength =  sizeof( ms );
    00329     GlobalMemoryStatus( &ms );
    00330
    00331     if ( pTotalMemory == NULL || pFreeMemory  == NULL)
    00332         return edk_FAILED;
    00333
    00334     *pTotalMemory = (uint64)ms.dwTotalPhys;
    00335     *pFreeMemory  = (uint64)ms.dwAvailPhys;
    00336     return edk_SUCCEEDED;
    00337 #else
    00338
    00339
    00340 #endif
    00341 }

DKC_EXTERN const char* WINAPI dkcGetPathSep | ( |  | ) |

| 戻り値: path separatorの入った文字列(1byte毎にpath separatorの文字定数が入っている)をゲット dkcOSIndependent.c の 753 行で定義されています。 参照先 dkcdPATH_SEP. 参照元 dkcSJIS_SearchPathSep(), と dkcSJIS_SearchPathSepLast().
    00753                                   {
    00754 #ifdef WIN32
    00755     static char target[3]={dkcdPATH_SEP,'/','\0'};
    00756 #else
    00757     static char target[3]={dkcdPATH_SEP,'\0'};
    00758 #endif
    00759     return target;
    00760 }

DKC_EXTERN int WINAPI dkcInitFileFast | ( | const char * | filename | ) |

  | エラーログ(ファイル)を高速に初期化する、 覚え書き: 完全に抹消するわけではない 引数:
  | filename[in] | ファイルの名前
dkcOSIndependent.c の 512 行で定義されています。 参照先 NULL.
    00513 {
    00514     FILE *fp;
    00515     // エラーログファイルを開く(初期化)
    00516     if(NULL==(fp = fopen( filename , "wt" ))){
    00517         return edk_FAILED;
    00518     }
    00519     fclose( fp ) ;
    00520
    00521     return edk_SUCCEEDED;
    00522 }

DKC_EXTERN BOOL dkcIs_foepn_mode | ( | const char * | s | ) |

| fopenの時の第二引数が有効な値かどうか調べる。 dkcOSIndependent.c の 196 行で定義されています。 参照先 FALSE, と TRUE.
    00196                                     {
    00197     /* wrtb+ */
    00198     const char *ms= "wrtb+";
    00199     size_t slen = strlen(s);
    00200     size_t mslen = strlen(ms);
    00201     size_t i,j;
    00202     int flag = FALSE;
    00203     for(i=0;i<slen;i++){
    00204         for(j=0;j<mslen;j++){
    00205             if(ms[j]==s[i]){
    00206                 flag = TRUE;
    00207                 break;
    00208             }
    00209         }
    00210         if(TRUE!=flag){
    00211             return FALSE;
    00212         }else{
    00213             flag = FALSE;
    00214         }
    00215     }
    00216     return TRUE;
    00217 }

DKC_EXTERN BOOL dkcIsLittleEndian | ( |  | ) |

| 戻り値: little endian ならTRUE dkcOSIndependent.c の 819 行で定義されています。 参照元 dkcOpenFileWithSignature(), GetHeader(), HeaderWrite(), と SetStreamInfo().
    00819                                     {
    00820     int x=1;
    00821     return (BOOL)((*(char*)&x));
    00822 }

DKC_EXTERN BOOL WINAPI dkcIsMMX | ( |  | ) |

| 戻り値: MMXが使えるならTRUE dkcOSIndependent.c の 796 行で定義されています。 参照先 FALSE. 参照元 CheckMMX().
    00796                           {
    00797   return FALSE;
    00798 }

DKC_EXTERN BOOL WINAPI dkcIsNativePathString | ( | const char * | s,
|  | size_t | size
| ) |

| 戻り値: FALSEならNativeなファイルパスではない。 dkcOSIndependent.c の 56 行で定義されています。 参照先 dkcmIS_INVALID_PATH_CHAR, FALSE, NULL, と TRUE. 参照元 dkcAllocPathString(), dkcIsEffectivePath(), dkcPathStringElementInsert_Logic(), と dkcPathStringElementReplace_Logic().
    00056                                                            {
    00057
    00058     size_t i=0;
    00059     if(s==NULL) return edk_FAILED;
    00060     for(;i<size;i++){
    00061         if(dkcmIS_INVALID_PATH_CHAR(s[i]))
    00062         {
    00063             return FALSE;
    00064         }
    00065     }
    00066     return TRUE;
    00067 }

DKC_EXTERN int WINAPI dkcLoadBinary | ( | void * | data,
|  | size_t | size,
|  | const char * | fname,
|  | size_t * | readsize
| ) |

| バイナリデータをメモリに読み込む。dkcSaveBinary()と対 覚え書き: 類似: dkcFileToMemory() dkcOSIndependent.c の 500 行で定義されています。 参照先 dkcLoadFile(). 参照元 dkcFileCopyEx(), と dkcMemoryStreamLoadFromFile().
    00500                                                                                               {//="rb"
    00501     return dkcLoadFile(data,size,fname,"rb",readsize);
    00502 }

DKC_EXTERN int WINAPI dkcLoadText | ( | char * | text,
|  | size_t | length,
|  | const char * | fname,
|  | size_t * | readsize
| ) |

| テキストデータをメモリに読み込む。dkcSaveText()と対 dkcOSIndependent.c の 507 行で定義されています。 参照先 dkcLoadFile().
    00507                                                                                               {
    00508     return dkcLoadFile(text,length,fname,"rt",readsize);
    00509 }

DKC_EXTERN void WINAPI dkcLONGLONGToTwoLONG | ( | LONG * | high,
|  | LONG * | low,
|  | LONGLONG | src
| ) |

| dkcOSIndependent.c の 672 行で定義されています。 参照先 dkc_2int32_to_int64::QuadPart, と dkc_2int32_to_int64::u.
    00672                                                                               {
    00673     /*LONG *o = (LONG *)&src;
    00674     dkcmNOT_ASSERT(sizeof(LONG) * 2 != sizeof(LONGLONG));
    00675     *high = o[0];
    00676     *low = o[1];*/
    00677 #ifdef WIN32
    00678     DKC_TWOINT32_TO_INT64 a;
    00679     a.QuadPart = src;
    00680     *low = a.u.LowPart;
    00681     *high = a.u.HighPart;
    00682 #else
    00683
    00684 #endif
    00685 }

DKC_EXTERN void* WINAPIV dkcMallocAdapter | ( | size_t |  | ) |

| dkcOSIndependent.c の 173 行で定義されています。 参照元 dkcSameObjectPoolAlloc(), と dkcSameObjectPoolInit().
    00173                                         {
    00174     return malloc(s);
    00175 }

DKC_EXTERN int WINAPI dkcOutputDebugString | ( | const char * | str,
|  |  | ...
| ) |

| dkcOSIndependent.c の 69 行で定義されています。
    00069                                                                {
    00070     char s[1024 * 2];
    00071
    00072
    00073     int va_list_result;
    00074     va_list Valist;
    00075
    00076
    00077
    00078     SET_VA_LIST_C(Valist,va_list_result,s,sizeof(s),str);
    00079     if(0 > va_list_result){
    00080         return edk_FAILED;
    00081     }
    00082     OutputDebugString(s);
    00083     return edk_SUCCEEDED;
    00084     //fprintf(stderr,s);
    00085 }

DKC_EXTERN int WINAPI dkcReallocate | ( | void ** | NewPtr,
|  | size_t | NewSize,
|  | void ** | OldPtr
| ) |

| dkcOSIndependent.c の 251 行で定義されています。 参照先 dkcReallocateEx(). 参照元 dkc2TreeSetBuffer(), dkcBufferResize_INL(), dkcMemoryStreamAutoExpandResize(), dkcMemoryStreamResize(), dkcQueueDynamicPush(), dkcSingleListSetBuffer(), と dkcStackDynamicPush().
    00253 {
    00254     return dkcReallocateEx(realloc,NewPtr,NewSize,OldPtr);
    00255 }

DKC_EXTERN int WINAPI dkcReallocateAutoExpand | ( | DKC_REALLOC_F_TYPE | your_realloc,
|  | void ** | NewPtr,
|  | void ** | OldPtr,
|  | size_t | OldSize,
|  | size_t * | reallocated_size
| ) |

  | 引数:
  | your_realloc[in] | reallocする関数
  | NewPtr[out] | 新しいメモリ空間アドレス
  | OldPtr[in][out] | 古いメモリ空間アドレス。関数が成功すると、OldPtrは無効になる
  | OldSize[in] | OldPtrのサイズ
  | reallocated_size[out] | 確保したサイズ
覚え書き: メモリサイズ拡張専用 dkcOSIndependent.c の 282 行で定義されています。 参照先 dkcReallocateSizeFunction(), と NULL.
    00286 {
    00287     void *ptr = NULL;
    00288     size_t want_size = OldSize / 8;
    00289     size_t ra_size = dkcReallocateSizeFunction(OldSize,
    00290          (want_size <= 20) ? 20 : want_size
    00291     );
    00292     size_t div = 8;
    00293     size_t tmp_ra = ra_size / div;
    00294     size_t i;
    00295     if(NULL== your_realloc /*|| NULL==*NewPtr*/ || NULL == *OldPtr ||
    00296         0==OldSize  || NULL==reallocated_size
    00297     ){
    00298         return edk_ArgumentException;//アホ引数入れるな！！
    00299     }
    00300
    00301     for(i=0;i<div;i++){
    00302         ptr = your_realloc(*OldPtr,ra_size);
    00303         if(NULL==ptr){
    00304             if(OldSize > (ra_size -= tmp_ra)){//とりあえずtmp_ra分を引く。
    00305                 break;//こら望みなしだわ
    00306             }
    00307             continue;
    00308         }else{
    00309             break;
    00310         }
    00311     }
    00312     if(NULL==ptr) return edk_FAILED;
    00313
    00314     //更新
    00315     *NewPtr = ptr;
    00316     *OldPtr = NULL;
    00317
    00318     *reallocated_size = ra_size;
    00319
    00320     return edk_SUCCEEDED;
    00321 }

DKC_EXTERN int WINAPI dkcReallocateEx | ( | DKC_REALLOC_F_TYPE | your_realloc,
|  | void ** | NewPtr,
|  | size_t | NewSize,
|  | void ** | OldPtr
| ) |

  | 引数:
  | your_realloc[in] | reallocする関数
  | NewPtr[out] | 新しいメモリ空間アドレス
  | NewSize[in] | 新しいメモリ空間アドレスのサイズ。
  | OldPtr[in][out] | 古いメモリ空間アドレス。関数が成功すると、OldPtrは無効になる
  | OldSize[in] | OldPtrのサイズ
戻り値: edk_SUCCEEDEDだったら成功 dkcOSIndependent.c の 257 行で定義されています。 参照先 NULL. 参照元 dkcReallocate().
    00261 {
    00262     void *ptr = NULL;
    00263
    00264     if(NULL== your_realloc  /*|| NULL == *OldPtr ||
    00265         0==OldSize*/
    00266     ){
    00267         return edk_ArgumentException;//アホ引数入れるな！！
    00268     }
    00269
    00270     ptr = your_realloc(*OldPtr,NewSize);
    00271     if(NULL==ptr) return edk_FAILED;
    00272
    00273     //更新
    00274     *OldPtr = NULL;
    00275     *NewPtr = ptr;
    00276
    00277     return edk_SUCCEEDED;
    00278 }

DKC_EXTERN size_t dkcReallocateSizeFunction | ( | size_t | OldSize,
|  | size_t | ExpandSize
| ) |

| dkcOSIndependent.c の 233 行で定義されています。 参照元 dkcMemoryStreamAutoExpandResize(), dkcQueueDynamicPush(), dkcReallocateAutoExpand(), と dkcStackDynamicPush().
    00233                                                                   {
    00234     //y=-25.43035 * pow(x,2) + 116.7214
    00235     //y = -0.00000018 * pow(x,2) + 0.00019
    00236     //y = -99.9999 * pow(OldSize,2) + 104857600;
    00237     //y = 0.105263 * x * x + 10.52631
    00238     //double x;
    00239 //  size_t size;
    00240     if(OldSize <= 1024 * 5){//5KB以内なら2倍
    00241         return OldSize * 2;
    00242     }else if(OldSize >= 1024 * 1024 * 10 || 0==OldSize)
    00243     {//10MB以上なら + ExpandSize
    00244         return OldSize + ExpandSize;
    00245     }
    00246     //それ以外ならExpandSize * 3
    00247     return OldSize + ExpandSize * 3;
    00248     //return OldSize * 2;//ひでぇ関数だ。
    00249 }

DKC_EXTERN USHORT dkcReverseEndian16 | ( | USHORT | x | ) |

| endian change 16 bit version dkcOSIndependent.c の 802 行で定義されています。 参照元 dkcStreamProcess16().
    00802                                               {
    00803     return (USHORT)((x >> 8) | (x << 8));
    00804 }

DKC_EXTERN ULONG dkcReverseEndian32 | ( | ULONG | x | ) |

| 覚え書き: General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より

DKC_EXTERN ULONGLONG dkcReverseEndian64 | ( | ULONGLONG | x | ) |

| 覚え書き: General Function Library Copyright (C) 2000,2001 SYN All Rights Reserved.より dkcOSIndependent.c の 810 行で定義されています。 参照先 dkcReverseEndian32(), DWORD, と ULONGLONG. 参照元 dkcStreamProcess64(), GetHeader(), HeaderWrite(), と ReverseEndianQWORD().
    00810                                                      {
    00811
    00812     return (
    00813         (ULONGLONG)dkcReverseEndian32((DWORD)(x & 0x00000000ffffffff)) << 32)
    00814         |
    00815         dkcReverseEndian32((DWORD)(x >> 32)
    00816     );
    00817
    00818 }

DKC_EXTERN int WINAPI dkcRotateShiftRightMemory | ( | void * | dest,
|  | size_t | size,
|  | size_t | n
| ) |

| dkcOSIndependent.c の 1101 行で定義されています。 参照先 dkcRotateShiftRightMemoryLogic(), と NULL.
    01101                                                                     {
    01102     //size_t i = 0;
    01103     void *pd = NULL;
    01104     int r = edk_FAILED;
    01105
    01106     pd = malloc(num);
    01107     if(NULL==pd){
    01108         return edk_OutOfMemory;
    01109     }
    01110     if(DKUTIL_SUCCEEDED(dkcRotateShiftRightMemoryLogic(d,size,num,pd,num))){
    01111         r = edk_SUCCEEDED;
    01112     }
    01113
    01114     free(pd);
    01115
    01116     return r;
    01117
    01118 }

DKC_INLINE int dkcRotateShiftRightMemoryLogic | ( | void * | dest,
|  | size_t | size,
|  | size_t | n,
|  | void * | workbuff,
|  | size_t | worksize
| ) |

| dkcOSIndependent.c の 1079 行で定義されています。 参照先 BYTE. 参照元 dkcRotateShiftRightMemory().
    01080 {
    01081     BYTE *dest = (BYTE *)d;
    01082     size_t temp;
    01083
    01084     if(n > worksize){
    01085         return edk_FAILED;
    01086     }
    01087     for(;;){
    01088         if(n < size){
    01089             break;
    01090         }
    01091         n -= size;
    01092     }
    01093     temp = size - n;
    01094     memcpy(workbuff,dest + temp,n);
    01095     memmove(dest + n,dest,temp);
    01096     memcpy(dest,workbuff,n);
    01097     return edk_SUCCEEDED;
    01098
    01099 }

DKC_EXTERN int WINAPI dkcSaveBinary | ( | const void * | data,
|  | size_t | size,
|  | const char * | fname
| ) |

| fopenのファイル関数を使ってバイナリセーブを行う。 覚え書き: 類似: dkcMemoryToFile() dkcOSIndependent.c の 487 行で定義されています。 参照先 dkcSaveFile(). 参照元 dkcFileCopyEx(), と dkcMemoryStreamDump().
    00487                                                                         {//="wb"
    00488     return dkcSaveFile(data,size,fname,"wb");
    00489 }

DKC_EXTERN int WINAPI dkcSaveText | ( | const char * | text,
|  | size_t | length,
|  | const char * | fname
| ) |

| fopenでテキストセーブを行う dkcOSIndependent.c の 504 行で定義されています。 参照先 dkcSaveFile().
    00504                                                                                    {
    00505     return dkcSaveFile(text,length,fname,"wt");
    00506 }

DKC_EXTERN int WINAPI dkcSelect | ( | void * | dest,
|  | const void * | a_src,
|  | size_t | n,
|  | int | k,
|  | size_t | width,
|  | DKC_COMPARE_TYPE | less
| ) |

| いわいるセレクト(選択)アルゴリズム n:配列の再台数 k:調べたい番号（小さいうちから） 戻り値: offset number ,Error : UINT_MAX dkcOSIndependent.c の 886 行で定義されています。 参照先 dkcSwapFast(), get_offset, と NULL. 参照元 dkcSelectMax(), と dkcSelectMin().
    00887 {
    00888
    00889     int i,j,left, right;
    00890
    00891     void *x = malloc(width);
    00892     void *a = malloc(n * width);
    00893     if(NULL==x || NULL==a){
    00894         return edk_ArgumentException;
    00895     }
    00896     if(n > INT_MAX){
    00897         return edk_FAILED;
    00898     }
    00899
    00900
    00901     memcpy(a,a_src,width * n);
    00902
    00903
    00904     left = 0;  right = n - 1;
    00905
    00906     while (left < right)
    00907     {
    00908
    00909         memcpy(x,   (const void *)get_offset(a,k * width),width);
    00910         i = left;
    00911         j = right;
    00912
    00913         for ( ; ; ) {
    00914
    00915             while( less(get_offset(a,i * width),x) > 0){
    00916             //while( *(int *)get_offset(a,i * width) < *(int *)x){
    00917                 i++;
    00918             }
    00919
    00920             while( less(x,get_offset(a,j * width)) > 0){
    00921             //while( *(int *)x < *(int *)get_offset(a,j * width) ){
    00922                 j--;
    00923             }
    00924
    00925             if (i > j){
    00926                 break;
    00927             }
    00928
    00929
    00930             dkcSwapFast(
    00931                 get_offset(a,i * width),
    00932                 get_offset(a,j * width),
    00933                 width
    00934                 );
    00935
    00936             i++;
    00937             j--;
    00938         }
    00939         if (j < k){
    00940             left  = i;
    00941         }
    00942         if (k < i){
    00943             right = j;
    00944         }
    00945     }
    00946
    00947     //ゲットする
    00948     {
    00949         //printf("%d",*(int *)get_offset(a,k * width));
    00950
    00951         memcpy(dest,(const void *)get_offset(a,k * width),width);
    00952
    00953     }
    00954     free(x);
    00955     free(a);
    00956
    00957     return edk_SUCCEEDED;
    00958
    00959 }

DKC_EXTERN int WINAPI dkcSelectMax | ( | void * | dest,
|  | const void * | a,
|  | size_t | n,
|  | size_t | width,
|  | DKC_COMPARE_TYPE | comp
| ) |

| 最大値を選択する 参照: dkcSelect() の 引数kが無いだけ dkcOSIndependent.c の 962 行で定義されています。 参照先 dkcSelect().
    00962                                                                                                            {
    00963     if(n-1 > INT_MAX){
    00964         return edk_FAILED;
    00965     }
    00966     return dkcSelect(a,a_src,n,(int)n-1,width,less);
    00967 }

DKC_EXTERN int WINAPI dkcSelectMin | ( | void * | dest,
|  | const void * | a,
|  | size_t | n,
|  | size_t | width,
|  | DKC_COMPARE_TYPE | comp
| ) |

| 最小値を選択する 参照: dkcSelect() の 引数kが無いだけ dkcOSIndependent.c の 968 行で定義されています。 参照先 dkcSelect().
    00968                                                                                                            {
    00969     return dkcSelect(a,a_src,n,(int)0,width,less);
    00970 }

DKC_EXTERN void WINAPI dkcSwap | ( | void * | p1,
|  | void * | p2,
|  | size_t | size
| ) |

| 演算でSwapさせる。SWAP_NUM()マクロを参照。 dkcOSIndependent.c の 649 行で定義されています。 参照先 dkcSwap64(), と ULONGLONG. 参照元 dkcBubbleSort(), dkcCombSort(), と dkcShellSort().
    00650 {
    00651     dkcSwap64((ULONGLONG *)p1,(ULONGLONG *)p2,size);
    00652 }

DKC_EXTERN void WINAPI dkcSwap64 | ( | ULONGLONG * | p1,
|  | ULONGLONG * | p2,
|  | size_t | size
| ) |

  | 引数:
  | p1[in] | ULONGLONG *のバッファへのポインタ
  | p2[in] | ULONGLONG *のバッファへのポインタ
  | size[in] | p1,p2バッファのサイズ
覚え書き: p1,p2共にULONGLONG *に強制型キャストしてください。 dkcOSIndependent.c の 613 行で定義されています。 参照先 BYTE, と ULONGLONG. 参照元 dkcSwap().
    00613                                                               {
    00614     size_t i;
    00615     BYTE buf;
    00616     size_t mod_ = size % sizeof(ULONGLONG);
    00617     size_t cnt = size / sizeof(ULONGLONG);
    00618     //char *tp1 = (char *)p1,*tp2 = (char *)p2;
    00619     for(i=0;i<cnt;i++){
    00620         SWAP_TEMP(register ULONGLONG,p1[i],p2[i]);
    00621         //SWAP_NUM(p1[i],p2[i]);
    00622     }
    00623     for(i=0;i<mod_;i++){
    00624
    00625         //SWAP_NUM((char)tp1[size - mod_ + 1],(char)tp2[size - mod_ + i]);
    00626         /*a = b - a ;\
    00627     b -= a ;\
    00628     a += b
    00629         */
    00630         /*( ( ((char *) p2)[size - mod_ + i]))
    00631             = (char)( ( ((char *) p2)[size - mod_ + i])) -
    00632             (char)( ( ((char *) p1)[size - mod_ + i]));
    00633
    00634         ( ( ((char *) p2)[size - mod_ + i])) -= ( ( ((char *) p1)[size - mod_ + i]));
    00635
    00636         ( ( ((char *) p1)[size - mod_ + i])) += ( ( ((char *) p2)[size - mod_ + i]));
    00637             */
    00638
    00639
    00640         buf = (((BYTE *)p1)[size - mod_ + i]);
    00641         (((BYTE *)p1)[size - mod_ + i]) =
    00642             (((BYTE *)p2)[size - mod_ + i]) ;
    00643         (((BYTE *)p2)[size - mod_ + i]) = buf;
    00644
    00645     }
    00646
    00647 }

DKC_EXTERN BOOL WINAPI dkcSwapFast | ( | void * | p1,
|  | void * | p2,
|  | size_t | size
| ) |

| どんな方法でもいいからともかく速くSwapさせる。 覚え書き: size分のメモリを動的確保してスワップします。 dkcOSIndependent.c の 542 行で定義されています。 参照先 FALSE, NULL, と TRUE. 参照元 dkcSelect().
    00543 {
    00544     void *p;
    00545 #if 0//stack overflow 例外が発生するのも嫌だから挙動は共通で。
    00546     int state = 0;
    00547     p = _alloca( size );
    00548     if(NULL==p){
    00549         state = 1;
    00550         p = malloc(size);
    00551         if(NULL==p)
    00552             return FALSE;
    00553     }
    00554 #else
    00555     p = malloc(size);
    00556     if(NULL==p)
    00557         return FALSE;
    00558 #endif
    00559     memcpy(p,p1,size);
    00560     memcpy(p1,p2,size);
    00561     memcpy(p2,p,size);
    00562 #if 0
    00563     if(1==state){
    00564         free(p);
    00565     }
    00566
    00567 #else
    00568     free(p);
    00569 #endif
    00570     return TRUE;
    00571 }

DKC_EXTERN void WINAPI dkcTwoDWORDToULONGLONG | ( | ULONGLONG * | dest,
|  | DWORD | high,
|  | DWORD | low
| ) |

| dkcOSIndependent.c の 656 行で定義されています。 参照先 ULONGLONG. 参照元 dkcFileSize64V().
    00656                                                                                    {
    00657     //*dest = (ULONGLONG)((high << 32) + low);
    00658     *dest = (ULONGLONG)high << 32;
    00659     *dest += low;
    00660         //( high * MAXDWORD ) + low;
    00661 }

DKC_EXTERN void WINAPI dkcTwoLONGToLONGLONG | ( | LONGLONG * | dest,
|  | LONG | high,
|  | LONG | low
| ) |

| dkcOSIndependent.c の 687 行で定義されています。 参照先 dkc_2int32_to_int64::QuadPart, と dkc_2int32_to_int64::u.
    00687                                                                               {
    00688     /*//*dest = (ULONGLONG)((high << 32) + low);
    00689     *dest = (LONGLONG)high << 32;
    00690     //*dest += low;
    00691     (*dest) &= low;
    00692     */
    00693 #ifdef WIN32
    00694     DKC_TWOINT32_TO_INT64 a;
    00695
    00696     a.u.HighPart = high;
    00697     a.u.LowPart = low;
    00698     *dest = a.QuadPart;
    00699
    00700 #else
    00701
    00702 #endif
    00703 }

DKC_INLINE void dkcTwoLONGToULONGLONG | ( | ULONGLONG * | dest,
|  | LONG | high,
|  | LONG | low
| ) |

| 覚え書き: エンディアン環境によって上手く出来るか分からない dkcOSIndependent.h の 154 行で定義されています。
    00154                                                                          {
    00155     ULONG *p = (ULONG *)&low,*p2;
    00156     *dest = *p;
    00157     p = (ULONG *)(dest + 1);
    00158     p2 = (ULONG *)&high;
    00159     *p = *p2;
    00160 }

DKC_EXTERN void WINAPI dkcULONGLONGToTwoDWORD | ( | DWORD * | dhigh,
|  | DWORD * | dlow,
|  | ULONGLONG | src
| ) |

| TODO: エンディアン問題をどうにかしよう！(あれ？ dkcOSIndependent.c の 663 行で定義されています。 参照先 dkcmNOT_ASSERT, DWORD, と ULONGLONG.
    00663                                                                                      {
    00664     DWORD *o = (DWORD *)&src;
    00665     dkcmNOT_ASSERT(sizeof(DWORD) * 2 != sizeof(ULONGLONG));
    00666
    00667
    00668     //*dhigh = o[0];*dlow = o[1];
    00669     *dhigh = o[1];*dlow = o[0];
    00670 }