/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ! !.func close_frame_fast() ! !.purp closes a currently active 2D frame !.desc ! close_frame(frame) ! ! IMAGE2D *frame; image structure !.ed -------------------------------------------------------------------- */ int close_frame_fast(IMAGE2D *frame) /* close active frame */ { char errtext[132], filename[lg_name+1]; int stat, int_datatype; float cuts[4]; #ifdef IRAF int one=1; #endif #ifdef FITS fitsfile *fptr; int npix; #endif strcpy(filename,frame->name); if (frame->iomode == (int)I_MODE) { switch (frame->data_format) { #ifdef MIDAS case MIDAS_FORMAT : stat = SCFCLO(frame->imno); break; #endif #ifdef IRAF case IRAF_FORMAT : case STSDAS_FORMAT : uimclo(&(frame->imno),&stat); break; #endif #ifdef FITS case FITS_A_FORMAT : case FITS_B_FORMAT : stat =0; fptr = (fitsfile *)frame->external_info; fits_close_file(fptr,&stat); free_frame_mem(frame); frame->external_info = NULL; break; #endif } if (stat) { sprintf(errtext,"close_frame: frame %s",filename); stat = get_tiger_errcode(frame->data_format,stat); Handle_Error(errtext,stat); } return(stat); } /* if (frame->data.d_data != NULL) { image_minmax(frame); cuts[0]=(float)frame->min; cuts[2]=(float)frame->min; cuts[1]=(float)frame->max; cuts[3]=(float)frame->max; stat = WR_desc(frame,"LHCUTS",FLOAT,4,cuts); } */ WR_history(frame, (Anyfile *)0); switch (frame->data_format) { #ifdef MIDAS case MIDAS_FORMAT : stat = SCFCLO(frame->imno); break; #endif #ifdef IRAF case IRAF_FORMAT : case STSDAS_FORMAT : switch(frame->data_type) { case SHORT : uips2s(&(frame->imno),&one,&(frame->nx),&one,&(frame->ny), frame->data.s_data,&stat); break; case INT : case LONG : uips2l(&(frame->imno),&one,&(frame->nx),&one,&(frame->ny), frame->data.l_data,&stat); break; case FLOAT : uips2r(&(frame->imno),&one,&(frame->nx),&one,&(frame->ny), frame->data.f_data,&stat); break; case DOUBLE : uips2d(&(frame->imno),&one,&(frame->nx),&one,&(frame->ny), frame->data.d_data,&stat); break; } if (stat == 0) uimclo(&(frame->imno),&stat); free_frame_mem(frame); break; #endif #ifdef FITS case FITS_A_FORMAT : case FITS_B_FORMAT : stat = 0; fptr = (fitsfile *)frame->external_info; if (frame->iomode != (int)I_MODE) { if (frame->data.d_data != NULL) { int_datatype = get_datatype_code(OutputIO.basic_io,frame->data_type); npix = frame->nx*frame->ny; if (fits_write_img(fptr,int_datatype,1L,npix, frame->data.s_data,&stat)) { stat = ERR_WRIT; } } } if (! stat) { fits_close_file(fptr,&stat); stat = wcs_free(frame); } free_frame_mem(frame); frame->external_info = NULL; break; #endif } if (stat) { sprintf(errtext,"close_frame: frame %s",filename); stat = get_tiger_errcode(frame->data_format,stat); Handle_Error(errtext,stat); } else { if (TK && (frame->iomode == O_MODE || frame->iomode == IO_MODE)) { printf("@ N {%s}\n",filename); } } return(stat); }
void dokan_clean(void) { if (dokan.opts.MountPoint) wcs_free((LPWSTR)dokan.opts.MountPoint); }