Un didacticiel concernant
CD Shell.
Dernière mise à jour : 10/10/2005
- Créer un menu
interactif avec "CD Shell" :
"CD Shell" se télécharge à partir
de cette adresse : www.cdshell.org/download/download.html.
Ce programme est en "Freeware" à partir du moment
qu'il n'en est pas fait une exploitation commerciale.
Vous obtiendrez une archive nommée cds2106.zip qu'il faut
décompresser. Double-cliquez sur le fichier obtenu afin
de lancer l'installation du programme.
Un peu de théorie maintenant ! Schématiquement,
vous avez besoin d'un répertoire nommé Boot que
vous allez extraire à la racine de votre image puis de
définir le fichier Loader.bin comme étant le secteur
d'amorçage du disque. Le fichier de script Cdshell.ini
sert à définir le contenu de votre menu de démarrage.
Définition : Un fichier de script est
un programme comportant une suite d'instructions directement interprétables
par votre machine.
Une fois que les fichiers seront placés il vous suffira
de graver l'image disque en respectant ces spécifications
:
Fichier image : Loader.bin
Type d'émulation :Pas d'émulation
Nombre de secteur lus : 4
Lire segments des secteurs (hex) 07C0
Signalons qu'il existe un mode Console qui s'exécute en
tâche de fond de celui de l'interface graphique.
Définition : Nous désignons par
ce terme une fenêtre de terminal dans lequel on peut saisir
des instructions. Nopus parlons alors de mode "Console"
à l'opposé du mode d'interface graphique qui est,
il faut bien l'avouer, nettement plus convivial !
Nous allons maintenant passer en revue les différents point
vous permettant de comprendre les spécifications et la
syntaxe utilisée pour créer un menu de démarrage
avec ce programme.
- Les images :
Les images Bitmaps (format BMP) doivent avoir la résolution
suivante : 320x240 et une profondeur de couleur de 8 bits (par
exemple; 256 couleurs). Elles doivent toutes posséder l'extension
.bmp. Vous devez convertir les images dans un format utilisé
par "Cd Shell" et appelé CSI. Un outil fourni
avec le programme permet de le faire très facilement (\Tools\Convert\Convert.exe).
Voici un exemple de syntaxe : convert -bmp2csi -o Image.csi Image.bmp
Définition : La résolution d'écran
définit la représentation de l'image sur un écran.
Elle se mesure comme un rapport entre la largeur et la hauteur
exprimé en pixels. La profondeur de couleur est le nombre
de bits associés à chaque couleur primaire d'un
pixel. Par exemple, une profondeur de 8 bits est égale
à 256 couleurs.
- L'écran de
démarrage :
Vous avez la possibilité de définir un écran
de démarrage qui sera actif durant 5 secondes. L'image
utilisée doit correspondre à la résolution
suivante : 320x240x8 ou 640x480x24. Le fichier image doit être
nommé Splash.csi et être placé dans \DVD\BOOT\graphics.
- Le script de démarrage
:
Les commandes qui seront contenues dans le script cdshell.ini
utilisent une syntaxe particulière que nous allons expliquer.
Voici tout d'abord quelques règles :
* Dans l'explication d'une commande, les paramètres placés
entre < et > sont obligatoires. Ceux qui sont placés
entre crochets sont optionnels.
* Les mots-clés à quelques exceptions prêtes
ne sont pas sensibles à la casse.
* Les chemins et les noms de fichiers sont relatifs au répertoire
courant sauf s'ils sont précédents d'un antislash.
Dans ce cas, ils sont relatifs au répertoire racine. Comparez
ces deux commandes :
type files/fichier.txt : le chemin du fichier nommé fichier.txt
est relatif au répertoire courant.
type \image\sector.bin : le chemin du fichier sector.bin est relatif
au répertoire racine.
Un fichier de script doit se terminer par la commande End.
- Les commandes :
Voici les principales commandes dont vous allez pouvoir vous servir
dans un fichier de script.
* About [more] : affiche la version actuelle du descripteur de
démarrage.
* Boot <lecteur> : la commande Boot initialise le processus
de démarrage à partir du disque local. Nous nous
servons des identificateurs du Bios : 0x00: lecteur de disquette,
0x80: premier lecteur de disque, etc. Vous pouvez aussi utiliser
différents identifiants de raccourcis comme ceux-ci : $fda,
$fdb, $hda, $hdb, $hdc, and $hdd. Voici un exemple :
if $lastKey == key[o]; then boot 0x00
* Call <étiquette> : cette commande permet d'appeler
une sous-routine à l'intérieur de votre script (à
la manière de la commande Goto sous Ms-Dos). La commande
Return dit être placée à la fin de la sous-routine
afin de revenir à la commande suivant l'appel vers l'étiquette.
Voici un exemple :
call Entete
Entete:
set textColor= color[grey on black]
return
* Cd <chemin> : cette commande permet de changer de répertoire.
De la même manière vous pouvez remonter au répertoire
parent en inscrivant cette instruction : cd ..
* Chain <Nom_Fichier> ou Chain <Nom_Fichier> <adresse>
[start] : cette commande permet de charger le fichier image du
secteur de démarrage d'un Cd-Rom d'installation. Cette
commande ne convient pas aux images qui requièrent une
émulation matérielle. Le fichier image sera limité
à 64 Ko.
* Le drapeau Adresse définit le segment de mémoire
physique qui est adressé. Cette valeur doit être
au format hexadécimal. La valeur par défaut est
celle-ci : 0x7C00.
* Le drapeau Start définit l'offset relatif à cette
adresse. L'emploi de ce paramètre nécessite que
le précédent soit déclaré. A priori,
vous pouvez utiliser les paramètres par défaut et
vous contenter de ce type de déclaration : chain /NT4S.DAT
Définition : Un segment désigne
chaque bloc de mémoire faisant 64 Ko. L'adressage de la
mémoire utilise deux registres. Le premier désigne
le bloc qui contient l'octet "ciblé". Le second
appelé offset définit la position de cet octet dans
le bloc.
* Clear ou Cls : réinitialise le contenu de la fenêtre
en replaçant le prompt en haut à gauche de l'écran.
* Dir [d/f] ou Ls : cette commande permet de lister le contenu
des répertoires. Le drapeau d force l'affichage des dossiers
uniquement alors que le drapeau f celui des fichiers.
* Else <Commande> : permet d'exécuter une commande
si la condition If est fausse. Il est permet de spécifier
plusieurs commandes "Sinon". Voici un exemple :
if $lastKey == key[o]; then boot 0x80
else exit
* End : cette commande termine le script.
* Goto <étiquette> : cette commande permet d'appeler
une autre ligne du script. Voici un exemple :
goto menu
menu:
print " Installer Windows :
* If <expression> : cette commande permet de poser une condition.
Voici un exemple :
if $lastKey == key[F1]; then goto Aide
* List <commands/functions/keys/modules> : permet de lister
les commandes/fonctions/clés/modules qui sont disponibles.
* Memdisk <Nom_Fichier> : cette commande permet de charger
en mémoire un fichier image d'une disquette ou d'un disque
"bootable".
Le paramètre <Nom_Fichier> définit l'emplacement
relatif et le nom du fichier image : memdisk /msnet.img
* More <Nom_Fichier> ou Type : cette commande permet d'afficher
le contenu d'un fichier texte. Les lignes de plus de 255 caractères
seront coupées.
* Print [l/c/r] <message> : cette commande permet d'afficher
un message à l'écran.
Les paramètres optionnels (gauche/centré/droit)
servent à justifier le texte par rapport à l'écran.
Chaque ligne contient 80 caractères au maximum. Le message
doit être placé entre guillemets. Les séquences
suivantes sont autorisées :
\\ : antislash.
\" : guillemets.
\n : nouvelle ligne.
\t : tabulation.
\ac : change pour un alignement centré et démarre
une nouvelle ligne.
\al : change pour un alignement sur la gauche et démarre
une nouvelle ligne.
\ar : change pour un alignement sur la droit et démarre
une nouvelle ligne.
\c(#) : change de couleur. La couleur spécifiée
entre les parenthèses peut être au format décimal
ou hexadécimal.
\cxx : revient à la couleur par défaut du texte.
\cXX : revient à la couleur par défaut du texte
surligné.
* Reboot [warm/cold] : effectue par défaut un redémarrage
à chaud (action par défaut) ou à froid (/cold).
* Return : cette commande permet de retourner à la routine
qui a passé l'instruction call.
* Script <Nom_Fichier> : cette commande appelle un fichier
de script : script cdshell.ini.
* Set <variable> = ["chaîne"] ou Set <variable>
= [expression] : permet de définir une variable. Les caractères
permis sont : a-z, A-Z, 0-9 et _.
La première forme permet de définir une variable
qui sera égale à une chaîne de caractères.
La chaîne de caractères soit être placée
entre guillemets. Voici un exemple :
set textColor= color[grey on black]
La variable textColor permet de définir la couleur du texte
comme étant en gris avec un fond noir.
La seconde forme définit une expression mathématique
et la stocke en tant que variable (qui sera alors égale
au résultat sous forme de chaîne de caractères).
Voici un exemple :
set Ma_Variable = 1 + 2
La variable Ma_Variable est donc égale au chiffre 3.
* Show console ou Show image <Nom_Fichier.bmp] ou Show image
<Nom_Fichier.csi> [Nom_Image.bmp] : cette commande permet
de contrôler ce que les utilisateurs visualise quand "CD
Shell" fonctionne.
Étant que la Console fonctionne en tâche de fond,
la commande Show console permet de permuter en mode texte sans
que l'on puisse voir l'interface graphique de CD Shell.
La commande Show image bascule l'écran en mode d'interface
graphique. Toutes les commandes sont prises en compte mais n'affichent
pas de sortie d'écran (alors que ces sorties seraient visibles
en mode Console).
Un fichier .bmp peut être défini dans le cas où
la machine ne pourrait afficher l'image en haute résolution
CSI. Voici un exemple :
#if $ModeGraphique; then show image menu.csi menu.bmp
* Then <command> : permet de spécifier une commande
si la condition If est vraie. Vous pouvez exécuter de multiples
commandes "alors" à la suite d'une seule condition.
Voici un exemple :
if $24Heures == 1; then set time = "$timeHour:$timeMinute";
then return
- Les fonctions :
Une fonction va vous servir à définir une valeur
que vous utiliserez pour valider une expression.
* Bootcheck : cette fonction permet de vérifier si un lecteur
est "amorçable". Elle va donc retourner différents
codes :
0 : le média n'est pas "bootable".
1 : le périphérique contient un secteur de boot
valide.
2 : le secteur d'enregistrement de la zone amorce (MBR) contient
une partition "bootable".
3 : la partition "bootable" contient bien un secteur
de boot.
Les raccourcis vers les identifiants des lecteurs peuvent être
aussi employés comme paramètres. Voici un exemple
que nous pouvons traduire de cette façon : "Si le
premier disque dur (0x80) contient une partition bootable alors
démarre depuis le disque dur".
if bootCheck[0x80] == 3; then boot 0x80
* Color : cette fonction retourne une valeur numérique
définissant une couleur représentée par des
mots-clés. La couleur de premier-plan et d'arrière-plan
sera respectivement définie. Elles doivent être séparées
par le mot-clé On. Les noms de couleurs autorisés
sont les suivants : black (noir), blue (bleu), green (vert), cyan,
red (rouge), magenta, brown (brun), grey (gris), brightgrey (gris
clair), brightblue, brightgreen, brightcyan, brightred, brightmagenta,
yellow (jaune) et white (blanc).
* Defined : cette fonction permet de vérifier l'existence
d'une variable. Le code de sortie sera 1 si le fichier est présent
et de zéro dans le cas contraire.
* Key : cette fonction permet d'identifier les touches du clavier
qui ont été utilisée. Voici un exemple :
if $lastKey == key[F1]; then goto Aide
En termes clairs cela signifie : "Si la dernière touche
appuyée a été la touche F1 alors ouvres le
menu Aide".
Le tableau suivant récapitule le code défini pour
chaque touche :
Identificateur de clé : Touche correspondante
back : Espacement arrière
bracket : Crochet fermant : ]
del : Suppr
down : Flèche vers le bas
end : Fin
enter : Entrée
esc : Echap
home : Origine
ins : Inser
left : Flèche vers la gauche
pgdn : Page suivante
pgup : Page précédente
right : Flèche vers la droite
space : Espace
tab : Tabulation
up : Flèche vers le haut
- Les variables :
Quand une variable est utilisée vous devez la faire précédée
du signe $. Ce signe vous permet également d'afficher certains
caractères réservés sans que CD Shell les
interprète comme la fin d'une commande ou le début
d'un commentaire. Ainsi les expressions : $$ - $; - $# peuvent
être utilisées pour afficher ceci : $ - ; - #
Par ailleurs, il est possible de placer une variable entre parenthèses.
Voici un exemple :
# Nous allons afficher le mot "Informatique"
set un = "Infor"
set deux = "ma"
print "$un$(deux)tique"
S'il vous est possible de créer des variables de toutes
pièces, un certain nombre de variables internes sont prédéfinies.
Voici les plus utilisées :
* $appname : retourne le nom du programme "CD Shell".
* $dateDay : retourne la date d'aujourd'hui.
* $dateMonth : retourne le nom du mois.
* $dateYear : retourne le nom de l'année.
* $fda $fdb : retourne les identificateurs employés par
le Bios pour les deux premiers lecteurs de disquettes.
* $hda $hdb $hdc $hdd : retourne les identificateurs employés
par le Bios pour les quatre premiers lecteurs de disques.
* $lastKey : stocke la valeur numérique correspondant à
la dernière touche pressée.
if $lastKey == key[enter]
then print "Vous avez appuyé sur la touche Entrée."
* $mouse : vérifie si une souris compatible PS/2 est connectée
ou non. Si vous possédez une souris USB, activez la fonction
correspondante dans le Bios ("Enable Legacy Mouse").
* $textColor : définit ou vérifie la couleur par
défaut du texte.
* $timeHour - $timeMinute - $timeSecond : renvoie un horodatage
en heures, minutes et secondes.
* $vesa : permet de vérifier si CD Shell est capable d'afficher
des images CSI. Dans ce cas les extensions Vesa du Bios doivent
être supportées.
Définition : le terme VESA ("Video
Electronics Standards Association") désigne un standard
commun à toutes les cartes graphiques et qui définit
un certain nombre de nouvelles fonctionnalités dans le
BIOS. Ces dernières permettent entre autre d'envoyer un
certain nombre d'informations aux programmes qui utilisent les
fonctions graphiques de l'ordinateur.
* $version : retourne la version du programme.
* $vga : permet de vérifier si le mode graphique minimal
("VGA") est supporté.
- Gérer les caractères
accentuées dans les commandes du menu de démarrage
:
Vous devez dans ce cas utiliser un éditeur de texte qui
gère les caractères ANSI. Les différences
de polices de caractères entre la norme Ansi (Windows)
et OEM (Ms-Dos) font que si vous vous servez d'un éditeur
de texte comme le Bloc-Notes les caractères accentués
ne s'afficheront pas correctement dans les sorties écran
en mode "Console". Ainsi, la phrase "Je répète
: "Vous êtes un entêté"" s'affichera
comme cela : Je rÚpÞte : "Vous Ûtes un
entÛtÚ". Il y a différentes solutions
:
Vous pouvez toujours vous servir de l'éditeur de texte
prévu dans toutes les versions de Windows : "Edit".
ll existe de nombreux programmes vous permettant d'opérer
la conversion Ansi vers OEM et vice-versa. "OEMANSI.exe"
est un programme écrit en français que vous pouvez
télécharger à partir de cette adresse : http://perso.wanadoo.fr/andre.araste/tele2.htm.
Décompressez l'archive ZIP nommée Oemansi.zip puis
double-cliquez sur ce fichier exécutable : Setup.exe afin
de lancer l'installation de ce logiciel.
Imaginons que notre fichier à convertir s'appelle Test.bat
suivez la procédure suivante :
1) Cliquez sur Démarrer/Tous les programmes/OEMANS/OEMANSI.
2) Cliquez sur le bouton Ouvrir Fichier.
3) Dans la liste déroulante Fichiers de type :, sélectionnez
Tous les fichiers (*.*) puis votre fichier Batch.
4) Cochez le bouton radio ANSI(Win) puis la flèche dirigée
vers le bas.
Il est possible d'effectuer l'opération inverse !
5) Cliquez sur le bouton Sauvegarde OEM puis lancer le processus
de conversion.
6) Confirmez le remplacement ou non de l'ancienne version.
- Tester le menu de
démarrage :
Le débogage du programme se fait très facilement
!
1) Dans le dossier cds2106, ouvrez un dossier nommé Boot.
2) Double-cliquez sur un fichier nommé Cdshw.com.
Par défaut, un fichier nommé cdshell.ini est déjà
placé. Il suffit de le remplacer par votre propre fichier
de script.
3) Afin de quitter le mode débogage, revenez en mode Console
puis saisissez : exit
Définition : En anglais debug, ce terme
désigne les opérations consistant à chercher
les éventuelles erreurs (bogues) que peuvent présenter
un programme.
|