~ubuntu-branches/ubuntu/hoary/scilab/hoary

« back to all changes in this revision

Viewing changes to geci/utilitaires.c

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2005-01-09 22:58:21 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050109225821-473xr8vhgugxxx5j
Tags: 3.0-12
changed configure.in to build scilab's own malloc.o, closes: #255869

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include <varargs.h>
2
 
#include <stdio.h>
3
 
#include <string.h>
4
 
#include "gestion_memoire.h"
5
 
#include "buffer_dynamiques.h"
6
 
#include "utilitaires.h"
7
 
 
8
 
#define TAILLE_INIT_TABLEAU 10
9
 
 
10
 
void liberer_tableau_de_pointeurs(tableau,taille)
11
 
     char **tableau;
12
 
     int taille;
13
 
{
14
 
  int compteur;
15
 
  for(compteur=0 ; compteur < taille ; compteur ++)
16
 
    liberer(tableau[compteur]);
17
 
}
18
 
 
19
 
 
20
 
/*
21
 
    il faut que, comme avec strcat, la chaine ait la
22
 
    place pour accepter le caractere supplementaire.
23
 
*/
24
 
void concat_caractere(chaine,caractere)
25
 
     char *chaine;
26
 
     char caractere;
27
 
{
28
 
  chaine[strlen(chaine)+1]='\0';
29
 
  chaine[strlen(chaine)]=caractere;
30
 
}
31
 
 
32
 
/*
33
 
   il faut que, comme avec strcat, la chaine ait la place pour 
34
 
   accepter la chaine et le caractere supplementaires
35
 
*/
36
 
void strcat_plus_caractere(chaine_a_remplir,chaine_a_copier,caractere)
37
 
     char *chaine_a_remplir;
38
 
     char *chaine_a_copier;
39
 
     char caractere;
40
 
{
41
 
  strcat(chaine_a_remplir,chaine_a_copier);
42
 
  concat_caractere(chaine_a_remplir,caractere);
43
 
}
44
 
 
45
 
static tableau_avec_taille tat_resultat;
46
 
 
47
 
tableau_avec_taille convertir_nombre_arbitraire_de_chaines_en_tableau(liste)
48
 
     va_list *liste;
49
 
{
50
 
  char *chaine;
51
 
 
52
 
  tat_resultat.taille=0;
53
 
  tat_resultat.tableau=gbd_creer_buffer_dynamique_type(char *,TAILLE_INIT_TABLEAU,allouer,reallouer,liberer,NULL);
54
 
  tat_resultat.tableau=gbd_augmenter_buffer_dynamique(tat_resultat.tableau,1);
55
 
 
56
 
  while((chaine=va_arg(*liste,char *)) != NULL)
57
 
    {
58
 
      tat_resultat.tableau[tat_resultat.taille++]=dupliquer_chaine(chaine);
59
 
      tat_resultat.tableau=gbd_augmenter_buffer_dynamique(tat_resultat.tableau,1);
60
 
    }
61
 
  tat_resultat.tableau[tat_resultat.taille]=NULL;
62
 
 
63
 
  return tat_resultat;
64
 
}
65
 
 
66
 
 
67
 
char *concatenation_plusieurs_chaines(va_alist)
68
 
     va_dcl
69
 
{
70
 
  va_list liste;
71
 
 
72
 
  char *chaine_resultat;
73
 
  tableau_avec_taille temporaire;
74
 
  int nb_caracteres;
75
 
  int compteur;
76
 
 
77
 
  va_start(liste);
78
 
 
79
 
  nb_caracteres=0;
80
 
 
81
 
  temporaire=convertir_nombre_arbitraire_de_chaines_en_tableau(&liste);
82
 
  for(compteur=0;compteur<temporaire.taille;compteur++)
83
 
    nb_caracteres+=strlen(temporaire.tableau[compteur]);
84
 
 
85
 
  chaine_resultat=allouer_type(char,nb_caracteres+1);
86
 
  *chaine_resultat='\0';
87
 
  for(compteur=0;compteur<temporaire.taille;compteur++)
88
 
    strcat(chaine_resultat,temporaire.tableau[compteur]);
89
 
 
90
 
  liberer_tableau_de_pointeurs(temporaire.tableau,temporaire.taille);
91
 
  gbd_liberer_mixte(temporaire.tableau);
92
 
 
93
 
  va_end(liste);
94
 
 
95
 
  return chaine_resultat;
96
 
}
97
 
 
98
 
 
99
 
char *concatener_deux_chaines(chaine1,chaine2)
100
 
     char *chaine1;
101
 
     char *chaine2;
102
 
{
103
 
  char *chaine_resultat;
104
 
  chaine_resultat=allouer_type(char,strlen(chaine1)+strlen(chaine2)+1);
105
 
  strcpy(chaine_resultat,chaine1);
106
 
  strcat(chaine_resultat,chaine2);
107
 
  return chaine_resultat;
108
 
}
109
 
 
110
 
 
111
 
char *dupliquer_chaine(chaine_source)
112
 
     char *chaine_source;
113
 
{
114
 
  char *chaine_resultat=allouer_type(char,strlen(chaine_source)+1);
115
 
  strcpy(chaine_resultat,chaine_source);
116
 
 
117
 
  return chaine_resultat;
118
 
}