Greetings, I am trying to scale the effort to port the Squeak VM to the Inferno OS http://inferno-os.org/ but have not yet had success building a minimal VM on Linux using Squeak 4.5 and instructions on http://www.mirandabanda.org/cogblog/build-image/ or http://www.mirandabanda.org/cogblog/compiling-the-vm/ using VMMaker. I have tried a couple of buildsqueak*.st scripts with Sq 4.5 but the generated code comes up with a black window or fails altogether. I know we are all busy (I include myself) but if anyone could help out with suggestions I would appreciate it. I am reluctant to spend more time on this until I can successfully generate and compile C sources and run an image from the gen'ed sources. Hints are fine. I have not used C, gdb, or Make this century, so am probably doing something not too bright. Thanks in advance, -KenD
-KenD
|
http://lists.squeakfoundation.org/pipermail/squeak-dev/2012-October/166038.html http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/porting-subfinal%202.pdf http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/greenberg.pdf Hi Ken, The first is a script that will compile a VM for you. I find this gives me a control experiment to work with, to create a compilation rig with. The second and third are articles from "Squeak: Open Personal Computing And Multimedia" about porting and plugins. The second article makes clear what objects are and how the VM grips them. I would say time in gdb and with make is proof things have gone off course. The 2012 script from above does all that for you. If you're porting, you wouldn't be in VMMaker much, but creating C files in the platforms directory for a standard VM. This is a C story, though. Lots of C. But from what you told me in Portland of you're programming background, it would be no great impediment to you. Final note, this compiles an Interpreter VM as opposed to a Cog VM, which is slower but more comprehensible. Exactly two people know how the Cog VM works in its entirety. Bus factor = 2. It is my opinion that unless you work for Cadence, there is no clear inside line to compiling 32-bit Cog. I've compiled 64-bit, but I'm not so sure that's a great idea at the moment. My point is, perhaps you want the older, simpler VM instead of the JIT'er, which is harder to compile. If you're going to attempt the port, perhaps you could start a blog? Ask them at planet.smalltalk.org to add it. Chris On 2015-09-24 1:43 AM, Ken.Dickey wrote: > > Greetings, > > I am trying to scale the effort to port the Squeak VM to the Inferno OS > http://inferno-os.org/ > but have not yet had success building a minimal VM on Linux using Squeak 4.5 and instructions on > http://www.mirandabanda.org/cogblog/build-image/ > or > http://www.mirandabanda.org/cogblog/compiling-the-vm/ > using VMMaker. > > I have tried a couple of buildsqueak*.st scripts with Sq 4.5 but the generated code comes up with a black window or fails altogether. > > I know we are all busy (I include myself) but if anyone could help out with suggestions I would appreciate it. > > I am reluctant to spend more time on this until I can successfully generate and compile C sources and run an image from the gen'ed sources. > > Hints are fine. I have not used C, gdb, or Make this century, so am probably doing something not too bright. > > Thanks in advance, > -KenD |
On Thu, 24 Sep 2015 17:47:59 -0400 Chris Cunnington <[hidden email]> wrote: > http://lists.squeakfoundation.org/pipermail/squeak-dev/2012-October/166038.html > http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/porting-subfinal%202.pdf > http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/greenberg.pdf Hi Chris. Thanks !!! > I would say time in gdb and with make is proof things have gone off > course. The 2012 script from above does all that for you. If you're > porting, you wouldn't be in VMMaker much, but creating C files in the > platforms directory for a standard VM. This is a C story, though. Lots > of C. But from what you told me in Portland of you're programming > background, it would be no great impediment to you. C/C++/gdb/make/.. evaporated from my brain a number of years ago. Real ugly stuff. I am too accustomed to dynamic languages with good IDEs. Inferno does NOT use C. It uses a programming language called 'Limbo' which, while still a 'device driver language', is much nicer than C. E.g. Limbo has garbage collection and threads built in. One possibility is getting VMMaker to spit out Limbo rather than C, hence my interest there. A more piece-wise approach might be to use a network socket and run the GUI/Presentation in Inferno and the VM as in a web browser. I am just starting to look at this. If I take this track I could get the UI part (screen drawing, mouse, keyboard) working as proof of concept learning before diving in to a full VM port. On the other hand, it might be just as easy to rewrite the GUI pieces directly in Limbo, run 'c2l' (the C to Limbo translator) and edit the half-baked results by hand. There is much work to do, not much spare time, and a number of approaches I could take. Hence my scoping/sizing explorations. > Final note, this compiles an Interpreter VM as opposed to a Cog VM, > which is slower but more comprehensible. No problem. Simpler is better. I have even considered going back to the original VMMaker with whatever Squeak it ran on to start simple. Interestingly, Inferno itself compiles to bytecode and runs interpreted or is JIT'ed to native. Nicer (simpler) to use than then Unix/Linux and runs hosted on Mac/Win/Linux/.. or native on various ARM/Intel/SPARC/PowerPC hardware (e.g. Nintendo/Android/Raspberry Pi). > .. If you're going to > attempt the port, perhaps you could start a blog? Ask them at > planet.smalltalk.org to add it. No commitment at this point. We all suffer from busy lives. First have to do some experimental 'probes'/prototypes to try/size things out. I do have instances of Inferno OS running and talking together on my ARM and Intel laptops. The idea of something simpler and more portable than most OSs (but unlike 'SqueakNoOS' has someone else doing the heavy lifting) appeals to me. Especially W.R.T. the Maker movement. I like things which have simpler uses and explanations. In particular, I like to "take the magic out" and "see to the bottom", or get as close as I can. My ideal would be to run Cuis on Inferno on commodity hardware and see where that leads. Far from mainstream, but a crystal/seed from which something nice could grow. Thanks again for the pointers, -KenD
-KenD
|
In reply to this post by Chris Cunnington-4
On Thu, 24 Sep 2015 17:47:59 -0400 Chris Cunnington <[hidden email]> wrote: > http://lists.squeakfoundation.org/pipermail/squeak-dev/2012-October/166038.html FYI: This script got close. The make died trying to build GStreamerPlugin.c reporting: error: ‘cbnewpad’ undeclared However, I just built vm-display-X11 and vm-sound-null and convinced the Squeak 4.5 image to run. Thanks again! -KenD
-KenD
|
In reply to this post by KenDickey
Chris is right Ken - get used to building the plain interpreter first so you feel you can trust the tools. It’s quicker to build, simpler to debug and easier to test. tim -- tim Rowledge; [hidden email]; http://www.rowledge.org/tim Useful random insult:- Not an idiot, but plays one in his life. |
In reply to this post by KenDickey
HI Ken, I recommend starting from the scan sources, http://www.squeakvm.org/svn/squeak/branches/Cog, and adding a build directory and a sub directory of platforms for your platform. Generating sources just makes things more complicated. The generated source tree contains stack interpreter and cog VM sources for v3 and spur so there's everything you need for an initial stack interpreter port. What processors does inferno run on? _,,,^..^,,,_ (phone) On Sep 23, 2015, at 10:43 PM, Ken.Dickey <[hidden email]> wrote: Greetings, I am trying to scale the effort to port the Squeak VM to the Inferno OS http://inferno-os.org/ but have not yet had success building a minimal VM on Linux using Squeak 4.5 and instructions on http://www.mirandabanda.org/cogblog/build-image/ or http://www.mirandabanda.org/cogblog/compiling-the-vm/ using VMMaker. I have tried a couple of buildsqueak*.st scripts with Sq 4.5 but the generated code comes up with a black window or fails altogether. I know we are all busy (I include myself) but if anyone could help out with suggestions I would appreciate it. I am reluctant to spend more time on this until I can successfully generate and compile C sources and run an image from the gen'ed sources. Hints are fine. I have not used C, gdb, or Make this century, so am probably doing something not too bright. Thanks in advance, -KenD |
In reply to this post by KenDickey
On 2015-09-24 3:59 AM, Ken.Dickey wrote: > On Thu, 24 Sep 2015 17:47:59 -0400 > Chris Cunnington <[hidden email]> wrote: > >> http://lists.squeakfoundation.org/pipermail/squeak-dev/2012-October/166038.html >> http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/porting-subfinal%202.pdf >> http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/greenberg.pdf > Hi Chris. Thanks !!! > >> I would say time in gdb and with make is proof things have gone off >> course. The 2012 script from above does all that for you. If you're >> porting, you wouldn't be in VMMaker much, but creating C files in the >> platforms directory for a standard VM. This is a C story, though. Lots >> of C. But from what you told me in Portland of you're programming >> background, it would be no great impediment to you. > C/C++/gdb/make/.. evaporated from my brain a number of years ago. Real ugly stuff. I am too accustomed to dynamic languages with good IDEs. > > Inferno does NOT use C. It uses a programming language called 'Limbo' which, while still a 'device driver language', is much nicer than C. E.g. Limbo has garbage collection and threads built in. > > One possibility is getting VMMaker to spit out Limbo rather than C, hence my interest there. to do that, I believe. That might be a good example of how to use VMMaker for Limbo. > A more piece-wise approach might be to use a network socket and run the GUI/Presentation in Inferno and the VM as in a web browser. I am just starting to look at this. If I take this track I could get the UI part (screen drawing, mouse, keyboard) working as proof of concept learning before diving in to a full VM port. > > On the other hand, it might be just as easy to rewrite the GUI pieces directly in Limbo, run 'c2l' (the C to Limbo translator) and edit the half-baked results by hand. c2l that's interesting. > > There is much work to do, not much spare time, and a number of approaches I could take. Hence my scoping/sizing explorations. > >> Final note, this compiles an Interpreter VM as opposed to a Cog VM, >> which is slower but more comprehensible. > No problem. Simpler is better. > > I have even considered going back to the original VMMaker with whatever Squeak it ran on to start simple. > > Interestingly, Inferno itself compiles to bytecode and runs interpreted or is JIT'ed to native. Nicer (simpler) to use than then Unix/Linux and runs hosted on Mac/Win/Linux/.. or native on various ARM/Intel/SPARC/PowerPC hardware (e.g. Nintendo/Android/Raspberry Pi). > >> .. If you're going to >> attempt the port, perhaps you could start a blog? Ask them at >> planet.smalltalk.org to add it. > No commitment at this point. We all suffer from busy lives. First have to do some experimental 'probes'/prototypes to try/size things out. > > I do have instances of Inferno OS running and talking together on my ARM and Intel laptops. The idea of something simpler and more portable than most OSs (but unlike 'SqueakNoOS' has someone else doing the heavy lifting) appeals to me. Especially W.R.T. the Maker movement. > > I like things which have simpler uses and explanations. In particular, I like to "take the magic out" and "see to the bottom", or get as close as I can. > > My ideal would be to run Cuis on Inferno on commodity hardware and see where that leads. Far from mainstream, but a crystal/seed from which something nice could grow. Cuis runs on an Interpreter VM. And you want to write a different VM. OK. I certainly would like to hear more about this in one capacity or another. Chris > > Thanks again for the pointers, > -KenD |
On Sat, 26 Sep 2015 10:25:09 -0400 Chris Cunnington <[hidden email]> wrote: > Cuis runs on an Interpreter VM. And you want to write a different VM. > OK. I certainly would like to hear more about this in one capacity or > another. Cuis is running on the Cog StackInterpreter VM (NOT Spur yet) on both Intel and ARM CPUs. Baby steps.. -KenD
-KenD
|
In reply to this post by KenDickey
On Thu, Sep 24, 2015 at 03:59:16PM +0800, Ken.Dickey wrote: > > On Thu, 24 Sep 2015 17:47:59 -0400 > Chris Cunnington <[hidden email]> wrote: > > > http://lists.squeakfoundation.org/pipermail/squeak-dev/2012-October/166038.html > > http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/porting-subfinal%202.pdf > > http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/greenberg.pdf > > Hi Chris. Thanks !!! > > > I would say time in gdb and with make is proof things have gone off > > course. The 2012 script from above does all that for you. If you're > > porting, you wouldn't be in VMMaker much, but creating C files in the > > platforms directory for a standard VM. This is a C story, though. Lots > > of C. But from what you told me in Portland of you're programming > > background, it would be no great impediment to you. > > C/C++/gdb/make/.. evaporated from my brain a number of years ago. Real ugly stuff. I am too accustomed to dynamic languages with good IDEs. > > Inferno does NOT use C. It uses a programming language called 'Limbo' which, while still a 'device driver language', is much nicer than C. E.g. Limbo has garbage collection and threads built in. > > One possibility is getting VMMaker to spit out Limbo rather than C, hence my interest there. > > A more piece-wise approach might be to use a network socket and run the GUI/Presentation in Inferno and the VM as in a web browser. I am just starting to look at this. If I take this track I could get the UI part (screen drawing, mouse, keyboard) working as proof of concept learning before diving in to a full VM port. > > On the other hand, it might be just as easy to rewrite the GUI pieces directly in Limbo, run 'c2l' (the C to Limbo translator) and edit the half-baked results by hand. > > There is much work to do, not much spare time, and a number of approaches I could take. Hence my scoping/sizing explorations. > > > Final note, this compiles an Interpreter VM as opposed to a Cog VM, > > which is slower but more comprehensible. > > No problem. Simpler is better. > > I have even considered going back to the original VMMaker with whatever Squeak it ran on to start simple. > Hi Ken, If you want to start simple with an interpreter VM, and if you have a Linux system to work with, here is how to do it: http://lists.squeakfoundation.org/pipermail/vm-dev/2015-April/018259.html Once you have that working (should take about 10 minutes), try loading VMMaker and generating a minimal set of sources. Evaluate "VMMakerTool minimal" and use that to generate a set of sources with just the minimum set of plugins needed to run. That will give you a slow but working VM that can talk to files and networking. If you don't care about networking, you can remove SocketPlugin from the configuration and you will still have a working VM. HTH, Dave > Interestingly, Inferno itself compiles to bytecode and runs interpreted or is JIT'ed to native. Nicer (simpler) to use than then Unix/Linux and runs hosted on Mac/Win/Linux/.. or native on various ARM/Intel/SPARC/PowerPC hardware (e.g. Nintendo/Android/Raspberry Pi). > > > .. If you're going to > > attempt the port, perhaps you could start a blog? Ask them at > > planet.smalltalk.org to add it. > > No commitment at this point. We all suffer from busy lives. First have to do some experimental 'probes'/prototypes to try/size things out. > > I do have instances of Inferno OS running and talking together on my ARM and Intel laptops. The idea of something simpler and more portable than most OSs (but unlike 'SqueakNoOS' has someone else doing the heavy lifting) appeals to me. Especially W.R.T. the Maker movement. > > I like things which have simpler uses and explanations. In particular, I like to "take the magic out" and "see to the bottom", or get as close as I can. > > My ideal would be to run Cuis on Inferno on commodity hardware and see where that leads. Far from mainstream, but a crystal/seed from which something nice could grow. > > Thanks again for the pointers, > -KenD |
On Sat, 26 Sep 2015 14:41:47 -0400 "David T. Lewis" <[hidden email]> wrote: > If you want to start simple with an interpreter VM, and if you have a Linux > system to work with, here is how to do it: > > http://lists.squeakfoundation.org/pipermail/vm-dev/2015-April/018259.html > > Once you have that working (should take about 10 minutes), try loading VMMaker > and generating a minimal set of sources. Evaluate "VMMakerTool minimal" and > use that to generate a set of sources with just the minimum set of plugins > needed to run. That will give you a slow but working VM that can talk to > files and networking. If you don't care about networking, you can remove > SocketPlugin from the configuration and you will still have a working VM. Many thanks!! 32 bit build workes fine. Now back to writing Limbo code, -KenD
-KenD
|
In reply to this post by David T. Lewis
David, BTW, the build64 breaks near the end (make output attached). I don't need it. Just FYI. Thanks again! -KenD make.out.bug.txt (2K) Download Attachment
-KenD
|
In reply to this post by KenDickey
On Sat, Sep 26, 2015 at 12:58 AM, Ken.Dickey <[hidden email]> wrote:
And I believe it runs on the Cog JIT VMs too.
_,,,^..^,,,_ best, Eliot |
In reply to this post by David T. Lewis
On 2015-09-26 2:41 PM, David T. Lewis wrote: > > On Thu, Sep 24, 2015 at 03:59:16PM +0800, Ken.Dickey wrote: >> >> On Thu, 24 Sep 2015 17:47:59 -0400 >> Chris Cunnington <[hidden email]> wrote: >> >>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2012-October/166038.html >>> http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/porting-subfinal%202.pdf >>> http://sdmeta.gforge.inria.fr/FreeBooks/CollectiveNBlueBook/greenberg.pdf >> Hi Chris. Thanks !!! >> >>> I would say time in gdb and with make is proof things have gone off >>> course. The 2012 script from above does all that for you. If you're >>> porting, you wouldn't be in VMMaker much, but creating C files in the >>> platforms directory for a standard VM. This is a C story, though. Lots >>> of C. But from what you told me in Portland of you're programming >>> background, it would be no great impediment to you. >> C/C++/gdb/make/.. evaporated from my brain a number of years ago. Real ugly stuff. I am too accustomed to dynamic languages with good IDEs. >> >> Inferno does NOT use C. It uses a programming language called 'Limbo' which, while still a 'device driver language', is much nicer than C. E.g. Limbo has garbage collection and threads built in. >> >> One possibility is getting VMMaker to spit out Limbo rather than C, hence my interest there. >> >> A more piece-wise approach might be to use a network socket and run the GUI/Presentation in Inferno and the VM as in a web browser. I am just starting to look at this. If I take this track I could get the UI part (screen drawing, mouse, keyboard) working as proof of concept learning before diving in to a full VM port. >> >> On the other hand, it might be just as easy to rewrite the GUI pieces directly in Limbo, run 'c2l' (the C to Limbo translator) and edit the half-baked results by hand. >> >> There is much work to do, not much spare time, and a number of approaches I could take. Hence my scoping/sizing explorations. >> >>> Final note, this compiles an Interpreter VM as opposed to a Cog VM, >>> which is slower but more comprehensible. >> No problem. Simpler is better. >> >> I have even considered going back to the original VMMaker with whatever Squeak it ran on to start simple. >> > Hi Ken, > > If you want to start simple with an interpreter VM, and if you have a Linux > system to work with, here is how to do it: > > http://lists.squeakfoundation.org/pipermail/vm-dev/2015-April/018259.html > > Once you have that working (should take about 10 minutes), try loading VMMaker > and generating a minimal set of sources. Evaluate "VMMakerTool minimal" and > use that to generate a set of sources with just the minimum set of plugins > needed to run. That will give you a slow but working VM that can talk to > files and networking. If you don't care about networking, you can remove > SocketPlugin from the configuration and you will still have a working VM. > > HTH, > > Dave VM using an installed script that looks at the image to decide which VM to employ. Chris >> Interestingly, Inferno itself compiles to bytecode and runs interpreted or is JIT'ed to native. Nicer (simpler) to use than then Unix/Linux and runs hosted on Mac/Win/Linux/.. or native on various ARM/Intel/SPARC/PowerPC hardware (e.g. Nintendo/Android/Raspberry Pi). >> >>> .. If you're going to >>> attempt the port, perhaps you could start a blog? Ask them at >>> planet.smalltalk.org to add it. >> No commitment at this point. We all suffer from busy lives. First have to do some experimental 'probes'/prototypes to try/size things out. >> >> I do have instances of Inferno OS running and talking together on my ARM and Intel laptops. The idea of something simpler and more portable than most OSs (but unlike 'SqueakNoOS' has someone else doing the heavy lifting) appeals to me. Especially W.R.T. the Maker movement. >> >> I like things which have simpler uses and explanations. In particular, I like to "take the magic out" and "see to the bottom", or get as close as I can. >> >> My ideal would be to run Cuis on Inferno on commodity hardware and see where that leads. Far from mainstream, but a crystal/seed from which something nice could grow. >> >> Thanks again for the pointers, >> -KenD |
In reply to this post by KenDickey
Ken, you do realise that you can never actually finish writing limbo code, right? tim -- tim Rowledge; [hidden email]; http://www.rowledge.org/tim Oxymorons: Resident alien |
In reply to this post by KenDickey
On Sat, Sep 26, 2015 at 08:09:21PM +0800, Ken.Dickey wrote: > > David, > > BTW, the build64 breaks near the end (make output attached). > > I don't need it. Just FYI. Thanks Ken, I added a Mantis report http://bugs.squeak.org/view.php?id=7835 as a reminder to fix it. FYI, you can force a plugin or vm module to be excluded from the build in order to work around this kind of problem by adding a parameter like this to the configure command line: --without-vm-sound-NAS If you are using the Makefile to drive the configure and build, then you can add it there. Dave > > Thanks again! > -KenD > make[3]: Entering directory `/mnt/sda10/SqueakVM/LinuxBuild/build/build64' > [100%] Building C object vm-sound-NAS/CMakeFiles/vm-sound-NAS.dir/mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c.o > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:128:14: error: conflicting types for ???sound_Stop??? > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:50:12: note: previous declaration of ???sound_Stop??? was here > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: initialization from incompatible pointer type [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: (near initialization for ???sound_NAS_itf.snd_SetRecordLevel???) [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: initialization from incompatible pointer type [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: (near initialization for ???sound_NAS_itf.snd_GetSwitch???) [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: initialization from incompatible pointer type [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: (near initialization for ???sound_NAS_itf.snd_SetSwitch???) [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: initialization from incompatible pointer type [enabled by default] > /mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c:598:1: warning: (near initialization for ???sound_NAS_itf.snd_SetDevice???) [enabled by default] > make[3]: *** [vm-sound-NAS/CMakeFiles/vm-sound-NAS.dir/mnt/sda10/SqueakVM/LinuxBuild/platforms/unix/vm-sound-NAS/sqUnixSoundNAS.c.o] Error 1 > make[3]: Leaving directory `/mnt/sda10/SqueakVM/LinuxBuild/build/build64' > make[2]: *** [vm-sound-NAS/CMakeFiles/vm-sound-NAS.dir/all] Error 2 > make[2]: Leaving directory `/mnt/sda10/SqueakVM/LinuxBuild/build/build64' > make[1]: *** [all] Error 2 > make[1]: Leaving directory `/mnt/sda10/SqueakVM/LinuxBuild/build/build64' > make: *** [build64/squeakvm64] Error 2 > kend# |
In reply to this post by timrowledge
On Sun, 27 Sep 2015 09:19:06 -0700 tim Rowledge <[hidden email]> wrote: > Ken, you do realise that you can never actually finish writing limbo code, right? Picture me ever in limbo, cursing the infernal machine. ;^) -- -KenD
-KenD
|
Free forum by Nabble | Edit this page |