flat assembler
Message board for the users of flat assembler.
Index
> Programming Language Design > Plain English Programming Goto page Previous 1, 2, 3, 4, 5 Next |
Author |
|
Gerry Rzeppa 10 Apr 2015, 19:43
codestar wrote: I'm a very old fashioned programmer. When I was a kid - age 10-11, like 25+ years ago, with an Atari and Commodore 64 - there was no internet, no books or references. Back then, you had to be really good at it. Nowadays, everyone and their grandma does programming. Sadly, it has transformed from "think and write code; be unique, be you" to "look for code to copy and paste; walk the line; don't think for yourself". I agree and I'm much the same. We see the same sad trend not only in programming, but in things like LEGO. When we were kids, there were a handful of block "types" and the rest was left to our imaginations. Now every piece is different from ever other and there are literally thousands of different "types" -- I have to constantly remind my youngest that he doesn't have to spend time searching for the right piece to "copy and paste", he can make whatever he needs himself from simpler components. Time was you could master a programming language simply by reading a 100 page reference manual, and then you were ready to create. Small suitcase, large frontier. That's what we designed Plain English to be. Our 120-page manual tells you how to deal with with memory, the screen, the keyboard, the mouse, the disk drives, the printer, the speakers, and the internet, and the rest is up to you. Small suitcase, large frontier. codestar wrote: How can "we" (language creators) copy when no one else writes code in our languages? Can't. And don't have to, fortunately. codestar wrote: PS: My favorite language designer is Niklaus Wirth. Completely agree. We think of Wirth as the original Osmosian Master. ("Osmosian" as in "osmosis" -- you immerse yourself in a particular kind of programming environment and eventually you find that you've absorbed that way of thinking. Have you noticed how differently people reared on PASCAL think about programming compared with people brought up on C-style languages? And the different systems that result? The original Mac versus the new ones, for example; OBERON versus LINUX; simple, efficient, explicable systems versus complex kludges.) You are what you eat. |
|||
10 Apr 2015, 19:43 |
|
tthsqe 10 Apr 2015, 19:53
Can we get a language that uses Queen's English?
|
|||
10 Apr 2015, 19:53 |
|
Gerry Rzeppa 10 Apr 2015, 19:55
JohnFound wrote: Great! And we already have a tool for translating from one language to other: Google Translator. This way, the portability problems will be solved entirely. Actually, we're not concerned with cross-culture portability. In fact, we think it best that different cultures develop in different directions because variety is our best defense against mistakes that become so ubiquitous they can't be easily corrected. We're content with a vision of a world where the French live and die speaking (and programming in) nothing but French, while Germans live and die speaking (and programming in) nothing but German. A society doesn't have to span the globe to be "complete" in every important sense of the word. |
|||
10 Apr 2015, 19:55 |
|
Gerry Rzeppa 10 Apr 2015, 20:38
tthsqe wrote: Can we get a language that uses Queen's English? One of the most important characteristics of our Plain English compiler is that very little vocabulary and grammar resides in the compiler itself: articles, conjunctions, prepositions, and a handful of state-of-being verbs are about all. The rest is defined by the programmer who is developing an application with our system as he defines new types, variables, and routines. The compiler thus "learns" or "picks up" the "local dialect" of the programmer as he programs. For example. Our compiler knows nothing about bicycles, tricycles, etc. But once a programmer defines some types like these: A cycle is a thing with a description and a color and some wheels. A wheel is a thing with... and a variable like this: The inventory is some cycles. and a routine like this: To draw a cycle... He can now say things like: Allocate memory for a cycle. Append the cycle to the inventory. Put "Bicycle" into the cycle's description. Put the red color into the cycle's color. Allocate memory for a wheel. Append the wheel to the cycle's wheels. Allocate memory for a wheel. Append the wheel to the cycle's wheels. Copy the cycle to another cycle. Put the white color into the other cycle's color. Append the other cycle to the inventory. Copy the cycle to a third cycle. Put the blue color into the third cycle's color. Append the third cycle to the inventory. Loop. Get a cycle from the inventory. If the cycle is nil, break. Draw the cycle. Repeat. And if he wants to use a local dialect (maybe he doesn't like that "cycle is nil" statement just above), all he has to do is write a little wrapper routine, perhaps like this: To decide if a cycle is there: If the cycle is nil, say no. Say yes. And now he can change the loop to read: Loop. Get a cycle from the cycle list. If the cycle isn't there, break. Draw the cycle. Repeat. So the compiler's understanding of the language in general (vocabulary and grammar), and the programmer's local dialect in particular (vocabulary and grammar), grows as the programmer does nothing more than simply program. Last edited by Gerry Rzeppa on 11 Apr 2015, 05:57; edited 1 time in total |
|||
10 Apr 2015, 20:38 |
|
HaHaAnonymous 10 Apr 2015, 21:16
Plain "Language" programming can be fun! Especially if you are the type of person who likes to learn new Languages.
move zero to eax and then add fifty multiply eax by variable x, where x is equal to y if y is greater than x, otherwise y equals five if error occurred then move one billion to eax, otherwise zero return from this function I guess one can forget syntax highlighting already as it is a book rather than a program. :P The error messages will be like: English Errors: Your sentence is incorrect. The pronoun "I" must always be written in upper case. Numbers must be written in full. Unexpected comma. Unexpected end of paragraph. Word not found in dictionary. Portuguese Erros, dicas e recomendações: Seu texto está gramaticamente incorreto. Pronome informal não suportado. Acento esperado em vogal. Palavra não encontrada no dicionário. Palavra não acentuada pode ter outro significado completamente diferente. Término de parágrafo inesperado. Uso de vírgula incorreto, entendimento foi invertido. Números devem ser escritos por extenso. Functions will now be named chapters. It can also include glossary instead of comments! It could also be used as a tool for learning other Languages since its forces the user to write books with no mistakes at all. I apologize for any inconvenience I may have caused. |
|||
10 Apr 2015, 21:16 |
|
Gerry Rzeppa 10 Apr 2015, 22:41
HaHaAnonymous wrote: Plain "Language" programming can be fun! Especially if you are the type of person who likes to learn new Languages. That's true. But it's also fun for people who don't like to learn new languages since you can code in the language you already know. HaHaAnonymous wrote: I guess one can forget syntax highlighting already as it is a book rather than a program. The only syntax highlighting we've found helpful is comments (which appear in a subtle, sky-blue hue) so you can see at a glance which parts of your code are operational, and which parts are not. HaHaAnonymous wrote: The error messages will be like... The compiler responds in the first person when it doesn't understand; actual error messages are things like: "I don't know how to 'draw a widget'." "I already know how to 'draw a box'." "I was expecting an indefinite article right about here." "Dude, you already have a parameter called 'x'." "We seem to have an invalid unit of measure here." "You seem to have forgotten a period." HaHaAnonymous wrote: Functions will now be named chapters. It can also include glossary instead of comments! Turns out we still call functions, "functions". HaHaAnonymous wrote: It could also be used as a tool for learning other Languages since its forces the user to write books with no mistakes at all. That's not quite true; the compiler is quite forgiving with regard to bad spelling and syntax since the vocabulary and grammar are defined, in great part, by the programmer himself. The version we're working on now is even more flexible in these areas. If you want to find out what the thing is actually like but don't want to download and run it (though that only takes a few seconds and does not require installation), you can read all about it here: www.osmosian.com/instructions.pdf |
|||
10 Apr 2015, 22:41 |
|
KevinN 11 Apr 2015, 07:39
AppleScript sort of tried to attempt this - and it's predecessors I think. What was that called? Something-Talk? I don't remember.
|
|||
11 Apr 2015, 07:39 |
|
codestar 11 Apr 2015, 07:45
KevinN: But Gerry didn't just try and fail. He succeeded in making a real nice English programming language, what we've all dreamed of.
|
|||
11 Apr 2015, 07:45 |
|
Gerry Rzeppa 11 Apr 2015, 09:11
codestar wrote: Unlike most visual artists, I see, acknowledge and respect the "art" in your code Thanks. I sent a copy to Donald Knuth back in January (he only communicates via snail mail) and he described it as "an elegant proof of concept" and "one of the most self-describing systems [he'd] ever seen." He was especially impressed with what he called "the haiku-like constraint" of getting each topic in the instruction manual to exactly fit on a single page. codestar wrote: Programming since 10-11 years old, 26-27 years ago. There does seem to be something of a "generation gap" in the programming community, similar to the PASCAL vs C gap I mentioned earlier. It sometimes seems that each generation is bent on learning as little as possible from their forefathers. Think about it: in the 1980's I was conveniently typing my thoughts on a what-you-see-is-what-you-get 1-megahertz Macintosh with just 128 kilobytes of memory; now I've got a gigahertz machine with gigabytes of memory, yet I'm composing this post in a primitive, exceptionally inconvenient, non-wysiwyg, edit-here-preview-there-come-back-here-to-make-corrections editor! codestar wrote: One of the biggest misconceptions people have is that it's YOUR personal language. I strongly disagree with this. It's just English with real semantics and there's no personal decision involved. It understands whatever you program it to do. Typical programmer's blame the language for their mistakes/fault; in other words, they blame the instrument for their inability to use it correctly. Yes; like almost anything, if you approach it confrontationally, it's going to fight back; but if you approach it with nothing more than a childlike curiosity, you'll soon get to know and love it for what it is. codestar wrote: You should be proud of yourself to have such an intelligent son Thanks. We've got another "miracle baby", now nine years old, who was born of my wife's very own well-past menopause womb when she was 57 years old. Since we felt like Abraham and Sarah when he was born, being so old and having prayed so long, we named him "Chuckles" (a loose transliteration of the Hebrew "Isaac"). I'm teaching him Plain English, of course. codestar wrote: My daughter is 19 years old and she does Java 3D game programming, though I rarely ever see or talk to her I taught her how to program in Borland C++ DOS 3.1 at age 6-7. I don't see my daughter much either; she manages a couple of warehouses for Amazon in Indiana. The thing I would like to pass on to the next generation is the kind of "joy" it was to program back when systems were simple enough so you could understand them, top to bottom, without years of study. I'm thinking a stand-alone Plain English system-on-a-stick might fit the bill, especially if the operating system was also written primarily in Plain English. I'm just feeling a little old to start digging back into all that hardware-specific stuff, especially when hardware is such a moving target these days. |
|||
11 Apr 2015, 09:11 |
|
Gerry Rzeppa 11 Apr 2015, 09:27
KevinN wrote: AppleScript sort of tried to attempt this - and it's predecessors I think. What was that called? Something-Talk? I don't remember. AppleScript was an outgrowth of HyperTalk, which was part of Apple's HyperCard (http://en.wikipedia.org/wiki/HyperCard). I remember writing an entire system for a small printing company is less than a week with HyperCard back in the day. They used it for more than a decade. Great product; I was sorry to see it go. Developed by the guy who did MacPaint and QuickDraw (http://en.wikipedia.org/wiki/Bill_Atkinson), a true Osmosian Master if ever there was one: wrote in PASCAL and assembler, hated scroll bars, loved simplicity, etc. |
|||
11 Apr 2015, 09:27 |
|
Tomasz Grysztar 11 Apr 2015, 09:52
This is really a fascinating project - I really like when new approaches to programming are designed and implemented in such a beautiful way. As a mathematician I have a inclination to play with cryptic languages (even esoteric ones), but I see and appreciate the beauty in many different approaches. I also have a Pascal background (I learned it much earlier than C, and I learned assembly by writing inline assembly functions in Turbo Pascal) - and I agree wholeheartedly that there is something different in how people reared on Pascal approach the programming when compared to people that started with C-like ones.
Gerry Rzeppa wrote: I think the artist part sometimes makes us see things that other programmers (more strongly left-brained and mathematically inclined), sometimes miss. For example, almost everyone on programming sites tells me we got the precedence rules wrong in Plain English (ours is left-to-right only). Yet when I ask almost any native English speaker (who is not a trained programmer) what "3 plus 2 times 5" is, they always say, 25 (not 13). |
|||
11 Apr 2015, 09:52 |
|
Gerry Rzeppa 11 Apr 2015, 10:01
codestar wrote: KevinN:But Gerry didn't just try and fail. He succeeded in making a real nice English programming language, what we've all dreamed of. The dream, I think, has been apparent for years: the infamous HAL 9000, the computer on Star Trek with the voice of Gene Roddenberry's wife, etc. And now Apple's SIRI and Microsoft's CORTANA and Amazon's ECHO and Wolfram's ALPHA are making systems like that a reality. (See http://blog.wolfram.com/2010/11/16/programming-with-natural-language-is-actually-going-to-work/ for a great article on the subject by Wolfram.) So it's going to happen, is happening. The difference between our approach those above is that they all assume that the programming has to be done in a language different from the user's. We disagree -- we think the whole thing can be programmed in English (except, of course, for a handful of unavoidable "machine code literals"). That's why our next step is to write a Plain English operating system. Then we'll have a system that will be suitable not only for education, but for professional and other practical uses as well; a system where beginners, experts, and users will all speak the same language. If anyone here would be interested in helping to develop that Plain English operating system, please let me know (gerry.rzeppa@pobox.com). Perhaps you, Codestar? Surely you'd be happier working on something positive like that than spinning your wheels trying to keep Revolution and John and the rest in line! Keep in mind that I'm only talking "proof of concept" at this stage: something "ridiculously primitive" like a 32-bit DOS on a stick with just enough breadth to allow us to recreate the system we have now -- minus the Windows kludge underneath. The "Gray Matter Glossary" in our instruction manual ( www.osmosian.com/instructions.pdf pages 55 to 114) fully describes the capabilities of our system and, by implication, the kind of functionality we need and expect from an operating system. And I think we could even delete some of that in the interest of simplicity. |
|||
11 Apr 2015, 10:01 |
|
Gerry Rzeppa 11 Apr 2015, 11:02
Tomasz Grysztar wrote: This is really a fascinating project - I really like when new approaches to programming are designed and implemented in such a beautiful way. As a mathematician I have a inclination to play with cryptic languages (even esoteric ones), but I see and appreciate the beauty in many different approaches. Thank you; I especially appreciate that coming from an expert like yourself. Tomasz Grysztar wrote: I also have a Pascal background (I learned it much earlier than C, and I learned assembly by writing inline assembly functions in Turbo Pascal) - and I agree wholeheartedly that there is something different in how people reared on Pascal approach the programming when compared to people that started with C-like ones. That's reassuring. I was beginning to think I was the only one. Now the question is the old heredity vs environment one: Do these differences arise because people start out different and are thus attracted to the one "style" or the other? or do people start out more-or-less neutral in these matters and and learn, by training and osmosis, to think one way or the other? Tomasz Grysztar wrote: Since you mentioned mathematically inclined programmers I would like to share another similar story about the precedence rules that shows that mathematicians may also not be exactly in the same "category" as the usual programmers of today. There was a controversy over my choice to assign unary minus the same precedence as subtraction - my mathematical background has influenced me there, because for mathematicians it is usually more natural to expect that such minus sign has lower priority than multiplication or power no matter whether there is some other term before it or not (you can see examples of this reasoning here and here). I'm under impressions that the dominance of languages derived from C has made it that most programmers today may have a different intuitions. From a "person on the street" perspective -- a perspective that we Plain English programmers constantly attempt to cultivate -- it's clear that a dash in front of a number is not an operator at all: it's part of the number itself. "Five" is a number, and "minus five" or "negative five" is another, different number. No ordinary person thinks of negative five as a positive five that has been negated; they simply think of it as a different number. I realize this is contrary your choice above, but I think it accurately represents how the "untainted" among us conceptualize the thing. And the syntax we (currently) support for inline expressions in Plain English actually encourages this mode of thought: we (currently) don't allow symbols as infix operators, but (currently) insist on spelled-out words: plus, minus, etc. The Plain English programmer may thus write "-5 minus -3" but it will be clear (we hope) that there are two terms and one operation in the expression; the answer is -2 (which is a number) and not "minus 2" (which is an incomplete expression with the leading term missing). Though I must admit that thinking like an ordinary person (and not a mathematician) I was inclined to think the answer should be -8 ! So clearly more thought is necessary. Probably best to use "ordinary person" precedence when words are involved, standard mathematical precedence when symbols are used; and when they're mixed, lean toward the "ordinary person" precedence since no self-respecting mathematician would mix them. And tell conventional programmers to use lots of parentheses. Too bad we can't convince everyone to simply use reverse polish notation! I have a degree in math myself -- with honors, no less -- and yet I can't quite bring myself to trust the stuff as others do (though I readily admit its practical value in many areas). Case in point: math tells me that the hypotenuse of a right triangle with one side 3 units long and another 4 units long is 5 units long; but it also tells me that the hypotenuse of a right triangle with two 1-unit sides is a number that no one has ever been able to exactly quantify; a different KIND of number altogether. Yet I know that when I draw such triangles on graph paper, or cut them out of wood with my miter saw, the experience is the same whether the line (or cut) is a simple integer, a real number, an irrational number, etc. So I'm forced to conclude that the mathematical model is defective and thus not to be entirely trusted -- it is, after all, just a model, right? the reality is the triangle on the paper and the wood on the saw. |
|||
11 Apr 2015, 11:02 |
|
Tomasz Grysztar 11 Apr 2015, 12:05
Gerry Rzeppa wrote: From a "person on the street" perspective -- a perspective that we Plain English programmers constantly attempt to cultivate -- it's clear that a dash in front of a number is not an operator at all: it's part of the number itself. "Five" is a number, and "minus five" or "negative five" is another, different number. No ordinary person thinks of negative five as a positive five that has been negated; they simply think of it as a different number. Gerry Rzeppa wrote: I have a degree in math myself -- with honors, no less -- and yet I can't quite bring myself to trust the stuff as others do (though I readily admit its practical value in many areas). Case in point: math tells me that the hypotenuse of a right triangle with one side 3 units long and another 4 units long is 5 units long; but it also tells me that the hypotenuse of a right triangle with two 1-unit sides is a number that no one has ever been able to exactly quantify; a different KIND of number altogether. Yet I know that when I draw such triangles on graph paper, or cut them out of wood with my miter saw, the experience is the same whether the line (or cut) is a simple integer, a real number, an irrational number, etc. So I'm forced to conclude that the mathematical model is defective and thus not to be entirely trusted -- it is, after all, just a model, right? the reality is the triangle on the paper and the wood on the saw. |
|||
11 Apr 2015, 12:05 |
|
Mike Gonta 11 Apr 2015, 13:23
Tomasz Grysztar wrote: This is really a fascinating project - I really like when new approaches to programming are designed and copy without paying for it (Gerry was originally selling it for $100) I felt it wasn't in my best interest to publicize the fact and I didn't pursue it any further. It was only recently that I decided to "dig it up" and take another look. I was still a little hesitant until I did some searching and found the it was for some time now freely available at http://osmosian.com/cal-3040.zip (back then it was the cal-3037 follow by the cal-3040). Also, I am glad to see that Tomasz "approves" of my posting a non FASM topic (which of course was posted in the heap). |
|||
11 Apr 2015, 13:23 |
|
Mike Gonta 11 Apr 2015, 14:18
Gerry Rzeppa wrote: The thing I would like to pass on to the next generation is the kind of "joy" it was to program back when The current CAL-3040 "shebang" is an excellent system. However, a proof of concept would like further development. Please open source the code with a permissive license. Personally I prefer the free licenses the unlicense or ZLib. Re-coding the entire system (a clone) from scratch based on the Plain English syntax would be a huge undertaking. The lack of a license will not only prevent others from participating in development, but in many cases prevent them from even looking at the source. The transliterating compiler SudoCode that I am currently working on is based on bootstrap compiling the original CAL-3040. Even though I don't distribute a modified version of the original CAL-3040 (the instructions are simple) nor a copy of the SudoCode compiler itself (simply bootstrap compile it from the original), I'm still at the mercy of the author as far as distributing my original Plain English code for the SudoCode compiler. Also, to produce executables for a non windows environment would require replacing all the windows specific calls in the noodle with SDL (for example). Personally, I would like to produce binaries for small standalone systems (hobby OS, standalone bootable programs, etc) written in Plain English. |
|||
11 Apr 2015, 14:18 |
|
Gerry Rzeppa 11 Apr 2015, 19:06
Tomasz Grysztar wrote: This demonstrates that to some degree everyone is a mathematician now; after all, the concept of negative numbers was introduced by mathematicians relatively late in our history. Granted. But I'm pretty sure ordinary people try to avoid negative numbers as much as possible simply because they're hard to conceptualize (ie, mentally picture). After all, negative numbers are, well, negative; negations; not something "real" or "positive" or "concrete" in the usual senses of those words. I can imagine myself owing you 5 dollars; I really don't know how to picture "having" -5 dollars. Things such as these -- counter-intuitive and hard-to-picture things that are too much "taken for granted" -- are where I believe great iconoclastic advances can be made. Tomasz Grysztar wrote: ...I just wanted to point out that there may be more that just two points of view here, and that characterization of the current "mainstream" of programming as mathematically inclined may not be fully accurate. Agreed. The fact that there are multiple persistent points of view on a subject is, to me, evidence that there may be an underlying fault in the concept itself, however handy it may be: fertile ground for iconoclastic investigation. Tomasz Grysztar wrote: Yes, mathematical constructions are always just models that we created to mirror some aspects of our reality. I don't think this should be discouraging - but it is good to remember the underlying assumptions of each model that we want to use. For example, the geometry you used in the above example has an assumption that everything can be scaled and divided ad infinitum - and it the consequence of this assumption that to measure the hypotenuse we may need a number that is only obtainable through infinite calculations. If we used a different model - based on assumptions that perhaps space is quantized (after all, the quantum physics may give us a good reason to think that it is so) and you can get down to basic "pixels" of reality - then you could end up with metrics where every length would be a nice natural number. We simply choose a model that works best for us under the circumstances (including the preference for model that requires less effort). And I think that trusting the mathematics is sensible as long as you are aware of all the assumptions. Indeed. As you've probably guessed I'm a fan of Kronecker ("God created the integers; all else is the work of man"), Wildberger's "rational trigonometry" ( http://en.wikipedia.org/wiki/Rational_trigonometry ), Ed Fredkin's "digital physics"( http://www.digitalphilosophy.org/?page_id=2 ), etc. That's why we (currently) support only integers in Plain English, but are nevertheless able to size and smooth and rotate graphical objects; we even have an all-integer "turtle graphics" library that uses "rise" and "run" in lieu of conventional trigonometry (where you don't turn by degrees -- you "turn 1/8 of the way around" and such like). What I'd like to see (or develop) is a consistent all-integer "pixel geometry" that would work for all the various graphical objects (including fonts) that we need in our development system. If anybody knows of such a thing, please point me in the right direction. |
|||
11 Apr 2015, 19:06 |
|
Gerry Rzeppa 11 Apr 2015, 20:01
Mike Gonta wrote: The current CAL-3040 "shebang" is an excellent system. However, a proof of concept would like further development. The problem I have with open source licensing in general, and "crowd coding" in particular, is that a program quickly ceases to be what it was intended to be; quickly ceases to be itself. See here ( https://github.com/Folds/osmosian/issues/4 ) for a clear and recent instance involving our system. For examples closer to home, consider (a) that some of your own Plain English SudoCode IFs span more than one line, (b) that it is impossible on GitHub to insure that every documented topic will fit exactly on a single printed page, and (c) that producing output that requires a post-compiler is contrary to the "stand alone" and "minimalist" concept of the current system. Now of course you might say that such "practices" or "elements of style" are unnecessarily restrictive or even silly; perhaps they are. But they're two of the "concepts" or "principles" or "characteristics" that make our Plain English system what it is. And, as you can surely imagine, as the masses chip away at such concepts and principles and characteristics -- each person deciding for himself what is silly and what is not -- the uniqueness, the identity of the program inevitably deteriorates and eventually it becomes something else altogether. Only the name remains the same. Nevertheless... Mike Gonta wrote: I'm still at the mercy of the author as far as distributing my original Plain English code for the SudoCode compiler...Personally, I would like to produce binaries for small standalone systems (hobby OS, standalone bootable programs, etc) written in Plain English. God forbid that I do anything to squelch the creativity of others! I hereby officially grant you, Mike Gonta, my personal permission to do whatever you'd like with the CAL-3040, its source code, and its documentation, for as long as you shall live. Go for it! |
|||
11 Apr 2015, 20:01 |
|
Mike Gonta 12 Apr 2015, 10:23
Gerry Rzeppa wrote: The problem I have with open source licensing in general, and "crowd coding" in particular, is that a program attribution must be provided and misrepresentation of originality is not allow. Zlib license wrote: Copyright (c) <year> <copyright holders> Gerry Rzeppa wrote: I hereby officially grant you, Mike Gonta, my personal permission to do whatever you'd like with the CAL-3040, How can you prevent others from modifying my modified version? You may wish to consider retracting your permission (which I of course will be morally obligated to comply with). |
|||
12 Apr 2015, 10:23 |
|
Goto page Previous 1, 2, 3, 4, 5 Next < Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.