Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals

acrwrite.c

Go to the documentation of this file.
00001 /************************************************************************* 00002 * $Id: acrwrite.c,v 1.1 2005/09/09 08:22:21 bellet Exp $ 00003 ************************************************************************** 00004 This software is governed by the CeCILL license under French law and 00005 abiding by the rules of distribution of free software. You can use, 00006 modify and/ or redistribute the software under the terms of the CeCILL 00007 license as circulated by CEA, CNRS and INRIA at the following URL 00008 "http://www.cecill.info". 00009 00010 As a counterpart to the access to the source code and rights to copy, 00011 modify and redistribute granted by the license, users are provided only 00012 with a limited warranty and the software's author, the holder of the 00013 economic rights, and the successive licensors have only limited 00014 liability. 00015 00016 In this respect, the user's attention is drawn to the risks associated 00017 with loading, using, modifying and/or developing or reproducing the 00018 software by the user in light of its specific status of free software, 00019 that may mean that it is complicated to manipulate, and that also 00020 therefore means that it is reserved for developers and experienced 00021 professionals having in-depth computer knowledge. Users are therefore 00022 encouraged to load and test the software's suitability as regards their 00023 requirements in conditions enabling the security of their systems and/or 00024 data to be ensured and, more generally, to use and operate it in the 00025 same conditions as regards security. 00026 00027 The fact that you are presently reading this means that you have had 00028 knowledge of the CeCILL license and that you accept its terms. 00029 00030 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de 00031 l'Image). All rights reserved. See License.txt for details. 00032 00033 Version 1.0 05/09/2005 00034 *************************************************************************/ 00035 00036 /************************************************************************* 00037 * 00038 * Description : Ecrit un objet LIBIDO dans un fichier 00039 * au format ACRNEMA modifie UA1216 00040 * 00041 **************************************************************************/ 00042 #include <stdio.h> 00043 #include <stdlib.h> 00044 #include <string.h> // For strlen 00045 #include <ctype.h> // For isprint 00046 00047 00048 #include "idsig.h" 00049 #include "idcnt.h" 00050 #include "idima.h" 00051 #include "idvol.h" 00052 #include "idseq.h" 00053 #include "idacr.h" 00054 #include "idacr-restricted.h" 00055 #include "iderr.h" 00056 #include "idio.h" 00057 #include "idprint.h" 00058 00059 /* --------------------------------- RAPPELS ------------------------- 00060 00061 00062 #define NO 0 NON ACRNEMA : traitement special pour ecriture 00063 #define BI 1 16 bits 00064 #define BD 2 32 bits 00065 #define AN 3 ASCII numerique 00066 #define AT 4 ASCII texte 00067 00068 typedef struct acr_element { 00069 short int group; 00070 short int number; 00071 uint32_t length; 00072 long int value; pointeur ou valeur(max 32 bits) 00073 struct acr_element *suiv; 00074 int type; 00075 } ACR_ELEMENT; 00076 00077 -------------------------------------------------------------------------- */ 00078 00079 #define DEBUG 0 00080 00081 char *_IdRecCode="ACRNEMA_LIBIDO_1.1"; 00082 // char *Histo=""; 00083 00084 static ACR_ELEMENT *header=0; 00085 00086 00087 /* FUNCTION DESCRIPTION ************************************************** 00088 00089 IdAcrWriteFile (fonction) 00090 00091 RESUME: Ecriture d'un objet libido ds un fichier ACR 00092 00093 DESCRIPTION: 00094 00095 Ecriture d'un objet libido PSIGNAL, PCONTOUR, PPIMAGE, PPPVOLUME ou PPPPSEQUENCE 00096 dans un fichier au format ACR_LibIDO. Si le fichier existait deja, son ancien 00097 contenu est perdu. 00098 00099 SYNTAXE: int retCode = IdAcrWriteFile(char *nomfic,void *obj) 00100 00101 RETOUR: 00102 type : int 00103 role : 1 si pas d'erreur, 0 si erreur 00104 00105 PARAMETRES: 00106 nom : nomfic 00107 type : char * 00108 role : nom du fichier a creer 00109 00110 nom : obj 00111 type : void * (en fait : PSIGNAL, PCONTOUR, PPIMAGE, 00112 PPPVOLUME, PPPPSEQUENCE) 00113 role : pointeur sur l'objet libido a ecrire dans le fichier 00114 00115 FICHIER: WRITEACR.C 00116 00117 ******************************************************** END DESCRIPTION */ 00118 00119 00131 int IdAcrWriteFile(char *nf,void *obj) 00132 //char *nf; /* nom du fichier a creer */ 00133 //void *obj; /* pointeur sur une structure libido 00134 // PSIGNAL PCONTOUR PPIMAGE PPPVOLUME PPPSEQUENCE */ 00135 00136 { 00137 return IdAcrWriteFileExtended(nf,obj,NULL); 00138 /* Oui, je sais... 00139 Il eut ete + efficace de mettre un #define... 00140 Mais ca obligeait tout le Labo de recompiler 00141 TOUS les Sources... 00142 00143 Et puis FROG m'aurait dit qu'il faut mettre une fonction, et pas une macro. 00144 4/12/2000 00145 */ 00146 } 00147 00148 00149 /* FUNCTION DESCRIPTION ************************************************** 00150 00151 IdAcrWriteFileExtended (fonction) 00152 00153 RESUME: Ecriture d'un objet libido ds un fichier ACR avec ajouts d'ACR_ELEMENT 00154 00155 DESCRIPTION: 00156 00157 Ecriture d'un objet libido PSIGNAL, PCONTOUR, PPIMAGE, PPPVOLUME, ou PPPPSEQUENCE 00158 dans un fichier au format ACRNEMA. 00159 Si le fichier existait deja, son ancien 00160 contenu est perdu. 00161 A la liste des ACR_ELEMENT de LibIDO est ajoutee une liste d'ACR_ELEMENT 00162 cree par l'utilisateur, sous son propre controle 00163 --> NOT FOR BOZOS ... 00164 00165 SYNTAXE: int retCode = IdAcrWriteFileExtended(char *nomfic,void *obj, ACR_ELEMENT * liste); 00166 00167 RETOUR: 00168 type : int 00169 role : 1 si pas d'erreur, 0 si erreur 00170 00171 PARAMETRES: 00172 nom : nomfic 00173 type : char * 00174 role : nom du fichier a creer 00175 00176 nom : obj 00177 type : void * (en fait : PSIGNAL, PCONTOUR, PPIMAGE, 00178 PPPVOLUME, PPPPSEQUENCE) 00179 role : pointeur sur l'objet libido a ecrire dans le fichier 00180 00181 nom : listeAAjouter 00182 type : ACR_ELEMENT * 00183 role : liste d'ACR_ELEMENT, 00184 fabriquee par l'utilisateur 00185 qui sera stockee sur disque 00186 en plus des ACR_ELEMENT 00187 de LibIDO 00188 FICHIER: WRITEACR.C 00189 00190 ******************************************************** END DESCRIPTION */ 00191 00204 int IdAcrWriteFileExtended(char *nf, void *obj, ACR_ELEMENT *listeAAjouter) 00205 00206 //char *nf; /* nom du fichier a creer */ 00207 //void *obj; /* pointeur sur une structure libido 00208 // PSIGNAL PCONTOUR PPIMAGE PPPVOLUME PPPPSEQUENCE */ 00209 //ACR_ELEMENT *listeAAjouter; liste d'ACR_ELEMENT, fabriquee par l'utilisateur 00210 // fabriquee par l'utilisateur 00211 // qui sera stockee sur disque 00212 // en plus des ACR_ELEMENT 00213 // de LibIDO 00214 { 00215 FILE *fp,*fphisto; 00216 PSIGNAL sip = NULL; /* FB 20-01-2000 */ 00217 PCONTOUR cop = NULL; /* FB 20-01-2000 */ 00218 PPIMAGE imp = NULL; /* FB 20-01-2000 */ 00219 PPPVOLUME vop = NULL; /* FB 20-01-2000 */ 00220 PPPPSEQUENCE sep = NULL; /* FB 20-01-2000 */ 00221 00222 int i,j,k,ty; 00223 int ndim; 00224 short int sh; 00225 uint32_t i32; 00226 ACR_ELEMENT *p; 00227 // long lo; 00228 int retval=1; 00229 00230 if(obj==NULL) { IdErrPrintf(" writeacr --> Pointeur NULL !!!\n"); 00231 IdErrno=IDERR_POINTER_IS_NULL; 00232 return (0); 00233 } 00234 00235 fphisto=fopen("_t_histo.tmp","r"); 00236 00237 /* lgr du groupe */ 00238 00239 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x0008,0x0000,4,BD,0)); 00240 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x0008,0x0001,4,BD,0)); 00241 header=_IdAcrAddElement(header, 00242 _IdAcrMakeElement(0x0008,0x0010,strlen(_IdRecCode),AT, 00243 (long int)_IdRecCode)); 00244 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x0028,0x0000,4,BD,0)); 00245 00246 if( IdLibidoType(obj)==SIG) { ndim=1; 00247 imp=(PPIMAGE)((void*)(sip=(PSIGNAL)obj)); 00248 } 00249 else if( IdLibidoType(obj)==IMA) { ndim=2; 00250 imp= (PPIMAGE)obj; 00251 } 00252 else if( IdLibidoType(obj)==CNT) { ndim=1; 00253 cop=(PCONTOUR)obj; 00254 imp=(PPIMAGE)obj; 00255 } 00256 else if( IdLibidoType(obj)==VOL) { ndim=3; 00257 imp=(PPIMAGE)(vop=(PPPVOLUME)obj); 00258 } 00259 else if( IdLibidoType(obj)==SEQ) { ndim=4; 00260 sep=(PPPPSEQUENCE)obj; 00261 imp=(PPIMAGE)obj; 00262 } 00263 00264 else {IdErrPrintf("Type d'Objet non traite par IdAcrWriteFile (%04x)!!!\n",IdLibidoType(obj)); 00265 IdErrno=IDERR_WRONG_TYPE; 00266 return (0);} 00267 00268 00269 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x0028,0x0005,2,BI,ndim)); 00270 00271 // Il ne *devrait* plus y avoir Histo nulle part 00272 /* 00273 if(!fphisto) 00274 lo=strlen(Histo); 00275 else 00276 { 00277 fseek(fphisto,0L,2); 00278 lo=ftell(fphisto); 00279 Histo=(char *)calloc(1,(int)lo+2); 00280 fseek(fphisto,0L,0); 00281 fread(Histo,(int)lo,1,fphisto); 00282 } 00283 if(lo & 1){Histo[(int)lo]=' ';lo++;} 00284 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x0028,0x0050,(int)lo,AT, 00285 (long int)Histo)); 00286 */ 00287 00288 00289 /* nb bits alloues */ 00290 header=_IdAcrAddElement(header, 00291 _IdAcrMakeElement(0x0028,0x0100,2,BI,IdSizeOfType(imp)*8)); 00292 00293 /* nb bits utiles */ 00294 header=_IdAcrAddElement(header, 00295 _IdAcrMakeElement(0x0028,0x0101,2,BI,IdSizeOfType(imp)*8)); 00296 00297 /* high bit */ 00298 header=_IdAcrAddElement(header, 00299 _IdAcrMakeElement(0x0028,0x0102,2,BI,IdSizeOfType(imp)*8-1)); 00300 ty=0; 00301 00302 if(IdLibidoDataType(imp)==TY_CHAR) ty=1; 00303 else if(IdLibidoDataType(imp)==TY_SHORT) ty=1; 00304 else if(IdLibidoDataType(imp)==TY_LONG) ty=1; 00305 else if(IdLibidoDataType(imp)==TY_FLOAT) ty=1; 00306 else if(IdLibidoDataType(imp)==TY_DOUBLE) ty=1; 00307 00308 else if(IdLibidoDataType(imp)==TY_COMPLEX_CHAR) ty=1; /* JPR */ 00309 else if(IdLibidoDataType(imp)==TY_COMPLEX_SHORT) ty=1; 00310 else if(IdLibidoDataType(imp)==TY_COMPLEX_LONG) ty=1; 00311 else if(IdLibidoDataType(imp)==TY_COMPLEX_FLOAT) ty=1; 00312 else if(IdLibidoDataType(imp)==TY_COMPLEX_DOUBLE) ty=1; /* JPR */ 00313 00314 00315 /* signe o/n */ 00316 header=_IdAcrAddElement(header, 00317 _IdAcrMakeElement(0x0028,0x0103,2,BI,ty)); 00318 00319 header=_IdAcrAddElement(header, 00320 _IdAcrMakeElement(0x7FE0,0x0000,4,BD,0)); 00321 00322 /* objet de type PSIGNAL */ /* JPR */ 00323 00324 if( IdLibidoType(obj)==SIG) 00325 { 00326 sip=(PSIGNAL )obj; 00327 header=_IdAcrAddElement(header, 00328 _IdAcrMakeElement(0x0028,0x0010,2,BI,IdSigDimX(sip))); 00329 00330 header=_IdAcrAddElement(header, /* JPR */ 00331 _IdAcrMakeElement(0x0028,0x0015,2,BI,IdSigUsedNbX(sip))); 00332 00333 header=_IdAcrAddElement(header, /* JPR */ 00334 _IdAcrMakeElement(0x0028,0x00199,2,BI,((int *)sip)[-1])); 00335 00336 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x7FE0,0x0010, 00337 IdSigDimX(sip)*IdSizeOfType(sip), 00338 NO,(long int)sip)); 00339 if ( _IdCntPrivate(sip)->_message) /* JPR */ 00340 header=_IdAcrAddElement(header, 00341 _IdAcrMakeElement(0x0028,0x0198, strlen(_IdCntPrivate(sip)->_message), AT, (long int)(_IdCntPrivate(sip)->_message))); /*CO 22-02-97 */ 00342 } 00343 00344 /* objet de type PCONTOUR */ /* JPR */ 00345 00346 else if( IdLibidoType(obj)==CNT) 00347 { 00348 00349 cop=(PCONTOUR )obj; 00350 header=_IdAcrAddElement(header, 00351 _IdAcrMakeElement(0x0028,0x0010,2,BI,IdCntDimX(cop))); 00352 00353 /* printf ("IdCntUsedNbX(cop) %x\n",IdCntUsedNbX(cop)); */ 00354 header=_IdAcrAddElement(header, 00355 _IdAcrMakeElement(0x0028,0x0015,2,BI,IdCntUsedNbX(cop))); 00356 00357 header=_IdAcrAddElement(header, 00358 _IdAcrMakeElement(0x0028,0x00199,2,BI,((int *)cop)[-1])); 00359 00360 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x7FE0,0x0010, 00361 IdCntDimX(cop)*IdSizeOfType(cop), 00362 NO,(long int)cop)); 00363 if ( _IdCntPrivate(cop)->_message) /* JPR */ 00364 header=_IdAcrAddElement(header, 00365 _IdAcrMakeElement(0x0028,0x0198, strlen(_IdCntPrivate(cop)->_message), AT, (long int)(_IdCntPrivate(cop)->_message))); /*CO 22-02-97 */ 00366 00367 } 00368 00369 00370 /* objet de type PPIMAGE */ 00371 00372 else if( IdLibidoType(obj)==IMA) 00373 { 00374 imp=(PPIMAGE )obj; 00375 header=_IdAcrAddElement(header, 00376 _IdAcrMakeElement(0x0028,0x0010,2,BI,IdImaDimX(imp))); 00377 header=_IdAcrAddElement(header, 00378 _IdAcrMakeElement(0x0028,0x0011,2,BI,IdImaDimY(imp))); 00379 00380 header=_IdAcrAddElement(header, /* JPR */ 00381 _IdAcrMakeElement(0x0028,0x0015,2,BI,IdImaUsedNbX(imp))); 00382 00383 header=_IdAcrAddElement(header, /* JPR */ 00384 _IdAcrMakeElement(0x0028,0x0016,2,BI,IdImaUsedNbY(imp))); 00385 00386 header=_IdAcrAddElement(header, /* JPR */ 00387 _IdAcrMakeElement(0x0028,0x00199,2,BI,((int *)imp)[-1])); 00388 00389 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x7FE0,0x0010, 00390 IdImaDimX(imp)*IdImaDimY(imp)*IdSizeOfType(imp), 00391 NO,(long int)imp)); 00392 00393 if ( _IdCntPrivate(imp)->_message) /* JPR */ 00394 header=_IdAcrAddElement(header, 00395 _IdAcrMakeElement(0x0028,0x0198, 00396 strlen(_IdCntPrivate(imp)->_message), 00397 AT, 00398 (long int)(_IdCntPrivate(imp)->_message))); /*CO 22-02-97 */ 00399 00400 } 00401 00402 /* objet de type PPPVOLUME */ 00403 00404 else if( IdLibidoType(obj)==VOL) 00405 { 00406 vop=(PPPVOLUME )obj; 00407 header=_IdAcrAddElement(header, 00408 _IdAcrMakeElement(0x0028,0x0010,2,BI,IdVolDimX(vop))); 00409 header=_IdAcrAddElement(header, 00410 _IdAcrMakeElement(0x0028,0x0011,2,BI,IdVolDimY(vop))); 00411 header=_IdAcrAddElement(header, 00412 _IdAcrMakeElement(0x0028,0x0012,2,BI,IdVolDimZ(vop))); 00413 00414 header=_IdAcrAddElement(header, /* JPR */ 00415 _IdAcrMakeElement(0x0028,0x0015,2,BI,IdVolUsedNbX(vop))); 00416 00417 header=_IdAcrAddElement(header, /* JPR */ 00418 _IdAcrMakeElement(0x0028,0x0016,2,BI,IdVolUsedNbY(vop))); 00419 00420 header=_IdAcrAddElement(header, /* JPR */ 00421 _IdAcrMakeElement(0x0028,0x0017,2,BI,IdVolUsedNbZ(vop))); 00422 00423 header=_IdAcrAddElement(header, /* JPR */ 00424 _IdAcrMakeElement(0x0028,0x00199,2,BI,((int *)vop)[-1])); 00425 00426 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x7FE0,0x0010, 00427 IdVolDimZ(vop)*IdVolDimX(vop)*IdVolDimY(vop)* 00428 IdSizeOfType(vop), 00429 NO,(long int)vop)); 00430 00431 if ( _IdCntPrivate(vop)->_message) /* JPR */ 00432 header=_IdAcrAddElement(header, 00433 _IdAcrMakeElement(0x0028,0x0198, 00434 strlen(_IdCntPrivate(vop)->_message), 00435 AT, 00436 (long int)(_IdCntPrivate(vop)->_message))); /*CO 22-02-97 */ 00437 00438 } 00439 00440 else if( IdLibidoType(obj)==SEQ) /* JPR */ 00441 { 00442 sep=(PPPPSEQUENCE )obj; 00443 header=_IdAcrAddElement(header, 00444 _IdAcrMakeElement(0x0028,0x0010,2,BI,IdSeqDimX(sep))); 00445 header=_IdAcrAddElement(header, 00446 _IdAcrMakeElement(0x0028,0x0011,2,BI,IdSeqDimY(sep))); 00447 header=_IdAcrAddElement(header, 00448 _IdAcrMakeElement(0x0028,0x0012,2,BI,IdSeqDimZ(sep))); 00449 header=_IdAcrAddElement(header, 00450 _IdAcrMakeElement(0x0028,0x0013,2,BI,IdSeqDimT(sep))); 00451 00452 header=_IdAcrAddElement(header, 00453 _IdAcrMakeElement(0x0028,0x0015,2,BI,IdSeqUsedNbX(sep))); 00454 00455 header=_IdAcrAddElement(header, 00456 _IdAcrMakeElement(0x0028,0x0016,2,BI,IdSeqUsedNbY(sep))); 00457 00458 header=_IdAcrAddElement(header, 00459 _IdAcrMakeElement(0x0028,0x0017,2,BI,IdSeqUsedNbZ(sep))); 00460 00461 header=_IdAcrAddElement(header, 00462 _IdAcrMakeElement(0x0028,0x0018,2,BI,IdSeqUsedNbT(sep))); 00463 00464 header=_IdAcrAddElement(header, 00465 _IdAcrMakeElement(0x0028,0x00199,2,BI,((int *)sep)[-1])); 00466 00467 header=_IdAcrAddElement(header,_IdAcrMakeElement(0x7FE0,0x0010, 00468 IdSeqDimT(sep)*IdSeqDimZ(sep)*IdSeqDimX(sep)*IdSeqDimY(sep)* 00469 IdSizeOfType(sep), 00470 NO,(long int)sep)); 00471 00472 if ( _IdCntPrivate(sep)->_message) 00473 header=_IdAcrAddElement(header, 00474 _IdAcrMakeElement(0x0028,0x0198, strlen(_IdCntPrivate(sep)->_message), AT, (long int)(_IdCntPrivate(sep)->_message))); 00475 00476 } 00477 00478 /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ 00479 00480 if (listeAAjouter != NULL) /* JPR, pour IdAcrWriteFileExtended */ 00481 { 00482 if (DEBUG) 00483 { 00484 IdPrintf ("header %p listeAAjouter %p\n",header,listeAAjouter); 00485 _IdAcrAffListe(header); 00486 IdPrintf ("\n\n\n"); 00487 _IdAcrAffListe(listeAAjouter); 00488 IdPrintf ("\n\n\n"); 00489 } 00490 00491 header=_IdAcrMergeListes(header,listeAAjouter); 00492 if(!header) 00493 IdPrintf("Gros soucis lors de l'incorporation des ACR_ELEMENT utilisateurs... \n"); 00494 /* _IdAcrFreeListe(listeAAjouter); */ /* C ODET */ 00495 } 00496 00497 /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */ 00498 00499 00500 if (DEBUG) { IdPrintf ("\n\nAvant _IdAcrAdjustLength\n"); 00501 _IdAcrAffListe(header); 00502 IdPrintf ("\n\n\n"); 00503 } 00504 00505 _IdAcrAdjustLength(header); 00506 00507 00508 if (DEBUG) { IdPrintf ("\n\nApres _IdAcrAdjustLength\n"); 00509 _IdAcrAffListe(header); 00510 IdPrintf ("\n\n\n"); 00511 } 00512 00513 if((fp=fopen(nf,ID_WFILE_BIN))!=0) 00514 { 00515 p=header; 00516 while(p) 00517 { 00518 switch(p->type) 00519 { 00520 case BI: 00521 fwrite(p,8,1,fp); 00522 sh=(short int)p->value; 00523 fwrite(&sh,2,1,fp); 00524 00525 if(DEBUG) IdPrintf(" BI element (en %p) %4x,%4x long.=%d valeur ", 00526 p, p->group,p->number,p->length); 00527 if (DEBUG) IdPrintf("%d\n",p->value); 00528 00529 break; 00530 case BD: 00531 fwrite(p,8,1,fp); 00532 i32=p->value; 00533 fwrite(&i32,4,1,fp); 00534 00535 if(DEBUG) IdPrintf(" BD element (en %p) %4x,%4x long.=%d valeur ", 00536 p, p->group,p->number,p->length); 00537 if (DEBUG) IdPrintf("%d\n",p->value); 00538 break; 00539 case AT: 00540 fwrite(p,8,1,fp); 00541 fwrite((char *)(p->value),(size_t)p->length,1,fp); 00542 00543 if(DEBUG) IdPrintf(" AT element (en %p) %4x,%4x long.=%d valeur ", 00544 p, p->group,p->number,p->length); 00545 if (DEBUG) IdPrintf("%s\n",(char *)p->value); 00546 break; 00547 case AN: 00548 fwrite(p,8,1,fp); 00549 fwrite((char *)(p->value),(size_t)p->length,1,fp); 00550 00551 if(DEBUG) IdPrintf(" AN element (en %p) %4x,%4x long.=%d valeur ", 00552 p, p->group,p->number,p->length); 00553 if (DEBUG) IdPrintf("%s\n",(char *)p->value); 00554 00555 break; 00556 case NO: 00557 fwrite(p,8,1,fp); 00558 00559 if(DEBUG) IdPrintf(" NO element (en %p) %4x,%4x long.=%d valeur ", 00560 p, p->group,p->number,p->length); 00561 if (DEBUG) IdPrintf("%x\n",p->value); 00562 00563 00564 switch (IdLibidoType(obj)) /* JPR */ 00565 { 00566 case SIG: 00567 fwrite(sip, 00568 IdSigDimX(sip)*IdSizeOfType(sip),1,fp); 00569 break; 00570 00571 case CNT: 00572 fwrite(cop, 00573 IdCntDimX(cop)*IdSizeOfType(cop),1,fp); 00574 break; 00575 00576 case IMA: 00577 for(i=0;i<IdImaDimY(imp);i++) 00578 fwrite(imp[i], 00579 IdImaDimX(imp)*IdSizeOfType(imp),1,fp); 00580 break; 00581 00582 case VOL: 00583 for(j=0;j<IdVolDimZ(vop);j++) 00584 for(i=0;i<IdVolDimY(vop);i++) 00585 fwrite(vop[j][i], 00586 IdVolDimX(vop)*IdSizeOfType(vop),1,fp); 00587 break; 00588 00589 case SEQ: 00590 for(k=0;k<IdSeqDimT(sep);k++) 00591 for(j=0;j<IdSeqDimZ(sep);j++) 00592 for(i=0;i<IdSeqDimY(sep);i++) 00593 fwrite(sep[k][j][i], 00594 IdVolDimX(sep)*IdSizeOfType(sep),1,fp); 00595 break; 00596 default: 00597 IdPrintf("TypeObj %x non supporte par LibIDO\n",IdLibidoType(obj)); 00598 00599 } 00600 } 00601 p=p->suiv; 00602 } 00603 fclose(fp); 00604 } 00605 00606 else { 00607 IdErrno = IDERR_OPEN_FAILED; 00608 retval = 0; 00609 } 00610 00611 00612 header=_IdAcrFreeListe(header); 00613 00614 /* 00615 if(fphisto) 00616 { 00617 free(Histo); 00618 fclose(fphisto); 00619 } 00620 */ 00621 return(retval); 00622 } 00623 00624 /* FUNCTION DESCRIPTION ************************************************** 00625 00626 IdAcrWriteListeAcr (fonction) 00627 00628 RESUME: Ecriture d'une liste d'ACR_ELEMENT ds un fichier ACR 00629 00630 DESCRIPTION: 00631 00632 Ecriture d'une liste d'ACR_ELEMENT 00633 (creee par l'utilisateur, sous son propre controle --> NOT FOR BOZOS ...) 00634 dans un fichier au format ACRNEMA. 00635 Si le fichier existait deja, son ancien 00636 contenu est perdu. 00637 00638 SYNTAXE: int retCode = IdAcrWriteListeAcr(char *nomfic, ACR_ELEMENT * liste); 00639 00640 RETOUR: 00641 type : int 00642 role : 1 si pas d'erreur, 0 si erreur 00643 00644 PARAMETRES: 00645 nom : nomfic 00646 type : char * 00647 role : nom du fichier a creer 00648 00649 nom : liste 00650 type : ACR_ELEMENT * 00651 role : liste d'ACR_ELEMENT, 00652 fabriquee par l'utilisateur 00653 qui sera stockee sur disque 00654 00655 FICHIER: WRITEACR.C 00656 00657 ******************************************************** END DESCRIPTION */ 00658 00669 int IdAcrWriteListeAcr(char *nf,ACR_ELEMENT *header) 00670 00671 //char *nf; /* nom du fichier a creer */ 00672 //ACR_ELEMENT *header; liste d'ACR_ELEMENT, 00673 // fabriquee par l'utilisateur 00674 // qui sera stockee sur disque 00675 00676 { 00677 FILE *fp; 00678 00679 short int sh; 00680 uint32_t i32; 00681 ACR_ELEMENT *p; 00682 00683 int retval=1; 00684 00685 _IdAcrAdjustLength(header); 00686 00687 if (DEBUG) { IdPrintf ("\n\nApres _IdAcrAdjustLength\n"); 00688 _IdAcrAffListe(header); 00689 IdPrintf ("\n\n\n"); 00690 } 00691 00692 if((fp=fopen(nf,ID_WFILE_BIN))!=0) 00693 { 00694 p=header; 00695 while(p) 00696 { 00697 switch(p->type) 00698 { 00699 case BI: 00700 fwrite(p,8,1,fp); 00701 sh=(short int)p->value; 00702 fwrite(&sh,2,1,fp); 00703 00704 if(DEBUG) IdPrintf(" BI element (en %p) %4x,%4x long.=%d valeur ", 00705 p, p->group,p->number,p->length); 00706 if (DEBUG) IdPrintf("%d\n",p->value); 00707 00708 break; 00709 case BD: 00710 fwrite(p,8,1,fp); 00711 i32=p->value; 00712 fwrite(&i32,4,1,fp); 00713 00714 if(DEBUG) IdPrintf(" BD element (en %p) %4x,%4x long.=%d valeur ", 00715 p, p->group,p->number,p->length); 00716 if (DEBUG) IdPrintf("%d\n",p->value); 00717 break; 00718 case AT: 00719 fwrite(p,8,1,fp); 00720 fwrite((char *)(p->value),(size_t)p->length,1,fp); 00721 00722 if(DEBUG) IdPrintf(" AT element (en %p) %4x,%4x long.=%d valeur ", 00723 p, p->group,p->number,p->length); 00724 if (DEBUG) IdPrintf("%s\n",(char *)p->value); 00725 break; 00726 case AN: 00727 fwrite(p,8,1,fp); 00728 fwrite((char *)(p->value),(size_t)p->length,1,fp); 00729 00730 if(DEBUG) IdPrintf(" AN element (en %p) %4x,%4x long.=%d valeur ", 00731 p, p->group,p->number,p->length); 00732 if (DEBUG) IdPrintf("%s\n",(char *)p->value); 00733 00734 break; 00735 case NO: 00736 fwrite(p,8,1,fp); 00737 fwrite((char *)(p->value),(size_t)p->length,1,fp); 00738 00739 00740 if(DEBUG) IdPrintf(" NO element (en %p) %4x,%4x long.=%d valeur ", 00741 p, p->group,p->number,p->length); 00742 if (DEBUG) IdPrintf("%x\n",p->value); 00743 00744 /* 00745 00746 switch (IdLibidoType(obj)) 00747 { 00748 case SIG: 00749 fwrite(sip, 00750 IdSigDimX(sip)*IdSizeOfType(sip),1,fp); 00751 break; 00752 00753 case CNT: 00754 fwrite(cop, 00755 IdCntDimX(cop)*IdSizeOfType(cop),1,fp); 00756 break; 00757 00758 case IMA: 00759 for(i=0;i<IdImaDimY(imp);i++) 00760 fwrite(imp[i], 00761 IdImaDimX(imp)*IdSizeOfType(imp),1,fp); 00762 break; 00763 00764 case VOL: 00765 for(j=0;j<IdVolDimZ(vop);j++) 00766 for(i=0;i<IdVolDimY(vop);i++) 00767 fwrite(vop[j][i], 00768 IdVolDimX(vop)*IdSizeOfType(vop),1,fp); 00769 break; 00770 00771 case SEQ: 00772 for(k=0;k<IdSeqDimT(sep);k++) 00773 for(j=0;j<IdSeqDimZ(sep);j++) 00774 for(i=0;i<IdSeqDimY(sep);i++) 00775 fwrite(sep[k][j][i], 00776 IdVolDimX(sep)*IdSizeOfType(sep),1,fp); 00777 break; 00778 00779 } 00780 */ 00781 } 00782 p=p->suiv; 00783 } 00784 fclose(fp); 00785 } 00786 00787 else { 00788 IdErrno = IDERR_OPEN_FAILED; 00789 retval = 0; 00790 } 00791 00792 return(retval); 00793 }

Generated on Wed Oct 19 09:28:32 2005 for SIMRI3D by doxygen 1.3.7