xref: /MusicPlayer2/scintilla/win32/scintilla.mak (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
1*8af74909SZhong Yang# Make file for Scintilla on Windows Visual C++ version
2*8af74909SZhong Yang# Copyright 1998-2010 by Neil Hodgson <[email protected]>
3*8af74909SZhong Yang# The License.txt file describes the conditions under which this software may be distributed.
4*8af74909SZhong Yang# This makefile is for using Visual C++ with nmake.
5*8af74909SZhong Yang# Usage for Microsoft:
6*8af74909SZhong Yang#     nmake -f scintilla.mak
7*8af74909SZhong Yang# For debug versions define DEBUG on the command line:
8*8af74909SZhong Yang#     nmake DEBUG=1 -f scintilla.mak
9*8af74909SZhong Yang# The main makefile uses mingw32 gcc and may be more current than this file.
10*8af74909SZhong Yang
11*8af74909SZhong Yang.SUFFIXES: .cxx
12*8af74909SZhong Yang
13*8af74909SZhong YangDIR_O=.
14*8af74909SZhong YangDIR_BIN=..\bin
15*8af74909SZhong Yang
16*8af74909SZhong YangCOMPONENT=$(DIR_BIN)\Scintilla.dll
17*8af74909SZhong YangLEXCOMPONENT=$(DIR_BIN)\SciLexer.dll
18*8af74909SZhong YangLIBSCI=$(DIR_BIN)\libscintilla.lib
19*8af74909SZhong Yang
20*8af74909SZhong YangLD=link
21*8af74909SZhong Yang
22*8af74909SZhong Yang!IFDEF SUPPORT_XP
23*8af74909SZhong YangADD_DEFINE=-D_USING_V110_SDK71_
24*8af74909SZhong Yang# Different subsystems for 32-bit and 64-bit Windows XP so detect based on Platform
25*8af74909SZhong Yang# environment vairable set by vcvars*.bat to be either x86 or x64
26*8af74909SZhong Yang!IF "$(PLATFORM)" == "x64"
27*8af74909SZhong YangSUBSYSTEM=-SUBSYSTEM:WINDOWS,5.02
28*8af74909SZhong Yang!ELSE
29*8af74909SZhong YangSUBSYSTEM=-SUBSYSTEM:WINDOWS,5.01
30*8af74909SZhong Yang!ENDIF
31*8af74909SZhong Yang!ELSEIFDEF ARM64
32*8af74909SZhong YangADD_DEFINE=-D_ARM64_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
33*8af74909SZhong YangSUBSYSTEM=-SUBSYSTEM:WINDOWS,10.00
34*8af74909SZhong Yang!ENDIF
35*8af74909SZhong Yang
36*8af74909SZhong YangCRTFLAGS=-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -D_CRT_SECURE_NO_DEPRECATE=1 -D_SCL_SECURE_NO_WARNINGS=1 $(ADD_DEFINE)
37*8af74909SZhong YangCXXFLAGS=-Zi -TP -MP -W4 -EHsc -std:c++17 $(CRTFLAGS)
38*8af74909SZhong YangCXXDEBUG=-Od -MTd -DDEBUG
39*8af74909SZhong YangCXXNDEBUG=-O1 -MT -DNDEBUG -GL
40*8af74909SZhong YangNAME=-Fo
41*8af74909SZhong YangLDFLAGS=-OPT:REF -LTCG -IGNORE:4197 -DEBUG $(SUBSYSTEM)
42*8af74909SZhong YangLDDEBUG=
43*8af74909SZhong YangLIBS=KERNEL32.lib USER32.lib GDI32.lib IMM32.lib OLE32.lib OLEAUT32.lib MSIMG32.lib
44*8af74909SZhong YangNOLOGO=-nologo
45*8af74909SZhong Yang
46*8af74909SZhong Yang!IFDEF QUIET
47*8af74909SZhong YangCXX=@$(CXX)
48*8af74909SZhong YangCXXFLAGS=$(CXXFLAGS) $(NOLOGO)
49*8af74909SZhong YangLDFLAGS=$(LDFLAGS) $(NOLOGO)
50*8af74909SZhong Yang!ENDIF
51*8af74909SZhong Yang
52*8af74909SZhong Yang!IFDEF NO_CXX11_REGEX
53*8af74909SZhong YangCXXFLAGS=$(CXXFLAGS) -DNO_CXX11_REGEX
54*8af74909SZhong Yang!ENDIF
55*8af74909SZhong Yang
56*8af74909SZhong Yang!IFDEF DEBUG
57*8af74909SZhong YangCXXFLAGS=$(CXXFLAGS) $(CXXDEBUG)
58*8af74909SZhong YangLDFLAGS=$(LDDEBUG) $(LDFLAGS)
59*8af74909SZhong Yang!ELSE
60*8af74909SZhong YangCXXFLAGS=$(CXXFLAGS) $(CXXNDEBUG)
61*8af74909SZhong Yang!ENDIF
62*8af74909SZhong Yang
63*8af74909SZhong YangINCLUDES=-I../include -I../src -I../lexlib
64*8af74909SZhong YangCXXFLAGS=$(CXXFLAGS) $(INCLUDES)
65*8af74909SZhong Yang
66*8af74909SZhong Yangall:	$(COMPONENT) $(LEXCOMPONENT) $(LIBSCI)
67*8af74909SZhong Yang
68*8af74909SZhong Yangclean:
69*8af74909SZhong Yang	-del /q $(DIR_O)\*.obj $(DIR_O)\*.pdb $(DIR_O)\*.asm $(COMPONENT) $(LEXCOMPONENT) \
70*8af74909SZhong Yang	$(DIR_O)\*.res $(DIR_BIN)\*.map $(DIR_BIN)\*.exp $(DIR_BIN)\*.pdb \
71*8af74909SZhong Yang	$(DIR_BIN)\Scintilla.lib $(DIR_BIN)\SciLexer.lib $(LIBSCI)
72*8af74909SZhong Yang
73*8af74909SZhong Yangdepend:
74*8af74909SZhong Yang	pyw DepGen.py
75*8af74909SZhong Yang
76*8af74909SZhong Yang# Required for base Scintilla
77*8af74909SZhong YangSRC_OBJS=\
78*8af74909SZhong Yang	$(DIR_O)\AutoComplete.obj \
79*8af74909SZhong Yang	$(DIR_O)\CallTip.obj \
80*8af74909SZhong Yang	$(DIR_O)\CaseConvert.obj \
81*8af74909SZhong Yang	$(DIR_O)\CaseFolder.obj \
82*8af74909SZhong Yang	$(DIR_O)\CellBuffer.obj \
83*8af74909SZhong Yang	$(DIR_O)\CharacterCategory.obj \
84*8af74909SZhong Yang	$(DIR_O)\CharacterSet.obj \
85*8af74909SZhong Yang	$(DIR_O)\CharClassify.obj \
86*8af74909SZhong Yang	$(DIR_O)\ContractionState.obj \
87*8af74909SZhong Yang	$(DIR_O)\DBCS.obj \
88*8af74909SZhong Yang	$(DIR_O)\Decoration.obj \
89*8af74909SZhong Yang	$(DIR_O)\Document.obj \
90*8af74909SZhong Yang	$(DIR_O)\EditModel.obj \
91*8af74909SZhong Yang	$(DIR_O)\Editor.obj \
92*8af74909SZhong Yang	$(DIR_O)\EditView.obj \
93*8af74909SZhong Yang	$(DIR_O)\Indicator.obj \
94*8af74909SZhong Yang	$(DIR_O)\KeyMap.obj \
95*8af74909SZhong Yang	$(DIR_O)\LineMarker.obj \
96*8af74909SZhong Yang	$(DIR_O)\MarginView.obj \
97*8af74909SZhong Yang	$(DIR_O)\PerLine.obj \
98*8af74909SZhong Yang	$(DIR_O)\PositionCache.obj \
99*8af74909SZhong Yang	$(DIR_O)\PropSetSimple.obj \
100*8af74909SZhong Yang	$(DIR_O)\RESearch.obj \
101*8af74909SZhong Yang	$(DIR_O)\RunStyles.obj \
102*8af74909SZhong Yang	$(DIR_O)\Selection.obj \
103*8af74909SZhong Yang	$(DIR_O)\Style.obj \
104*8af74909SZhong Yang	$(DIR_O)\UniConversion.obj \
105*8af74909SZhong Yang	$(DIR_O)\UniqueString.obj \
106*8af74909SZhong Yang	$(DIR_O)\ViewStyle.obj \
107*8af74909SZhong Yang	$(DIR_O)\XPM.obj
108*8af74909SZhong Yang
109*8af74909SZhong Yang#++Autogenerated -- run scripts/LexGen.py to regenerate
110*8af74909SZhong Yang#**LEX_OBJS=\\\n\(\t$(DIR_O)\\\*.obj \\\n\)
111*8af74909SZhong YangLEX_OBJS=\
112*8af74909SZhong Yang	$(DIR_O)\LexA68k.obj \
113*8af74909SZhong Yang	$(DIR_O)\LexAbaqus.obj \
114*8af74909SZhong Yang	$(DIR_O)\LexAda.obj \
115*8af74909SZhong Yang	$(DIR_O)\LexAPDL.obj \
116*8af74909SZhong Yang	$(DIR_O)\LexAsm.obj \
117*8af74909SZhong Yang	$(DIR_O)\LexAsn1.obj \
118*8af74909SZhong Yang	$(DIR_O)\LexASY.obj \
119*8af74909SZhong Yang	$(DIR_O)\LexAU3.obj \
120*8af74909SZhong Yang	$(DIR_O)\LexAVE.obj \
121*8af74909SZhong Yang	$(DIR_O)\LexAVS.obj \
122*8af74909SZhong Yang	$(DIR_O)\LexBaan.obj \
123*8af74909SZhong Yang	$(DIR_O)\LexBash.obj \
124*8af74909SZhong Yang	$(DIR_O)\LexBasic.obj \
125*8af74909SZhong Yang	$(DIR_O)\LexBatch.obj \
126*8af74909SZhong Yang	$(DIR_O)\LexBibTeX.obj \
127*8af74909SZhong Yang	$(DIR_O)\LexBullant.obj \
128*8af74909SZhong Yang	$(DIR_O)\LexCaml.obj \
129*8af74909SZhong Yang	$(DIR_O)\LexCIL.obj \
130*8af74909SZhong Yang	$(DIR_O)\LexCLW.obj \
131*8af74909SZhong Yang	$(DIR_O)\LexCmake.obj \
132*8af74909SZhong Yang	$(DIR_O)\LexCOBOL.obj \
133*8af74909SZhong Yang	$(DIR_O)\LexCoffeeScript.obj \
134*8af74909SZhong Yang	$(DIR_O)\LexConf.obj \
135*8af74909SZhong Yang	$(DIR_O)\LexCPP.obj \
136*8af74909SZhong Yang	$(DIR_O)\LexCrontab.obj \
137*8af74909SZhong Yang	$(DIR_O)\LexCsound.obj \
138*8af74909SZhong Yang	$(DIR_O)\LexCSS.obj \
139*8af74909SZhong Yang	$(DIR_O)\LexD.obj \
140*8af74909SZhong Yang	$(DIR_O)\LexDataflex.obj \
141*8af74909SZhong Yang	$(DIR_O)\LexDiff.obj \
142*8af74909SZhong Yang	$(DIR_O)\LexDMAP.obj \
143*8af74909SZhong Yang	$(DIR_O)\LexDMIS.obj \
144*8af74909SZhong Yang	$(DIR_O)\LexECL.obj \
145*8af74909SZhong Yang	$(DIR_O)\LexEDIFACT.obj \
146*8af74909SZhong Yang	$(DIR_O)\LexEiffel.obj \
147*8af74909SZhong Yang	$(DIR_O)\LexErlang.obj \
148*8af74909SZhong Yang	$(DIR_O)\LexErrorList.obj \
149*8af74909SZhong Yang	$(DIR_O)\LexEScript.obj \
150*8af74909SZhong Yang	$(DIR_O)\LexFlagship.obj \
151*8af74909SZhong Yang	$(DIR_O)\LexForth.obj \
152*8af74909SZhong Yang	$(DIR_O)\LexFortran.obj \
153*8af74909SZhong Yang	$(DIR_O)\LexGAP.obj \
154*8af74909SZhong Yang	$(DIR_O)\LexGui4Cli.obj \
155*8af74909SZhong Yang	$(DIR_O)\LexHaskell.obj \
156*8af74909SZhong Yang	$(DIR_O)\LexHex.obj \
157*8af74909SZhong Yang	$(DIR_O)\LexHollywood.obj \
158*8af74909SZhong Yang	$(DIR_O)\LexHTML.obj \
159*8af74909SZhong Yang	$(DIR_O)\LexIndent.obj \
160*8af74909SZhong Yang	$(DIR_O)\LexInno.obj \
161*8af74909SZhong Yang	$(DIR_O)\LexJSON.obj \
162*8af74909SZhong Yang	$(DIR_O)\LexKix.obj \
163*8af74909SZhong Yang	$(DIR_O)\LexKVIrc.obj \
164*8af74909SZhong Yang	$(DIR_O)\LexLaTeX.obj \
165*8af74909SZhong Yang	$(DIR_O)\LexLisp.obj \
166*8af74909SZhong Yang	$(DIR_O)\LexLout.obj \
167*8af74909SZhong Yang	$(DIR_O)\LexLua.obj \
168*8af74909SZhong Yang	$(DIR_O)\LexMagik.obj \
169*8af74909SZhong Yang	$(DIR_O)\LexMake.obj \
170*8af74909SZhong Yang	$(DIR_O)\LexMarkdown.obj \
171*8af74909SZhong Yang	$(DIR_O)\LexMatlab.obj \
172*8af74909SZhong Yang	$(DIR_O)\LexMaxima.obj \
173*8af74909SZhong Yang	$(DIR_O)\LexMetapost.obj \
174*8af74909SZhong Yang	$(DIR_O)\LexMMIXAL.obj \
175*8af74909SZhong Yang	$(DIR_O)\LexModula.obj \
176*8af74909SZhong Yang	$(DIR_O)\LexMPT.obj \
177*8af74909SZhong Yang	$(DIR_O)\LexMSSQL.obj \
178*8af74909SZhong Yang	$(DIR_O)\LexMySQL.obj \
179*8af74909SZhong Yang	$(DIR_O)\LexNim.obj \
180*8af74909SZhong Yang	$(DIR_O)\LexNimrod.obj \
181*8af74909SZhong Yang	$(DIR_O)\LexNsis.obj \
182*8af74909SZhong Yang	$(DIR_O)\LexNull.obj \
183*8af74909SZhong Yang	$(DIR_O)\LexOpal.obj \
184*8af74909SZhong Yang	$(DIR_O)\LexOScript.obj \
185*8af74909SZhong Yang	$(DIR_O)\LexPascal.obj \
186*8af74909SZhong Yang	$(DIR_O)\LexPB.obj \
187*8af74909SZhong Yang	$(DIR_O)\LexPerl.obj \
188*8af74909SZhong Yang	$(DIR_O)\LexPLM.obj \
189*8af74909SZhong Yang	$(DIR_O)\LexPO.obj \
190*8af74909SZhong Yang	$(DIR_O)\LexPOV.obj \
191*8af74909SZhong Yang	$(DIR_O)\LexPowerPro.obj \
192*8af74909SZhong Yang	$(DIR_O)\LexPowerShell.obj \
193*8af74909SZhong Yang	$(DIR_O)\LexProgress.obj \
194*8af74909SZhong Yang	$(DIR_O)\LexProps.obj \
195*8af74909SZhong Yang	$(DIR_O)\LexPS.obj \
196*8af74909SZhong Yang	$(DIR_O)\LexPython.obj \
197*8af74909SZhong Yang	$(DIR_O)\LexR.obj \
198*8af74909SZhong Yang	$(DIR_O)\LexRaku.obj \
199*8af74909SZhong Yang	$(DIR_O)\LexRebol.obj \
200*8af74909SZhong Yang	$(DIR_O)\LexRegistry.obj \
201*8af74909SZhong Yang	$(DIR_O)\LexRuby.obj \
202*8af74909SZhong Yang	$(DIR_O)\LexRust.obj \
203*8af74909SZhong Yang	$(DIR_O)\LexSAS.obj \
204*8af74909SZhong Yang	$(DIR_O)\LexScriptol.obj \
205*8af74909SZhong Yang	$(DIR_O)\LexSmalltalk.obj \
206*8af74909SZhong Yang	$(DIR_O)\LexSML.obj \
207*8af74909SZhong Yang	$(DIR_O)\LexSorcus.obj \
208*8af74909SZhong Yang	$(DIR_O)\LexSpecman.obj \
209*8af74909SZhong Yang	$(DIR_O)\LexSpice.obj \
210*8af74909SZhong Yang	$(DIR_O)\LexSQL.obj \
211*8af74909SZhong Yang	$(DIR_O)\LexStata.obj \
212*8af74909SZhong Yang	$(DIR_O)\LexSTTXT.obj \
213*8af74909SZhong Yang	$(DIR_O)\LexTACL.obj \
214*8af74909SZhong Yang	$(DIR_O)\LexTADS3.obj \
215*8af74909SZhong Yang	$(DIR_O)\LexTAL.obj \
216*8af74909SZhong Yang	$(DIR_O)\LexTCL.obj \
217*8af74909SZhong Yang	$(DIR_O)\LexTCMD.obj \
218*8af74909SZhong Yang	$(DIR_O)\LexTeX.obj \
219*8af74909SZhong Yang	$(DIR_O)\LexTxt2tags.obj \
220*8af74909SZhong Yang	$(DIR_O)\LexVB.obj \
221*8af74909SZhong Yang	$(DIR_O)\LexVerilog.obj \
222*8af74909SZhong Yang	$(DIR_O)\LexVHDL.obj \
223*8af74909SZhong Yang	$(DIR_O)\LexVisualProlog.obj \
224*8af74909SZhong Yang	$(DIR_O)\LexX12.obj \
225*8af74909SZhong Yang	$(DIR_O)\LexYAML.obj \
226*8af74909SZhong Yang
227*8af74909SZhong Yang#--Autogenerated -- end of automatically generated section
228*8af74909SZhong Yang
229*8af74909SZhong Yang# Required by lexers
230*8af74909SZhong YangLEXLIB_OBJS = \
231*8af74909SZhong Yang	$(DIR_O)\Accessor.obj \
232*8af74909SZhong Yang	$(DIR_O)\CatalogueL.obj \
233*8af74909SZhong Yang	$(DIR_O)\ExternalLexer.obj \
234*8af74909SZhong Yang	$(DIR_O)\DefaultLexer.obj \
235*8af74909SZhong Yang	$(DIR_O)\LexerBase.obj \
236*8af74909SZhong Yang	$(DIR_O)\LexerModule.obj \
237*8af74909SZhong Yang	$(DIR_O)\LexerSimple.obj \
238*8af74909SZhong Yang	$(DIR_O)\StyleContext.obj \
239*8af74909SZhong Yang	$(DIR_O)\WordList.obj
240*8af74909SZhong Yang
241*8af74909SZhong Yang# Required by libraries and DLLs that include lexing
242*8af74909SZhong YangSCILEX_OBJS = \
243*8af74909SZhong Yang	$(SRC_OBJS) \
244*8af74909SZhong Yang	$(LEXLIB_OBJS) \
245*8af74909SZhong Yang	$(LEX_OBJS) \
246*8af74909SZhong Yang	$(DIR_O)\HanjaDic.obj \
247*8af74909SZhong Yang	$(DIR_O)\PlatWin.obj \
248*8af74909SZhong Yang	$(DIR_O)\ScintillaBaseL.obj \
249*8af74909SZhong Yang	$(DIR_O)\ScintillaWin.obj
250*8af74909SZhong Yang
251*8af74909SZhong YangCOMPONENT_OBJS = \
252*8af74909SZhong Yang	$(DIR_O)\Accessor.obj \
253*8af74909SZhong Yang	$(DIR_O)\Catalogue.obj \
254*8af74909SZhong Yang	$(DIR_O)\HanjaDic.obj \
255*8af74909SZhong Yang	$(DIR_O)\LexerBase.obj \
256*8af74909SZhong Yang	$(DIR_O)\LexerModule.obj \
257*8af74909SZhong Yang	$(DIR_O)\LexerSimple.obj \
258*8af74909SZhong Yang	$(DIR_O)\PlatWin.obj \
259*8af74909SZhong Yang	$(DIR_O)\ScintillaBase.obj \
260*8af74909SZhong Yang	$(DIR_O)\ScintillaDLL.obj \
261*8af74909SZhong Yang	$(DIR_O)\ScintillaWin.obj \
262*8af74909SZhong Yang	$(DIR_O)\WordList.obj \
263*8af74909SZhong Yang	$(SRC_OBJS)
264*8af74909SZhong Yang
265*8af74909SZhong YangLEXCOMPONENT_OBJS = \
266*8af74909SZhong Yang	$(DIR_O)\ScintillaDLL.obj \
267*8af74909SZhong Yang	$(SCILEX_OBJS)
268*8af74909SZhong Yang
269*8af74909SZhong Yang$(DIR_O)\ScintRes.res : ScintRes.rc
270*8af74909SZhong Yang	$(RC) -fo$@ $**
271*8af74909SZhong Yang
272*8af74909SZhong Yang$(COMPONENT): $(COMPONENT_OBJS) $(DIR_O)\ScintRes.res
273*8af74909SZhong Yang	$(LD) $(LDFLAGS) -DEF:Scintilla.def -DLL -OUT:$@ $** $(LIBS)
274*8af74909SZhong Yang
275*8af74909SZhong Yang$(LEXCOMPONENT): $(LEXCOMPONENT_OBJS) $(DIR_O)\ScintRes.res
276*8af74909SZhong Yang	$(LD) $(LDFLAGS) -DEF:Scintilla.def -DLL -OUT:$@ $** $(LIBS)
277*8af74909SZhong Yang
278*8af74909SZhong Yang$(LIBSCI): $(COMPONENT_OBJS)
279*8af74909SZhong Yang	LIB /OUT:$@ $**
280*8af74909SZhong Yang
281*8af74909SZhong Yang# Define how to build all the objects and what they depend on
282*8af74909SZhong Yang
283*8af74909SZhong Yang{..\src}.cxx{$(DIR_O)}.obj::
284*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
285*8af74909SZhong Yang{..\lexlib}.cxx{$(DIR_O)}.obj::
286*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
287*8af74909SZhong Yang{..\lexers}.cxx{$(DIR_O)}.obj::
288*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
289*8af74909SZhong Yang{.}.cxx{$(DIR_O)}.obj::
290*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -c $(NAME)$(DIR_O)\ $<
291*8af74909SZhong Yang
292*8af74909SZhong Yang# Some source files are compiled into more than one object because of different conditional compilation
293*8af74909SZhong Yang$(DIR_O)\ScintillaBaseL.obj: ..\src\ScintillaBase.cxx
294*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -DSCI_LEXER -c $(NAME)$@ ..\src\ScintillaBase.cxx
295*8af74909SZhong Yang
296*8af74909SZhong Yang$(DIR_O)\CatalogueL.obj: ..\src\Catalogue.cxx
297*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -DSCI_LEXER -c $(NAME)$@ ..\src\Catalogue.cxx
298*8af74909SZhong Yang
299*8af74909SZhong Yang$(DIR_O)\Catalogue.obj: ..\src\Catalogue.cxx
300*8af74909SZhong Yang	$(CXX) $(CXXFLAGS) -DSCI_LEXER -DSCI_EMPTYCATALOGUE -c $(NAME)$@ ..\src\Catalogue.cxx
301*8af74909SZhong Yang
302*8af74909SZhong Yang# Dependencies
303*8af74909SZhong Yang
304*8af74909SZhong Yang!IF EXISTS(nmdeps.mak)
305*8af74909SZhong Yang
306*8af74909SZhong Yang# Protect with !IF EXISTS to handle accidental deletion - just 'nmake -f scintilla.mak deps'
307*8af74909SZhong Yang
308*8af74909SZhong Yang!INCLUDE nmdeps.mak
309*8af74909SZhong Yang
310*8af74909SZhong Yang!ENDIF
311*8af74909SZhong Yang
312