TIP: Click on subject to list as thread! ANSI
echo: muffin
to: Wes Garland
from: Bob Jones
date: 2003-07-02 11:15:12
subject: Data structures + version numbering

BJ> Ok.  Concerning binary data structures and word 
 BJ> alignment:  If we have to change the datastructures 
 BJ> that are written to the disk, we need to bump the 
 BJ> version number from 3.x to 4.0 and provide a 
 BJ> process to upgrade the data structures.  This is 
 BJ> one of the reasons for the bumps from 1.x to 2.0 
 BJ> and 2.x to 3.0.  
 WG>  
 WG> Oh, you raise a VERY valid point, which quite frankly, 
 WG> hadn't crossed my mind. If I can't get the data 
 WG> structures compatible, I may just bump the version 
 WG> number. My goal *is* compatibility though.

We should be able to get a way to at least read the old structures. 
Writing the old structures on 64 bit systems might have some issues that I
expect will force a data structure update.  I expect it to only be a speed
issue using the old data structures on 32 bit platforms that aren't little
endian....

 WG> You raise an interesting idea with the OpenStep file 
 WG> numbering, though. FWIW, Windows also does something 
 WG> similar with endian-checking in OLE2 files; it writes 
 WG> "FEFF" into the OLE2 header -- if it gets read back as 
 WG> "FFFE", it flips the endianess of all scalar types in 
 WG> the data file before the application has at 'em. (I 
 WG> think -- I've only read OLE2 files from UNIX :)

I believe this is the same type of thing OpenStep did.  If I remember
correctly, at least some of the binary data files have a version number
burried in them, so we should be able to use that to use this in the
future....  We may need to introduce a new (sub) version number field so
that when the "version number" is bumped to the next number, it
indicates to kick in the compatiblity issues....  That way we don't every
raise the version number so high that we have problems determining byte
order by reading the old version number.....

 WG> If we *do* bump the version numbers, we can gain some 
 WG> speed, though, particularly on big-endian hardware. I 
 WG> don't know if we need it, though, I'll worry about 
 WG> speed optimization when I've got everything else happy.  
 BJ> That's the advantage of EMX -- it is GCC running 
 BJ> under OS/2.  My other option is OpenWatcom under 
 BJ> OS/2.  Max was compiled for DOS, OS/2 and Win32 
 BJ> using an older Watcom compiler, before it was 
 BJ> turned into the free version available now.  
 BJ> Unfortunately, some items were deleted to make the 
 BJ> free version.....  So, I'll probably hit some 
 BJ> things when trying to go back to that 
 BJ> environment....
 WG>  
 WG> Yeah -- one of the reasons I'm suggesting sticking with OpenWatcom at 
 WG> this point is because at least some of scooter's asm 
 WG> code is to deal with bugs in the compiler (oh joy), 
 WG> such as te ordering of function calls during the 
 WG> atexit() sequence. If you switch compilers (and 
 WG> hopefully OW doesn't count as much of a switch), you'll 
 WG> have to pick through it and figure out which code is 
 WG> for work (i.e. FOSSIL calls) and which is for other 
 WG> stuff. Yucky.

:(

Let's see...  FOSSIL (or serial port issues) calls, console read &
write, trapping interupts (such as control-c (DOS, OS/2, Win32 and Linux),
etc....  I may have to start a list and start sorting out what does
what....

 WG> As long as EMX can call the native OS/2 API (16 and 32 
 WG> bit with appropriate.. what do you guys call those.. 
 WG> plonks?), I think it would be possible to do a port 
 WG> (although GCC is not the most optimized compiler out there!)

Good question on what it is properly called.  I picked OS/2 because I could
use it as a user and it supported the application I wanted in a true
pre-emptive multi-tasking environment......  And I had hopes to see the
source code for my applications, so that they could be ported some day if /
when the need arised.  With the code running on Linux, that should be the
last major port I have to make.  Yes, there will be some minor issues
(including clock issues), but once running under Linux, the upgrade path to
future hardware should become clear....

 WG> FWIW, changes I've made which are GCC-specific, I've 
 WG> tried to tag as such,to differentiate from UNIX-
 WG> specific changes; originally planning to help a djgpp 
 WG> porter, but it would help an EMX porter just as well.

Good.  That should work.....  Did you take advantage of any EMX code that
Scott may have already had?  In looking through the source code, I spotted
items that looked like there was atleast an attempt at getting Maximus to
compile under the GNU EMX port.

 WG> As for the bison changes -- I used a version of bison 
 WG> from '95 and it built out of the box. Only when I went 
 WG> to my solaris box (with "real" yacc) did it whine. And 
 WG> for no really good reason, the grammar was creative but 
 WG> I couldn't spot anything blatantly illegal. All I did 
 WG> was add some intermediate productions to shut the thing 
 WG> up (essentially, syntatic sugar in compiler compiler 
 WG> code. Yay!)

Ok.  That's probably to be expected with using the real yacc vs using
bison.  I haven't had to deal with those issues, just remember hearing of
them....

Thanks for the note....

Take care.....

Bob Jones, 1:343/41


--- Maximus/2 3.01
* Origin: Top Hat 2 BBS (1:343/41)
SEEN-BY: 633/267 270
@PATH: 343/41 10/345 106/1 2000 633/267

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.