Interprétation des arguments de la commande de simulation


o ParseMainArguments
Interprète les arguments de la commande exécutable.
o ParseMainArguments
Interprète les arguments de la commande exécutable.
o PrintCommandLine
Imprime la ligne de commande sur la sortie standard.
La commande d'exécution du simulateur (./main ...) possède des arguments, pour spécifier des données en entrée, ou pour préciser des options d'exécution. DIESE prédéfinit quelques arguments standards et propose, par la fonction ParseMainArguments, un moyen d'interpréter leurs valeurs dans la ligne de commande. Cette fonction, ou toute autre écrite par l'utilisateur qui aurait le même rôle, doit être appelée en début de programme principal. Dans le cas contraire, les arguments seraient ignorés (conduisant normalement à une erreur d'exécution) ou absents (ce qui dénoterait une exécution non paramétrée, d'un intérêt quasi nul).

Outre ceux prédéfinis par DIESE, l'utilisateur peut ajouter des arguments qui ont une utilité propre à son application. La fonction ParseMainArguments fournit par DIESE ne suffit alors plus et l'utilisateur doit écrire lui-même la fonction d'analyse de la ligne de commande. Une pratique conseillée est de toujours invoquer ParseMainArguments en préambule de cette fonction particulière à l'application, laquelle n'a plus, dans sa suite, qu'à traiter l'interprétation des arguments spécifiques.

Le premier argument de ParseMainArgument (et donc de toute fonction écrite par l'utilisateur venant la compléter) est le nombre d'arguments de la commande exécutable + 1. Par exemple, cet argument recevra la valeur 2 si la commande est main -h. Le second argument de ParseMainArgument est le tableau des arguments de la commande exécutable. La manière la plus simple de passer ces deux valeurs à ParseMainArgument est d'utiliser les arguments de la fonction main() (typiquement nommés argc et argv). Dans ce cas, le nom de la commande (main) est l'élément de rang 0 de argv :

int main (int argc, char* argv[]) {
  App_ParseMainArguments(argc, argv);
  ...
};

void App_ParseMainArguments (int argc, char* argv[]) {
//---------------------------------------------
  Boolean stdArgs_ok = ParseMainArguments(argc, argv);

  if(stdArgs_ok)  {
	for (int i=6;i<argc;i++) {
	  if (!strcmp(argv[i], "-w"))
		gMyTraceWarnings  = TRUE;
	  if (!strcmp(argv[i], "-o"))
		gMyTraceOperations  = TRUE;
	}
  }
}

Rôle de ParseMainArguments

Dans sa version courante, ParseMainArguments teste la présence dans la ligne de commande des arguments suivants, et donne le cas échéant la valeur mentionnée aux variables globales correspondantes :

    -V       g_BD_TraceActionMode      TRACE_ACTION_ON
    -M       g_BD_TraceNewDelMode      TRACE_NEWDEL_ON
    -MR      g_BD_MemoryReportMode     MEM_REPORT_ON   
    -Warn    g_BD_TraceWarnings        TRACE_WARN_OFF
    -T       g_BD_TraceTableauMode     TRACE_TABLEAU_ON
    -L       g_BD_TraceListeMode       TRACE_LISTE_ON
    -IDN n   gCurrentSimNumId          n
Si la ligne de commande est main -h, le résultat est l'affichage de la manière d'invoquer la commande, avec un rappel du sens des arguments obligatoires et optionnels.

Les autres arguments reconnus sont les suivants (on rappelle que l'argument de rang 0 est le module exécutable lui-même) :

Rôle complémentaire de App_ParseMainArguments

Elle est placée, normalement, dans les fichiers UserFunction.h et .cc. Dans l'exemple ci-dessus, on tient compte de la présence, généralement vérifiée, des 5 arguments correspondant aux fichiers d'entrée de la simulation (voir page 'Les fichiers en entrée de type déclaratif'). Sachant que la commande 'main' est, par convention C, le premier élément du tableau argv, on n'examine que les arguments à partir du rang 6 et au-delà. Une option de commande spécifique est prévue :

    -w       gMyTraceWarnings  TRUE
gMyTraceWarnings est une variable globale définie dans l'application. Elle peut servir dans des instructions conditionnées à la présence de l'option dans la ligne de commande, ici des instructions de trace d'avertissements.

Exemples de lignes de commandes :

main f.par f.sim f.osp f.str f.dir -V -M
demande une simulation avec impression des deux types de messages.

main f.par f.sim f.osp f.str f.dir -V -M
demande une simulation avec impression des messages de construction/destruction seulement.

main f.par f.sim f.osp f.str f.dir -V -M -IDN 18
demande une simulation identifiée par le numéro 18.


This page was generated with the help of DOC++.