Problem error LNK2005:

Woodylepic

New member
Joined
Dec 29, 2009
Messages
71
Reaction score
0
Points
0
Hi all I was trying to recompile the famous pilon from Juan J.Luna(Camelopardis)
But I get some little probleme ?
Whene I recompile I get this error
1>Compilation en cours...
Code:
[SIZE=1]2>Compilation en cours...[/SIZE]
[SIZE=1]1>PYLONSEQUENCE.CPP[/SIZE]
[SIZE=1]2>CPYLON.CPP[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(56) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(67) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(73) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(76) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(77) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(84) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(91) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(93) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(95) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(97) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(99) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(100) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(101) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(105) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(106) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(109) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(152) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(738) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(741) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(754) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(1000) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(1084) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(1085) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(1086) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\PYLONSEQUENCE.CPP(1088) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(74): voir la dclaration de 'strcpy'[/SIZE]
[SIZE=1]1>CPYLONRT.CPP[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(162) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(164) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(166) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(168) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(175) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(178) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(181) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(184) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(187) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(190) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\cpylon.cpp(567) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74): voir la dclaration de 'strcpy'[/SIZE]
[SIZE=1]2>PYLONMFD.CPP[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\random.h(11) : warning C4244: 'argument': conversion de 'time_t' en 'unsigned int', perte possible de donnes[/SIZE]
[SIZE=1]1>CPYLON.CPP[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(162) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(164) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(166) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(168) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(175) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(178) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(181) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(184) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(187) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(190) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]1>..\pylon\PYLON\CPYLON.CPP(567) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(74): voir la dclaration de 'strcpy'[/SIZE]
[SIZE=1]1>Gnration de code en cours...[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(220) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(221) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(224) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(227) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(230) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(232) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(235) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(244) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(245) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(251) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(252) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(258) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(259) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(264) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(266) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(268) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(273) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(285) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(340) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(344) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(349) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(368) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(371) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(377) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(379) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(383) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(425) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(428) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(430) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(437) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(442) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(446) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(450) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(466) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(470) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(472) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(476) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(478) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(480) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(734) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(747) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(759) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(771) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(789) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(790) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(792) : warning C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\string.h(166): voir la dclaration de 'strtok'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(793) : warning C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\string.h(166): voir la dclaration de 'strtok'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(796) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(803) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(804) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(805) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(807) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(833) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(841) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(852) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(853) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(864) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(865) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(866) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(895) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(897) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(900) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(907) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(925) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(926) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(928) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(941) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(957) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(965) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(968) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74): voir la dclaration de 'strcpy'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(978) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylonmfd\pylonmfd.cpp(981) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74): voir la dclaration de 'strcpy'[/SIZE]
[SIZE=1]2>PYLONSEQUENCE.CPP[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(56) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(67) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(73) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(76) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(77) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(84) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(91) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(93) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(95) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(97) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(99) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(100) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(101) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(105) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(106) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(109) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(152) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(738) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(741) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(754) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(1000) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(1084) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(1085) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(1086) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366): voir la dclaration de 'sprintf'[/SIZE]
[SIZE=1]2>f:\orbiter 2010\orbitersdk\samples\pylon\pylon\pylonsequence.cpp(1088) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.[/SIZE]
[SIZE=1]2> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74): voir la dclaration de 'strcpy'[/SIZE]
[SIZE=1]2>Gnration de code en cours...[/SIZE]
[SIZE=1]1>Compilation du manifeste en ressources en cours...[/SIZE]
[SIZE=1]2>Compilation du manifeste en ressources en cours...[/SIZE]
[SIZE=1]1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1[/SIZE]
[SIZE=1]1>Copyright (C) Microsoft Corporation. All rights reserved.[/SIZE]
[SIZE=1]2>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1[/SIZE]
[SIZE=1]2>Copyright (C) Microsoft Corporation. All rights reserved.[/SIZE]
[SIZE=1]2>dition des liens en cours...[/SIZE]
[SIZE=1]1>dition des liens en cours...[/SIZE]
[SIZE=1]2>PYLONMFD.obj : error LNK2005: "void __cdecl calldummy(void)" (?calldummy@@YAXXZ) dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]2>PYLONMFD.obj : error LNK2005: _ModuleDate dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]2>PYLONSEQUENCE.obj : error LNK2005: "void __cdecl calldummy(void)" (?calldummy@@YAXXZ) dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]2>PYLONSEQUENCE.obj : error LNK2005: _ModuleDate dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]2> Cration de la bibliothque .\Debug/pylonmfd.lib et de l'objet .\Debug/pylonmfd.exp[/SIZE]
[SIZE=1]1>CPYLONRT.obj : error LNK2005: "void __cdecl calldummy(void)" (?calldummy@@YAXXZ) dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]1>CPYLONRT.obj : error LNK2005: _ModuleDate dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]1>PYLONSEQUENCE.obj : error LNK2005: "void __cdecl calldummy(void)" (?calldummy@@YAXXZ) dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]1>PYLONSEQUENCE.obj : error LNK2005: _ModuleDate dj dfini(e) dans CPYLON.obj[/SIZE]
[SIZE=1]1> Cration de la bibliothque .\..\..\..\Modules/pylon2.lib et de l'objet .\..\..\..\Modules/pylon2.exp[/SIZE]
[SIZE=1]2>.\Debug/pylonmfd.dll : fatal error LNK1169: un ou plusieurs symboles dfinis diffrentes reprises ont t rencontrs[/SIZE]
[SIZE=1]1>..\..\..\Modules\pylon2.dll : fatal error LNK1169: un ou plusieurs symboles dfinis diffrentes reprises ont t rencontrs[/SIZE]
[SIZE=1]2>Cration d'un fichier d'informations de consultation...[/SIZE]
[SIZE=1]1>Le journal de gnration a t enregistr l'emplacement "file://f:\ORBITER 2010\Orbitersdk\samples\Pylon2\Release\BuildLog.htm"[/SIZE]
[SIZE=1]1>Pylon2 - 5 erreur(s), 36 avertissement(s)[/SIZE]
[SIZE=1]2>Microsoft Browse Information Maintenance Utility Version 9.00.30729[/SIZE]
[SIZE=1]2>Copyright (C) Microsoft Corporation. All rights reserved.[/SIZE]
[SIZE=1]2>Le journal de gnration a t enregistr l'emplacement "file://f:\ORBITER 2010\Orbitersdk\samples\pylon\PYLONMFD\Debug\BuildLog.htm"[/SIZE]
[SIZE=1]2>pylonmfd - 5 erreur(s), 109 avertissement(s)[/SIZE]
[SIZE=1]========== Rgnration globale: 0 a russi, 2 a chou, 0 a t ignor ==========[/SIZE]
[SIZE=1][/SIZE] 
[SIZE=1]What I have to do to get this pilon updated to orbiter 2010 ?[/SIZE]
 
Last edited by a moderator:
Make sure you have "#define ORBITER_MODULE" only once in your source files.
 
Thank Urwumpe's

I have to put this only in the Cpp folder ?

I suspect also the oldy code can do this:blink: so I'm remaking the code, Urwumpe's

(gazza need desesperatly pylon to get Sts payload back".
 
Last edited:
Only in one of the CPP files. Not in a header, unless you know it is only included by a single CPP.
 
Thank Urwumpe's that was "#define ORBITER_MODULE the solution:cheers:

I have manage to compile 1 part of the code. just one other question ?

I have the famou "warning C4996" what can cose that famous problem Doctor Urwumpe's :huh: ???


warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
 
yes, simply replace all unsafe functions by their buffer overflow safe counterparts (eg, sprintf_s, which adds a size of the buffer as second parameter)... or disable the warning by defining _CRT_SECURE_NO_WARNINGS in your project definitions.
 
Thank Urwumpe's

I try compile and look like its comming good !

But I get some other error here one of the error

error C2504: 'VESSEL3' : classe de base non définie

I have check in the h file and vessel3 was there and is there also in the cpp


in h file he was there and look ok :huh:
class CPylon: public VESSEL3 {
public:

and also in CPYLON.CPP "Counstructor" and "save state"


CPylon::CPylon (OBJHANDLE hObj, int fmodel)
: VESSEL3 (hObj, fmodel)
{
CPylon (OBJHANDLE hObj, int fmodel);
~CPylon ();

}


void CPylon::clbkSaveState (FILEHANDLE scn)
{

#define bufSize 4096
char cbuf[bufSize];

// default vessel parameters
//SaveDefaultState (scn);
VESSEL3::clbkSaveState (scn);

// print STATE sequence
int i = GetSequenceByName("STATE");
if ( i != -1 ) {
DeleteSequence(i);
}
So what is going on Doctor :uhh:???

I got also this error Doctor ?
BSCMAKE: error BK1506 : impossible d'ouvrir le fichier '.\Debug\PYLONMFD.sbr': No such file or directory

I think I have find the trouble, I think I have not set the projet correcly I edit the projet right now I will give you news soon.
 
Last edited:
woodylepic: Could you please paste your code inside the code brackets please?
 
BSCMAKE: error BK1506 : impossible d'ouvrir le fichier '.\Debug\PYLONMFD.sbr': No such file or directory

This is solved by editing the projet pylonmfd setting

but now I get this problem (I know that is easy to solve for a good programer)

here the new error code

error LNK2019: symbole externe non résolu "public: bool __thiscall CPylon::IsSequenceValid(int)" (?IsSequenceValid@CPylon@@QAE_NH@Z) référencé dans la fonction "private: bool __thiscall PylonSequence::Validate(int,int)" (?Validate@PylonSequence@@AAE_NHH@Z)

Look like Its a (int) problem ? (this code is old ?)


HERE THE CODE OF PILONSEQUENCE
Code:
define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "PylonSequence.h"
#include "CPylon.h"

// ==========================================================
// Pylon Sequence Class
// ==========================================================

PylonSequence::PylonSequence(bool mainSeq, void *owner) {
	mainSequence = mainSeq;
	valid = true;
	mode = SEQ_MODE_SEQUENTIAL;
	userSequence = false;
	activate = false;
	cancel = false;
	activating = false;
	cancelling = false;
	finished = true;
	finishedcommand = false;

	activateByKey = false;
	activationKey = 0;


	this->owner = owner;

	if (mainSequence) {
		caller = NULL;
		cmdcurrent = NULL;
		name = new char[NAME_SIZE];
	} else {
		caller = NULL;
		cmdcode = PYL_CMD_NOT_DEFINED;
		name = NULL;
	}

	value.type = PYL_PARAM_NOT_DEFINED;
	value.tempRef = NULL;
	value.tempIndex = -1;

	nextCmd = NULL;
	nextSeq = NULL;	
}

PylonSequence::~PylonSequence() {
	if (name) delete name;
	if (nextSeq) delete nextSeq;
	if (nextCmd) delete nextCmd;
}

void PylonSequence::Print(char *str, int strSize) {
	if (mainSequence) {
		int n = sprintf(str,"BEGINSEQ \"%s\"",name);
		if (strSize < n) { *str = 0; return; }
		str+= n; strSize-=n;
		if (value.type==PYL_PARAM_NOT_DEFINED) {
			if (strSize < 2) { *str = 0; return; }
		} else {
			n=strlen(PylonParamTypeName[value.type]);
			if (strSize < n + 2) { *str = 0; return; }
			strSize-=n+2;
			*str=' ';str++;
			*str='(';str++;
			sprintf(str,"\"%s\"",PylonParamTypeName[value.type]);
			str+= n + 2;
			*str=')';str++;			
		}
		n=0;
		if (strSize < 5) { *str = 0; return; }
		if (userSequence) n = sprintf(str," USER"); else n=0;
		str+= n; strSize-=n;
		if (strSize < 9) { *str = 0; return; } 
		if (mode == SEQ_MODE_PARALLEL) n = sprintf(str," PARALLEL");
		else if (mode == SEQ_MODE_WAIT_ONE) n = sprintf(str," WAIT_ONE");
		str+= n; strSize-=n;
		*str = 0;

	} else {
		if (cmdcode != PYL_CMD_NOT_DEFINED) {
			strSize--;
			int n = sprintf(str,"%s",PylonCommands[cmdcode].name);
			str+= n; strSize-=n;
		}
		if (cmdcode == PYL_CMD_NOT_DEFINED || PylonCommands[cmdcode].numParams > 0) {
			static char s[NAME_SIZE];

			if (value.type == PYL_PARAM_GET_PARAMETER) 
				sprintf(s,"?\"%s\"",name);
			else if (value.type == PYL_PARAM_GENERATE_UNIFORM)
				sprintf(s,"_U(%f,%f)",value.doubleArray[0],value.doubleArray[1]);
			else if (value.type == PYL_PARAM_GENERATE_NORMAL)
				sprintf(s,"_N(%f,%f)",value.doubleArray[0],value.doubleArray[1]);
			else if (value.type == PYL_PARAM_THIS)
				sprintf(s,"_THIS");
			
			else if (value.type < PYL_PARAM_INTEGER) sprintf(s, "%d", value.bolValue?1:0);
			else if (value.type < PYL_PARAM_SCALAR) sprintf(s, "%d", value.intValue);
			else if (value.type < PYL_PARAM_STRING) sprintf(s, "%f", value.dblValue);
			//else if (value.type == PYL_PARAM_PARAMETER_NAME) sprintf(s,"\"%s:%s\"",((CPylon*)(value.tempRef))->GetName(),value.strValue);
			//else if (value.type == PYL_PARAM_PARAMETER_NAME) sprintf(s,"\">OK>%s<<[%d]\"",value.strValue,value.tempRef);
			//else if (value.type < PYL_PARAM_NOT_DEFINED) sprintf(s,"\">>%s<<[%d]\"",value.strValue,value.tempRef);
			else if (value.type < PYL_PARAM_NOT_DEFINED) sprintf(s,"\"%s\"",value.strValue);
			else sprintf(s,"#");
			int n = strlen(s);
			if (strSize < n+1) { *str = 0; return; }
			sprintf(str," %s",s);
			str+= n+1; strSize-=n+1;
		}
		if (nextCmd==NULL || strSize==0) { *str = 0; return; }
		*str= ' ';str++;strSize--;
		nextCmd->Print(str, strSize);
	}
}

char *PylonSequence::AddCmd(char *cmd, TPylParamValue &val) {
	if (!mainSequence) return NULL;

	char *lastpos = GetToken(cmd, val);
	if (lastpos==NULL) return NULL;
	if (val.type != PYL_PARAM_TOKEN_COMMAND) return cmd;

	PylonSequence *command = nextCmd;
	if (command==NULL) {
		nextCmd = new PylonSequence(false, owner);
		command = nextCmd;
	} else {
		while (command->nextSeq!=NULL) command = command->nextSeq;
		command->nextSeq = new PylonSequence(false, owner);
		command = command->nextSeq;
	}
	command->cmdcode = val.intValue;
	command->caller = this;

	PylonSequence *param = command;
	int n = PylonCommands[command->cmdcode].numParams;	
	for (int i=0;i<n;i++) {
		if (i>0) {
			param->nextCmd = new PylonSequence(false, owner);
			param = param->nextCmd;
		}
		param->caller = this;
		lastpos = GetToken(lastpos, val);
		if (lastpos==NULL) { param->valid = false; return NULL; }
		if (val.type==PYL_PARAM_GET_PARAMETER) {
			param->value.type = val.type;
			lastpos = GetToken(lastpos, val);
			if (lastpos==NULL || val.type != PYL_PARAM_STRING) { param->valid = false; return NULL; }
			param->name = new char[strlen(val.strValue)+1];
			sprintf(param->name, "%s",val.strValue);
		} else if (val.type==PYL_PARAM_GENERATE_UNIFORM || val.type==PYL_PARAM_GENERATE_NORMAL) {
			param->value.type = val.type;
			lastpos = GetToken(lastpos, val);
			if (lastpos==NULL || val.type!=PYL_PARAM_TOKEN_OPENBR) { param->valid = false; return NULL; }
			lastpos = GetToken(lastpos, val);
			if (lastpos==NULL || val.type != PYL_PARAM_SCALAR) { param->valid = false; return NULL; }
			param->value.doubleArray[0] = val.dblValue;
			lastpos = GetToken(lastpos, val);
			if (lastpos==NULL || val.type!=PYL_PARAM_TOKEN_COMMA) { param->valid = false; return NULL; }
			lastpos = GetToken(lastpos, val);
			if (lastpos==NULL || val.type != PYL_PARAM_SCALAR) { param->valid = false; return NULL; }
			param->value.doubleArray[1] = val.dblValue;
			lastpos = GetToken(lastpos, val);
			if (lastpos==NULL || val.type!=PYL_PARAM_TOKEN_CLOSEBR) { param->valid = false; return NULL; }
		} else if (val.type==PYL_PARAM_THIS) {
			param->value.type = val.type;
		} else if (val.type==PYL_PARAM_NOT_DEFINED) {
			param->value.type = val.type;
		} else {
			param->value.type = PylonCommands[command->cmdcode].paramType[i];
			if (param->value.type==PYL_PARAM_NOT_DEFINED) param->value.type = val.type;
			param->ConvertValue(param->value.type, val.type, &val, false);
		}
	}
	if ( strcmp(name,"STATE")!=0 )
	{
		if (command->cmdcode == PYL_CMD_SET_CANCEL_SEQUENCE ||
			command->cmdcode == PYL_CMD_SET_SEQUENCE_KEY ) {
/*char s[80];
command->Print(s,80);
sprintf(oapiDebugString(),"createSETCANCELSEQ: (%f)",oapiGetSimTime());
*/
			command->activate = true;
			command->Execute();
		}
	}

	return NULL;
}
void PylonSequence::SetCancelSequence(PylonSequence *ps) {

	if (!mainSequence) return;
/*sprintf(oapiDebugString(),
"setcancelseq()1: this=%s, canseq=%s",//, type=%d, strvalue=%s, tempidx=%d, tempref=%d, canseq=%s",
name,ps->name);//,value.type, value.strValue, value.tempIndex, value.tempRef, ps?ps->name:"NOPS");
*/
	if (nextCmd==NULL) {
		nextCmd = new PylonSequence(false, owner);
		nextCmd->cmdcode = PYL_CMD_SET_CANCEL_SEQUENCE;
		nextCmd->value.tempRef = ps;
	} else if (nextCmd->cmdcode==PYL_CMD_SET_CANCEL_SEQUENCE) {
		nextCmd->value.tempRef = ps;
	} else {
		PylonSequence *p = new PylonSequence(false, owner);
		p->cmdcode = PYL_CMD_SET_CANCEL_SEQUENCE;
		p->value.tempRef = ps;
		p->nextSeq = nextCmd;
		nextCmd = p;
	}

}
bool PylonSequence::Call(TPylParamValue *val, PylonSequence *caller) {
/*char s[NAME_SIZE];
Print(s,NAME_SIZE);
sprintf(oapiDebugString(),"CALL19: <%s> valt=%d,valstrvalue=%s",s,val->type,val->strValue);
*/
	if (!mainSequence || !valid || activating || activate) return false;
	if (value.type!=PYL_PARAM_NOT_DEFINED && val->type==PYL_PARAM_NOT_DEFINED) return false;

	if (nextCmd==NULL) return false;
	if (nextCmd->cmdcode == PYL_CMD_SET_CANCEL_SEQUENCE && nextCmd->nextSeq==NULL ) return false;

//bool b = CastValue(0, val);
//sprintf(oapiDebugString(),"CALL22: <%s> valt=%d,valstrvalue=%s,casted:%d",s,val->type,val->strValue,b?1:0);
	if (!CastValue(0, val)) return false;

//sprintf(oapiDebugString(),"CALL20: <%s>"/*-> %d,%d,%d"*/,s);//,nextCmd->cmdcode,nextCmd->nextSeq,nextCmd->nextCmd);

	this->caller = caller;
	activate = true;
	activating = true;
	finished = false;
	return true;
}
bool PylonSequence::Cancel(TPylParamValue *val) {
	if (!mainSequence || !valid || cancelling || cancel) return false;
//sprintf(oapiDebugString(),"KANCEL10: valid=%d, nextcmdcode=%s,cancelseq=%s",nextCmd?(nextCmd->valid?1:0):-1, nextCmd?PylonCommands[nextCmd->cmdcode].name:"NOCMD", nextCmd->value.tempRef?((PylonSequence*)nextCmd->value.tempRef)->name:"NOTEMPREF");

	this->caller = NULL;
	cancel= true;
	finished = false;
	cancelling = true;

	
	PylonSequence *p = nextCmd;
	if (p!=NULL && p->cmdcode==PYL_CMD_SET_CANCEL_SEQUENCE && p->valid) {

		if (((PylonSequence*)(p->value.tempRef))->value.type!=PYL_PARAM_NOT_DEFINED && val->type==PYL_PARAM_NOT_DEFINED) {
			return false;
		}
/*sprintf(oapiDebugString(),"KANCEL12: cancelseq=%s,cancelseqtype=%d,valtype=%d",
		p->value.tempRef?((PylonSequence*)p->value.tempRef)->name:"NOTEMPREF",
		((PylonSequence*)(p->value.tempRef))->value.type,
		val->type);
*/
		((PylonSequence*)(p->value.tempRef))->Call(val, this);
	}
	return true;
}
bool PylonSequence::Execute(void) {
//char s[NAME_SIZE];
	if (mainSequence) {
		if (finished) {
			if (nextSeq) nextSeq->Execute();
			return true;
		}

//Print(s,NAME_SIZE);
//sprintf(oapiDebugString(),"Ejecutando mainseq2: %s, mode=%d,activ=%d,type=%d,strvalue=%s",s,mode,activate?1:0,value.type,value.strValue);

			if (activate) {

				if (nextCmd==NULL || (nextCmd->cmdcode==PYL_CMD_SET_CANCEL_SEQUENCE &&
					nextCmd->nextSeq==NULL))
					return true;

				if (cancelling && nextCmd && nextCmd->cmdcode==PYL_CMD_SET_CANCEL_SEQUENCE) {
					nextCmd->Terminate();
				}
				activate = false; activating = true; cancelling = false;
				finishedcommand = false;
				
				if (mode > SEQ_MODE_SEQUENTIAL) {
//sprintf(oapiDebugString(),"%s: PARALLEL Activate: (%f)",name,oapiGetSimTime());
					PylonSequence *ps = nextCmd;
					if (ps && ps->cmdcode == PYL_CMD_SET_CANCEL_SEQUENCE)
						ps = ps->nextSeq;
					if (ps && ps->cmdcode == PYL_CMD_SET_SEQUENCE_KEY)
						ps = ps->nextSeq;
					bool term = (mode == SEQ_MODE_PARALLEL);
					while (ps) {
						if (ps->valid) {
							ps->activate = true;
							ps->finished = false;
							ps->finishedcommand = false;
							if (!ps->Execute()) {
								if (mode==SEQ_MODE_PARALLEL) term = false;
							} else {
								ps->finishedcommand=true;
								if (mode==SEQ_MODE_WAIT_ONE) term = true;
							}
						}
						else {
							//error de comando no valido ejecutado en paralelo...
							ps->finishedcommand=true;
							if (mode==SEQ_MODE_WAIT_ONE) term = true;
						}
						ps = ps->nextSeq;
					}
					if (term) {
//sprintf(oapiDebugString(),"EjecKK1: %s term (%f)",name,oapiGetSimTime());
						finishedcommand = true;
						finished = true;
						activating = false;
						cancelling = false;
					} 
				} else {
					cmdcurrent = nextCmd;
					if (cmdcurrent && cmdcurrent->cmdcode == PYL_CMD_SET_CANCEL_SEQUENCE)
						cmdcurrent = cmdcurrent->nextSeq;
					if (cmdcurrent && cmdcurrent->cmdcode == PYL_CMD_SET_SEQUENCE_KEY)
						cmdcurrent = cmdcurrent->nextSeq;
					while (cmdcurrent) {
						if (cmdcurrent->valid) {
							cmdcurrent->finished = false;
							cmdcurrent->activate = true;
							if (cmdcurrent->Execute()) {
								cmdcurrent = cmdcurrent->nextSeq;
							}
							else break;
						} else cmdcurrent = NULL;
					}
					if (cmdcurrent == NULL) {
						finished = true;
						finishedcommand = true;
						activating = false;
						cancelling = false;
					}
				}
			}

			if (cancel) {
//KKOO3
//sprintf(oapiDebugString(),"%s: Cancel1 (%f)",name,oapiGetSimTime());
				Terminate();
				finished = false;
				cancelling = true;
			}

			if (activating) {
				if (mode > SEQ_MODE_SEQUENTIAL) {
//sprintf(oapiDebugString(),"%s: PARALLEL ActivatING: (%f)",name,oapiGetSimTime());
					PylonSequence *ps = nextCmd;
					if (ps && ps->cmdcode == PYL_CMD_SET_CANCEL_SEQUENCE)
						ps = ps->nextSeq;
					if (ps && ps->cmdcode == PYL_CMD_SET_SEQUENCE_KEY)
						ps = ps->nextSeq;
					bool term = (mode == SEQ_MODE_PARALLEL);
					while (ps) {
						if (!ps->finishedcommand) {
							if (ps->valid) {
								if (!ps->Execute()) {
									if (mode==SEQ_MODE_PARALLEL) term = false;
								} else {
									ps->finishedcommand=true;
									if (mode==SEQ_MODE_WAIT_ONE) term = true;
								}
							}
							else {
								//error de comando no valido ejecutado en paralelo...
								ps->finishedcommand=true;
								if (mode==SEQ_MODE_WAIT_ONE) term = true;
							}
						}
						ps = ps->nextSeq;
					}
					if (term) {
						finishedcommand = true;
						finished = true;
						activating = false;
						cancelling = false;
					}
				}
				else {
					if (cmdcurrent && cmdcurrent->cmdcode == PYL_CMD_SET_CANCEL_SEQUENCE)
						cmdcurrent = cmdcurrent->nextSeq;
					if (cmdcurrent && cmdcurrent->cmdcode == PYL_CMD_SET_SEQUENCE_KEY)
						cmdcurrent = cmdcurrent->nextSeq;

					while (cmdcurrent) {
						if (cmdcurrent->valid) {
							if (cmdcurrent->Execute()) {
//								sprintf(oapiDebugString(),"param ejecutado: cmd=%d, strValue=%s",cmdcurrent->cmdcode, cmdcurrent->nextCmd?cmdcurrent->nextCmd->value.strValue:"no cmd");
								cmdcurrent = cmdcurrent->nextSeq;
								if (cmdcurrent) {
									cmdcurrent->finished = false;
									cmdcurrent->activate = true;
								}
							}
							else break;
						} else cmdcurrent = NULL;
					}
					if (cmdcurrent == NULL) {
						finished = true;
						finishedcommand = true;
						activating = false;
						cancelling = false;
					}
				}

			} else if (cancelling) {
//sprintf(oapiDebugString(),"%s: Cancelling (%f)",name,oapiGetSimTime());
				PylonSequence *p = nextCmd;
				if (p && p->cmdcode==PYL_CMD_SET_CANCEL_SEQUENCE && p->valid) {
					if (((PylonSequence*)p->value.tempRef)->finished) {
						finished = true;
						cancelling = false;
					}
				} else {
					finished = true;
					cancelling = false;
				}
			}
			if (nextSeq) nextSeq->Execute();
			return finishedcommand;


		} else {

//Print(s,NAME_SIZE);
//sprintf(oapiDebugString(),"Ejec cmd: %s>%s (%f)",caller->name,s,oapiGetSimTime());
			// Command execution
			if (cmdcode  < 0 || cmdcode >= PYL_CMD_NOT_DEFINED) valid = false;
			if (!valid) return true;

			VESSEL *ves, *ves2;
			CPylon *p;
			char strTemp[NAME_SIZE];
			char *c;
			PylonSequence *ps;
			TPylParamValue *v;
			int paramt, i, n;
			DWORD dw, dw2;
			PROPELLANT_HANDLE propH;
			THRUSTER_HANDLE thrustH;
			double d;

			if (activate) {
				int np = PylonCommands[cmdcode].numParams; i=0;
				ps = this;
				while (ps && i<np) {

					if (!ps->CastValue(PylonCommands[cmdcode].paramType[i], NULL)) {
						return true;
					}

					ps = ps->nextCmd; i++;
				}
				if (i<np)
					return true;
			}

			OBJHANDLE objH, obj2H;
			ATTACHMENTHANDLE attH;
			VESSELSTATUS2 status;
//   param: "nam" or "obj:nam"
//   seq: "nam" or "obj:nam"
//   value: cast the value to the param or seq type.
/*				 Values:
					.eE+-0..9 : double (also integer, boolean)
					"" : string
					_ prefix of special keyword
					# : get the sequence parameter
					?nam or ?obj:nam : read the parameter
*/

			switch (cmdcode) {

				/*
					SET_PARAM param value
				*/
				case PYL_CMD_SET_PARAM:

					p = (CPylon*)(value.tempRef);
					if (activate) {
						activate = false;
						paramt = p->GetParameterType(value.tempIndex);
						v = &nextCmd->value;
						nextCmd->ConvertValue(paramt, v->type,v,true);
						return p->SetParam(value.tempIndex, v);
					} else {
						return p->IsParameterSet(value.tempIndex);
					}
					break;

				/*
					CALL_SEQ sequence value
				*/
				case PYL_CMD_CALL_SEQ:
					p = (CPylon*)(value.tempRef);
					if (activate) {
						activate = false;
						if (nextCmd==NULL) {
							return !p->ActivateSequence(value.tempIndex);
						} else {
							TPylParamValue *v = &nextCmd->value;
							if (!nextCmd->CastValue(p->GetSequenceType(value.tempIndex), NULL))
								return true;
							return !p->ActivateSequenceValue(value.tempIndex, v);
						}
					} else {
//sprintf(oapiDebugString(),"EjecCALL: %s:%d, active=%d (%f)",p->GetName(),value.tempIndex,p->IsSequenceActive(value.tempIndex)?1:0,oapiGetSimTime());
						return !p->IsSequenceActive(value.tempIndex);
					}
					return true;
					break;

				/*
					CANCEL_SEQ sequence value
				*/
				case PYL_CMD_CANCEL_SEQ: // seq value
					p = (CPylon*)(value.tempRef);
					if (p==NULL) return true;
					if (activate) {
						activate = false;
						TPylParamValue *v = &nextCmd->value;
						if (v==NULL) {
							if (!p->CancelSequence(value.tempIndex)) return true;
						} else
							if (!!p->CancelSequenceValue(value.tempIndex, v)) return true;
					}
					return !p->IsSequenceCancelling(value.tempIndex);
					break;

				/*
					SET_CANCEL_SEQUENCE sequence
				*/
				case PYL_CMD_SET_CANCEL_SEQUENCE: //seq
					p = (CPylon*)(value.tempRef);
					n = p->GetSequenceCount();
					if (n<=value.tempIndex) return true;
					n = value.tempIndex;
					ps = p->sequences;
					while (n>0) {ps=ps->nextSeq;n--;}

					caller->SetCancelSequence(ps);
					return true;
					break;

				/*
					PYL_CMD_SET_SEQUENCE_KEY sequence key
				*/
				case PYL_CMD_SET_SEQUENCE_KEY: //key
					((PylonSequence*)this->caller)->activateByKey = true;
					((PylonSequence*)this->caller)->activationKey = value.intValue;
					return true;
					break;


				// Logic control
				case PYL_CMD_RESET:
					if (!this->caller) return true;
					ps = ((PylonSequence *)this->caller);
					ps->activate = true;
					ps->activating = true;
					ps->finished = false;
					return false;
					break;

				case PYL_CMD_SKIP_IF: return true; //bool
				case PYL_CMD_SKIP_IF_NOT: return true; //bool
				case PYL_CMD_RESET_IF: return true; //bool
				case PYL_CMD_RESET_IF_NOT: return true; //boo
					
				// Time events

				/*
					DELAY seconds
				*/
				case PYL_CMD_DELAY:
					if (activate) {
						activate = false;
						if ( oapiGetSimStep() > value.dblValue ) return true;
						if (value.dblValue<=0) return true;
						value.doubleArray[0] = oapiTime2MJD(oapiGetSimTime() + value.dblValue);
						return false;
					} else {
						return value.doubleArray[0] <= oapiGetSimMJD();
					}
					break;

				/*
					DELAY_UNTIL_MJD seconds
				*/
				case PYL_CMD_DELAY_UNTIL_MJD: return true;
					if (activate) {
						activate = false;
						if (value.dblValue <= oapiGetSimMJD()) return true;
						return value.dblValue <= oapiGetSimMJD();
					} else {
						return value.dblValue <= oapiGetSimMJD();
					}
					break;

				/*
					DELAY_UNTIL_SIMT seconds
				*/
				case PYL_CMD_DELAY_UNTIL_SIMT: return true; //seconds(scalar)
					if (activate) {
						activate = false;
						if (value.dblValue<=0) return true;
						value.doubleArray[0] = oapiTime2MJD(value.dblValue);
					}
					return value.doubleArray[0] <= oapiGetSimTime();

				// Other events

				/*
					WAIT_SEQUENCE sequence
				*/
				case PYL_CMD_WAIT_SEQUENCE:
					activate = false;
					p = (CPylon*)(value.tempRef);
					if (p==NULL) return true;
					return !p->IsSequenceActive(value.tempIndex);

				/*
					WAIT_FUEL_LEVEL vessel propellant_tank level
				*/
				case PYL_CMD_WAIT_FUEL_LEVEL:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					dw = nextCmd->value.intValue;
					if (dw >= ves->GetPropellantCount()) return true;
					propH = ves->GetPropellantHandleByIndex(dw);
					d = ves->GetPropellantMaxMass(propH);
					if (d == 0) return true;
					return (ves->GetPropellantMass(propH) / d) <= nextCmd->nextCmd->value.dblValue;

				/*
					WAIT_THRUSTER_LEVEL vessel thruster level
				*/
				case PYL_CMD_WAIT_THRUSTER_LEVEL:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					dw = nextCmd->value.intValue;
					if (dw >= ves->GetThrusterCount()) return true;
					thrustH = ves->GetThrusterHandleByIndex(dw);
					d = ves->GetThrusterLevel(thrustH);
					return d >= nextCmd->nextCmd->value.dblValue;

				// Setting vessel status				
				/*
					ATTACH vessel(parent) int(tochild) int(toparent) vessel(child)
				*/
				case PYL_CMD_ATTACH:
					ves = (VESSEL*)value.tempRef;
					dw = nextCmd->value.intValue;
					dw2 = nextCmd->nextCmd->value.intValue;
					ves2 = (VESSEL*)(nextCmd->nextCmd->nextCmd->value.tempRef);
					if (dw < 0 || dw >= ves->AttachmentCount(false) ||
						dw2 < 0 || dw2 >= ves2->AttachmentCount(true)) return true;
					CPylon::PylonAttach(ves->GetHandle(),
										ves2->GetHandle(),
										ves->GetAttachmentHandle(false,dw),
										ves2->GetAttachmentHandle(true,dw2));
					return true;

				/*
					RELEASE vessel vel
				*/
				case PYL_CMD_RELEASE:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					n = ves->AttachmentCount(true);
					i=0;
					obj2H = NULL;
					while (i<n && obj2H == NULL) {
						attH = ves->GetAttachmentHandle(true, i);
						obj2H = ves->GetAttachmentStatus(attH);
						i++;
					}
					if (i>=n) return true;
					ves2 = oapiGetVesselInterface(obj2H);
					n = ves2->AttachmentCount(false);
					i=0; objH = NULL;
					while (i<n && objH == NULL) {
						attH = ves2->GetAttachmentHandle(false, i);
						objH = ves2->GetAttachmentStatus(attH);
						if (objH!=NULL) {
							if (ves->GetHandle() != objH) objH = NULL;
							else break;
						}
						i++;
					}
					if (i>=n) return true;
//sprintf(oapiDebugString(),"RELEASE1: vel=%f",nextCmd->value.dblValue);
					CPylon::PylonDetach(obj2H, objH, attH, nextCmd->value.dblValue);
					return true;
				/*
					RELEASE_ATT parent_vessel att vel
				*/
				case PYL_CMD_RELEASE_ATT:
					activate = false;
					ves = (VESSEL*)(value.tempRef);

					i = nextCmd->value.intValue;
					n = ves->AttachmentCount(false);
					if (i>=n) return true;
					attH = ves->GetAttachmentHandle(false, i);
					if (!attH) return true;
					objH = ves->GetAttachmentStatus(attH);
					if (!objH) return true;
					CPylon::PylonDetach(ves->GetHandle(), objH, attH, nextCmd->nextCmd->value.dblValue);
					return true;

				case PYL_CMD_CREATE: return true;
					//class name x y z alfa beta gamma [ref](object ref for pos, if "", xyz are global)
				/*
					CREATE_ATTACHED name(parent) int(tochild) int(toparent) name(child) classname(child)
				*/
				case PYL_CMD_CREATE_ATTACHED:
					ves = (VESSEL*)value.tempRef;
					objH = ves->GetHandle();

					dw = nextCmd->value.intValue;
					dw2 = nextCmd->nextCmd->value.intValue;

					if ( ves->GetAttachmentStatus( ves->GetAttachmentHandle(false, dw) ) ) return true;

					//vessel name
					c = nextCmd->nextCmd->nextCmd->value.strValue;
					if ( oapiGetVesselByName( c ) != 0 ) {

						i = 1;
						sprintf(strTemp, "%s_%d", c, i);
						while ( oapiGetVesselByName( strTemp ) != 0 ) {
							i++;
							sprintf(strTemp, "%s_%d", c, i);
						}

						c = strTemp;
					}

					status.version = 2;
					status.rpos = _V(10000000000.0f,0,0);
					status.rvel = _V(0,0,0);
					status.rbody = oapiGetGbodyByIndex( 0 );

sprintf(oapiDebugString(),"CREATE_ATTACHED0 (t=%f): ves=%s, name=%s,class=%s,obj2h=%d,rbody=%d",
		oapiGetSimTime(),ves->GetName(),c,nextCmd->nextCmd->nextCmd->nextCmd->value.strValue,
		0, status.rbody );
return true;

					obj2H = (VESSEL*) oapiCreateVesselEx( c,
													     (nextCmd->nextCmd->nextCmd->nextCmd->value.strValue),
													     (void*)&status );


					ves2 = oapiGetVesselInterface(obj2H);

					if (!ves2) return true;
					if (dw < 0 || dw >= ves->AttachmentCount(false) ||
						dw2 < 0 || dw2 >= ves2->AttachmentCount(true)) return true;

					CPylon::PylonAttach(ves->GetHandle(),
										ves2->GetHandle(),
										ves->GetAttachmentHandle(false,dw),
										ves2->GetAttachmentHandle(true,dw2));
					return true;

				case PYL_CMD_DESTROY: return true;  //vessel

				/*
					SET_FUEL vessel propellant_tank level
				*/
				case PYL_CMD_SET_FUEL: return true;
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					dw = nextCmd->value.intValue;
					if (dw >= ves->GetPropellantCount()) return true;
					propH = ves->GetPropellantHandleByIndex(dw);
					d = ves->GetPropellantMaxMass(propH);
					if (d == 0) return true;
					ves->SetPropellantMass(propH, d * nextCmd->nextCmd->value.dblValue);
					return true;

				/*
					SET_MAIN_THRUST vessel level
				*/
				case PYL_CMD_SET_MAIN_THRUST:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					ves->SetThrusterGroupLevel(THGROUP_MAIN, nextCmd->value.dblValue);
					return true;

				/*
					SET_RETRO_THRUST vessel level
				*/
				case PYL_CMD_SET_RETRO_THRUST:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					ves->SetThrusterGroupLevel(THGROUP_RETRO, nextCmd->value.dblValue);
					return true;

				/*
					SET_HOVER_THRUST vessel level
				*/
				case PYL_CMD_SET_HOVER_THRUST:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					ves->SetThrusterGroupLevel(THGROUP_HOVER, nextCmd->value.dblValue);
					return true;

				/*
					SET_THRUSTER_LEVEL vessel thruster level
				*/
				case PYL_CMD_SET_THRUST: return true;
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					dw = nextCmd->value.intValue;
					if (dw >= ves->GetThrusterCount()) return true;
					thrustH = ves->GetThrusterHandleByIndex(dw);
					ves->SetThrusterLevel(thrustH, nextCmd->nextCmd->value.dblValue);
					return true;

				/*
					SET_CAMERA_OFFSET vessel x y z
				*/
				case PYL_CMD_SET_CAMERA_OFFSET:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					ves->SetCameraOffset(
						_V(nextCmd->value.dblValue, nextCmd->nextCmd->value.dblValue,nextCmd->nextCmd->nextCmd->value.dblValue));
					return true;
					
				case PYL_CMD_CREATE_ATTACHMENT: return true;  // vessel id x y x dx dy dz rx ry rz loose(bool)			
				case PYL_CMD_SET_TOCHILD_ATT: return true; // vessel attindex x y x dx dy dz rx ry rz loose(bool)

				/*
					SET_FOCUS_ENABLE vessel bool
				*/
				case PYL_CMD_SET_ENABLE_FOCUS:
					ves = (VESSEL*)(value.tempRef);
					ves->SetEnableFocus(nextCmd->value.bolValue);
					return true;

				// OrbiterSound interface
				case PYL_CMD_SOUND_LOAD: return true; //soundpath(string) soundname(soundname) vessel<- vessel en el q ha de sonar, y en el que se carga el sonido. Pero el sonido se añade con nombre a la lista del cpylon que ejecuta la secuencia. Por tanto los playsound(name) solo funcionan en secuencias de ese mismo cpylon. El vessel tendra q activar el sonido, ya sea por ser cpylon u otro.
				case PYL_CMD_SOUND_OPTION: return true; // option(int) onoff(bool)
				case PYL_CMD_SOUND_PLAY: return true; //soundname(soundname) loop(bool)=F volume(int_255)=255 freq(int)=0
				case PYL_CMD_SOUND_STOP: return true; //soundname(soundname)
				case PYL_CMD_SOUND_MAIN: return true; // soundname(soundname)
				case PYL_CMD_SOUND_RETRO: return true; // soundname(soundname)
				case PYL_CMD_SOUND_HOVER: return true; // soundname(soundname)

				// CPylon common properties management

				/*
					USER_SEQ_ENABLED seq bool
				*/
				case PYL_CMD_USER_SEQ_ENABLED:
					p = (CPylon*)(value.tempRef);
					dw = value.tempIndex;
					p->SetUserSequence(dw, nextCmd->value.bolValue);
					return true;

				/*
					USER_RELEASE_ENABLED pylonname bool
				*/
				case PYL_CMD_USER_RELEASE_ENABLED:
					p = (CPylon*)(value.tempRef);
					p->userReleaseEnabled = nextCmd->value.bolValue;
					return true;

				/*
					USER_CREATE_ENABLED pylonname bool
				*/
				case PYL_CMD_USER_CREATE_ENABLED:
					p = (CPylon*)(value.tempRef);
					p->userCreateEnabled = nextCmd->value.bolValue;
					return true;

				/*
					USER_DESTROY_ENABLED pylonname bool
				*/
				case PYL_CMD_USER_DESTROY_ENABLED:
					p = (CPylon*)(value.tempRef);
					p->userDestroyEnabled = nextCmd->value.bolValue;
					return true;

				/*
					ACTUALIZE_NP_CHILDS_ENABLED pylonname bool
				*/
				case PYL_CMD_ACTUALIZE_NP_CHILDS_ENABLED:
					p = (CPylon*)(value.tempRef);
					p->actualizeNotPylonChilds = nextCmd->value.bolValue;
					return true;

				/*
					CAN_NAVIGATE pylonname bool
				*/
				case PYL_CMD_CAN_NAVIGATE:
					p = (CPylon*)(value.tempRef);
					p->canNavigate = nextCmd->value.bolValue;
					return true;

				/*
					USER_PARAMETERS_ENABLED pylonname bool
				*/
				case PYL_CMD_USER_PARAMETERS_ENABLED:
					p = (CPylon*)(value.tempRef);
					p->userParametersEnabled = nextCmd->value.bolValue;
					return true;

				/*
					SET_CAMERA_FOV fov
				*/
				case PYL_CMD_SET_CAMERA_FOV:
					activate = false;
					oapiCameraSetAperture(value.dblValue*(PI/360.));
					return true;

				/*
					EST_FOCUS vessel
				*/
				case PYL_CMD_SET_FOCUS:
					activate = false;
					ves = (VESSEL*)(value.tempRef);
					oapiSetFocusObject( ves->GetHandle() );
					return true;

				default: return true;
			}
		}	
}


bool PylonSequence::CastValue(int cmdType, TPylParamValue *val) {

	TPylParamValue *source;
	int sourceType;

//KKOO4
/*if (!mainSequence&&cmdType==19)
sprintf(oapiDebugString(),
"CAST: selfvalt=%d,selfvalSTRv='%s',cmdt=%d, valt=%d, valstrvalue=%s",
value.type,value.strValue, cmdType,val?val->type:-1,val?val->strValue:"noval");
*/
	if (mainSequence) {
		
		if (value.type==PYL_PARAM_NOT_DEFINED) return true;
		else {
			source = val;
			sourceType = val->type;
			cmdType = value.type;
		}
	} else {
		if (value.type==PYL_PARAM_NOT_DEFINED) {
			source = &(((PylonSequence *)caller)->value);
			sourceType = source->type;
		} else {
			source = &value;
			sourceType = value.type;
		}
	}
	if (cmdType == PYL_PARAM_NOT_DEFINED) cmdType = sourceType;
	if (sourceType < 0) {
		char *c,*cc,tempstr[NAME_SIZE];
		int i,n;
		OBJHANDLE oh; CPylon* pylon;
		switch (sourceType) {
			case PYL_PARAM_GET_PARAMETER:
				c = name; cc = &tempstr[0];
				while (*c!=0 && *c!=':') { *cc++ = *c++;}
				if (*c==0) return false;
				*cc = 0; c++; if (*c==0) return false;
				if (cc==tempstr) pylon = (CPylon*)owner;
				else {
					oh = oapiGetVesselByName(tempstr);
					pylon = CPylon::IsPylonVessel(oapiGetVesselInterface(oh));
				}
				if (pylon == NULL) return false;
				i=0; n = pylon->GetParameterCount();
				while (i<n && strcmp(c, pylon->GetParameterName(i))!=0) {
					i++;
				}
				if (i==n) return false;

				sourceType = pylon->GetParameterType(i);
				if (sourceType < PYL_PARAM_INTEGER)
					value.bolValue = pylon->GetParamBol(i);
				else if (sourceType < PYL_PARAM_SCALAR)
					value.intValue = pylon->GetParamInt(i);
				else if (sourceType < PYL_PARAM_STRING)
					value.dblValue = pylon->GetParamDbl(i);
				else if (sourceType < PYL_PARAM_NOT_DEFINED)
					sprintf(value.strValue, pylon->GetParamStr(value.tempIndex));
				else return false;
			break;

		//PYL_PARAM_GENERATE_UNIFORM = -2; // symbol '_U'. Has two parameters, min and max (double)
		//sourceType = PYL_PARAM_SCALAR;

		//PYL_PARAM_GENERATE_NORMAL = -3; // symbol '_N'. Has two parameters, mean and stddesv (double)
		//otros para leer cosas del pylon: thruster level con thrhandle, fuel level, ..
		//sourceType = PYL_PARAM_SCALAR;

		// PYL_PARAM_THIS_VESSEL
		// (cmdType==PYL_PARAM_PARAMETER_NAME)
		//	sourceType = PYL_PARAM_PARAMETER_NAME
		//	
		//if (cmdType==PYL_PARAM_PARAMETER_NAME)
		//	sourceType = PYL_PARAM_PARAMETER_NAME

		// return true normalmente, o false en '?' no valido
		//el ?param ha de estar en name, creado con new.
		default: return false;
		}
		return ConvertValue(cmdType, sourceType, source, true);
	}
	if (source == &value) {
/*if (!mainSequence&&cmdType==19)
sprintf(oapiDebugString(),
"CAST4: selfvalt=%d,selfvalSTRv='%s',cmdt=%d, sorcetype=%d,sourcestrval='%s'",
value.type,value.strValue, 
cmdType,sourceType,source->strValue);
*/
		if (cmdType > PYL_PARAM_STRING && cmdType < PYL_PARAM_NOT_DEFINED) {
			return Validate(cmdType, sourceType);
		}
		else return true;
	}

	bool b = ConvertValue(cmdType, sourceType, source, true);
/*if (!mainSequence&&cmdType==19)
sprintf(oapiDebugString(),
"CAST5: selfvalt=%d,selfvalSTRv='%s',cmdt=%d, sorcetype=%d,sourcestrval='%s', convert:%d",
value.type,value.strValue, 
cmdType,sourceType,source->strValue,b?1:0);
*/
	return b;//ConvertValue(cmdType, sourceType, source, true);
}

bool PylonSequence::ConvertValue(int destType, int sourceType, TPylParamValue *source, bool doValidate) {
	bool conv = source!=&value;

//KKKK5
/*if (!mainSequence&&destType==0)
sprintf(oapiDebugString(),"convertValue:  dtyp %d styp %d dblval= %f,conv=%d",
		destType, sourceType, source->dblValue,conv?1:0);
*/
	// Boolean
	if (destType < PYL_PARAM_INTEGER) {
		if (sourceType < PYL_PARAM_INTEGER) { if (conv) value.bolValue = source->bolValue; }
		else if (sourceType < PYL_PARAM_SCALAR) value.bolValue = source->intValue!=0;
		else if (sourceType < PYL_PARAM_STRING) value.bolValue = source->dblValue==0?false:true;
		else if (sourceType < PYL_PARAM_NOT_DEFINED) value.bolValue = source->strValue[0]!=0;
		if (!conv) value.type = destType;
		return true;
	}
	// Integer
	if (destType < PYL_PARAM_SCALAR) {
		if (sourceType < PYL_PARAM_INTEGER) value.intValue = source->bolValue;
		else if (sourceType < PYL_PARAM_SCALAR) { if (conv) value.intValue = source->intValue; }
		else if (sourceType < PYL_PARAM_STRING) value.intValue = (int)source->dblValue;
		else if (sourceType < PYL_PARAM_NOT_DEFINED) value.intValue = atoi(source->strValue);
		if (!conv) value.type = destType;
		return true;
	}
	// Scalar (double) types:
	if (destType < PYL_PARAM_STRING) {
		if (sourceType < PYL_PARAM_INTEGER) value.dblValue = source->bolValue;
		else if (sourceType < PYL_PARAM_SCALAR) value.dblValue = source->intValue;
		else if (sourceType < PYL_PARAM_STRING) { if (conv) value.dblValue = source->dblValue; }
		else if (sourceType < PYL_PARAM_NOT_DEFINED) value.dblValue = atof(source->strValue);
		if (!conv) value.type = destType;
		return true;
	}
	// String types:
	if (destType < PYL_PARAM_NOT_DEFINED) {
		if (sourceType < PYL_PARAM_INTEGER) sprintf(value.strValue, "%s", &PylonBoolParamTypeName[sourceType][source->bolValue][0]);
		else if (sourceType < PYL_PARAM_SCALAR) sprintf(value.strValue, "%d", source->intValue);
		else if (sourceType < PYL_PARAM_STRING) sprintf(value.strValue, "%f", source->dblValue);
		else if (sourceType < PYL_PARAM_NOT_DEFINED) {
			if (conv) strcpy(value.strValue, source->strValue);
			
//KKOO5if (!mainSequence&&destType==19)
//sprintf(oapiDebugString(),"convertValue2:  dtyp %d styp %d strval=%s,conv=%d,valuetype=%d,valuestrvalue=%s",
//		destType, sourceType, source->strValue,conv?1:0,value.type,value.strValue);

			if (destType > PYL_PARAM_STRING && doValidate) {
				bool validated=Validate(destType, sourceType);
//KKOO5if (!mainSequence&&destType==19)
//sprintf(oapiDebugString(),"convertValue3:  dtyp %d styp %d strval=%s,conv=%d,valuetype=%d,valuestrvalue=%s, validated=%d",
//		destType, sourceType, source->strValue,conv?1:0,value.type,value.strValue,validated?1:0);

				return validated;
			}
			else return true;
		}
	}
	return false;
}
	
bool PylonSequence::Validate(int destType, int srcType) {
	if (mainSequence) return false;
//KKOO5sprintf(oapiDebugString(),"Validate: cmdt:%d,  srctype:%d, valuestrvalue=%s",destType,srcType,value.strValue);
	if (destType == PYL_PARAM_NOT_DEFINED) destType = srcType;
	if (destType > PYL_PARAM_STRING && destType < PYL_PARAM_NOT_DEFINED) {

		if (srcType < PYL_PARAM_STRING || srcType >= PYL_PARAM_NOT_DEFINED) {
			return false;
		}
		OBJHANDLE oh;
		int i,n;
		char *c, *cc;
		char tempstr[NAME_SIZE];
		switch (destType) {
			case PYL_PARAM_OBJECT_NAME:
				value.tempH = oapiGetObjectByName(value.strValue);
				return value.tempH != NULL;
				break;
			case PYL_PARAM_VESSEL_NAME:
				oh = oapiGetVesselByName(value.strValue);
				if (oh==NULL) return false;
				value.tempRef = oapiGetVesselInterface(oh);
				return value.tempRef != NULL;
				break;
			case PYL_PARAM_VESSEL_CLASS:
				return true;
				break;
			case PYL_PARAM_GBODY_NAME:
				value.tempH = oapiGetGbodyByName(value.strValue);
				return (value.tempH!=NULL);
				break;
			case PYL_PARAM_BASE_NAME:
//				value.tempH = oapiGetBaseByName(value.strValue); -->> nomplaneta:nombase
				return false;//(value.tempH!=NULL);
				break;
			case PYL_PARAM_PARAMETER_NAME:
				c = value.strValue; cc = &tempstr[0];
				while (*c!=0 && *c!=':') { *cc++ = *c++;}
				
				if (*c==0) { //return false;
					value.tempRef = (void *)owner;
					c = value.strValue;
				} else {
					*cc = 0; c++; if (*c==0) return false;
					if (cc==tempstr) value.tempRef = owner;
					else {
						oh = oapiGetVesselByName(tempstr);
						if (oh==NULL) return false;
						value.tempRef = (void *)CPylon::IsPylonVessel(oapiGetVesselInterface(oh));
					}
				}//
				
/*				if (*c==0) return false;
				*cc = 0; c++; if (*c==0) return false;
				if (cc==tempstr) value.tempRef = owner;
				else {
					oh = oapiGetVesselByName(tempstr);
					if (oh==NULL) return false;
					value.tempRef = (void *)CPylon::IsPylonVessel(oapiGetVesselInterface(oh));
				}
*/
				if (value.tempRef == NULL) return false;
				i=0; n = ((CPylon*)value.tempRef)->GetParameterCount();
				while (i<n && strcmp(c, ((CPylon*)value.tempRef)->GetParameterName(i))!=0) {
					i++;
				}
				if (i==n) return false;
				value.tempIndex = i;
				return true;
				break;
			case PYL_PARAM_SEQUENCE_NAME:
				c = value.strValue; cc = &tempstr[0];
				while (*c!=0 && *c!=':') { *cc++ = *c++;}
				if (*c==0) return false;
				*cc = 0; c++; if (*c==0) return false;
				if (cc==tempstr) value.tempRef = owner;
				else {
					oh = oapiGetVesselByName(tempstr);
					if (oh==NULL) return false;
					value.tempRef = (void *)CPylon::IsPylonVessel(oapiGetVesselInterface(oh));
				}
				if (value.tempRef == NULL) return false;

				i=0, n = ((CPylon*)value.tempRef)->GetSequenceCount();
				while (i<n && strcmp(c, ((CPylon*)value.tempRef)->GetSequenceName(i))!=0)
					i++;
				if (i==n) return false;
				value.tempIndex = i;
				return ((CPylon*)value.tempRef)->IsSequenceValid(i);
				break;
			case PYL_PARAM_PYLON_NAME:
				oh = oapiGetVesselByName(value.strValue);
				if (oh==NULL) return false;
				value.tempRef = CPylon::IsPylonVessel(oapiGetVesselInterface(oh));
				return value.tempRef != NULL;
				break;

		}
	}
	return true;
}

char *PylonSequence::GetToken(char *line, TPylParamValue &value) {
	if (line==NULL) return NULL;
	while (*line!=0 && (*line==' ' || *line==9)) line++;
	if (*line==0) return NULL;

	if (*line=='#') { value.type = PYL_PARAM_NOT_DEFINED; return ++line; }
	if (*line=='?') { value.type = PYL_PARAM_GET_PARAMETER; return ++line; }
	if (*line=='(') { value.type = PYL_PARAM_TOKEN_OPENBR; return ++line; }
	if (*line==')') { value.type = PYL_PARAM_TOKEN_CLOSEBR; return ++line; }
	if (*line==',') { value.type = PYL_PARAM_TOKEN_COMMA; return ++line; }

	if (*line=='"') {
		value.type = PYL_PARAM_STRING;
		line++;
		char *p = value.strValue;
		while (*line!=0 && *line!='"') {
			while (*line!=0 && *line!='"') { *p = *line; p++; line++; }
			if (*line!=0 && *(line+1) == '"') { *p='"'; p++; line+=2; }
		}
		*p = 0;
		if (*line!=0) line++;
		return line;
	}

	char *end = line;
	char s[NAME_SIZE];
	int c = 0;
	while (c < (NAME_SIZE-1) && *end!=0 && *end!=' ' && *end!=9 && *end!='(' && *end!=')' && *end!=',') {
		s[c] = *end;
		c++;
		end++;
	}
	s[c] = 0;

	if ((*line>='0' && *line<='9') || *line=='.' || *line=='+' || *line=='-') {
		value.type = PYL_PARAM_SCALAR;
		value.dblValue = atof(s);
		return end;
	}

	if (*line=='_') {
		line++;
		if (*line=='U') {
			value.type = PYL_PARAM_GENERATE_UNIFORM; return ++line;
		}
		if (*line=='N') {
			value.type = PYL_PARAM_GENERATE_NORMAL; return ++line;
		}

		if (strcmp("THIS\0",s)==0) {
			value.type = PYL_PARAM_THIS; return ++line;
		}
		return NULL;
	}

	for (int i=0;i<PYL_CMD_NOT_DEFINED;i++) {
		if (strcmp(PylonCommands[i].name,s)==0) {
			value.type = PYL_PARAM_TOKEN_COMMAND;
			value.intValue = i;
			return end;
		}
	}
	if (strcmp("BEGINSEQ",s)==0) {
		value.type = PYL_PARAM_TOKEN_BEGINSEQ;
		return end;
	}
	if (strcmp("ENDSEQ",s)==0) {
		value.type = PYL_PARAM_TOKEN_ENDSEQ;
		return end;
	}
	if (strcmp("PARALLEL",s)==0) {
		value.type = PYL_PARAM_TOKEN_PARALLEL;
		return end;
	}
	if (strcmp("WAITONE",s)==0) {
		value.type = PYL_PARAM_TOKEN_WAITONE;
		return end;
	}
	if (strcmp("USER",s)==0) {
		value.type = PYL_PARAM_TOKEN_USER;
		return end;
	}

	return NULL;
}

void PylonSequence::Terminate(void) {
	if (mainSequence) {
		PylonSequence *ps = nextCmd;
		if (mode > SEQ_MODE_SEQUENTIAL) {
			if (ps && ps->value.type == PYL_CMD_SET_CANCEL_SEQUENCE)
				ps = ps->nextSeq;
			if (ps && ps->value.type == PYL_CMD_SET_SEQUENCE_KEY)
				ps = ps->nextSeq;

			while (ps!=NULL) {
				if (!ps->finishedcommand) ps->Terminate();
				ps = ps->nextSeq;
			}
		} else {
			if (cmdcurrent!=NULL) cmdcurrent->Terminate();
		}
	} else {
		if (cmdcode==PYL_CMD_CALL_SEQ) {
			CPylon *p = (CPylon *)value.tempRef;
			PylonSequence *ps = p->sequences;
			int i=value.tempIndex;

			while (ps!=NULL && i>0) { i--; ps = ps->nextSeq; }

			if (ps!=NULL) ps->Terminate();
		}
	}

	finishedcommand = true;
	finished = true;
	activate = false;
	cancel = false;
	activating = false;
	cancelling = false;
}

HERE THE PUBLIC bool THAT COSE PROBLEME i THINK ?

/ Pylon Sequence Class
// ==========================================================
class CPylon;

class PylonSequence {
public:
	bool userSequence;





THANK FOR THE HELP :hailprobe:

---------- Post added 05-25-11 at 01:07 AM ---------- Previous post was 05-24-11 at 09:41 PM ----------

Ok I have resolve 75% of the problem I think :rolleyes:
But now I have to solve some oldy 2003 C++ coding
I get LNK2019 error on this:

1>PYLONMFD.obj : error LNK2019: symbole externe non rsolu "public: int __thiscall CPylon::GetSequenceType(int)" (?GetSequenceType@CPylon@@QAEHH@Z) rfrenc dans la fonction "public: void __thiscall PylonMFD::selectPrevParam(void)" (?selectPrevParam@PylonMFD@@QAEXXZ)


Is this code correct in C++ 2008 free edition, what I have to change to get this work :huh: ?
look like a int problem there ?

int
CPylon::GetSequenceType(int index)
{
if (index<0 || index >= numSeq) return PYL_PARAM_NOT_DEFINED;
SelectSequence(index);
return curSeq->value.type;
}
 
Last edited:
The linker cannot find the CPylon::GetSequenceType() function in the object files and libraries it has been given.
 
screenshot194m.jpg

I don't think its a library problem can somebody confirm this ? Its look like a (int) problem :huh:?
 
Last edited:
The link error means that you've defined the method GetSequenceType(int) in class CPylon in a header (.h) file and are using it in your code, but the linker can't find the actual method definition, which will be defined in the .cpp file and compiled into an object (or lib) file.

This means you are missing one of three things
1) The function in your cpp file (what you've written above will suffice if it's your code)
2) The whole of the cpp file itself is missing from the project and so the compiler doesn't generate the functions and the linker can't find it
3) The .lib library file if you are using all of this a a library function.

I don't know how you're using it.
 
An int is an integer, that's one of the simplest format of data that a computer can handle and I don't see how it can be a problem itself... Else your processor is in deep trouble :hmm:
 
symbole externe non résolu "public: bool __thiscall CPylon::IsSequenceValid(int)"
In your class declaration (in the header) you have defined the method (in CPylon class):
public bool IsSequenceValid(int);

The implementation of this method is either not included in the library file you are including, or not defined in your cpp files (if you wrote CPylon yourself)
 
Here my Cpylon header agentgonzo I not see anithing wrong here ? like I said this code was made in c++2003 that why I suspect a (int) probleme ?

Code:
#ifndef __CPYLON_H
#define __CPYLON_H

#include <stdio.h>

#include "orbitersdk.h"
#include "PylonSequence.h"

// ==========================================================
// Interface for derived vessel class: CPylon
// ==========================================================
// This class should not be subclassed! Subclass CPylonRT instead.

class CPylon: public VESSEL3 {
public:
	CPylon (OBJHANDLE hObj, int fmodel);
	~CPylon ();

	// ==============================================================
	// Implementation of OVC functions
	// ==============================================================
	void clbkLoadStateEx (FILEHANDLE scn, void *vs);
	void clbkSaveState (FILEHANDLE scn);
	void clbkPostStep (double simt, double simdt, double mjd);


	// ==============================================================
	// Pylon API
	// ==============================================================

	// Pylon paramaters management. Every CPylon subclass must override these functions

	virtual int GetParameterCount(void);	
	virtual char *GetParameterName(int index);
	virtual int GetParameterType(int index);
	virtual bool IsUserParameter(int index);

	virtual bool GetParamBol(int index);
	virtual int GetParamInt(int index);
	virtual double GetParamDbl(int index);
	virtual char *GetParamStr(int index); 

	virtual bool SetParam(int index, TPylParamValue *value);
	virtual bool SetParamBol(int index, bool value);//devolver bool que indica si ya ha terminado na mas. , PylSequence *caller = NULL);
	virtual bool SetParamInt(int index, int value);//, PylSequence *caller = NULL);
	virtual bool SetParamDbl(int index, double value);//, PylSequence *caller = NULL);
	virtual bool SetParamStr(int index, char *string);//, PylSequence *caller = NULL);
	
	virtual bool IncParam(int index);//, PylSequence *caller = NULL);
	virtual bool DecParam(int index);//, PylSequence *caller = NULL);

	virtual bool IsParameterSet(int index);	

	// Common properties of pylons
	bool canNavigate,
		 userParametersEnabled,
		 userReleaseEnabled,
		 userCreateEnabled,
		 userDestroyEnabled,
		 actualizeNotPylonChilds;
	double releaseVel;

	VECTOR3 pos,dir,rot;

	// Sequence management functions

	int GetSequenceCount(void);
	char *GetSequenceName(int index);
	int GetSequenceType(int index);
	int GetSequenceCancelType(int index);
	bool IsUserSequence(int index);
	void SetUserSequence(int index, bool user);
	int CreateSequence(char *name, int type, int execmode);
	char *AddSequenceCmd(int index, char *cmd);
	bool IsSequenceValid(int index);
	bool ActivateSequence(int index);
	bool ActivateSequenceValue(int index, TPylParamValue *value); 
	bool CancelSequence(int index);
	bool CancelSequenceValue(int index, TPylParamValue *value);
	bool IsSequenceActive(int index);
	bool IsSequenceCancelling(int index);
	int GetSequenceByName(char *name);
	void DeleteSequence(int index);
	bool ActivateSequenceByKey(DWORD key);

	// Generic management

	VESSEL *GetRoot(void) const;
	VESSEL *GetParent(void) const;
	ATTACHMENTHANDLE GetAttToParent(void) const;

	static bool PylonAttach(OBJHANDLE parent, OBJHANDLE child, ATTACHMENTHANDLE parent_attachment, ATTACHMENTHANDLE child_attachment);
	static bool PylonDetach(OBJHANDLE parent, OBJHANDLE child, ATTACHMENTHANDLE parent_attachment, double vel = 0.0);
	static CPylon * IsPylonVessel(VESSEL *v);

	virtual void Changed(void);

	 // Don't override this:
	virtual void PropagateChange(bool attaching, VESSEL *parent);

	bool IsConnected(VESSEL *v, VESSEL *root, VESSEL *parent);
	bool IsFirstFrame();
	bool IsFirstFrameAttached();
	
	// --------- End of API ---------


private:
	bool firstFrame, firstFrameAttached;
	VESSEL *root, *parent;
	ATTACHMENTHANDLE attachmentToParent;
	PylonSequence *sequences;
	int numSeq, icurSeq; PylonSequence *curSeq;
	void RecursivePropagateChange(VESSEL *root, VESSEL *parent);
	void ActualizeParent(void);
	void SelectSequence(int i);

	friend class PylonSequence;
};

#endif // !__CPYLON_H
 
Last edited by a moderator:
Here my Cpylon header agentgonzo I not see anithing wrong here ? like I said this code was made in c++2003 that why I suspect a (int) probleme ?
It's not the header - you've defined the method in the header. That's why the compiler doesn't complain. All that is good.

It's the cpp file where you haven't created a body for the bool CPylon::IsSequenceValid(int) method that's the problem.

Please put your code in code tags:
Code:
bool CPylon::IsSequenceValid(int inputInteger)
{
   // your code here
   return true;
}
^^ You don't have one of these in your .cpp file.
 
Here my Cpylon.cpp code
Code:
#define ORBITER_MODULE

#define STRICT

#include <stdio.h>

#include "CPylon.h"

#include "..\PYLONRT\CPylonRT.h"

// Internal functions prototypes


// Constructor

CPylon::CPylon (OBJHANDLE hObj, int fmodel)

: VESSEL3 (hObj, fmodel)

{

canNavigate = true;

userParametersEnabled = true;

userReleaseEnabled = true;

userCreateEnabled = true;

userDestroyEnabled = true;

actualizeNotPylonChilds = false;

releaseVel = 0.0;

//todo: si owner=NULL al necesitarlo, devolver false. para ejecutar seqs desde otro sitio

parent = NULL;

root = NULL;

attachmentToParent = NULL;

sequences = NULL;

numSeq = 0;

icurSeq = -2;

curSeq = NULL;

firstFrame = true;

firstFrameAttached = true;

}

// Destructor

CPylon::~CPylon ()

{

if (sequences) delete sequences;

}


// Read status from scenario file

void CPylon::clbkLoadStateEx (FILEHANDLE scn, void *vs)

{

char *line;

int seq;

TPylParamValue theValue, theValue2;

bool insideSequence = false;

int numCmds = 0;

while (oapiReadScenario_nextline (scn, line)) {

char *lastPos;

if (!insideSequence) {

lastPos = PylonSequence::GetToken(line, theValue);

if (lastPos == NULL) {

ParseScenarioLineEx (line, vs);

continue;

}

if (theValue.type == PYL_PARAM_TOKEN_BEGINSEQ) {

lastPos = PylonSequence::GetToken(lastPos, theValue);

if (theValue.type != PYL_PARAM_STRING || *(theValue.strValue)==0) {

ParseScenarioLineEx (line, vs);

continue;

}

//sprintf_s(oapiDebugString(),"LOAD7: name=<%s>, lastPos=<%s>",theValue.strValue,lastPos);

int seqtype = PYL_PARAM_NOT_DEFINED;

lastPos = PylonSequence::GetToken(lastPos, theValue2);

if (theValue2.type == PYL_PARAM_TOKEN_OPENBR) {

lastPos = PylonSequence::GetToken(lastPos, theValue2);

if (theValue2.type == PYL_PARAM_STRING) {

int i;

for (i=0;i<PYL_PARAM_NOT_DEFINED;i++) {

if (strcmp(PylonParamTypeName[i],theValue2.strValue)==0) break;

}

if (i < PYL_PARAM_NOT_DEFINED) 

seqtype = i;

else continue;

lastPos = PylonSequence::GetToken(lastPos, theValue2);

if (theValue2.type != PYL_PARAM_TOKEN_CLOSEBR) continue;

lastPos = PylonSequence::GetToken(lastPos, theValue2);

}

}

int mode = SEQ_MODE_SEQUENTIAL, user = false;

while (lastPos!=NULL) {

switch (theValue2.type) {

case PYL_PARAM_TOKEN_PARALLEL:

mode = SEQ_MODE_PARALLEL;

break;

case PYL_PARAM_TOKEN_WAITONE:

mode = SEQ_MODE_WAIT_ONE;

break;

case PYL_PARAM_TOKEN_USER:

user = true;

break;

}

lastPos = PylonSequence::GetToken(lastPos, theValue2);

}

if (strcmp(theValue.strValue,"STATE")==0) {

mode = SEQ_MODE_PARALLEL;

user = false;

}

seq = CreateSequence(theValue.strValue, seqtype, mode);

if (user) SetUserSequence(seq, true);

insideSequence = true;

numCmds = 0;

} else {

ParseScenarioLineEx (line, vs);

}

} else {


lastPos = AddSequenceCmd(seq, line);

if (lastPos == line) {

lastPos = PylonSequence::GetToken(line, theValue);

if (lastPos==NULL) continue;

switch (theValue.type) {

case PYL_PARAM_TOKEN_ENDSEQ:

insideSequence = false;

break;

}

} else numCmds++;

} 

}

}

// Write status to scenario file

void CPylon::clbkSaveState (FILEHANDLE scn)

{


#define bufSize 4096

char cbuf[bufSize];

// default vessel parameters

//SaveDefaultState (scn);

VESSEL3::clbkSaveState (scn);

// print STATE sequence

int i = GetSequenceByName("STATE");

if ( i != -1 ) {

DeleteSequence(i);

}

i = CreateSequence("STATE",PYL_PARAM_NOT_DEFINED,false);

int nc = GetParameterCount();

for (int p=0;p<nc;p++) {

int type = GetParameterType(p);

char *name = GetParameterName(p);

if ( type < PYL_PARAM_INTEGER ) {

sprintf_s(cbuf,"SET_PARAM \"%s\" %d",name,GetParamBol(p)?1:0);

} else if ( type < PYL_PARAM_SCALAR ) {

sprintf_s(cbuf,"SET_PARAM \"%s\" %d",name,GetParamInt(p));

} else if ( type < PYL_PARAM_STRING ) {

sprintf_s(cbuf,"SET_PARAM \"%s\" %f",name,GetParamDbl(p));

} else if ( type < PYL_PARAM_NOT_DEFINED ) {

sprintf_s(cbuf,"SET_PARAM \"%s\" \"%s\"",name,GetParamStr(p));

}

AddSequenceCmd(i, cbuf);

}

if ( !canNavigate ) {

sprintf_s(cbuf,"CAN_NAVIGATE \"%s\" 0",this->GetName());

}

if ( !userParametersEnabled ) {

sprintf_s(cbuf,"USER_PARAMETERS_ENABLED \"%s\" 0",this->GetName());

}

if ( !userReleaseEnabled ) {

sprintf_s(cbuf,"USER_RELEASE_ENABLED \"%s\" 0",this->GetName());

}

if ( !userCreateEnabled ) {

sprintf_s(cbuf,"USER_CREATE_ENABLED \"%s\" 0",this->GetName());

}

if ( !userDestroyEnabled ) {

sprintf_s(cbuf,"USER_DESTROY_ENABLED \"%s\" 0",this->GetName());

}

if ( actualizeNotPylonChilds ) {

sprintf_s(cbuf,"ACTUALIZE_NP_CHILDS_ENABLED \"%s\" 1",this->GetName());

}

AddSequenceCmd(i, cbuf);

PylonSequence* seq = 0;

SelectSequence(i);

seq = curSeq;

if ( seq != 0 ) {

seq->Print(cbuf, bufSize);

oapiWriteScenario_string (scn, cbuf, "");

seq = seq->nextCmd;

while ( seq ) {

seq->Print(cbuf, bufSize);

oapiWriteScenario_string (scn, cbuf, "");

seq = seq->nextSeq;

}

oapiWriteScenario_string (scn, "ENDSEQ", "");

}

// print the rest of sequences

int n = GetSequenceCount();

for (int j=0;j<n;j++) {

if ( j == i ) continue;

SelectSequence(j);

seq = curSeq;

if ( seq != 0 ) {

seq->Print(cbuf, bufSize);

oapiWriteScenario_string (scn, cbuf, "");

seq = seq->nextCmd;

while ( seq ) {

seq->Print(cbuf, bufSize);

oapiWriteScenario_string (scn, cbuf, "");

seq = seq->nextSeq;

}

oapiWriteScenario_string (scn, "ENDSEQ", "");

}

}

}

// Frame update

// This function should be called from the module callback function ovcTimestep() as the

// LAST instruction. It updates the parent attachment from the local variables attachmenToParent,

// pos, dir and rot (if it is attached to something) and executes the active sequences.

void CPylon::clbkPostStep (double simt, double simdt, double mjd)

{

ATTACHMENTHANDLE top;

OBJHANDLE op;

bool f = firstFrame;

if (firstFrame) {

firstFrame = false;

/*static kk=0;

if (kk++==1)

sprintf_s(oapiDebugString(),"timestep3KK: %s, parent=%s, kk=%d",GetName(),parent?parent->GetName():"null",kk);

*/

ActualizeParent();

if (parent) {

VESSEL *r=parent;

double cm = GetEmptyMass();

op = NULL;

while (op==NULL) { 

double rm = r->GetEmptyMass();

r->SetEmptyMass(rm + cm);

int j=0, m= r->AttachmentCount(true);

while (j<m && op==NULL) {

top = r->GetAttachmentHandle(true, j);

op = r->GetAttachmentStatus(top);

j=j+1;

}

if (op==NULL) break;

r = oapiGetVesselInterface(op);

if (r==NULL) break;

op=NULL;

}

}

int n = GetSequenceCount();

TPylParamValue v; v.type = PYL_PARAM_NOT_DEFINED;

for (int i=0;i<n;i++) {

if (strcmp(GetSequenceName(i),"STATE\0")==0) {

SelectSequence(i);

curSeq->Call(&v, NULL);

curSeq->Execute();

v.type = PYL_PARAM_NOT_DEFINED;

curSeq->Cancel(&v);

break;

}

}

}

else if (attachmentToParent != NULL) {

SetAttachmentParams(attachmentToParent,pos,dir,rot);

}

if (actualizeNotPylonChilds) {

int n = AttachmentCount(false);

VESSEL *v;

VECTOR3 _p,_d,_r;

for (int i=0;i<n;i++) {

ATTACHMENTHANDLE a = GetAttachmentHandle(false, i);

OBJHANDLE o = GetAttachmentStatus(a);

if (o!=NULL) {

v = oapiGetVesselInterface(o);

if (v==NULL) continue;

if (IsPylonVessel(v)!=NULL) continue;

if (f) {

VESSEL *r=this;

double cm = v->GetEmptyMass();

op = NULL;

while (op==NULL) { 

double rm = r->GetEmptyMass();

r->SetEmptyMass(rm + cm);

int j=0, m= r->AttachmentCount(true);

while (j<m && op==NULL) {

top = r->GetAttachmentHandle(true, j);

op = r->GetAttachmentStatus(top);

j=j+1;

}

if (op==NULL) break;

r = oapiGetVesselInterface(op);

if (r==NULL) break;

op=NULL;

}

}

op = NULL;

int j=0, np= v->AttachmentCount(true);

while (j<np && op==NULL) {

top = v->GetAttachmentHandle(true, j);

op = GetAttachmentStatus(top);

j=j+1;

}

if (op==NULL) continue;

v->GetAttachmentParams(top,_p,_d,_r);

v->SetAttachmentParams(top,_p,_d,_r);

}

}

}

if (sequences) sequences->Execute();

firstFrameAttached = false;

}


// ==============================================================

// Pylon API

// ==============================================================

// Returns the number of parameters that the pylon publishes.

// The number, name and type of parameters must be constant throughout the Orbiter session.

int CPylon::GetParameterCount(void)

{

return 0;

}

// Returns the name of a parameter. Different parameters should not have the same name.

// The parameter names should not contain spaces or the following symbols : " , . ( )

// and should not start with _underscore

// Parameters:

// index: The index of the parameter. if index is < 0 or >= GetParameterCount, the

// returned value should be NULL.

char *CPylon::GetParameterName(int index)

{

return NULL;

}

// Returns the type of a parameter:

// PYLON_PARAM_BOOL 

// PYLON_PARAM_INT 

// PYLON_PARAM_DOUBLE 

// PYLON_PARAM_STRING 

// PYLON_PARAM_NOTDEFINED 

// Parameters:

// index: The index of the parameter. if index is < 0 or >= GetParameterCount(),

// the returned value should be PYLON_PARAM_NOTDEFINED

int CPylon::GetParameterType(int index)

{

return PYL_PARAM_NOT_DEFINED;

}

// Returns if the parameter is a user parameter. A user parameter could be set

// manually by the pilot of the vessel. All other parameters are set only by API calls or

// sequences.

// Parameters:

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the returned value should be false.

bool CPylon::IsUserParameter(int index) {

return false;

}

// Returns the value of a boolean parameter. If the parameter is not of this type, 

// the return value is undefined.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the returned value is undefined.

bool CPylon::GetParamBol(int index)

{

return false;

}

// Returns the value of an integer parameter. If the parameter is not of this type, 

// the return value is undefined.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the returned value is undefined.

int CPylon::GetParamInt(int index)

{

return 0;

}

// Returns the value of a double parameter. If the parameter is not of this type, 

// the return value is undefined.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the returned value is undefined.

double CPylon::GetParamDbl(int index)

{

return 0;

}

// Returns the value of a string parameter (a NULL terminated string). If the parameter

// is not of type string, the returned value is undefined. The returned string should only

// be read, not written to.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the returned value is undefined.

char *CPylon::GetParamStr(int index) 

{

return NULL;

}

bool CPylon::SetParam(int index, TPylParamValue *value) {

int paramt = GetParameterType(index);

if (paramt < PYL_PARAM_INTEGER) {

return SetParamBol(index, value->bolValue);

}

else if (paramt < PYL_PARAM_SCALAR) 

return SetParamInt(index, value->intValue);

else if (paramt < PYL_PARAM_STRING) 

return SetParamDbl(index, value->dblValue);

else if (paramt < PYL_PARAM_NOT_DEFINED) 

return SetParamStr(index, value->strValue);

else return true;

}

// Sets the value of a boolean parameter. The action depends on the meaning of the para-

//meter.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the call should be ignored.

// value: The value

bool CPylon::SetParamBol(int index, bool value)

{

return true;

}

// Sets the value of an integer parameter. The action depends on the meaning of the para-

//meter.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the call should be ignored.

// value: The value

bool CPylon::SetParamInt(int index, int value)

{

return true;

}

// Sets the value of a double parameter. The action depends on the meaning of the para-

//meter.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the call should be ignored.

// value: The value

bool CPylon::SetParamDbl(int index, double value)

{

return true;

}

// Sets the value of a string parameter. The action depends on the meaning of the para-

//meter.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the call should be ignored.

// value: The value (a pointer to a NULL terminated string). The string should not be 

// modified by the call.

bool CPylon::SetParamStr(int index, char *string) 

{

return true;

}

// Increments a parameter. The behavior of this function depends on the meaning of the parameter.

// Parameters: 

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the call should be ignored.

bool CPylon::IncParam(int index)// Default behavior: does nothing

{

return true;

}

// Decrements a parameter. The behavior of this function depends on the meaning of the parameter.

// Parameters: 

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the call should be ignored.

bool CPylon::DecParam(int index)// Default behavior: does nothing

{

return true;

}

// Returns if the parameter has reached the value or state required by the last setParamx,

// IncParam() or DecParam() call. This depends on the meaning of the parameter.

// index: The index of the parameter. If index is < 0 or >= GetParameterCount(),

// the returned value is undefined.

bool CPylon::IsParameterSet(int index)

{

return true;

}

// ==============================================================

// Sequence management functions

// ==============================================================

void CPylon::SelectSequence(int i) 

{

//sprintf_s(oapiDebugString(),"selseq1: i=%d,icurseq=%d",i,icurSeq);

/*

todo quitar icurseq

if (i==icurSeq+1) { icurSeq++; curSeq = curSeq->nextSeq; }

else / *if (i!=icurSeq)probar sin el segundo else* / {*/

icurSeq = 0; curSeq = sequences;

while (i > 0 && icurSeq < numSeq) { curSeq = curSeq->nextSeq; i--; }

/* }

if (curSeq==NULL) {

sprintf_s(oapiDebugString(),"***********************************************************selseqERROR: i=%d,icurseq=%d",i,icurSeq);

curSeq=sequences;return;

}

*/

}

int CPylon::GetSequenceCount(void) {

return numSeq;

}

char *CPylon::GetSequenceName(int index) {

if (index<0 || index >= numSeq) return NULL;

SelectSequence(index);

return curSeq->name;

}

int CPylon::GetSequenceType(int index) 

{

if (index<0 || index >= numSeq) return PYL_PARAM_NOT_DEFINED;

SelectSequence(index);

return curSeq->value.type;

}

int CPylon::GetSequenceCancelType(int index) {

if (index<0 || index >= numSeq) return PYL_PARAM_NOT_DEFINED;

SelectSequence(index);

if (curSeq->nextCmd==NULL) return PYL_PARAM_NOT_DEFINED;

if (curSeq->nextCmd->cmdcode!=PYL_CMD_SET_CANCEL_SEQUENCE) return PYL_PARAM_NOT_DEFINED;

if (!curSeq->nextCmd->valid) return PYL_PARAM_NOT_DEFINED;

int cs = curSeq->nextCmd->value.tempIndex;

return GetSequenceType(cs);

}

bool CPylon::IsUserSequence(int index) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

return curSeq->userSequence;

}

void CPylon::SetUserSequence(int index, bool user) {

if (index<0 || index >= numSeq) return;

SelectSequence(index);

curSeq->userSequence = user;

}

int CPylon::CreateSequence(char *name, int type, int execmode) {

int i = GetSequenceByName(name);

if ( i != -1 ) {

//kk DeleteSequence(i);

}

PylonSequence *ns = new PylonSequence(true, this);

if(strcmp("STATE",name)==0) ns->activateByKey = false;

strcpy(ns->name, name);

if (execmode<0) execmode = 0; if (execmode >= SEQ_MODE_LAST) execmode = SEQ_MODE_LAST-1;

ns->mode = execmode;

ns->value.type = type;

if (numSeq>0) {

icurSeq = numSeq; curSeq = sequences;

while (curSeq->nextSeq) { curSeq = curSeq->nextSeq;}

curSeq->nextSeq = ns;

} else {

sequences = ns;

icurSeq = 0;

}

curSeq = ns;

icurSeq = numSeq++;

return icurSeq;

}

char *CPylon::AddSequenceCmd(int index, char *cmd) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

TPylParamValue val;

return curSeq->AddCmd(cmd, val);

}

bool CPylon::IsSequenceValid(int index) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

return curSeq->valid;

}

bool CPylon::ActivateSequence(int index) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

TPylParamValue val; val.type = PYL_PARAM_NOT_DEFINED;

return curSeq->Call(&val, NULL);

}

bool CPylon::ActivateSequenceValue(int index, TPylParamValue *value) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

return curSeq->Call(value, NULL);

}

bool CPylon::CancelSequence(int index) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

//sprintf_s(oapiDebugString(),"KANCEL7: valtype=%d, nextcmdcode=%s,cancelseq=%s",val->type,PylonCommands[nextCmd->cmdcode].name,value.tempRef?((PylonSequence*)nextCmd->value.tempRef)->name:"NOTEMPREF");

TPylParamValue val; val.type = PYL_PARAM_NOT_DEFINED;

return curSeq->Cancel(&val);

}

bool CPylon::CancelSequenceValue(int index, TPylParamValue *value) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

return curSeq->Cancel(value);

}

bool CPylon::IsSequenceActive(int index) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

return curSeq->activating;

}

bool CPylon::IsSequenceCancelling(int index) {

if (index<0 || index >= numSeq) return false;

SelectSequence(index);

return curSeq->cancelling;

}

int CPylon::GetSequenceByName(char *name)

{

int n = GetSequenceCount();

for (int i=0;i<n;i++)

{

SelectSequence(i);

if (strcmp(curSeq->name,name)==0) {

return i;

}

}

return -1;

}

// TODO: This method needs to be rewritten because it frees memory already freed by PylonSequence's destructor; this is

// what causes a crash when you save the scenario more than once. A quick & dirty workaround would be to simply comment out

// all the "delete" commands throughout the source code. However, it really needs to be fixed properly sooner or later.

void CPylon::DeleteSequence(int index)

{

//char f[900];

if (index<0 || index >= numSeq) return;

PylonSequence *prevSeq;

if (index==0) {

prevSeq = NULL;

} else {

SelectSequence(index-1);

prevSeq = curSeq;

}

SelectSequence(index);

PylonSequence *cmd = curSeq->nextCmd;

while (cmd != NULL) {

/* PylonSequence *val = cmd->nextSeq;

while ( val != NULL) {

if ( val->value.type==PYL_PARAM_GET_PARAMETER) {

delete val->name;

}

PylonSequence *oldVal= val;

val = val->nextCmd;

delete oldVal;

}*/

//sprintf_s(f,"%d,%d,%d",index,cmd,cmd->value.type);

//oapiWriteScenario_string(scnr,"*****2",f);

PylonSequence *old= cmd;

cmd = cmd->nextCmd;

delete old;

}

delete curSeq->name;

if ( prevSeq == NULL ) {

sequences = curSeq->nextSeq;

} else {

prevSeq->nextSeq = curSeq->nextSeq;

}

// delete curSeq;

icurSeq = 0;

curSeq = sequences;

numSeq--;

}

bool CPylon::ActivateSequenceByKey(DWORD key) {

bool b = false;

PylonSequence *seq = sequences;

int i = 0;

while (seq) {

// sprintf_s(oapiDebugString(),"-(B2)tecla %d, i=%d, act=%d,seqkey=%d",key,i,seq->activateByKey?1:0, seq->activationKey);

if (seq->activateByKey && seq->activationKey == key) {

ActivateSequence( i );

b = true;

}

seq = seq->nextSeq;

i++;

}

return b;

}

// ==============================================================

// Generic management functions

// ==============================================================

// Returns the parent of the vessel if it is connected to a parent, or NULL otherwise.

VESSEL *CPylon::GetParent(void) const {

return parent;

}

// Returns the root of the vessel if it is connected to a parent, or 'this' otherwise.

VESSEL *CPylon::GetRoot(void) const {

return root;

}

ATTACHMENTHANDLE CPylon::GetAttToParent(void) const {

return attachmentToParent;

}


bool CPylon::PylonAttach(OBJHANDLE parent, OBJHANDLE child, ATTACHMENTHANDLE parent_attachment, ATTACHMENTHANDLE child_attachment) {

VESSEL *p = oapiGetVesselInterface(parent),

*c = oapiGetVesselInterface(child);


if (p==NULL || c==NULL) return false;

CPylon *pp = IsPylonVessel(p), *pc = IsPylonVessel(c);

if (!p->AttachChild(child, parent_attachment, child_attachment)) return false;


if (pc!=NULL)

pc->PropagateChange(false, p);

else if (pp!=NULL)

pp->PropagateChange(false, pp->GetParent());


ATTACHMENTHANDLE top;

OBJHANDLE o = NULL;

VESSEL *r=p;

double cm = c->GetEmptyMass();

while (o==NULL) { 

double rm = r->GetEmptyMass();

r->SetEmptyMass(rm + cm);

int i=0, n= r->AttachmentCount(true);

while (i<n && o==NULL) {

top = r->GetAttachmentHandle(true, i);

o = r->GetAttachmentStatus(top);

i=i+1;

}

if (o==NULL) break;

r = oapiGetVesselInterface(o);

if (r==NULL) break;

o=NULL;

}

return true;

}

bool CPylon::PylonDetach(OBJHANDLE parent, OBJHANDLE child, ATTACHMENTHANDLE parent_attachment, double vel) {

if (parent==NULL || child==NULL) return false;

VESSEL *p = oapiGetVesselInterface(parent),

*c = oapiGetVesselInterface(child);

if (p==NULL || c==NULL) return false;

CPylon *pp = IsPylonVessel(p), *pc = IsPylonVessel(c);

/*if (pc!=NULL) {

if (pp==NULL) {

pc->PropagateChange(true, NULL);

}

}*/ 

if (pp!=NULL)

pp->PropagateChange(false, pp->GetParent());

if (pc!=NULL) {

pc->PropagateChange(true, NULL);

}


ATTACHMENTHANDLE top;

OBJHANDLE o = NULL;

VESSEL *r=p;

double cm = c->GetEmptyMass() + c->GetFuelMass();

while (o==NULL) {

double rm = r->GetEmptyMass();

if (rm > cm) r->SetEmptyMass(rm - cm);

int i=0, n= r->AttachmentCount(true);

while (i<n && o==NULL) {

top = r->GetAttachmentHandle(true, i);

o = r->GetAttachmentStatus(top);

i=i+1;

}

if (o==NULL) break;

r = oapiGetVesselInterface(o);

if (r==NULL) break;

o=NULL; 

}

bool done = p->DetachChild(parent_attachment, vel);

double invdt = oapiGetSimStep(),

cmass = c->GetMass() + c->GetFuelMass();

if (done && invdt > 0) {

VECTOR3 force, pos, tempv;

invdt = 1 / invdt;

CPylonRT *prt = (CPylonRT *)pc;

if (prt==NULL) prt = (CPylonRT *)pp;

if (prt!=NULL) {

if (prt->rotAxis != PYL_RT_NO_ROTATION || prt->releaseAngVel != 0.0) {


/* 

double par = cmass * ( prt->angVel + prt->releaseAngVel ) * invdt,

forcemod = 0.5 * par;

VECTOR3 pmi; c->GetPMI(pmi);

switch (prt->rotAxis) {

case PYL_RT_ROTATION_X:

forcemod *= pmi.x;

force = _V(0, 0, forcemod);

pos =_V(0, 1, 0);

break;

case PYL_RT_ROTATION_Y:

forcemod *= pmi.y;

force = _V(0, 0, forcemod);

pos =_V(1, 0, 0);

break;

case PYL_RT_NO_ROTATION :

case PYL_RT_ROTATION_Z:

forcemod *= pmi.z;

force = _V(0, forcemod, 0);

pos =_V(1, 0, 0);

break;

}

if (prt != c) {

VECTOR3 forceGlob, posGlob;

prt->GlobalRot(force, forceGlob);

prt->GlobalRot(pos, posGlob);

VECTOR3 oX, oY, oZ;

c->GlobalRot(_V(1,0,0), oX);

c->GlobalRot(_V(0,1,0), oY);

c->GlobalRot(_V(0,0,1), oZ);

force = _V( dotp( forceGlob, oX ),

dotp( forceGlob, oY ),

dotp( forceGlob, oZ ) );

pos = _V( dotp( posGlob, oX ),

dotp( posGlob, oY ),

dotp( posGlob, oZ ) );

}

c->AddForce(force, pos);

force.x = -force.x;

force.y = -force.y;

force.z = -force.z;

pos.x = -pos.x;

pos.y = -pos.y;

pos.z = -pos.z;

c->AddForce(force, pos);

*/

VESSELSTATUS2 status;

status.version = 2;

c->GetStatusEx(&status);

VECTOR3 localAngVel;

switch (prt->rotAxis) {

case PYL_RT_ROTATION_X: localAngVel = _V(prt->angVel,0,0); break;

case PYL_RT_ROTATION_Y: localAngVel = _V(0,prt->angVel,0); break;

case PYL_RT_NO_ROTATION:

case PYL_RT_ROTATION_Z: localAngVel = _V(0,0,-prt->angVel); break;

}

if (prt != c) {

VECTOR3 globalAngVel;

prt->GlobalRot( localAngVel, globalAngVel );


VECTOR3 oX, oY, oZ;

c->GlobalRot(_V(1,0,0), oX);

c->GlobalRot(_V(0,1,0), oY);

c->GlobalRot(_V(0,0,1), oZ);

localAngVel = _V( dotp( globalAngVel, oX ),

dotp( globalAngVel, oY ),

dotp( globalAngVel, oZ ) );

}

status.vrot = localAngVel;

c->DefSetStateEx(&status);

}

if (prt->hasTraslation) {

c->AddForce(prt->unitTrasl * (prt->linVel * invdt), _V(0,0,0));

}

}

if (vel!=0) {

if (pp!=NULL) {

r = pp->GetRoot();

} else {

o = NULL;

r = p;

while (o==NULL) {

int i=0, n= r->AttachmentCount(true);

while (i<n && o==NULL) {

top = r->GetAttachmentHandle(true, i);

o = r->GetAttachmentStatus(top);

i=i+1;

}

if (o==NULL) break;

r = oapiGetVesselInterface(o);

if (r==NULL) break;

o=NULL;

}

}

if (r != NULL) {

VECTOR3 dir;

p->GetAttachmentParams(parent_attachment, pos, dir, tempv);

if (p != r) {

dir+=pos; p->/*GlobalRot-1*/Local2Global(dir, tempv);

r->Global2Local(tempv, dir);

p->Local2Global(pos, tempv);

r->Global2Local(tempv, pos);

dir = dir - pos;

}

force = dir * ( -vel * cmass * invdt );

r->AddForce(force, pos);

}

}

}

return done;

}


CPylon * CPylon::IsPylonVessel(VESSEL *v) {

static char *s1 = "PYLON\0";

static char *s2 = "pylon\0";

if (v==NULL) return NULL;

char *n = v->GetClassName();

if (strlen(n)<5) return NULL;

for (int i=0;i<5;i++) {

if (n[i]!=s1[i] && n[i]!=s2[i]) return NULL;

}

return (CPylon *) v;

}



// This function is called when a call to PropagateChange() is done to notify that a change

// has ocurred in the pylon tree structure. In this function the childs should actualize

// its references to other components in the structure, or other work could be performed here.

//

// Attachment management should be done here to improve efficiency. In the Timestep,

// related vessels (CPylons or other) in the structure should be accesed from direct

// references that are actualized here, rather than searching them in every frame.

//

// Each class that overrides this function should make a call in the first line to her mother

// class Changed() function.

//

// The CPylon::Changed() function actualizes the sequences that have object references.

//

// When actualizing references to brother, cousin, uncles objects etc, and going up in the

// structure, the parent field of the CPylons should be used here instead of the api calls,

// wich could not show the final tree state. This also aplies to root and attachmentToParent.

//

// When 'navigating' down, use the api calls, but make sure that any child CPylon has his

// parent field equal to its actual parent. If not, that child is being detached.

//

// The references should be unlinked if that object/s are being detached. The references

// should not go through non-CPylon vessels in the down direction, but can in the up one, only

// one time: that is, the CPylons can communicate through the ship that owns those CPylon.

//

// The function IsConnected() can be used here to determine if a vessel is connected to this

// under those conditions.

//

void CPylon::Changed(void)

{

//sprintf_s(oapiDebugString(),"Changed[%s]: parent = %s, root = %s, atttop = %d",GetName(),parent->GetName(),root->GetName(), attachmentToParent);

// ActualizeSequences();

}

// The PropagateChange() function should be called before or after a change occurs in a CPylon

// tree structure (that is, any object, CPylon or not, is detached or attached to or from

// the structure containing CPylon objects).

//

// The Changed() functions of all the Pylon vessels so affected are called in a descent order

// down the tree, so they can actualize references to other pylons in the structure.

//

// When Detaching object A from B, a call should be made prior to B->DetachChild(). If A is

// a CPylon, call A->PropagateChange(true, B, NULL).

// 

// You must ensure first that A is a CPylon using the IsPylonVessel() static function. If it is not,

// then check B and call B->PropagateChanges(false, B->GetParent(), B->GetAttToParent())

// If neither is a CPylon, just call DetachChild().

//

// When attaching A to B, the call A->PropagateChanges(false, B, attP) must be made AFTER the

// call to B->AttachChild() (attP is the 'to parent' attachment in A) If A is not CPylon, make

// instead the call to B:

// B->PropagateChanges(false, B->GetParent(), B->GetAttToParent()) and if neither is, no call is needed.

//

// For convenience, the functions PylonAttachChild() and PylonDetachChild() could be used

// when attaching or detaching. They do all the checking and the call to this function.

//

// This method should not be overriden

void CPylon::PropagateChange(bool detaching, VESSEL *parent)

{

/*static kk=0;

if (kk++==0)

sprintf_s(oapiDebugString(),"(%s)propchange1: detaching=%d, parent=%s,thisparent=%s, kk=%d",

GetName(),detaching?1:0,

parent?parent->GetName():"null",

this->parent?this->parent->GetName():"null",

kk);

*/

if (detaching) {

if (this->parent==NULL) return;

RecursivePropagateChange(NULL, NULL);

}

if (parent==NULL) return;

VESSEL *r=parent;

CPylon *pr=IsPylonVessel(r);

while (pr!=NULL) {

if (pr->parent==NULL) break;

r = pr->parent;

pr = IsPylonVessel(r);

}

if (pr!=NULL) {

pr->RecursivePropagateChange(pr, NULL);

} else {

for (int i=0,n=r->AttachmentCount(false); i<n; i++) {

ATTACHMENTHANDLE a = r->GetAttachmentHandle(false, i);

OBJHANDLE o = GetAttachmentStatus(a);

if (o==NULL) continue;

CPylon *p = IsPylonVessel(oapiGetVesselInterface(o));

if (p!=NULL) {

p->RecursivePropagateChange(r, r);

break;

}

}

}

}

// This function tells if two vessels are connected. It's a costly function, use it only in

// the body of the virtual function Changed()

//

bool CPylon::IsConnected(VESSEL *v, VESSEL *root, VESSEL *parent) {

return true;

}

// ==============================================================

// End of Pylon API

// ==============================================================


// ==============================================================

// Internal functions

// ==============================================================

void CPylon::RecursivePropagateChange(VESSEL *root, VESSEL *parent) {

/*if (strcmp(GetName(),"c")==0) {

sprintf_s(oapiDebugString(),"RECPROPCHANE root=%s, thisroot=%s, parent=%s, thisparent=%s (%f)",

root?root->GetName():"noroot",

this->root?this->root->GetName():"nothisroot",

parent?parent->GetName():"noparent",

this->parent?this->parent->GetName():"nothisparent",

oapiGetSimTime());

}*/

if (this->root == NULL && root != NULL) firstFrameAttached = true;

this->root = root;

this->parent = parent;

if (parent) {

ATTACHMENTHANDLE att;

int i, n = AttachmentCount(true);

for (i=0;i<n;i++) {

att = GetAttachmentHandle(true, i);

if (GetAttachmentStatus(att)!=NULL) {attachmentToParent = att; i = n;}

}

}

Changed();

for (int i=0,n=AttachmentCount(false); i<n; i++) {

ATTACHMENTHANDLE a = GetAttachmentHandle(false, i);

OBJHANDLE o = GetAttachmentStatus(a);

if (o==NULL) continue;

CPylon *p = IsPylonVessel(oapiGetVesselInterface(o));

if (p!=NULL) {

p->RecursivePropagateChange(root, this);

} else {

}

}

}

//Called only in simulation init

void CPylon::ActualizeParent(void) {

ATTACHMENTHANDLE top;

OBJHANDLE o = NULL;

int i=0, n= AttachmentCount(true);

while (i<n && o==NULL) {

top = GetAttachmentHandle(true, i);

o = GetAttachmentStatus(top);

i=i+1;

}

if (o==NULL) return;

VESSEL *v = oapiGetVesselInterface(o);

CPylon *p = CPylon::IsPylonVessel(v);

if (p==NULL) { 

PropagateChange(false, v);

}

}

bool CPylon::IsFirstFrame() {

return firstFrame;

}

bool CPylon::IsFirstFrameAttached() {

return firstFrameAttached;

}
 
Last edited:
I have try but they refuse yelling that I need 3 word ??? that why I have made a new reply sorry I'm new to this forum.

---------- Post added at 07:50 PM ---------- Previous post was at 07:29 PM ----------

It's not the header - you've defined the method in the header. That's why the compiler doesn't complain. All that is good.

It's the cpp file where you haven't created a body for the bool CPylon::IsSequenceValid(int) method that's the problem.

Please put your code in code tags:
Code:
bool CPylon::IsSequenceValid(int inputInteger)
{
   // your code here
here it is
bool CPylon::IsSequenceValid(int index) {
	if (index<0 || index >= numSeq) return false;
	SelectSequence(index);
	return curSeq->valid;


   return true;
}
^^ You don't have one of these in your .cpp file.

Yes I have one of these bool I suspect that the int was not correct (I repeat its a oldy c++ 2003 coding)
so what do you think doctor watson ?
 
Last edited:
Just for clarification... instead of this:
Code:
bool CPylon::IsSequenceValid(int inputInteger)
{
   // your code here
   return true;
}
you have this in your cpp?
Code:
bool CPylon::IsSequenceValid(int inputInteger)
{
   // your code here
here it is
bool CPylon::IsSequenceValid(int index) {
    if (index<0 || index >= numSeq) return false;
    SelectSequence(index);
    return curSeq->valid;


   return true;
}
If so, you'd have to replace it with this:
Code:
bool CPylon::IsSequenceValid(int inputInteger)
{
    if (inputInteger<0 || inputInteger>= numSeq) return false;
    SelectSequence(inputInteger);
    return curSeq->valid;
}
regards,
Face
 
Back
Top