;U vseh VarInit 1 dd ProcsTab,2 dd ProcsTab,3 dd Params,4 dd RlsProcsTab
;esli chP#_E-chP to budet push ebp !
TypeDB = 0
TypeDW = 1
TypeDD = 2
TypeDQ = 3
TypeV2 = 4   ;vector2 as float2
TypeV3 = 5   ;vector3 as float3
TypeV4 = 6   ;vector4 as float4
TypeFlt = 7
TypeMatrix4 = 10   ;mat4x4 as float4x4
TypeMatrix3 = 11   ;mat3x3
TypeMatrix2 = 12   ;mat2x2
;mMmm nado iz drugogo macrosa uzat ! chtobi dla var type svoe macros
macro mMTypeDD chTo,chA,chB {
      if  tmpEquzzA = tmpEquzzB
      mov eax,[chA]
      add eax,[chB]
      mov [chTo],eax
      end if
      if  tmpEquzzA = TypeDD & tmpEquzzB = TypeFlt
      mov eax,[chA]
      cvtss2si ebx,[chB]
      add eax,ebx
      mov [chTo],eax
      end if
      }
macro mMTypeFlt chTo,chA,chB {
      if  tmpEquzzA = tmpEquzzB
      movss xmm0,[chA]
      addss xmm0,[chB]
      movss [chTo],xmm0
      end if
      if tmpEquzzA = TypeFlt & tmpEquzzB = TypeDD
      movss xmm0,[chA]
      cvtsi2ss xmm1,[chB]
      addss xmm0,xmm1
      movss [chTo],xmm0
      end if
      if tmpEquzzA = TypeDD & tmpEquzzB = TypeFlt
      cvtsi2ss xmm0,[chA]
      addss xmm0,[chB]
      movss [chTo],xmm0
      end if
      }
macro mMmm chTp,chTo,chA,chB { match dst,chTp \{
	   mM\#dst chTo,chA,chB \}
	    }
macro Sum chTo,chA,chB {
      tmpEquzzA EQU chA#_tp
      tmpEquzzB EQU chB#_tp
      mMmm  tmpEquzzA,chTo,chA,chB

      }
 macro inline chP {
       ;call chP
       repeat chP#_mE-chP#_mB
	 load ttt byte from chP#_mB+%-1
	 db ttt
   end repeat
       }
 macro inline2 chB,chE {
       repeat chE-chB
	 load ttt byte from chB+%-1
	 db ttt
   end repeat
       }
macro Var chNm,chSz,chType {
       chNm EQU ofss_VarsT
       chNm#_tp EQU chType
       ofss_VarsT EQU ofss_VarsT+chSz
      }
macro VarInit chNm,chSz,chType { 
	chNm EQU Init_Vars
	Init_Vars EQU Init_Vars+chSz
mov  ebx,chNm
Call [InitVarTab+chType*4] }

macro VarInitParam chNm,chSz,chType,chP {
	chNm EQU Init_Vars
	Init_Vars EQU Init_Vars+chSz
mov  ebx,chNm
mov [ebx+8],chP
Call [InitVarTab+chType*4] }

macro VarRun chV { mov ebx,chV
		mov eax,[ebx]
		Call dword [eax]
	}
macro VarRls chV { mov ebx,chV
		mov eax,[ebx+12]
		Call dword [eax]
	}
macro VarRun2 chV,chProc {mov ebx,chV
		mov eax,[ebx+4]
		Call dword [eax+chProc]
 }
macro PutVar chTo,chVr { mov [chTo+8],chVr }

