tslect

PURPOSE ^

C/C++ source

SYNOPSIS ^

C/C++ source

DESCRIPTION ^

C/C++ source

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 /*****************************************************************************
0002 
0003    NOM  DU MODULE        :  tslect.c
0004 
0005    DESCRIPTION DU MODULE :  module client de la bibliotheque TSLib
0006                             ensemble des fonctions de lectures de donnees
0007 
0008    Auteur       :       Vita-Maria GUZZI
0009    Societe      :       CR2A
0010    Projet       :       TSLib
0011 
0012    Date de Creation :   29/09/92
0013    Modifications    :
0014 
0015  *****************************************************************************/
0016 
0017 /*****************************************************************************
0018 
0019    Liste des fonctions du module :
0020 
0021         TSRSigRg
0022         TSRSigX
0023         TSXtrRg
0024         TSXtrX
0025         TSGrpRg
0026         TSGrpX
0027 
0028  *****************************************************************************/
0029 #include <stdio.h>        /* bibliotheques standards           */
0030 #include <stdlib.h>
0031 #include <string.h>
0032 #include "tsdef.h"        /* liste des constantes utilisees */
0033 #include "tsconf.h"        /* configuration du client        */
0034 #if (client == MAC)
0035 
0036 #endif
0037 #include "tsfonc.h"        /* liste des fonctions appelees   */
0038 #include "tsmes.h"        /* liste des erreurs              */
0039 #include "tstype.h"        /* liste des types de donnees     */
0040 #include "tsext.h"        /* liste des variables globales   */
0041 #include "functs.h"        /* prototypes fcts TSLib */
0042 
0043 /*----------------------------------------------------------------------------
0044 
0045                         TSRSigRg
0046 
0047   But : fonction demandant au serveur de lui renvoyer un signal lu entre 2 rangs
0048 
0049   Arguments :
0050         NomDon    : nom de la donnee
0051         Entrees   : liste des entrees du traitement
0052         Rangs     : tableau contenant le rang initial et le rang final
0053         NbMax     : nombre maximum de mesures souhaitees
0054         Extract   : type d'extraction souhaitee
0055 
0056         Unite     : liste des unites des mesures rendues
0057         NumVer    : numero de version du createur
0058         Certif    : tableau des certifications
0059         Date      : date d'execution du diagnostic ou du traitement
0060         Heure     : heure  d'execution du diagnostic ou du traitement
0061         NbMes     : nombre de valeurs rendues
0062         MaxReel   : nombre reel de valeurs
0063         X         : tableau des valeurs des abscisses
0064         Y         : tableau des valeurs des mesures
0065 
0066   Retour          : compte-rendu d'execution
0067 
0068 ------------------------------------------------------------------------------*/
0069 
0070 
0071 Longint FAR_PASCAL
0072 TSRSigRg (    char *NomDon,
0073              pS_Entree Entrees,
0074              Longint *Rangs,
0075              Longint NbMax,
0076              Longint Extract,
0077              pS_Unite *Unite,
0078              Longint *NumVer,
0079              Longint *Certif,
0080              char *Date,
0081              char *Heure,
0082              Longint *NbMes ,
0083              Longint *MaxReel ,
0084              char  HUGE *X ,
0085         char  HUGE *Y        )
0086 
0087 {
0088   Longint CR;
0089   Longint CertifNb;        /* taille en octets du tableau Certif  */
0090   Longint XNb;            /* taille en octets du tableau X       */
0091   Longint YNb;            /* taille en octets du tableau Y       */
0092   char XType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau X */
0093   char YType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau Y */
0094   Longint code_param;
0095   Longint numchoc;
0096 
0097 #if (client == MAC)
0098   ConnHandle NumSocket;        /* descripteur de la socket de communication */
0099 #else
0100   int NumSocket;        /* descripteur de la socket de communication */
0101 #endif
0102   short int CodeFonc;        /* code de la fonction TSLib appelee         */
0103   Longint Resultat;        /* compte-rendu d'execution du client        */
0104 
0105   /* test des pointeurs de chaines */
0106 
0107   code_param = ok;
0108 
0109   if (NomDon == NULL)
0110     code_param = p_nomdon;
0111   if (Date == NULL)
0112     code_param = p_date;
0113   if (Heure == NULL)
0114     code_param = p_heure;
0115   if (code_param != ok)
0116     return (Gestion_Erreur (erreur_chaine_vide, code_param));
0117 
0118   /* test des pointeurs de tableaux */
0119 
0120   if (Certif == NULL)
0121     code_param = p_certif;
0122   if (Rangs == NULL)
0123     code_param = p_rangs;
0124 
0125   if (code_param != ok)
0126     return (Gestion_Erreur (erreur_tableau_vide, code_param));
0127 
0128   /* debut de communication */
0129 
0130   numchoc = Entrees->union_var.lval;
0131   if ((Resultat = Debut_Communication (&NumSocket, 1)) != ok)
0132         return Resultat;
0133 
0134   /* emission du code de la fonction */
0135   if(compress_on)
0136     CodeFonc = fonc_tsrsigrg;
0137   else
0138     CodeFonc = -(fonc_tsrsigrg - MAX_FUNCT_NUMBER);
0139   if ((Resultat = Emission (NumSocket, (char *) &CodeFonc, taille_short, p_codefonc))
0140       != ok)
0141     return Resultat;
0142 
0143   /* emission des parametres */
0144 
0145   if ((Resultat = Emission (NumSocket, NomDon, TAILLE_NOM_DONNEE, p_nomdon))
0146       != ok)
0147     return Resultat;
0148 
0149   if ((Resultat = Emission_Entrees (NumSocket, Entrees, p_entrees))
0150       != ok)
0151     return Resultat;
0152 
0153   if ((Resultat = Emission (NumSocket, (char *) Rangs, taille_long * MAX_RANG, p_rangs))
0154       != ok)
0155     return Resultat;
0156 
0157   if ((Resultat = Emission (NumSocket, (char *) &NbMax, taille_long, p_nbmax))
0158       != ok)
0159     return Resultat;
0160 
0161   if ((Resultat = Emission (NumSocket, (char *) &Extract, taille_long, p_extract))
0162       != ok)
0163     return Resultat;
0164 
0165   /* fin d'emission */
0166 
0167 #if ((client!=PC) && (client !=MAC))
0168   if ((Resultat = Fin_Emission (NumSocket))
0169       == erreur_fin_emission)
0170     return Resultat;
0171 #endif
0172 
0173   /* reception des parametres */
0174 
0175   if ((Resultat = Reception (NumSocket, (char *) &CR, taille_long, p_cr))
0176       != ok)
0177     return Resultat;
0178 
0179   if (CR == ok)
0180     {
0181 
0182       if ((Resultat = Reception_Unite (NumSocket, Unite, p_unite))
0183       != ok)
0184     return Resultat;
0185 
0186       if ((Resultat = Reception (NumSocket, (char *) NumVer, taille_long, p_numver))
0187       != ok)
0188     return Resultat;
0189 
0190       if ((Resultat = Reception (NumSocket, (char *) &CertifNb, taille_long, p_certif))
0191       != ok)
0192     return Resultat;
0193         if(CertifNb > 256) {
0194           int i;
0195           Longint *ptmp_certif=(Longint *)calloc(sizeof(Longint),CertifNb);
0196           if ((Resultat = Reception (NumSocket, (char *) ptmp_certif, CertifNb,
0197                           p_certif)) != ok)
0198             return Resultat;
0199           for(i=0; i < 64 ; i++) /* Tableau certif Bd =64 max */
0200             Certif[i]= ptmp_certif[i];
0201           }
0202           else
0203            if ((Resultat = Reception (NumSocket, (char *) Certif, CertifNb,
0204              p_certif)) != ok)
0205            return Resultat;
0206 
0207       if ((Resultat = Reception (NumSocket, Date, TAILLE_DATE, p_date))
0208       != ok)
0209     return Resultat;
0210 
0211       if ((Resultat = Reception (NumSocket, Heure, TAILLE_HEURE, p_heure))
0212       != ok)
0213     return Resultat;
0214 
0215       if ((Resultat = Reception (NumSocket, (char *) NbMes, taille_long, p_nbmes))
0216       != ok)
0217     return Resultat;
0218 
0219       if ((Resultat = Reception (NumSocket, (char *) MaxReel, taille_long, p_maxreel))
0220       != ok)
0221     return Resultat;
0222 
0223       if ((Resultat = Reception (NumSocket, (char *) &XNb, taille_long, p_x))
0224       != ok)
0225     return Resultat;
0226 
0227       if ((Resultat = Reception (NumSocket, XType, TAILLE_FORMAT_SERVEUR, p_x))
0228       != ok)
0229     return Resultat;
0230 
0231       if ((Resultat = Reception_Tableau (NumSocket, X, XNb, XType, p_x))
0232       != ok)
0233     return Resultat;
0234 
0235       if ((Resultat = Reception (NumSocket, (char *) &YNb, taille_long, p_y))
0236       != ok)
0237     return Resultat;
0238 
0239       if ((YNb != 0) && (Y == NULL))
0240     {
0241       Fin_Communication (NumSocket);
0242       return (Gestion_Erreur (erreur_tableau_vide, p_y));
0243     }
0244 
0245       if ((Resultat = Reception (NumSocket, YType, TAILLE_FORMAT_SERVEUR, p_y))
0246       != ok)
0247     return Resultat;
0248 
0249       if ((Resultat = Reception_Tableau (NumSocket, Y, YNb, YType, p_y))
0250       != ok)
0251     return Resultat;
0252 
0253     }
0254   /* fin de communication */
0255 
0256   Fin_Communication (NumSocket);
0257 
0258   return CR;
0259 
0260 }
0261 
0262 /*----------------------------------------------------------------------------
0263 
0264                         TSRSigX
0265 
0266   But : fonction demandant au serveur de lui renvoyer un signal lu entre
0267         2 valeurs de l'abscisse
0268 
0269   Arguments :
0270         NomDon    : nom de la donnee
0271         Entrees   : liste des entrees du traitement
0272         XI        : valeur initiale de l'abscisse
0273         XF        : valeur finale de l'abscisse
0274         NbMax     : nombre maximum de mesures souhaitees
0275         Extract   : type d'extraction souhaitee
0276 
0277         Unite     : liste des unites des mesures rendues
0278         NumVer    : numero de version du createur
0279         Certif    : tableau des certifications
0280         Date      : date d'execution du diagnostic ou du traitement
0281         Heure     : heure  d'execution du diagnostic ou du traitement
0282         NbMes     : nombre de valeurs rendues
0283         MaxReel   : nombre reel de valeurs
0284         X         : tableau des valeurs des abscisses
0285         Y         : tableau des valeurs des mesures
0286 
0287   Retour          : compte-rendu d'execution
0288 
0289 ------------------------------------------------------------------------------*/
0290 Longint FAR_PASCAL
0291 TSRSigX (    char *NomDon,
0292     pS_Entree Entrees,
0293     Double XI,
0294     Double XF,
0295     Longint NbMax,
0296     Longint Extract,
0297     pS_Unite *Unite,
0298     Longint *NumVer,
0299     Longint *Certif,
0300     char *Date,
0301     char *Heure,
0302     Longint *NbMes,
0303     Longint *MaxReel,
0304     char HUGE *X,
0305     char HUGE *Y    )
0306 
0307 {
0308   Longint CR;
0309   Longint CertifNb;        /* taille en octets du tableau Certif   */
0310   Longint XNb;            /* taille en octets du tableau X        */
0311   Longint YNb;            /* taille en octets du tableau Y        */
0312   char XType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau X */
0313   char YType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau Y */
0314   Longint code_param;
0315   Longint numchoc;
0316 
0317 #if (client == MAC)
0318   ConnHandle NumSocket;        /* descripteur de la socket de communication */
0319 #else
0320   int NumSocket;        /* descripteur de la socket de communication */
0321 #endif
0322   short int CodeFonc;        /* code de la fonction TSLib appelee         */
0323   Longint Resultat;        /* compte-rendu d'execution du client        */
0324 
0325   /* test des pointeurs de chaines */
0326 
0327   code_param = ok;
0328 
0329   if (NomDon == NULL)
0330     code_param = p_nomdon;
0331   if (Date == NULL)
0332     code_param = p_date;
0333   if (Heure == NULL)
0334     code_param = p_heure;
0335   if (code_param != ok)
0336     return (Gestion_Erreur (erreur_chaine_vide, code_param));
0337 
0338   /* test des pointeurs de tableaux */
0339 
0340   if (Certif == NULL)
0341     code_param = p_certif;
0342   if (X == NULL)
0343     code_param = p_x;
0344 
0345   if (code_param != ok)
0346     return (Gestion_Erreur (erreur_tableau_vide, code_param));
0347 
0348   /* debut de communication */
0349 
0350   numchoc = Entrees->union_var.lval;
0351       if ((Resultat = Debut_Communication (&NumSocket, 1)) != ok)
0352         return Resultat;
0353 
0354   /* emission du code de la fonction */
0355   if(compress_on)
0356     CodeFonc = fonc_tsrsigx;
0357   else
0358     CodeFonc = -(fonc_tsrsigx - MAX_FUNCT_NUMBER);
0359   if ((Resultat = Emission (NumSocket, (char *) &CodeFonc, taille_short, p_codefonc))
0360       != ok)
0361     return Resultat;
0362 
0363   /* emission des parametres */
0364 
0365   if ((Resultat = Emission (NumSocket, NomDon, TAILLE_NOM_DONNEE, p_nomdon))
0366       != ok)
0367     return Resultat;
0368 
0369   if ((Resultat = Emission_Entrees (NumSocket, Entrees, p_entrees))
0370       != ok)
0371     return Resultat;
0372 
0373   if ((Resultat = Emission (NumSocket, (char *) &XI, taille_double, p_xi))
0374       != ok)
0375     return Resultat;
0376 
0377   if ((Resultat = Emission (NumSocket, (char *) &XF, taille_double, p_xf))
0378       != ok)
0379     return Resultat;
0380 
0381   if ((Resultat = Emission (NumSocket, (char *) &NbMax, taille_long, p_nbmax))
0382       != ok)
0383     return Resultat;
0384 
0385   if ((Resultat = Emission (NumSocket, (char *) &Extract, taille_long, p_extract))
0386       != ok)
0387     return Resultat;
0388 
0389   /* fin d'emission */
0390 
0391 #if ((client!=PC) && (client !=MAC))
0392   if ((Resultat = Fin_Emission (NumSocket))
0393       == erreur_fin_emission)
0394     return Resultat;
0395 #endif
0396 
0397   /* reception des parametres */
0398 
0399   if ((Resultat = Reception (NumSocket, (char *) &CR, taille_long, p_cr))
0400       != ok)
0401     return Resultat;
0402 
0403   if (CR == ok)
0404     {
0405       if ((Resultat = Reception_Unite (NumSocket, Unite, p_unite))
0406       != ok)
0407     return Resultat;
0408 
0409       if ((Resultat = Reception (NumSocket, (char *) NumVer, taille_long, p_numver))
0410       != ok)
0411     return Resultat;
0412 
0413       if ((Resultat = Reception (NumSocket, (char *) &CertifNb, taille_long, p_certif))
0414       != ok)
0415     return Resultat;
0416 
0417        if(CertifNb > 256) {
0418           int i;
0419           Longint *ptmp_certif=(Longint *)calloc(sizeof(Longint),CertifNb);
0420           if ((Resultat = Reception (NumSocket, (char *) ptmp_certif, CertifNb,
0421                           p_certif)) != ok)
0422             return Resultat;
0423           for(i=0; i < 64 ; i++) /* Tableau certif Bd =64 max */
0424             Certif[i]= ptmp_certif[i];
0425           }
0426           else
0427            if ((Resultat = Reception (NumSocket, (char *) Certif, CertifNb,
0428              p_certif)) != ok)
0429            return Resultat;
0430 
0431       if ((Resultat = Reception (NumSocket, Date, TAILLE_DATE, p_date))
0432       != ok)
0433     return Resultat;
0434 
0435       if ((Resultat = Reception (NumSocket, Heure, TAILLE_HEURE, p_heure))
0436       != ok)
0437     return Resultat;
0438 
0439       if ((Resultat = Reception (NumSocket, (char *) NbMes, taille_long, p_nbmes))
0440       != ok)
0441     return Resultat;
0442 
0443       if ((Resultat = Reception (NumSocket, (char *) MaxReel, taille_long, p_maxreel))
0444       != ok)
0445     return Resultat;
0446 
0447       if ((Resultat = Reception (NumSocket, (char *) &XNb, taille_long, p_x))
0448       != ok)
0449     return Resultat;
0450 
0451       if ((Resultat = Reception (NumSocket, XType, TAILLE_FORMAT_SERVEUR, p_x))
0452       != ok)
0453     return Resultat;
0454 
0455       if ((Resultat = Reception_Tableau (NumSocket, X, XNb, XType, p_x))
0456       != ok)
0457     return Resultat;
0458 
0459       if ((Resultat = Reception (NumSocket, (char *) &YNb, taille_long, p_y))
0460       != ok)
0461     return Resultat;
0462 
0463       if ((YNb != 0) && (Y == NULL))
0464     {
0465       Fin_Communication (NumSocket);
0466       return (Gestion_Erreur (erreur_tableau_vide, p_y));
0467     }
0468 
0469       if ((Resultat = Reception (NumSocket, YType, TAILLE_FORMAT_SERVEUR, p_y))
0470       != ok)
0471     return Resultat;
0472 
0473       if ((Resultat = Reception_Tableau (NumSocket, Y, YNb, YType, p_y))
0474       != ok)
0475     return Resultat;
0476 
0477     }
0478 /* fin de communication */
0479 
0480   Fin_Communication (NumSocket);
0481 
0482   return CR;
0483 
0484 }
0485 
0486 /*----------------------------------------------------------------------------
0487 
0488                         TSXtrRg
0489 
0490   But : fonction demandant au serveur de lui renvoyer un signal d'un groupe lu
0491         entre 2 rangs
0492 
0493   Arguments :
0494         NomDon    : nom de la donnee
0495         Entrees   : liste des entrees du traitement
0496         Indices   : tableau contenant les indices du signal dans le groupe
0497         Rangs     : tableau contenant le rang initial et le rang final
0498         NbMax     : nombre maximum de mesures souhaitees
0499         Extract   : type d'extraction souhaitee
0500 
0501         Unite     : liste des unites des mesures rendues
0502         NumVer    : numero de version du createur
0503         Certif    : tableau des certifications
0504         Date      : date d'execution du diagnostic ou du traitement
0505         Heure     : heure  d'execution du diagnostic ou du traitement
0506         NbMes     : nombre de valeurs rendues
0507         MaxReel   : nombre reel de valeurs
0508         X         : tableau des valeurs des abscisses
0509         Y         : tableau des valeurs des mesures
0510         Coord     : tableau des valeurs des autres coordonnees
0511 
0512   Retour          : compte-rendu d'execution
0513 
0514 ------------------------------------------------------------------------------*/
0515 Longint FAR_PASCAL
0516 TSXtrRg (    char *NomDon,
0517     pS_Entree Entrees,
0518     Longint *Indices,
0519     Longint *Rangs,
0520     Longint NbMax,
0521     Longint Extract,
0522     pS_Unite *Unite,
0523     Longint *NumVer,
0524     Longint *Certif,
0525     char *Date,
0526     char *Heure,
0527     Longint *NbMes,
0528     Longint *MaxReel,
0529     char HUGE *X,
0530     char HUGE *Y,
0531     char *Coord ) 
0532 
0533 {
0534   Longint CR;
0535   Longint CertifNb;        /* taille en octets du tableau Certif     */
0536   Longint XNb;            /* taille en octets du tableau X          */
0537   Longint YNb;            /* taille en octets du tableau Y          */
0538   Longint CoordNb;        /* taille en octets du tableau   Coord    */
0539   char XType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau X */
0540   char YType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau Y */
0541   char CoordType[MAX_INDICE][TAILLE_FORMAT_SERVEUR];
0542   Longint code_param;
0543   Longint numchoc;
0544 
0545 #if (client == MAC)
0546   ConnHandle NumSocket;        /* descripteur de la socket de communication */
0547 #else
0548   int NumSocket;        /* descripteur de la socket de communication */
0549 #endif
0550   short int CodeFonc;        /* code de la fonction TSLib appelee         */
0551   Longint Resultat;        /* compte-rendu d'execution du client        */
0552 
0553   /* test des pointeurs de chaines */
0554 
0555   code_param = ok;
0556 
0557   if (NomDon == NULL)
0558     code_param = p_nomdon;
0559   if (Date == NULL)
0560     code_param = p_date;
0561   if (Heure == NULL)
0562     code_param = p_heure;
0563   if (code_param != ok)
0564     return (Gestion_Erreur (erreur_chaine_vide, code_param));
0565 
0566   /* test des pointeurs de tableaux */
0567 
0568   if (Certif == NULL)
0569     code_param = p_certif;
0570   if (Rangs == NULL)
0571     code_param = p_rangs;
0572   if (Indices == NULL)
0573     code_param = p_indices;
0574   if (X == NULL)
0575     code_param = p_x;
0576 
0577   if (code_param != ok)
0578     return (Gestion_Erreur (erreur_tableau_vide, code_param));
0579 
0580   /* debut de communication */
0581 
0582   numchoc = Entrees->union_var.lval;
0583       if ((Resultat = Debut_Communication (&NumSocket, 1)) != ok)
0584         return Resultat;
0585 
0586   /* emission du code de la fonction */
0587 
0588   if(compress_on)
0589     CodeFonc = fonc_tsxtrrg;
0590   else
0591     CodeFonc = -(fonc_tsxtrrg - MAX_FUNCT_NUMBER);
0592   if ((Resultat = Emission (NumSocket, (char *) &CodeFonc, taille_short, p_codefonc))
0593       != ok)
0594     return Resultat;
0595 
0596   /* emission des parametres */
0597 
0598   if ((Resultat = Emission (NumSocket, NomDon, TAILLE_NOM_DONNEE, p_nomdon))
0599       != ok)
0600     return Resultat;
0601 
0602   if ((Resultat = Emission_Entrees (NumSocket, Entrees, p_entrees))
0603       != ok)
0604     return Resultat;
0605 
0606   if ((Resultat = Emission (NumSocket, (char *) Indices, MAX_INDICE * taille_long,
0607                 p_indices))
0608       != ok)
0609     return Resultat;
0610 
0611   if ((Resultat = Emission (NumSocket, (char *) Rangs, taille_long * MAX_RANG,
0612                 p_rangs))
0613       != ok)
0614     return Resultat;
0615 
0616   if ((Resultat = Emission (NumSocket, (char *) &NbMax, taille_long, p_nbmax))
0617       != ok)
0618     return Resultat;
0619 
0620   if ((Resultat = Emission (NumSocket, (char *) &Extract, taille_long, p_extract))
0621       != ok)
0622     return Resultat;
0623 
0624   /* fin d'emission */
0625 
0626 #if ((client!=PC) && (client !=MAC))
0627   if ((Resultat = Fin_Emission (NumSocket))
0628       == erreur_fin_emission)
0629     return Resultat;
0630 #endif
0631 
0632   /* reception des parametres */
0633 
0634   if ((Resultat = Reception (NumSocket, (char *) &CR, taille_long, p_cr))
0635       != ok)
0636     return Resultat;
0637 
0638   if (CR == ok)
0639     {
0640       if ((Resultat = Reception_Unite (NumSocket, Unite, p_unite))
0641       != ok)
0642     return Resultat;
0643 
0644       if ((Resultat = Reception (NumSocket, (char *) NumVer, taille_long, p_numver))
0645       != ok)
0646     return Resultat;
0647 
0648       if ((Resultat = Reception (NumSocket, (char *) &CertifNb, taille_long, p_certif))
0649       != ok)
0650     return Resultat;
0651 
0652        if(CertifNb > 256) {
0653           int i;
0654           Longint *ptmp_certif=(Longint *)calloc(sizeof(Longint),CertifNb);
0655           if ((Resultat = Reception (NumSocket, (char *) ptmp_certif, CertifNb,
0656                           p_certif)) != ok)
0657             return Resultat;
0658           for(i=0; i < 64 ; i++) /* Tableau certif Bd =64 max */
0659             Certif[i]= ptmp_certif[i];
0660           }
0661           else
0662            if ((Resultat = Reception (NumSocket, (char *) Certif, CertifNb,
0663              p_certif)) != ok)
0664            return Resultat;
0665 
0666       if ((Resultat = Reception (NumSocket, Date, TAILLE_DATE, p_date))
0667       != ok)
0668     return Resultat;
0669 
0670       if ((Resultat = Reception (NumSocket, Heure, TAILLE_HEURE, p_heure))
0671       != ok)
0672     return Resultat;
0673 
0674       if ((Resultat = Reception (NumSocket, (char *) NbMes, taille_long, p_nbmes))
0675       != ok)
0676     return Resultat;
0677 
0678       if ((Resultat = Reception (NumSocket, (char *) MaxReel, taille_long, p_maxreel))
0679       != ok)
0680     return Resultat;
0681 
0682       if ((Resultat = Reception (NumSocket, (char *) &XNb, taille_long, p_x))
0683       != ok)
0684     return Resultat;
0685 
0686       if ((Resultat = Reception (NumSocket, XType, TAILLE_FORMAT_SERVEUR, p_x))
0687       != ok)
0688     return Resultat;
0689 
0690       if ((Resultat = Reception_Tableau (NumSocket, X, XNb, XType, p_x))
0691       != ok)
0692     return Resultat;
0693 
0694       if ((Resultat = Reception (NumSocket, (char *) &YNb, taille_long, p_y))
0695       != ok)
0696     return Resultat;
0697 
0698       if ((YNb != 0) && (Y == NULL))
0699     {
0700       Fin_Communication (NumSocket);
0701       return (Gestion_Erreur (erreur_tableau_vide, p_y));
0702     }
0703 
0704       if ((Resultat = Reception (NumSocket, YType, TAILLE_FORMAT_SERVEUR, p_y))
0705       != ok)
0706     return Resultat;
0707 
0708       if ((Resultat = Reception_Tableau (NumSocket, Y, YNb, YType, p_y))
0709       != ok)
0710     return Resultat;
0711 
0712       if ((Resultat = Reception (NumSocket, (char *) &CoordNb, taille_long, p_coord))
0713       != ok)
0714     return Resultat;
0715 
0716       if ((CoordNb != 0) && (Coord == NULL))
0717     {
0718       Fin_Communication (NumSocket);
0719       return (Gestion_Erreur (erreur_tableau_vide, p_coord));
0720     }
0721 
0722       if ((Resultat = Reception (NumSocket, (char *) CoordType,
0723                    MAX_INDICE * TAILLE_FORMAT_SERVEUR, p_coord))
0724       != ok)
0725     return Resultat;
0726 
0727       if ((Resultat = Reception_Tab_Coord ( NumSocket, Coord,
0728      &CoordNb, (char *) CoordType, UNIQ, p_coord ))!= ok)
0729     return Resultat;
0730 
0731     }
0732   /* fin de communication */
0733 
0734   Fin_Communication (NumSocket);
0735 
0736   return CR;
0737 
0738 }
0739 
0740 /*----------------------------------------------------------------------------
0741 
0742                         TSXtrX
0743 
0744   But : fonction demandant au serveur de lui renvoyer un signal d'un groupe lu
0745         entre 2 valeurs de l'abscisse
0746 
0747   Arguments :
0748         NomDon    : nom de la donnee
0749         Entrees   : liste des entrees du traitement
0750         Indices   : tableau contenant les indices du signal dans le groupe
0751         XI        : valeur initiale de l'abscisse
0752         XF        : valeur finale de l'abscisse
0753         NbMax     : nombre maximum de mesures souhaitees
0754         Extract   : type d'extraction souhaitee
0755 
0756         Unite     : liste des unites des mesures rendues
0757         NumVer    : numero de version du createur
0758         Certif    : tableau des certifications
0759         Date      : date d'execution du diagnostic ou du traitement
0760         Heure     : heure  d'execution du diagnostic ou du traitement
0761         NbMes     : nombre de valeurs rendues
0762         MaxReel   : nombre reel de valeurs
0763         X         : tableau des valeurs des abscisses
0764         Y         : tableau des valeurs des mesures
0765         Coord     : tableau des valeurs des autres coordonnees
0766 
0767   Retour          : compte-rendu d'execution
0768 
0769 ------------------------------------------------------------------------------*/
0770 
0771 Longint FAR_PASCAL
0772 TSXtrX (     char *NomDon,
0773     pS_Entree Entrees,
0774     Longint *Indices,
0775     Double XI,
0776     Double XF,
0777     Longint NbMax,
0778     Longint Extract,
0779     pS_Unite *Unite,
0780     Longint *NumVer,
0781     Longint *Certif,
0782     char *Date,
0783     char *Heure,
0784     Longint *NbMes,
0785     Longint *MaxReel,
0786     char HUGE *X,
0787     char HUGE *Y,
0788     char *Coord   )
0789 {
0790   Longint CR;
0791   Longint CertifNb;        /* taille en octets du tableau Certif     */
0792   Longint XNb;            /* taille en octets du tableau X          */
0793   Longint YNb;            /* taille en octets du tableau Y          */
0794   Longint CoordNb;        /* taille en octets du tableau   Coord    */
0795   char XType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau X */
0796   char YType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau Y */
0797   char CoordType[MAX_INDICE][TAILLE_FORMAT_SERVEUR];
0798   Longint code_param;
0799   Longint numchoc;
0800 
0801 #if (client == MAC)
0802   ConnHandle NumSocket;        /* descripteur de la socket de communication */
0803 #else
0804   int NumSocket;        /* descripteur de la socket de communication */
0805 #endif
0806   short int CodeFonc;        /* code de la fonction TSLib appelee         */
0807   Longint Resultat;        /* compte-rendu d'execution du client        */
0808 
0809   /* test des pointeurs de chaines */
0810 
0811   code_param = ok;
0812 
0813   if (NomDon == NULL)
0814     code_param = p_nomdon;
0815   if (Date == NULL)
0816     code_param = p_date;
0817   if (Heure == NULL)
0818     code_param = p_heure;
0819   if (code_param != ok)
0820     return (Gestion_Erreur (erreur_chaine_vide, code_param));
0821 
0822   /* test des pointeurs de tableaux */
0823 
0824   if (Indices == NULL)
0825     code_param = p_indices;
0826   if (Certif == NULL)
0827     code_param = p_certif;
0828   if (X == NULL)
0829     code_param = p_x;
0830 
0831   if (code_param != ok)
0832     return (Gestion_Erreur (erreur_tableau_vide, code_param));
0833 
0834   /* debut de communication */
0835 
0836   numchoc = Entrees->union_var.lval;
0837       if ((Resultat = Debut_Communication (&NumSocket, 1)) != ok)
0838         return Resultat;
0839 
0840   /* emission du code de la fonction */
0841   if(compress_on)
0842     CodeFonc = fonc_tsxtrx;
0843   else
0844     CodeFonc = -(fonc_tsxtrx - MAX_FUNCT_NUMBER);
0845   if ((Resultat = Emission (NumSocket, (char *) &CodeFonc, taille_short, p_codefonc))
0846       != ok)
0847     return Resultat;
0848 
0849   /* emission des parametres */
0850 
0851   if ((Resultat = Emission (NumSocket, NomDon, TAILLE_NOM_DONNEE, p_nomdon))
0852       != ok)
0853     return Resultat;
0854 
0855   if ((Resultat = Emission_Entrees (NumSocket, Entrees, p_entrees))
0856       != ok)
0857     return Resultat;
0858 
0859   if ((Resultat = Emission (NumSocket, (char *) Indices, MAX_INDICE * taille_long,
0860                 p_indices))
0861       != ok)
0862     return Resultat;
0863 
0864   if ((Resultat = Emission (NumSocket, (char *) &XI, taille_double, p_xi))
0865       != ok)
0866     return Resultat;
0867 
0868   if ((Resultat = Emission (NumSocket, (char *) &XF, taille_double, p_xf))
0869       != ok)
0870     return Resultat;
0871 
0872   if ((Resultat = Emission (NumSocket, (char *) &NbMax, taille_long, p_nbmax))
0873       != ok)
0874     return Resultat;
0875 
0876   if ((Resultat = Emission (NumSocket, (char *) &Extract, taille_long, p_extract))
0877       != ok)
0878     return Resultat;
0879 
0880   /* fin d'emission */
0881 
0882 #if ((client!=PC) && (client !=MAC))
0883   if ((Resultat = Fin_Emission (NumSocket))
0884       == erreur_fin_emission)
0885     return Resultat;
0886 #endif
0887 
0888   /* reception des parametres */
0889 
0890   if ((Resultat = Reception (NumSocket, (char *) &CR, taille_long, p_cr))
0891       != ok)
0892     return Resultat;
0893 
0894   if (CR == ok)
0895     {
0896       if ((Resultat = Reception_Unite (NumSocket, Unite, p_unite))
0897       != ok)
0898     return Resultat;
0899 
0900       if ((Resultat = Reception (NumSocket, (char *) NumVer, taille_long, p_numver))
0901       != ok)
0902     return Resultat;
0903 
0904       if ((Resultat = Reception (NumSocket, (char *) &CertifNb, taille_long, p_certif))
0905       != ok)
0906     return Resultat;
0907 
0908        if(CertifNb > 256) {
0909           int i;
0910           Longint *ptmp_certif=(Longint *)calloc(sizeof(Longint),CertifNb);
0911           if ((Resultat = Reception (NumSocket, (char *) ptmp_certif, CertifNb,
0912                           p_certif)) != ok)
0913             return Resultat;
0914           for(i=0; i < 64 ; i++) /* Tableau certif Bd =64 max */
0915             Certif[i]= ptmp_certif[i];
0916           }
0917           else
0918            if ((Resultat = Reception (NumSocket, (char *) Certif, CertifNb,
0919              p_certif)) != ok)
0920            return Resultat;
0921 
0922       if ((Resultat = Reception (NumSocket, Date, TAILLE_DATE, p_date))
0923       != ok)
0924     return Resultat;
0925 
0926       if ((Resultat = Reception (NumSocket, Heure, TAILLE_HEURE, p_heure))
0927       != ok)
0928     return Resultat;
0929 
0930       if ((Resultat = Reception (NumSocket, (char *) NbMes, taille_long, p_nbmes))
0931       != ok)
0932     return Resultat;
0933 
0934       if ((Resultat = Reception (NumSocket, (char *) MaxReel, taille_long, p_maxreel))
0935       != ok)
0936     return Resultat;
0937 
0938       if ((Resultat = Reception (NumSocket, (char *) &XNb, taille_long, p_x))
0939       != ok)
0940     return Resultat;
0941 
0942       if ((Resultat = Reception (NumSocket, XType, TAILLE_FORMAT_SERVEUR, p_x))
0943       != ok)
0944     return Resultat;
0945 
0946       if ((Resultat = Reception_Tableau (NumSocket, X, XNb, XType, p_x))
0947       != ok)
0948     return Resultat;
0949 
0950       if ((Resultat = Reception (NumSocket, (char *) &YNb, taille_long, p_y))
0951       != ok)
0952     return Resultat;
0953 
0954       if ((YNb != 0) && (Y == NULL))
0955     {
0956       Fin_Communication (NumSocket);
0957       return (Gestion_Erreur (erreur_tableau_vide, p_y));
0958     }
0959 
0960       if ((Resultat = Reception (NumSocket, YType, TAILLE_FORMAT_SERVEUR, p_y))
0961       != ok)
0962     return Resultat;
0963 
0964       if ((Resultat = Reception_Tableau (NumSocket, Y, YNb, YType, p_y))
0965       != ok)
0966     return Resultat;
0967 
0968       if ((Resultat = Reception (NumSocket, (char *) &CoordNb, taille_long, p_coord))
0969       != ok)
0970     return Resultat;
0971 
0972       if ((CoordNb != 0) && (Coord == NULL))
0973     {
0974       Fin_Communication (NumSocket);
0975       return (Gestion_Erreur (erreur_tableau_vide, p_coord));
0976     }
0977 
0978       if ((Resultat = Reception (NumSocket, (char *) CoordType,
0979                    MAX_INDICE * TAILLE_FORMAT_SERVEUR, p_coord))
0980       != ok)
0981     return Resultat;
0982 
0983       if ((Resultat = Reception_Tab_Coord (NumSocket, Coord, &CoordNb,
0984               (char *) CoordType, UNIQ, p_coord)) != ok)
0985     return Resultat;
0986     }
0987   /* fin de communication */
0988 
0989   Fin_Communication (NumSocket);
0990 
0991   return CR;
0992 
0993 }
0994 
0995 
0996 /*----------------------------------------------------------------------------
0997 
0998                         TSGrpRg
0999 
1000   But : fonction demandant au serveur de lui renvoyer un groupe de signaux lu
1001         entre 2 rangs donnes
1002 
1003   Arguments :
1004         NomDon    : nom de la donnee
1005         Entrees   : liste des entrees du traitement
1006         Rangs     : tableau contenant le rang initial et le rang final
1007         NbMax     : nombre maximum de mesures souhaitees
1008         Extract   : type d'extraction souhaitee
1009 
1010         Unite     : liste des unites des mesures rendues
1011         NumVer    : numero de version du createur
1012         Certif    : tableau des certifications
1013         Date      : date d'execution du diagnostic ou du traitement
1014         Heure     : heure  d'execution du diagnostic ou du traitement
1015         NbMes     : nombre de valeurs rendues
1016         MaxReel   : nombre reel de valeurs
1017         X         : tableau des valeurs des abscisses
1018         Y         : tableau des valeurs des mesures
1019         Coord     : tableau des valeurs des autres coordonnees
1020 
1021   Retour          : compte-rendu d'execution
1022 
1023 ------------------------------------------------------------------------------*/
1024 Longint FAR_PASCAL
1025 TSGrpRg (    char *NomDon,
1026              pS_Entree Entrees,
1027              Longint *Rangs,
1028              Longint NbMax,
1029              Longint Extract ,
1030              pS_Unite *Unite,
1031              Longint *NumVer,
1032              Longint *Certif,
1033              char *Date ,
1034              char *Heure,
1035              Longint *NbMes,
1036              Longint *MaxReel,
1037              char HUGE *X ,
1038              char HUGE *Y,
1039         char *Coord )
1040 {
1041   Longint CR;
1042   Longint CertifNb;        /* taille en octets du tableau Certif     */
1043   Longint XNb;            /* taille en octets du tableau X          */
1044   Longint YNb;            /* taille en octets du tableau Y          */
1045   Longint CoordNb[MAX_INDICE];    /* taille en octets du tableau   Coord    */
1046   char XType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau X */
1047   char YType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau Y */
1048   char CoordType[MAX_INDICE][TAILLE_FORMAT_SERVEUR];
1049   Longint code_param;
1050   Longint numchoc;
1051 
1052 #if (client == MAC)
1053   ConnHandle NumSocket;        /* descripteur de la socket de communication */
1054 #else
1055   int NumSocket;        /* descripteur de la socket de communication */
1056 #endif
1057   short int CodeFonc;        /* code de la fonction TSLib appelee         */
1058   Longint Resultat;        /* compte-rendu d'execution du client        */
1059 
1060   /* test des pointeurs de chaines */
1061 
1062   /* test des pointeurs de chaines */
1063 
1064   code_param = ok;
1065 
1066   if (NomDon == NULL)
1067     code_param = p_nomdon;
1068   if (Date == NULL)
1069     code_param = p_date;
1070   if (Heure == NULL)
1071     code_param = p_heure;
1072   if (code_param != ok)
1073     return (Gestion_Erreur (erreur_chaine_vide, code_param));
1074 
1075   /* test des pointeurs de tableaux */
1076 
1077   if (Certif == NULL)
1078     code_param = p_certif;
1079   if (Rangs == NULL)
1080     code_param = p_rangs;
1081   if (X == NULL)
1082     code_param = p_x;
1083 
1084   if (code_param != ok)
1085     return (Gestion_Erreur (erreur_tableau_vide, code_param));
1086 
1087   /* debut de communication */
1088 
1089   numchoc = Entrees->union_var.lval;
1090       if ((Resultat = Debut_Communication (&NumSocket, 1)) != ok)
1091         return Resultat;
1092 
1093   /* emission du code de la fonction */
1094   if(compress_on)
1095     CodeFonc = fonc_tsgrprg;
1096   else
1097     CodeFonc = -(fonc_tsgrprg - MAX_FUNCT_NUMBER);
1098   if ((Resultat = Emission (NumSocket, (char *) &CodeFonc, taille_short, p_codefonc))
1099       != ok)
1100     return Resultat;
1101 
1102   /* emission des parametres */
1103 
1104   if ((Resultat = Emission (NumSocket, NomDon, TAILLE_NOM_DONNEE, p_nomdon))
1105       != ok)
1106     return Resultat;
1107 
1108   if ((Resultat = Emission_Entrees (NumSocket, Entrees, p_entrees))
1109       != ok)
1110     return Resultat;
1111 
1112   if ((Resultat = Emission (NumSocket, (char *) Rangs, MAX_RANG * taille_long,
1113                 p_rangs))
1114       != ok)
1115     return Resultat;
1116 
1117   if ((Resultat = Emission (NumSocket, (char *) &NbMax, taille_long, p_nbmax))
1118       != ok)
1119     return Resultat;
1120 
1121   if ((Resultat = Emission (NumSocket, (char *) &Extract, taille_long, p_extract))
1122       != ok)
1123     return Resultat;
1124 
1125   /* fin d'emission */
1126 
1127 #if ((client!=PC) && (client !=MAC))
1128   if ((Resultat = Fin_Emission (NumSocket))
1129       == erreur_fin_emission)
1130     return Resultat;
1131 #endif
1132 
1133 
1134   /* reception des parametres */
1135 
1136   if ((Resultat = Reception (NumSocket, (char *) &CR, taille_long, p_cr))
1137       != ok)
1138     return Resultat;
1139 
1140   if (CR == ok)
1141     {
1142       if ((Resultat = Reception_Unite (NumSocket, Unite, p_unite))
1143       != ok)
1144     return Resultat;
1145 
1146       if ((Resultat = Reception (NumSocket, (char *) NumVer, taille_long, p_numver))
1147       != ok)
1148     return Resultat;
1149 
1150       if ((Resultat = Reception (NumSocket, (char *) &CertifNb, taille_long, p_certif))
1151       != ok)
1152     return Resultat;
1153 
1154        if(CertifNb > 256) {
1155           int i;
1156           Longint *ptmp_certif=(Longint *)calloc(sizeof(Longint),CertifNb);
1157           if ((Resultat = Reception (NumSocket, (char *) ptmp_certif, CertifNb,
1158                           p_certif)) != ok)
1159             return Resultat;
1160           for(i=0; i < 64 ; i++) /* Tableau certif Bd =64 max */
1161             Certif[i]= ptmp_certif[i];
1162           }
1163           else
1164            if ((Resultat = Reception (NumSocket, (char *) Certif, CertifNb,
1165              p_certif)) != ok)
1166            return Resultat;
1167 
1168       if ((Resultat = Reception (NumSocket, Date, TAILLE_DATE, p_date))
1169       != ok)
1170     return Resultat;
1171 
1172       if ((Resultat = Reception (NumSocket, Heure, TAILLE_HEURE, p_heure))
1173       != ok)
1174     return Resultat;
1175 
1176       if ((Resultat = Reception (NumSocket, (char *) NbMes, MAX_MESURE * taille_long,
1177                  p_nbmes))
1178       != ok)
1179     return Resultat;
1180 
1181       if ((Resultat = Reception (NumSocket, (char *) MaxReel, taille_long, p_maxreel))
1182       != ok)
1183     return Resultat;
1184 
1185       if ((Resultat = Reception (NumSocket, (char *) &XNb, taille_long, p_x))
1186       != ok)
1187     return Resultat;
1188 
1189       if ((Resultat = Reception (NumSocket, XType, TAILLE_FORMAT_SERVEUR, p_x))
1190       != ok)
1191     return Resultat;
1192 
1193       if ((Resultat = Reception_Tableau (NumSocket, X, XNb, XType, p_x))
1194       != ok)
1195     return Resultat;
1196 
1197       if ((Resultat = Reception (NumSocket, (char *) &YNb, taille_long, p_y))
1198       != ok)
1199     return Resultat;
1200 
1201       if ((YNb != 0) && (Y == NULL))
1202     {
1203       Fin_Communication (NumSocket);
1204       return (Gestion_Erreur (erreur_tableau_vide, p_y));
1205     }
1206 
1207       if ((Resultat = Reception (NumSocket, YType, TAILLE_FORMAT_SERVEUR, p_y))
1208       != ok)
1209     return Resultat;
1210 
1211       if ((Resultat = Reception_Tableau (NumSocket, Y, YNb, YType, p_y))
1212       != ok)
1213     return Resultat;
1214 
1215       if ((Resultat = Reception (NumSocket, (char *) CoordNb, MAX_INDICE * taille_long,
1216                  p_coord))
1217       != ok)
1218     return Resultat;
1219 
1220       if ((CoordNb[0] != 0) && (Coord == NULL))
1221     {
1222       Fin_Communication (NumSocket);
1223       return (Gestion_Erreur (erreur_tableau_vide, p_coord));
1224     }
1225 
1226       if ((Resultat = Reception (NumSocket, (char *) CoordType,
1227                    MAX_INDICE * TAILLE_FORMAT_SERVEUR, p_coord))
1228       != ok)
1229     return Resultat;
1230 
1231       if ((Resultat = Reception_Tab_Coord (NumSocket, Coord, CoordNb,
1232               (char*) CoordType, MULT, p_coord)) != ok)
1233     return Resultat;
1234     }
1235   /* fin de communication */
1236 
1237   Fin_Communication (NumSocket);
1238 
1239   return CR;
1240 
1241 }
1242 
1243 /*----------------------------------------------------------------------------
1244 
1245                         TSGrpX
1246 
1247   But : fonction demandant au serveur de lui renvoyer un groupe de signaux lu
1248         entre 2 valeurs de l'abscisse
1249 
1250   Arguments :
1251         NomDon    : nom de la donnee
1252         Entrees   : liste des entrees du traitement
1253         XI        : valeur initiale de l'abscisse
1254         XF        : valeur finale de l'abscisse
1255         NbMax     : nombre maximum de mesures souhaitees
1256         Extract   : type d'extraction souhaitee
1257 
1258         Unite     : liste des unites des mesures rendues
1259         NumVer    : numero de version du createur
1260         Certif    : tableau des certifications
1261         Date      : date d'execution du diagnostic ou du traitement
1262         Heure     : heure  d'execution du diagnostic ou du traitement
1263         NbMes     : nombre de valeurs rendues
1264         MaxReel   : nombre reel de valeurs
1265         X         : tableau des valeurs des abscisses
1266         Y         : tableau des valeurs des mesures
1267         Coord     : tableau des valeurs des autres coordonnees
1268 
1269   Retour          : compte-rendu d'execution
1270 
1271 ------------------------------------------------------------------------------*/
1272 Longint FAR_PASCAL
1273 TSGrpX (     char *NomDon,
1274         pS_Entree Entrees,
1275         Double XI,
1276         Double XF,
1277         Longint NbMax,
1278         Longint Extract,
1279         pS_Unite *Unite,
1280         Longint *NumVer,
1281         Longint *Certif,
1282         char *Date,
1283         char *Heure,
1284         Longint *NbMes,
1285         Longint *MaxReel,
1286         char HUGE *X,
1287         char HUGE *Y,
1288         char *Coord  ) 
1289 
1290 {
1291   Longint CR;
1292   Longint CertifNb;        /* taille en octets du tableau Certif     */
1293   Longint XNb;            /* taille en octets du tableau X          */
1294   Longint YNb;            /* taille en octets du tableau Y          */
1295   Longint CoordNb[MAX_INDICE];    /* taille en octets du tableau   Coord    */
1296   char XType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau X */
1297   char YType[TAILLE_FORMAT_SERVEUR];    /* type des elements du tableau Y */
1298   char CoordType[MAX_INDICE][TAILLE_FORMAT_SERVEUR];
1299   Longint code_param;
1300   Longint numchoc;
1301 
1302 #if (client == MAC)
1303   ConnHandle NumSocket;        /* descripteur de la socket de communication */
1304 #else
1305   int NumSocket;        /* descripteur de la socket de communication */
1306 #endif
1307   short int CodeFonc;        /* code de la fonction TSLib appelee         */
1308   Longint Resultat;        /* compte-rendu d'execution du client        */
1309 
1310   /* test des pointeurs de chaines */
1311 
1312   code_param = ok;
1313 
1314   if (NomDon == NULL)
1315     code_param = p_nomdon;
1316   if (Date == NULL)
1317     code_param = p_date;
1318   if (Heure == NULL)
1319     code_param = p_heure;
1320   if (code_param != ok)
1321     return (Gestion_Erreur (erreur_chaine_vide, code_param));
1322 
1323   /* test des pointeurs de tableaux */
1324 
1325   if (Certif == NULL)
1326     code_param = p_certif;
1327   if (X == NULL)
1328     code_param = p_x;
1329 
1330   if (code_param != ok)
1331     return (Gestion_Erreur (erreur_tableau_vide, code_param));
1332 
1333   /* debut de communication */
1334 
1335   numchoc = Entrees->union_var.lval;
1336       if ((Resultat = Debut_Communication (&NumSocket, 1)) != ok)
1337         return Resultat;
1338 
1339   /* emission du code de la fonction */
1340   if(compress_on)
1341     CodeFonc = fonc_tsgrpx;
1342   else
1343     CodeFonc = -(fonc_tsgrpx - MAX_FUNCT_NUMBER);
1344   if ((Resultat = Emission (NumSocket, (char *) &CodeFonc, taille_short, p_codefonc))
1345       != ok)
1346     return Resultat;
1347 
1348   /* emission des parametres */
1349 
1350   if ((Resultat = Emission (NumSocket, NomDon, TAILLE_NOM_DONNEE, p_nomdon))
1351       != ok)
1352     return Resultat;
1353 
1354   if ((Resultat = Emission_Entrees (NumSocket, Entrees, p_entrees))
1355       != ok)
1356     return Resultat;
1357 
1358   if ((Resultat = Emission (NumSocket, (char *) &XI, taille_double, p_xi))
1359       != ok)
1360     return Resultat;
1361 
1362   if ((Resultat = Emission (NumSocket, (char *) &XF, taille_double, p_xf))
1363       != ok)
1364     return Resultat;
1365 
1366   if ((Resultat = Emission (NumSocket, (char *) &NbMax, taille_long, p_nbmax))
1367       != ok)
1368     return Resultat;
1369 
1370   if ((Resultat = Emission (NumSocket, (char *) &Extract, taille_long, p_extract))
1371       != ok)
1372     return Resultat;
1373 
1374   /* fin d'emission */
1375 
1376 #if ((client!=PC) && (client !=MAC))
1377   if ((Resultat = Fin_Emission (NumSocket))
1378       == erreur_fin_emission)
1379     return Resultat;
1380 #endif
1381 
1382   /* reception des parametres */
1383 
1384   if ((Resultat = Reception (NumSocket, (char *) &CR, taille_long, p_cr))
1385       != ok)
1386     return Resultat;
1387 
1388   if (CR == ok)
1389     {
1390       if ((Resultat = Reception_Unite (NumSocket, Unite, p_unite))
1391       != ok)
1392     return Resultat;
1393 
1394       if ((Resultat = Reception (NumSocket, (char *) NumVer, taille_long, p_numver))
1395       != ok)
1396     return Resultat;
1397 
1398       if ((Resultat = Reception (NumSocket, (char *) &CertifNb, taille_long, p_certif))
1399       != ok)
1400     return Resultat;
1401 
1402        if(CertifNb > 256) {
1403           int i;
1404           Longint *ptmp_certif=(Longint *)calloc(sizeof(Longint),CertifNb);
1405           if ((Resultat = Reception (NumSocket, (char *) ptmp_certif, CertifNb,
1406                           p_certif)) != ok)
1407             return Resultat;
1408           for(i=0; i < 64 ; i++) /* Tableau certif Bd =64 max */
1409             Certif[i]= ptmp_certif[i];
1410           }
1411           else
1412            if ((Resultat = Reception (NumSocket, (char *) Certif, CertifNb,
1413              p_certif)) != ok)
1414            return Resultat;
1415 
1416       if ((Resultat = Reception (NumSocket, Date, TAILLE_DATE, p_date))
1417       != ok)
1418     return Resultat;
1419 
1420       if ((Resultat = Reception (NumSocket, Heure, TAILLE_HEURE, p_heure))
1421       != ok)
1422     return Resultat;
1423 
1424       if ((Resultat = Reception (NumSocket, (char *) NbMes, MAX_MESURE * taille_long,
1425                  p_nbmes))
1426       != ok)
1427     return Resultat;
1428 
1429       if ((Resultat = Reception (NumSocket, (char *) MaxReel, taille_long, p_maxreel))
1430       != ok)
1431     return Resultat;
1432 
1433       if ((Resultat = Reception (NumSocket, (char *) &XNb, taille_long, p_x))
1434       != ok)
1435     return Resultat;
1436 
1437       if ((Resultat = Reception (NumSocket, XType, TAILLE_FORMAT_SERVEUR, p_x))
1438       != ok)
1439     return Resultat;
1440 
1441       if ((Resultat = Reception_Tableau (NumSocket, X, XNb, XType, p_x))
1442       != ok)
1443     return Resultat;
1444 
1445       if ((Resultat = Reception (NumSocket, (char *) &YNb, taille_long, p_y))
1446       != ok)
1447     return Resultat;
1448 
1449       if ((YNb != 0) && (Y == NULL))
1450     {
1451       Fin_Communication (NumSocket);
1452       return (Gestion_Erreur (erreur_tableau_vide, p_y));
1453     }
1454 
1455       if ((Resultat = Reception (NumSocket, YType, TAILLE_FORMAT_SERVEUR, p_y))
1456       != ok)
1457     return Resultat;
1458 
1459       if ((Resultat = Reception_Tableau (NumSocket, Y, YNb, YType, p_y))
1460       != ok)
1461     return Resultat;
1462 
1463       if ((Resultat = Reception (NumSocket, (char *) CoordNb, MAX_INDICE * taille_long,
1464                  p_coord))
1465       != ok)
1466     return Resultat;
1467 
1468       if ((CoordNb[0] != 0) && (Coord == NULL))
1469     {
1470       Fin_Communication (NumSocket);
1471       return (Gestion_Erreur (erreur_tableau_vide, p_coord));
1472     }
1473 
1474       if ((Resultat = Reception (NumSocket, (char *) CoordType,
1475                    MAX_INDICE * TAILLE_FORMAT_SERVEUR, p_coord))
1476       != ok)
1477     return Resultat;
1478 
1479       if ((Resultat = Reception_Tab_Coord (NumSocket, Coord, CoordNb,
1480         (char *) CoordType, MULT, p_coord)) != ok)
1481     return Resultat;
1482 
1483     }
1484   /* fin de communication */
1485 
1486   Fin_Communication (NumSocket);
1487 
1488   return CR;
1489 
1490 }

Community support and wiki are available on Redmine. Last update: 18-Apr-2019.