34 #define MOT_CLEF_INV 2 35 #define GRANDEUR_INV 4 227 #define MAXL 80 // Longueur maximale d'une ligne d'entete */ 228 #define N_MAX_ITEMS 30 // Nombre maximal d'items optionnels */ 229 #define L_MAX_ITEM 49 // Longueur maximale pour un item 245 "",
"byte",
"char",
"short",
"long",
"float",
"double",
"complex",
246 "double_complex",
"rgba",
"structure",
"pointer",
"list",
"int",
"uint",
248 "vec3f",
"vec3d",
"vec4f",
"vec4d",
"hfloat",
"vec9f",
"vec9d" 254 "fac_x",
"fac_y",
"fac_z",
"fac_t" 260 0,
sizeof(
Byte),
sizeof(
char),
sizeof(short),
sizeof(
long),
sizeof(float),
261 sizeof(
double), 0, 0, 0, 0,
sizeof(
void *), 0,
sizeof(
int),
sizeof(
UInt),
262 sizeof(
unsigned short),
263 3*
sizeof(float), 3*
sizeof(
double), 4*
sizeof(float), 4*
sizeof(
double),
264 sizeof(
short_float), 9*
sizeof(
float), 9*
sizeof(double)
271 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 3, 3, 4, 4, 1, 9, 9
291 is_deprecated(
char *s ) {
298 #define MAKE_CONSISTENT( D ) \ 299 if( bool_dim_##D && bool_inc_##D && bool_##D ) \ 300 if( !almost_equal(v_dim_##D, v_inc_##D * (v_##D-1) ) ) { \ 301 fprintf( stderr, "Adjusting dim_%s to make dimensions consistent\n", #D ); \ 302 v_dim_##D = v_inc_##D * (v_##D-1);\ 351 cerr<<
"\nERREUR: descripteur de fichier nul\n";
358 cerr<<
"\nHeader_Write: type inconnu: "<< v_type;
367 cerr <<
"\nHeader_Write: taille invalide:" << v_taille << endl;
373 if (v_trame<MIN_TRAME || v_trame>
MAX_TRAME) {
375 fprintf(stderr,
"\nHeader_Write: trame inconnue: %d\n", v_trame);
389 snprintf(ligne,
sizeof ligne,
"x:%zu y:%zu z:%zu t:%zu type:%s systeme:%s ",
390 v_x, v_y, v_z, v_t, type, systemestr());
392 snprintf(ligne,
sizeof ligne,
"x:%zu y:%zu t:%zu type:%s systeme:%s ",
393 v_x, v_y, v_t, type, systemestr());
397 snprintf(ligne,
sizeof ligne,
"x:%zu y:%zu z:%zu type:%s systeme:%s ",
398 v_x, v_y, v_z, type, systemestr());
400 snprintf(ligne,
sizeof ligne,
"x:%zu y:%zu type:%s systeme:%s ",
401 v_x, v_y, type, systemestr());
404 int n_car = strlen(ligne);
415 snprintf(&items[n_items][0],
L_MAX_ITEM,
"taille:%d ", v_taille);
416 l_item[n_items] = strlen(&items[n_items][0]);
420 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_x:%g ", v_org_x);
421 l_item[n_items] = strlen(&items[n_items][0]);
425 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_y:%g ", v_org_y);
426 l_item[n_items] = strlen(&items[n_items][0]);
430 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_z:%g ", v_org_z);
431 l_item[n_items] = strlen(&items[n_items][0]);
435 snprintf(&items[n_items][0],
L_MAX_ITEM,
"org_t:%g ", v_org_t);
436 l_item[n_items] = strlen(&items[n_items][0]);
440 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_x:%g ", v_dim_x);
441 l_item[n_items] = strlen(&items[n_items][0]);
445 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_x:%g ", v_inc_x);
446 l_item[n_items] = strlen(&items[n_items][0]);
450 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_y:%g ", v_dim_y);
451 l_item[n_items] = strlen(&items[n_items][0]);
455 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_y:%g ", v_inc_y);
456 l_item[n_items] = strlen(&items[n_items][0]);
460 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_z:%g ", v_dim_z);
461 l_item[n_items] = strlen(&items[n_items][0]);
465 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_z:%g ", v_inc_z);
466 l_item[n_items] = strlen(&items[n_items][0]);
470 snprintf(&items[n_items][0],
L_MAX_ITEM,
"dim_t:%g ", v_dim_t);
471 l_item[n_items] = strlen(&items[n_items][0]);
475 snprintf(&items[n_items][0],
L_MAX_ITEM,
"inc_t:%g ", v_inc_t);
476 l_item[n_items] = strlen(&items[n_items][0]);
480 snprintf(&items[n_items][0],
L_MAX_ITEM,
"vect_z:1 ");
481 l_item[n_items] = strlen(&items[n_items][0]);
485 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_x:%.40s ", v_unites_x);
486 l_item[n_items] = strlen(&items[n_items][0]);
490 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_y:%.40s ", v_unites_y);
491 l_item[n_items] = strlen(&items[n_items][0]);
495 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_z:%.40s ", v_unites_z);
496 l_item[n_items] = strlen(&items[n_items][0]);
500 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites_t:%.40s ", v_unites_t);
501 l_item[n_items] = strlen(&items[n_items][0]);
505 snprintf(&items[n_items][0],
L_MAX_ITEM,
"num:%d ", v_num);
506 l_item[n_items] = strlen(&items[n_items][0]);
510 snprintf(&items[n_items][0],
L_MAX_ITEM,
"bin:%d ", v_bin);
511 l_item[n_items] = strlen(&items[n_items][0]);
517 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:c8 ");
520 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:c4 ");
523 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hex ");
526 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hexedges ");
529 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hexbridges ");
532 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hexlines ");
535 snprintf(&items[n_items][0],
L_MAX_ITEM,
"trame:hex2 ");
538 l_item[n_items] = strlen(&items[n_items][0]);
542 snprintf(&items[n_items][0],
L_MAX_ITEM,
"lut:%d ", v_lut);
543 l_item[n_items] = strlen(&items[n_items][0]);
547 snprintf(&items[n_items][0],
L_MAX_ITEM,
"comp:%d ", v_comp);
548 l_item[n_items] = strlen(&items[n_items][0]);
552 snprintf(&items[n_items][0],
L_MAX_ITEM,
"epais:%g ", v_epais);
553 l_item[n_items] = strlen(&items[n_items][0]);
557 snprintf(&items[n_items][0],
L_MAX_ITEM,
"unites:%.40s ", v_unites);
558 l_item[n_items] = strlen(&items[n_items][0]);
562 snprintf(&items[n_items][0],
L_MAX_ITEM,
"facteur:%g ", v_facteur);
563 l_item[n_items] = strlen(&items[n_items][0]);
567 snprintf(&items[n_items][0],
L_MAX_ITEM,
"zero:%g ", v_zero);
568 l_item[n_items] = strlen(&items[n_items][0]);
571 if ( v_transparent != NULL ) {
572 char *p=(
char *)v_transparent, value[
MAXL];
575 snprintf( value+a*2,
MAXL,
"%0.2x", *(p++) );
576 value[2*Data_Size[v_type]] =
'\0';
577 snprintf(&items[n_items][0],
L_MAX_ITEM,
"transparent:%s ", value );
578 l_item[n_items] = strlen(&items[n_items][0]);
581 if (bool_struct_desc) {
582 snprintf(&items[n_items][0],
L_MAX_ITEM,
"struct:%.40s ", v_struct_desc);
583 l_item[n_items] = strlen(&items[n_items][0]);
587 snprintf(&items[n_items][0],
L_MAX_ITEM,
"aut:%.40s ", v_aut_name);
588 l_item[n_items] = strlen(&items[n_items][0]);
596 while (*comment != NULL) {
598 n_car_total += strlen(*comment++) + 3;
605 for (
int i=0;i<n_items;i++) {
606 if (n_car+l_item[i]<71) {
607 strcat(ligne, &items[i][0]);
610 ligne[n_car++] =
'\r';
611 ligne[n_car++] =
'\n';
612 ligne[n_car] =
'\000';
613 n_car_total += n_car;
614 if (puts_fcn( ligne)==-1) {
616 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
618 fprintf(stderr,
"\n");
623 strcpy(ligne, &items[i][0]);
632 ligne[n_car++] =
'\r';
633 ligne[n_car++] =
'\n';
634 ligne[n_car] =
'\000';
635 n_car_total += n_car;
636 if (puts_fcn( ligne )==-1) {
638 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
640 fprintf(stderr,
"\n");
651 int n_blocs = 1 + (n_car_total-1)/1024;
652 int n_car_sup = n_blocs*1024 - n_car_total;
655 n_lig_sup = 1 + (n_car_sup-1)/72;
659 int n_car_dl = 1 + (n_car_sup-1)%72;
666 while (*comment != NULL) {
668 n_car = gzprintf((gzFile)file,
"#%.80s\r\n", *comment++);
670 n_car = fprintf((FILE*)file,
"#%.80s\r\n", *comment++);
673 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
675 fprintf(stderr,
"\n");
686 for (
int i=0;i<70;i++) ligne[i] =
' ';
690 for (
int i=0;i<n_lig_sup-1;i++) {
691 if (puts_fcn( ligne)==-1) {
693 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
695 fprintf(stderr,
"\n");
705 for (
int i=0;i<n_car_dl-2;i++) ligne[i] =
' ';
706 if (n_car_dl>2) ligne[n_car_dl-3] =
'\r';
707 if (n_car_dl>1) ligne[n_car_dl-2] =
'\n';
708 ligne[n_car_dl-1] =
FF;
709 ligne[n_car_dl] =
'\000';
710 if (puts_fcn( ligne )==-1) {
712 fprintf(stderr,
"\nHeader_Write: Erreur a l'ecriture \n");
714 fprintf(stderr,
"\n");
720 if (n_car_total>1024) {
723 "\nHeader_Write ATTENTION: etiquette de grandeur non-standard \n");
725 "\nHeader_Write ATTENTION: etiquette de grandeur non-standard \n");
729 "\nHeader_Write: Entete transcrite sans problemes\n");
764 bool bool_fac_t =
false;
769 for (
int s=8; (s>0 || nosup) && go; s-- ) {
773 if( tell()<0 )
return 2;
781 "\nERREUR ligne trop longue (>80) dans l'entete !\n" ) ;
783 "\nERREUR ligne trop longue (>80) dans l'entete !\n" ) ;
788 in = get_character() ;
794 "\nERREUR Fin de fichier dans l'entete !\n" ) ;
796 "\nERREUR Fin de fichier dans l'entete !\n" ) ;
801 else if ( in ==
FF ) {
808 else if ( in ==
CR ) {
810 }
else if ( in ==
LF ) {
816 else if ( in && ! isprint(in) ) {
819 "\nERREUR caract. non imprim. 0x%.2X dans " 820 "l'entete at byte number %ld\n", in, tell() );
822 "\nERREUR caract. non imprim. 0x%.2X dans l'entete !\n", in );
825 str[i++] = (char) in ;
831 for (
char* pt_1=str; *pt_1; pt_1++ ) {
834 if ( *pt_1 ==
'*' || *pt_1 ==
'#') {
836 v_comment[com] = (
char *)malloc( strlen(pt_1+1) + 1 ) ;
837 strcpy( v_comment[com++], pt_1+1 ) ;
839 v_comment = (
char **)
840 realloc(v_comment, (com+
NALLOC)*
sizeof(
char *));
841 v_comment[com] = NULL ;
849 if (isupper(*pt_1)) *pt_1 = tolower( *pt_1 ) ;
855 for (
char *pt_1=strtok(str,
" ,;\t"); pt_1; pt_1=strtok(NULL,
" ,;\t") ) {
861 for ( pt_2 = pt_1; *pt_2 !=
':'; pt_2 ++ )
865 "\nERREUR de syntaxe dans l'entete (%s)\n", pt_1);
867 "\nERREUR de syntaxe dans l'entete (%s)\n", pt_1);
874 if ( ! strcmp( pt_1,
"x" ) ) {
875 v_x = strtoul(pt_2, NULL, 10);
878 }
else if ( ! strcmp( pt_1,
"y" ) ) {
879 v_y = strtoul(pt_2, NULL, 10) ;
882 }
else if ( ! strcmp( pt_1,
"z" ) ) {
883 v_z = strtoul(pt_2, NULL, 10) ;
886 }
else if ( ! strcmp( pt_1,
"t" ) ) {
887 v_t = strtoul(pt_2, NULL, 10) ;
891 }
else if ( ! strcmp( pt_1,
"sup" ) ) {
895 }
else if ( ! strcmp( pt_1,
"type" ) ) {
903 }
else if ( ! strcmp( pt_1,
"taille" ) ) {
904 v_taille = atoi( pt_2 ) ;
907 }
else if ( ! strcmp( pt_1,
"systeme" ) ) {
916 }
else if ( ! strcmp( pt_1,
"bin" ) ) {
917 v_bin = atoi( pt_2 ) ;
920 }
else if ( ! strcmp( pt_1,
"trame" ) ) {
922 if ( ! strcmp( pt_2,
"c8" ) ) {
924 }
else if ( ! strcmp( pt_2,
"c4" ) ) {
926 }
else if ( ! strcmp( pt_2,
"hex" ) ) {
928 }
else if ( ! strcmp( pt_2,
"hexedges" ) ) {
930 }
else if ( ! strcmp( pt_2,
"hexbridges" ) ) {
932 }
else if ( ! strcmp( pt_2,
"hexlines" ) ) {
934 }
else if ( ! strcmp( pt_2,
"hex2" ) ) {
939 }
else if ( ! strcmp( pt_1,
"num" ) ) {
940 v_num = atoi( pt_2 ) ;
943 }
else if ( ! strcmp( pt_1,
"comp" ) ) {
944 v_comp = atoi( pt_2 ) ;
947 }
else if ( ! strcmp( pt_1,
"lut" ) ) {
948 v_lut = atoi( pt_2 ) ;
951 }
else if ( ! strcmp( pt_1,
"dim_x" ) ) {
952 v_dim_x = atof( pt_2 ) ;
955 }
else if ( ! strcmp( pt_1,
"dim_y" ) ) {
956 v_dim_y = atof( pt_2 ) ;
959 }
else if ( ! strcmp( pt_1,
"dim_z" ) ) {
960 v_dim_z = atof( pt_2 ) ;
963 }
else if ( ! strcmp( pt_1,
"dim_t" ) ) {
964 v_dim_t = atof( pt_2 ) ;
967 }
else if ( ! strcmp( pt_1,
"inc_x" ) ) {
968 v_inc_x = atof( pt_2 ) ;
971 }
else if ( ! strcmp( pt_1,
"inc_y" ) ) {
972 v_inc_y = atof( pt_2 ) ;
975 }
else if ( ! strcmp( pt_1,
"inc_z" ) ) {
976 v_inc_z = atof( pt_2 ) ;
979 }
else if ( ! strcmp( pt_1,
"inc_t" ) ) {
980 v_inc_t = atof( pt_2 ) ;
983 }
else if ( ! strcmp( pt_1,
"org_x" ) ) {
984 v_org_x = atof( pt_2 ) ;
987 }
else if ( ! strcmp( pt_1,
"org_y" ) ) {
988 v_org_y = atof( pt_2 ) ;
991 }
else if ( ! strcmp( pt_1,
"org_z" ) ) {
992 v_org_z = atof( pt_2 ) ;
995 }
else if ( ! strcmp( pt_1,
"org_t" ) ) {
996 v_org_t = atof( pt_2 ) ;
999 }
else if ( ! strcmp( pt_1,
"vect_z" ) ) {
1002 }
else if ( ! strcmp( pt_1,
"unites_x" ) ) {
1003 strncpy( v_unites_x, pt_2, 40 ) ;
1004 bool_unites_x =
VRAI;
1006 }
else if ( ! strcmp( pt_1,
"unites_y" ) ) {
1007 strncpy( v_unites_y, pt_2, 40 ) ;
1008 bool_unites_y =
VRAI;
1010 }
else if ( ! strcmp( pt_1,
"unites_z" ) ) {
1011 strncpy( v_unites_z, pt_2, 40 ) ;
1012 bool_unites_z =
VRAI;
1014 }
else if ( ! strcmp( pt_1,
"unites_t" ) ) {
1015 strncpy( v_unites_t, pt_2, 40 ) ;
1016 bool_unites_t =
VRAI;
1018 }
else if ( ! strcmp( pt_1,
"epais" ) ) {
1019 v_epais = atof( pt_2 ) ;
1022 }
else if ( ! strcmp( pt_1,
"unites" ) ) {
1023 strncpy( v_unites, pt_2, 40 ) ;
1026 }
else if ( ! strcmp( pt_1,
"facteur" ) ) {
1027 v_facteur = atof( pt_2 ) ;
1028 bool_facteur =
VRAI;
1030 }
else if ( ! strcmp( pt_1,
"zero" ) ) {
1031 v_zero = atof( pt_2 ) ;
1034 }
else if ( ! strcmp( pt_1,
"struct" ) ) {
1035 strncpy( v_struct_desc, pt_2, 40 ) ;
1036 bool_struct_desc =
VRAI;
1038 }
else if ( ! strcmp( pt_1,
"aut" ) ) {
1039 strncpy( v_aut_name, pt_2, 40 ) ;
1040 bool_aut_name =
VRAI;
1042 }
else if ( !strcmp( pt_1,
"transparent" ) ) {
1043 strcpy( transstr, pt_2 );
1044 bool_transparent =
VRAI;
1047 if( is_deprecated( pt_1 ) ){
1049 fprintf(stderr,
"\nATTENTION: mot-clef %s obsolete !\n", pt_1 ) ;
1050 if( !strcmp( pt_1,
"fac_t" ) ){
1051 v_fac_t = atof( pt_2 );
1056 fprintf(stderr,
"\nATTENTION: mot-clef %s non reconnu !\n", pt_1 );
1058 "\nATTENTION: mot-clef %s non reconnu !\n", pt_1 ) ;
1065 if ( bool_transparent ) {
1066 if ( strlen(transstr) != 2*
Data_Size[v_type] ) {
1067 fprintf(stderr,
"ATTENTION: ignoring invalid transparent value !\n");
1071 v = (
char *)(v_transparent = calloc(
Data_Size[v_type], 1 ));
1072 for (
int i=0; i<
Data_Size[v_type]; i++ ) {
1073 s[0] = transstr[i*2];
1074 s[1] = transstr[i*2+1];
1075 v[i] = strtol( s, &p, 16 );
1081 if ( !bool_x || !bool_y || !bool_type ) {
1083 fprintf(stderr,
"\nERREUR x, y ou type non definis\n") ;
1091 float dim_x = v_inc_x * v_x ;
1094 fprintf(stderr,
"\nATTENTION:\n") ;
1096 "conflit entre x (%zu) * inc_x (%.12g) = %.12g et dim_x (%.12g)\n",
1097 v_x, v_inc_x, dim_x, v_dim_x) ;
1100 "conflit entre x (%zu) * inc_x (%.12g) = %.12g et dim_x (%.12g)\n",
1101 v_x, v_inc_x, dim_x, v_dim_x) ;
1105 v_inc_x = v_dim_x / v_x ;
1109 v_dim_x = v_x * v_inc_x ;
1110 if ( bool_inc_x ) bool_dim_x =
VRAI;
1115 float dim_y = v_inc_y * v_y ;
1118 fprintf(stderr,
"\nATTENTION:\n") ;
1120 "conflit entre y (%zu) * inc_y (%.12g) = %.12g et dim_y (%.12g)\n",
1121 v_y, v_inc_y, dim_y, v_dim_y) ;
1124 "conflit entre y (%zu) * inc_y (%.12g) = %.12g et dim_y (%.12g)\n",
1125 v_y, v_inc_y, dim_y, v_dim_y) ;
1129 v_inc_y = v_dim_y / v_y ;
1133 v_dim_y = v_y * v_inc_y ;
1134 if ( bool_inc_y ) bool_dim_y =
VRAI;
1139 float dim_z = v_inc_z * v_z ;
1142 fprintf(stderr,
"\nATTENTION:\n") ;
1144 "conflit entre z (%zu) * inc_z (%.12g) = %.12g et dim_z (%.12g)\n",
1145 v_z, v_inc_z, dim_z, v_dim_z) ;
1148 "conflit entre z (%zu) * inc_z (%.12g) = %.12g et dim_z (%.12g)\n",
1149 v_z, v_inc_z, dim_z, v_dim_z) ;
1153 v_inc_z = v_dim_z / v_z ;
1157 v_dim_z = v_z * v_inc_z ;
1158 if ( bool_inc_z ) bool_dim_z =
VRAI;
1161 if( !bool_inc_t && bool_fac_t ) {
1167 float dim_t = v_inc_t * (v_t-1) ;
1170 fprintf(stderr,
"\nATTENTION:\n") ;
1172 "conflit entre t (%zu) * inc_t (%.12g) = %.12g et dim_t (%.12g)\n",
1173 v_t, v_inc_t, dim_t, v_dim_t) ;
1176 "conflit entre t (%zu) * inc_t (%.12g) = %.12g et dim_t (%.12g)\n",
1177 v_t, v_inc_t, dim_t, v_dim_t) ;
1182 v_inc_t = v_dim_t / (v_t - 1) ;
1186 v_dim_t = (v_t-1) * v_inc_t ;
1191 if ( bool_taille ) {
1195 "\nERREUR taille redefinie pour type autre que structure\n") ;
1197 "\nERREUR taille redefinie pour type autre que structure\n") ;
1204 "\nERREUR taille non definie pour type structure\n") ;
1206 "\nERREUR taille non definie pour type structure\n") ;
1214 seek( 1024, SEEK_SET );
1217 "\nATTENTION: etiquette de grandeur non-standard: %ld \n", tell());
1220 "\nATTENTION: etiquette de grandeur non-standard \n");
1224 "\nHeader_Read: Etiquette lue sans problemes\n");
1228 v_vect_z = (
float *)malloc(v_z*
sizeof(
float));
1229 read_vz(v_vect_z,
sizeof(
float)*v_z);
1241 const int maxln = 78;
1242 int i = 0, n_lignes = 0;
1244 if ( ligne == NULL ) {
1245 while ( v_comment[n_lignes] != NULL )
1246 free( v_comment[n_lignes++] );
1250 int newlines = (strlen(ligne)+maxln-1)/maxln;
1251 while (v_comment[i++]!=NULL) n_lignes++;
1252 v_comment = (
char **)realloc(v_comment, (n_lignes+newlines+1)*
sizeof(
char *));
1254 for(
int j=0; j<newlines; j++ ){
1255 v_comment[n_lignes] = (
char *)malloc(maxln+2) ;
1256 v_comment[n_lignes][maxln] =
'\0';
1257 strncpy(v_comment[n_lignes++], ligne+j*maxln, maxln);
1259 v_comment[n_lignes] = NULL;
1260 bool_comment =
true;
1298 cerr <<
"illegal data type specified for IGB header" << endl;
1309 return gztell( (gzFile)file );
1314 return ftell( (FILE*)file );
1320 int IGBheader::puts_fcn(
char* s )
1323 gzFile gzf=(gzFile)file;
1324 return gzputs( gzf, s );
1326 FILE *fptr=(FILE *)file;
1327 return fputs( s, fptr );
1339 if ( data_size()==1 || v_type==
IGB_RGBA )
1342 unsigned char *bp = (
unsigned char *)data;
1343 int ds = data_size()/num_components();
1345 if ( nd<0 ) nd = v_x*v_y*v_z*v_t;
1347 nd *= num_components();
1351 for (
int i=0; i<nd; i++ ) {
1352 unsigned char tmpb = bp[0];
1359 for (
int i=0; i<nd; i++ ) {
1360 unsigned char tmpb = bp[0];
1370 for (
int i=0; i<nd; i++ ) {
1371 unsigned char tmpb = bp[0];
1395 *pval = (
unsigned char *)(&val);
1397 assert(
sizeof(
float) == 4 );
1399 if ( *pval == le_val[0] )
1405 int IGBheader::get_character()
1408 return gzgetc( (gzFile)file );
1410 if( file==stdin ) bytes_read++;
1411 return fgetc( (FILE*)file );
1416 int IGBheader::seek(
size_t offset,
int whence)
1419 return gzseek( (gzFile)file, offset, whence );
1421 if( file == stdin ) {
1423 if(whence==SEEK_SET) {
1424 if( offset < bytes_read )
1426 pos = offset - bytes_read;
1427 }
else if(whence==SEEK_CUR)
1431 for(
int i=0; i<pos; i++ ) getchar();
1435 return fseek( (FILE*)file, offset, whence );
1439 int IGBheader::read_vz(
float *vz,
int sz )
1442 return gzread( (gzFile)file, vz, sz );
1445 return fread( vz, sz, 1, (FILE*)file );
1461 s *= slice_sz() * data_size();
1463 return seek( s, SEEK_SET );