Les tutos du père Keyser : multi menu MS-DOS
Posté : 14 mai 2023 18:12
(précision : captures d'écran faites sur un émulateur que j'utilise et qui fera l'objet d'une présentation en bonne et due forme dans la section dédiée)
Avec le DOS 6.0, Microsoft a introduit une fonctionnalité très pratique, le multi menu dans les fichiers de démarrage CONFIG.SYS et AUTOEXEC.BAT.
L'intérêt de ceci, c'est que ça vous permet de vous faire des configurations de démarrage aux petits oignons, en ne démarrant que ce dont vous avez besoin. En effet, MS-DOS travaillait très différemment des Windows actuels. Déjà, il avait été décidé de façon tout à fait arbitraire que dans toute la mémoire dont disposait votre machine, seuls 640Ko seraient nécessaires au maximum pour faire tourner les programmes. De mémoire, je crois me souvenir que cette aberration vient directement de Bill Gates, mais je ne suis plus trop sûr. C'est ce qu'on appelait la mémoire conventionnelle. Problème : les softs sont vite devenus très gourmands en ressources, avaient parfois besoin d'au moins 600Ko de mémoire libre pour tourner, et cela, en cohabitant avec tous les pilotes chargés au démarrage de votre machine. Une souris ? Besoin de son pilote. Un lecteur de CD ? Idem. Et ainsi de suite pour tous les périphériques qui devaient être initialisés. Et chacun de ces pilotes bouffait de la place dans notre précieuse mémoire conventionnelle.
En plus de tout cela, suivant le soft ou le jeu, on avait besoin des différents types de mémoires disponibles. XMS pour la mémoire étendue, EMS pour la mémoire paginée, etc... Il y avait bien évidemment moyen d'envoyer les pilotes dans ces mémoires supérieures, avec par exemple MEMMAKER.EXE qui faisait partie intégrante de MS-DOS, ou un utilitaire mythique comme Quarterdeck Expanded Memory Manager (QEMM pour les intimes). Mais ça, c'est une autre histoire et ce sera pour une autre tuto.
L'intérêt donc du multi menu, c'est que l'on pouvait customiser au maximum ce qui serait chargé ou pas au démarrage. Style se créer une configuration pour les jeux utilisant le CD-ROM (fichiers OAKCDROM.SYS et MSCDEX.EXE par exemple), et une autre sans ces 2 pilotes pour les jeux qui seraient des jeux disquettes, donc où le CD-ROM serait inutile. Et tout cela se passait simplement dans les fichiers CONFIG.SYS et AUTOEXEC.BAT.
La structure des fichiers et les balises à mettre :
On commence par le fichier CONFIG.SYS, qui sera la 1er chargé des 2 au démarrage. On insère au tout début la ligne qui l'informe qu'il va y avoir un menu, simplement via
Ensuite, on insère à chaque fois une ligne qui commence par menuitem= suivi de ce que l'on veut et qui sera la variable de chaque ligne de menu (xms dans l'exemple de la 1ère ligne), variable qui sera récupérée par le fichier AUTOEXEC.BAT pour savoir ce qu'il doit lui-même charger. On insère une virgule, et on fini par ce qui s'affichera à l'écran dans notre menu, ici Configuration XMS à la 1ère ligne. On obtient donc : et on répète pour chaque entrée que l'on veut mettre dans son menu.
Ensuite, on insèrequi fait référence à la variable définie précédemment. Et on met les lignes de CONFIG.SYS que l'on veut charger dans cette configuration. Idem, on répète avec un nouveau bloc qui commence par [variable] comme défini avant dans les lignes menuitem=, et on met les commandes désirées. Au final, le CONFIG.SYS ressemble à quelque chose du genre :
Pour l'AUTOEXEC.BAT, on doit récupérer la fameuse variable que l'on a définie au début du CONFIG.SYS, xms dans mon exemple, et la passer à la séquence de démarrage pour continuer. Ça se fait tout simplement en insérant la ligneoù l'on veut dans le fichier. Je dis ça car on peut très bien commencer par des lignes de commande qui seraient communes à chaque config, style la commande PATH, ou les variables d'environnement SET, etc... Mais on peut également mettre tout cela après. C'est justement ma manière de faire, et ce sera détaillé juste après.
Donc, on a récupéré la variable xms via la commande précédente, et on l'insère sous forme de balise dans l'AUTOEXEC.BAT comme ceci :Puis comme pour le CONFIG.SYS, on met en-dessous les lignes de commandes que l'on veut voir chargées. Et on répète l'opération en recommençant avec chaque variable définie dans le CONFIG.SYS, précédée d'un :
Vous remarquerez que dans mon exemple, j'ai rajouté systématiquement la ligne à chaque fin de bloc et que j'ai regroupé dans un bloc indépendant les commandes communes à toutes les configurationsC'est une autre façon de faire plutôt que de mettre tout au début. Et je termine par un ainsi qu'une balisepour forcer l'exécution à arriver à la fin du fichier et sortir de la boucle, et des fichiers de démarrage. Ça donne donc ceci, et on arrive au DOS PROMPT :
Pour les curieux, j'ai personnalisé une ligne de mon AUTOEXEC.BAT pour que soit affichée la configuration dans laquelle je me trouve. C'est la ligne PROMPT $e[32;41m $e[ XMS $e[30;46m $p$g $e[0m du fichier. On avait l'habitude de mettre la commande PROMPT $p$g qui affichait tout simplement le C:\> avec le curseur qui clignote attendant vos commandes. En rajoutant des paramètres, des codes de couleurs, et du texte, on obtient cette invite bien pratique. Attention cependant : ça ne fonctionnera que si vous avez chargé le fichier ANSI.SYS dans votre CONFIG.SYS. Maintenant, je dois bien avouer que c'est des fichiers que j'utilise depuis les années 90, donc je ne me souviens plus trop des codes correspondants à telle ou telle couleur. Je pense que ça vient d'un bouquin édité chez Marabout à l'époque, et qui doit malheureusement être introuvable actuellement, ou alors en occase. C'était une véritable mine d'informations et je l'avais quasi étudié par cœur :
Si parmi nous il y a quelques tarés du code, il y a moyen de jouer de différentes manières avec les variables. On peut imaginer des commandes qui utiliseraient une structure IF "%CONFIG%"== et jouer avec des conditions, ce qui peut aussi être fun. Et je ne l'ai jamais utilisé, mais il doit aussi y avoir moyen de jouer avec une balise COMMON dans le CONFIG.SYS pour regrouper des choses qui seraient communes. Mais alors, ces lignes seraient ignorées par la commande MEMMAKER pour optimiser la mémoire utilisée. C'est donc bien pour regrouper des lignes comme FILES=40 qui ne chargent pas de programme en mémoire, mais c'est à éviter pour les autres style DEVICE=C:\quelquechose.
Voilà le code complet des fichiers de mon exemple si vous voulez tester. Amusez-vous bien (et étant de Belgique, ma ligne COUNTRY.SYS utilise le code 032 de la Belgique, alors que j'utilise depuis toujours des AZERTY FR et pas BE comme claviers. Vieille habitude d'avoir appris sur ces claviers, dont je connais le layout par cœur)
Contenu du fichier CONFIG.SYS :
Contenu du fichier AUTOEXEC.BAT :
Avec le DOS 6.0, Microsoft a introduit une fonctionnalité très pratique, le multi menu dans les fichiers de démarrage CONFIG.SYS et AUTOEXEC.BAT.
L'intérêt de ceci, c'est que ça vous permet de vous faire des configurations de démarrage aux petits oignons, en ne démarrant que ce dont vous avez besoin. En effet, MS-DOS travaillait très différemment des Windows actuels. Déjà, il avait été décidé de façon tout à fait arbitraire que dans toute la mémoire dont disposait votre machine, seuls 640Ko seraient nécessaires au maximum pour faire tourner les programmes. De mémoire, je crois me souvenir que cette aberration vient directement de Bill Gates, mais je ne suis plus trop sûr. C'est ce qu'on appelait la mémoire conventionnelle. Problème : les softs sont vite devenus très gourmands en ressources, avaient parfois besoin d'au moins 600Ko de mémoire libre pour tourner, et cela, en cohabitant avec tous les pilotes chargés au démarrage de votre machine. Une souris ? Besoin de son pilote. Un lecteur de CD ? Idem. Et ainsi de suite pour tous les périphériques qui devaient être initialisés. Et chacun de ces pilotes bouffait de la place dans notre précieuse mémoire conventionnelle.
En plus de tout cela, suivant le soft ou le jeu, on avait besoin des différents types de mémoires disponibles. XMS pour la mémoire étendue, EMS pour la mémoire paginée, etc... Il y avait bien évidemment moyen d'envoyer les pilotes dans ces mémoires supérieures, avec par exemple MEMMAKER.EXE qui faisait partie intégrante de MS-DOS, ou un utilitaire mythique comme Quarterdeck Expanded Memory Manager (QEMM pour les intimes). Mais ça, c'est une autre histoire et ce sera pour une autre tuto.
L'intérêt donc du multi menu, c'est que l'on pouvait customiser au maximum ce qui serait chargé ou pas au démarrage. Style se créer une configuration pour les jeux utilisant le CD-ROM (fichiers OAKCDROM.SYS et MSCDEX.EXE par exemple), et une autre sans ces 2 pilotes pour les jeux qui seraient des jeux disquettes, donc où le CD-ROM serait inutile. Et tout cela se passait simplement dans les fichiers CONFIG.SYS et AUTOEXEC.BAT.
La structure des fichiers et les balises à mettre :
On commence par le fichier CONFIG.SYS, qui sera la 1er chargé des 2 au démarrage. On insère au tout début la ligne qui l'informe qu'il va y avoir un menu, simplement via
Code : Tout sélectionner
[menu]
Code : Tout sélectionner
menuitem=xms,Configuration XMS
Ensuite, on insère
Code : Tout sélectionner
[xms]
Pour l'AUTOEXEC.BAT, on doit récupérer la fameuse variable que l'on a définie au début du CONFIG.SYS, xms dans mon exemple, et la passer à la séquence de démarrage pour continuer. Ça se fait tout simplement en insérant la ligne
Code : Tout sélectionner
GOTO %CONFIG%
Donc, on a récupéré la variable xms via la commande précédente, et on l'insère sous forme de balise dans l'AUTOEXEC.BAT comme ceci :
Code : Tout sélectionner
:xms
Vous remarquerez que dans mon exemple, j'ai rajouté systématiquement la ligne
Code : Tout sélectionner
GOTO common1
Code : Tout sélectionner
:common1
Code : Tout sélectionner
GOTO fin
Code : Tout sélectionner
:fin
Pour les curieux, j'ai personnalisé une ligne de mon AUTOEXEC.BAT pour que soit affichée la configuration dans laquelle je me trouve. C'est la ligne PROMPT $e[32;41m $e[ XMS $e[30;46m $p$g $e[0m du fichier. On avait l'habitude de mettre la commande PROMPT $p$g qui affichait tout simplement le C:\> avec le curseur qui clignote attendant vos commandes. En rajoutant des paramètres, des codes de couleurs, et du texte, on obtient cette invite bien pratique. Attention cependant : ça ne fonctionnera que si vous avez chargé le fichier ANSI.SYS dans votre CONFIG.SYS. Maintenant, je dois bien avouer que c'est des fichiers que j'utilise depuis les années 90, donc je ne me souviens plus trop des codes correspondants à telle ou telle couleur. Je pense que ça vient d'un bouquin édité chez Marabout à l'époque, et qui doit malheureusement être introuvable actuellement, ou alors en occase. C'était une véritable mine d'informations et je l'avais quasi étudié par cœur :
Si parmi nous il y a quelques tarés du code, il y a moyen de jouer de différentes manières avec les variables. On peut imaginer des commandes qui utiliseraient une structure IF "%CONFIG%"== et jouer avec des conditions, ce qui peut aussi être fun. Et je ne l'ai jamais utilisé, mais il doit aussi y avoir moyen de jouer avec une balise COMMON dans le CONFIG.SYS pour regrouper des choses qui seraient communes. Mais alors, ces lignes seraient ignorées par la commande MEMMAKER pour optimiser la mémoire utilisée. C'est donc bien pour regrouper des lignes comme FILES=40 qui ne chargent pas de programme en mémoire, mais c'est à éviter pour les autres style DEVICE=C:\quelquechose.
Voilà le code complet des fichiers de mon exemple si vous voulez tester. Amusez-vous bien (et étant de Belgique, ma ligne COUNTRY.SYS utilise le code 032 de la Belgique, alors que j'utilise depuis toujours des AZERTY FR et pas BE comme claviers. Vieille habitude d'avoir appris sur ces claviers, dont je connais le layout par cœur)
Contenu du fichier CONFIG.SYS :
Code : Tout sélectionner
[menu]
menuitem=xms,Configuration XMS
menuitem=ems,Configuration EMS
menuitem=cdxms,Configuration CD-ROM XMS
menuitem=cdems,Configuration CD-ROM EMS
[xms]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512
[ems]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512
[cdxms]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DOS\VIDE-CDD.SYS /D:MSCD001
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512
[cdems]
DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE RAM HIGHSCAN
BUFFERS=40,0
FILES=40
DOS=UMB
LASTDRIVE=E
FCBS=4,0
DOS=HIGH
DEVICE=C:\DOS\ANSI.SYS
DEVICE=C:\DOS\VIDE-CDD.SYS /D:MSCD001
COUNTRY=032,,C:\DOS\COUNTRY.SYS
SHELL=C:\DOS\COMMAND.COM C:\ /P /E:512
Code : Tout sélectionner
@ECHO OFF
GOTO %CONFIG%
:xms
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT $e[32;41m $e[ XMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1
:ems
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT $e[32;41m $e[ EMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1
:cdxms
C:\DOS\MSCDEX.EXE /D:MSCD001
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT p$e[32;41m $e[ CD XMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1
:cdems
C:\DOS\MSCDEX.EXE /D:MSCD001
C:\DOS\SMARTDRV.EXE
C:\DOS\CTMOUSE.EXE
PROMPT $e[32;41m $e[ CD EMS $e[30;46m $p$g $e[0m
C:\DOS\KEYB FR,,C:\DOS\KEYBOARD.SYS
GOTO common1
:common1
PATH C:\;C:\DOS;C:\NC
SET TEMP=C:\TEMP
SET TMP=C:\TEMP
GOTO fin
:fin