Posted by Robert G Laurin (216.209.200.220) on November 05, 2004 at 05:32:41:
Way back in February I created a new file (189 bytes) and by the time I was done writing my code, I found that I had created it too short. So I used the Option 13 - DIRMAINT Option 4 to Change the Record Length to 300 (no data had been written yet).
About a dozen records were put in this file and not modified since.
So far so good.
Months later in August, following a crash, I rebuilt the directory. I did not notice but the file entry was re-created using the original file length of 189.
Somehow all the programs reading that file never crashed once. None of the regular programs wrote to that file. When I tried modifying one of the records using the program I wrote way back, it crashed with an array subscript out of range (trying to write 300 in a 189 file).
After investigating, I discovered that the I00 showed a record length of 189 ($00BD). I manually edited the .I00 and changed the record length in it to 300 ($012C) and used DIRMAINT to change the entry back from 189 to 300.
After I did that, the file got kind of "stuck" in the NLM and whenever I tried accessing the data, it gave me a record of 300 but showed only the first 189 bytes. Even QMAINT in Hex showed only first 189 bytes with $20 and all and the remainder of the record showed NOTHING not even $00 just blanks in the hex section.
I had to unload the NLM to release the file. After that it was fine... weird eh!
Now I am wondering, why doesn't DIRMAINT peek or poke in the .I00 of keyed files when record length is changed?