L'utilisateur d'un simulateur souhaite en général visualiser en direct ou sauvegarder la valeur de certaines variables en cours de simulation (par exemple l'historique des valeurs d'une variable ou bien certaines données synthétiques caractérisant l'ensemble de la simulation). A cet effet, il est possible de placer dans le code du simulateur des instructions dédiées à ces sorties. Un changement dans les souhaits de sorties implique alors une modification du code du simulateur.
Un simulateur construit avec DIESE supporte de la part de l'utilisateur des spécifications de sorties changeantes d'une simulation à l'autre, et cela sans modification du code. Les demandes sont exprimées par l'utilisateur dans un fichier externe unique. Les spécifications de sorties sont alors une "entrée" du simulateur. Pour exprimer les spécifications de sortie, un lexique et une syntaxe sont fournies à l'utilisateur. Le programme principal du simulateur doit alors comprendre en son début (directement ou indirectement) un appel à la fonction ParseOutputSpecFile, laquelle interprète les lignes du fichier pour générer diverses structures internes du simulateur, qui sont des sous-classes de la classe OutputSpec.
main(int argc, char* argv[]) { ... pCurrentSim->SetOutDir("/home/durand/out/"); ParseOutputspecFile(argv[3]); ... DisplayAllOutputSpecs(); DeleteOutputSpecs(); }avec une ligne de commandes telle que :./main sim1.par sim1.sim sim1.osp sim1.str sim1.diroù /home/durand/out/sim1.osp est le nom complet du fichier des directives de la simulation.
Le fichier pourra comprendre, une ou plusieurs fois, l'une ou l'autre des deux lignes suivantes pour, respectivement, activer et désactiver la trace des opérations effectuées :
TRACE PARSING; ... TRACE NO_PARSING;La présence en mémoire de ces structures OutputSpec modifie légèrement l'action des fonctions normales de DIESE (par exemple les fonctions d'affectation de valeurs aux descripteurs, ou bien la fonction de dépilement des événements, ) : celles-ci enverront l'information à l'interface utilisateur pour être affichée à l'écran en temps réel, ou bien enregistreront l'information dans une structure appropriée qui sera exploitée après la fin de la simulation (une sauvegarde sur fichier, par exemple). Dans l'exemple ci-dessus, la fonction DisplayAllOutputSpecs permet de traiter en une seule instruction toutes les sauvegardes, mais des services plus ciblés sont dans les pages suivantes.
Notes importantes : Quand les informations sont sauvegardées dans des fichiers, ils sont situés, soit dans le répertoire dont le chemin est renvoyé par le message GetOutDir adressé à la simulation courante (on aura préalablement adressé le message SetOutDir pour affecter une valeur), soit à défaut dans le répertoire du module exécutable. Dans les deux cas, le nom à indiquer dans les spécifications de sortie est le nom simple du fichier.
Les mémoires allouées au titre des sauvegardes diverses (c'est-à-dire sur les classes d'entités, d'événements et de processus) peuvent être récupérées par un seul et même appel à la fonction DeleteOutputSpecs, typiquement placé vers la fin du programme principal, comme dans l'exemple ci-dessus.