Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming > #2486 > unrolled thread
| Started by | bob <bob@coolfone.comze.com> |
|---|---|
| First post | 2012-11-15 13:45 -0800 |
| Last post | 2012-11-28 23:45 -0800 |
| Articles | 14 on this page of 34 — 12 participants |
Back to article view | Back to comp.programming
little-endian bob <bob@coolfone.comze.com> - 2012-11-15 13:45 -0800
Re: little-endian JJ <jaejunks@glegooilma-swapit.com> - 2012-11-15 23:33 +0000
Re: little-endian bob <bob@coolfone.comze.com> - 2012-11-16 10:38 -0800
Re: little-endian "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-16 23:32 +0100
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-16 21:17 -0600
Re: little-endian "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-17 10:26 +0100
Re: little-endian "BartC" <bc@freeuk.com> - 2012-11-17 11:38 +0000
Re: little-endian "Pascal J. Bourguignon" <pjb@informatimago.com> - 2012-11-17 13:56 +0100
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-17 11:58 -0600
Re: little-endian Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-11-17 19:35 +0000
Re: little-endian "BartC" <bc@freeuk.com> - 2012-11-17 19:50 +0000
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-17 11:30 -0600
Re: little-endian Ian Collins <ian-news@hotmail.com> - 2012-11-18 09:28 +1300
Re: little-endian Robert Wessel <robertwessel2@yahoo.com> - 2012-11-17 14:48 -0600
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-17 16:22 -0600
Re: little-endian Ian Collins <ian-news@hotmail.com> - 2012-11-18 15:17 +1300
Re: little-endian "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2012-11-18 09:13 +0100
Re: little-endian Ian Collins <ian-news@hotmail.com> - 2012-11-18 21:33 +1300
Re: little-endian "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2012-11-18 10:15 +0100
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-18 03:03 -0600
Re: little-endian "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2012-11-18 10:29 +0100
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-18 12:50 -0600
Re: little-endian Robin Vowels <robin.vowels@gmail.com> - 2012-11-22 04:49 -0800
Re: little-endian Jongware <jongware@no-spam.plz> - 2012-11-23 15:22 +0100
Re: little-endian pacman@kosh.dhis.org (Alan Curry) - 2012-11-25 19:39 +0000
Re: little-endian Jongware <jongware@no-spam.plz> - 2012-11-26 12:01 +0100
Re: little-endian "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2012-11-26 14:02 +0100
Re: little-endian Jongware <jongware@no-spam.plz> - 2012-11-26 15:34 +0100
Re: little-endian "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2012-11-26 17:03 +0100
Re: little-endian Robert Wessel <robertwessel2@yahoo.com> - 2012-11-26 17:44 -0600
Re: little-endian Robin Vowels <robin.vowels@gmail.com> - 2012-11-28 23:43 -0800
Re: little-endian Robert Wessel <robertwessel2@yahoo.com> - 2012-11-29 22:46 -0600
Re: little-endian BGB <cr88192@hotmail.com> - 2012-11-26 08:30 -0600
Re: little-endian Robin Vowels <robin.vowels@gmail.com> - 2012-11-28 23:45 -0800
Page 2 of 2 — ← Prev page 1 [2]
| From | "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> |
|---|---|
| Date | 2012-11-18 10:29 +0100 |
| Message-ID | <1aryj4mzb1le5.13ylu8880ehrj$.dlg@40tude.net> |
| In reply to | #2504 |
On Sun, 18 Nov 2012 03:03:52 -0600, BGB wrote: > or when dealing with file-formats. Provided the file as a transport is well-defined, which is not necessarily the case. It depends on the operating system, some have record-oriented files some do translation (most notably LF/CR stuff) etc. When the file is read using a stream interface (e.g. fgetc), there is a whole pile of I/O layers beneath that with their encoding and recoding skeletons in the cupboard. > other times (depending on how the format is used), it may make sense to > use structs, but simply define all of the members as byte-arrays, and > then use functions to read/write the values from the structures (this > makes things like type-alignment largely a non-issue). I dropped using that pattern long ago. It is too complicated to maintain and to keep portable with little or no performance advantages. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de
[toc] | [prev] | [next] | [standalone]
| From | BGB <cr88192@hotmail.com> |
|---|---|
| Date | 2012-11-18 12:50 -0600 |
| Message-ID | <k8bar5$pch$1@news.albasani.net> |
| In reply to | #2506 |
On 11/18/2012 3:29 AM, Dmitry A. Kazakov wrote: > On Sun, 18 Nov 2012 03:03:52 -0600, BGB wrote: > >> or when dealing with file-formats. > > Provided the file as a transport is well-defined, which is not necessarily > the case. It depends on the operating system, some have record-oriented > files some do translation (most notably LF/CR stuff) etc. When the file is > read using a stream interface (e.g. fgetc), there is a whole pile of I/O > layers beneath that with their encoding and recoding skeletons in the > cupboard. > typically, I do most IO in binary mode. the usual notion of a file is that it is a "bag of bytes". >> other times (depending on how the format is used), it may make sense to >> use structs, but simply define all of the members as byte-arrays, and >> then use functions to read/write the values from the structures (this >> makes things like type-alignment largely a non-issue). > > I dropped using that pattern long ago. It is too complicated to maintain > and to keep portable with little or no performance advantages. > IMO, it works ok for times where a person wants to essentially memory-map a large structure without having to decode the whole thing in the process (it may be decoded incrementally). this is in contrast to linearly reading/writing values, which is better for data which is encoded/decoded linearly, rather than incrementally or random-access. usually, this means parts of things like "image-files" and similar, many of these formats also incorporating data compression (sometimes, it is data that may be only MB on disk, but when unpacked may take up around 500MB-1GB or more of RAM). so, one may end up with data which gets compressed and decompressed dynamically. usually those byte-based structures may end up being things like index-tables or directory-tables, which refer to the actual data (which may be compressed). or such...
[toc] | [prev] | [next] | [standalone]
| From | Robin Vowels <robin.vowels@gmail.com> |
|---|---|
| Date | 2012-11-22 04:49 -0800 |
| Message-ID | <d94de019-0044-4ecd-a2b7-5a615738f186@y5g2000pbi.googlegroups.com> |
| In reply to | #2486 |
On Nov 16, 8:45 am, bob <b...@coolfone.comze.com> wrote: > Am I the only one who constantly gets confused that little-endian stores the big stuff at the end? > > Seems like a misnomer. Little endian is so-called because it's the least-significant byte that is fetched first.
[toc] | [prev] | [next] | [standalone]
| From | Jongware <jongware@no-spam.plz> |
|---|---|
| Date | 2012-11-23 15:22 +0100 |
| Message-ID | <50af8697$0$6979$e4fe514c@news2.news.xs4all.nl> |
| In reply to | #2510 |
On 22-Nov-12 13:49 PM, Robin Vowels wrote: > On Nov 16, 8:45 am, bob <b...@coolfone.comze.com> wrote: >> Am I the only one who constantly gets confused that little-endian stores the big stuff at the end? >> >> Seems like a misnomer. > > Little endian is so-called because it's the least-significant byte > that > is fetched first. The smallest value comes first? Then it should be called 'little beginning". Intel desktop CPUs are little-endian; since a value 0x01234567 gets stored in four consecutive bytes as data+0 : 0x67 data+1 : 0x45 data+2 : 0x23 data+3 : 0x01 the 'littlest' value gets placed at the end. [Jw]
[toc] | [prev] | [next] | [standalone]
| From | pacman@kosh.dhis.org (Alan Curry) |
|---|---|
| Date | 2012-11-25 19:39 +0000 |
| Message-ID | <k8ts65$udu$1@speranza.aioe.org> |
| In reply to | #2512 |
In article <50af8697$0$6979$e4fe514c@news2.news.xs4all.nl>, Jongware <jongware@no-spam.plz> wrote: > >The smallest value comes first? Then it should be called 'little beginning". > >Intel desktop CPUs are little-endian; since a value 0x01234567 gets >stored in four consecutive bytes as > >data+0 : 0x67 >data+1 : 0x45 >data+2 : 0x23 >data+3 : 0x01 > >the 'littlest' value gets placed at the end. You're insisting on the wrong meaning of the word "end", leading you to the conclusion that an object has one end, and the opposite of the end is the beginning. Look at the source material: (http://www.gutenberg.org/files/829/829.txt) |It began upon the following occasion. It is allowed on all hands, |that the primitive way of breaking eggs, before we eat them, was |upon the larger end; but his present majesty's grandfather, while |he was a boy, going to eat an egg, and breaking it according to |the ancient practice, happened to cut one of his fingers. |Whereupon the emperor his father published an edict, commanding |all his subjects, upon great penalties, to break the smaller end |of their eggs. All your statements using the phrases "the beginning" and "the end" are meaningless because in the sense used in the story, an egg has 2 ends and no beginnings. You can start eating it by breaking it on the big end or the little end. -- Alan Curry
[toc] | [prev] | [next] | [standalone]
| From | Jongware <jongware@no-spam.plz> |
|---|---|
| Date | 2012-11-26 12:01 +0100 |
| Message-ID | <50b34c0d$0$6901$e4fe514c@news2.news.xs4all.nl> |
| In reply to | #2515 |
On 25-Nov-12 20:39 PM, Alan Curry wrote: > In article <50af8697$0$6979$e4fe514c@news2.news.xs4all.nl>, > Jongware <jongware@no-spam.plz> wrote: >> >> The smallest value comes first? Then it should be called 'little beginning". >> >> Intel desktop CPUs are little-endian; since a value 0x01234567 gets >> stored in four consecutive bytes as >> >> data+0 : 0x67 >> data+1 : 0x45 >> data+2 : 0x23 >> data+3 : 0x01 >> >> the 'littlest' value gets placed at the end. > > You're insisting on the wrong meaning of the word "end", leading you to the > conclusion that an object has one end, and the opposite of the end is the > beginning. Look at the source material: > > (http://www.gutenberg.org/files/829/829.txt) > |It began upon the following occasion. It is allowed on all hands, > |that the primitive way of breaking eggs, before we eat them, was > |upon the larger end; but his present majesty's grandfather, while > |he was a boy, going to eat an egg, and breaking it according to > |the ancient practice, happened to cut one of his fingers. > |Whereupon the emperor his father published an edict, commanding > |all his subjects, upon great penalties, to break the smaller end > |of their eggs. > > All your statements using the phrases "the beginning" and "the end" are > meaningless because in the sense used in the story, an egg has 2 ends and no > beginnings. You can start eating it by breaking it on the big end or the > little end. This canonical example -- Gulliver's Travels -- was written to illustrate the absurdedness of human behavior. When used in a quantifiable, enumeratable environment such as "the order of bytes in memory" it makes perfect sense, since memory has an enumerated "beginning" (0) and "end" (the maximum address). It's not as if the nomenclature has been adopted by a random process. [Jw]
[toc] | [prev] | [next] | [standalone]
| From | "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> |
|---|---|
| Date | 2012-11-26 14:02 +0100 |
| Message-ID | <owiwpvpz9zuv.t0rdl1tn7olg.dlg@40tude.net> |
| In reply to | #2518 |
On Mon, 26 Nov 2012 12:01:32 +0100, Jongware wrote: > This canonical example -- Gulliver's Travels -- was written to > illustrate the absurdedness of human behavior. When used in a > quantifiable, enumeratable environment such as "the order of bytes in > memory" it makes perfect sense, since memory has an enumerated > "beginning" (0) and "end" (the maximum address). 1. Ends of an egg are clearly "enumeratable," since there are only two of them. Lilliputians successfully enumerated them as "little end" and "big end." The problem here is not human behavior nor inability to enumerate, the problem is lack of preferred order. There are more than one way to enumerate ends of an egg. 2. Regarding memory beginning and end, it is only a flat memory model which has them. Otherwise see: http://en.wikipedia.org/wiki/X86_memory_segmentation Machine addresses are not necessarily a total order, not even necessarily comparable, especially when dealing with 8-/16-bit architectures. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de
[toc] | [prev] | [next] | [standalone]
| From | Jongware <jongware@no-spam.plz> |
|---|---|
| Date | 2012-11-26 15:34 +0100 |
| Message-ID | <50b37e0a$0$6877$e4fe514c@news2.news.xs4all.nl> |
| In reply to | #2519 |
On 26-Nov-12 14:02 PM, Dmitry A. Kazakov wrote: > On Mon, 26 Nov 2012 12:01:32 +0100, Jongware wrote: > >> This canonical example -- Gulliver's Travels -- was written to >> illustrate the absurdedness of human behavior. When used in a >> quantifiable, enumeratable environment such as "the order of bytes in >> memory" it makes perfect sense, since memory has an enumerated >> "beginning" (0) and "end" (the maximum address). > > 1. Ends of an egg are clearly "enumeratable," since there are only two of > them. Lilliputians successfully enumerated them as "little end" and "big > end." The problem here is not human behavior nor inability to enumerate, > the problem is lack of preferred order. There are more than one way to > enumerate ends of an egg. > > 2. Regarding memory beginning and end, it is only a flat memory model which > has them. Otherwise see: > > http://en.wikipedia.org/wiki/X86_memory_segmentation > > Machine addresses are not necessarily a total order, not even necessarily > comparable, especially when dealing with 8-/16-bit architectures. Hardware makes no difference. There are memory configurations with even bytes in one memory bank and odd bytes in another, but from the perspective of a CPU, any unit longer than a byte is still either big-endian or little-endian (*). "The perspective of a CPU" is "when reading consecutive bytes, how are those to be assembled into a longer unit". It doesn't really matter if these 'consecutive bytes' /actually/ come from different memory segments, memory banks, or in the form of zeros and ones off an infinitely long magnetic tape. (*) Let's forget "middle-endian" systems for now, to not further add to the confusion :) [Jw]
[toc] | [prev] | [next] | [standalone]
| From | "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> |
|---|---|
| Date | 2012-11-26 17:03 +0100 |
| Message-ID | <4wxu3s1kkgn8$.z9ay5l3qg406.dlg@40tude.net> |
| In reply to | #2521 |
On Mon, 26 Nov 2012 15:34:48 +0100, Jongware wrote: > On 26-Nov-12 14:02 PM, Dmitry A. Kazakov wrote: >> On Mon, 26 Nov 2012 12:01:32 +0100, Jongware wrote: >> >>> This canonical example -- Gulliver's Travels -- was written to >>> illustrate the absurdedness of human behavior. When used in a >>> quantifiable, enumeratable environment such as "the order of bytes in >>> memory" it makes perfect sense, since memory has an enumerated >>> "beginning" (0) and "end" (the maximum address). >> >> 1. Ends of an egg are clearly "enumeratable," since there are only two of >> them. Lilliputians successfully enumerated them as "little end" and "big >> end." The problem here is not human behavior nor inability to enumerate, >> the problem is lack of preferred order. There are more than one way to >> enumerate ends of an egg. >> >> 2. Regarding memory beginning and end, it is only a flat memory model which >> has them. Otherwise see: >> >> http://en.wikipedia.org/wiki/X86_memory_segmentation >> >> Machine addresses are not necessarily a total order, not even necessarily >> comparable, especially when dealing with 8-/16-bit architectures. > > Hardware makes no difference. There are memory configurations with even > bytes in one memory bank and odd bytes in another, but from the > perspective of a CPU, any unit longer than a byte is still either > big-endian or little-endian (*). Least addressable machine unit is not necessarily byte. E.g. some DSP's had it 32-bit, AFAIK. > "The perspective of a CPU" is "when > reading consecutive bytes, how are those to be assembled into a longer > unit". "Consecutive" presumes certain address arithmetic. Which brings you back to the issue of the memory model. Let us not forget the addressing modes! Of course, you could always enumerate all memory units just because any computer is a finite state machine. But that does not mean that the way you did it, is how the things are. Moreover the order may depend on the machine state, e.g. numerically same addresses may correspond to physically different units. It is just a model, it is not the reality. This is why endianness issue exists. > It doesn't really matter if these 'consecutive bytes' /actually/ > come from different memory segments, memory banks, or in the form of > zeros and ones off an infinitely long magnetic tape. Yes, if you handle these units locally. In that case you may ignore details provided that what you write is what you read back (not always so, but almost always). But if these memory units are used to communicate with the outer world, both sides must use same order. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de
[toc] | [prev] | [next] | [standalone]
| From | Robert Wessel <robertwessel2@yahoo.com> |
|---|---|
| Date | 2012-11-26 17:44 -0600 |
| Message-ID | <ujv7b8da0e0d42asjkp7pbsomel2l3ko93@4ax.com> |
| In reply to | #2521 |
On Mon, 26 Nov 2012 15:34:48 +0100, Jongware <jongware@no-spam.plz> wrote: >On 26-Nov-12 14:02 PM, Dmitry A. Kazakov wrote: >> On Mon, 26 Nov 2012 12:01:32 +0100, Jongware wrote: >> >>> This canonical example -- Gulliver's Travels -- was written to >>> illustrate the absurdedness of human behavior. When used in a >>> quantifiable, enumeratable environment such as "the order of bytes in >>> memory" it makes perfect sense, since memory has an enumerated >>> "beginning" (0) and "end" (the maximum address). >> >> 1. Ends of an egg are clearly "enumeratable," since there are only two of >> them. Lilliputians successfully enumerated them as "little end" and "big >> end." The problem here is not human behavior nor inability to enumerate, >> the problem is lack of preferred order. There are more than one way to >> enumerate ends of an egg. >> >> 2. Regarding memory beginning and end, it is only a flat memory model which >> has them. Otherwise see: >> >> http://en.wikipedia.org/wiki/X86_memory_segmentation >> >> Machine addresses are not necessarily a total order, not even necessarily >> comparable, especially when dealing with 8-/16-bit architectures. > >Hardware makes no difference. There are memory configurations with even >bytes in one memory bank and odd bytes in another, but from the >perspective of a CPU, any unit longer than a byte is still either >big-endian or little-endian (*). "The perspective of a CPU" is "when >reading consecutive bytes, how are those to be assembled into a longer >unit". It doesn't really matter if these 'consecutive bytes' /actually/ >come from different memory segments, memory banks, or in the form of >zeros and ones off an infinitely long magnetic tape. > >(*) Let's forget "middle-endian" systems for now, to not further add to >the confusion :) Also needing to be excluded are machines with minimum addressable units larger than a byte (IOW, word-addressed machines). On word addressed machines without hardware sub-word access, endianness is just by (software) convention.
[toc] | [prev] | [next] | [standalone]
| From | Robin Vowels <robin.vowels@gmail.com> |
|---|---|
| Date | 2012-11-28 23:43 -0800 |
| Message-ID | <29e0b14b-a7aa-4d42-a9ab-6f89f5fa53dd@uk1g2000pbb.googlegroups.com> |
| In reply to | #2525 |
On Nov 27, 10:43 am, Robert Wessel <robertwess...@yahoo.com> wrote: > Also needing to be excluded are machines with minimum addressable > units larger than a byte (IOW, word-addressed machines). On word > addressed machines without hardware sub-word access, endianness is > just by (software) convention. Even with word machines (with or without hardware sub-word access) there is an endian-ness for precision requiring multiple words, and structures, etc.
[toc] | [prev] | [next] | [standalone]
| From | Robert Wessel <robertwessel2@yahoo.com> |
|---|---|
| Date | 2012-11-29 22:46 -0600 |
| Message-ID | <mcegb894dm6nl99b4fq2p6ohgojo25gb0l@4ax.com> |
| In reply to | #2539 |
On Wed, 28 Nov 2012 23:43:22 -0800 (PST), Robin Vowels <robin.vowels@gmail.com> wrote: >On Nov 27, 10:43 am, Robert Wessel <robertwess...@yahoo.com> wrote: > >> Also needing to be excluded are machines with minimum addressable >> units larger than a byte (IOW, word-addressed machines). On word >> addressed machines without hardware sub-word access, endianness is >> just by (software) convention. > >Even with word machines (with or without hardware sub-word access) >there is an endian-ness for precision requiring multiple words, >and structures, etc. But that's usually only a software issue.
[toc] | [prev] | [next] | [standalone]
| From | BGB <cr88192@hotmail.com> |
|---|---|
| Date | 2012-11-26 08:30 -0600 |
| Message-ID | <k8vuib$p12$1@news.albasani.net> |
| In reply to | #2518 |
On 11/26/2012 5:01 AM, Jongware wrote:
> On 25-Nov-12 20:39 PM, Alan Curry wrote:
>> In article <50af8697$0$6979$e4fe514c@news2.news.xs4all.nl>,
>> Jongware <jongware@no-spam.plz> wrote:
>>>
>>> The smallest value comes first? Then it should be called 'little
>>> beginning".
>>>
>>> Intel desktop CPUs are little-endian; since a value 0x01234567 gets
>>> stored in four consecutive bytes as
>>>
>>> data+0 : 0x67
>>> data+1 : 0x45
>>> data+2 : 0x23
>>> data+3 : 0x01
>>>
>>> the 'littlest' value gets placed at the end.
>>
>> You're insisting on the wrong meaning of the word "end", leading you
>> to the
>> conclusion that an object has one end, and the opposite of the end is the
>> beginning. Look at the source material:
>>
>> (http://www.gutenberg.org/files/829/829.txt)
>> |It began upon the following occasion. It is allowed on all hands,
>> |that the primitive way of breaking eggs, before we eat them, was
>> |upon the larger end; but his present majesty's grandfather, while
>> |he was a boy, going to eat an egg, and breaking it according to
>> |the ancient practice, happened to cut one of his fingers.
>> |Whereupon the emperor his father published an edict, commanding
>> |all his subjects, upon great penalties, to break the smaller end
>> |of their eggs.
>>
>> All your statements using the phrases "the beginning" and "the end" are
>> meaningless because in the sense used in the story, an egg has 2 ends
>> and no
>> beginnings. You can start eating it by breaking it on the big end or the
>> little end.
>
> This canonical example -- Gulliver's Travels -- was written to
> illustrate the absurdedness of human behavior. When used in a
> quantifiable, enumeratable environment such as "the order of bytes in
> memory" it makes perfect sense, since memory has an enumerated
> "beginning" (0) and "end" (the maximum address). It's not as if the
> nomenclature has been adopted by a random process.
>
the issue here though is the use of the term "end".
typically, in reference to the use of "little-endian" vs "big-endian",
it is the question "which end of the number comes first".
typically, "little-endian" then means "little-end comes first" (or,
"least significant byte comes first"), and "big-endian" means "big-end
comes first" ("most significant byte comes first").
where "first" here can be taken as "lowest address in memory".
example (little-endian):
address+0=LSB ("little end")
...
address+3=MSB ("big end")
example (big-endian):
address+0=MSB ("big end")
...
address+3=LSB ("little end")
[toc] | [prev] | [next] | [standalone]
| From | Robin Vowels <robin.vowels@gmail.com> |
|---|---|
| Date | 2012-11-28 23:45 -0800 |
| Message-ID | <edd6a945-71bf-4145-b43e-9a6fc5267996@jl13g2000pbb.googlegroups.com> |
| In reply to | #2515 |
On Nov 26, 6:39 am, pac...@kosh.dhis.org (Alan Curry) wrote: > All your statements using the phrases "the beginning" and "the end" are > meaningless because in the sense used in the story, an egg has 2 ends and no > beginnings. You can start eating it by breaking it on the big end or the > little end. Or you can cut it in halves, or you can peel the eggshell (as in the case of a hard-boiled egg).
[toc] | [prev] | [standalone]
Page 2 of 2 — ← Prev page 1 [2]
Back to top | Article view | comp.programming
csiph-web