DotSceneOctree linux build problems

Problems building or running the engine, queries about how to use features etc.
Post Reply
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

DotSceneOctree linux build problems

Post by bana »

Okay with newest cvs (and reimpell's linux patch: here) under the make I am getting this:

Code: Select all

[bana@localhost dotsceneoctree]$ make
Making all in PlugIns
make[1]: Entering directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns'
Making all in DotSceneManager
make[2]: Entering directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns/DotSceneManager'
Making all in include
make[3]: Entering directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns/DotSceneManager/include'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns/DotSceneManager/include'
Making all in src
make[3]: Entering directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns/DotSceneManager/src'
if /bin/sh ../../../libtool --mode=compile --tag=CXX g++ -DPACKAGE_NAME=\"OGRE\" -DPACKAGE_TARNAME=\"ogre\" -DPACKAGE_VERSION=\"0.15.0\" -DPACKAGE_STRING=\"OGRE\ 0.15.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"OGRE\" -DVERSION=\"0.15.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1  -I. -I. -I../../../PlugIns/DotSceneManager/include   -DTIXML_USE_STL -DGCC_3_1 -DEXT_HASH -I/usr/local/include/OGRE   -g -O2 -MT Plugin_DotSceneManager_la-DotSceneManager.lo -MD -MP -MF ".deps/Plugin_DotSceneManager_la-DotSceneManager.Tpo" -c -o Plugin_DotSceneManager_la-DotSceneManager.lo `test -f 'DotSceneManager.cpp' || echo './'`DotSceneManager.cpp; \then mv -f ".deps/Plugin_DotSceneManager_la-DotSceneManager.Tpo" ".deps/Plugin_DotSceneManager_la-DotSceneManager.Plo"; else rm -f ".deps/Plugin_DotSceneManager_la-DotSceneManager.Tpo"; exit 1; fi
 g++ -DPACKAGE_NAME=\"OGRE\" -DPACKAGE_TARNAME=\"ogre\" -DPACKAGE_VERSION=\"0.15.0\" "-DPACKAGE_STRING=\"OGRE 0.15.0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"OGRE\" -DVERSION=\"0.15.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -I. -I. -I../../../PlugIns/DotSceneManager/include -DTIXML_USE_STL -DGCC_3_1 -DEXT_HASH -I/usr/local/include/OGRE -g -O2 -MT Plugin_DotSceneManager_la-DotSceneManager.lo -MD -MP -MF .deps/Plugin_DotSceneManager_la-DotSceneManager.Tpo -c DotSceneManager.cpp  -fPIC -DPIC -o .libs/Plugin_DotSceneManager_la-DotSceneManager.o
In file included from ../../../PlugIns/DotSceneManager/include/SceneOctree.h:11,
                 from ../../../PlugIns/DotSceneManager/include/SceneMain.h:5,
                 from ../../../PlugIns/DotSceneManager/include/DotSceneManager.h:22,
                 from DotSceneManager.cpp:18:
../../../PlugIns/DotSceneManager/include/SceneOctreeRenderable.h:78: error: conflicting return type specified for `virtual Ogre::Material* SceneOctreeRenderable::getMaterial() const'
/usr/local/include/OGRE/OgreRenderable.h:62: error:   overriding `virtual const Ogre::MaterialPtr& Ogre::Renderable::getMaterial() const'
In file included from ../../../PlugIns/DotSceneManager/include/SceneMain.h:5,
                 from ../../../PlugIns/DotSceneManager/include/DotSceneManager.h:22,
                 from DotSceneManager.cpp:18:
../../../PlugIns/DotSceneManager/include/SceneOctree.h:75: error: `DataChunk' does not name a type
In file included from DotSceneManager.cpp:18:
../../../PlugIns/DotSceneManager/include/DotSceneManager.h:87: error: `SDDataChunk' was not declared in this scope../../../PlugIns/DotSceneManager/include/DotSceneManager.h:87: error: template argument 1 is invalid
../../../PlugIns/DotSceneManager/include/DotSceneManager.h:87: error: template argument 2 is invalid
../../../PlugIns/DotSceneManager/include/DotSceneManager.h:87: error: ISO C++ forbids declaration of `refValueList' with no type
DotSceneManager.cpp:157: error: `SDDataChunk' was not declared in this scope
DotSceneManager.cpp:157: error: template argument 1 is invalid
DotSceneManager.cpp:157: error: template argument 2 is invalid
DotSceneManager.cpp:158: error: ISO C++ forbids declaration of `refValueList' with no type
DotSceneManager.cpp: In member function `bool Ogre::DotSceneManager::getOptionValues(const Ogre::String&, int&)':
DotSceneManager.cpp:159: error: no matching function for call to `Ogre::DotSceneManager::getOptionValues(const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int&)'
/usr/local/include/OGRE/OgreSceneManager.h:830: note: candidates are: virtual bool Ogre::SceneManager::getOptionValues(const Ogre::String&, Ogre::StringVector&)
DotSceneManager.cpp: In member function `bool Ogre::DotSceneManager::getOptionKeys(std::list<Ogre::String, std::allocator<Ogre::String> >&)':
DotSceneManager.cpp:164: error: no matching function for call to `Ogre::DotSceneManager::getOptionKeys(std::list<Ogre::String, std::allocator<Ogre::String> >&)'
/usr/local/include/OGRE/OgreSceneManager.h:838: note: candidates are: virtual bool Ogre::SceneManager::getOptionKeys(Ogre::StringVector&)
make[3]: *** [Plugin_DotSceneManager_la-DotSceneManager.lo] Error 1
make[3]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns/DotSceneManager/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns/DotSceneManager'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/PlugIns'
make: *** [all-recursive] Error 1
So I am guessing this is an Azathoth porting issue (with the MaterialPtr*). Am I missing a patch?
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
IFASS
Gnome
Posts: 387
Joined: Tue Jan 04, 2005 12:07 pm
Location: Netherlands

Post by IFASS »

tried a few days ago the same thing.. got also this errors. Somehow i guess this ogreaddon isn't compitable yet with the 1.0.0 release. Heard it could have to do with the change from DataChunk to DataStream.
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

See this post: http://www.ogre3d.org/phpBB2/viewtopic.php?t=7926

I have updated the plugin... Though, I havn't seen/or tried the makefiles..

Though, I would imagine the olny thing that's need to be changed in the makefiles is remove: SceneResource.h/.cpp, SceneResourceManager.h/.cpp

I just browsed anonymous web cvs... And indeed my changes are there. Though, i submitted a couple of small fixes today, having to do with the plugin being outta date with .scene format... And that may take a few hours to make it too anonymous cvs.
Last edited by pjcast on Tue Feb 15, 2005 1:47 am, edited 1 time in total.
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

That link goes towards the DotScene update, whereas I was referencing the dotsceneoctree. Are these projects interrelated more than just the .scene format? Do you have to compile one before the other?
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

Nope, that link is for the dot scene plugin update (though, I just edited it because it was chopped off a little) :?

I applied the makefile patch yesterday... It should be in anonymous cvs by now... It compiled fine for me in Fedora Core 2.

As far as the .scene format and plugin being interrealted... Not entirely, the .scene format has nothing to do with the plugin... However, the plugin uses the .scene format as it's source of data.
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

Ah okay, DotSceneFormat (the top directory makefile) does compile fine now, thanks!

DotSceneOctree is still having problems however, looks like its the example application: Okay copied over the Azathoth Example App and frame listener over the older ones

After copying that over, and make clean, make now shows me these scary errors: http://rafb.net/paste/results/3lSAzW30.html
A snippet (in case that nopaste expires after 24 hours) is here:

Code: Select all

../../../Samples/DotScene/include/Demo_DotScene.h:271: undefined reference to `TiXmlNode::FirstChildElement(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0xce8): In function `DotSceneApplication::ParseDotScene(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h:433: undefined reference to `TiXmlElement::Attribute(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0xd1f):/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h:433: undefined reference to `TiXmlElement::Attribute(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0xd56):/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h:433: undefined reference to `TiXmlElement::Attribute(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0xdaf): In function `DotSceneApplication::ParseDotScene(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
../../../Samples/DotScene/include/Demo_DotScene.h:283: undefined reference to `TiXmlNode::NextSiblingElement(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0xecb):../../../Samples/DotScene/include/Demo_DotScene.h:288: undefined reference to `TiXmlNode::NextSiblingElement(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0x126d):../../../Samples/DotScene/include/Demo_DotScene.h:188: undefined reference to `TiXmlElement::Attribute(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0x12b5): In function `DotSceneApplication::ParseDotScene(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h:433: undefined reference to `TiXmlElement::Attribute(char const*) const'
Demo_DotScene.o(.gnu.linkonce.t._ZN19DotSceneApplication13ParseDotSceneERKSsS1_+0x12de):/usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/basic_string.h:433: undefined reference to `TiXmlElement::Attribute(char const*) const'
collect2: ld returned 1 exit status
make[3]: *** [Demo_DotScene] Error 1
make[3]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/Samples/DotScene/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/Samples/DotScene'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/bana/prog/ogrenew/ogreaddons/dotsceneoctree/Samples'
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

I think you grabbed the cvs before the changes I made trickled down to anonymous cvs... Though, i just did an anonymous check out, and both the example application/framelistener are new (RC1 versions), and the makefile is updated... So, you can do an update, or make the following changes:

Makefile.am in DotScene demo include directory

Code: Select all

noinst_HEADERS = Demo_DotScene.h \
		ExampleApplication.h \
		ExampleFrameListener.h \
		$(top_srcdir)/PlugIns/DotSceneManager/include/tinystr.h \
		$(top_srcdir)/PlugIns/DotSceneManager/include/tinyxml.h
Makefile.am in DotScene demo src directory

Code: Select all

INCLUDES = -I$(top_srcdir)/Samples/DotScene/include -I$(top_srcdir)/PlugIns/DotSceneManager/include

noinst_PROGRAMS = Demo_DotScene

Demo_DotScene_SOURCES = Demo_DotScene.cpp \
		$(top_srcdir)/PlugIns/DotSceneManager/src/tinystr.cpp \
		$(top_srcdir)/PlugIns/DotSceneManager/src/tinyxml.cpp \
		$(top_srcdir)/PlugIns/DotSceneManager/src/tinyxmlerror.cpp \
		$(top_srcdir)/PlugIns/DotSceneManager/src/tinyxmlparser.cpp
This adds the tiny source/headers to the build to remove those pesky undefined/unresolved externals ;)
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

Oh, and if that wasn't updated, you'll probably also need to comment out the SetOctreeVisible line in the demo header file too.
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

Awesome, those makefile changes did it (must have missed anon cvs update by an hour or so).

Thanks so much, I hope I can put this to good use :)
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

Okay following the tutorial (I had to copy the ExampleSceneConverter from the src directory into the bin directory (wasn't in the tutorial)) I am trying to run the scene converter to no avail:

Code: Select all

[bana@localhost debug]$ ./ExampleSceneConverter MyScene.scene
OGRE Scene Converter Log
Creating resource group General
Registering ResourceManager for type Mesh
Registering ResourceManager for type Material
Registering ResourceManager for type Skeleton
ExampleSceneConverter: ../../OgreMain/include/OgreSingleton.h:59: Ogre::Singleton<T>::Singleton() [with T = Ogre::MeshManager]: Assertion `!ms_Singleton' failed.
Aborted
I made the changes to the .scene file (the meshfile to meshFile).
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

yeah, the tutorial is more windows centric... Linux stuff was thrown in later. The converter just build in the default location.. which is src.

While, I built it perfectly fine on linux. I never ran any run time tests there. i look into it tomorrow. Though, I don't see why the MeshManager wouldn't be instantiated (hence Singleton assert) when it works on windows. But, I look into this.
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

Ok, I just tested everything (converter & demo app)... And, they all work correctly for me using this scene file: - This is the demo scene file from the download in the tutorial w/ changes to bring it up to date... And, i removed the billboard node stuff cause I havn't tested that fully, and it was crashing on me.

Code: Select all

<scene formatVersion="">

    <nodes>

        <node name="StaticGeometry" id="0">

            <position x="0" y="0" z="0" />

            <scale x="1" y="1" z="1" />

            <entity name="TestLevel" meshFile="TestLevel.mesh" static="true" />

        </node>

        <node name="StaticOgreHead" id="1">

            <position x="100" y="30" z="50" />

            <scale x="1" y="1" z="1" />

            <entity name="StaticOgreHead" meshFile="ogrehead.mesh" static="true" />

        </node>

        <node name="OgreHead" id="2">

            <position x="100" y="100" z="50" />

            <scale x="1" y="1" z="1" />

            <entity name="OgreHead" meshFile="ogrehead.mesh" static="false" />

        </node>

        <node name="Robot" id="3">

            <position x="10.0" y="5" z="10.5" />

            <scale x="1" y="1" z="1" />

            <entity name="Robot" meshFile="robot.mesh" static="false" />

        </node>

        </node>

        <node name="Omni01" id="5">

            <position x="-23" y="49" z="18" />

            <rotation qx="0" qy="0" qz="0" qw="1" />

            <scale x="1" y="1" z="1" />

            <light name="Omni01" type="point" intensity="0.01" contrast="0">

                <colourDiffuse r="0.4" g="0.4" b="0.5" />

                <colourSpecular r="0.5" g="0.5" b="0.5" />

            </light>

        </node>

        <node name="Omni02" id="6">

            <position x="200" y="28" z="-14" />

            <rotation qx="0" qy="0" qz="0" qw="1" />

            <scale x="1" y="1" z="1" />

            <light name="Omni02" type="point" intensity="0.01" contrast="0">

                <colourDiffuse r="0.8" g="0.0" b="0.6" />

                <colourSpecular r="0.0" g="0.0" b="0.0" />

            </light>

        </node>

    </nodes>

</scene>
Let me know if this fixes your problem... Or else something else is wrong.
Last edited by pjcast on Fri Feb 18, 2005 3:46 am, edited 1 time in total.
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

Okay I decided to go ahead and check out again from CVS (since it was giving me the same thing but I didn't really trust it). And I have managed to get as far as copying everything over to the Ogre Samples directory but I cannot seem to go any farther as the only Plugin that was generated was: Plugin_DotSceneManager.la whereas in my /usr/local/lib/OGRE/ folder there seems to be a .la and .so (the .so being much bigger) whereas there is no .so library? I am getting this error because of it:

Code: Select all

-----------------------------------
Details:
-----------------------------------
Error #: 9
Function: DynLib::load
Description: Could not load dynamic library /usr/local/lib/OGRE/Plugin_DotSceneManager.so.  System Error: /usr/local/lib/OGRE/Plugin_DotSceneManager.so: cannot open shared object file: No such file or directory.
File: OgreDynLib.cpp
Line: 80
Stack unwinding: DynLib::load(..) <- <<beginning of stack>>
and simply renaming (or copy renaming) the .la file doesn't work as it complains about the ELF header.

I couldn't find any documentation on generating .so's from .la's except this: http://people.debian.org/~keybuk/libtoo ... ng_so.html and it didn't seem to help that much.

To get compiled and working I had to add:

Code: Select all

<scene formatVersion="0.1">
to replace the <scene> on the first line, I also had to comment out the SetOctreeVisible( 1 ); (as I saw later in the documentation :roll: )
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

yeah, formatVersion is a required element attribute, so I added it (i updated my post avoe to reflect that) recently.. Mainly to give people a heads up that there .scene file is out of spec.

I did not write the make files myself, so I cannot comment on why no so is made.. However, everything built, and ran fine for me...
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

So on your system you got a .so file and copied that into your /usr/local/lib/OGRE folder? (this was Fedora Core 2 IIRC right?).
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
User avatar
pjcast
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 2543
Joined: Fri Oct 24, 2003 2:53 am
Location: San Diego, Ca
x 2
Contact:

Post by pjcast »

I'm not on Linux right now, and I would reboot, but am currently occupied.. I'll check later, but I recall not seeing any .so's for the plugin, just the la's... But, I'll check later to be positive. And, I did no copying of any Plugin Files (as, the Plugin make files already install the files into /usr/local/lib/OGRE )
Have a question about Input? Video? WGE? Come on over... http://www.wreckedgames.com/forum/
User avatar
bana
Greenskin
Posts: 132
Joined: Mon Aug 02, 2004 7:40 am
Location: Austin, Texas
Contact:

Post by bana »

Ah I found the problem, I wasn't aware that I needed to do a make install (or that it would do anything over what I manually did) and this automagically installed the libraries and the .so
So it is working now :)

Just for grins, Here's a (scaled down by 2) screenshot at 2880x1200 resolution: Image

Thanks so much for the support PJCast your work here is beautiful :)
A proud member of the OpenFrag Coding Team.
http://coolhands.blogspot.com/
Post Reply