La procédure par ligne de commande consiste à adresser au système hôte, dans son langage et à son invite, une requête d'exécution du module exécutable :%mainLa commande main lance le processus de simulation. Dans ce mode, l'utilisateur ne peut intervenir sur ce processus avant la fin de la simulation (au terme normal prévu ou dans une situation ingérable par le système hôte). On doit donc avoir inclus dans le code du simulateur des instructions d'affichage à l'écran ou de sauvegarde sur fichiers d'informations sur l'évolution du système au cours de la simulation. Les fichiers ne peuvent être exploités que lorsque le système hôte a "rendu la main" à l'utilisateur.
- Les paramètres du système.
- Un simulateur lit généralement au tout début de sa tâche un fichier de paramètres du système. La justification de ces paramètres (voir page dédiée) est qu'ils permettent à un code exécutable fixé d'établir à chaque exécution des conditions initiales différentes et/ou de produire une évolution différente à partir des mêmes conditions initiales. Il suffit alors de modifier le contenu du fichier d'une exécution à l'autre. Les règles de rédaction du fichier des paramètres du système sont indiquées dans la page consacrée à la classe File. La ligne de commande est alors, par exemple :
%main parameterFileavec le programme principal suivant :main(int argc, char argv[]) { ... ParseParameterFile(argv[1]); ... }- Les paramètres de la simulation.
- Le programme principal doit contenir en son début des instructions qui construisent et spécifient une instance de la classe prédéfinie Simulation (voir page dédiée). Il s'agit notamment de préciser les instants de début et de fin, l'entité qui représente le système simulé, etc. Ces instructions peuvent être écrites directement dans la fonction main, ou bien exécutées indirectement par un appel à la fonction ParseSimulationFile, laquelle lit et interprète des spécifications placées dans un fichier en entrée du simulateur. Les règles de rédaction de ce fichier sont indiquées avec la classe File. Le programme est alors, par exemple :
%main parameterFile initSimuavec le programme principal suivant :main(int argc, char argv[]) { ... ParseSimulationFile(argv[2]); ... }Important : Les spécifications de sortie concernant une classe doivent etre énoncées (et interprétées par le simulateur) avant toute création d'instances pour cette classe. La lecture de ce fichier doit donc en général précéder celle d'un éventuel fichier de description de la structure, présenté ci-après.
- Les spécifications de sortie.
- Un simulateur construit avec DIESE peut exploiter un autre fichier placé en entrée, qui décrit ce que l'utilisateur veut connaître exclusivement de l'évolution du système pendant la simulation. On l'appelle le fichier de spécification des sorties. Les règles de sa rédaction sont indiquées dans la page consacrée à la classe OutputSpec, page dédiée. Voici un exemple de ligne de commande appropriée :
%main parameterFile initSimu outspecFileavec le programme principal suivant :main(int argc, char argv[]) { ... ParseOutputSpecFile(argv[4]); ... }- La structure du système.
- On a écrit plus haut que la fonction main devait contenir des instructions qui construisent le système à simuler. Ces instructions sont, de façon générale, des appels à des constructeurs et à des services de valuation de variables d'état). Ces instructions peuvent figurer explicitement et directement dans la fonction main. Une autre voie de programmation de la structure du système est de la décrire dans un fichier dédié placé en entrée du simulateur. DIESE propose un langage pour cette description (voir page dédiée), et un interpréteur de ce langage. Cet interpréteur est invoqué bien sûr avant le lancement de la simulation proprement dit, et son rôle est de réaliser la même séquence d'appels aux services de DIESE que celle qu'aurait contenue une fonction main qui n'aurait pas fait appel à lui. Voici un exemple de ligne de commande appropriée :
%main parameterFile initSimu structureFileavec le programme principal suivant :main(int argc, char argv[]) { ... ParseStructureFile(argv[3]); ... }- Des arguments additionnels.
- L'utilisateur peut aussi doter la fonction main de la faculté de lire et d'interpréter des paramètres additionnels et optionnels sur la ligne de commande. Le développeur d'application doit alors programmer une fonction ad hoc d'interprétation de la ligne de commande (dans l'exemple ci-dessous, on interprète d'une manière particulière les arguments -v et -m). Enfin certaines possibilités spécifiques du système hôte peuvent être exploitées dans la ligne de commande, comme la redirection de la sortie standard.
%main parameterFile initSimu outspecFile -v -m >! logFileUne version standard de la fonction d'interprétation de la ligne de commande (ParseMainArguments) est fournie par DIESE (voir page dédiée).
- Les directives de simulation.
- La fonction standard évoquée ci-dessus considère l'existence et l'utilisation d'un fichier des directives de la simulation. Ce fichier, invoqué seul sur la ligne de commande, est censé encapsuler l'exploitation des autres fichiers en entrée (paramètres, initialisation de la simulation, construction de la structure du système et spécifications de sortie). Cette encapsulation est décrite page dédiée. Les directives portent aussi sur le lancement de la simulation, proprement dit, la récupération des résultats et le nettoyage de la mémoire. Le programme principal est alors strictement réduit aux lignes suivantes :
main(int argc, char argv[]) { ParsemainArguments(argc, argv); ParseDirectiveFile(argv[1]); }Et l'invocation peut comporter des arguments optionnels tels que -m :%main directives -m