void write_result(DATA *data, SUMMARY *summary) { chdir("RESULT"); write_interactions(data, summary); write_unique_interactions(data, summary); /* write_prey(data, summary); write_IP(data, summary); write_bait(data, summary); write_hyperprior(data, summary); */ write_matrix_data(data, summary); /* write_matrix_data2(data, summary); */ chdir(".."); }
int write_host_data(MatrixFile *mptr, int matnum, MatrixData *data) { struct MatDir matdir, dir_entry ; Image_subheader *imagesub ; int status, blkno, nblks ; matrix_errno = MAT_OK; matrix_errtxt[0] = '\0'; status = OK ; nblks = (data->data_size+511)/512; if (matrix_find(mptr, matnum, &matdir) == ERROR) { blkno = mat_enter(mptr->fptr, mptr->mhptr, matnum, nblks) ; if( blkno == ERROR ) return( ERROR ); dir_entry.matnum = matnum ; dir_entry.strtblk = blkno ; /*le 24 Avril 2001, j'ai enleve le -1*/ dir_entry.endblk = dir_entry.strtblk + nblks /*- 1*/ ; dir_entry.matstat = 1 ; insert_mdir(dir_entry, mptr->dirlist) ; matdir = dir_entry ; } imagesub = (Image_subheader *) data->shptr ; if (imagesub == NULL) { imagesub = (Image_subheader *) calloc(1, MatBLKSIZE); data->shptr = imagesub; } /* use MatrixData info */ imagesub->x_pixel_size = data->pixel_size; imagesub->y_pixel_size = data->y_size; imagesub->z_pixel_size = data->z_size; imagesub->num_dimensions = 3; imagesub->x_dimension = data->xdim; imagesub->y_dimension = data->ydim; imagesub->z_dimension = data->zdim; imagesub->image_max = (int)(data->data_max/data->scale_factor); imagesub->image_min = (int)(data->data_min/data->scale_factor); imagesub->scale_factor = data->scale_factor; imagesub->data_type = data->data_type; if( mat_write_image_subheader(mptr->fptr,mptr->mhptr,matdir.strtblk, imagesub) == ERROR ) return( ERROR ); status = write_matrix_data(mptr->fptr, matdir.strtblk+1, nblks, data->data_ptr, imagesub->data_type) ; if( status == ERROR ) return( ERROR ); return(status) ; }
FILE *mat_create(const char *fname,Main_header *mhead) { FILE *fptr; int bufr[MatBLKSIZE/sizeof(int)]; int ret; fptr = mat_open( fname, "w+"); if (!fptr) return( NULL ); ret = mat_write_main_header( fptr, mhead ); if( ret != 0 ) { mat_close( fptr); return( NULL ); } memset(bufr,0,MatBLKSIZE); bufr[0] = 31; bufr[1] = 2; ret = write_matrix_data(fptr,MatFirstDirBlk,1,(char*)bufr,SunLong); if( ret != 0 ) { mat_close( fptr); return( NULL ); } return (fptr); }
int mat_enter(FILE *fptr, Main_header *mhptr, int matnum, int nblks) { int dirblk, dirbufr[128], i, nxtblk, busy, oldsize; matrix_errno = MAT_OK; matrix_errtxt[0] = '\0'; dirblk = MatFirstDirBlk; if( fseek(fptr, 0, 0) ) return( ERROR ); /* * nfs locks are very time consuming lockf( fileno(fptr), F_LOCK, 0); */ if (read_matrix_data(fptr, dirblk, 1, (char *) dirbufr, SunLong) == ERROR) return (ERROR); busy = 1; while (busy) { nxtblk = dirblk + 1; for (i = 4; i < 128; i += 4) { if (dirbufr[i] == 0) { busy = 0; break; } else if (dirbufr[i] == matnum) { oldsize = dirbufr[i + 2] - dirbufr[i + 1] + 1; if (oldsize < nblks) { dirbufr[i] = 0xFFFFFFFF; write_matrix_data(fptr, dirblk, 1, (char*)dirbufr, SunLong); nxtblk = dirbufr[i + 2] + 1; } else { nxtblk = dirbufr[i + 1]; dirbufr[0]++; dirbufr[3]--; busy = 0; break; } } else { nxtblk = dirbufr[i + 2] + 1; } } if (!busy) break; if (dirbufr[1] != MatFirstDirBlk) { dirblk = dirbufr[1]; if (read_matrix_data(fptr, dirblk, 1, (char *) dirbufr, SunLong) == ERROR) return (ERROR); } else { dirbufr[1] = nxtblk; if (write_matrix_data(fptr, dirblk, 1, (char *) dirbufr, SunLong) == ERROR) return (ERROR); dirbufr[0] = 31; dirbufr[1] = MatFirstDirBlk; dirbufr[2] = dirblk; dirbufr[3] = 0; dirblk = nxtblk; for (i = 4; i < 128; i++) dirbufr[i] = 0; } } dirbufr[i] = matnum; dirbufr[i + 1] = nxtblk; dirbufr[i + 2] = nxtblk + nblks; dirbufr[i + 3] = 1; dirbufr[0]--; dirbufr[3]++; if (write_matrix_data(fptr, dirblk, 1, (char*)dirbufr, SunLong) == ERROR) return (ERROR); if( fseek(fptr, 0, 0) ) return( ERROR ); /* * nfs locks are very time consuming lockf( fileno(fptr), F_UNLOCK, 0); */ return (nxtblk); }