Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME I. Les programmes

13. SCR4_MKI : Générateur de programme d'installation

Introduction

scr4_mki est un utilitaire ayant pour objet de créer, à partir d'instructions fournies dans un fichier ASCII annexe, un programme d'installation et une série de fichiers compressés destinés à l'installation d'un logiciel, d'une base de données, d'un upgrade, etc.

scr4_mki peut également créer un seul programme d'auto-installation, particulièrement utile pour les downloads via Internet.

Il est opérationnel à la fois en mode caractère (DOS) ou en mode Windows. Dans ce dernier cas, il est capable d'enregistrer des fichiers, un programme de désinstallation et de définir des associations entre types de fichiers, icônes et programmes.

Optionnellement, scr4_mki organisera sur plusieurs disquettes le programme et les fichiers d'installation.

Parmi ses principales fonctions, on peut noter :

Principes

La construction du programme d'installation se base sur un fichier de définition. En gros, ce fichier fournit à scr4_mki la liste de fichiers qui vont faire l'objet de l'installation, organise éventuellement ces fichiers en sous-groupes, et spécifie une série d'options d'installation, de notes à afficher, etc.

Une fois ce fichier constitué, le programme scr4_mki va être exploité pour :

Sa syntaxe est définie ci-dessous.

Syntaxe

scr4_mki -option args ... @responsefile

OPTION ARGUMENTS REQ DEFAULT DESCRIPTION
------ --------- --- ------- -----------
-i filename .. Y input ascii files
-c N compile only
-floppy size N 1457664 set floppy space
-mkdisk drive:[dir] N A: create install. disk(s)
-w N create install for Windows 32 bits
-self N create an auto-extractable program
-h N display this help

L'option -c permet d'éviter de créer le fichier install.exe et les fichiers compactés. scr4_mki se contente alors de vérifier la syntaxe du fichier de définition.

L'option -floppy permet d'indiquer la taille en bytes disponibles sur les disquettes d'installation. Cette taille doit être connue afin de placer chaque fichier sur une disquette déterminée.

L'option -mkdisk lance, après construction de install.exe et compression des fichiers à installer, la copie sur disquettes des fichier nécessaires.

L'option -w crée une installation pour Windows.

L'option -self crée un seul exécutable (install.exe) contenant tous les fichiers nécessaires à l'installation.

Le fichier de définition

Le fichier de définition se structure en une série de sections et de directives, dont certaines sont multiples tandis que d'autres ne peuvent se présenter qu'une fois.

Syntaxe du fichier de définition

Directives

    {FRENCH | DUTCH | ENGLISH}
TITLE "titre de l'écran"

Le mot-clé indiquant le langage indique la langue dans laquelle les messages générés par scr4_mki doivent être affichés.

Le TITLE sera le texte (40 caractères max) qui se trouvera dans la première ligne de l'écran pendant toute la phase d'installation.

Sections

Les sections qui portent un nom peuvent être en nombre quelconque : FILE par exemple définit un des fichiers à installer. Dans tous les cas la syntaxe est la même : le mot-clé indiquant le type de l'objet que la section va définir, son nom (optionnel), suivi de la définition entre accolades.

Si la définition de cet objet a déjà eu lieu, on ne peut la reprendre. Dans ce cas, il suffit de donner son nom.

Les sections INTRO, README, AUTOEXEC, SYSTEM et NOTES ne peuvent être définies qu'une seule fois.

    MSG name {
[PAGE]
[colordefn] "text"
...
}
colordefn ::= B | G | R | Y | C | W | M
DIR name {
[ASK msgdefn]
"default dir"
}
FILE name {"source_file" ["comp_file" ["dest_file"]] DIR dirdefn}
FLIST name {FILE filedefn | FLIST flistdefn ...}
GROUP name {[ASK msgdefn] FLIST flistdefn}
README {ASK msgdefn FILE filedefn}
AUTOEXEC {ASK msgdefn
ADDPATH dirdefn ADDPATH dirdefn ...
DELPATH "path" DELPATH "path" ...
ADDLINE "line" ADDLINE "..." ...
}
SYSTEM {ASK msgdefn "command;command;..."}
INTRO {MSG msgdefn MSG msgdefn ...}
NOTES {MSG msgdefn MSG msgdefn ...}
REGISTER name {
FILE filedefn
EXT ".ext"
CODE "code"
ICON "iconref"
TITLE "title"
OPEN "opencmd [parms]"
PRINT "printcmd [parms]"
NEW "newcmd [parms]"
}

GROUPMENU {
TITLE "title"
OPTION {
FILE filedefn
TITLE "title"
CMD "command [parms]"
DIR "startup dir"
}
OPTION ...
}
UNINSTALL {
CODE code
TITLE "title"
DIR dirdefn
}

DESCRIPTION {
PROVIDER "text"
PROGRAM "text"
TITLE "text"
VERSION "text"
}

MSG

L'objet MSG définit un message, tel qu'il sera affiché à l'écran. Bien que la syntaxe ne l'empêche pas, plus de 12 lignes sont à proscrire : l'écran défilerait et les premières lignes ne seraient jamais visibles.

Si on veut que le message commence en haut de l'écran, on place la mot-clé PAGE en début. Ensuite, ligne par ligne, la couleur de la ligne, suivie du texte entre doubles quotes (max 76 caractères) seront définis.

Par défaut, la couleur de la ligne précédente en reproduite (Blue au départ).

Par exemple, on posera une question de la façon suivante :

    MSG path {
PAGE
Y " MODIFICATION DU FICHIER AUTOEXEC.BAT"
Y " "
""
B "Install peut ajouter à votre PATH le nom du directory où sont"
B "installés les programmes. La version actuelle du fichier"
B "autoexec.bat sera sauvegardée sous le nom autoexec.old."
""
Y "Voulez-vous que install modifie pour vous le fichier autoexec.bat ? "
}

La dernière ligne du message peut contenir une macro (voir plus bas). Celle-ci est remplacée par sa valeur dans le texte.

DIR

L'objet DIR est référencé dans les objets FILE et éventuellement dans l'objet AUTOEXEC. Dès qu'un fichier doit être installé dans ce directory, la question est posée à l'utilisateur quant au nom du directory dans lequel l'installation doit se faire.

Si aucune question n'est posée (par de ASK), le nom fournit reste inchangé.

Le nom du directory peut être remplacé par une macro. Dans ce cas, le nom du directory sera remplacé par la valeur de la macro avant de poser la question à l'utilisateur.

On aura par exemple :

    DIR maindir {
"c:/test"
ASK {
Y "Directory du programme TEST ($selsize) ? "
}
}

DIR utildir {
"$maindir"
ASK {
Y "Directory des utilitaires ($selsize) ? "
}
}

Notez que / peut remplacer \\. Les questions posées à l'utilisateur (après remplacement de macros) seront :

   Directory du programme TEST (1.34 MB) ? c:\test
Directory des utilitaires (0.43 MB) ? c:\test

Le deuxième nom proposé sera remplacé par la réponse à la première question (macro $maindir).

FILE

L'objet FILE définit un des fichiers à installer. Il doit contenir au moins deux éléments : le nom du fichier sur le système courant (la source) et le nom du directory où ce fichier va être installé.

Dans certains cas, deux autres éléments devront être fournis : le nom du fichier compressé (local et sur disquette) et le nom du fichier à installer.

Le fichier source est celui qui existe sur le système. Par défaut, le fichier compressé est copié dans le directory courant en remplaçant la dernière lettre du nom ou de l'extension par un point d'exclamation(!).

Ainsi,

    FILE mt_exe {"c:/scr/mt.exe" DIR maindir}

générera un fichier mt.ex! dans le directory courant et sur disquette, et le fichier mt.exe dans le directory maindir lors de l'installation.

Si deux fichiers portant le même nom doivent faire l'objet de l'installation, on fournira également les autres noms. Imaginons par exemple deux versions de mt.exe, une pour un 386 et une normale. On aura alors :

    FILE mt86_exe  {"c:/scr/mt.exe"     "mt86.ex!"  "mt.exe" DIR dir86}
FILE mt386_exe {"c:/scr/386/mt.exe" "mt386.ex!" "mt.exe" DIR dir386}

La version 86 sera compressée et placée sur disquette sous le nom mt86.ex!, tandis que la version 386 sera compressée sous le nom mt386.ex!. Lors de l'installation, les deux fichiers seront installés dans des directory différents sont le nom mt.exe.

Autre cas : certains fichiers doivent être installés dans un sous-directory du directory des programmes, comme c'est souvent le cas des bases de données. On utilisera la même méthode en précisant le nom du sous-directory :

    FILE rf_mem_dat    {"db/rf_mem.dat"
"rf_mem.da!"
DIR maindir "db/rf_mem.dat"
}
FILE rf_mem_idx {"db/rf_mem.idx"
"rf_mem.id!"
DIR maindir "db/rf_mem.idx"
}

FLIST

Il s'agit simplement d'une énumération d'objets de type FILE ou FLIST qui forment un tout logique et seront utilisés dans la définition d'un ou de plusieurs groupes.

GROUP

Les groupes occupent une place centrale dans le processus. Dans l'ordre où ils sont définis, la question (ASK ...) sera posée à l'utilisateur. Si la réponse est positive, ce groupe sera retenu pour l'installation. Les fichiers concernés seront marqués et les questions concernant les groupes suivants seront posées. Si la réponse est positive, il se peut qu'un des groupes suivants soit entièrement marqué. Dans ce cas, on fera l'économie de la question concernant ce groupe.

Si le mot-clé ASK suivi d'une question ne se trouve pas dans la définition du groupe, le groupe est d'office installé.

Par exemple :

    FLIST fl1  {FILE f1 FILE f2}
FLIST fl2 {FILE f3 FILE f4}
FLIST all {FLIST fl1 FLIST fl2}
GROUP all{
ASK {"Installer tous les groupes ? "}
FLIST all
}
GROUP fl1 {
ASK {"Installer groupe 1 ? "}
FLIST fl1
}
GROUP fl2 {
FLIST fl2
}

Si la réponse à la question "Installer tous les groupes ?" est positive, la question concernant le groupe 1 ne sera pas posée, puisque les fichiers concernés par le groupe 1 seraient déjà marqués.

Dans tous les cas, le groupe 2 sera installé, sans qu'une question ne soit posée.

README

Cette section permet de poser une question à l'utilisateur et, en cas de réponse positive, d'afficher à l'écran le contenu du fichier ASCII défini par l'objet FILE précisé. Ce fichier doit avoir été installé sur le disque dur, car c'est celui-là qui est lu.

Il s'agira en général d'un fichier de type read.me.

AUTOEXEC

Cette section permet de poser une question et, en cas de réponse positive, d'adapter le fichier c:\autoexec.bat de diverses façons.

SYSTEM

Cette section pose une question et exécute, si la réponse est positive, toutes les instructions passés dans le texte. Si plusieurs commandes doivent être exécutées, elles seront séparées par des points-virgules.

Non implémenté sous Win32

INTRO et NOTES

Ces sections affichent un ou plusieurs messages en début (INTRO) et en fin (NOTES) d'installation. C'est le moment d'indiquer la version du programme, son objet, les auteurs, les dernières indications utiles, etc).

Plusieurs messages peuvent être affichés en raison de la limite de 12 lignes par message.

Notes non implémenté sous Win32

REGISTER

Ces sections permettent l'enregistrement de types de fichiers (Windows) et les associations avec un applicatif.

    REGISTER code {
FILE référence d'un fichier_installé
EXT ".eqs"
CODE "IODE.EQS"
ICON "$maindir\\iode.exe,2"
TITLE "IODE Equations"
OPEN "$maindir\\iode.exe -l %1"
PRINT "$maindir\\iode.exe -p %1"
NEW "$maindir\\iode.exe -n"
}

Le recours à cette section permet d'associer les extensions de fichiers à une application et à une icône.

GROUPMENU

Cette section permet d'ajouter des options dans le sous-menu Programmes du menu Start.

GROUPMENU {
TITLE "Titre de l'option du groupe"
OPTION {
FILE référence d'un fichier_installé
TITLE "texte de l'option"
CMD "commande à exécuter avec paramètres éventuels"
DIR "répertoire de démarrage du programme"
}
OPTION ...
}

UNINSTALL

Cette section permet d'installer un programme de désinstallation du groupe de fichiers ou de programme en cours d'installation. Si cette section est définie, une option supplémentaire est installée dans le groupe de programme.

Un fichier contenant l'ensemble des fichiers installé est automatiquement créé lors de l'installation. Ce fichier est utilisé lors de la désinstallation. Si une installation est effectuée en plusieurs passes, les installations antérieures sont mémorisées poour permettre une désinstallation complète.

Utiliser ce programme permet d'enregistrer dans le système Windows 95 le fait que l'application est installée. On pourra dès lors désinstaller par le Control Panel (Add/remove Programs).

    UNINSTALL {
CODE code du programme
TITLE "titre de l'application"
DIR dirdefn
}

DESCRIPTION

Cette section est acceptée par le programme scr4_mki mais n'a pas encore d'effet.

    DESCRIPTION {
PROVIDER "Federal Planning Bureau"
PROGRAM "IODE 5"
TITLE "IODE Version 5"
VERSION "5.01"
}

Les macros

Dans les questions est les strings en général, différentes macros peuvent être utilisées. Celles-ci seront remplacées lors de l'affichage ou de l'exécution de la commande concernées par la valeur réelle.

Les macros sont :

Ces différentes macros sont utilisées dans l'exemple du chapitre suivant.

Autres directives

Les autres directives classiques du langage C sont disponibles :

Exemple

L'exemple qui suit reprend le fichier de définition de disquettes d'installation et couvre une bonne partie des problèmes et cas spéciaux qui peuvent se présenter.

Il divise le travail en plusieurs étapes dont la plus importante est la construction du fichier mki.i de définition.

Objet du programme

Ce programme gère quelques fichiers de données. Il se compose de deux groupes principaux : les programmes de gestion et les bases de données, et des éditeurs supplémentaires.

1. Le fichier mki.i

Le texte presque complet du fichier mki.i est présenté ci-dessous.

    TITLE "ADM 1.2 - INSTALLATION"
FRENCH
INTRO {
MSG {
Y " +--------------------------------------+"
Y " | Installation du logiciel ADM |"
Y " +--------------------------------------+"
G " (version 1.2)"
""
G "Le programme ADM est un outil de gestion administrative."
G "L'installation peut être interrompue à tout moment"
G "en pressant la touche ESCAPE de votre PC."
G ""
B "Pressez ENTER pour commencer l'installation du programme"
B "et des données."
}
}
    DIR maindir {
"c:/ADM"
ASK {
Y "Directory du programme ADM ($selsize) ? "
}
}

DIR utildir {
"$maindir"
ASK {
Y "Directory des utilitaires ($selsize) ? "
}
}
    FILE prhist_pr       {"PRHIST.PR"   DIR maindir}
...
FILE prof_pr {"PROF.PR" DIR maindir}
FILE rc_objs_cmt {"RC_OBJS.CMT" DIR maindir}
FILE rc_objs_scr {"RC_OBJS.SCR" DIR maindir}
FILE readme_ADM {"README.ADM" DIR maindir}
FILE adm_exe {"ADM.EXE" DIR maindir}
FILE adm_hlp {"ADM.HLP" DIR maindir}
FILE scr_err_txt {"SCR_ERR.TXT" DIR maindir}
FILE serv_pr {"SERV.PR" DIR maindir}
FILE stat_pr {"STAT.PR" DIR maindir}
    FILE rf_mem_dat  {"db/rf_mem.dat"  "rf_mem.da!"
DIR maindir "db/rf_mem.dat"}
FILE rf_mem_idx {"db/rf_mem.idx" "rf_mem.id!"
DIR maindir "db/rf_mem.idx"}
FILE rf_mem_num {"db/rf_mem.num" "rf_mem.nu!"
DIR maindir "db/rf_mem.num"}
FILE rf_prof_dat {"db/rf_prof.dat" "rf_prof.da!"
DIR maindir "db/rf_prof.dat"}
...
FILE rf_prof_idx {"db/rf_prof.idx" "rf_prof.id!"
DIR maindir "db/rf_prof.idx"}
FILE rf_serv_dat {"db/rf_serv.dat" "rf_serv.da!"
DIR maindir "db/rf_serv.dat"}
FILE rf_serv_idx {"db/rf_serv.idx" "rf_serv.id!"
DIR maindir "db/rf_serv.idx"}
FILE rf_stat_dat {"db/rf_stat.dat" "rf_stat.da!"
DIR maindir "db/rf_stat.dat"}
FILE rf_stat_idx {"db/rf_stat.idx" "rf_stat.id!"
DIR maindir "db/rf_stat.idx"}
    FILE mt_exe      {"c:\\util\\MT.EXE"     DIR utildir}
FILE mmt_exe {"c:\\scr\\MMT.EXE" DIR utildir}
FILE mt_hlp {"c:\\scr\\MT.HLP" DIR utildir}
FILE mmt_hlp {"c:\\scr\\MMT.HLP" DIR maindir}
    FLIST data {
FILE rf_dept_idx FILE rf_dipl_dat FILE rf_dipl_idx FILE rf_mem_dat
FILE rf_mem_idx FILE rf_mem_num FILE rf_mtsf_dat FILE rf_mtsf_idx
...
FILE rf_octsf_dat FILE rf_octsf_idx FILE rf_octsf_num
FILE rf_post_dat FILE rf_post_idx FILE rf_prof_dat FILE rf_prof_idx
FILE rf_serv_dat FILE rf_serv_idx FILE rf_stat_dat FILE rf_stat_idx
}
    FLIST pgm {
FILE bord_pr FILE comit_pr FILE dept_pr FILE dipl_pr
FILE mail_pr FILE mmt_hlp
...
FILE post_pr FILE prhist_pr FILE prof_pr FILE rc_objs_cmt
FILE rc_objs_scr FILE readme_ADM FILE ADM_exe FILE ADM_hlp
FILE ADM_id FILE ADM_oid FILE scr_err_txt FILE serv_pr
FILE stat_pr

FLIST data
}
    FLIST util {
FILE mt_exe FILE mmt_exe FILE mt_hlp
}

GROUP pgm {
ASK {
PAGE " SELECTION DES OUTILS A INSTALLER"
G " --------------------------------"
G "Installation de ADM et de vos données ($selsize) ? "
}

FLIST pgm
}

GROUP util {
ASK {
G "Deux éditeurs de fichiers peuvent être installés"
G "sur votre PC (mt et mmt) si vous le souhaitez."
G "Installation des éditeurs mt et mmt ($selsize) ? "
}

FLIST util
}
    README {
FILE readme_ADM
ASK {
PAGE
Y " CONSULTATION DES DERNIERES MODIFICATIONS"
Y " ----------------------------------------"
""
"Voulez-vous consulter les dernières modifications ? "
}
}
    AUTOEXEC {
ASK {
PAGE
Y " MODIFICATION DU FICHIER AUTOEXEC.BAT"
Y " ------------------------------------"
""
"Install peut ajouter à votre PATH le directory où sont"
"installés ADM et les éditeurs. La version actuelle du"
"fichier autoexec.bat sera sauvée sous le nom autoexec.old."
""
Y "Voulez-vous que install modifie le fichier autoexec.bat ?"
}
ADDPATH maindir
ADDPATH utildir
}
    SYSTEM {
ASK {
PAGE
Y " INSTALLATION DES DONNEES DE BASE"
Y " --------------------------------"
B ""
B "Les données de base vont être importées dans votre"
B "système. Cette opération peut prendre plusieurs minutes,"
B "selon le nombre d'enregistrements à importer et la vitesse"
B "de votre PC."
B ""
"Importer les données de base ? "
}

"cls;echo Installation des données;$maindir\\ADM -init $source 5"
}
    NOTES {
MSG {
PAGE
Y " DOCUMENTATION DU PROGRAMME"
Y " --------------------------"
""
B "Un manuel d'utilisation du programme ADM est disponible."
B "Ce manuel peut être consulté en cours d'utilisation du"
B "programme : il suffit de presser F1 où que l'on se trouve"
B "dans l'application pour obtenir les informations utiles."
B ""
B "Les dernières modifications du programme sont disponibles"
B "via le menu Divers/Dernières modifications."
}

MSG {
PAGE
Y " INSTALLATION DE ADM TERMINEE"
Y " ----------------------------"
""
B "L'installation du programme est à présent terminée."
B "En cas de problème, reportez-vous à la documentation."
B ""
B "Pour lancer le programme, placer-vous dans le directory"
B "d'installation et lancez la commande ADM."
}
}
/* **** DONNEES SPECIFIQUES A WINDOWS *****/
UNINSTALL {
CODE "ADM 1.2"
TITLE "ADM version 1.2"
DIR maindir
}
GROUPMENU {
TITLE "ADM 1.2"
OPTION {FILE adm_exe TITLE "ADM 1.2"
CMD "$maindir\\adm.exe" DIR "$maindir"}
OPTION {FILE readme_txt TITLE "Read Me"
CMD "$maindir\\readme.txt" DIR "$maindir"}
...
}
REGISTER EQS {
FILE adm_exe
EXT ".dat"
CODE "ADM.DAT"
TITLE "ADM Data"
OPEN "$maindir\\adm.exe %1"
PRINT "$maindir\\adm.exe -p %1"
ICON "$maindir\\adm.exe"
}

2. Créer les fichiers compressés et install.exe

Une fois le fichier mki.i créé, il suffit, pour créer les fichiers compressés et le programme install.exe, de lancer la commande suivante :

    scr4_mki -i mki.i

Il est à noter que seuls les fichiers nécessaires font l'objet d'un traitement : si un fichier est déjà compressé, il ne l'est plus lors d'une prochaine utilisation de scr4_mki. Une exception : si la date de création ou de modification du fichier source est postérieure à la date de création du fichier compressé, une nouvelle compression a lieu (comme le ferait le programme make).

A ce stade, on a tout pour réaliser une installation à partir du disque dur.

3. Création des disquettes

Scr4_mki est à même de placer les fichiers nécessaires sur disquette(s). Pour cela, il suffit d'ajouter le paramètre -mkdisk suivi du lecteur destinataire.

Si les disquettes ne sont pas des disquettes 1,44 MB et qu'une disquette ne suffit pas, il faut en plus préciser la taille du lecteur en bytes par le paramètres -floppy suivi de la taille (par exemple -floppy 720000).

    scr4_mki -i mki.i -floppy 720000 -mkdisk a:

Le programme install.exe est toujours placé sur la première disquette. Les autres fichiers sont placés au mieux sur la première et au besoin les autres disquettes.

Chaque disquette reçoit automatiquement un label avec son numéro d'ordre (inst_1, inst_2, etc).

4. Création d'un programme auto-installable

Pour créer un programme d'installation incluant tous les fichiers nécessaires à l'installation, il suffit d'utiliser le paramètre -self. Tous les fichiers sont alors regroupés dans un seul exécutable qui peut de la sorte être facilement transférés via Internet par exemple.

    scr4_mki -i mki.i -self

5. Création d'un programme d'installation pour Windows

Pour créer un programme d'installation pour Windows, on peut utiliser la même source mki.i et éventuellement y ajouter les données spécifiques à Windows : REGISTER, GROUPMENU, UNINSTALL et DESCRIPTION.

Il suffit alors de lancer la commande avec le paramètre -w.

    scr4_mki -i mki.i -w

L'option -self est également opérationnelle dans ce cadre.

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be