/****************************************************************************** * egi2ESA.cpp * * ------------------- * * start : June 6th-2006 * * author : Lars Stenseng * * email : stenseng@spacecenter.dk * * last update : June 6th-2006 * ******************************************************************************/ #include #include #include #include using namespace std; /****************************************************************************** * ******************************************************************************/ int main(int argc, char *argv[]) {double FirstObs=24.01, LastObs=-0.01; ifstream InputFile; double InputTime; ofstream OutputFile; char OutputDays[4], OutputSeconds[4], OutputMicroseconds[4]; char OutputLatitude[8], OutputLongitude[8], OutputHeight[8]; char OutputPitch[8], OutputRoll[8], OutputHeading[8]; char OutputDummy_8[8]; union{char Days[4]; signed long int InputDays;}; union{char Seconds[4]; signed long int InputSeconds;}; union{char Microseconds[4]; signed long int InputMicroseconds;}; union{char Latitude[8]; double InputLatitude;}; union{char Longitude[8]; double InputLongitude;}; union{char Height[8]; double InputHeight;}; union{char Pitch[8]; double InputPitch;}; union{char Roll[8]; double InputRoll;}; union{char Heading[8]; double InputHeading;}; union{char cDummy_8[8]; double dDummy_8;}; dDummy_8=0.0; if(argc!=4) {cerr << "Convert DNSC egi data to ESA binary attitude data format.\n\n" << "egi2ESA \n" << "\n"; exit(1); } else {InputFile.open(argv[1]); OutputFile.open(argv[2], ios::binary|ios::out); InputDays=atoi(argv[3]); } while(!InputFile.eof()) {InputFile >> InputTime >> InputLatitude >> InputLongitude >> InputHeight >> InputPitch >> InputRoll >> InputHeading; InputFile.ignore(512,'\n'); InputSeconds=int(InputTime*3600.0); InputMicroseconds=int(fmod(InputTime*3600000000.0, 1000000.0)); if(InputTime!=0.0) {if(FirstObs > InputTime) FirstObs=InputTime; if(LastObs < InputTime) LastObs=InputTime; for(int i=0; i<4; i++) {OutputDays[i]=Days[3-i]; OutputSeconds[i]=Seconds[3-i]; OutputMicroseconds[i]=Microseconds[3-i]; } for(int i=0; i<8; i++) {OutputLatitude[i]=Latitude[7-i]; OutputLongitude[i]=Longitude[7-i]; OutputHeight[i]=Height[7-i]; OutputPitch[i]=Pitch[7-i]; OutputRoll[i]=Roll[7-i]; OutputHeading[i]=Heading[7-i]; OutputDummy_8[i]=cDummy_8[7-i]; } OutputFile.write((char *) OutputDays, 4); // 1 OutputFile.write((char *) OutputSeconds, 4); // 2 OutputFile.write((char *) OutputMicroseconds, 4); // 3 OutputFile.write((char *) OutputLatitude, 8); // 4 OutputFile.write((char *) OutputLongitude, 8); // 5 OutputFile.write((char *) OutputDummy_8, 8); // 6 OutputFile.write((char *) OutputDummy_8, 8); // 7 OutputFile.write((char *) OutputHeading, 8); // 8 OutputFile.write((char *) OutputDummy_8, 8); // 9 OutputFile.write((char *) OutputDummy_8, 8); //10 OutputFile.write((char *) OutputDummy_8, 8); //11 OutputFile.write((char *) OutputPitch, 8); //12 OutputFile.write((char *) OutputRoll, 8); //13 OutputFile.write((char *) OutputDummy_8, 8); //14 OutputFile.write((char *) OutputDummy_8, 8); //15 OutputFile.write((char *) OutputDummy_8, 8); //16 OutputFile.write((char *) OutputDummy_8, 8); //17 OutputFile.write((char *) OutputDummy_8, 8); //18 OutputFile.write((char *) OutputDummy_8, 8); //19 OutputFile.write((char *) OutputDummy_8, 8); //20 OutputFile.write((char *) OutputDummy_8, 8); //21 OutputFile.write((char *) OutputDummy_8, 8); //22 OutputFile.write((char *) OutputDummy_8, 8); //23 } } InputFile.close(); OutputFile.close(); cout << setiosflags(ios::fixed) << setw(2) << setprecision(0) << int(FirstObs) << setw(2) << setprecision(0) << int(fmod(FirstObs*60, 60)) << setw(2) << setprecision(0) << int(fmod(FirstObs*3600, 60)) << '_' << setw(2) << setprecision(0) << int(LastObs) << setw(2) << setprecision(0) << int(fmod(LastObs*60, 60)) << setw(2) << setprecision(0) << int(fmod(LastObs*3600, 60)) << '\n'; return(0); }