St-Donat    Au coeur des Laurentides

Image de St-Donat
  


SERVICE INFORMATIQUE
PIERRE FORGET
819-424-2051

pierre.forget@st-donat.com


LE BOGUE DU MILLENAIRE: Solutions possibles pour les PC.

Premièrement, voyons si vous avez un problème avec ce bogue. Il existe 2 possibilités: l'ordinateur comme tel et les logiciels.

ORDINATEUR: Comme il a été expliqué sur le site de CNN (et autres sites aussi), la meilleure façon de vérifier votre PC est de retourner à notre bon vieux DOS et d'ajuster la date au 31 Décembre 1999 avec la commande DATE et l'heure à 11:59p (ou 23:59) avec la commande TIME. Fermez votre PC et repartez-le après environ 1 minute. Revérifiez la date et si vous obtenez 1980 pour l'année (ou pire 1900), vous avez le bogue! Si vous obtenez l'année 2000, vous êtes en affaires!

LOGICIELS: Si vous n'avez pas le bogue sur l'ordinateur comme tel, vérifiez vos logiciels avec la date ajustée en l'an 2000. Si vous obtenez des résultats bizarres (comme des feuilles de calcul qui ne balancent pas), alors il vous faudra changer le code de votre logiciel (si vous en êtes le programmeur) à tous les endroits où il y a une manipulation de date. En Quickbasic, par exemple, vous devrez rechercher tous les endroits où se trouve la commande DATE$ et faire les corrections. Vous auriez dû programmer avec 4 chiffres pour la date dès le début de votre programme. Personnellement, j'utilise le format de date japonais: ANNE-MM-JJ.

Quand arrêterons-nous de programmer pas plus loin que le bout de notre nez? Win95 ne va pas plus loin que 2099. Pourquoi pas 9999? Vous souvenez-vous de la limite de partition de 32Megs sur les disques durs? Et de celle de 504 Megs? Et de celle de 2 Gigs? Pourquoi pas 9999 Teragigs? Pourquoi n'utilisons-nous le modèle de mémoire plat (flat memory model) à chaque fois que nous changeons le nombre de bits (16 à 32, 32 à 64)? Oui, la Terre est plate. Galilée a dû l'admettre (ou mourir).

Maintenant, voyons quelques solutions possibles si vous avez le bogue:

Voyons un exemple en Quickbasic( vous pouvez appliquer cette solution à d'autres environnement de programmation). Premièrement, n'essayez pas de changer la date lorsque vous arriverez en l'an 2000 (assurez-vous seulement que votre date est bien le 1 Janvier 1980). Maintenant, remplacez tous les codes DATE$ dans votre code de logiciel avec ce bout de code (remarquez que ce code n'affectera pas les ordinateurs qui n'ont pas le bogue):

Remplacez chaque code DATE$ par REALDATE$ dans tout votre logiciel, le code pour REALDATE$ étant (juste au début de votre logiciel et à chaque fois que votre logiciel manipule la date):

SELECT CASE MID$(DATE$, 7, 3)
CASE IS = "198"
REALDATE$ = LEFT$(DATE$, 6) + "200" + RIGHT$(DATE$, 1)
CASE ELSE
REALDATE$ = DATE$
END SELECT

Maintenant, utilisez REALDATE$ à chaque fois que vous avez besoin de la date dans votre code. Comme nous ne reviendrons jamais en 1980 (à moins que nous fassions comme dans le film RETOUR VERS LE FUTUR), cela nous donnera un autre 10 ans pour travailler avec cet ordinateur.

Lorsque vous serez en l'an 2000, vous pourrez modifier le code une autre fois,ce qui vous donnera un autre 10 ans (20 ans au total).

Voici le code:

SELECT CASE MID$(DATE$, 7, 3)
CASE IS = "198"
REALDATE$ = LEFT$(DATE$, 6) + "200" + RIGHT$(DATE$, 1)
CASE IS = "199"
REALDATE$ = LEFT$(DATE$, 6) + "201" + RIGHT$(DATE$, 1)
CASE ELSE
REALDATE$ = DATE$
END SELECT

Note : Si vous obtenez 1900 lors du test, remplacez les valeurs du code au besoin.

Ceci devrait régler le problème jusqu'en 2019, ce qui vous donnera le temps de changer votre ordinateur.

Si votre logiciel a besoin de connaître les jours de la semaine (Lundi, Mardi, etc...), il existe un algorythme pour le calculer et vous devrez l'utiliser pour être précis.

Une autre solution possible est avec la manipulation de la fonction DATE en DOS. Je n'ai pas vérifié moi-même, mais je suis presque sûr que la commande DATE en DOS utilise un appel d'interruption (Interrupt Call) pour manipuler la date en additionnant 19 aux 2 chiffres que le DOS conserve. Exemple: 19 + 97 = 1997.

Ces appels d'interruption (Interrupt) sont copiés du ROM vers le RAM pour raison de vitesse d'exécution et il est possible de changer le code de ces interruptions (Hey! Les amis qui programment des virus: ce serait le temps de mettre vos aptitudes à profit pour une bonne cause! N'est-ce pas ce que vous faites? Remplacer le code de l'Interrupt 13H?

Alors, en faisant un petit logiciel en Assembler et en l'installant dans le fichier AUTOEXEC.BAT, cela pourrait changer le code du DOS qui va chercher la date d'une façon similaire au code Quickbasic précédent.

Cela pourrait peut-être aussi faire le travail avec les grands ordinateurs, mais je n'en suis pas sûr. Comme je n'ai pas le temps de faire les vérifications pour la solution Assembler, j'apprécierais un retour si vous trouvez une solution de ce côté, afin que je puisse inclure vos références dans ce document, que ce soit en partagiciel (shareware) ou gratuitiel (freeware).

En espérant que tout ceci vous soit utile,

Pierre Forget
19 Place Tournesol
St-Donat
Prov. Québec, Canada
J0T 2C0

Note : Les codes inclus dans ce document vous sont donnés tels que vus et c'est votre responsabilité d'en vérifier les résultats.

Maintenant: Où est situé St-Donat? St-Donat est un petit village des Laurentides avec 2 immenses lacs côte-à-côte. Un endroit très tranquille (un peu trop tranquille quelquefois: nous aurions besoin de quelques compagnies de logiciels ici) pour programmer.

Vous trouverez ci-après des liens intéressants concernant le bogue du millénaire:

http://www.cix.co.uk/~harlend/y2k.html
Vous trouverez ici un fichier exécutable qui sera peut-être une solution à votre problème.

http://www.it-logistics.com
Une solution permanente au bogue du millénaire. Je ne suis pas responsable des résultats, mais cela semble très intéressant.

Hôte: www.st-donat.com


Gestion du site par: Service Informatique Pierre Forget