Mises à jour pour DR DOS : EGA.CPI avec page de code 853 corrigée
La page de code 853 (inspirée du Latin-3) est supportée mais non documentée dans DR DOS 6.0/7.03. Ainsi, elle n'est reconnue ni par NLSFUNC ni par COUNTRY.SYS bien qu'EGA.CPI la contienne...
Par exemple, imaginons que les quatres premières commandes suivantes soient lancées au démarrage par AUTOEXEC.BAT (DISPLAY.SYS étant actif) et que les autres soient tapées par l'utilisateur :
C>NLSFUNC C:\DRDOS\COUNTRY.SYS
NLSFUNC V3.02 Support de langue nationale.
Copyright (c) 1988, 1989, 1990, 1991 Digital Research Inc. Tous droits réservés.
C>MODE CON: CP PREP=((853) C:\DRDOS\EGA.CPI)
Fonction de préparation de page de codes terminée
C>MODE CON: CP SEL=853
Fonction de sélection de page de codes terminée
C>KEYB FR+,850
C>CHCP 437
C>CHCP 853
Page de codes incorrecte. NLSFUNC n'est pas chargé
ou COUNTRY.SYS est introuvable
C>CHCP 850
C>KEYB FR,850
C>MODE CON: CP SEL=853
Le clavier ne prend pas en charge cette page de codes
C>CHCP
Page de code active: 850
C>KEYB
Programme de clavier chargé: FR, page de codes 850
Nous remarquons que CHCP ne peut ni savoir si la page 853 est active ni la sélectionner.
Après être revenu à la page matériel 437 (mais on aurait pu choisir une page de codes logicielle préalablement préparée et reconnue), si on sélectionne de nouveau la page 853 via l'utilitaire MODE, ce dernier nous averti que le clavier n'est pas pas prévu pour — bien qu'elle soit compatible avec la page multilingue 850, le caractère « ÿ » mis à part.
Les caractères 170, 208, 209, 221, 238, 241 & 251 n'ont aucun rôle et sont représentés par des blancs.
Le caractère 240 (SHY, Soft hyphen) qui est normalement le trait d'union conditionnel est toutefois toujours affiché (sous la forme du trait de césure).
Le but de la proposition.
Hélas, dans notre cas, le caractère 159 (?) est remplacé par le caractère 173 (s cédille minuscule). Nous constatons aussi que le caractère 158 (signe de multiplication) est remplacé par le caractère 184 (s cédille majuscule) et le 141 (i accent grave) par le 213 (i sans point semblable au chiffre 1 en indice).
Le fichier EGA.CPI est donc erroné : il y a des doublons. Heureusement, en explorant la table 850 dans le fichier EGA.CPI (qui débute par les octets 52h & 03 pour 0352h=850) on trouve aisément l'octet référençant le symbole « multiplier » (02 précédant l'octet non nul 01). Ensuite, dans la table 853 (débutant par les octets 55h & 03 pour 0355h=853), nous identifions la lettre « x » suivie de l'octet 01 à l'emplacement du caractère 157 ainsi que la lettre « z » suivie de l'octet 01 à l'emplacement du caractère 166. On devine donc que le caractère 159 ne peut être référencé que par la lettre « y » toujours suivie de l'octet 01. Quant au caractère 141, il suffit de l'entrer suivi de l'octet nul.
...voilà pourquoi je vous propose le fichier EGA.CPI corrigé pour DR DOS. NOTA : on retrouve le fichier erronée de DR DOS 6 dans DR-DOS 7.03 !
NLSFUNC permet trois choses d'après le numéro de pages de codes spécifié par CHCP :
- modifier les paramètres de COUNTRY liés à la page de codes (correspondances majuscule-minuscule) ;
- sélectionner la page de codes ;
- configurer KEYB selon les caractères disponibles.
Si vous souhaitez utiliser une autre page (par exemple, la page de codes matérielle qu'on n'a pas besoin de préparer), utilisez CHCP :
En revanche, pour revenir à la page de codes 853 tout en restant compatible avec la page de codes multilingue 850 qui n'est pas préparée, il faut entrer les trois commandes suivantes (au clavier ou à l'aide d'un fichier batch) :
Edit du 17/12/2017 : cette contribution de gm86 sur DR-DOS se trouvait auparavant à l'intérieur d'un autre topic. Je l'ai séparé du reste car j'estime que sa correction mérite bien un sujet à part entière, aux côtés des autres réalisations des membres de Win3x.Org (d'où le faible nombre de consultations, ne vous y fiez pas, c'est un sujet nouvellement créé) + ajout d'un miroir de ma part
Last edited by Big Monstro on 17 Dec 2017 21:13, edited 2 times in total.
Pas grave. Voilà, c'est fait. Je garde précieusement les coupes (PAT312) ci-dessous :
J'avais auparavant écrit un petit TSR palliant l'erreur de copie de la fonction 26h du DOS. J'ai décidé que ce dernier problème devait dorénavant être supprimé à la source. J'ai donc tenté de déceler l'emplacement de la fonction 26h dans le DOS. Le débogage pas-à-pas n'étant guère possible avec un système non réentrant, j'ai par conséquent consulté les fichiers sources d'OpenDOS 7.10, descendant de DR DOS, et repéré la fonction grâce aux similitudes du code.
La fonction 26h de l'interruption 21h de DR DOS 6 commence ainsi :
dans le fichier PROCESS.A86 d'OpenDOS.
Or la valeur de reg_CS vaut 14h, comme on peut le vérifier dans le fichier PCMODE.EQU, car le DOS enregistre les registres du processeur dans une pile dans l'ordre suivant :