Brian, I think I'm getting the hang of it. The code in the fortran interface is the culprit since it relies on HDS_PTYPE == F77_INTEGER_TYPE. The comment in hds1.h concerning changing the file format if HDS_PTYPE is set to long long worries me a bit since it implies that if I create a file with HDS_PTYPE == long long that it won't be readable on the same computer where HDS was compiled with HDS_PTYPE == int. If that is true then HDS_PTYPE is extremely dangerous. Does HDS spot the problem? Does the file format say whether HDS_PTYPE is 8 bytes or 4 so that it can convert? Can a new format file be read on a system that does not have an 8 byte INT_BIG? (but is compiled with the current codebase) Or does this switch to HDS64 mean that we are now locked into 8 byte integers? Currently the test for INT_BIG == long long does not allow for a 'long long' being unavailable. Should the compiler switch to 4 byte long for INT_BIG or should it refuse to compile because it won't be able to read the files anyway? I've had a go at building with HDS_64 defined. It fixes the signedness problem since HDS_64 seems to be entirely designed for the case where sizeof(HDS_PTYPE) != sizeof(Fortran int). Once I'd fixed a problem in the fortran interface (dat_shape was not getting it's return values) I've now got hds_test.f core dumping when it annuls the first HDS locator. #0 0x00a92d40 in dat1_cvt_dtype (bad=-1207970304, nval=200, imp=0x8de8908, exp=0x0, nbad=0xbfebe874) at daucnv.c:183 183 des[n] = (_INTEGER) src[n]; /* Overflow? */ #1 0x00a96bb4 in dat1_cvt (bad=1, nval=200, imp=0x8de6d7c, exp=0x8de6d88, nbad=0xbfebe874) at dautypes.c:148 #2 0x00a95085 in dau_flush_data (data=0x8de6d40) at dauflush.c:109 #3 0x00a8f551 in datUnmap (locator_str=0xb7ffd600 "", status=0xbfebe92c) at datmap.c:532 #4 0x00aa3631 in dat_unmap_ (locator=0xbfebe930 "8mb\177\177\177\177\002", status=0xbfebe92c, locator_length=15) at fortran_interface.c:1905 #5 0x08048a58 in MAIN__ () at hds_test.f:83 I'm assuming the problem is that exp is a null pointer on entry and daucnv.c does not check for this error condition. 'exp' is defined in the routine above but not by the time it is passed to dat1_cvt_dtype. This is well out of my depth though. So to summarise: * Must HDS_PTYPE be identical on all systems that use HDS64 for the files to interoperate? * Should HDS_PTYPE always be a fortran int? I hope you have time to answer my worries. Tim On Wed, 7 Sep 2005, Tim Jenness wrote: > Okay. The problem seems to be in HDS_PTYPE. Since it was a dimension I made > it unsigned rather than signed but that has caused big problems. > > Brian: any comment? > > I don't know why but I'll revert that change in CVS and then try to see if > it's an obvious problem with the fortran interface somewhere (which has a > signed/unsisgned issue). > > Tim > > On Wed, 7 Sep 2005, Tim Jenness wrote: > >> >> Warning: I think HDS (HDS64 after merge and tweaks) broke in the past few >> days. I haven't worked out when but if I do an fits2ndf on >> >> http://www.jach.hawaii.edu/~timj/c18o.fit >> >> I get a file that is listed as 137439196672 bytes. It really did take up >> that much disk space but a reboot and jorunal fix listed the file as 245760 >> bytes (the correct size) but still took up 137MB until it was rm'ed. >> >> I'm going to have to try to rebuild HDS from the past few days to work out >> exactly when it broke. >> >> > > -- Tim Jenness JAC software http://www.jach.hawaii.edu/~timj