St-Donat
Au coeur des Laurentides
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