Diff for /rpl/src/rpl.h between versions 1.14 and 1.24

version 1.14, 2010/03/05 11:20:09 version 1.24, 2010/04/21 13:45:50
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.12    RPL/2 (R) version 4.0.15
   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 26 Line 26
 #define _GNU_SOURCE  #define _GNU_SOURCE
 #define _REENTRANT  #define _REENTRANT
   
 // Nécessaire pour les systèmes qui ne comprennent pas _GNU_SOURCE  
 #define _XOPEN_SOURCE 500  
   
 /*  /*
 ================================================================================  ================================================================================
Line 42 Line 40
 #include <strings.h>  #include <strings.h>
 #include <syslog.h>  #include <syslog.h>
 #include <errno.h>  #include <errno.h>
   #include <stdarg.h>
   
 #ifndef RPLARGS  #ifndef RPLARGS
 #   include <sys/resource.h>  #   include <sys/resource.h>
Line 76 Line 75
 #   include "iconv.h"  #   include "iconv.h"
   
 #   include "openssl/evp.h"  #   include "openssl/evp.h"
   #   include "sqlite3.h"
   
 #   define HAVE_INLINE  #   define HAVE_INLINE
 #   define GSL_RANGE_CHECK_OFF  #   define GSL_RANGE_CHECK_OFF
Line 93 Line 93
 #   include <ieeefp.h>  #   include <ieeefp.h>
 #endif  #endif
   
   // Définition spécifique à Hurd
   #ifndef PIPE_BUF
   #   define fpathconf (".", _PC_PIPE_BUF)
   #endif
   
 #ifdef MYSQL_SUPPORT  #ifdef MYSQL_SUPPORT
 #   include <mysql.h>  #   include <mysql.h>
 #   define mysqlclose(arg)      mysql_close(arg.mysql)  #   define mysqlclose(arg)      mysql_close(arg.mysql)
Line 182  typedef unsigned char   t_8_bits; Line 187  typedef unsigned char   t_8_bits;
 */  */
   
 #ifndef RPLARGS  #ifndef RPLARGS
   #   ifdef SEMAPHORES_NOMMES
   #       define LONGUEUR_NOM_SEMAPHORE   64
   #   endif
 #   ifndef MAIN_RPL  #   ifndef MAIN_RPL
     extern jmp_buf                  contexte;          extern jmp_buf              contexte;
     extern jmp_buf                  contexte_initial;          extern jmp_buf              contexte_initial;
   
   #       ifdef SEMAPHORES_NOMMES
           extern pthread_mutex_t      mutex_sem;
   #       endif
   
           extern pthread_key_t        semaphore_fork_processus_courant;
   
           extern sem_t
   #       ifdef SEMAPHORES_NOMMES
           *
   #       endif
                                       semaphore_liste_threads;
   
     extern pthread_key_t            semaphore_fork_processus_courant;          extern sem_t
   #       ifdef SEMAPHORES_NOMMES
           *
   #       endif
                                       semaphore_gestionnaires_signaux;
   
           extern sem_t
   #       ifdef SEMAPHORES_NOMMES
           *
   #       endif
                                       semaphore_gestionnaires_signaux_atomique;
   
     extern sem_t                    semaphore_liste_threads;  #       ifdef SEMAPHORES_NOMMES
     extern sem_t                    semaphore_gestionnaires_signaux;          // 0 -> liste_threads
     extern sem_t                    semaphore_gestionnaires_signaux_atomique;          // 1 -> gestionnaire_signaux
           // 2 -> gestionnaire_signaux_atomique
           // 3 -> &((*s_etat_processus).semaphore_fork)
               extern unsigned char    noms_semaphores[4][LONGUEUR_NOM_SEMAPHORE];
               extern sem_t            *semaphores_nommes[4];
   #       endif
 #   else  #   else
     jmp_buf                         contexte;          jmp_buf                     contexte;
     jmp_buf                         contexte_initial;          jmp_buf                     contexte_initial;
   
     pthread_key_t                   semaphore_fork_processus_courant;  #       ifdef SEMAPHORES_NOMMES
           pthread_mutex_t             mutex_sem = PTHREAD_MUTEX_INITIALIZER;
   #       endif
   
           pthread_key_t               semaphore_fork_processus_courant;
   
           sem_t
   #       ifdef SEMAPHORES_NOMMES
           *
   #       endif
                                       semaphore_liste_threads;
   
     sem_t                           semaphore_liste_threads;          sem_t
     sem_t                           semaphore_gestionnaires_signaux;  #       ifdef SEMAPHORES_NOMMES
     sem_t                           semaphore_gestionnaires_signaux_atomique;          *
   #       endif
                                       semaphore_gestionnaires_signaux;
   
           sem_t
   #       ifdef SEMAPHORES_NOMMES
           *
   #       endif
                                       semaphore_gestionnaires_signaux_atomique;
   
   #       ifdef SEMAPHORES_NOMMES
               unsigned char           noms_semaphores[4][LONGUEUR_NOM_SEMAPHORE];
               sem_t                   *semaphores_nommes[4];
   #       endif
 #   endif  #   endif
 #endif  #endif
   
   #ifdef SEMAPHORES_NOMMES
   enum t_semaphore    { sem_liste_threads = 0,
           sem_gestionnaires_signaux = 1,
           sem_gestionnaires_signaux_atomique = 2,
           sem_fork = 3 };
   
   sem_t *sem_init2(unsigned int valeur, enum t_semaphore semaphore);
   int sem_destroy2(sem_t *semaphore_p, enum t_semaphore semaphore);
   int sem_getvalue2(sem_t *semaphore, int *valeur);
   
   #define sem_getvalue(semaphore, value) sem_getvalue2(semaphore, value)
   #define sem_post(semaphore) \
           ({ int r; pthread_mutex_lock(&mutex_sem); \
           r = sem_post(semaphore), pthread_mutex_unlock(&mutex_sem); r; })
   #define sem_wait(semaphore) \
           ({ int r; pthread_mutex_lock(&mutex_sem); \
           r = sem_wait(semaphore), pthread_mutex_unlock(&mutex_sem); r; })
   #define sem_trywait(semaphore) \
           ({ int r; pthread_mutex_lock(&mutex_sem); \
           r = sem_trywait(semaphore), pthread_mutex_unlock(&mutex_sem); r; })
   #endif
   
 /*  /*
 ================================================================================  ================================================================================
   Macros    Macros
Line 309  typedef unsigned char   t_8_bits; Line 389  typedef unsigned char   t_8_bits;
         if (appels != NULL) \          if (appels != NULL) \
         { \          { \
             for(i = 0; i < nb; i++) \              for(i = 0; i < nb; i++) \
                 uprintf("%s\n", appels[i]); \                  uprintf("    %s\n", appels[i]); \
             free(appels); \              free(appels); \
         } \          } \
         else \          else \
Line 619  void debug_memoire_retrait(void *ptr); Line 699  void debug_memoire_retrait(void *ptr);
 #   define d_ex_locales                         76  #   define d_ex_locales                         76
 #   define d_ex_representation                  77  #   define d_ex_representation                  77
 #   define d_ex_erreur_profilage                78  #   define d_ex_erreur_profilage                78
   #   define d_ex_enregistrement_inexistant       79
   #   define d_ex_clef_inexistante                80
   #   define d_ex_nom_implicite                   81
 #endif  #endif
   
 /*  
 --------------------------------------------------------------------------------  
   Erreurs de la ligne de commande  
 --------------------------------------------------------------------------------  
 */  
   
 #ifndef RPLARGS  
 #   define d_os                                 4000  
 #   define d_os_ligne_de_commande               4001  
 #   define d_os_fichier_introuvable             4002  
 #endif  
   
 /*  /*
 ================================================================================  ================================================================================
Line 847  typedef struct descripteur_fichier Line 919  typedef struct descripteur_fichier
     unsigned long               identifiant;      unsigned long               identifiant;
   
     unsigned char               effacement;      unsigned char               effacement;
       unsigned char               type; // C (file *) ou S (sqlite *)
     unsigned char               *nom;      unsigned char               *nom;
   
     pid_t                       pid;      pid_t                       pid;
     pthread_t                   tid;      pthread_t                   tid;
   
     file                        *descripteur;      file                        *descripteur_c;
       sqlite3                     *descripteur_sqlite;
 } struct_descripteur_fichier;  } struct_descripteur_fichier;
 #endif  #endif
   
Line 1361  typedef struct processus Line 1435  typedef struct processus
     unsigned char               autorisation_conversion_chaine;     /*Y/N*/      unsigned char               autorisation_conversion_chaine;     /*Y/N*/
     unsigned char               autorisation_empilement_programme;  /*Y/N*/      unsigned char               autorisation_empilement_programme;  /*Y/N*/
     unsigned char               autorisation_evaluation_nom;        /*Y/N*/      unsigned char               autorisation_evaluation_nom;        /*Y/N*/
       unsigned char               autorisation_nom_implicite;         /*Y/N*/
     unsigned char               evaluation_forcee;                  /*Y/N*/      unsigned char               evaluation_forcee;                  /*Y/N*/
     unsigned char               instruction_valide;                 /*Y/N*/      unsigned char               instruction_valide;                 /*Y/N*/
     unsigned char               instruction_intrinseque;            /*Y/I/N*/      unsigned char               instruction_intrinseque;            /*Y/I/N*/
Line 1746  typedef struct processus Line 1821  typedef struct processus
     pthread_mutex_t             mutex;      pthread_mutex_t             mutex;
   
     // Sémaphore autorisant les fork()      // Sémaphore autorisant les fork()
     sem_t                       semaphore_fork;      sem_t
   #   ifdef SEMAPHORES_NOMMES
       *
   #   endif
                                   semaphore_fork;
   
 /* Mutexes                                          */  /* Mutexes                                          */
   
Line 2039  void instruction_ifft(struct_processus * Line 2118  void instruction_ifft(struct_processus *
 void instruction_ift(struct_processus *s_etat_processus);  void instruction_ift(struct_processus *s_etat_processus);
 void instruction_ifte(struct_processus *s_etat_processus);  void instruction_ifte(struct_processus *s_etat_processus);
 void instruction_im(struct_processus *s_etat_processus);  void instruction_im(struct_processus *s_etat_processus);
   void instruction_implicit(struct_processus *s_etat_processus);
 void instruction_in(struct_processus *s_etat_processus);  void instruction_in(struct_processus *s_etat_processus);
 void instruction_incr(struct_processus *s_etat_processus);  void instruction_incr(struct_processus *s_etat_processus);
 void instruction_indep(struct_processus *s_etat_processus);  void instruction_indep(struct_processus *s_etat_processus);
Line 2400  void deverrouillage_threads_concurrents( Line 2480  void deverrouillage_threads_concurrents(
 void ecriture_pile(struct_processus *s_etat_processus, file *flux,  void ecriture_pile(struct_processus *s_etat_processus, file *flux,
         struct_liste_chainee *l_element_courant, unsigned long niveau_courant);          struct_liste_chainee *l_element_courant, unsigned long niveau_courant);
 void ecriture_profil(struct_processus *s_etat_processus);  void ecriture_profil(struct_processus *s_etat_processus);
   void effacement_pile_systeme(struct_processus *s_etat_processus);
 void empilement_pile_systeme(struct_processus *s_etat_processus);  void empilement_pile_systeme(struct_processus *s_etat_processus);
 void encart(struct_processus *s_etat_processus, unsigned long duree);  void encart(struct_processus *s_etat_processus, unsigned long duree);
 void evaluation_romberg(struct_processus *s_etat_processus,  void evaluation_romberg(struct_processus *s_etat_processus,
Line 2652  logical1 empilement_pile_last(struct_pro Line 2733  logical1 empilement_pile_last(struct_pro
         unsigned long nombre_arguments);          unsigned long nombre_arguments);
 logical1 evaluation(struct_processus *s_etat_processus, struct_objet *s_objet,  logical1 evaluation(struct_processus *s_etat_processus, struct_objet *s_objet,
         unsigned char type_evaluation);          unsigned char type_evaluation);
   logical1 initialisation_fichier_acces_direct(struct_processus *s_etat_processus,
           sqlite3 *sqlite, logical1 binaire);
   logical1 initialisation_fichier_acces_indexe(struct_processus *s_etat_processus,
           sqlite3 *sqlite, integer8 position_clef, logical1 binaire);
 logical1 recherche_instruction_suivante(struct_processus *s_etat_processus);  logical1 recherche_instruction_suivante(struct_processus *s_etat_processus);
 logical1 retrait_variable(struct_processus *s_etat_processus,  logical1 retrait_variable(struct_processus *s_etat_processus,
         unsigned char *nom_variable, unsigned char type);          unsigned char *nom_variable, unsigned char type);
Line 2774  struct_processus *copie_etat_processus(s Line 2859  struct_processus *copie_etat_processus(s
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
   Fonctions renvoyant un pointeur sur un fichier (file *)    Fonctions renvoyant un pointeur sur un fichier (file *) ou un descripteur
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
   
 #ifndef RPLARGS  #ifndef RPLARGS
 file *creation_fichier_tex(struct_processus *s_etat_processus);  file *creation_fichier_tex(struct_processus *s_etat_processus);
 file *descripteur_fichier(struct_processus *s_etat_processus,  struct_descripteur_fichier *descripteur_fichier(struct_processus
         struct_fichier *s_fichier);          *s_etat_processus, struct_fichier *s_fichier);
 #endif  #endif
   
 /*  /*

Removed from v.1.14  
changed lines
  Added in v.1.24


CVSweb interface <joel.bertrand@systella.fr>