version 1.3, 2010/01/31 19:45:10
|
version 1.14, 2010/03/27 13:42:35
|
Line 1
|
Line 1
|
/* |
/* |
================================================================================ |
================================================================================ |
RPL/2 (R) version 4.0.10 |
RPL/2 (R) version 4.0.13 |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
Copyright (C) 1989-2010 Dr. BERTRAND Joël |
|
|
This file is part of RPL/2. |
This file is part of RPL/2. |
Line 31
|
Line 31
|
*/ |
*/ |
|
|
int |
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 "copyright.conv.h" |
# include "licence.conv.h" |
# include "licence.conv.h" |
Line 126 rplinit(int argc, char *argv[], unsigned
|
Line 126 rplinit(int argc, char *argv[], unsigned
|
(*s_etat_processus).erreur_systeme = d_es; |
(*s_etat_processus).erreur_systeme = d_es; |
(*s_etat_processus).erreur_execution = d_ex; |
(*s_etat_processus).erreur_execution = d_ex; |
|
|
|
(*s_etat_processus).rpl_home = rpl_home; |
|
|
insertion_thread(s_etat_processus, d_vrai); |
insertion_thread(s_etat_processus, d_vrai); |
|
|
pthread_mutexattr_init(&attributs_mutex); |
pthread_mutexattr_init(&attributs_mutex); |
Line 169 rplinit(int argc, char *argv[], unsigned
|
Line 171 rplinit(int argc, char *argv[], unsigned
|
{ |
{ |
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
uprintf("+++Système : Mémoire insuffisante\n"); |
printf("+++Système : Mémoire insuffisante\n"); |
} |
} |
else |
else |
{ |
{ |
uprintf("+++System : Not enough memory\n"); |
printf("+++System : Not enough memory\n"); |
} |
} |
|
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
Line 247 rplinit(int argc, char *argv[], unsigned
|
Line 249 rplinit(int argc, char *argv[], unsigned
|
// Initialisation d'une pile de signal pour récupérer les |
// Initialisation d'une pile de signal pour récupérer les |
// débordement de pile |
// débordement de pile |
|
|
|
# ifndef Cygwin |
if (((*s_etat_processus).pile_signal.ss_sp = |
if (((*s_etat_processus).pile_signal.ss_sp = |
malloc((*s_etat_processus).pile_signal.ss_size = |
malloc((*s_etat_processus).pile_signal.ss_size = |
SIGSTKSZ)) == NULL) |
SIGSTKSZ)) == NULL) |
Line 283 rplinit(int argc, char *argv[], unsigned
|
Line 286 rplinit(int argc, char *argv[], unsigned
|
|
|
return(EXIT_FAILURE); |
return(EXIT_FAILURE); |
} |
} |
|
# endif |
|
|
action.sa_sigaction = interruption1; |
action.sa_sigaction = interruption1; |
action.sa_flags = SA_ONSTACK | SA_SIGINFO; |
action.sa_flags = SA_ONSTACK | SA_SIGINFO; |
Line 481 rplinit(int argc, char *argv[], unsigned
|
Line 485 rplinit(int argc, char *argv[], unsigned
|
(*s_etat_processus).chemin_fichiers_temporaires = |
(*s_etat_processus).chemin_fichiers_temporaires = |
recherche_chemin_fichiers_temporaires(s_etat_processus); |
recherche_chemin_fichiers_temporaires(s_etat_processus); |
|
|
erreur = d_os; |
erreur = d_absence_erreur; |
core = d_faux; |
core = d_faux; |
mode_interactif = d_faux; |
mode_interactif = d_faux; |
(*s_etat_processus).nom_fichier_source = NULL; |
(*s_etat_processus).nom_fichier_source = NULL; |
Line 502 rplinit(int argc, char *argv[], unsigned
|
Line 506 rplinit(int argc, char *argv[], unsigned
|
|
|
if (argc == 1) |
if (argc == 1) |
{ |
{ |
erreur = d_os_ligne_de_commande; |
erreur = d_erreur; |
informations(s_etat_processus); |
informations(s_etat_processus); |
} |
} |
else |
else |
Line 554 rplinit(int argc, char *argv[], unsigned
|
Line 558 rplinit(int argc, char *argv[], unsigned
|
} |
} |
|
|
option_a = d_vrai; |
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; |
break; |
} |
} |
|
|
Line 1380 rplinit(int argc, char *argv[], unsigned
|
Line 1359 rplinit(int argc, char *argv[], unsigned
|
printf("+++Error : More than one definition\n"); |
printf("+++Error : More than one definition\n"); |
} |
} |
|
|
erreur = d_os_ligne_de_commande; |
erreur = d_erreur; |
} |
} |
else |
else |
{ |
{ |
Line 1566 rplinit(int argc, char *argv[], unsigned
|
Line 1545 rplinit(int argc, char *argv[], unsigned
|
&existence, &ouverture, &unite_fichier); |
&existence, &ouverture, &unite_fichier); |
} |
} |
|
|
(*s_etat_processus).recherche_types_speciaux = 'N'; |
|
|
|
if (((existence == d_faux) || (erreur_fichier != d_absence_erreur)) && |
if (((existence == d_faux) || (erreur_fichier != d_absence_erreur)) && |
(option_S == d_faux)) |
(option_S == d_faux)) |
{ |
{ |
Line 1584 rplinit(int argc, char *argv[], unsigned
|
Line 1561 rplinit(int argc, char *argv[], unsigned
|
(*s_etat_processus).nom_fichier_source); |
(*s_etat_processus).nom_fichier_source); |
} |
} |
|
|
erreur = d_os_fichier_introuvable; |
erreur = d_erreur; |
} |
} |
else |
else |
{ |
{ |
Line 1631 rplinit(int argc, char *argv[], unsigned
|
Line 1608 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).profilage = (option_P != 0) ? d_vrai : d_faux; |
(*s_etat_processus).niveau_profilage = option_P; |
(*s_etat_processus).niveau_profilage = option_P; |
Line 1644 rplinit(int argc, char *argv[], unsigned
|
Line 1621 rplinit(int argc, char *argv[], unsigned
|
(*s_etat_processus).test_instruction = 'N'; |
(*s_etat_processus).test_instruction = 'N'; |
(*s_etat_processus).nombre_arguments = 0; |
(*s_etat_processus).nombre_arguments = 0; |
(*s_etat_processus).affichage_arguments = 'N'; |
(*s_etat_processus).affichage_arguments = 'N'; |
|
(*s_etat_processus).autorisation_conversion_chaine = 'Y'; |
(*s_etat_processus).autorisation_evaluation_nom = 'Y'; |
(*s_etat_processus).autorisation_evaluation_nom = 'Y'; |
(*s_etat_processus).autorisation_empilement_programme = 'N'; |
(*s_etat_processus).autorisation_empilement_programme = 'N'; |
(*s_etat_processus).requete_arret = 'N'; |
(*s_etat_processus).requete_arret = 'N'; |
|
(*s_etat_processus).evaluation_forcee = 'N'; |
|
|
(*s_etat_processus).constante_symbolique = 'N'; |
(*s_etat_processus).constante_symbolique = 'N'; |
(*s_etat_processus).traitement_symbolique = 'N'; |
(*s_etat_processus).traitement_symbolique = 'N'; |
Line 2543 rplinit(int argc, char *argv[], unsigned
|
Line 2522 rplinit(int argc, char *argv[], unsigned
|
free(arguments); |
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); |
} |
} |
|
else |
if (option_p == d_faux) |
|
{ |
{ |
if (setjmp(contexte_initial) == 0) |
if (option_D == d_vrai) |
{ |
{ |
erreur = sequenceur(s_etat_processus); |
lancement_daemon(s_etat_processus); |
} |
} |
} |
|
else |
if (option_p == d_faux) |
{ |
|
if (setjmp(contexte_initial) == 0) |
|
{ |
{ |
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); |
|
} |
} |
} |
} |
} |
|
|
Line 3186 rplinit(int argc, char *argv[], unsigned
|
Line 3173 rplinit(int argc, char *argv[], unsigned
|
fclose((*((struct_descripteur_fichier *) |
fclose((*((struct_descripteur_fichier *) |
(*((struct_liste_chainee *) |
(*((struct_liste_chainee *) |
l_element_courant)).donnee)) |
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 *) |
if ((*((struct_descripteur_fichier *) |
(*((struct_liste_chainee *) |
(*((struct_liste_chainee *) |
Line 3320 rplinit(int argc, char *argv[], unsigned
|
Line 3317 rplinit(int argc, char *argv[], unsigned
|
} |
} |
} |
} |
|
|
|
# ifndef Cygwin |
free((*s_etat_processus).pile_signal.ss_sp); |
free((*s_etat_processus).pile_signal.ss_sp); |
|
# endif |
|
|
closelog(); |
closelog(); |
|
|
pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes)); |
pthread_mutex_destroy(&((*s_etat_processus).protection_liste_mutexes)); |
Line 3341 rplinit(int argc, char *argv[], unsigned
|
Line 3341 rplinit(int argc, char *argv[], unsigned
|
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux); |
sem_destroy(&semaphore_gestionnaires_signaux_atomique); |
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); |
} |
} |
|
|
|
|
Line 3353 informations(struct_processus *s_etat_pr
|
Line 3357 informations(struct_processus *s_etat_pr
|
if ((*s_etat_processus).langue == 'F') |
if ((*s_etat_processus).langue == 'F') |
{ |
{ |
printf(" rpl [-options] [programme]\n"); |
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(" -A : paramètres passés au programme principal\n"); |
printf(" -c : génération de fichier de débogage (rpl-core)\n"); |
printf(" -c : génération de fichier de débogage (rpl-core)\n"); |
printf(" -d : option de déverminage interne\n"); |
printf(" -d : option de déverminage interne\n"); |
Line 3372 informations(struct_processus *s_etat_pr
|
Line 3376 informations(struct_processus *s_etat_pr
|
else |
else |
{ |
{ |
printf(" rpl [-options] [program]\n"); |
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(" -A : sends parameters to main program\n"); |
printf(" -c : allows creation of a rpl-core file, providing a way" |
printf(" -c : allows creation of a rpl-core file, providing a way" |
"\n" |
"\n" |