//////////////////////////////////////////////////////////foxfunc.cpp* ^: E- @# l& W6 U
) M* U1 f( s8 B/ P0 G: o//FoxFunc.cpp : Defines the entry point for the DLL application.
) w' d3 T/ } l# e5 x+ _) U+ P I//
, t2 K7 _6 i! D8 a p8 j#include<string.h>2 v( n+ Y) M+ _. ?
#include<stdio.h>4 ^) B* d5 f- W/ _
#include<io.h>% L q+ A0 t+ \# V9 G
#include<math.h>4 o2 b8 \7 [$ Y- F+ E7 t
#include<iostream>- B% `6 E8 E0 a
#include"stdafx.h"- ?* f# [. }% ^0 e5 X
#include"FoxFunc.h"! I6 O) N- C% y- ?4 K5 Q, z
usingnamespace std;
# c. j2 m b3 _. ^; e& Y8 Q9 tBOOLAPIENTRY DllMain( HANDLE hModule, # T6 ]& L- v5 Z' t* u4 w0 X, v
DWORDul_reason_for_call,
0 C7 v3 Y* b: sLPVOIDlpReserved T1 P+ g9 ^* S
)1 ]( ~1 e: t9 k( u: F) n1 a
{
/ Y9 q% v, v' x- y+ K3 h' J5 Eswitch(ul_reason_for_call). o( ?+ E# l+ Q+ K2 n* v
{- S7 s/ `( s7 {
caseDLL_PROCESS_ATTACH:
# I* N r7 k' ?. I1 x, a! t; F4 UcaseDLL_THREAD_ATTACH:3 z4 Q8 x/ h* n: P, l
caseDLL_THREAD_DETACH:
1 p5 |% B9 x% ^6 kcaseDLL_PROCESS_DETACH:
5 Q6 i; K9 x' _! o1 {* H- G* p# Ebreak;
% X) J9 d. \# t: H0 ]( d! n1 A$ l' V}- N# U4 x- L- W. {6 E/ c9 ^
returnTRUE;1 L. v, |% f+ K
}
) q5 }; [* P1 H' Q9 w//计算收盘价的均价,一个常数参数,表示计算周期
4 F( N: ?6 X# |) [% e//调用方法:
" e4 ^5 c4 G: S//"FOXFUNC@MYMACLOSE"(5)
, Z7 w' Y5 q @2 j/ c# U: Q/*
9 Q" W* o: t& O- `1 t7 h//extern "C" double __cdecl ppow10(double ctemp,doublelength); - - - > wrong, extern "C" is to declare pow10coming from a .dll or .lib# e; a* L( e7 d g
//extern "C" double ppow10(double ctemp,double length); - - -> both are the same8 x) \" X! z5 x
*/% ?0 ], Z: l) \4 h E- C
extern"C" double __cdecl ppow10(double ,double );1 e1 V0 n2 @8 u1 [
//double ppow10(double ,double );
- i2 o1 @% K. R//call pow10() by __cdecl/ ~9 z/ S7 z; _
//!!!!!!!! use "C" for Microsoft visual C++ compiler
! ]6 Q" O* v4 f8 s//!!!!!!!! use "C" for Microsoft visual C++ compiler3 T: N5 O( G( d& y# p
//!!!!!!!! use "C" for Microsoft visual C++ compiler) z6 z' ?* k& I T3 f
//!!!!!!!! use "C" for Microsoft visual C++ compiler: n( K" O/ h0 f$ Z, @; b) s' L
//!!!!!!!! use "C" for Microsoft visual C++ compiler
4 z% V( N9 g8 [9 z__declspec(dllexport)int WINAPI MYMACLOSE(CALCINFO* pData), s3 f. W7 Y j7 C
{* e+ C" S; Y2 p8 Z7 r# }
if( // pData->m_pfParam1 && //参数1有效
L7 S# g/ e( C//pData->m_nParam1Start<0 && //参数1为常数
. q) S' y0 U6 w//pData->m_pfParam2==NULL ) //仅有一个参数* U0 n) H4 B7 s7 i, A1 e( ~
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_pfParam4
; T: W/ v2 g; g9 r# v//&& pData->m_pfParam5 && pData->m_pfParam6 &&pData->m_nParam1Start>=0 &&; ]7 J2 k7 c4 P7 j9 T, z
//pData->m_pfParam7==NULL)
! F. x8 M3 C% s @/ g5 x5 p//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_nParam1Start>=0 &&
9 i7 L0 ~) d+ tpData->m_pCalcParam[0].m_nParamStart>=0&& pData->m_pCalcParam[1].m_nParamStart>=06 |% Y; n: v/ ?$ ^9 }4 C
&&pData->m_pCalcParam[2].m_nParamStart>=0)
6 @, `# m6 I# f9 D# T{3 x7 i" B0 f5 ?2 Q! D
floatfParam = *pData->m_pfParam4; //pointer ,pData->m_pCalcParam[3].m_nParamStart >= 0; U4 w" w( }$ Z( U2 K+ ~7 d
intnPeriod = (int)fParam; //参数1
0 E# |$ d8 C; `( l& e4 ?# I. K# |//const float* cpParam = pData->m_pfParam2; // cpParam = pointer to , o2 l1 u2 T E7 L$ o+ M, m
constfloat* cpParam2 =pData->m_pCalcParam[1].m_pfParam; // cpParam =pointer to
" }8 a9 p0 Y( k h# T0 t" E- kconstfloat* cpParam3 =pData->m_pCalcParam[2].m_pfParam; // cpParam =pointer to $ b. ?. Z2 y& T1 K' ~2 w
constfloat* cpParam4 =pData->m_pCalcParam[3].m_pfParam; // cpParam =pointer to
. }- \" N# @6 E5 _//const float* cpParam5 =pData->m_pCalcParam[4].m_pfParam; //cpParam = pointer to 5 P# v" V" o$ u+ q& ^3 r! \+ W1 A
//in foxtraderoooq:"MYFUNC2010@MYMACLOSE"(c,c,c,6),colorffffff,linethick5;// cpParam5 =pData->m_pCalcParam[4].m_pfParam
( U- }4 b- Y- l' V$ F* W' ?, `//pData->m_pCalcParam[5].m_fParam); //value' ?0 L3 y# U7 U. A. a" O+ o
//const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
1 \, H5 i9 @- V8 K+ H//const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;- [* f/ ?/ n3 J9 ^' ~
//const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;$ {+ p+ |" h, }$ |" V, X
//const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;
0 {1 K W$ u7 r- \( Y0 ~9 E//const float* pValue5 = pData->m_pCalcParam[4].m_pfParam;' {7 c( V- J+ ]
if(nPeriod>0)# s3 C4 Q2 u4 ?: ~3 |
{
% b2 \, m" m4 i/ I: zfloatfTotal;8 B' @* |; d- {5 V" v" D
inti, j;
1 g+ c! L- w4 cintndata = pData->m_nNumData;4 W+ L) f Q8 x# y3 z" Y
//float yy[5000][1];, W% d6 Q* A4 G$ Y) j
for( i = nPeriod-1; i < pData->m_nNumData; i++)//计算nPeriod周期的均线,数据从nPeriod-1开始有效- t( Z- X1 }% u7 ~# d9 H- P* x( \
{
+ X b4 X r# V& `% e8 SfTotal= 0.0f;
?* R: A0 L0 Z! \5 Zdoublelngth=5.0;" K/ g, V5 h6 [+ C
doublectemp=4.0;
* d- p D3 ]6 v Q/ N//float yy1[5000][1];
* i2 } q% J: ofor( j = 0; j < nPeriod; j++ ) //累加
2 C2 T1 ^" r0 q% e6 {+ z( b{4 g$ V! h7 l. k/ G
fTotal= pData->m_pData.m_fClose; // @@@@@@@ vc++ 2010 cl.exe 使pData->m_pData[i-j].m_fClose错误+ o6 K3 l+ ~# e
}
, [" C3 U, W9 ^4 d- E//pData->m_pResultBuf = fTotal*1.03; //平均
9 Z/ q5 q' t9 dfTotal= cpParam3;
" x& y9 A; f1 @" W1 j% A; p$ {pData->m_pResultBuf= fTotal*1.03; //平均' z7 T2 a" k8 E; c- _! y' P2 ]
//ctemp = (double) pData->m_pResultBuf; // double & - - - >overload a float value , double * - - - > overload a pointer todouble
4 h5 ?# x9 V1 [/ R" y//pData->m_pResultBuf= (float) ppow10(ctemp,lngth); // float &- - - > overload a float value/ X2 N6 e3 a2 n" @$ W7 o
pData->m_pResultBuf=(float) ppow10( (double) pData->m_pResultBuf,lngth); // float &- - - > overload a float value, (float) = overload2 n! W, u1 ?! f
}
8 m9 E& f: x: w6 B4 J9 u; W) {5 Y' j5 LreturnnPeriod-1;
2 M. g( l. Z; B}4 a! v8 Q3 q: s3 \; T9 x+ R* l/ f
}
& \& z d7 `4 ^9 q, A2 ]3 P; areturn-1;' r4 b5 T( u$ x d. }, L
} x7 V3 G2 {( w' @
//计算均价,2个参数,参数1为待求均线的数据,参数2表示计算周期/ H6 B; n0 [' w" d& s- |- ]
//调用方法:( B& a: E) S1 C; K1 T/ Z
//"FOXFUNC@MYMAVAR"(CLOSE-OPEN,5), e/ @* D( k7 [+ p
__declspec(dllexport)int WINAPI MYMAVAR(CALCINFO* pData)
5 [. L1 Y" P; i- \{
- P1 Q8 p4 `- z* N( kif(pData->m_pfParam1&& pData->m_pfParam2 && //参数1,2有效8 w$ v; l3 b) U. v
pData->m_nParam1Start>=0&& //参数1为序列数
2 }0 J3 ] m- h4 R1 y/ IpData->m_pfParam3==NULL)//有2个参数
- ^$ X0 K" Z7 x" I& b; `: a. F{0 A5 c( s: B: n. d3 e; i) P" \
constfloat* pValue = pData->m_pfParam1; //参数1
" ^" u9 @8 ^. }! C5 AintnFirst = pData->m_nParam1Start; //有效值起始位0 l5 d5 R% j$ d6 o7 i
floatfParam = *pData->m_pfParam2; //参数29 }* X3 Z2 L4 L5 t' ? d
intnPeriod = (int)fParam; 2 i4 e* O s: Q0 _# l7 f/ U) y
if(nFirst >= 0 && nPeriod > 0 )
. d3 q( L" u" s6 a0 n{
+ m1 J1 r0 O' K6 ?8 FfloatfTotal;
: [% \! D- a1 F# P& c$ Zinti, j;8 Y! _8 M/ z7 r5 B7 C* B
for( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )% p, R9 O8 k: l
{
: V$ f3 l2 m7 r G1 K. s! ifTotal= 0.0f;
- a6 ?' E# e1 k, R2 p! @' lfor( j=0; j < nPeriod; j++ ) //累加
! U4 J ]& Z- O8 M& @4 }5 O6 rfTotal+= pValue[i-j];
) P( Q( B: j9 i* M! {+ J; lpData->m_pResultBuf= fTotal/nPeriod;//平均
`4 X3 Y2 w+ z$ r( ?8 R}
: ^1 U5 Z, @! B' OreturnnFirst+nPeriod-1;2 F( P1 z7 b% l# ?
}
9 Q1 [! Q5 d" l3 G- d, E}
7 q$ t+ u1 u2 W. O: I. \' |# O* Nreturn-1;2 {8 h0 i/ T1 s) x4 ~9 t& n
}% r) a& G& K# k4 c8 q9 N- H" p/ @
//计算多个序列的均值,5个参数,参数1-4为待求多个序列,参数5用于举例说明数值参数的用法,实际在此例中无需该参数
+ o n/ v* I+ ]3 M/*4 \# K5 A& o) {& \* x
调用方法:1 W* ~ c1 d. H' b8 n
MA1:=MA(CLOSE,3);
4 |5 P3 X* U- P' s* c& T X& wMA2:=MA(CLOSE,6);
; h$ }2 W$ Y1 f' q1 ]MA3:=MA(CLOSE,12);' ~" b8 E2 g' M, C! A+ V1 V
MA4:=MA(CLOSE,24);
9 [- C! a9 C0 g# OMYBBI:"FOXFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4);
+ s! f; @. t8 A8 t. v, E2 A3 n*/6 f, l6 ^" u: v+ L4 ^ N/ C3 ~: `
__declspec(dllexport)int WINAPI MYBBI(CALCINFO* pData)9 n) `6 w! q1 F2 [5 i% j
{7 I% \$ G8 Z' [$ c4 d1 i# E
if( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
- `# e3 W4 W. X0 ~& g wpData->m_pCalcParam[1].m_nParamStart>= 0 &&$ r. h! R( | N& O# K$ X( S
pData->m_pCalcParam[2].m_nParamStart>= 0 &&0 I( Q' g5 y, g- C( G! \/ W
pData->m_pCalcParam[3].m_nParamStart>= 0 ) //4个序列都含有效数值
3 M M* C0 U' }5 ?+ e( n* @! S{7 q7 t5 S# ~& w, ]' I/ @" q y* K
//计算返回的序列的第一个有效值位置
$ O2 }1 h' m- j7 mintnFirst = pData->m_pCalcParam[2].m_nParamStart;//已知返回的序列的第一个有效值位置与第4个序列一致
) Y! N5 A) X+ G+ j8 N//若不知,则9 I8 F) w6 C0 H2 Q! r" l
/*
3 Q6 l2 d' G3 W% o% y/ U5 JintnFirst = pData->m_pCalcParam[0].m_nParamStart;
% T. G) G+ S6 d; nif( nFirst < pData->m_pCalcParam[1].m_nParamStart )
$ q9 A4 e, h0 f3 X; M0 h9 YnFirst= pData->m_pCalcParam[1].m_nParamStart;/ C: s3 w B% ]
if( nFirst < pData->m_pCalcParam[2].m_nParamStart ) 5 C# }, p( P& @8 J: e& X9 q2 b6 ^
nFirst= pData->m_pCalcParam[2].m_nParamStart;& }0 W9 _2 }, ^5 J |2 L
if( nFirst < pData->m_pCalcParam[3].m_nParamStart ) $ w3 v: a6 `, j7 M( t$ M
nFirst= pData->m_pCalcParam[3].m_nParamStart;
: W+ a% Z, i- @$ p4 f' m*/
0 @6 j3 J+ Y8 n* Wconstfloat* pValue1 = pData->m_pCalcParam[0].m_pfParam;
# v) @/ v% m$ Q% B2 v7 x$ yconstfloat* pValue2 = pData->m_pCalcParam[1].m_pfParam;8 w& ^: c- t- S; W2 [; ^
constfloat* pValue3 = pData->m_pCalcParam[2].m_pfParam; {: j# F/ w+ l7 e4 w# b
constfloat* pValue4 = pData->m_pCalcParam[3].m_pfParam;
& _$ D" z5 d! e' \constfloat* pValue5 = pData->m_pCalcParam[4].m_pfParam;
7 z# q+ b' T6 n/ ?6 @constfloat* pValue6 = pData->m_pCalcParam[5].m_pfParam;
- a* D G9 {9 H3 M% u( R- X//const float* pValue1 = pData->m_pfParam1;
- H% k9 d+ @& _) b//const float* pValue2 = pData->m_pfParam2;! k4 _5 K8 Z1 `7 X! N8 t0 R7 m
//const float* pValue3 = pData->m_pfParam3;& m) ?+ D O. p z, E1 ^! K
//int nNum = (int)(*pData->m_pfParam4);//实际上该例中已知nNum=4,在此用于说明数值参数的用法
" y2 e: p, ~1 ~2 v; i1 K# @$ ]+ jintnNum = (int)(pData->m_pCalcParam[6].m_fParam);//实际上该例中已知nNum=4,在此用于说明数值参数的用法
; Q$ x. i; K' y2 L" G! R- Nfor(int i = nFirst; i < pData->m_nNumData; i++ )* K7 s" R- Y" H+ X+ @) b
{
9 G$ ]6 E5 y$ gpData->m_pResultBuf= , d% ]9 z* Z- A5 q
//(pValue1 + pValue2 + pValue3 )/nNum;* {, h o9 Y7 }1 I2 j, Y5 o0 e
(pValue1+ pValue2 + pValue3 + pValue4+pValue5 + pValue6)/nNum;
c8 a0 d& B) \}
9 q1 \0 b0 I7 J7 rreturnnFirst;# n, c/ o! p2 A) A
}% g6 S L, C& ~. x" I- y
return-1;8 H2 D' [& Y- W$ J, A
}
5 Q# V3 F0 ]( B+ u9 b' e8 B# k* P' {
3 h6 M5 R H8 c" |
$ d# u; g7 ]3 B1 T//////////////////////////////////////////////////////////////pow10.asm
9 Q$ J4 J1 U$ ?$ U9 r* j;*******************************************************
9 E4 V+ `: i. y/ p;* *2 _5 N9 d" Q# m4 F8 B& V% _
;* Delphi Run Library *
4 y4 |8 f* }+ B+ ~; G2 G;* *, m' j$ ?# d- e" L6 \* f1 r
;* Copyright (c) 1996,98 Inprise Corporation *
, K: `6 r" K' I9 ]6 Z! ]/ m% Q+ S" a- e;*--------------------------------------------------------------------------
! P. I/ y4 \/ Q- ^;* To compile "tasm32 /ml pow10.asm" *
# U. ~' f! Z6 I' g;*--------------------------------------------------------------------------
$ b. N7 _3 c4 R Q- F4 K;*******************************************************) n+ @- i+ T- V3 N
.386* Y' n8 u6 v* F
;.MODEL flat,c (error must be in segement block must have segment
2 A0 k9 {. T' F;!!!!!11 important if ',c' is not used , must use 'public _ppow10, and'_ppow10 proc'$ T( e$ m! `8 |9 _' G0 D: g' [
;!!!!!11 important if .MODEL flat,c is not used , must use ;_TEXTSEGMENT WORD PUBLIC
$ r/ D2 V' O& e- M6 k) j& D6 K c6 b;'CODE'..._TEXT ENDS and must use 'public _ppow10 and '_ppow10 proc'5 a# i& M- p9 I& [
.MODELflat,c ; just use .code, no need for segment,!!!!!11 important if',c' is used , must use 'public ppow10, and 'ppow10 proc'
) V6 ?, ]5 Y0 C/ B& s6 w;ppow10 PROTO,aVal:PTR REAL8, bVal:PTR REAL8
- A/ o# j6 n/ s: \- k+ O `9 [;includeE:\Vsource\masm32\INCLUDE\windows.inc* w# P( u2 k* |5 @& m% q# ^
;includeE:\Vsource\masm32\INCLUDE\user32.inc3 U& R8 o! [+ z
;includeE:\Vsource\masm32\INCLUDE\kernel32.inc
# P# d6 V! h j4 ]# BPUBLICppow106 K. D, y! F0 A7 F) w
.CODE
8 o6 P+ D$ h8 p- Q/ T5 {1 ~7 |;DllEntryproc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD5 _, g4 y- S6 ^: h" V8 u3 d- ]
;.if reason==DLL_PROCESS_ATTACH" S$ l8 J' d1 w [' ^* V B% ?
;invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK
& }7 N' ~; L* P6 @% d& W;.elseif reason==DLL_PROCESS_DETACH
4 x8 f' s' N+ ]' R5 Z# [) M;invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK4 o0 Y( V _9 f2 J! v0 h2 {
;.elseif reason==DLL_THREAD_ATTACH
; h6 T/ _, R& v2 l+ J: ^1 G;invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK( v v( I t I" C% N2 W1 h
;.else ; DLL_THREAD_DETACH
, o% q) T: K8 j3 t/ r' m9 R( ^;invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK
% J: u" H' q$ f9 \" s1 J;.endif8 N2 o3 j& ]7 \! i7 f
;mov eax,TRUE
$ h) s0 r. n, j o9 ~! ?" ~;ret
. e$ w4 e5 k8 z8 m;DllEntryEndp3 q. E! r, \: D' k
;FUNCTION _Ppow10( double val, double pow: ) : Extended;( T8 p; \- n1 v7 ?5 o
;_TEXTSEGMENT WORD PUBLIC 'CODE'2 V0 h) F/ g) O2 h
;ppow10 PROC,aVal:PTR REAL8, bVal:PTR REAL85 E. M1 H( A# a5 _0 {9 s% j- @/ y
;ppow10 PROC,aVal:* Qword, bVal:Qword
0 o- ]& t, A5 r! t5 p3 L+ ^ppow10PROC near
* b% @+ I- `6 ?XUEQU 8 ; for eip & ebp 1 C- F4 @! H$ C5 _( X r7 P5 H8 _6 Y
XDEQU 0 ; for edi, esi, ebx, ecx, edx9 I' j& b& `: ]0 W
fp_powerEQU QWORD PTR [ebp+XU+8]
8 m% y- s; B6 _0 {4 |$ M# z! pfp_valEQU QWORD PTR [ebp+XU]
+ S4 y: X' ?3 t, ^ k! l* gvalEQU QWORD PTR [eBP-XD-8] ; USE STACK1 s! U$ g8 J* F7 B9 y
powerEQU QWORD PTR [eBP-XD-16] ; USE STACK
# Q8 R* A$ j1 Y/ I* G3 b4 Opow10EQU QWORD PTR [eBP-XD-24] ; USE STACK
" Y$ C. y. x p8 m( v) NFPower10:
4 @: \" K. T5 @pushebp
6 e* `+ b# N7 a7 m' O/ h7 ^movebp,esp9 q6 I! g. o4 l/ R5 N
;push edi
# U2 L+ N; b9 W( R" z5 I/ r;push esi$ a4 r5 V9 Z$ q2 M3 G( a. ?
;push eax# }9 e* H2 _( a# P3 p4 S
;push edx, t/ a A8 X4 A- G0 J, y; a, \
subesp,24
" l, g, v1 p6 w; [9 N& ?FINIT: G5 [9 z w5 ]% t2 Y
fldz! x% i2 o8 h: O# C
fstval
0 g$ Z, ^" S" q# @+ Ofstpower
( m' N% N: M" s/ U5 q, C. jfstppow10# ?0 b7 i1 M' r' }1 O
MOV EAX,8 MOV EDX,8; fldpi! c- B; @& J( a: [+ m
fld fp_val ;st(0)=val; fld aVal;st(0)=val
9 P& {2 r- Z9 N/ ~fstval
9 q. o9 T) E7 ~3 [;fld Arg2 ;st(0)=power2 q1 S3 h2 U" S
;fstp power
8 f! }1 }, A) S0 T2 Y;fld val ;st(0)=val
5 N" ^' d/ S- n$ e1 o;fmul val ;st(0)=val*val
: `# w+ _# v8 ^4 d;fmul val ;st(0)=val*va*val3 S! V. o4 e1 ~- u
;fadd st,st(0)# A. W N9 p, X8 a4 x' S2 I0 S1 N$ a
;fmul qword ptr [ebp+16] ;st(0)=power
) ?# l9 ?2 q9 e" S6 v2 L;fadd st,st(0)+ L8 v" k! ~9 m6 P
;fwait3 o( @! j& g+ n" d* T
addesp,24
8 V' F5 J \3 |$ s;pop edx. U+ p. w; @+ c
;pop eax
0 o7 G2 {4 @ }. b6 t;pop esi) L8 ^' [4 Q# u! S, C+ d
;pop edi
* Y( G! A3 v$ v4 M9 pmovesp,ebp5 d, T( x" v; C$ ~
popebp0 m+ {4 T3 d) k2 H% `+ v
;leave ; @@@@@@ important don't use leave in vc++ 2010 b4 e3 h, R% p& I! S
RET;return value = st(0)
& `8 l* \$ r1 y* f7 b/ Y# z7 Lppow10ENDP, K. b, M$ q$ \0 }, m
;_TEXTENDS! J6 H) j7 G5 \; T( p
END
3 P4 V$ G/ Z' P/ L8 P% G;END DllEntry |