//////////////////////////////////////////////////////////foxfunc.cpp
. U; q& O" C6 l. H6 A3 k- |# q" ?) a) X( T7 {( T6 a
//FoxFunc.cpp : Defines the entry point for the DLL application.
" n3 N9 s8 X4 Y+ q# h5 i//* k" W* H8 e6 l1 E
#include<string.h>
) B4 U0 k {- h, u& p& p8 _#include<stdio.h>- I( c2 G" z' O# Q
#include<io.h>5 m* z: Z; |/ y* p3 g. |$ |7 E
#include<math.h>6 l( s/ r9 h& t4 Z' W
#include<iostream>
. Z+ V9 a. K/ b. d3 n#include"stdafx.h"( l, a. t* f0 ~+ Z, _" N
#include"FoxFunc.h"# v* w. i2 d% n
usingnamespace std;- _$ E# h9 o7 D0 L' h. h" w( @& r
BOOLAPIENTRY DllMain( HANDLE hModule,
7 P4 U3 U W5 }9 }% g9 u! TDWORDul_reason_for_call,
' Z% U; n, M, yLPVOIDlpReserved- W& x# O3 L9 R1 I+ Z0 I9 v
)- q. v: n2 t, r7 G4 O9 u
{
* _ x( y) M+ w6 h# B1 C* v$ N* [switch(ul_reason_for_call)
1 W/ `# T- b' \" w- X+ u8 p) _{, s5 k, n+ Z2 l: @' ?' y
caseDLL_PROCESS_ATTACH:
5 _5 H& G. s8 g: A3 K, |; B6 ^caseDLL_THREAD_ATTACH:; J% X: Z) I: Y( a1 F, m+ t- w
caseDLL_THREAD_DETACH:- N1 D1 b' P( w, u
caseDLL_PROCESS_DETACH:
, v) j7 d8 y' Xbreak;
+ K1 d2 Y- H) P4 H+ E- d}
' U: J. Z/ r* x0 ]( ereturnTRUE;
/ B. F0 ^, @) D; W0 y6 c6 M}
/ \9 z8 y( M2 W/ o//计算收盘价的均价,一个常数参数,表示计算周期
8 {! X0 X4 I; n3 `//调用方法:
' L! U) s9 U1 q8 o4 u7 S2 P//"FOXFUNC@MYMACLOSE"(5)6 z2 z* w" `+ s* b2 \( f+ |
/*/ x( q/ z& l6 ~
//extern "C" double __cdecl ppow10(double ctemp,doublelength); - - - > wrong, extern "C" is to declare pow10coming from a .dll or .lib8 a0 `4 e( |( G/ l) Y" N
//extern "C" double ppow10(double ctemp,double length); - - -> both are the same
R. @9 T9 X3 a9 Z$ o*/
" w6 Q0 d% Q& q L6 b% I. Rextern"C" double __cdecl ppow10(double ,double ); b" a4 t; R1 a- w
//double ppow10(double ,double ); 1 a. n0 A# `& L% x" x
//call pow10() by __cdecl) m4 D# @; p5 U& r1 G
//!!!!!!!! use "C" for Microsoft visual C++ compiler# M3 n+ G, U5 @
//!!!!!!!! use "C" for Microsoft visual C++ compiler
' e0 }' `" [2 i, A& ^+ ]//!!!!!!!! use "C" for Microsoft visual C++ compiler
0 Q i- }) J. ], r% k+ \# j+ a//!!!!!!!! use "C" for Microsoft visual C++ compiler; ?' h& s1 L. G
//!!!!!!!! use "C" for Microsoft visual C++ compiler$ ]3 U! i' ~6 l" d9 U
__declspec(dllexport)int WINAPI MYMACLOSE(CALCINFO* pData). o9 S4 K9 g( b) S( w5 c) }! J8 G
{
! M$ e. a3 X* f2 V( cif( // pData->m_pfParam1 && //参数1有效& x, [( y @! v" j! L+ Z) m
//pData->m_nParam1Start<0 && //参数1为常数" x l2 ?4 D: X& M. q& C4 `
//pData->m_pfParam2==NULL ) //仅有一个参数6 b( }' g6 \8 O. y" |1 ^" W
//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_pfParam45 T, c* R% \2 m0 |0 x# |) p: o
//&& pData->m_pfParam5 && pData->m_pfParam6 &&pData->m_nParam1Start>=0 &&
. q" x: l& s7 ?; N% J( p- w//pData->m_pfParam7==NULL)
1 {* p: ]4 {2 J% E% q* y0 S//pData->m_pfParam1 && pData->m_pfParam2 &&pData->m_pfParam3 && pData->m_nParam1Start>=0 &&
/ C; j# F) G$ F3 r5 [: {- QpData->m_pCalcParam[0].m_nParamStart>=0&& pData->m_pCalcParam[1].m_nParamStart>=0
2 |$ E) Z3 K0 g1 T&&pData->m_pCalcParam[2].m_nParamStart>=0) 7 Y7 {+ {% P! {
{
+ K9 z9 [% d0 {" w! \) DfloatfParam = *pData->m_pfParam4; //pointer ,pData->m_pCalcParam[3].m_nParamStart >= 0
- [ P5 j; Q. V; T$ j9 EintnPeriod = (int)fParam; //参数1/ U* ^5 }4 o, {5 @- R8 I/ r. H4 }
//const float* cpParam = pData->m_pfParam2; // cpParam = pointer to ; `( L+ @6 r$ ^( ?$ T& S8 y
constfloat* cpParam2 =pData->m_pCalcParam[1].m_pfParam; // cpParam =pointer to $ w1 f2 g; T" y: k6 A G
constfloat* cpParam3 =pData->m_pCalcParam[2].m_pfParam; // cpParam =pointer to
; S6 M1 O, U y# {0 Uconstfloat* cpParam4 =pData->m_pCalcParam[3].m_pfParam; // cpParam =pointer to * m) N) A" S/ d6 f- k
//const float* cpParam5 =pData->m_pCalcParam[4].m_pfParam; //cpParam = pointer to
' d, t5 ]' o! ~, b3 h+ b//in foxtraderoooq:"MYFUNC2010@MYMACLOSE"(c,c,c,6),colorffffff,linethick5;// cpParam5 =pData->m_pCalcParam[4].m_pfParam 8 u4 C6 A# w9 A# \& R& [$ P$ w- i% I
//pData->m_pCalcParam[5].m_fParam); //value
' x! W- q1 X7 g$ Z0 C: X/ s# y' A2 @//const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;0 I3 w4 W i5 S6 G' I X
//const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;) {' A9 o- | u# D7 z3 w; h( ?
//const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;1 L- X" S2 C/ G5 V+ x \/ a
//const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;
e" B4 @. k7 |' ~! c0 w//const float* pValue5 = pData->m_pCalcParam[4].m_pfParam;% j* Y0 @& D4 U2 f& E8 n
if(nPeriod>0)1 r) }0 u, X6 d O- z
{1 ?0 e! T5 ?4 P" |
floatfTotal;9 D t& r5 Y8 X$ {0 m8 c- L
inti, j;
! Y4 L+ t# W7 u9 Aintndata = pData->m_nNumData;" \8 l: Y R' u+ V
//float yy[5000][1];6 l# d) C) c( t6 x$ ?# [
for( i = nPeriod-1; i < pData->m_nNumData; i++)//计算nPeriod周期的均线,数据从nPeriod-1开始有效5 B1 \; Y3 ]! t8 w: I* G3 F; H
{1 G5 D/ |" r9 O
fTotal= 0.0f;+ ]" k& D6 h* `& z& ]
doublelngth=5.0;
9 E' S+ p6 z! U- f! i# R q" `doublectemp=4.0;
9 j2 A6 g/ ^" m! F//float yy1[5000][1];
4 }0 z0 r. V- _# Nfor( j = 0; j < nPeriod; j++ ) //累加
3 H6 m+ B6 M/ o6 F9 K# S{& [8 P& e8 w( k# G
fTotal= pData->m_pData.m_fClose; // @@@@@@@ vc++ 2010 cl.exe 使pData->m_pData[i-j].m_fClose错误
% c. ]- R: r* f: y}
+ @/ o2 V7 K% E8 m: p3 Q//pData->m_pResultBuf = fTotal*1.03; //平均
3 m: t; k# G. O8 ^1 J _# C/ ?4 y) tfTotal= cpParam3;& J3 Z Q; z0 T* F1 b
pData->m_pResultBuf= fTotal*1.03; //平均% A3 B Z, B0 @3 J: H. j. `
//ctemp = (double) pData->m_pResultBuf; // double & - - - >overload a float value , double * - - - > overload a pointer todouble( P' U# |& H# s
//pData->m_pResultBuf= (float) ppow10(ctemp,lngth); // float &- - - > overload a float value
; r; l- X& X; h2 {: C; P, ]! H/ Z3 mpData->m_pResultBuf=(float) ppow10( (double) pData->m_pResultBuf,lngth); // float &- - - > overload a float value, (float) = overload/ L! C- ?( N" j/ `) L2 j
}
. h1 n: }. X" Z; x- breturnnPeriod-1;6 I- D6 M& E5 P3 w. a5 P
}
. m" y* I9 d: i/ s0 I- ]0 D}
& ~- B7 O3 k! h$ @" z/ g; b! `0 Oreturn-1;; Q6 e, k f; l: t6 @
}
; F% q6 R9 T( K2 W8 Z//计算均价,2个参数,参数1为待求均线的数据,参数2表示计算周期$ }7 H& Z9 m8 }7 r$ t' b
//调用方法:
$ X- X1 R: K* f7 b( L0 F//"FOXFUNC@MYMAVAR"(CLOSE-OPEN,5)) E- {) s! B3 N9 g
__declspec(dllexport)int WINAPI MYMAVAR(CALCINFO* pData)
, E* J1 ^; ^; A8 N- A9 S; v N! V% Z' M9 h{! ?' Q5 w7 ?- n" @; P2 }% w
if(pData->m_pfParam1&& pData->m_pfParam2 && //参数1,2有效
8 a `3 K( g6 P6 J z* {; xpData->m_nParam1Start>=0&& //参数1为序列数1 p V5 r# B2 I* q" |0 C6 D
pData->m_pfParam3==NULL)//有2个参数
0 A3 s. J) y P' J8 I! Y{+ B" |6 j! w; |5 d0 ]
constfloat* pValue = pData->m_pfParam1; //参数1
% v3 x0 A( G) q7 lintnFirst = pData->m_nParam1Start; //有效值起始位
( Q8 q1 X, V! v# LfloatfParam = *pData->m_pfParam2; //参数23 l. D) }& I. A( F W2 s
intnPeriod = (int)fParam; / [, }+ [) L3 k2 @
if(nFirst >= 0 && nPeriod > 0 )
' _* k. C" y9 I{
' l1 D( d; I. l$ z+ v yfloatfTotal;
4 V* s( C( ?6 dinti, j;
' C3 ^- ?( ] ?/ y* s/ O0 x$ pfor( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )
8 h' x% X% g' B% N0 z5 H. O{
* b; f- f: n6 h% d( yfTotal= 0.0f;
# l0 H: I; a" a/ C% j6 ffor( j=0; j < nPeriod; j++ ) //累加
5 D/ O: h3 u/ _% [fTotal+= pValue[i-j];
8 b9 z% @# k) D1 N7 o8 }) MpData->m_pResultBuf= fTotal/nPeriod;//平均$ J8 g. S/ S; n* q; D
}5 a1 W% u2 A) i( H: h m3 X. i
returnnFirst+nPeriod-1;
: b* Z+ J/ z3 K f7 |$ E}
8 C# \) G- x, v2 _0 O}
- T- o! V" b D% Breturn-1;) R* F( F* S, _' J1 l' R) ~+ S
}
4 j# P" J% z$ F% p2 o//计算多个序列的均值,5个参数,参数1-4为待求多个序列,参数5用于举例说明数值参数的用法,实际在此例中无需该参数0 D8 e7 F/ q7 J+ |7 o; E
/*
# j2 `1 s9 S5 P: ]6 c R q调用方法:, Y: T U" M6 U( W
MA1:=MA(CLOSE,3);. T- k+ a! L2 z- b
MA2:=MA(CLOSE,6);! V# B" b3 R( t4 T" O: b
MA3:=MA(CLOSE,12);
! n( S/ a- p" h6 cMA4:=MA(CLOSE,24);* m _; n5 B. J. g# F
MYBBI:"FOXFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4);4 u" k" Y+ O; U. Q1 \
*/
2 M9 t& w! d$ q7 s7 S6 z__declspec(dllexport)int WINAPI MYBBI(CALCINFO* pData)! _6 ?) \/ C4 ^' J& X
{
: e @9 b2 ~& X/ V$ ^if( pData->m_pCalcParam[0].m_nParamStart >= 0 &&* r! d2 a6 W e1 i7 D0 q: y
pData->m_pCalcParam[1].m_nParamStart>= 0 &&
) J2 q- a" {* _0 d+ YpData->m_pCalcParam[2].m_nParamStart>= 0 &&% E3 v4 L* R$ n) E! u1 b: C3 _
pData->m_pCalcParam[3].m_nParamStart>= 0 ) //4个序列都含有效数值0 H0 \$ M9 M0 W \9 K
{! A" {' ^2 U4 h
//计算返回的序列的第一个有效值位置
9 v2 i1 `5 N( uintnFirst = pData->m_pCalcParam[2].m_nParamStart;//已知返回的序列的第一个有效值位置与第4个序列一致9 t5 J! i E8 t4 W+ s f
//若不知,则
) l+ F9 u6 ?/ W1 d* {) D! A9 ^/*
, K! o1 S7 @% C& h1 V% zintnFirst = pData->m_pCalcParam[0].m_nParamStart;8 M. e$ ~( O3 R
if( nFirst < pData->m_pCalcParam[1].m_nParamStart )
$ q6 X+ h# h( D) v& V& S5 Y7 pnFirst= pData->m_pCalcParam[1].m_nParamStart;
6 @! ~/ R( y" p* V" l7 uif( nFirst < pData->m_pCalcParam[2].m_nParamStart )
1 J P) N" d# C. \- t# ?: T1 WnFirst= pData->m_pCalcParam[2].m_nParamStart;( X/ ~) ]) w3 l p
if( nFirst < pData->m_pCalcParam[3].m_nParamStart ) 5 S' h3 W1 G# e, l8 K" k
nFirst= pData->m_pCalcParam[3].m_nParamStart;
8 L7 ]3 i- d6 S8 y0 q*/
9 G8 v. b" t' d J5 `% {* uconstfloat* pValue1 = pData->m_pCalcParam[0].m_pfParam;3 y2 @- n' v0 D( i/ `6 {, c
constfloat* pValue2 = pData->m_pCalcParam[1].m_pfParam;
* R/ g6 ~0 W* H, Z0 B1 Bconstfloat* pValue3 = pData->m_pCalcParam[2].m_pfParam;; N, I7 U# d8 a M
constfloat* pValue4 = pData->m_pCalcParam[3].m_pfParam;
0 E) m5 n* \9 I3 i9 Iconstfloat* pValue5 = pData->m_pCalcParam[4].m_pfParam;% E9 Q: q2 t0 Z) _, c5 l# F8 _
constfloat* pValue6 = pData->m_pCalcParam[5].m_pfParam;( P) U$ q2 X& V% [2 k
//const float* pValue1 = pData->m_pfParam1;
! ~% ?$ W! M% x1 W4 G% M//const float* pValue2 = pData->m_pfParam2;
7 {8 B: ?8 d$ v//const float* pValue3 = pData->m_pfParam3;. Z0 p J+ v4 e" `
//int nNum = (int)(*pData->m_pfParam4);//实际上该例中已知nNum=4,在此用于说明数值参数的用法
5 X+ ?) }5 r0 [' MintnNum = (int)(pData->m_pCalcParam[6].m_fParam);//实际上该例中已知nNum=4,在此用于说明数值参数的用法( T+ _7 c+ v) f5 S" j8 d
for(int i = nFirst; i < pData->m_nNumData; i++ )5 k0 L# G6 Q$ y( i8 Z6 t' K! ]5 A( j8 g
{3 u( R" D; _ U+ T# v' I) Y
pData->m_pResultBuf=
9 I# G0 |$ h% s+ Y/ J8 _( N//(pValue1 + pValue2 + pValue3 )/nNum;4 G6 ~3 T+ v% h# o6 W
(pValue1+ pValue2 + pValue3 + pValue4+pValue5 + pValue6)/nNum;
( T- {: o5 t5 a, B$ m& K E}* k1 X. [% }7 d, v$ K7 |% w( j
returnnFirst;, ?1 `9 Z" U5 y0 N6 K
}
* e; f! \: V6 B5 X6 o4 ?$ G& yreturn-1;1 k: t! m1 E- b# K
}
" P3 m& ~% j* C8 P0 T, w" q" N) V7 S0 {% \' v7 q4 {% Q$ r) d
; x4 A4 z1 \5 s) Y& V/ |$ D5 ?
6 w3 t- i8 _; T/ Y& D: ?/ x8 d//////////////////////////////////////////////////////////////pow10.asm
) q5 E2 f x3 F, q7 Z. U;*******************************************************
! g9 ?! g& l/ X% e3 Z3 S/ q;* *
) _; x6 U c! K; B r+ E$ u- o3 `6 T;* Delphi Run Library *
Q! R; U; n" y/ X* S;* *
, B: l& T- n6 l7 J h' j' c* B6 j4 A: W;* Copyright (c) 1996,98 Inprise Corporation *( S' |% i( [( ^( h5 U' g
;*--------------------------------------------------------------------------" m7 X5 i {8 a& k- ~, w
;* To compile "tasm32 /ml pow10.asm" *
# C$ d- _" E# `2 X H6 Y;*--------------------------------------------------------------------------8 F, G, i3 v2 E# W
;*******************************************************
9 r6 q A( o5 Q- h0 Z.386# |# ^3 O& Q7 i! f
;.MODEL flat,c (error must be in segement block must have segment
6 r# N5 Z/ j8 C1 @5 z: N3 ^) D;!!!!!11 important if ',c' is not used , must use 'public _ppow10, and'_ppow10 proc'$ e6 M' P# Z- K0 t4 D
;!!!!!11 important if .MODEL flat,c is not used , must use ;_TEXTSEGMENT WORD PUBLIC
$ F1 Y: b) w/ E/ B/ \;'CODE'..._TEXT ENDS and must use 'public _ppow10 and '_ppow10 proc'% w( r! h& l( P$ l- Z/ x
.MODELflat,c ; just use .code, no need for segment,!!!!!11 important if',c' is used , must use 'public ppow10, and 'ppow10 proc'
) K7 d0 X1 L2 X1 K;ppow10 PROTO,aVal:PTR REAL8, bVal:PTR REAL8
) C3 J% M& u7 O& W) U;includeE:\Vsource\masm32\INCLUDE\windows.inc
7 h6 A/ I$ Q& G& C;includeE:\Vsource\masm32\INCLUDE\user32.inc) _. Q) I/ t7 v N& ]4 T2 v% [
;includeE:\Vsource\masm32\INCLUDE\kernel32.inc* P9 S7 S4 p" H* r( C5 e% x
PUBLICppow10- c" H5 T+ K6 w+ V- Q
.CODE
/ O1 i& u \8 }( M- k;DllEntryproc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD+ o+ t0 D) w& \. K% N" Y6 ]& C
;.if reason==DLL_PROCESS_ATTACH
: `9 H4 F. \4 m3 P0 q' h8 w;invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK& [7 s r( ?9 T5 {& g( t2 Q: R
;.elseif reason==DLL_PROCESS_DETACH# g8 d5 B0 s! q0 \% w; z
;invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK$ c1 ~! ~: y. @
;.elseif reason==DLL_THREAD_ATTACH, u! G+ s! a2 Y, h4 C- ]
;invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK" I2 x9 L$ G6 v" g0 t! T# X
;.else ; DLL_THREAD_DETACH
. N) ^6 u1 B5 l5 Q;invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK/ t5 G L9 w }# d' {* |4 F
;.endif/ o- R, k0 n* J: U
;mov eax,TRUE
6 {) N$ P$ B* t9 W# f1 M;ret
- w* y+ o3 f+ v* |$ b4 R5 B;DllEntryEndp
$ Y; h$ L& m/ R' l5 D;FUNCTION _Ppow10( double val, double pow: ) : Extended;1 `( K9 e- r& X |0 a
;_TEXTSEGMENT WORD PUBLIC 'CODE'
. P5 N; P: E0 V9 _;ppow10 PROC,aVal:PTR REAL8, bVal:PTR REAL8* @4 m9 J- ~: e) W4 f
;ppow10 PROC,aVal:* Qword, bVal:Qword1 a, `" A) l: J N' h+ E
ppow10PROC near1 H' G" Q( \7 W- `" J
XUEQU 8 ; for eip & ebp b5 s& X8 d+ l! P- u
XDEQU 0 ; for edi, esi, ebx, ecx, edx
1 q; r2 r, l o# N: Ufp_powerEQU QWORD PTR [ebp+XU+8]
2 y$ P. s& W: ^& E3 lfp_valEQU QWORD PTR [ebp+XU] 7 e- T( I8 w( m: ?
valEQU QWORD PTR [eBP-XD-8] ; USE STACK
% K" W/ F2 \' ~) tpowerEQU QWORD PTR [eBP-XD-16] ; USE STACK, S6 P0 f- Q; N7 \# o
pow10EQU QWORD PTR [eBP-XD-24] ; USE STACK8 t* ?! f( x* @
FPower10:0 V/ v6 U* J3 d7 j+ E5 I7 J
pushebp
9 l5 T; p6 w3 k6 E* Mmovebp,esp& H9 X% C) ?: N% E) x- O) m. Z
;push edi/ I( ?7 I- U# |' ~; r7 a( ]
;push esi
: @1 H3 [6 m; J; y;push eax
# F4 w8 P' M: ]+ K;push edx8 _4 C5 L. d2 J( Z* K% t, [' R V. G& }
subesp,24" D6 @/ T4 G9 n8 d' k
FINIT
/ j' ? H0 p( D7 I& u! ]fldz9 ~) N2 q3 K8 j, X" Y7 l
fstval
, T% k q0 V/ S' B0 ^: Dfstpower$ a+ t) _5 t2 B; U7 Q
fstppow10
; w( g r1 g2 X! p" ^- L* R2 z MOV EAX,8 MOV EDX,8; fldpi; z' q% n" h: T' G' C
fld fp_val ;st(0)=val; fld aVal;st(0)=val k% v9 a! f& K9 `1 F/ [6 ^
fstval
8 E6 a: D" R2 y$ e! P;fld Arg2 ;st(0)=power, [" T6 D; y1 D3 `; A
;fstp power1 M5 E. G5 ?7 W- E2 }8 F
;fld val ;st(0)=val& [: {8 J$ B# @
;fmul val ;st(0)=val*val6 f0 V7 w5 D( v2 S0 J: x# {
;fmul val ;st(0)=val*va*val
2 L$ s, o" `( R8 }, E% U; R, ?; \;fadd st,st(0)4 E% y V! S% X/ |8 u* w% q( o
;fmul qword ptr [ebp+16] ;st(0)=power
- M0 A8 \7 O6 b" P( g;fadd st,st(0)6 ^- x2 h; B8 Q5 w7 b9 V
;fwait5 B5 d. _9 |- {- r9 z' q+ Z' |- a' h
addesp,24. y' ~, f: Q( s L5 A
;pop edx
o5 I2 i. A- w. [ z;pop eax
9 |" @( C: y/ J# H;pop esi
9 E2 K8 p0 t1 W# R;pop edi
) _- `0 ^$ C/ S6 g% Z: z: xmovesp,ebp
/ Q& G; s/ C/ Q/ i2 jpopebp
0 m; V* i, ?: J- l# a;leave ; @@@@@@ important don't use leave in vc++ 2010
, e( ]2 l; o$ a' X9 n8 d" w: a& IRET;return value = st(0)7 f" M! K0 o# L; F3 u" a4 T2 K
ppow10ENDP
, }% n* F9 Z$ G. K; \. p& z. l n1 \;_TEXTENDS
" F. V$ a: E# X& Z5 |! TEND! X M6 N5 w5 S3 }
;END DllEntry |