25 #define MOT_CLEF_INV 2
26 #define GRANDEUR_INV 4
219 #define N_MAX_ITEMS 30
220 #define L_MAX_ITEM 49
236 "",
"byte",
"char",
"short",
"long",
"float",
"double",
"complex",
237 "double_complex",
"rgba",
"structure",
"pointer",
"list",
"int",
"uint",
239 "vec3f",
"vec3d",
"vec4f",
"vec4d",
"hfloat",
"vec9f",
"vec9d"
245 "fac_x",
"fac_y",
"fac_z",
"fac_t"
251 0,
sizeof(
Byte),
sizeof(
char),
sizeof(short),
sizeof(
long),
sizeof(float),
252 sizeof(
double), 0, 0, 0, 0,
sizeof(
void *), 0,
sizeof(
int),
sizeof(
UInt),
253 sizeof(
unsigned short),
254 3*
sizeof(float), 3*
sizeof(
double), 4*
sizeof(float), 4*
sizeof(
double),
255 sizeof(
short_float), 9*
sizeof(
float), 9*
sizeof(double)
262 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 3, 3, 4, 4, 1, 9, 9
282 is_deprecated(
char *s ) {
290 #define MAKE_CONSISTENT( D ) \
291 if( bool_dim_##D && bool_inc_##D && bool_##D ) \
292 if( v_dim_##D != v_inc_##D * (v_##D-1) ) { \
293 fprintf( stderr, "Adjusting dim_%s to make dimensions consistent\n", #D ); \
294 v_dim_##D = v_inc_##D * (v_##D-1);\
326 cerr<<
"\nERREUR: descripteur de fichier nul\n";
333 cerr<<
"\nHeader_Write: type inconnu: "<< v_type;
342 cerr <<
"\nHeader_Write: taille invalide:" << v_taille << endl;
348 if (v_trame<MIN_TRAME || v_trame>
MAX_TRAME) {
350 fprintf(stderr,
"\nHeader_Write: trame inconnue: %d\n", v_trame);
364 snprintf(ligne,
sizeof ligne,
"x:%d y:%d z:%d t:%d type:%s systeme:%s ",
365 v_x, v_y, v_z, v_t, type, systemestr());
367 snprintf(ligne,
sizeof ligne,
"x:%d y:%d t:%d type:%s systeme:%s ",
368 v_x, v_y, v_t, type, systemestr());
372 snprintf(ligne,
sizeof ligne,
"x:%d y:%d z:%d type:%s systeme:%s ",
373 v_x, v_y, v_z, type, systemestr());
375 snprintf(ligne,
sizeof ligne,
"x:%d y:%d type:%s systeme:%s ",
376 v_x, v_y, type, systemestr());
379 int n_car = strlen(ligne);
390 snprintf(&items[n_items][0],
L_MAX_ITEM,
"taille:%d ", v_taille);
391 l_item[n_items] = strlen(&items[n_items][0]);
395 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_x:%g ", v_org_x);
396 l_item[n_items] = strlen(&items[n_items][0]);
400 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_y:%g ", v_org_y);
401 l_item[n_items] = strlen(&items[n_items][0]);
405 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_z:%g ", v_org_z);
406 l_item[n_items] = strlen(&items[n_items][0]);
410 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_t:%g ", v_org_t);
411 l_item[n_items] = strlen(&items[n_items][0]);
415 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_x:%g ", v_dim_x);
416 l_item[n_items] = strlen(&items[n_items][0]);
420 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_x:%g ", v_inc_x);
421 l_item[n_items] = strlen(&items[n_items][0]);
425 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_y:%g ", v_dim_y);
426 l_item[n_items] = strlen(&items[n_items][0]);
430 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_y:%g ", v_inc_y);
431 l_item[n_items] = strlen(&items[n_items][0]);
435 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_z:%g ", v_dim_z);
436 l_item[n_items] = strlen(&items[n_items][0]);
440 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_z:%g ", v_inc_z);
441 l_item[n_items] = strlen(&items[n_items][0]);
445 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_t:%g ", v_dim_t);
446 l_item[n_items] = strlen(&items[n_items][0]);
450 snprintf(&items[n_items][0],
L_MAX_ITEM,
"inc_t:%g ", v_inc_t);
451 l_item[n_items] = strlen(&items[n_items][0]);
455 snprintf(&items[n_items][0],
L_MAX_ITEM,
"vect_z:1 ");
456 l_item[n_items] = strlen(&items[n_items][0]);
460 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_x:%.40s ", v_unites_x);
461 l_item[n_items] = strlen(&items[n_items][0]);
465 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_y:%.40s ", v_unites_y);
466 l_item[n_items] = strlen(&items[n_items][0]);
470 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_z:%.40s ", v_unites_z);
471 l_item[n_items] = strlen(&items[n_items][0]);
475 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_t:%.40s ", v_unites_t);
476 l_item[n_items] = strlen(&items[n_items][0]);
480 snprintf(&items[n_items][0],
L_MAX_ITEM,
"num:%d ", v_num);
481 l_item[n_items] = strlen(&items[n_items][0]);
485 snprintf(&items[n_items][0],
L_MAX_ITEM,
"bin:%d ", v_bin);
486 l_item[n_items] = strlen(&items[n_items][0]);
492 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:c8 ");
495 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:c4 ");
498 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hex ");
501 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hexedges ");
504 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hexbridges ");
507 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hexlines ");
510 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hex2 ");
513 l_item[n_items] = strlen(&items[n_items][0]);
517 snprintf(&items[n_items][0],
L_MAX_ITEM,
"lut:%d ", v_lut);
518 l_item[n_items] = strlen(&items[n_items][0]);
522 snprintf(&items[n_items][0],
L_MAX_ITEM,
"comp:%d ", v_comp);
523 l_item[n_items] = strlen(&items[n_items][0]);
527 snprintf(&items[n_items][0],
L_MAX_ITEM,
"epais:%g ", v_epais);
528 l_item[n_items] = strlen(&items[n_items][0]);
532 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites:%.40s ", v_unites);
533 l_item[n_items] = strlen(&items[n_items][0]);
537 snprintf(&items[n_items][0],
L_MAX_ITEM,
"facteur:%g ", v_facteur);
538 l_item[n_items] = strlen(&items[n_items][0]);
542 snprintf(&items[n_items][0],
L_MAX_ITEM,
"zero:%g ", v_zero);
543 l_item[n_items] = strlen(&items[n_items][0]);
546 if ( v_transparent != NULL ) {
547 char *p=(
char *)v_transparent, value[
MAXL];
550 snprintf( value+a*2,
L_MAX_ITEM,
"%0.2x", *(p++) );
552 snprintf(&items[n_items][0],
L_MAX_ITEM,
"transparent:%s ", value );
553 l_item[n_items] = strlen(&items[n_items][0]);
556 if (bool_struct_desc) {
557 snprintf(&items[n_items][0],
L_MAX_ITEM,
"struct:%.40s ", v_struct_desc);
558 l_item[n_items] = strlen(&items[n_items][0]);
562 snprintf(&items[n_items][0],
L_MAX_ITEM,
"aut:%.40s ", v_aut_name);
563 l_item[n_items] = strlen(&items[n_items][0]);
571 while (*comment != NULL) {
573 n_car_total += strlen(*comment++) + 3;
580 for (
int i=0;i<n_items;i++) {
581 if (n_car+l_item[i]<71) {
582 strcat(ligne, &items[i][0]);
585 ligne[n_car++] =
'\r';
586 ligne[n_car++] =
'\n';
587 ligne[n_car] =
'\000';
588 n_car_total += n_car;
589 if (puts_fcn(file, ligne)==-1) {
591 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
593 fprintf(stderr,
"\n");
598 strcpy(ligne, &items[i][0]);
607 ligne[n_car++] =
'\r';
608 ligne[n_car++] =
'\n';
609 ligne[n_car] =
'\000';
610 n_car_total += n_car;
611 if (puts_fcn(file, ligne )==-1) {
613 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
615 fprintf(stderr,
"\n");
626 int n_blocs = 1 + (n_car_total-1)/1024;
627 int n_car_sup = n_blocs*1024 - n_car_total;
630 n_lig_sup = 1 + (n_car_sup-1)/72;
634 int n_car_dl = 1 + (n_car_sup-1)%72;
641 while (*comment != NULL) {
642 n_car = fprintf(file,
"#%.80s\r\n", *comment++);
645 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
647 fprintf(stderr,
"\n");
658 for (
int i=0;i<70;i++) ligne[i] =
' ';
662 for (
int i=0;i<n_lig_sup-1;i++) {
663 if (puts_fcn(file, ligne)==-1) {
665 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
667 fprintf(stderr,
"\n");
677 for (
int i=0;i<n_car_dl-2;i++) ligne[i] =
' ';
678 if (n_car_dl>2) ligne[n_car_dl-3] =
'\r';
679 if (n_car_dl>1) ligne[n_car_dl-2] =
'\n';
680 ligne[n_car_dl-1] =
FF;
681 ligne[n_car_dl] =
'\000';
682 if (puts_fcn(file, ligne )==-1) {
684 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
686 fprintf(stderr,
"\n");
692 if (n_car_total>1024) {
695 "\nHeader_Write ATTENTION: etiquette de grandeur non-standard \n");
697 "\nHeader_Write ATTENTION: etiquette de grandeur non-standard \n");
701 "\nHeader_Write: Entete transcrite sans problemes\n");
724 bool bool_fac_t =
false;
729 for (
int s=8; (s>0 || nosup) && go; s-- ) {
733 int bytes_read = tell(file);
743 "\nERREUR ligne trop longue (>80) dans l'entete !\n" ) ;
745 "\nERREUR ligne trop longue (>80) dans l'entete !\n" ) ;
756 "\nERREUR Fin de fichier dans l'entete !\n" ) ;
758 "\nERREUR Fin de fichier dans l'entete !\n" ) ;
763 else if ( in ==
FF ) {
770 else if ( in ==
CR ) {
772 }
else if ( in ==
LF ) {
778 else if ( in && ! isprint(in) ) {
781 "\nERREUR caract. non imprim. 0x%.2X dans "
782 "l'entete at byte number %ld\n", in, tell(file) );
784 "\nERREUR caract. non imprim. 0x%.2X dans l'entete !\n", in );
787 str[i++] = (char) in ;
793 for (
char* pt_1=str; *pt_1; pt_1++ ) {
796 if ( *pt_1 ==
'*' || *pt_1 ==
'#') {
798 v_comment[com] = (
char *)malloc( strlen(pt_1+1) + 1 ) ;
799 strcpy( v_comment[com++], pt_1+1 ) ;
801 v_comment = (
char **)
802 realloc(v_comment, (com+
NALLOC)*
sizeof(
char *));
803 v_comment[com] = NULL ;
811 if (isupper(*pt_1)) *pt_1 = tolower( *pt_1 ) ;
817 for (
char *pt_1=strtok(str,
" ,;\t"); pt_1; pt_1=strtok(NULL,
" ,;\t") ) {
823 for ( pt_2 = pt_1; *pt_2 !=
':'; pt_2 ++ )
827 "\nERREUR de syntaxe dans l'entete (%s)\n", pt_1);
829 "\nERREUR de syntaxe dans l'entete (%s)\n", pt_1);
836 if ( ! strcmp( pt_1,
"x" ) ) {
840 }
else if ( ! strcmp( pt_1,
"y" ) ) {
844 }
else if ( ! strcmp( pt_1,
"z" ) ) {
848 }
else if ( ! strcmp( pt_1,
"t" ) ) {
853 }
else if ( ! strcmp( pt_1,
"sup" ) ) {
857 }
else if ( ! strcmp( pt_1,
"type" ) ) {
865 }
else if ( ! strcmp( pt_1,
"taille" ) ) {
866 v_taille = atoi( pt_2 ) ;
869 }
else if ( ! strcmp( pt_1,
"systeme" ) ) {
878 }
else if ( ! strcmp( pt_1,
"bin" ) ) {
879 v_bin = atoi( pt_2 ) ;
882 }
else if ( ! strcmp( pt_1,
"trame" ) ) {
884 if ( ! strcmp( pt_2,
"c8" ) ) {
886 }
else if ( ! strcmp( pt_2,
"c4" ) ) {
888 }
else if ( ! strcmp( pt_2,
"hex" ) ) {
890 }
else if ( ! strcmp( pt_2,
"hexedges" ) ) {
892 }
else if ( ! strcmp( pt_2,
"hexbridges" ) ) {
894 }
else if ( ! strcmp( pt_2,
"hexlines" ) ) {
896 }
else if ( ! strcmp( pt_2,
"hex2" ) ) {
901 }
else if ( ! strcmp( pt_1,
"num" ) ) {
902 v_num = atoi( pt_2 ) ;
905 }
else if ( ! strcmp( pt_1,
"comp" ) ) {
906 v_comp = atoi( pt_2 ) ;
909 }
else if ( ! strcmp( pt_1,
"lut" ) ) {
910 v_lut = atoi( pt_2 ) ;
913 }
else if ( ! strcmp( pt_1,
"dim_x" ) ) {
914 v_dim_x = atof( pt_2 ) ;
917 }
else if ( ! strcmp( pt_1,
"dim_y" ) ) {
918 v_dim_y = atof( pt_2 ) ;
921 }
else if ( ! strcmp( pt_1,
"dim_z" ) ) {
922 v_dim_z = atof( pt_2 ) ;
925 }
else if ( ! strcmp( pt_1,
"dim_t" ) ) {
926 v_dim_t = atof( pt_2 ) ;
929 }
else if ( ! strcmp( pt_1,
"inc_x" ) ) {
930 v_inc_x = atof( pt_2 ) ;
933 }
else if ( ! strcmp( pt_1,
"inc_y" ) ) {
934 v_inc_y = atof( pt_2 ) ;
937 }
else if ( ! strcmp( pt_1,
"inc_z" ) ) {
938 v_inc_z = atof( pt_2 ) ;
941 }
else if ( ! strcmp( pt_1,
"inc_t" ) ) {
942 v_inc_t = atof( pt_2 ) ;
945 }
else if ( ! strcmp( pt_1,
"org_x" ) ) {
946 v_org_x = atof( pt_2 ) ;
949 }
else if ( ! strcmp( pt_1,
"org_y" ) ) {
950 v_org_y = atof( pt_2 ) ;
953 }
else if ( ! strcmp( pt_1,
"org_z" ) ) {
954 v_org_z = atof( pt_2 ) ;
957 }
else if ( ! strcmp( pt_1,
"org_t" ) ) {
958 v_org_t = atof( pt_2 ) ;
961 }
else if ( ! strcmp( pt_1,
"vect_z" ) ) {
964 }
else if ( ! strcmp( pt_1,
"unites_x" ) ) {
965 strncpy( v_unites_x, pt_2, 40 ) ;
966 bool_unites_x =
VRAI;
968 }
else if ( ! strcmp( pt_1,
"unites_y" ) ) {
969 strncpy( v_unites_y, pt_2, 40 ) ;
970 bool_unites_y =
VRAI;
972 }
else if ( ! strcmp( pt_1,
"unites_z" ) ) {
973 strncpy( v_unites_z, pt_2, 40 ) ;
974 bool_unites_z =
VRAI;
976 }
else if ( ! strcmp( pt_1,
"unites_t" ) ) {
977 strncpy( v_unites_t, pt_2, 40 ) ;
978 bool_unites_t =
VRAI;
980 }
else if ( ! strcmp( pt_1,
"epais" ) ) {
981 v_epais = atof( pt_2 ) ;
984 }
else if ( ! strcmp( pt_1,
"unites" ) ) {
985 strncpy( v_unites, pt_2, 40 ) ;
988 }
else if ( ! strcmp( pt_1,
"facteur" ) ) {
989 v_facteur = atof( pt_2 ) ;
992 }
else if ( ! strcmp( pt_1,
"zero" ) ) {
993 v_zero = atof( pt_2 ) ;
996 }
else if ( ! strcmp( pt_1,
"struct" ) ) {
997 strncpy( v_struct_desc, pt_2, 40 ) ;
998 bool_struct_desc =
VRAI;
1000 }
else if ( ! strcmp( pt_1,
"aut" ) ) {
1001 strncpy( v_aut_name, pt_2, 40 ) ;
1002 bool_aut_name =
VRAI;
1004 }
else if ( !strcmp( pt_1,
"transparent" ) ) {
1005 strcpy( transstr, pt_2 );
1006 bool_transparent =
VRAI;
1009 if( is_deprecated( pt_1 ) ){
1011 fprintf(stderr,
"\nATTENTION: mot-clef %s obsolete !\n", pt_1 ) ;
1012 if( !strcmp( pt_1,
"fac_t" ) ){
1013 v_fac_t = atof( pt_2 );
1018 fprintf(stderr,
"\nATTENTION: mot-clef %s non reconnu !\n", pt_1 );
1020 "\nATTENTION: mot-clef %s non reconnu !\n", pt_1 ) ;
1027 if ( bool_transparent ) {
1028 if ( strlen(transstr) != 2*
Data_Size[v_type] ) {
1029 fprintf(stderr,
"ATTENTION: ignoring invalid transparent value !\n");
1033 v = (
char *)(v_transparent = calloc(
Data_Size[v_type], 1 ));
1034 for (
int i=0; i<
Data_Size[v_type]; i++ ) {
1035 s[0] = transstr[i*2];
1036 s[1] = transstr[i*2+1];
1037 v[i] = strtol( s, &p, 16 );
1043 if ( !bool_x || !bool_y || !bool_type ) {
1045 fprintf(stderr,
"\nERREUR x, y ou type non definis\n") ;
1053 float dim_x = v_inc_x * v_x ;
1054 if ( dim_x != v_dim_x ) {
1056 fprintf(stderr,
"\nATTENTION:\n") ;
1058 "conflit entre x (%d) * inc_x (%.12g) = %.12g et dim_x (%.12g)\n",
1059 v_x, v_inc_x, dim_x, v_dim_x) ;
1062 "conflit entre x (%d) * inc_x (%.12g) = %.12g et dim_x (%.12g)\n",
1063 v_x, v_inc_x, dim_x, v_dim_x) ;
1067 v_inc_x = v_dim_x / v_x ;
1071 v_dim_x = v_x * v_inc_x ;
1072 if ( bool_inc_x ) bool_dim_x =
VRAI;
1077 float dim_y = v_inc_y * v_y ;
1078 if ( dim_y != v_dim_y ) {
1080 fprintf(stderr,
"\nATTENTION:\n") ;
1082 "conflit entre y (%d) * inc_y (%.12g) = %.12g et dim_y (%.12g)\n",
1083 v_y, v_inc_y, dim_y, v_dim_y) ;
1086 "conflit entre y (%d) * inc_y (%.12g) = %.12g et dim_y (%.12g)\n",
1087 v_y, v_inc_y, dim_y, v_dim_y) ;
1091 v_inc_y = v_dim_y / v_y ;
1095 v_dim_y = v_y * v_inc_y ;
1096 if ( bool_inc_y ) bool_dim_y =
VRAI;
1101 float dim_z = v_inc_z * v_z ;
1102 if ( dim_z != v_dim_z ) {
1104 fprintf(stderr,
"\nATTENTION:\n") ;
1106 "conflit entre z (%d) * inc_z (%.12g) = %.12g et dim_z (%.12g)\n",
1107 v_z, v_inc_z, dim_z, v_dim_z) ;
1110 "conflit entre z (%d) * inc_z (%.12g) = %.12g et dim_z (%.12g)\n",
1111 v_z, v_inc_z, dim_z, v_dim_z) ;
1115 v_inc_z = v_dim_z / v_z ;
1119 v_dim_z = v_z * v_inc_z ;
1120 if ( bool_inc_z ) bool_dim_z =
VRAI;
1123 if( !bool_inc_t && bool_fac_t ) {
1129 float dim_t = v_inc_t * (v_t-1) ;
1130 if ( fabs(dim_t - v_dim_t) > v_inc_t ) {
1132 fprintf(stderr,
"\nATTENTION:\n") ;
1134 "conflit entre t (%d) * inc_t (%.12g) = %.12g et dim_t (%.12g)\n",
1135 v_t, v_inc_t, dim_t, v_dim_t) ;
1138 "conflit entre t (%d) * inc_t (%.12g) = %.12g et dim_t (%.12g)\n",
1139 v_t, v_inc_t, dim_t, v_dim_t) ;
1143 v_inc_t = v_dim_t / (v_t - 1) ;
1147 v_dim_t = (v_t-1) * v_inc_t ;
1152 if ( bool_taille ) {
1156 "\nERREUR taille redefinie pour type autre que structure\n") ;
1158 "\nERREUR taille redefinie pour type autre que structure\n") ;
1165 "\nERREUR taille non definie pour type structure\n") ;
1167 "\nERREUR taille non definie pour type structure\n") ;
1174 if (tell(file)!=1024) {
1175 fseek(file, 1024, SEEK_SET);
1178 "\nATTENTION: etiquette de grandeur non-standard: %ld \n", tell(file));
1181 "\nATTENTION: etiquette de grandeur non-standard \n");
1185 "\nHeader_Read: Etiquette lue sans problemes\n");
1189 v_vect_z = (
float *)malloc(v_z*
sizeof(
float));
1190 fread(v_vect_z,
sizeof(
float), v_z, file);
1202 int i = 0, n_lignes = 0;
1204 if ( ligne == NULL ) {
1205 while ( v_comment[n_lignes] != NULL )
1206 free( v_comment[n_lignes++] );
1210 while (v_comment[i++]!=NULL) n_lignes++;
1211 v_comment = (
char **)realloc(v_comment, (n_lignes+2)*
sizeof(
char *));
1213 v_comment[n_lignes] = (
char *)malloc(strlen(ligne)+1) ;
1214 strcpy(v_comment[n_lignes++], ligne) ;
1215 v_comment[n_lignes] = NULL;
1216 bool_comment =
true;
1254 cerr <<
"illegal data type specified for IGB header" << endl;
1261 long IGBheader::tell( FILE *f )
1267 int IGBheader::puts_fcn( FILE* f,
char* s )
1280 if ( data_size()==1 || v_type==
IGB_RGBA )
1283 unsigned char *bp = (
unsigned char *)data;
1284 int ds = data_size()/num_components();
1286 if ( nd<0 ) nd = v_x*v_y*v_z*v_t;
1288 nd *= num_components();
1292 for (
int i=0; i<nd; i++ ) {
1293 unsigned char tmpb = bp[0];
1300 for (
int i=0; i<nd; i++ ) {
1301 unsigned char tmpb = bp[0];
1311 for (
int i=0; i<nd; i++ ) {
1312 unsigned char tmpb = bp[0];
1336 *pval = (
unsigned char *)(&val);
1338 assert(
sizeof(
float) == 4 );
1340 if ( *pval == le_val[0] )
const char * Header_Type[]
unsigned short Data_Size[]
const char * deprecated[]
int my_fputs(FILE *, char *)
long unsigned Header_Systeme_No[]
const char * Header_Systeme[]