unsigned int Database::Rewrite() { std::string new_filename(m_filename); new_filename += ".new"; FILE *f = fopen(new_filename.c_str(), "w+"); if (!f) { TRACE << "Can't write timer database: " << errno << "\n"; return (unsigned)errno; } fprintf(f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); fprintf(f, "<timerdb>\n"); db::QueryPtr qp = CreateQuery(); qp->Where(qp->Restrict(tv::epg::STATE, db::NE, tv::epg::NONE)); for (db::RecordsetPtr rs = qp->Execute(); rs && !rs->IsEOF(); rs->MoveNext()) { unsigned int state = rs->GetInteger(tv::epg::STATE); if (state == NONE || state == CANCELLED) continue; fprintf(f, "<record><id>%u</id>" "<title>%s</title>" "<description>%s</description>" "<start>%u</start>" "<end>%u</end>" "<channel>%u</channel>" "<state>%s</state></record>\n", rs->GetInteger(ID), util::XmlEscape(rs->GetString(TITLE)).c_str(), util::XmlEscape(rs->GetString(DESCRIPTION)).c_str(), rs->GetInteger(START), rs->GetInteger(END), rs->GetInteger(CHANNEL), statemap[state]); } fprintf(f, "</timerdb>\n"); if (ferror(f)) { fclose(f); unlink(new_filename.c_str()); return (unsigned)errno; } fclose(f); int rc = ::rename(new_filename.c_str(), m_filename); if (rc) return (unsigned)errno; return 0; }
std::string convertFileNameToWindowsStyle(std::string const& filename) { std::string new_filename(filename); std::string::size_type slash = 0; while( (slash = new_filename.find_first_of('/', slash)) != std::string::npos) { new_filename[slash]= '\\'; } return new_filename; }
static int cont_grep(regex_t *exp, regex_t *nl_exp, int fd, pb_file *pbf, int options) { int retflag = TRUE; int i; int j; ub4 csize; ub4 usize; ub2 fnlen; ub2 eflen; ub2 flags; ub2 method; ub1 file_header[30]; char *filename; char *str_stream; regmatch_t *match_array; regmatch_t *nl_offsets; if(pb_read(pbf, (file_header + 4), 26) != 26) { perror("read"); retflag = FALSE; } else { decd_siz(&csize, &usize, &fnlen, &eflen, &flags, &method, file_header); filename = new_filename(pbf, fnlen); lseek(fd, eflen, SEEK_CUR); if(filename[fnlen - 1] != '/') { str_stream = (method == 8 || (flags & 0x0008)) ? (char *) inflate_string(pbf, &csize, &usize) : read_string(pbf, csize); if(flags & 0x008) check_crc(pbf, str_stream, usize); mk_ascii(str_stream, usize); match_array = fnd_match(exp, str_stream, &i); if((options & JG_PRINT_LINE_NUMBER) && i) nl_offsets = fnd_match(nl_exp, str_stream, &j); prnt_mtchs(exp, filename, str_stream, match_array, nl_offsets, i, j, options); if(match_array) free(match_array); free(str_stream); } free(filename); retflag = TRUE; } return retflag; }
int main(int argc, char *argv[]) { int arg=1; int sbig_type = NO_CAMERA; int info_mode = 0; int verbose = 0; char name[MAX_STRING] = ""; char ra[MAX_STRING] = ""; char dec[MAX_STRING] = ""; char alt[MAX_STRING] = ""; char az[MAX_STRING] = ""; char imtype[8]; int phase; float exptime; int err; /* Set an interrupt handler to trap Ctr-C nicely */ if(signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, InterruptHandler); /* set lockfile from the outset */ get_lock(); store_pid_in_lockfile(); /* parse args */ if (argc < 3) { error_exit(usage); }; while (arg < argc - 2) { switch (argv[arg++][1]) { case 'v': verbose = 1; SetVerbosity(verbose); break; case 'n': sscanf(argv[arg++], "%s", name); break; case 'r': sscanf(argv[arg++], "%s", ra); break; case 'd': sscanf(argv[arg++], "%s", dec); break; case 'a': sscanf(argv[arg++], "%s", alt); break; case 'z': sscanf(argv[arg++], "%s", az); break; default: error_exit(usage); break; } } sscanf(argv[arg++],"%s",imtype); sscanf(argv[arg++],"%f",&exptime); // Determine what kind of image to take switch(value_from_imagetype_key(imtype)) { case DARK: ccd_type=DARK; if (verbose) printf("Taking dark frame.\n"); break; case LIGHT: ccd_type=LIGHT; if (verbose) printf("Taking light frame.\n"); break; case BIAS: ccd_type=BIAS; if (verbose) printf("Taking bias frame.\n"); break; case FLAT: ccd_type=FLAT; if (verbose) printf("Taking flat frame.\n"); break; case BADKEY: fprintf(stderr,"Unknown image type %s\n",imtype); return(1); break; } fflush(stdout); CountCameras(); if (ccd_ncam < 1){ fprintf(stderr,"Found 0 cameras\n"); return(1); } InitializeAllCameras(); store_timestamped_note_in_lockfile("Started"); store_directory_in_lockfile(); char myline[128]; sprintf(myline,"Exptime: %5.1f\n",exptime); store_note_in_lockfile(myline); // Start integrations going on each of the cameras one by one. for (int cam_num = 0; cam_num <ccd_ncam; cam_num++) { err = SetActiveCamera(cam_num); ccd_image_data[cam_num] = (unsigned short *) malloc(ccd_image_width*ccd_image_height*sizeof(unsigned short)); phase = 0; err = CaptureImage(&phase,ccd_image_data[cam_num],ccd_type,exptime,FALSE,0,0,0,0); } // Wait until the data is ready. I'm intentionally playing this safe by // making sure I wait at least 1s before trying to read out the data. // This is something I will have to look into if I ever use this for // fast focusing. int nsec = (int) exptime + 1; int count = 0; for (int i=0; i<=nsec;i++) { if(nsec > 3 && nsec < 10){ load_bar(count++,nsec,3,30); } else if (nsec > 10 && nsec < 100){ load_bar(count++,nsec,(int)(nsec/2),30); } else if (nsec > 100){ load_bar(count++,nsec,(int)(nsec/3),30); } sleep(1); } // The cameras are ready to be read out. We once again cycle over each camera and // save the data. for (int cam_num = 0; cam_num <ccd_ncam; cam_num++) { char infoline[128]; phase = 1; err = SetActiveCamera(cam_num); fflush(stderr); err = CaptureImage(&phase,ccd_image_data[cam_num],ccd_type,exptime,FALSE,0,0,0,0); // Print out some pixel values to let the user check data integrity if (verbose) printf("Some pixel values: %u %u %d\n", *(ccd_image_data[cam_num] + 10000), *(ccd_image_data[cam_num] + 15000), *(ccd_image_data[cam_num]+20000)); // Figure out what to call the new file char *newname; newname = (char *)malloc(MAX_STRING*sizeof(char)); new_filename(ccd_serial_number,imtype,newname); // Save as a FITS file GetCameraTemperature(); double temperature = ccd_camera_info[ActiveCamera()].temperature; int filterNumber = 0; if (IsCameraAnST402ME()) filterNumber = FilterWheelPosition(); write_fits(newname, ccd_image_width, ccd_image_height, ccd_image_data[cam_num], exptime,imtype,temperature,filterNumber,ccd_serial_number, name, ra,dec,alt,az); fprintf(stderr,"Saved %s \n",newname); sprintf(infoline,"Camera %d wrote: %s\n",cam_num,newname); store_note_in_lockfile(infoline); free(ccd_image_data[cam_num]); free(newname); } DisconnectAllCameras(); release_lock(); store_timestamped_note_in_lockfile("Completed"); // Release the lock file release_lock(); // Ring bell to wake up the astronomer if (verbose) printf("Camera(s) opened and closed successfully.\n"); putchar('\a'); putchar('\a'); putchar('\a'); return(0); }