Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289////////////////////////////////////////////////////////////////////// Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine// All rights reserved// This file was released under the GPLv2 on June 2015.////////////////////////////////////////////////////////////////////#ifndef __TOOLS_H__#define __TOOLS_H__
#ifdef __cplusplusextern "C" {#endif
#ifndef __CROSSNT_MISC__H__
typedef struct _FOUR_BYTE { UCHAR Byte0; UCHAR Byte1; UCHAR Byte2; UCHAR Byte3;} FOUR_BYTE, *PFOUR_BYTE;
#if defined _X86_ && defined __CROSS_VERSION_LIB_NT__H__
#define AcquireXLock(gLock, oldValue, newValue) \{ \ PULONG _gLock_ = &(gLock); \ __asm push ebx \ __asm mov eax,newValue \ __asm mov ebx,_gLock_ \ __asm xchg eax,[ebx] \ __asm mov oldValue,eax \ __asm pop ebx \}
void__fastcall_MOV_DD_SWP( void* a, // ECX void* b // EDX );#define MOV_DD_SWP(a,b) _MOV_DD_SWP(&(a),&(b))/*#define MOV_DD_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ __asm mov ebx,_from_ \ __asm mov eax,[ebx] \ __asm bswap eax \ __asm mov ebx,_to_ \ __asm mov [ebx],eax \}*/
void__fastcall_MOV_DW_SWP( void* a, // ECX void* b // EDX );#define MOV_DW_SWP(a,b) _MOV_DW_SWP(&(a),&(b))/*#define MOV_DW_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ __asm push ebx \ __asm mov ebx,_from_ \ __asm mov ax,[ebx] \ __asm rol ax,8 \ __asm mov ebx,_to_ \ __asm mov [ebx],ax \ __asm pop ebx \}*/
void__fastcall_REVERSE_DD( void* a // ECX );#define REVERSE_DD(a) _REVERSE_DD(&(a))/*#define REVERSE_DD(a) { \ PFOUR_BYTE _from_; \ _from_ = ((PFOUR_BYTE)&(a)); \ __asm mov ebx,_from_ \ __asm mov eax,[ebx] \ __asm bswap eax \ __asm mov [ebx],eax \}*/
void__fastcall_REVERSE_DW( void* a // ECX );#define REVERSE_DW(a) _REVERSE_DW(&(a))/*#define REVERSE_DW(a) { \ PFOUR_BYTE _from_; \ _from_ = ((PFOUR_BYTE)&(a)); \ __asm mov eax,_from_ \ __asm rol word ptr [eax],8 \}*/
void__fastcall_MOV_DW2DD_SWP( void* a, // ECX void* b // EDX );#define MOV_DW2DD_SWP(a,b) _MOV_DW2DD_SWP(&(a),&(b))/*#define MOV_DW2DD_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ __asm mov ebx,_from_ \ __asm mov ax,[ebx] \ __asm rol ax,8 \ __asm mov ebx,_to_ \ __asm mov [ebx+2],ax \ __asm mov [ebx],0 \}*/
void__fastcall_MOV_MSF( void* a, // ECX void* b // EDX );#define MOV_MSF(a,b) _MOV_MSF(&(a),&(b))/*#define MOV_MSF(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ __asm mov ebx,_from_ \ __asm mov eax,[ebx] \ __asm mov ebx,_to_ \ __asm mov [ebx],ax \ __asm shr eax,16 \ __asm mov [ebx+2],al \}*/
void__fastcall_MOV_MSF_SWP( void* a, // ECX void* b // EDX );#define MOV_MSF_SWP(a,b) _MOV_MSF_SWP(&(a),&(b))/*#define MOV_MSF_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ __asm mov ebx,_from_ \ __asm mov eax,[ebx] \ __asm mov ebx,_to_ \ __asm mov [ebx+2],al \ __asm bswap eax \ __asm shr eax,8 \ __asm mov [ebx],ax \}*/
void__fastcall_XCHG_DD( void* a, // ECX void* b // EDX );#define XCHG_DD(a,b) _XCHG_DD(&(a),&(b))/*#define XCHG_DD(a,b) \{ \ PULONG _from_, _to_; \ _from_ = ((PULONG)&(b)); \ _to_ = ((PULONG)&(a)); \ __asm mov ebx,_from_ \ __asm mov ecx,_to_ \ __asm mov eax,[ebx] \ __asm xchg eax,[ecx] \ __asm mov [ebx],eax \}*/
#else // NO X86 optimization , use generic C/C++
#define AcquireXLock(gLock, oldValue, newValue) \{ \ oldValue = gLock; \ gLock = newValue; \}
#define MOV_DD_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ _to_->Byte0 = _from_->Byte3; \ _to_->Byte1 = _from_->Byte2; \ _to_->Byte2 = _from_->Byte1; \ _to_->Byte3 = _from_->Byte0; \}
#define MOV_DW_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ _to_->Byte0 = _from_->Byte1; \ _to_->Byte1 = _from_->Byte0; \}
#define REVERSE_DD(a) { \ ULONG _i_; \ MOV_DD_SWP(_i_,(a)); \ *((PULONG)&(a)) = _i_; \}
#define REVERSE_DW(a) { \ USHORT _i_; \ MOV_DW_SWP(_i_,(a)); \ *((PUSHORT)&(a)) = _i_; \}
#define MOV_DW2DD_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ *((PUSHORT)_to_) = 0; \ _to_->Byte2 = _from_->Byte1; \ _to_->Byte3 = _from_->Byte0; \}
#define MOV_MSF(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ _to_->Byte0 = _from_->Byte0; \ _to_->Byte1 = _from_->Byte1; \ _to_->Byte2 = _from_->Byte2; \}
#define MOV_MSF_SWP(a,b) \{ \ PFOUR_BYTE _from_, _to_; \ _from_ = ((PFOUR_BYTE)&(b)); \ _to_ = ((PFOUR_BYTE)&(a)); \ _to_->Byte0 = _from_->Byte2; \ _to_->Byte1 = _from_->Byte1; \ _to_->Byte2 = _from_->Byte0; \}
#define XCHG_DD(a,b) \{ \ ULONG _temp_; \ PULONG _from_, _to_; \ _from_ = ((PULONG)&(b)); \ _to_ = ((PULONG)&(a)); \ _temp_ = *_from_; \ *_from_ = *_to_; \ *_to_ = _temp_; \}
#endif // _X86_
#endif // __CROSSNT_MISC__H__
#define CONV_TO_LL(a) a.Byte0 | a.Byte1 << 8 | a.Byte2 << 16 | a.Byte3 << 8#define MSF_TO_LBA(Minutes,Seconds,Frames) \ (ULONG)((60 * 75 * (Minutes)) + (75 * (Seconds)) + ((Frames) - 150))
#define PacketFixed2Variable(x,ps) ( ( ( (x) / (ps) ) * (ps+7) ) + ( (x) & (ps-1) ) )#define PacketVariable2Fixed(x,ps) ( ( ( (x) / (ps+7) ) * (ps) ) + ( (((x) % (ps+7)) < (ps)) ? ((x) % (ps+7)) : (ps-1) ) )
#define WAIT_FOR_XXX_EMU_DELAY 1000LL // 0.0001 s
#define max(a,b) (((a) > (b)) ? (a) : (b))#define min(a,b) (((a) < (b)) ? (a) : (b))
#ifndef offsetof#define offsetof(type, field) (ULONG)&(((type *)0)->field)#endif //offsetof
#ifdef __cplusplus};#endif
#endif // __TOOLS_H__