[comp.sys.apple] GBBS Pro 1.3x clock patch

acct069@carroll1.cc.edu (Ron Higgins) (01/06/90)

There is a bug in GBBS Pro 1.3j that screws up the date.  Instead of
reading 01/01/90   it read   01/01/8:

You can fix this by installing ACOS 2.0 (free for registered owners by
calling the L&L support BBS and d/ling it), or by installing the following
patch.

One note, the patch causes a problem with when$ in ACOS and will display
12/31/9/   instead of   12/31/89    This is evident when the BBS is
displaying a users last date on, etc....  It will fix itself when a user
logs off for the first time in 1990.



                Acos Date Fix: By Mach Three/Kenrick Mock
            The Sound Barrier BBS: 916-758-9540 - 9600, 60 Megs
                                12/14/89


   I don't know if there is a date fix out there already, but I was taking a
study break from finals (UC Davis CS - Lisp is evil!)  and just whipped this
up.  If a fix already exists, then ignore this message.

   Anyway, most of you are probably aware that when Jan 1, 1990 rolls around,
ACOS will print out the date "01/01/8:" due to the insertion of hard-coded
dates in ACOS.  I guess Greg never thought that Acos would last past the 80's.

   To fix this is pretty simple.  Get out block warden and follow your
ACOS.OBJ file.

   Next, search for $18 69 30 8D.  It should be found on relative block 28.
The exact offset will be different for different versions of ACOS.   Change
the 30 to a 26 and write the block back to disk.

   Next, search for $2F 32 30 2F 38.  It should also be found on relative
block 28.  The exact offset will be different for different versions of ACOS.
Change the 38 to 39 and write the block back to disk.

   This patch will work until the first day of 1996.  At that time, ACOS will
mess up yet again.  However, I do not foresee anyone running an ACOS based BBS
in the year 1996 so I seriously doubt this will be a problem.  (I guess it
made it this far - you never know?! In any case, another fix will be easy)


                                 - - -

   What is going on for those who care:

ACOS calls the standard prodos-8 MLI interface with the date parameter.
The date is returned, and loaded into the accumulator and the X register.
The year (0-99) is stored in the high 7 bits of A.  ACOS basically does
something like this to it:

   STA $00
   ...
   LSR $00      ; Shift to the right so the year is accessible as a normal #
   ...
   AND #$0F     ; Chop off the left half of the year!  (tens digit of year)
   CLC          ; Prepare for add
   ADC #$30     ; Add #$30 to get the ASCII number 0 - 9  (ones digit of year)
   STA ONES     ; Store it someplace
   ...
   RTS

TENS:38         ; 38 in ASCII is "8".  Hard codes the tens digit of year
ONES:xx         ; the one's digit of the year is stored here

If anyone wants to check out the date routine, it starts at $3ECA (at least
on my version of ACOS; might be different on others, but will probably be
nearby).  It's not a real exciting routine anyway, but whatever...

Mach Three/Ken

[Warning:  Installing this patch should be done on a backup of your
ACOS.OBJ file.  I take no responsibility for any damage or support of the
above patch.  I'm only posting this so that people can see it.]