--- rpl/src/rpl.c 2010/02/10 08:09:29 1.6 +++ rpl/src/rpl.c 2010/04/07 13:45:10 1.16 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.0.10 + RPL/2 (R) version 4.0.14 Copyright (C) 1989-2010 Dr. BERTRAND Joël This file is part of RPL/2. @@ -31,7 +31,7 @@ */ int -rplinit(int argc, char *argv[], unsigned char ***resultats) +rplinit(int argc, char *argv[], unsigned char ***resultats, char *rpl_home) { # include "copyright.conv.h" # include "licence.conv.h" @@ -126,6 +126,8 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).erreur_systeme = d_es; (*s_etat_processus).erreur_execution = d_ex; + (*s_etat_processus).rpl_home = rpl_home; + insertion_thread(s_etat_processus, d_vrai); pthread_mutexattr_init(&attributs_mutex); @@ -169,11 +171,11 @@ rplinit(int argc, char *argv[], unsigned { if ((*s_etat_processus).langue == 'F') { - uprintf("+++Système : Mémoire insuffisante\n"); + printf("+++Système : Mémoire insuffisante\n"); } else { - uprintf("+++System : Not enough memory\n"); + printf("+++System : Not enough memory\n"); } return(EXIT_FAILURE); @@ -247,6 +249,7 @@ rplinit(int argc, char *argv[], unsigned // Initialisation d'une pile de signal pour récupérer les // débordement de pile +# ifndef Cygwin if (((*s_etat_processus).pile_signal.ss_sp = malloc((*s_etat_processus).pile_signal.ss_size = SIGSTKSZ)) == NULL) @@ -283,6 +286,7 @@ rplinit(int argc, char *argv[], unsigned return(EXIT_FAILURE); } +# endif action.sa_sigaction = interruption1; action.sa_flags = SA_ONSTACK | SA_SIGINFO; @@ -481,7 +485,7 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).chemin_fichiers_temporaires = recherche_chemin_fichiers_temporaires(s_etat_processus); - erreur = d_os; + erreur = d_absence_erreur; core = d_faux; mode_interactif = d_faux; (*s_etat_processus).nom_fichier_source = NULL; @@ -502,7 +506,7 @@ rplinit(int argc, char *argv[], unsigned if (argc == 1) { - erreur = d_os_ligne_de_commande; + erreur = d_erreur; informations(s_etat_processus); } else @@ -554,31 +558,6 @@ rplinit(int argc, char *argv[], unsigned } option_a = d_vrai; - printf("\n"); - - if ((*s_etat_processus).langue == 'F') - { - printf(" Auteur: Joël BERTRAND,\n"); - printf(" Email : " - "joel.bertrand@systella.fr\n"); - printf(" Liste de diffusion : " - "rpl2@systella.fr\n"); - printf(" Page : " - "http://www.rpl2.fr"); - printf("\n"); - } - else - { - printf(" Author: Joël BERTRAND,\n"); - printf(" Email : " - "joel.bertrand@systella.fr\n"); - printf(" Mailing list : " - "rpl2@systella.fr\n"); - printf(" Web page : " - "http://www.rpl2/net"); - printf("\n"); - } - break; } @@ -1380,7 +1359,7 @@ rplinit(int argc, char *argv[], unsigned printf("+++Error : More than one definition\n"); } - erreur = d_os_ligne_de_commande; + erreur = d_erreur; } else { @@ -1582,7 +1561,7 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).nom_fichier_source); } - erreur = d_os_fichier_introuvable; + erreur = d_erreur; } else { @@ -1629,7 +1608,7 @@ rplinit(int argc, char *argv[], unsigned } } - if ((erreur == d_os) && (presence_definition == 'O')) + if ((erreur == d_absence_erreur) && (presence_definition == 'O')) { (*s_etat_processus).profilage = (option_P != 0) ? d_vrai : d_faux; (*s_etat_processus).niveau_profilage = option_P; @@ -1644,6 +1623,7 @@ rplinit(int argc, char *argv[], unsigned (*s_etat_processus).affichage_arguments = 'N'; (*s_etat_processus).autorisation_conversion_chaine = 'Y'; (*s_etat_processus).autorisation_evaluation_nom = 'Y'; + (*s_etat_processus).autorisation_nom_implicite = 'Y'; (*s_etat_processus).autorisation_empilement_programme = 'N'; (*s_etat_processus).requete_arret = 'N'; (*s_etat_processus).evaluation_forcee = 'N'; @@ -2543,23 +2523,31 @@ rplinit(int argc, char *argv[], unsigned free(arguments); } - if (option_D == d_vrai) + if (option_a == d_vrai) { - lancement_daemon(s_etat_processus); + fprintf(stdout, "%s\n", (*s_etat_processus) + .definitions_chainees); } - - if (option_p == d_faux) + else { - if (setjmp(contexte_initial) == 0) + if (option_D == d_vrai) { - erreur = sequenceur(s_etat_processus); + lancement_daemon(s_etat_processus); } - } - else - { - if (setjmp(contexte_initial) == 0) + + if (option_p == d_faux) { - erreur = sequenceur_optimise(s_etat_processus); + if (setjmp(contexte_initial) == 0) + { + erreur = sequenceur(s_etat_processus); + } + } + else + { + if (setjmp(contexte_initial) == 0) + { + erreur = sequenceur_optimise(s_etat_processus); + } } } @@ -3186,7 +3174,17 @@ rplinit(int argc, char *argv[], unsigned fclose((*((struct_descripteur_fichier *) (*((struct_liste_chainee *) l_element_courant)).donnee)) - .descripteur); + .descripteur_c); + + if ((*((struct_descripteur_fichier *) + (*((struct_liste_chainee *) + l_element_courant)).donnee)).type != 'C') + { + sqlite3_close((*((struct_descripteur_fichier *) + (*((struct_liste_chainee *) + l_element_courant)).donnee)) + .descripteur_sqlite); + } if ((*((struct_descripteur_fichier *) (*((struct_liste_chainee *) @@ -3320,7 +3318,10 @@ rplinit(int argc, char *argv[], unsigned } } +# ifndef Cygwin free((*s_etat_processus).pile_signal.ss_sp); +# endif + closelog(); pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes)); @@ -3341,7 +3342,11 @@ rplinit(int argc, char *argv[], unsigned sem_destroy(&semaphore_gestionnaires_signaux); sem_destroy(&semaphore_gestionnaires_signaux_atomique); - return((erreur == d_os) ? EXIT_SUCCESS : EXIT_FAILURE); +# ifdef DEBUG_MEMOIRE + debug_memoire_verification(s_etat_processus); +# endif + + return((erreur == d_absence_erreur) ? EXIT_SUCCESS : EXIT_FAILURE); } @@ -3353,7 +3358,7 @@ informations(struct_processus *s_etat_pr if ((*s_etat_processus).langue == 'F') { printf(" rpl [-options] [programme]\n"); - printf(" -a : informations sur l'auteur\n"); + printf(" -a : analyse du code\n"); printf(" -A : paramètres passés au programme principal\n"); printf(" -c : génération de fichier de débogage (rpl-core)\n"); printf(" -d : option de déverminage interne\n"); @@ -3372,7 +3377,7 @@ informations(struct_processus *s_etat_pr else { printf(" rpl [-options] [program]\n"); - printf(" -a : displays informations about the author\n"); + printf(" -a : analyzes program\n"); printf(" -A : sends parameters to main program\n"); printf(" -c : allows creation of a rpl-core file, providing a way" "\n"