Storgae durations

J

jacob navia

Andrew said:
He accepted his error, but pointed out that reliance on C99 restricts
portability compared with C89, since it is not implemented on nearly
as many platforms. This is a statement of fact, not a "campaign
against standard C".

Talk about word games.


How is this obvious? If he said OS390, he meant OS390. Its
obsolescence does not change what its name refers to.


Maybe OS390?


And yes, I snipped a lot.

Even if I accept that he was speaking about ONLY OS390
HE IS STILL WRONG since the z/OS XL C/C++ runs in OS390 and
fully supports C99.

So he was lying again. Please look in:
http://www-306.ibm.com/software/awdtools/c390/
There in that page you will find that OS/390 C/C++
is no longer sold. AND

<quote>
No longer in marketing - current replacement product is z/OS XL C/C++
<end quote>

This means that the current compiler for OS390 fully supports
C99.

How many times do I have to prove Heathfield wrong?
 
J

jacob navia

Before what? Before you stop acting like a lunatic?

Your answer is typical mr. If I prove heathfield wrong
I am a lunatic OF COURSE!

Your logic is as clear as heathfield's.
 
A

Andrew Poelstra

Even if I accept that he was speaking about ONLY OS390
HE IS STILL WRONG since the z/OS XL C/C++ runs in OS390 and
fully supports C99.

So he was lying again. Please look in:
http://www-306.ibm.com/software/awdtools/c390/
There in that page you will find that OS/390 C/C++
is no longer sold. AND

It says nothing about C99 on that page. It does however,
mention C89 and C90 a few times.
<quote>
No longer in marketing - current replacement product is z/OS XL C/C++
<end quote>

Okay, but the compiler for z/OS does not run on OS390.
This means that the current compiler for OS390 fully supports
C99.

No, it doesn't.
 
I

Ian Collins

jacob said:
Your answer is typical mr. If I prove heathfield wrong
I am a lunatic OF COURSE!
The proof is irrelevant, it's the incessant ranting that puts people's
backs up.
 
B

Ben Bacarisse

Antoninus Twink said:
Why are you thanking someone for providing documentary proof that you
lied to try to get one over on Jacob?

What is the statement that is in dispute here? Jacob's post pointed
to a document that seems to be about IBM's XL compilers for AIX and
Linux systems. I have not seen anyone dispute the availability of C99
for such systems.
 
K

Keith Thompson

jacob navia said:
OK. I assumed that he was speaking of the z/VM system, as OS390
is called today.

But even if we take it at face value, the compiler for OS390
is z/OS XL C/C++, that supports C99, so he was telling a
misleading statement when he said that C99 is NOT available for OS390.

In the article with Message-ID
<[email protected]>, available
at<http://groups.google.com/group/comp.lang.c/msg/d070c346d8105ca8>,
he DID NOT SAY that C99 is not available for OS390.

Read the article again, and pay attention this time. Believe it or
not, I don't enjoy seeing you make a fool of yourself like this.

[snip]
You see how far you go with your "facts" ?

Just LIES.

Are you calling me a liar as well? If so, please quote one statement
I've made that is a lie (i.e., a deliberate falsehood).
Even if I would accept he was talking about OS390 is is WRONG
ANYWAY (and you with him of course)

You seem to think that this is about the distinction between OS390 and
z/OS. It isn't.
Yes, and the "fact" that OS390 has no C99 is a LIE since
there is a compiler for OS390 that supports C99.

He never said otherwise.
And I have presented all necessary facts to prove I am not!

One more time, you called Richard Heathfield a liar for a statement
that he never made.
Yes. Each time you speak about a significant platform
WITHOUT C99 I prove you wrong!

Wrong about what? I am not "waging a war against standard C".
 
J

James Kuyper

jacob said:
You said that there was no C99 for S390.

Could you give me a citation for that, please? I can't find any such
comment from Richard Heathfield, so I'm probably looking in the wrong
place. The only previous comment I could find from him mentioning S390
is the following (and it mentions OS390, not S390):

Richard said:
> (e-mail address removed) said: ....
>
> I think the OS390 and VM/CMS folks might cough and splutter a bit if they
> heard you say that

You obviously can't be referring to that message, because it is only a
a comment about how the mainframe people might consider that definition
of "portable" to be absurdly restricted. They would be right, of course
- a definition of "portable" that excludes the most of the machines for
which C code is written nowadays is pretty ridiculous.

So, where was it that Richard Heathfield claimed that C99 was not
available on S390?
 
B

Ben Bacarisse

James Kuyper said:
Could you give me a citation for that, please? I can't find any such
comment from Richard Heathfield, so I'm probably looking in the wrong
place. The only previous comment I could find from him mentioning S390
is the following (and it mentions OS390, not S390):



You obviously can't be referring to that message, because it is only a
a comment about how the mainframe people might consider that
definition of "portable" to be absurdly restricted. They would be
right, of course - a definition of "portable" that excludes the most
of the machines for which C code is written nowadays is pretty
ridiculous.

I am used to some pretty adroit verbal gymnastics in c.l.c but is that
really how you read that remark? In an exchange about C99
portability, after a list of some systems that were claimed (rightly
or wrongly) to have C99 support a reference to OS/390 was made just to
make a remark about other, more general, portability issues?

If that was the intent (and I trust Richard Heathfield will tell us the
intent) then it was a first-class trap into which Jacob fell. As I've
said before, I don't like the term, but I might just have to call it a
first-class troll.
 
B

Ben Bacarisse

Keith Thompson said:
In the article with Message-ID
<[email protected]>, available
at<http://groups.google.com/group/comp.lang.c/msg/d070c346d8105ca8>,
he DID NOT SAY that C99 is not available for OS390.

I agree that he did not, but I am now a bit confused. I though, right
up until your message, that I was following all this.

The remark: "I think the OS390 and VM/CMS folks might cough and
splutter a bit if they heard you say that" certainly suggested to me
that it was the narrowness of the proffered list of C99 supported
platforms that would cause the spluttering, i.e. that OS/390 VM/CMS
could not be on the list.

Now I /can/ put a meaning to it that has nothing to do with C99
availability for OS/390 VM/CMS, but it feels like quite a stretch to
do so, and makes the remark seem out of place.

If there /is/ a C99 compiler for OS/390 (something I can't comment on
but which does not yet appear to have been documented by any of the
posted links) it seems a misleading example to pick in the middle of
an exchange about systems to which C99 code is portable.

How did you read it?

By the way, in case you are in any doubt, I am not supporting any of Jacob
Navia's wild claims about what Richard Heathfield said -- they are as
over the top as I have come to expect -- I am just confused about the
reference to OS/390 if it is not about C99 availability.
 
K

Keith Thompson

Ben Bacarisse said:
I agree that he did not, but I am now a bit confused. I though, right
up until your message, that I was following all this.

The remark: "I think the OS390 and VM/CMS folks might cough and
splutter a bit if they heard you say that" certainly suggested to me
that it was the narrowness of the proffered list of C99 supported
platforms that would cause the spluttering, i.e. that OS/390 VM/CMS
could not be on the list.

Now I /can/ put a meaning to it that has nothing to do with C99
availability for OS/390 VM/CMS, but it feels like quite a stretch to
do so, and makes the remark seem out of place.

If there /is/ a C99 compiler for OS/390 (something I can't comment on
but which does not yet appear to have been documented by any of the
posted links) it seems a misleading example to pick in the middle of
an exchange about systems to which C99 code is portable.

How did you read it?

Ok, let's look at the article yet again; this is Richard Heathfield
replying to (e-mail address removed).

| > I don't know exactly which platforms are supported by C99
| > implementations,
|
| Then you are in no position to make an argument about C99's portability or
| otherwise.
|
| > but let's name five (random) platforms for
| > illustration:
|
| > - Windows
| > - Linux
| > - Mac OS X
| > - Solaris
| > - HP-UX
|
| > By what I'd call "common standards," something that is portable among
| > that much platforms is very portable.
|
| I think the OS390 and VM/CMS folks might cough and splutter a bit if they
| heard you say that. But since you don't actually know whether the
| platforms you name have C99 implementations available for them, your point
| lacks force.

I read it as s0suk3 saying that anything portable to Windows, Linux,
Mac OS X, Solaris, and HP-UX is "very portable", and Richard offering
OS390 and VM/CMS as counterexamples. The surrounding context was
about C99, but the immediate point was about portability. s0suk3 made
a point *about portability*, and Richard responded to it. And it's
being blown completely out of proportion because of jacob's fixation.
 
K

Keith Thompson

Richard Heathfield said:
Keith Thompson said: [...]
If I were a potential customer, and I found that IBM's marketing
department had told me that their compiler "supports" C99 but in
fact did not fully conform to it, I would conclude that they had
attempted to deceive me.

I, on the other hand, would conclude that I hadn't asked them enough
questions. :)

Well, that too.
 
S

santosh

Keith said:
Ok, let's look at the article yet again; this is Richard Heathfield
replying to (e-mail address removed).

| > I don't know exactly which platforms are supported by C99
| > implementations,
|
| Then you are in no position to make an argument about C99's
| portability or otherwise.
|
| > but let's name five (random) platforms for
| > illustration:
|
| > - Windows
| > - Linux
| > - Mac OS X
| > - Solaris
| > - HP-UX
|
| > By what I'd call "common standards," something that is portable
| > among that much platforms is very portable.
|
| I think the OS390 and VM/CMS folks might cough and splutter a bit if
| they heard you say that. But since you don't actually know whether
| the platforms you name have C99 implementations available for them,
| your point lacks force.

I read it as s0suk3 saying that anything portable to Windows, Linux,
Mac OS X, Solaris, and HP-UX is "very portable", and Richard offering
OS390 and VM/CMS as counterexamples. The surrounding context was
about C99, but the immediate point was about portability. s0suk3 made
a point *about portability*, and Richard responded to it. And it's
being blown completely out of proportion because of jacob's fixation.

No. The list that Sebastian made up was intended to serve as a made up
list of C99 supported platforms. Richard's first comment in the quote
above intersects a statement by Sebastian which is *continuing* his
point about C99, not switching from C99 to general portability.
Sebastian is saying that he considers C99 to be pretty reasonably
portable if it supports a list of platforms similar to the hypothetical
list that he gave. Richard responded by saying that the OS390 and
VM/CMS people will be surprised about this comment, which directly
suggests that that is because C99 is not available for them. This is
the most reasonable interpretation of the exchange you have quoted
above. Obviously others will interpret it differently. However this
doesn't excuse jacob's hysterical tirade. If C99 is indeed available on
OS390 it simply means that Richard made a mistake -- perhaps his
information was outdated. Accusations of deliberate falsehood are quite
over the top.
 
N

Nick Keighley

this is his definition of "very portable". Note he didn't say there
was a C99 implementation for them.


ie. he's missed some widely used platforms. Note He didn't
say a C99 compiler was *not* available for these platforms.


yes, that's what I read it to say
I am used to some pretty adroit verbal gymnastics in c.l.c but is that
really how you read that remark? In an exchange about C99
portability, after a list of some systems that were claimed (rightly
or wrongly) to have C99 support

I did not see that explicitly claimed (I suspect he doesn't know)

a reference to OS/390 was made just to
make a remark about other, more general, portability issues?
yes

If that was the intent (and I trust Richard Heathfield will tell us the
intent) then it was a first-class trap into which Jacob fell. As I've
said before, I don't like the term, but I might just have to call it a
first-class troll.

Jacob doesn't read what is written.



--
Nick Keighley

in comp.lang.c, the very people most capable of making the inference
are those least likely to make it. This newsgroup considers pedantry
to be an art form.
Richard Heathfield
 
N

Nick Keighley

Keith Thompson wrote:

OK. I assumed that he was speaking of the z/VM system, as OS390
is called today.

you are *still* mirading what people are saying. Richard *was*
talking about mainframes. He DID NOT SAY OS390 (z/VM) DID NOT HAVE
A CONFORMING C99 COMPILER. He initially listed OS390 as being an
important platform that should be considered when listing major
platforms. And nothing sbout compilers available or not available.
At a later point someone (you?) found a statement that IBM's compiler
"supported" C99. Richard argued that this didn't say "conforms to"
C99. He still didn't say the compiler was not conforming. Then someone
found a site that stated that IBM's compiler did "conform to" C99.
Richard thanked them for providing the information.

Learn to read.

But even if we take it at face value, the compiler for OS390
is z/OS XL C/C++, that supports C99, so he was telling a
misleading statement when he said that C99 is NOT available for OS390.

he didn't say that

IT IS AVAILABLE for OS390. The compiler that was marketed with
that system is no longer available since it was discontinued in 2004.

The replacement product for OS390 according to IBM's documentation
is the z/OS XL C/C++. This is obvious for anyone.

You see how far you go with your "facts" ?

Just LIES.

no. Gat a dictionary.

Even if I would accept he was talking about OS390 is is WRONG
ANYWAY (and you with him of course)


Yes, and the "fact" that OS390 has no C99 is a LIE since
there is a compiler for OS390 that supports C99.


And I have presented all necessary facts to prove I am not!

you have presented no facts

no


Yes. Each time you speak about a significant platform
WITHOUT C99 I prove you wrong!

no
 
S

s0suk3

(e-mail address removed) said:





You're wrong. It's that simple.

So you're implying that someone can be right /and/ wrong at the same
time, regarding the same subject? I don't share your reasoning.
I'm well aware that the number of Standards exceeds one.

Finally.


Whether that is true depends on what you mean by the word "current". In
theory ("in law", if you like), you're right - C99 /is/ the current
Standard. In practice, you're wrong - C90 is the current Standard, because
that's the one which is conformed to by the implementations that people
actually use.

What people would those be? I've seen more people use C99 than C90.
So, even though I don't agree with the "de jure," "de facto," "in
theory" and "in practice" stuff, C99 would be the current standard
even in the way you mean it.
I'm sure I have already explained this to you at least twice.


Neither did I claim that you had said that.

Well, you said

"*IN PRACTICE*, here you are, advocating C99 and saying that C90 is
obsolete, ..."

I was regarding C89 as interchangeable with C90 in this context.
So would I. So we are, after all, in agreement. Good.


Logic. You are advocating C99. You claim to use gcc, which is not a C99
compiler.

It is.
Either you have a C99 implementation on your desktop machine or
you don't.

I do.
To have such an implementation on your desktop and yet not even
mention it, let alone claim to use it, even at such a late stage in a
debate on C99, would be very strange behaviour. I deduce that the balance
of probability is that you don't have a conforming C99 implementation on
your desktop. I can only think of two other options, neither of which is
very complimentary to you, so I'd rather avoid them if I can.

I don't think mentioning the programs installed on my computer is
relevant to this discussion. If you think it's relevant in the sense
that I need to prove that I have a C99-conforming implementation
available in my machine: you can see my headers; I'm on Linux. There
are C99-conforming implementations for Linux. There, was that so hard?
But the point is that you did not have a valid reason to believe I
didn't.
That's precisely what "conforming" means.

"6 The two forms of conforming implementation are hosted and
freestanding. A conforming hosted implementation shall accept any strictly
conforming program. A conforming freestanding implementation shall accept
any strictly conforming program that does not use complex types and in
which the use of the features specified in the library clause (clause 7)
is confined to the contents of the standard headers <float.h>, <iso646.h>,
<limits.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, and <stdint.h>. A
conforming implementation may have extensions (including additional
library functions), provided they do not alter the behavior of any
strictly conforming program."

I don't see the word "perfect" in there.
There's no room in there for imperfection. Either an implementation
conforms or it doesn't.

Of course. Saying "this implementation conforms, but it doesn't," is a
null statement. And I've never said anything like that. BTW, what does
that have to do with an implementation being or not being perfect?
It depends on what you mean by "current".

Apparently we're never going to agree on what "current" means.
On that, we can agree.



I have seen no evidence so far that you have *even* one (C99-conforming)
implementation.

Like I mentioned above, I'm currently on Linux. You can find out for
yourself which conforming implementations there are if you are so
interested.
If your code doesn't need to be portable, I agree. But if your code doesn't
need to be portable, why do you care in the first place?

That depends on what you mean by portable. Do you mean "from
microchips to supercomputers"? Or do you mean "any popular OS"? I
think I shouldn't have to mention any further that your standards of
portability are radically different from mine.

Also, in the case of GCC, they implement it closely enough that I've
never even had to read their site about C99. So I've been writing
standard C without worrying about what GCC supports or not, which
proves that using GCC doesn't limit the code to be compiled only under
GCC. So the code's portability is not reduced at all.
No, it's a lot of ifs. It doesn't prove anything at all. Your "proof",
so-called, says that you don't know what you're talking about and you
consider yourself free to re-define your terms as you go along, therefore
you must be right.

No. The fact that my standards for something are different from yours
doesn't mean I'm re-defining anything.
Sorry, but it doesn't convince me.

But it proves you wrong.
The availability and installation of C99 implementations on your targets.


Provided your portability needs are very modest and provided that you don't
need to port to platforms where those needs are not met, yes. That's a
little like saying you have a brand-new widget that is really useful, and
okay, you know it needs a special kind of power source, but you can use
your widget ANYWHERE that this special power source is available. True
enough, but it doesn't actually say much.

Those who program in the common subset of C90 and C99 genuinely don't need
to know on which platforms their code will be compiled,

What people would those be? We're discussing the portability of C89/
C90/C99 here, but we both know that out there in the real world this
isn't as relevant as it may sound here. I hardly can think of any
serious program that has the fortune of being able to restrict itself
to pure standard C. Want to hit the net? Want to flow through more
than one thread of control? Want to draw a window on the screen? Want
to start another process? Want to handle directories? There you go
your (completely) non-portable code. I at least have never had the
chance to write a (serious) program in standard C. Have /you/? Have
you ever developed production code in which you only write to a few
streams, do some math operations, do some text processing, and finally
display a nice "exiting" message?
because any
platform that can support C code at all is going to have a C90
implementation available for it, and by sticking to the common subset they
avoid the risk of the code /not/ compiling because someone out there
actually happened to have a C99 implementation.




Well, I suppose I should thank heaven for small mercies.


Very true. But I'm not concerned with those who have the /same/ interests
as me. I can be absolutely sure that they will be able to compile my code,
because they'll have the same system as me. I'm far more concerned with
those who have /different/ interests to me. If they can't compile my code
too, that's a big problem.




No, they don't.

Yes, they do.
You can't be a little bit pregnant. Either you're pregnant or you're not.

But a glass of water can be a little full. I'd say my analogy applies
better than yours, but that's something we're never going to agree on,
are we?
The more I read this, the more I think you've never actually ported code in
your life.

I have, just not in the same way as you.
No, you can't, because the bits of C99 that *your* implementation
implements correctly might not be the same as the bits of C99 that the
other guy's implementation implements correctly.

But that wasn't my point. My point was, again: you can use safely the
subset of the language that the implementation implements; you just
have to know what you can use and what not. And *that* isn't going to
make the code any less portable, since it will later be compilable
under any conforming implementation. If you use extensions, then sure,
you're limiting the code to be compilable only under that specific
compiler, but that's not what I mentioned.
The issue here is
portability. A program is (minimally) portable if it can be compiled and
executed correctly (without source code changes) on at least two
implementations. If those two implementations disagree about the semantics
or legality of a construct used by the program, then the program is *not*
portable (without source code changes) between those two implementations.

You're talking as if I said anything about extensions.
The more implementations that translate the program correctly and with
identical semantics (without source code changes), the more portable the
program. There are those for whom portability is really, really, really
important, and for them, perfection in conformance - whilst admittedly an
unattainable ideal - is nevertheless vastly important, and "misses out
whole chunks of the Standard" doesn't count as being even remotely close
to what is required. The conformance of gcc, Visual Studio, Borland C,
Intel C, Digital Mars C, C/370, LE370, XL C, Norcroft C, CodeWarrior - and
plenty of other compilers - to C90 is astoundingly good, making C90 the
Standard of choice when writing code intended to be portable.



Sure, and nobody has claimed otherwise as far as I'm aware - but
compiler-specific extensions are not topical here. Similarly, I have on my
desk a fret brush. It's in a tube marked "ghs Fast-Fret" ("Glides on,
wipes off, cleans strings, lets you play faster, brightens sound, prolongs
fingerboard life, long-lasting, won't damage finish, won't soil or stain,
can't spill or break".) Very useful indeed, and I use it regularly. But
it's hardly relevant in comp.lang.c, is it? Same applies to
compiler-specific extensions.

You went more off-topic in that paragraph than I went on mentioning
the words "compiler-specific extensions." So I have to ask: Why do you
talk about your toy on comp.lang.c? :)

And actually, the standard talks about compiler-specific extensions.
So it *is* relevant to comp.lang.c. It's simply not appropriate to
discuss them in detail, which I didn't. The standard, however, doesn't
mention anything about objects hanging around on your desk.
If it isn't conforming, it isn't a C compiler.

Yes, it is. It simply isn't conforming. Hence the phrase "non-
conforming C implementation."
If it conforms to C90 but
not to C99, it's a C90 compiler but not a C99 compiler. gcc currently
falls into that category.

GCC is both a C90 and C99 implementation. It conforms to C90, but it
doesn't conform to C99.
You avoided the question. Why did you avoid the question?

The function won't always invoke undefined behavior, so I thought I'd
bring up a more relevant and illustrative example. But anyway, what if
we modified the function so that it did something that would *always*
invoke undefined behavior? What do you think the compiler should do
then? Do you think I'd be OK for it to erase all files in the hard
disk?
But it doesn't. It's on the edge of doing so in two ways, but it doesn't
*actually* invoke undefined behaviour.


It is required to increment p. The code is strictly conforming.


It must increment the pointer. What it hopes is its own affair.


No, because the code is strictly conforming and doesn't have any "erase all
files" semantics.


I agreed no such thing, since the code is strictly conforming.

Sorry; I thought it would undoubtedly invoke undefined behavior.
Their productivity will increase if they have learned to avoid invoking
undefined behaviour unintentionally.

The world isn't perfect. Even the most experienced programmer will
make mistakes and invoke undefined bahavior.
Presumably you define "serious programmer" as "programmer who
unintentionally invokes undefined behaviour on a regular basis".

No. In this context, I meant it more as "a programmer that needs to be
as productive as possible, and thus needs the best possible tools
available, and a compiler that doesn't erase all files in the hard
disk at the first sign of undefined behavior is the very minimum
requirement."

Sebastian
 
J

James Kuyper

Ben said:
I am used to some pretty adroit verbal gymnastics in c.l.c but is that
really how you read that remark?

Yes, that's precisely how I read it. That required about as much
gymnastics as a stroll through the park. In English, the word 'that'
refers to the most recently mentioned thing that it could reasonably be
considered to apply to.

In this case, 'if they heard you say that' very clearly refers to the
last thing he said, which was "By what I'd call "common standards,"
something that is portable among that much platforms is very portable."
That statement that didn't say anything at all about C99, but was simply
an absurdly restricted definition of "portable", one that OS390 and
VM/CMS people would have obvious reasons to "cough and splutter" over.

It takes quite a bit of verbal gymnastics to misinterpret "to hear you
say that" as referring to anything other than the most recently made
comment. Possibly this is a way in which English differs significantly
from French?
 
J

James Kuyper

santosh said:
Keith Thompson wrote: .... ....
No. The list that Sebastian made up was intended to serve as a made up
list of C99 supported platforms. Richard's first comment in the quote
above intersects a statement by Sebastian which is *continuing* his
point about C99, not switching from C99 to general portability.

I can't ingure out what you mean by "intersects" here. Richard's comment
occurred at a point when Sebastian's last comment was about portability.
It may have occurred inside the context of other statements that
referred to C99, but Richard's comment was quite clearly about only the
most recently made comment by Sebastian.
 
J

Joachim Schmitz

What people would those be? I've seen more people use C99 than C90.
So, even though I don't agree with the "de jure," "de facto," "in
theory" and "in practice" stuff, C99 would be the current standard
even in the way you mean it.

gcc ist one of the mostly used compilers, another very frequently used one
in M$ Visual C. Neither conforms to C99 nor claim to do so.
So I really dont know how you can see more people using C99 than C89, unless
you're talking about a pretty closed group, like your workmates, all working
on the same platform for which by sheer luck a C99 compiler is available

Bye, Jojo
 
J

Joachim Schmitz

Nick said:
On 18 Aug, 00:09, jacob navia <[email protected]> wrote:

no. Gat a dictionary.

I begin to wonder whether the french equivalents to 'lie' and 'false claim'
are the same word? IOW whether in french there's no distiction between a
deliberate wrong claim and an accidental one?

Bye, Jojo
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top