In the European part of Usenet, there is a newsgroup called Maus.sys.ql. This newsgroup is for the discussion of all things QL. Due to the low numbers of American QLers that read Usenet, a Usenet feed has not been established.
I have established an e-mail feed from the newsgroup. This means that all articles posted to maus.sys.ql will be mailed to my e-mail account. Others that would like this service can contact Jeorg_Lehers@arbi.informatik.uni- oldenburg.de. I can also send all that I get to others. Just send me a note. To post messages from the Internet, send a mail message to: maus.sys.ql@arbi.Informatik.Uni- Oldenburg.de.
For the European readers, there is a number of BBS’s (called QBOXnet) that carry the same articles. Below is a list of them:
Fourth Dimension +44-202600305 (England)
Grizzilius Maximus +44-772828975 (England)
TF Services +44-717062379 (England)
Blanford BBS +44-258455117 (England)
Aspects +44-617920260 (England)
Quanta NE BBS +44-914775472 (England)
Jamten TCL +46-64133330 (Sweden)
Andromeda BBS +39-6-3251114 (Italy)
Lau’s Place +44-253780021 (England)
SYNCNET +31-35-237178 (Holland)
QLAT +31-30-962265 (Holland)
KU-EL-TEL +31-1650-37105 (Holland)
Here are some of the more interesting tidbits coming out of the newsgroup:
From Dave Walker:
I would like to know how the EJC libraries have been made fully re-entrant and romable. About 90% of library routines refer to glogal variables such as ‘errno’ in real C programs. This makes it rather difficult to write properly re-entrant code. I agree that individual routines that make this assumption CAN be made romable, but that does not solve the generic problem – it just means that you can write single routines that are romable.
Peter Sulzer replies:
I can tell you, I’ve written a reentrant, ROMable startup module for Lattice some time ago (but was too lazy to write a library – it was long before C68, and I’m afraid the C68 libs must be rewritten for that startup module).
You use option -b in the first compiler phase (OK you know this). Now comes the trick, your startup module allocates the memory for all the static data, e.g. in a “data-job”. Then you copy all static data (in fact one must only copy the static initialised data) to the allocated memory. Of course your static data area is limited to max. 64 K – in fact I found no way to force the linker to use a +32K offset enabling static data from -32K to +32K. It worked only with an offset of 0, so the max. static data is 0 to +32K.
Of course one must also usse option -r in the second phase, limiting the code size of the program to max. 32K (perhaps less – at least with my startup module).
I assume text87 plus4 does the same, cause you can save memory when you have executed it, if you make it non-reentrant so that the static data mustn’t be copied.
From Jan Bredenbeek:
I have the runtime version of C68 v3.01 for download or file request on my board. File names are C68V301A.ZIP, C68V301B.ZIP, C68V301C.ZIP for the contents of Disk 1, 2, and 3 respectively.
Beware though: The three files are together 800K in size (300 for A and 250 for each of the other two) so if you’re calling from outside the Netherlands it’s better to use a 9600+ modem, unless you have access to a phone line you can use on someone elses dime :-).
(See SYNCNET in the above list)
From Franz Herrmann:
I can only repeat that neither any part of C68 itself nor any compiled prog worked on an ExeQtor machine, Gold Card v2.25. We tried it with Minverva and MGG ROM. No difference. We loaded Pointer Environment, Lighting, etc., removed the extensions piece by piece to find out which was causing the crashes. Even on the plain machine, nothing worked.
Possibly GC v2.28 fixes that. I don’t know, I am just reporting what I saw (Fortunately, I have no probs on my own QLs.)
From Franz Herrmann:
Dave, Some notes on C68 v3.01, which is simply excellent,
..C68 does not report an error with such a definition: static char *test = “Hello World” (static char test[] = … would be correct) Instead C68 runs into an endless loop!!! (C68 v2.x accepted the fault!)
Peter Sulzer replies:
>Right, I looked at K&R, both are legal. They are not completely different but exactly the same.
^^^^^^^^^^^^^^^^^^^^^
Sorry Franz, you think wrong 🙂
static char *test = “Hello World” defines a pointer (
one longword in C68) which points to the string “Hello World”. The pointer may be at a totally different location in memory than the string itself.
static char test[] = “Hello World” defines a vector of
char, 12 bytes long, containing the characters ‘H’,’e’,… ‘d’,’
Skip to contentMaus.sys.ql
In the European part of Usenet, there is a newsgroup called Maus.sys.ql. This newsgroup is for the discussion of all things QL. Due to the low numbers of American QLers that read Usenet, a Usenet feed has not been established.
I have established an e-mail feed from the newsgroup. This means that all articles posted to maus.sys.ql will be mailed to my e-mail account. Others that would like this service can contact Jeorg_Lehers@arbi.informatik.uni- oldenburg.de. I can also send all that I get to others. Just send me a note. To post messages from the Internet, send a mail message to: maus.sys.ql@arbi.Informatik.Uni- Oldenburg.de.
For the European readers, there is a number of BBS’s (called QBOXnet) that carry the same articles. Below is a list of them:
Fourth Dimension +44-202600305 (England)
Grizzilius Maximus +44-772828975 (England)
TF Services +44-717062379 (England)
Blanford BBS +44-258455117 (England)
Aspects +44-617920260 (England)
Quanta NE BBS +44-914775472 (England)
Jamten TCL +46-64133330 (Sweden)
Andromeda BBS +39-6-3251114 (Italy)
Lau’s Place +44-253780021 (England)
SYNCNET +31-35-237178 (Holland)
QLAT +31-30-962265 (Holland)
KU-EL-TEL +31-1650-37105 (Holland)
Here are some of the more interesting tidbits coming out of the newsgroup:
From Dave Walker:
I would like to know how the EJC libraries have been made fully re-entrant and romable. About 90% of library routines refer to glogal variables such as ‘errno’ in real C programs. This makes it rather difficult to write properly re-entrant code. I agree that individual routines that make this assumption CAN be made romable, but that does not solve the generic problem – it just means that you can write single routines that are romable.
Peter Sulzer replies:
I can tell you, I’ve written a reentrant, ROMable startup module for Lattice some time ago (but was too lazy to write a library – it was long before C68, and I’m afraid the C68 libs must be rewritten for that startup module).
You use option -b in the first compiler phase (OK you know this). Now comes the trick, your startup module allocates the memory for all the static data, e.g. in a “data-job”. Then you copy all static data (in fact one must only copy the static initialised data) to the allocated memory. Of course your static data area is limited to max. 64 K – in fact I found no way to force the linker to use a +32K offset enabling static data from -32K to +32K. It worked only with an offset of 0, so the max. static data is 0 to +32K.
Of course one must also usse option -r in the second phase, limiting the code size of the program to max. 32K (perhaps less – at least with my startup module).
I assume text87 plus4 does the same, cause you can save memory when you have executed it, if you make it non-reentrant so that the static data mustn’t be copied.
From Jan Bredenbeek:
I have the runtime version of C68 v3.01 for download or file request on my board. File names are C68V301A.ZIP, C68V301B.ZIP, C68V301C.ZIP for the contents of Disk 1, 2, and 3 respectively.
Beware though: The three files are together 800K in size (300 for A and 250 for each of the other two) so if you’re calling from outside the Netherlands it’s better to use a 9600+ modem, unless you have access to a phone line you can use on someone elses dime :-).
(See SYNCNET in the above list)
From Franz Herrmann:
I can only repeat that neither any part of C68 itself nor any compiled prog worked on an ExeQtor machine, Gold Card v2.25. We tried it with Minverva and MGG ROM. No difference. We loaded Pointer Environment, Lighting, etc., removed the extensions piece by piece to find out which was causing the crashes. Even on the plain machine, nothing worked.
Possibly GC v2.28 fixes that. I don’t know, I am just reporting what I saw (Fortunately, I have no probs on my own QLs.)
From Franz Herrmann:
Dave, Some notes on C68 v3.01, which is simply excellent,
..C68 does not report an error with such a definition: static char *test = “Hello World” (static char test[] = … would be correct) Instead C68 runs into an endless loop!!! (C68 v2.x accepted the fault!)
Peter Sulzer replies:
>Right, I looked at K&R, both are legal. They are not completely different but exactly the same.
^^^^^^^^^^^^^^^^^^^^^
Sorry Franz, you think wrong 🙂
static char *test = “Hello World” defines a pointer (
one longword in C68) which points to the string “Hello World”. The pointer may be at a totally different location in memory than the string itself.
static char test[] = “Hello World” defines a vector of
char, 12 bytes long, containing the characters ‘H’,’e’,… ‘d’,’\0′. The first construct needs 12+4=16 bytes, the second 12 bytes.
Erik Slagter replies:
What Peter Sulzer says holds ONLY within a struct or union. Anywhere else it implies THE SAME level of indirection namely one. The only difference of *test and test[] outside the struct/union is that test[x] may be altered and *(test+x) may not be altered. This is because space is allocated for test[x] on the stack whilst *test points to a location in program memory.
From Dave Woodman:
Further to my last message, the source files for the QDOS port of cpp have now been uploaded to garbo.uwasa.fi and may be found under the /ql/unsorted. Please not that the file is in zip format. All those with anonymouse ftp may snarf to their hearts content.
Yes, Peter, you are right:- ascii files only on garbo!
Products
Downloadable Media
Tags
People
Erik Slagter replies:
What Peter Sulzer says holds ONLY within a struct or union. Anywhere else it implies THE SAME level of indirection namely one. The only difference of *test and test[] outside the struct/union is that test[x] may be altered and *(test+x) may not be altered. This is because space is allocated for test[x] on the stack whilst *test points to a location in program memory.
From Dave Woodman:
Further to my last message, the source files for the QDOS port of cpp have now been uploaded to garbo.uwasa.fi and may be found under the /ql/unsorted. Please not that the file is in zip format. All those with anonymouse ftp may snarf to their hearts content.
Yes, Peter, you are right:- ascii files only on garbo!