File: communicat.c

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (117 lines) | stat: -rw-r--r-- 2,731 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
   communications.c

   module destine a faire la jonction entre les modules
   d'interface et le systeme de communications.
*/
#ifdef sgi
#define __STDC__
#endif

#ifndef __STDC__
#include <varargs.h>
#define Va_start(a,b) va_start(a)
#else
#include <stdarg.h>
#define Va_start(a,b) va_start(a,b)
#endif
#include <stdio.h>
#include <string.h>

#include "gestion_memoire.h"
#include "formatage_messages.h"
#include "libCom.h"
#include "gestion_messages.h"
#include "utilitaires.h"
#include "communications.h"
#include "buffer_dynamiques.h"

static char *creer_trame();

#ifdef __STDC__
void envoyer_message_parametres_var(char * first, ...)
#else /* VARARGS */
void envoyer_message_parametres_var(va_alist) va_dcl
#endif
{
  va_list liste;
  tableau_avec_taille conversion;
    
#ifdef __STDC__
  va_start(liste,first);
#else
  char *first;
  va_start(liste);
  first = va_arg(liste, char *);
#endif
  conversion=convertir_nombre_arbitraire_de_chaines_en_tableau(first,&liste);
  envoyer_message_tableau(conversion);
  va_end(liste);
  liberer_tableau_de_pointeurs(conversion.tableau,conversion.taille);
  gbd_liberer_mixte(conversion.tableau);
}


void envoyer_message_tableau(message)
Message message;
{
    char *trame;
    Message nouveau_message;
    int compteur;

    nouveau_message.tableau=allouer_type(char *,message.taille+1);
    nouveau_message.tableau[0]=dupliquer_chaine("");

    for(compteur=0;compteur<message.taille;compteur++)
	nouveau_message.tableau[compteur+1]=message.tableau[compteur];
    nouveau_message.taille=message.taille+1;

    trame=creer_trame(nouveau_message);

    liberer(nouveau_message.tableau[0]);
    liberer(nouveau_message.tableau);

    ecrire_trame(trame);

    liberer(trame);
}



Message attendre_reponse(source,type_message,nb_parametres_min)
char *source;
char *type_message;
int nb_parametres_min;
{
    return attendre_message(source,type_message,nb_parametres_min);
}


/*
    creer_trame transforme un Message en une trame.
    (toutes les chaines sont concatenees dans une seule
     et le tout est encapsule entre DEBUT_DE_TRAME et FIN_DE_TRAME)
*/
static char *creer_trame(message)
Message message;
{
    char *trame;
    char *milieu_de_trame;
    int taille_trame;

    liberer(message.tableau[0]);
    message.tableau[0]=dupliquer_chaine(identificateur_appli());

    milieu_de_trame=coller_chaines(message);

    taille_trame=strlen(DEBUT_DE_TRAME)+1+strlen(milieu_de_trame)+1+strlen(FIN_DE_TRAME)+1;
    trame=allouer_type(char,taille_trame);
    *trame='\0';

    strcat_plus_caractere(trame,DEBUT_DE_TRAME,SEPARATEUR);
    strcat_plus_caractere(trame,milieu_de_trame,SEPARATEUR);
    strcat(trame,FIN_DE_TRAME);

    liberer(milieu_de_trame);
    return trame;
}