//////////////////////////////////////////////////////////foxfunc.cpp
( M' A q" ] [0 D# F5 n, l
' r7 q) a: q3 |0 j9 ^//FoxFunc.cpp : Defines the entry point for the DLL application.
% C6 @2 Y7 R4 _7 D//1 G; ?4 @7 B$ ~
#include<string.h>
5 H. w+ O6 h2 \1 s7 d#include<stdio.h>
4 y; h5 B. c2 y& b' k+ [#include<io.h>7 D7 N* Y* e: I2 Z8 Y! s4 t
#include<math.h>' r8 M9 y5 p7 |5 n. B
#include<iostream>
. f+ Z/ B' M6 K! ~) w#include"stdafx.h". W; _8 z' p N+ S
#include"FoxFunc.h"
# F3 }$ a" x, Q- {usingnamespace std;- W3 u. T Y( [: f. I
BOOLAPIENTRY DllMain( HANDLE hModule, W1 r/ w# A- N7 L- Q3 v
DWORDul_reason_for_call, 7 t: ?. B4 |- j1 X2 n
LPVOIDlpReserved
) F* I4 {7 ~! Q4 Y+ X6 [. t* |* C)
5 T F0 H8 W( a u# P{% t6 O9 b# m' b# G
switch(ul_reason_for_call)9 N0 t# |/ a! ]9 x% P+ P9 ]! W. g
{
3 O C! B# ^$ I4 e0 Z0 q4 mcaseDLL_PROCESS_ATTACH:
/ O( d, ^, [8 Y( [2 m KcaseDLL_THREAD_ATTACH:
) u6 X( S& A+ _caseDLL_THREAD_DETACH:
0 m _+ j! Q% vcaseDLL_PROCESS_DETACH:
" Z- _' R# q( V3 X3 M9 zbreak;
/ y0 R! ~, H4 p( U}, {) S1 a( U2 C% _( \( s$ y
returnTRUE;
, S3 A- K/ R5 l% I$ z3 T}7 n1 @# }4 _: j0 Z- @; p& _
//计算收盘价的均价,一个常数参数,表示计算周期; ?2 {1 K E3 \) B* M) w: t
//调用方法:
2 r+ n" l8 r2 V: [' s9 _//"FOXFUNC@MYMACLOSE"(5)
* h2 y! _& C9 [; ]* {) e! X: H/*
' N# D$ w8 v" B+ \, ]//extern "C" double __cdecl ppow10(double ctemp,doublelength); - - - > wrong, extern "C" is to declare pow10coming from a .dll or .lib
, ^; g( _, C$ s+ E& v2 k9 X" h9 k//extern "C" double ppow10(double ctemp,double length); - - -> both are the same
0 }/ ?7 p) j' A2 _*/6 }9 A$ U/ T* k) X
extern"C" double __cdecl ppow10(double ,double );
, b0 D7 r( t1 j k0 r7 L3 y9 W0 `//double ppow10(double ,double ); . k' J# m! l- t7 N# i8 l; P
//call pow10() by __cdecl
X1 {- M% b" o% e//!!!!!!!! use "C" for Microsoft visual C++ compiler, d9 a. `+ q( `) r: G
//!!!!!!!! use "C" for Microsoft visual C++ compiler; u& o4 z% J# V' m( @* q
//!!!!!!!! use "C" for Microsoft visual C++ compiler9 ?( t3 q4 J8 k* z# G: s4 }
//!!!!!!!! use "C" for Microsoft visual C++ compiler8 H0 w1 T4 L5 \# I. \/ G' q
//!!!!!!!! use "C" for Microsoft visual C++ compiler
' n0 ? c, A$ N, I/ ^( f__declspec(dllexport)int WINAPI MYMACLOSE(CALCINFO* pData)+ }3 y1 ^: h1 Z5 N- X/ U0 @" J8 a
{! c c2 B$ \& n
if( // pData->m_pfParam1 && //参数1有效
7 J6 H' [$ e; Y% `6 B# N//pData->m_nParam1Start<0 && //参数1为常数
% J' F6 d: {) g0 @% d//pData->m_pfParam2==NULL ) //仅有一个参数1 P" h( O8 J9 F7 E+ A
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_pfParam4) J8 j4 z. T/ O/ q; D1 E
//&& pData->m_pfParam5 && pData->m_pfParam6 &&pData->m_nParam1Start>=0 &&
. l; @* e' s. ?" c3 x8 @! k//pData->m_pfParam7==NULL)- g# Z! t4 j7 n/ g
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_nParam1Start>=0 &&1 ?! l C& K$ X( B8 r* J
pData->m_pCalcParam[0].m_nParamStart>=0&& pData->m_pCalcParam[1].m_nParamStart>=05 a) M) h ~3 b1 O% r& B
&&pData->m_pCalcParam[2].m_nParamStart>=0)
e% n( d% Q! C{
8 F5 R& U" _ I1 R& I) pfloatfParam = *pData->m_pfParam4; //pointer ,pData->m_pCalcParam[3].m_nParamStart >= 0
# ]- T: ]7 Y$ V1 [1 T; k9 v f5 \intnPeriod = (int)fParam; //参数17 y# y, F+ z; b4 A- @- K3 ~2 @
//const float* cpParam = pData->m_pfParam2; // cpParam = pointer to
) C0 _* I. n' |: G1 aconstfloat* cpParam2 =pData->m_pCalcParam[1].m_pfParam; // cpParam =pointer to # F' }$ u5 C# `* f! c
constfloat* cpParam3 =pData->m_pCalcParam[2].m_pfParam; // cpParam =pointer to
! M- i- o O$ E$ h* Mconstfloat* cpParam4 =pData->m_pCalcParam[3].m_pfParam; // cpParam =pointer to . ?, V5 ]3 b- N( f ]; e
//const float* cpParam5 =pData->m_pCalcParam[4].m_pfParam; //cpParam = pointer to
" A) Y! @3 T5 J2 A//in foxtraderoooq:"MYFUNC2010@MYMACLOSE"(c,c,c,6),colorffffff,linethick5;// cpParam5 =pData->m_pCalcParam[4].m_pfParam
( f# H7 O6 V: w7 L//pData->m_pCalcParam[5].m_fParam); //value' y* E2 z7 y6 T: B" g# O
//const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
% y, z% f) m b, {& z# d//const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;
3 ?3 i/ q3 o4 j//const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;* I( B; S1 Z) Q0 P1 O2 X
//const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;, [3 S" C/ B, k n7 x2 l% P
//const float* pValue5 = pData->m_pCalcParam[4].m_pfParam;
# w, t% j; h# u& Z! x6 S& C. cif(nPeriod>0)
" m$ M$ A" {; a$ }{
$ d5 D7 B& ]! r% WfloatfTotal;; T0 Q" d5 z) Y& f
inti, j;
' J# m: b) t* N) h( Pintndata = pData->m_nNumData;+ R) v( S: U S8 \) a1 q* h3 e
//float yy[5000][1];' D4 }7 F: |" [ o3 y- n) S0 K
for( i = nPeriod-1; i < pData->m_nNumData; i++)//计算nPeriod周期的均线,数据从nPeriod-1开始有效
" s6 v5 ^3 \ Z" V{
* a' ]! m+ m" z" g8 d1 }fTotal= 0.0f;+ I, K) P5 S! T1 n5 w O
doublelngth=5.0;
: U" Z" Y0 @3 ~3 V% pdoublectemp=4.0;3 ^: ]+ W$ X/ s
//float yy1[5000][1];
5 |/ V6 R" I/ p3 Z/ g+ Sfor( j = 0; j < nPeriod; j++ ) //累加
0 M6 H; n( \. U9 J{
% e/ R0 m: h+ x" _fTotal= pData->m_pData.m_fClose; // @@@@@@@ vc++ 2010 cl.exe 使pData->m_pData[i-j].m_fClose错误9 Z0 r$ _% k; q% a* |) y8 L
}9 ? b0 l- `- O2 K6 J4 p& B; v
//pData->m_pResultBuf = fTotal*1.03; //平均
2 m" D. C* r7 D7 P8 V A: WfTotal= cpParam3;+ \# {2 n- I: @$ b4 y
pData->m_pResultBuf= fTotal*1.03; //平均/ j3 h: [, K/ _: o
//ctemp = (double) pData->m_pResultBuf; // double & - - - >overload a float value , double * - - - > overload a pointer todouble
% s& S, _0 }" `" A//pData->m_pResultBuf= (float) ppow10(ctemp,lngth); // float &- - - > overload a float value' [* f7 H# ~: x) E. I2 N
pData->m_pResultBuf=(float) ppow10( (double) pData->m_pResultBuf,lngth); // float &- - - > overload a float value, (float) = overload
! y9 N4 i! H0 R1 N5 [6 {# m: H4 c}) z( p2 p; |' t$ }& e$ y/ y% x( X
returnnPeriod-1;; R# J* |- ?; s6 E" W
}
( i x' d) g# O, s4 x9 I) d}
4 e& i& J; j4 x, @return-1;+ B% }5 s% e& H+ D- s# J. ?
}
f! |; E/ A* U- J//计算均价,2个参数,参数1为待求均线的数据,参数2表示计算周期5 |1 S& u: e+ C* K) C# J
//调用方法:" ~0 k9 r% L3 Z2 f% \( t# |1 b( T
//"FOXFUNC@MYMAVAR"(CLOSE-OPEN,5)
- } a& _2 B2 K" ]& ~! [__declspec(dllexport)int WINAPI MYMAVAR(CALCINFO* pData)4 _4 f6 r7 ^: P
{
: {2 l e- h% N% E: }if(pData->m_pfParam1&& pData->m_pfParam2 && //参数1,2有效
8 ~+ V/ \ U, P; ^" W& ^pData->m_nParam1Start>=0&& //参数1为序列数2 d1 N0 |( |" o3 ?7 r/ @
pData->m_pfParam3==NULL)//有2个参数
" k" v# \, N0 Y& `% s{
$ N/ R# @2 [, O9 i# lconstfloat* pValue = pData->m_pfParam1; //参数1; [2 ?5 U* W. m5 h% n8 W: K
intnFirst = pData->m_nParam1Start; //有效值起始位% W2 S3 C( L' `/ @% P% {- G: I
floatfParam = *pData->m_pfParam2; //参数23 [1 {! I5 R8 u* v
intnPeriod = (int)fParam; . _2 r2 @9 a* Y2 J5 F# x: s, t
if(nFirst >= 0 && nPeriod > 0 )
3 c+ k: I; x+ J+ [! T: ^{
& s- R5 G5 ~) w$ B: x- D4 LfloatfTotal;
3 g9 \6 d6 I8 h& rinti, j;
; B+ }0 b% y0 g% G3 E& p- Z+ bfor( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )- X7 Z( i7 n5 p4 L5 l. f
{3 S e% V, S* w; a1 e
fTotal= 0.0f;2 d: |) D2 l8 n+ I3 @1 T1 e
for( j=0; j < nPeriod; j++ ) //累加4 b5 S9 Z# Z; Q+ S2 L' a
fTotal+= pValue[i-j];
. c# Z! S) O& O) R# o: ypData->m_pResultBuf= fTotal/nPeriod;//平均
( f: S3 l& g* Q7 O Y) W. z+ e}0 Z5 T; l1 M4 [& q4 M6 O# y
returnnFirst+nPeriod-1;& }$ G; w" O1 V9 t# ^/ \( m6 e2 N
}- @; Q0 J5 i) b% f' Q: M' l) T w
}
! M {" u+ M5 Oreturn-1;$ L2 |. v \0 \* E7 o7 f$ |$ y
}0 I( r. Z2 ^; B" A
//计算多个序列的均值,5个参数,参数1-4为待求多个序列,参数5用于举例说明数值参数的用法,实际在此例中无需该参数6 \3 E! U R( v9 H* U- H; v
/*
8 \ ?$ A; S0 \* l6 i调用方法:5 N0 q: _1 x1 S; ]
MA1:=MA(CLOSE,3);
7 f" ?9 x' O- K- I C# J, u# |MA2:=MA(CLOSE,6);1 {/ e) o2 z; I, @5 _
MA3:=MA(CLOSE,12);% J! n& h; m" y1 s
MA4:=MA(CLOSE,24);9 S4 P0 J# d- K2 w# R3 U/ N
MYBBI:"FOXFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4);; q _$ o" O- s9 O+ {8 c2 K
*/
/ e2 q' H9 o2 B__declspec(dllexport)int WINAPI MYBBI(CALCINFO* pData)# A; _1 y" \( G5 l# a8 f# x
{
+ Q& w$ U# L% w* ~7 ~# bif( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
$ ~$ J% a( N& A1 `" n/ [/ spData->m_pCalcParam[1].m_nParamStart>= 0 &&
9 i- N! D( o9 c w0 T7 w* PpData->m_pCalcParam[2].m_nParamStart>= 0 &&
4 M, m1 K. @8 L- c6 v4 ^pData->m_pCalcParam[3].m_nParamStart>= 0 ) //4个序列都含有效数值
# y3 ]! `' P x4 }, k/ Y# d3 ?{( y$ M$ ?9 `! u$ Z/ c0 V0 V
//计算返回的序列的第一个有效值位置
3 B% r! ?6 g+ tintnFirst = pData->m_pCalcParam[2].m_nParamStart;//已知返回的序列的第一个有效值位置与第4个序列一致
4 ?& r' A, g0 {+ I7 l. D/ a//若不知,则
1 [5 A+ [" Z. n6 X/*
+ S W; ]& J" c7 ]1 Z0 kintnFirst = pData->m_pCalcParam[0].m_nParamStart;) o0 M% G2 E6 {4 H5 c% A/ Y! j
if( nFirst < pData->m_pCalcParam[1].m_nParamStart )
4 h4 r4 j3 \' ? ^* b" KnFirst= pData->m_pCalcParam[1].m_nParamStart;
+ ?. t8 m+ k0 E! F. D2 ?if( nFirst < pData->m_pCalcParam[2].m_nParamStart ) " `" j( U& |0 D& R& _+ w7 `" w
nFirst= pData->m_pCalcParam[2].m_nParamStart;
* s; I( f- a7 ^! E5 s) P3 A3 @if( nFirst < pData->m_pCalcParam[3].m_nParamStart ) % U! _4 g" j; E% }3 _. N
nFirst= pData->m_pCalcParam[3].m_nParamStart;. l6 m3 s' o8 u- n
*/4 {2 J8 x& G4 Z3 x
constfloat* pValue1 = pData->m_pCalcParam[0].m_pfParam;# R- Y0 g* M( i, a6 e
constfloat* pValue2 = pData->m_pCalcParam[1].m_pfParam;# k. n" B# d& V$ s. Y D, r
constfloat* pValue3 = pData->m_pCalcParam[2].m_pfParam;
$ W) r, ?3 W$ e2 W- ]constfloat* pValue4 = pData->m_pCalcParam[3].m_pfParam;
9 U: V( {' X0 bconstfloat* pValue5 = pData->m_pCalcParam[4].m_pfParam;
+ f4 n @' M4 @5 ?constfloat* pValue6 = pData->m_pCalcParam[5].m_pfParam;
2 ^- [1 G1 \& l: x//const float* pValue1 = pData->m_pfParam1;5 C& J1 G. R2 y4 V1 h6 k, u
//const float* pValue2 = pData->m_pfParam2;
5 o1 w- j$ z! t8 j" D8 ]//const float* pValue3 = pData->m_pfParam3;
1 g' J A9 g2 ]; F) `% s$ R! Y//int nNum = (int)(*pData->m_pfParam4);//实际上该例中已知nNum=4,在此用于说明数值参数的用法
' C7 t. p. G6 \. J* jintnNum = (int)(pData->m_pCalcParam[6].m_fParam);//实际上该例中已知nNum=4,在此用于说明数值参数的用法, U; K6 H0 r6 [5 @2 {7 C1 _. P
for(int i = nFirst; i < pData->m_nNumData; i++ )
, Q. W. ]8 s/ o! H1 S{
$ j2 w9 v' L& m- IpData->m_pResultBuf=
4 L1 X0 h0 W. D0 ^9 m% U& a//(pValue1 + pValue2 + pValue3 )/nNum;
% h" q, M( e; Q# l1 u(pValue1+ pValue2 + pValue3 + pValue4+pValue5 + pValue6)/nNum;$ t7 I6 [& [- g/ ?+ s
}$ [1 u& m" b* o0 g% P
returnnFirst;1 Z) L, b% B" ? f# e3 o
}
+ X+ l, B. q! \3 q9 }return-1;. X" \% T- W" \; ? u4 Y. L
}
# h9 r# S0 g6 `5 t7 l# Q
4 M, [" d6 T. I- D0 B% V0 E+ c1 J" o, r3 l, L% a1 G& J# m
# `' C% |- H/ O6 A1 Q
//////////////////////////////////////////////////////////////pow10.asm
; j, y. s& g2 [;*******************************************************& _1 C6 [2 T* f+ C& G- P) c/ ^3 y
;* *
2 R/ l) @8 r: Q;* Delphi Run Library *
- [9 b4 C$ q6 i9 U;* *
: q( q+ `! m0 P2 v;* Copyright (c) 1996,98 Inprise Corporation *
( a& i) l3 a, d) Q5 `7 Q- w;*--------------------------------------------------------------------------6 R0 t4 y! o! j* w% u
;* To compile "tasm32 /ml pow10.asm" ** N: u, A C$ u T
;*--------------------------------------------------------------------------
O) |- \! w' |; l( S( d% Y;*******************************************************
- ~6 A2 Z& |& _; ].386" F6 }, P; y! n R! w
;.MODEL flat,c (error must be in segement block must have segment! N1 C6 C v5 `' ?8 e: ]
;!!!!!11 important if ',c' is not used , must use 'public _ppow10, and'_ppow10 proc'
. S1 F/ S7 u# y( V1 G9 B& I;!!!!!11 important if .MODEL flat,c is not used , must use ;_TEXTSEGMENT WORD PUBLIC% `; k2 T+ h$ B6 x# g
;'CODE'..._TEXT ENDS and must use 'public _ppow10 and '_ppow10 proc'
" T- o& U/ [7 d.MODELflat,c ; just use .code, no need for segment,!!!!!11 important if',c' is used , must use 'public ppow10, and 'ppow10 proc') S4 J0 M* \* Q3 i7 W, O8 L
;ppow10 PROTO,aVal:PTR REAL8, bVal:PTR REAL8( b+ E0 A4 ?; c2 ~% B& J) h% R
;includeE:\Vsource\masm32\INCLUDE\windows.inc
3 A& b+ B/ x) K/ |1 y! e;includeE:\Vsource\masm32\INCLUDE\user32.inc
9 n* ?' T( Z& F5 q;includeE:\Vsource\masm32\INCLUDE\kernel32.inc
$ R8 B5 j0 N( l) `& k1 pPUBLICppow108 o; Z3 _3 M; T3 _
.CODE2 B( L( V9 u6 \5 ]2 t( A
;DllEntryproc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD* Y* x, X2 y$ g# s
;.if reason==DLL_PROCESS_ATTACH0 \5 Z0 T+ d, P1 F3 L% c
;invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK! g) t. P' H* u
;.elseif reason==DLL_PROCESS_DETACH6 m1 J O( ^/ R5 y6 r
;invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK
& o! j8 o8 h S( m5 c2 S; z6 f6 K;.elseif reason==DLL_THREAD_ATTACH
* Q, ~& H2 o- j q4 {$ w7 U& I: v;invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK% K2 B5 i* `9 L8 h. e
;.else ; DLL_THREAD_DETACH
7 R* H3 v2 ]4 f4 z4 E* Q;invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK" V; \3 k7 K* {$ _- l/ C
;.endif4 T8 b4 O5 H m- S
;mov eax,TRUE
) _) u" U- Q0 v/ c2 j Y# f+ I* u2 v;ret
/ D6 p, g0 X: y( F;DllEntryEndp
% n# X0 L7 l# t1 _9 T. x7 r6 R;FUNCTION _Ppow10( double val, double pow: ) : Extended;
5 J% x/ O1 {4 X3 M;_TEXTSEGMENT WORD PUBLIC 'CODE' t( r$ ?- w% n* _& } `
;ppow10 PROC,aVal:PTR REAL8, bVal:PTR REAL8
+ S, ]! P5 W" p7 ~2 ~, @;ppow10 PROC,aVal:* Qword, bVal:Qword
3 ?) _) h$ |& G a4 M1 cppow10PROC near
% }6 ?: h4 x5 {2 HXUEQU 8 ; for eip & ebp
! i; m+ _4 r" r) q* b* QXDEQU 0 ; for edi, esi, ebx, ecx, edx
! P4 z: R& D0 G k9 ~+ ]fp_powerEQU QWORD PTR [ebp+XU+8]
* }. F% c/ E# _0 E2 Qfp_valEQU QWORD PTR [ebp+XU] 3 |# b _8 C7 I4 `1 z0 K
valEQU QWORD PTR [eBP-XD-8] ; USE STACK% Y0 W, \; H4 `9 l. _# R$ f
powerEQU QWORD PTR [eBP-XD-16] ; USE STACK
2 Q) S5 Z6 ?/ P& K# [pow10EQU QWORD PTR [eBP-XD-24] ; USE STACK6 P& y# O% f5 c+ X' g! v) z6 ~% D( o: ]
FPower10:4 H, \$ g+ v. ^, E1 q! F) k# m
pushebp9 R$ y) V- _! }4 M
movebp,esp
7 a n/ I% @- ^- K8 i5 U;push edi
5 Y" P& m. g9 J" l;push esi, j A* Z# b6 `% e
;push eax
& F7 T! B! p) T$ K! O% L;push edx( h* y8 o M2 a4 V2 [
subesp,24. n9 N+ q$ x+ `. ?6 ^* |4 B
FINIT9 j& F# G" S8 \) \6 U) C
fldz
. W& r! r, B6 b3 R$ b1 Vfstval
( L9 ]' r+ m E8 H% t; ?1 Y$ u: g) l+ O1 Gfstpower
9 X/ V6 w- |- i& B, xfstppow105 K3 u0 G% _! i. y$ j' E R
MOV EAX,8 MOV EDX,8; fldpi
8 u3 B+ \+ ]2 [- l6 b fld fp_val ;st(0)=val; fld aVal;st(0)=val n. [0 a; }& U- ?% ?, `
fstval
1 |# |) D" A. e& l S0 w2 }; |;fld Arg2 ;st(0)=power5 Z, B. H! i" e2 z* g% r7 b
;fstp power# h; S' G: |" H! S
;fld val ;st(0)=val: ^+ {. C+ g; w$ m, \. P% Z
;fmul val ;st(0)=val*val
0 e6 |1 J! m2 m;fmul val ;st(0)=val*va*val! ~( ]0 H& }0 g; U0 y% o3 d" Z
;fadd st,st(0)
4 T9 w! \* Q( C. a- n7 ?;fmul qword ptr [ebp+16] ;st(0)=power
2 i5 J" H" Q7 F( W! e+ w;fadd st,st(0)+ ^/ y& `+ k" D
;fwait
; Y2 j5 j- J7 uaddesp,24
/ s* W* B$ f( L8 e/ |;pop edx
. q% a% U# ^5 p. ?: [! a% {;pop eax! @( M$ R6 E6 P! J: N, ]+ c
;pop esi+ w! s9 o$ l* y2 d
;pop edi
* \( X. v' `& s7 X# P5 R: Emovesp,ebp
9 L3 p2 i' J1 j* f1 v5 a+ T) fpopebp9 f F/ M3 L0 [0 }9 o. C
;leave ; @@@@@@ important don't use leave in vc++ 20104 g; ^4 R. ~( O" X2 y
RET;return value = st(0)9 D# l8 n+ T$ ?9 N
ppow10ENDP& A+ X! M) w" ^
;_TEXTENDS
7 I. S" n O+ {* g1 L7 _8 R# MEND
- h3 c( m6 d N" o" ^) d6 H;END DllEntry |