SCR/AL1 - TOME I. Les programmes
3. SCR4_E : outil de compilation et de documentation
scr4_e est le compilateur d'objets SCR. A partir d'une liste de fichiers contenant la description des objets, scr4_e peut générer soit un fichier scr (objets compilés), soit un fichier .c (objets sous forme de structures C).
En plus d'un de ces deux fichiers, scr4_e extrait les SCREENS définis dans les PAGES et les commentaires pour les placer dans un fichier .cmt, utilisé tout au long de l'application pour relire les informations d'affichage.
En dehors de cette utilisation standard de scr4_e, des générations automatiques sont possibles :
- PAGES à partir des définitions de ISAM
- MPAGES à partir des définitions de SMPAGES
- layout de Help à partir d'une A_BAR
- layout de Help à partir des ISAM
- layout de Help à partir des PAGES
La syntaxe générale est exposée ci-dessous. Les pages suivantes sont consacrées aux explications détaillées du fonctionnement de scr4_e.
Syntaxe
scr4_e -option args ...
Option Args Description
-------------------------------------
-a file : output ascii
-af file .. : load ascii file(s)
-C line col : clock at line col
-c file : output C
-cmt file : comments in file
-drwmem : all draws in mem
-fldmem : all flds in mem
-h : display this help
-hap file : dump helpfile from a_bar
-hi file : dump helpfile from isams
-hpg file : -- cancelled --
-I file : #include file in C files
-i file : dump pages from isams
-DT line col : set date at (line, col)
-noobj : no obj in .C
-olddef : old page field defines
-k line col : WAIT/INPUT at line col
-l ext : set ascii files ext (.f)
-M line col : MEM at line col
-main action : create main() in C file
-nodef :
-o file : output object (.scr)
-of file : load object file (.scr)
-optmem : all options in mem
-s- : don't display statistics
-smp file : dump MPAGE defn file
-t term : dump term in C file
-1obj : single file C output
-c- : c output without scr.f
-pgalign : force pg flds alignment
-isalign : force is flds alignment
-w filename : generate windows files
-namemem : all fields names in memory
-actmem : all actions in memory
Compilation des sources SCR
A partir d'un ou de plusieurs fichiers sources SCR - c'est-à-dire contenant des descriptions d'objets SCR - scr4_e va générer des fichiers qui serviront ensuite lors de la phase d'édition de liens (link).
Il s'agit de préciser quels fichiers contiennent les sources, ce qui doit en être extrait et sous quel format (objet ou C). Des paramètres complémentaires permettent de préciser une série de détails.
Définition des fichiers à compiler
Les paramètres suivants prennent en charge ces définitions :
-af file1 file2 ... : load ascii file(s)
-l ext : set ascii files ext (.f)
-of file : load object file (.scr)
-t term : dump term in C file
-c- : c output without scr.f
- -af indique que les fichiers de définition des objets sont des fichiers ASCII. Un ou plusieurs fichiers peuvent être spécifiés. Le fichier scr.f sera toujours lu avant les fichiers utilisateur. Ce fichier contient des objets standard de SCR/AL1.
- -of indique que le fichier de définition est déjà compilé et donne le nom de ce fichier. Un seul fichier pré-compilé (par scr4_e) peut être fourni.
- -l indique l'extension des noms de fichiers ASCII à interpréter. Voir scr4 pour plus d'informations à ce sujet.
- -t donne le nom du driver à lire. Si -t n'est pas précisé, aucun driver ne sera lu et ce n'est qu'à l'exécution du programme que le driver sera chargé. Si le driver est chargé par scr4_e, il sera fixé pour le programme, ce qui est normalement préférable en DOS. En Unix, sauf si on n'utilise qu'un seul type de terminal, cette option ne doit pas être retenue.
- -c- indique que l'output sera en langage C, et que le fichier scr.f ne doit pas être chargé. Cette option s'utilise pour compiler une application non interactive utilisant seulement des bases de données (ISAM) et des ACTIONS. Elle permet d'éviter le link avec la librairie scrc.
Les fichiers sont recherchés en suivant la même logique que scr4.
Définition du mode de compilation
scr4_e peut générer 3 output distincts correspondant aux trois librairies scra, scro et scrc.
Les paramètres définissant le mode choisi sont :
-a file : output ascii
-c file : output C
-o file : output object (.scr)
-c- file : c output without scr.f
- -a indique que l'output sera ASCII
- -c et -c- indiquent que l'output se fera sous forme de structure C. Dans le cas de -c-, le fichier scr.f ne sera pas chargé (voir ci-dessus).
- -o indique que l'output sera un fichier de définition des objets en format pseudo-compilé.
Dans tous les cas, file est le nom de base des fichiers output.
Les fichiers générés sont :
- <file>.h : fichier de déclaration des structures et des objets SCR. Ce fichier sera inclus (#include) dans tout module C qui utilise des objets SCR.
- <file*>.c : fichier contenant les définitions des structures et les fonctions d'initialisation adaptées au mode de compilation (a, o ou c). Suivant le cas, de 1 à 5 fichiers sont générés. Leur nom est file*.c, * valant de 0 à 4. Pour ne générer qu'un seul fichier file.c, on peut utiliser le paramètre -1obj (voir ci-dessous).
- <file>.cmt : fichier contenant les définitions des SCREENS, des COMMENTS, des FIELDS, des DRAWS et des OPTIONS. Le contenu de ce fichier peut varier en fonction des attributs définis plus bas.
- <file>.scr : fichier créé uniquement dans le cas du mode objet (-o). Il contient une version compilée de tous les objets et est chargé en mémoire par la fonction SCR_base_init().
Les seuls fichiers toujours générés sont les .c et le .h. Les deux autres dépendent du mode de compilation et du contenu des objets.
Paramètres de compilation
En plus du mode, certains paramètres de compilation vont influencer le contenu et les noms des fichiers décrits ci-dessus. Ces paramètres sont :
-C line col : clock at line col
-k line col : WAIT/INPUT at line col
-M line col : MEM at line col
-cmt file : comments in file
-1obj : single file C output
-drwmem : all draws in mem
-fldmem : all flds in mem
-optmem : all options in mem
-actmem : all actions in mem
-namemem : all fields names in mem
-I file : #include file in C files
-main action : create main() in C file
-nodef : #define not dumped in .h
-noobj : no OBJ in .c
-t term : dump term in C file
-s- : don't display statistics
-pgalign : force PAGE fields alignment
-isalign : force ISAM fields alignment
-w filename : generate windows files
-olddef : old page field defines
-v3cnf : ancienne version de SCR_confirme()
-v3err : ancienne version de PG_display_error()
- -C, -DT, -k et -M indiquent que l'écran de l'application contiendra aux positions indiquées respectivement une horloge, une date, le mot WAIT ou INPUT et la mémoire disponible. Ces informations sont sauvées dans le fichier .c généré par scr4_e.
- -cmt permet de changer le nom du fichier .cmt généré. Ce nom apparaît dans la fonction SCR_base_init() générée dans le fichier .c.
- -1obj permet d'éviter d'avoir plusieurs fichiers .c. Dans le cas des grosses applications, ce paramètre est à proscrire : certains compilateurs sont incapables de compiler un fichier dépassant une certaine taille.
- -fldmem, -drwmem, -optmem et -actmem permettent d'éviter que respectivement les champs de PAGES, les DRAWS des PAGES, les OPTIONS de MENUS et les ACTIONS ne soient placés dans le fichier .cmt. Cette option est notamment utile pour les applications voulant fonctionner sans fichiers auxiliaires. Le même effet peut être obtenu via la section GLOBAL.
- -namemem indique que les noms des champs des PAGES doivent toujours rester en mémoire, notamment pour l'utilisation des fonctions PR_listing(), etc
- -I file indique que le fichier dont le nom est donné doit être inclus dans tous les fichier .c générés.
- -main indique que le fichier .c devra contenir un main() qui exécutera l'action dont le nom est donné. Cela permet de constituer une application sans avoir à se préoccuper de générer le programme principal, ou même sans connaître le langage C.
- -nodef : évite de générer dans le fichier .h tous les #define liés aux valeurs directes des champs des PAGES et des ISAMS. Le même effet peut être obtenu via la section GLOBAL.
- -noobj : par défaut, ne génére plus de structures OBJ dans le fichier c. Cela n'empêche pas de générer sélectivement certains OBJ en plaçant le mot-clé DEF_OBJ dans les objets eux-mêmes. Cette option permet de gagner une place considérable dans l'exécutable. Le même effet peut être obtenu via la section GLOBAL.
- -t indique que le driver nommé doit faire partie intégrante du fichier .c généré. Cette option ne permettra plus par la suite de changer le driver pour cette application. Celui-ci est en effet fixé dans les sources.
- -s- indique que l'affichage des statistiques n'est pas souhaitée. Ces statistiques indiquent le nombre d'objets compilés par type d'objet.
- -pgalign et -isalign permettent de forcer l'alignement sur des limites de mots-machine de tous les champs de PAGE ou d'ISAM. Une discussion détaillée des implications de ces paramètres peut être trouvée dans le chapitre consacré au programme scr4. Le même effet peut être obtenu via la section GLOBAL.
- -w filename : génére des fichiers adaptés à Windows : deux fichiers de ressources (.dlg et .rc), un fichier .h et un fichier .c. Cette option est en test et ne sera réellement opérationnelle dans les versions futures.
- -olddef : des "define" pour les champs des pages sont définis dans le fichier .h généré par scr4_e. Dans les versions antérieures, des typedef étaient générés pour tous les champs dont les suivants étaient de même type (STRING, DIR ou PASSWD), de même longueur et ce seulement lorsque les suivants ne portaient pas de nom. La nouvelle version propose par défaut une version compatible avec les définitions des ISAM. Ce paramètre assure la compatibilité avec les applications existantes.
- -v3cnf : génère dans le code l'ancienne version de SCR_confirme()
- -v3err : génère dans le code l'ancienne version de PG_display_error()
Exemples extraits d'un fichier makefile
Compilation des objets et link du programme
l_objs.c : l_ap.f l_dbd.f l_mp.f l_pgi.f l_pgs.f l_prn.f
scr4_e -af l_dbd l_pgi l_ap l_mp.f l_pgs l_prn.f \
-C 2 60 -M 25 72 -k 2 75 \
-o l_objs \
-cmt l_objs.cmt \
-I lex.h -fldmem -drwmem -1obj \
lex : l_objs.c l_main.o l_misc.o l_prmp.o l_objs.o \
l_conf.o l_subf.o l_prn.o l_disp.o
cc -o lex l_*.o scr4o.lib scr4i.lib
La construction de l_objs.c dépend de tous les fichiers de définition d'objets SCR. Ces fichiers ont dans le cas présent (c'est la valeur par défaut) l'extension .f. La commande scr4_e de compilation a les caractéristiques suivantes :
- -af : compilation de fichiers sources (six) en format ascii
- -C, -M, -k : une horloge sera maintenue à l'écran en position (2, 60), le message INPUT ou WAIT en position (2, 75) et la mémoire disponible en position (25, 75).
- -o : les fichiers output auront pour nom l_objs.*. Il s'agira de fichiers extraits pour une application en mode objet. Les fichiers construits seront :
- l_objs.h (fichier de déclarations et de define),
- l_objs.c (fichier de définition et des fonctions de base)
- l_objs.scr (fichier contenant les objets compilés)
- l_objs.cmt (fichier contenant les SCREEN)
- -cmt : le nom du fichier .cmt sera l_objs.cmt
- -I : la ligne #include "lex.h" se trouvera en tête des fichiers l_objs.h et l_objs.c.
- -fldmem, -drwmem : les FIELDS et les DRAWS des PAGES ne seront pas sauvés dans le fichier .cmt, mais dans le fichier .scr. Ils seront par conséquent toujours en mémoire pendant l'exécution du programme.
- -1obj : le fichier .c généré sera unique. Sans cette option, ce fichier aurait été découpé en plusieurs sous-fichiers nommés l_objs0.c, l_objs1.c, etc.
Le programme proprement dit dépend d'une série de fichiers C construits pour l'application (l_*.c). Pour créer le programme, il suffit de linker
- les modules objets de l'utilisateur
- le module compilé l_objs.o
- les librairies adéquates, dans ce cas-ci scr4o, puisque le mode de travail est le mode objet (scr4_e -o ...), et scr4i, les bases de données étant utilisées dans le cadre de ce projet.
Générations automatiques
Les paramètres suivants permettent de générer de manière automatique différents fichiers :
-hap file : dump helpfile from a_bar
-hi file : dump helpfile from isams
-hpg file : dump helpfile from pages
-i file : dump pages from isams
-smp file : dump MPAGE defn file
- -hap sauve dans un fichier un layout de fichier help basé sur les A_BAR définies dans les fichiers lus. Ce fichier pourra servir de base à la constitution du fichier d'aide. Chaque option de chaque menu et sous-menu de l'A_BAR est repris comme sujet dans le fichier d'aide.
- -hi génère un fichier de help basé sur tous les ISAMS lus. Pour chacun, le nom, le type, la longueur et le titre sont sauvés dans le fichier. Chaque fichier correspond à un sujet avec pour nom celui-de l'ISAM.
- -hpg génère pour chaque page une entrée dans un fichier de help.
- -i génère pour chaque ISAM une PAGE standard reprenant les caractéristiques indiquées dans l'ISAM. Ce fichier servira de base à la construction des PAGES de l'application.
- -smp génère un fichier de MPAGES, chacune ayant pour nom celui d'une SMPAGE. Cette option permet de raffiner la définition des MPAGES sans avoir à se préoccuper des positions précises de chaque champ. En l'absence de cette option, les SMPAGES sont traduites en MPAGES et font partie de l'application comme MPAGE.
Construction des PAGES à partir des ISAMS
scr4_e -af l_dbd -i l_pgf.f
Cette instruction charge d'abord l_dbd.f, module de définition ASCII des ISAM, et construit pour chaque ISAM rencontré une PAGE contenant tous les champs de l'ISAM et les propriétés de ces champs.
Cette méthode est souvent utilisée en début de développement : lorsque la base de données n'est pas encore définitive, la construction des écrans risque d'être une perte de temps. Les écrans sont ainsi construits "au brouillon" et pourront être transformés plus tard pour des raisons d'esthétique ou de facilité d'emploi.
On constate que cette façon de travailler permet de se contenter au départ de définir le contenu des bases de données et une barre d'action élémentaire. Le programme peut déjà tourner sur les bases de données réelles, pour être soumis à la critique.
Construction du layout du fichier d'aide
scr4_e -af l_dbd l_pgi l_ap l_mp l_pgs -hap hap -hi his
Cette instruction construit 2 fichiers au format du fichier d'aide. Ces fichiers sont basés sur les objets décrits dans les sources SCR :
- hap : fichier contenant par élément de l'A_BAR et par option et sous-option un sujet dont le titre est celui trouvé dans les MENUS et A_BAR
- hi : fichier contenant par ISAM un sujet dont le nom est celui de l'ISAM et reprenant tous les champs de cet ISAM avec leurs caractéristiques