
In article <20000128025100.16723.00000388@ng-fr1.aol.com>,
supertimer@aol.com (Supertimer) wrote:

>ProDOS is a different story.  I don't know the full story, but I think
>ProDOS 8 sometimes thinks 00 is either NO DATE or that 00 is
>before 99.

I believe that the ProDOS 8 problem is not a new one, not specifically
Y2K. If I remember correctly, it has to be patched every few (about six)
years to handle dates properly.  I thought I had instructions for a patch
to do this but I can't seem to find it at the moment....  Nope, just found
it.  Unfortunately, I don't seem to have saved the name of the individual
who made this post, or even whether it came through from Delphi or here. 
Many thanks to that person and please claim credit if you read this.
-----
A post on comp.sys.apple2 reminded me that the year look-up table in
ProDOS 8 expires periodically. Specifically, the look-up table in version
2.0.3 (the last version released by Apple) was only good through 1998.
1999 is here, of course...I don't know if this subject has been brought up
on Delphi, but if you're using a clock card in a IIe, your computer now
thinks it's 1993 again! 
Here's some of the text from a message I posted to comp.sys.apple2 on this
subject: 

ProDOS will need to be updated once every five or six years. Apple
released a version of ProDOS specifically to deal with this problem
happening once before, in 1992. I found a directory on my hard drive that
I'd forgotten about; it had a version "1.9A" of ProDOS that I had hacked
on New Year's '92 to get the clock to work right again (I was running a
BBS on my IIe at the time, so having the right date was important). ProDOS
8 v2.0.1, which fixed the problem, was released on 4 Mar 92 (I don't
recall if there was a v2.0 that was released earlier). 
Since ProDOS was designed with the Thunderclock (a clock card that didn't
keep track of the year at all) in mind, it used a look-up table to
determine the year. I haven't looked at the actual code, but I imagine it
uses the current Julian date mod 7 and the day of the week to index into
the table. I found the table in the then-current version of ProDOS and
changed it to cover a different range of years. 
Here's something I came up with on my own to figure the current year from
the current month, date, and day of the week. First, convert the month and
date to a single number. Add the date to the appropriate number from this
table: 

Jan=0 Jul=181
Feb=31   Aug=212
Mar=59   Sep=243
Apr=90   Oct=273
May=120  Nov=304
Jun=151  Dec=334
Divide this number by 7. Subtract from the remainder the day-of-week
number; the day-of-week number is a simple progression where Sunday is 0,
Monday is 1, and so on up to 6 for Saturday. If the difference is
positive, it's your offset into the look-up table. If it's negative, add 7
and use that as your offset into the look-up table. I'm guessing that the
Thunderclock driver inside ProDOS does something similar; I crunched the
numbers, and they agree with the tables I've found in different ProDOS
versions. 
I diff'd my "v1.9A" and the actual v1.9, which I had backed up on floppy.
The year table was at offset 0x3276-0x327C in both files. v1.9 had a table
to cover 1986 to 1991 (the decimal value of the last two digits of a year
is in each byte...the sequence from v1.8 is 0x5A (90), 0x59 (89), 0x58
(88), 0x58 (88), 0x57 (87), 0x56 (86), 0x5B (91). The revised table I put
together covered 1992 to 1996: 0x60 0x5F 0x5E 0x5D 0x5C 0x5C 0x60. In
v2.0.3 (the last version of ProDOS 8), the table lives at offset
0xF76-0xF7C and covers 1993 to 1998. Leap years appear twice in each
table, which is why they're only good for five or six years each instead
of seven. 
From this information, you can figure up revised tables for any range of
five or six years. For instance, here's a sequence that ought to be good
until 28 Feb 2004 (from 29 Feb 2004 to the end of that year, the year
would mistakenly be reported as 1999): 0x01 0x00 0x00 0x63 0x04 0x03 0x02.

In case someone hasn't already done this, here are some "cookbook"
instructions to patch ProDOS 8 v2.0.3 for years beginning with 1999. Go to
a BASIC.SYSTEM prompt and enter the following commands one at a time (snip
this out and put it in a script to EXEC if you want): 
BLOAD PRODOS,TSYS,A$2000
POKE 12150,1
POKE 12151,0
POKE 12152,0
POKE 12153,99
POKE 12154,4
POKE 12155,3
POKE 12156,2
BSAVE PRODOS,TSYS,A$2000

You might want to make a backup copy of your ProDOS file before you do
this, of course. When 2004 rolls around, you'll want to make up a new
table from the "formula" given earlier in this message; I'll leave that
table as an exercise for the reader. :-) 
I figured someone might find this useful...wish I'd kept the patch program
I whipped up in '92 to fix v1.9 as it would've taken less time to figure
it out this time around. :-)
-- 
Bill Robbins, mfumu@alphalink.com.au


