 |
|
|
|
| Author |
Message |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Sat Feb 23, 2008 3:36 am Post subject: Anyone know the source of this code? |
|
|
I was going through some old code, and I found an old module that I
wrote that contains a pretty large percentage of the winsock api
declares - as well as conversions for several winsock macro's, and a
few utility functions. One of the functions is VBStrFromAnsiPtr. I
don't believe I actually wrote this function, but I failed to credit
the original source in my comments - something I usually do. I did a
google on it, and I can find this code - word for word out there, but
I can't locate the original source. If anyone knows where it came
from, can you please let me know so I can give credit where credit is
due?
Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
Dim bStr() As Byte
Dim cChars As Long
' Get the number of characters in the buffer
cChars = lstrlen(lpStr)
' Resize the byte array
ReDim bStr(0 To cChars - 1) As Byte
' Grab the ANSI buffer
Call CopyMemory(bStr(0), ByVal lpStr, cChars)
' Now convert to a VB Unicode string
VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
End Function
Thanks...
--
Tom Shelton
Archived from group: microsoft>public>vb>general>discussion |
|
| Back to top |
|
 |
Ken Halter
Joined: 04 Oct 2007 Posts: 4150
|
Posted: Sat Feb 23, 2008 5:07 am Post subject: Re: Anyone know the source of this code? |
|
|
"Tom Shelton" wrote in message @o10g2000hsf.googlegroups.com...
>I was going through some old code, and I found an old module that I
> wrote that contains a pretty large percentage of the winsock api
> declares - as well as conversions for several winsock macro's, and a
> few utility functions. One of the functions is VBStrFromAnsiPtr. I
> don't believe I actually wrote this function, but I failed to credit
> the original source in my comments - something I usually do. I did a
> google on it, and I can find this code - word for word out there, but
> I can't locate the original source. If anyone knows where it came
> from, can you please let me know so I can give credit where credit is
> due?
>
Well... that exact code shows on the following pages, so at least it's from
the same "unknown soldier"
http://www.lazarusid.com/node/12
http://forum.madshi.net/viewtopic.php?p=15004&sid=86e5803915dfe138b53f367ade90ed9f
This seems like the most complete implementation and is hosted on a site vs
a forum (if that makes a difference )
http://files.codes-sources.com/fichier.aspx?id=20016&f=Bass.bas
--
Ken Halter - MS-MVP-VB - Please keep all discussions in the groups..
In Loving Memory - http://www.vbsight.com/Remembrance.htm |
|
| Back to top |
|
 |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Sat Feb 23, 2008 6:01 am Post subject: Re: Anyone know the source of this code? |
|
|
On Feb 23, 1:07 am, "Ken Halter"
wrote:
> "Tom Shelton" wrote in message
>
> @o10g2000hsf.googlegroups.com...
>
> >I was going through some old code, and I found an old module that I
> > wrote that contains a pretty large percentage of the winsock api
> > declares - as well as conversions for several winsock macro's, and a
> > few utility functions. One of the functions is VBStrFromAnsiPtr. I
> > don't believe I actually wrote this function, but I failed to credit
> > the original source in my comments - something I usually do. I did a
> > google on it, and I can find this code - word for word out there, but
> > I can't locate the original source. If anyone knows where it came
> > from, can you please let me know so I can give credit where credit is
> > due?
>
> Well... that exact code shows on the following pages, so at least it's from
> the same "unknown soldier" http://www.lazarusid.com/node/12http://forum..madshi.net/viewtopic.php?p=15004&sid=86e5803915dfe138b53...
>
> This seems like the most complete implementation and is hosted on a site vs
> a forum (if that makes a difference )http://files.codes-sources.com/fichier.aspx?id=20016&f=Bass.bas
>
> --
> Ken Halter - MS-MVP-VB - Please keep all discussions in the groups..
> In Loving Memory -http://www.vbsight.com/Remembrance.htm
Thanks... Those were the references I had already come accross. I
think they must have got it from the same source I did
--
Tom Shelton |
|
| Back to top |
|
 |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Sat Feb 23, 2008 6:04 am Post subject: Re: Anyone know the source of this code? |
|
|
On Feb 23, 1:07 am, "Ken Halter"
wrote:
> "Tom Shelton" wrote in message
>
> @o10g2000hsf.googlegroups.com...
>
> >I was going through some old code, and I found an old module that I
> > wrote that contains a pretty large percentage of the winsock api
> > declares - as well as conversions for several winsock macro's, and a
> > few utility functions. One of the functions is VBStrFromAnsiPtr. I
> > don't believe I actually wrote this function, but I failed to credit
> > the original source in my comments - something I usually do. I did a
> > google on it, and I can find this code - word for word out there, but
> > I can't locate the original source. If anyone knows where it came
> > from, can you please let me know so I can give credit where credit is
> > due?
>
> Well... that exact code shows on the following pages, so at least it's from
> the same "unknown soldier" http://www.lazarusid.com/node/12http://forum..madshi.net/viewtopic.php?p=15004&sid=86e5803915dfe138b53...
>
> This seems like the most complete implementation and is hosted on a site vs
> a forum (if that makes a difference )http://files.codes-sources.com/fichier.aspx?id=20016&f=Bass.bas
>
> --
> Ken Halter - MS-MVP-VB - Please keep all discussions in the groups..
> In Loving Memory -http://www.vbsight.com/Remembrance.htm
Hmmm... my file comments are 2001, so it predates all of them except
for maybe the last one. My suspicion is that maybe I have that
function in other code somewhere and I copied it into this module, and
didn't bring the source comment. I'll keep looking through my old
code...
--
Tom Shelton |
|
| Back to top |
|
 |
Desi
Joined: 04 Oct 2007 Posts: 49
|
Posted: Sat Feb 23, 2008 10:40 am Post subject: Re: Anyone know the source of this code? |
|
|
I thought that looked familiar. The following code is from my copy of
Win32 API Programming with Visual Basic by Steven Roman (copyright 2000)
It's in Chapter 6: Strings
Function LPSTRtoBSTR(ByVal lpsz As Long)
'Input: a valid LPSTR pointer lpsz
'Output: a sBSTR with the same character array
Dim cChars As Long
'Get number of characters in lpsz
cChars = lstrlenA(lpsz)
'Initialize string
LPSTRtoBSTR = String$(cChars, 0)
'Copy string
CopyMemory ByVal StrPtr(LPSTRtoBSTR), ByVal lpsz, cChars
'Convert to Unicode
LPSTRtoBSTR = Trim()(StrConv(LPSTRtoBSTR, vbUnicode))
End Function
That's as faithfull a copy as I could type out at 5:30AM. Obviously it's not
an
exact match but the same chapter has similar functions throughout. I did a
brief
search through the book's accompanying examples but could not find anything
related to strings. Maybe this will lead you in the right direction. Draw
your
own conclusions.
Desi
_________________________________
"Tom Shelton" wrote in message @o10g2000hsf.googlegroups.com...
>I was going through some old code, and I found an old module that I
> wrote that contains a pretty large percentage of the winsock api
> declares - as well as conversions for several winsock macro's, and a
> few utility functions. One of the functions is VBStrFromAnsiPtr. I
> don't believe I actually wrote this function, but I failed to credit
> the original source in my comments - something I usually do. I did a
> google on it, and I can find this code - word for word out there, but
> I can't locate the original source. If anyone knows where it came
> from, can you please let me know so I can give credit where credit is
> due?
>
> Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
> Dim bStr() As Byte
> Dim cChars As Long
>
> ' Get the number of characters in the buffer
> cChars = lstrlen(lpStr)
>
> ' Resize the byte array
> ReDim bStr(0 To cChars - 1) As Byte
>
> ' Grab the ANSI buffer
> Call CopyMemory(bStr(0), ByVal lpStr, cChars)
>
> ' Now convert to a VB Unicode string
> VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
>
> End Function
>
> Thanks...
>
> --
> Tom Shelton |
|
| Back to top |
|
 |
Desi
Joined: 04 Oct 2007 Posts: 49
|
Posted: Sat Feb 23, 2008 10:50 am Post subject: Re: Anyone know the source of this code? |
|
|
Yes, I goofed on the first line of code...
I typed:
Function LPSTRtoBSTR(ByVal lpsz As Long)
Should have typed:
Function LPSTRtoBSTR(ByVal lpsz As Long) As String
Desi
______________________________________
"Tom Shelton" wrote in message @o10g2000hsf.googlegroups.com...
>I was going through some old code, and I found an old module that I
> wrote that contains a pretty large percentage of the winsock api
> declares - as well as conversions for several winsock macro's, and a
> few utility functions. One of the functions is VBStrFromAnsiPtr. I
> don't believe I actually wrote this function, but I failed to credit
> the original source in my comments - something I usually do. I did a
> google on it, and I can find this code - word for word out there, but
> I can't locate the original source. If anyone knows where it came
> from, can you please let me know so I can give credit where credit is
> due?
>
> Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
> Dim bStr() As Byte
> Dim cChars As Long
>
> ' Get the number of characters in the buffer
> cChars = lstrlen(lpStr)
>
> ' Resize the byte array
> ReDim bStr(0 To cChars - 1) As Byte
>
> ' Grab the ANSI buffer
> Call CopyMemory(bStr(0), ByVal lpStr, cChars)
>
> ' Now convert to a VB Unicode string
> VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
>
> End Function
>
> Thanks...
>
> --
> Tom Shelton |
|
| Back to top |
|
 |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Sat Feb 23, 2008 12:14 pm Post subject: Re: Anyone know the source of this code? |
|
|
On Feb 23, 4:40 am, "Desi" wrote:
> I thought that looked familiar. The following code is from my copy of
> Win32 API Programming with Visual Basic by Steven Roman (copyright 2000)
> It's in Chapter 6: Strings
>
Hmmm... I'm not familiar with that book. But I found similar, yet
slightly more complicated version of the function in Bruce McKinney's
'Hardcore Visual Basic 5' - copy right back in 1997. His was general
that could handle both unicode and ansi strings (based on the version
of his win32 typelib you had loaded).
Thanks!
--
Tom Shelton |
|
| Back to top |
|
 |
Bob O`Bob
Joined: 04 Oct 2007 Posts: 1456
|
Posted: Sat Feb 23, 2008 1:13 pm Post subject: Re: Anyone know the source of this code? |
|
|
Tom Shelton wrote:
> I was going through some old code, and I found an old module that I
> wrote that contains a pretty large percentage of the winsock api
> declares - as well as conversions for several winsock macro's, and a
> few utility functions. One of the functions is VBStrFromAnsiPtr. I
> don't believe I actually wrote this function, but I failed to credit
> the original source in my comments - something I usually do. I did a
> google on it, and I can find this code - word for word out there, but
> I can't locate the original source. If anyone knows where it came
> from, can you please let me know so I can give credit where credit is
> due?
I found a newsgroup reference nearly seven years old...
Might it be that you didn't cite a source because YOU don't need to?
Bob
=======
From: "Tom Shelton"
References:
Subject: Re: Calling Visual C++ DLL Functions
Date: Thu, 24 May 2001 09:21:50 -0600
Lines: 139
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
Message-ID:
Newsgroups: microsoft.public.vb.general.discussion
NNTP-Posting-Host: 207.109.153.102
Path:
archiver1.google.com!newsfeed.google.com!sn-xit-03!supernews.com!logbridge.uoregon.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!tkmsftngp01!tkmsftngp07
Aris,
The problem is with your declare. I notice the function is returning a
char*, you can't return that as a string in VB. Your declare should be:
Private Declare Function GetAString lib "mylib.dll" (ByVal val As Long) As
Long
Then you will need to do a couple of tricks to get the value into a VB
string ( this is a utility function I wrote to do this):
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" _
(ByVal lpString As Long) As Long
Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
Dim bStr() As Byte
Dim cChars As Long
' Get the number of characters in the buffer
cChars = lstrlen(lpStr)
' Resize the byte array
ReDim bStr(0 To cChars) As Byte
' Grab the ANSI buffer
Call CopyMemory(bStr(0), ByVal lpStr, cChars)
' Now convert to a VB Unicode string
VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
End Function
Then to use your function you would do this
Dim pString As Long
Dim sString As String
pString = GetAString(4&)
If pString Then
sString = VBStrFromAnsiPtr(pString)
End If
Since you wrote the library, I think I would change the signiture to:
void GetAString(int a, char* buffer)
Then you could call it like this:
Dim s As String
s = String$(256, vbNullChar)
GetAString(4&, s)
s = Left$(s, InStr(1, s, vbNullChar) - 1)
That would change your declare to
Public Declare Sub GetAString Lib "mylib.dll" (ByVal A As Long, ByVal Buffer
As String)
HTH,
Tom Shelton
"Aris Basic" wrote in message@tkmsftngp03...
> As i mentioned in another reply i put __stdcall into the function
definition
> and imported the function through use of alias into VB but instead of
string
> that i expect to get
> i just get back an empty string
> (simple console aplication that uses same function returns right string)
> is there anything else i need to do so i can get result back ?
> and can you send me an example of .def file and how i tell to VC++ to use
> it.
>
> Thank You
>
> PS (Im new in Windows programing so im not familiar with "windows way" )
>
> "Tom Shelton" wrote in message
> $4AHA.1908@tkmsftngp03...
> > Aris,
> >
> > As was pointed out you will have to add __stdcall to your declaration.
VB
> > can only call __stdcall functions. One thing you will need to be aware
of
> > is that even with the extern "C", the compiler will perform name
> decoration
> > on the exported function names. This will mean you will need to use
> dumpbin
> > to get the actuall name of the function in the DLL and use an alias in
> your
> > VB declare. Of course you can avoid all of this by following the advise
> of
> > the documentation and use a .DEF file to export the function names.
This
> > will turn off name decoration completely. The reason it is suggested to
> use
> > the .DEF file is that in situations where you need to use the decorated
> name
> > to refer to the function (VB) your code may be broken if you update the
> DLL
> > with a newer compiler since name decoration schemes may be different.
> >
> > Tom Shelton
> >
> > "Aris Basic" wrote in message
> > @tkmsftngp07...
> > > Hi
> > > I created a simple DLL with VIsual C++ 6
> > > and the function declaration in dll is like this
> > > export "C" { // withot this it want even find the symbol in dll
> > > EXPORT char *GetAString(int val)
> > > }
> > >
> > > I declare function in visual basic with
> > > private declare function GetAString lib "mylib.dll" (ByVal val as
> > > Integer) As String
> > >
> > > but when i try to call it i get Bad DLL calling convention error
> > >
> > > what do i have to do to be able to use function (functions like that)
in
> > > Visual basic 6 ?
> > >
> > > Thank You
> >
> >
>
>
-- |
|
| Back to top |
|
 |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Sat Feb 23, 2008 1:43 pm Post subject: Re: Anyone know the source of this code? |
|
|
On Feb 23, 9:13 am, Bob O`Bob wrote:
> Tom Shelton wrote:
> > I was going through some old code, and I found an old module that I
> > wrote that contains a pretty large percentage of the winsock api
> > declares - as well as conversions for several winsock macro's, and a
> > few utility functions. One of the functions is VBStrFromAnsiPtr. I
> > don't believe I actually wrote this function, but I failed to credit
> > the original source in my comments - something I usually do. I did a
> > google on it, and I can find this code - word for word out there, but
> > I can't locate the original source. If anyone knows where it came
> > from, can you please let me know so I can give credit where credit is
> > due?
>
> I found a newsgroup reference nearly seven years old...
>
> Might it be that you didn't cite a source because YOU don't need to?
Thanks, Bob! I didn't think to check the newsgroups I still don't
remember writing that code - but, maybe I did, the module I found has
a date of June, 2001. So, just a short time after the reference (May
2001).
Looking at it - isn't there a subtle memory leak bug in it?
--
Tom Shelton |
|
| Back to top |
|
 |
Steve Gerrard
Joined: 04 Oct 2007 Posts: 1164
|
Posted: Sat Feb 23, 2008 1:58 pm Post subject: Re: Anyone know the source of this code? |
|
|
Tom Shelton wrote:
>
> Looking at it - isn't there a subtle memory leak bug in it?
I give up, what are you thinking?
It seems to me that whatever lpStr points to, it is not for this function to
deal with it; that the bStr() byte array is a local variable, so its memory will
be deallocated when the function ends; and that the return value is a new
String, to be used by the calling procedure. What else is there? |
|
| Back to top |
|
 |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Sat Feb 23, 2008 2:09 pm Post subject: Re: Anyone know the source of this code? |
|
|
On Feb 23, 9:58 am, "Steve Gerrard" wrote:
> Tom Shelton wrote:
>
> > Looking at it - isn't there a subtle memory leak bug in it?
>
> I give up, what are you thinking?
>
> It seems to me that whatever lpStr points to, it is not for this function to
> deal with it; that the bStr() byte array is a local variable, so its memory will
> be deallocated when the function ends; and that the return value is a new
> String, to be used by the calling procedure. What else is there?
Actually, I was thinking about what the pointer pointed to.. Shortly
after I posted this, I looked and realized that I was doing the
freeing in a separate function - because you don't always have to free
the buffer, it depends on the documentation of the call. I was just
about to post a nevermind
--
Tom Shelton |
|
| Back to top |
|
 |
Karl E. Peterson
Joined: 04 Oct 2007 Posts: 4836
|
Posted: Mon Feb 25, 2008 9:42 pm Post subject: Re: Anyone know the source of this code? |
|
|
Tom Shelton wrote:
> I can't locate the original source. If anyone knows where it came
> from, can you please let me know so I can give credit where credit is
> due?
>
> Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
> Dim bStr() As Byte
> Dim cChars As Long
>
> ' Get the number of characters in the buffer
> cChars = lstrlen(lpStr)
>
> ' Resize the byte array
> ReDim bStr(0 To cChars - 1) As Byte
>
> ' Grab the ANSI buffer
> Call CopyMemory(bStr(0), ByVal lpStr, cChars)
>
> ' Now convert to a VB Unicode string
> VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
>
> End Function
Variations on that go back ages. I believe the earliest one I published was last
updated in 1996, although it actually was for Unicode strings rather than ANSI. I
know an ANSI version ran in later columns, too, including Jan and Feb 2001.
Private Function PointerToStringW(lpStringW As Long) As String
Dim Buffer() As Byte
Dim nLen As Long
If lpStringW Then
nLen = lstrlenW(lpStringW) * 2
If nLen Then
ReDim Buffer(0 To (nLen - 1)) As Byte
CopyMem Buffer(0), ByVal lpStringW, nLen
PointerToStringW = Buffer
End If
End If
End Function
1997 VBPJ Enterprise Edition, Q&A column
http://vb.mvps.org/articles/code/qa1997eec.zip
I recall kicking this one around during the VB4 beta. It was sort of a group
project.
Later... Karl
--
..NET: It's About Trust!
http://vfred.mvps.org |
|
| Back to top |
|
 |
Tom Shelton
Joined: 04 Oct 2007 Posts: 74
|
Posted: Wed Feb 27, 2008 2:20 am Post subject: Re: Anyone know the source of this code? |
|
|
On Feb 25, 5:42 pm, "Karl E. Peterson" wrote:
> Tom Shelton wrote:
> > I can't locate the original source. If anyone knows where it came
> > from, can you please let me know so I can give credit where credit is
> > due?
>
> > Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
> > Dim bStr() As Byte
> > Dim cChars As Long
>
> > ' Get the number of characters in the buffer
> > cChars = lstrlen(lpStr)
>
> > ' Resize the byte array
> > ReDim bStr(0 To cChars - 1) As Byte
>
> > ' Grab the ANSI buffer
> > Call CopyMemory(bStr(0), ByVal lpStr, cChars)
>
> > ' Now convert to a VB Unicode string
> > VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
>
> > End Function
>
> Variations on that go back ages. I believe the earliest one I published was last
> updated in 1996, although it actually was for Unicode strings rather than ANSI. I
> know an ANSI version ran in later columns, too, including Jan and Feb 2001..
>
> Private Function PointerToStringW(lpStringW As Long) As String
> Dim Buffer() As Byte
> Dim nLen As Long
>
> If lpStringW Then
> nLen = lstrlenW(lpStringW) * 2
> If nLen Then
> ReDim Buffer(0 To (nLen - 1)) As Byte
> CopyMem Buffer(0), ByVal lpStringW, nLen
> PointerToStringW = Buffer
> End If
> End If
> End Function
>
> 1997 VBPJ Enterprise Edition, Q&A column
> http://vb.mvps.org/articles/code/qa1997eec.zip
>
> I recall kicking this one around during the VB4 beta. It was sort of a group
> project.
>
> Later... Karl
> --
> .NET: It's About Trust!
> http://vfred.mvps.org- Hide quoted text -
>
> - Show quoted text -
Thanks for your reply. I am quite certain that I wasn't the only one
to ever come up with this In fact, I'm certain that I probably
based this code on other examples, if I was indeed the author of this
particular snipit....
--
Tom Shelton |
|
| Back to top |
|
 |
Karl E. Peterson
Joined: 04 Oct 2007 Posts: 4836
|
Posted: Wed Feb 27, 2008 7:53 pm Post subject: Re: Anyone know the source of this code? |
|
|
Tom Shelton wrote:
> Thanks for your reply. I am quite certain that I wasn't the only one
> to ever come up with this In fact, I'm certain that I probably
> based this code on other examples, if I was indeed the author of this
> particular snipit....
Wish I could recall the name of the guy who first posted it to the VB4 beta forum on
CompuServe. (And that had to be the first, as the function names *and* the actual
datatype changed at that point!) It's been a keeper, all these years.
--
..NET: It's About Trust!
http://vfred.mvps.org
|
|
| Back to top |
|
 |
|
|
| Related Topics: | Can I send you the source code Dear all, I have a vb source code as follows. My function is to change the invoice store_status to 'outgoing' when It is added the outbound transaction. Sometimes the store_status is changed to outgoing but there is no record in outbound table. I doubt th
VB GUI source code for developing please see below web site. VB GUI source code for developing please see below web site. GUI Ver. 1.0 Is a very fancy pull down menu, toolbar multi tabbed GUI menu interface for any version of Visual Basic should run and compile from versions VB 1 to V6 (VB 1, VB2, VB3, VB4, VB5, V
How Can I Find My VB Source Code On My Computer? I just completed my first VB project and wanted to save all the source files on a CD, but I can't find them! I'm using VB version 4 and Windows XP. In C:\Program Visual Basic I find only a shortcut to the project file. I did a Windows s
Cannot step thru in COM objects source code I have vb6 COM objects. When I put a breakpoint on a line, run the vbp file, and then from the ASP page, browse to the page that calls that routine, it does not break into the object module. The version compatiblity is set to "Project I hav
VB6 source code quality analyzer Hello Have a look at my VB6 source code analyzer. The aim is to detect lacks of sens or mitakes like division by 0, overflow or underflow, unreachable if conditions and so on. A VB6 add-in lets you transmit source files, you'll get the answer back by emai |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|