PC bugs in Year 2000

      [time bomb]

      by Michael Paine

      In association with the Australian Open Access User Group

      Contents

      | Introduction | BIOS | Operating Systems | Software |
      | Help & Solutions | Key (problem) dates | Links |

      This page is mainly a brief summary of articles that appear at the foot of the page.

      Now that 1 January 2000 has arrived PCs with "motherboards" older than 1997 are likely to get the date wrong each time they start. The cheapest fix is simply the add the line DATE to AUTOEXEC.BAT. The computer will then prompt you for the date each time it starts (like the original IBM PC did!).

      Open Access and Y2K

      For "official" information about Open Access and the year 2000 see the DISPI Y2K page. Those outside Australia can order a patch from that website. Marc Sapper has the DISPI Year 2000 patch available for Australian Open Access users - this treats all two-digit years as 2000 (be careful because 20-04-99 will be treated as 20 April 2099). Send a cheque for $25 to Microguild, PO Box 3145 Ripponlea VIC 3183 and specify whether you want the patch sent by email or by diskette through the post. Marc is the OA distributor in Australia and also provides programming and technical services.

      Introduction

      Will your business or home computer work after 31 December 1999? Will your software handle the new century and, in particular, date calculations which span the changeover?

      These are not easy questions to answer. There are several things that can go wrong with the typical PC. These notes are intended to help Open Access Users identify whether they are likely to have problems.

      There are several levels of a PC which use dates and problems can occur in any of these levels. In short, it looks like Open Access software is the least of your problems!
      Top of page


      BIOS

      BIOS is loaded whenever the PC is booted (powered) up. Amongst many other things, this reads the date and time from a non-volatile (CMOS) memory (which, in turn, usually obtains power from a small battery on the motherboard - more on this later). If your PC BIOS was written before 1997 then there is a very high risk that it will not "roll over" correctly at midnight on 31 December 1999. The date might come out as 1900, 1948, 1980 or some other arbitrary date. Even if you set the date to post-1999 the CMOS will not store it correctly. There is even a slight risk that the PC will no longer boot if the system date (Sysdate) exceeds 1999 so it is very important that you have a complete back-up before you try setting the system date to beyond 1999 (and you thought that was a quick way to test if your BIOS is "2000 compliant"!). (If the PC does hang you might need to "reset" the CMOS by disconnecting or shorting the battery, if this is possible. This is a last resort, of course - check with an expert first).

      Even BIOS apparently written in 1997 has been found to have problems.

      A second possible BIOS problem is that it does not recognise that 2000 is a leap year, and therefore skips the date 29 February 2000 (you can check that Open Access is OK by searching Appointments for that date). This will mean the user will have to set the Sysdate to 29 Feb 2000 on that day (to ensure that the operatng system and software get it right) and also change the date back one day on 1 March 2000.

      Finally, the BIOS might get the day of the week wrong. This might not be a problem since the operating systems and software will probably do their own day of week calculations, based only on the Sysdate.

      BIOS/CMOS problems are probably the most insidious since just about every PC configuration is unique (eg customisation by the makers of motherboards). Even BIOS with the same version number has been found to behave differently. It is likely that most PC owners will be unable to successfully upgrade their BIOS.
      Top of page


      Operating System

      In theory DOS, Windows, Windows 95 and other popular operating systems should be able to handle post-1999 dates correctly. To avoid confusion, however, the default settings might need to be changed to always display dates with four digits for the year.

      The main problem with non-networked operating systems is that they usually* get the date from BIOS so a misbehaving BIOS will pass the problems on to the Operating System. This could mean, for example, that files stored on disk after 1999 end up with a 1980 date stamp and appear older than the 1999 versions. Consider disabling features which automatically archive files (or delete fiiles!) since you may lose data if it accidentally gets the wrong "date stamp". Worse still, files stored to disk with "date stamps" post-1999 might not be accessible due to BIOS limitations (this is unlikely but does need to be checked).
      * Windows 98 (Memphis), NT 4.0 and OS/2 Warp apparently have bios date correction routines built in (ie , 1900 is treated as 2000). WIN95 WIN3.11 and DOS do not have this feature. WIN95 and Win3.11 "patches" should soon be available from Microsoft.
      Top of page


      Software

      Most of these tips apply to Open Access software but
      users of other software should find it useful.

      The main "fix" needed for Open Access is the way it handles two-digit abbreviations of the year. These are currently all assumed to be in the 1900s. The DSPI "patch" for Open Access, which is now available, allows the user to set two-digit years to the 2000s. It is intended to be used after the turn of the century since its current "breakpoint" is 00. Also it is not reversible so make sure you backup the OA4.SPI file before running the patch. See below for Microsoft's "breakpoints".

      Before version 4 Open Access used to prompt the user for the current date when it started - a carryover from the days of XT PCs with no battery-backed CMOS. Maybe that feature should have been retained (dig out your old copies of OA3)!

      As with the operating system, Open Access gets date information from BIOS so if the BIOS is wrong then Open Access will get it wrong.

      Open Access Programmer code which manipulates dates will need to be reviewed, particularly if it converts dates to or from strings. Open Access handles post-1999 dates correctly. Dates, days of the week and date interval calculations appear to be correct. Program/SQL statements such as SYSDATE-30, SYSDATE+30 (important for those 30 day invoices), DATE(mm,dd,2YYY) and STRING(date) all work correctly. Of course, programs which store data using a two-digit year (eg an archive file called 98ACC.DF) will also need reviewing. One major advantage of Open Access, compared with, say, MS Access, is that the programming code is contained in discrete ASCII files. Therefore these files can be readily searched for strings associated with potential Year 2000 problems (eg "DATE(", "1999", "31-12-1999", "31-12-99" ).

      Consider adding OA Programmer code along the following lines when an application is launched:

        do_it = true
        if sysdate < DATE(1,1,1998)
        PUT "Warning: SYSDATE year less than 1998."
        PUT DO NEWLINE, "Press [F8] and select DATE then TIME enter correct values"
        get do_it ! pause to allow message to be read
        end if
      If the warning is displayed the user should be instructed to use OA Desktop [F8] to enter the correct date and time (this could be automated with a Macro but it is probably safer to use the Desktop since it displays a calendar). Alternatively, with Windows 95, double click on the time to display the "Day/Time Properties" window (doesn't it look like the Open Access display we have had for more than 15 years). Date and time can be corrected from this window.

      Conversion of Open Access data to or from other formats, such as dBase, DIF, 1-2-3 or ASCII might also need to be checked. Make sure that the package receiving the data can cope with the date format.

      As far as Microsoft products go, it looks like patches will be available for most recent products, if they are not already compliant. Word 5 for DOS and MS Access 2.0 are "not compliant" and will probably need to be scrapped. However, upgrading from Access 2.0 to a recent version has its problems. With Word 5 for DOS any attempt to create a new file after 1999 will result in a corrupted file and possible computer crash! (MS statement)
      With Access 7.0 you might need to change the date field display formats to 4-digit years since the default is 2 digits (how annoying!).
      Top of page


      Help

      For an overwhelming range of advice on Year 2000 see the links at the foot of this page. For example, you can get some evaluation shareware called "Check 2000" from Graham Plowman's web site. This allows the user to search through selected files looking for relevant strings. The user can add search strings to the list so it can easily be used for checking OA Programmer code (one good reason for logically naming your code and keeping it in separate directories).

      Check 2000 also comes with an EXE file called BIOSDATE.EXE. This is placed at the start and end of your AUTOEXEC.BAT file. It is designed for PCs with BIOS which cannot handle post-1999 dates. In brief, a pre-2000 date is always stored in BIOS (in fact 4 years earlier than the actual date). When AUTOEXEC.BAT starts the program reads the BIOS date and adds 4 years to it. The result is saved as the SYSDATE for the duration of the session (since DOS and Windows are happy with post-1999 dates). At the end of AUTOEXEC.BAT the program changes the SYSDATE back four years so it can be safely saved to BIOS. This solution will no longer work after 2003 but it could get many businesses out of trouble around the turn of the century. Note that another company, GMT-2000 also markets software called Check 2000 - they are not the same!
      Top of page


      Key dates

      This list is from Institution of Electrical Engineers, UK.
      Note British date format dd.mm.yyyy
      • 01.01.1970 : The base date (i.e. the date when the clock starts) for UNIX and for C and C++ systems - see 2038
      • 1970 : This is the breakpoint in the windowing system used by Microsoft in a large number of their products. In these systems 69 will imply 2069 and : 70 will imply 1970. This may give rise to other problems. See also 2029, 2030 below, and Appendix F.
      • 01.01.1980 : The original base date for IBM PC clocks.
      • 29.02.1996 : Leap year problem
      • 08.01.1997 : This caused problems in (it is claimed) the Unisys CTOS operating system
      • 1998 : In some older programs this has been used as an indicator of a break in a file / sequence, especially where 99 was used to indicate end-of-file
      • 22.08.1999 : Problem with Geographical Positioning Systems (see Section 3.6)
      • December 1999 : A period of maximum solar activity which may affect communication devices and systems, which may need to be considered in relation to contingency planning
      • 1999 : Used (expressed as 99) in older systems as an end of file indicator
      • 09.09.1999 : This date has often been used as an end-of -file indicator
      • 12.1999 : End of file indicator in older systems
      • 31.12.1999 : Year 2000; also in older systems an end of file indicator
      • 01.01.2000 : Year 2000
      • 28.02.2000 : Leap year problem
      • 29.02.2000 : Leap year problem
      • 01.03.2000 : Leap year problem
      • 01.03.2000 : Leap year problem
      • 28.02.2004 : Leap year problem
      • 29.02.2004 : Leap year problem
      • 2024 : This has been mentioned as containing a date when there will be an overflow problem similar to 2038 below, but the precise date and the cause have not been ascertained.
      • 2030 : This has been reported as a breakpoint in the windowing system used by Microsoft in a large number of their products. In these systems 29 will imply 2029 and 30 will imply 1930. As indicated in Section 11.4.4 this may give rise to other problems. See also 1970 above.
      • 18.01.2038 & 19.01.2038 : At 03:14:08 on Tuesday 19 January 2038 the seconds counter used for date / time information in UNIX and C and C++ will reach 2,147,483,647 which is the largest number which can be stored as 32-bit signed integer. As a result an overflow problem will occur (i.e. the value of the next number is unpredictable). Time differences mean that it appears to happen earlier in the Americas (Mon Jan 18 22:14:07 2038 US EST).

      • There will also be an additional problem due to a discrepancy of a few seconds between system clocks and astronomical time because the system will not have taken account of leap second adjustments made in the interim period. This may be significant only for a few very specialised systems, but could give rise to difficulties if changes are based on algorithms which do not take this into account.
        It is understood that the Java programming language (which in many respects closely resembles C++) will not have this problem.
      • 01.03.2101 : It is claimed that a system which is compliant up to this date will be totally and permanently date compliant.

      GPS Navigation Systems

      21.08.1999 : On the night of Aug 21/22 of 1999 the GPS week number, which is a 10-bit accumulator, comes to the end of week 1023 & then clicks to ZERO (not 1024 as many commercial GPS systems assume). Air travel might be a little hazardous on that night!
      Top of page

      Links

      In short, there are several things to consider and it is best to consult the following expert pages before you do anything else!.
      • CNN 13 Dec 1999: Y2K in space? NASA one step closer to Hubble Telescope repair mission -  Shuttle managers have given themselves a launch deadline of December 18, because, they said, they want Discovery back on Earth in time to avoid any  potential Y2K problems in orbit and at Mission Control in Houston.
      • Scientific American article Y2K: So Many Bugs ...So Little Time
      • David Neiger computing consultant based in Melbourne. Many other links
      • Greenwich Mean Time UK company with tips and resources for dealing with 2000
      • Graham Plowman SorceCheck2000 Software - Australian  software.This can be used to search Open Access Programmer files for possible date manipulation problems (provided you add relevant OA Programmer date statements to the configurable search strings - you could use it for other, non-2000 searches as well!).
      • Y2KPCPRO BIOS manipulation shareware.
      • Y2K Links Database site
      • Solace Consultancy - includes a review of 2000 checking packages
      • Year2000.com  - The Year 2000 Information Center™ provides a forum for

      • disseminating information about the year 2000 problem, also called the
        Millennium Bug, and for the discussion of possible solutions.
      • Scientific American article Y2K: So Many Bugs ...So Little Time
      • Microsoft Y2K site and Product Analyzer
      • Yahoo's Year 2000 Problem page - it's hu...uge!
      • Institution of Electrical Engineers, UK - the problem also applies to PLCs and other industrial control devices that use dates or talk to computer systems. Have a candle ready at midnight on 31 December 1999!
      • Engineers Australia Y2K Contingency Planning
      • Advice from Rod Farmer, Hearne Scientific Software "Your Y2K questions answered" including tips for UNix, Apple, Novell, IBM mainframe and WINTEL systems and links for Microsoft updates.
      Above all ... [Don't panic!] unless you can't  get your PC to work!
       

      Top of page


      [home!]

      Prepared by Michael Paine (email). Last update 2 January 2000.