Пример #1
0
void Picture::WriteToFile(const char* FileName) const
{
	ofstream fout;
	fout.open(FileName, ios_base::binary); //destroys the old file

	WriteFileHeader(fout);
	WriteInfoHeader(fout);

	fout.seekp(fileHeader.bfOffBits); //should be 54
	int i = 0;
	for(unsigned int row = 0; row < infoHeader.biHeight; row++)
	{
		for(unsigned int column = 0; column < infoHeader.biWidth; column++, i ++)
		{
			fout.write((char*)&(pixels[i]), 3);
		}
		
		unsigned int  b =  infoHeader.biWidth * 3;
		unsigned char junk = 0;

		while(b%4 != 0)
		{
			fout.write((char*)&junk, 1);
			b = b + 1;
		}
	}
	fout.close();
}
/// <summary>
/// Stops the recording, writes the file header, and closes the file
/// </summary>
void WaveWriter::Stop()
{
    // Come back and update the file-size information.
    WriteFileHeader();
    FlushFileBuffers(m_fileHandle);
    CloseHandle(m_fileHandle);
}
Пример #3
0
CDemoRecorder::CDemoRecorder()
{
	// We want this folder to exist
	if (!filesystem.CreateDirectory("demos"))
		return;

	SetName("unnamed");
	demoName = wantedName;

	std::string filename = filesystem.LocateFile(demoName, FileSystem::WRITE);
	recordDemo.open(filename.c_str(), std::ios::out | std::ios::binary);

	memset(&fileHeader, 0, sizeof(DemoFileHeader));
	strcpy(fileHeader.magic, DEMOFILE_MAGIC);
	fileHeader.version = DEMOFILE_VERSION;
	fileHeader.headerSize = sizeof(DemoFileHeader);
	strcpy(fileHeader.versionString, SpringVersion::Get().c_str());

	__time64_t currtime;
	_time64(&currtime);
	fileHeader.unixTime = currtime;

	recordDemo.write((char*)&fileHeader, sizeof(fileHeader));

	fileHeader.playerStatElemSize = sizeof(CPlayer::Statistics);
	fileHeader.teamStatElemSize = sizeof(CTeam::Statistics);
	fileHeader.teamStatPeriod = CTeam::statsPeriod;
	fileHeader.winningAllyTeam = -1;

	WriteFileHeader(false);
}
Пример #4
0
void DnarchFileWriter::FinishCompress()
{
	ASSERT(metaStream != NULL);
	ASSERT(dataStream != NULL);

	// prepare header and write footer
	//
	fileHeader.footerOffset = metaStream->Position();

	WriteFileFooter();


	// fill header and write
	//
	fileHeader.footerSize = metaStream->Position() - fileHeader.footerOffset;

	metaStream->SetPosition(0);
	WriteFileHeader();


	// cleanup exit
	//
	metaStream->Close();
	delete metaStream;
	metaStream = NULL;

	dataStream->Close();
	delete dataStream;
	dataStream = NULL;
}
Пример #5
0
CDemoRecorder::~CDemoRecorder()
{
	LOG("Writing demo: %s", GetName().c_str());
	WriteWinnerList();
	WritePlayerStats();
	WriteTeamStats();
	WriteFileHeader(true);
	WriteDemoFile();
}
Пример #6
0
void
plD_init_plm(PLStream *pls)
{
    PLmDev *dev;
    U_CHAR c = (U_CHAR) INITIALIZE;

    dbug_enter("plD_init_plm");

    pls->color = 1;		/* Is a color device */
    pls->dev_fill0 = 1;		/* Handle solid fills */
    pls->dev_fill1 = 1;		/* Handle pattern fills */

/* Initialize family file info */

    plFamInit(pls);

/* Prompt for a file name if not already set */

    plOpenFile(pls);
    pls->pdfs = pdf_finit(pls->OutFile);

/* Allocate and initialize device-specific data */

    pls->dev = calloc(1, (size_t) sizeof(PLmDev));
    if (pls->dev == NULL)
	plexit("plD_init_plm: Out of memory.");

    dev = (PLmDev *) pls->dev;

    dev->xold = PL_UNDEFINED;
    dev->yold = PL_UNDEFINED;

    dev->xmin = 0;
    dev->xmax = PIXELS_X - 1;
    dev->ymin = 0;
    dev->ymax = PIXELS_Y - 1;

    dev->pxlx = (double) PIXELS_X / (double) LPAGE_X;
    dev->pxly = (double) PIXELS_Y / (double) LPAGE_Y;

    plP_setpxl(dev->pxlx, dev->pxly);
    plP_setphy(dev->xmin, dev->xmax, dev->ymin, dev->ymax);

/* Write Metafile header. */

    WriteFileHeader(pls);

/* Write color map state info */

    plD_state_plm(pls, PLSTATE_CMAP0);
    plD_state_plm(pls, PLSTATE_CMAP1);

/* Write initialization command. */

    DEBUG_PRINT_LOCATION("before init");
    plm_wr( pdf_wr_1byte(pls->pdfs, c) );
}
Пример #7
0
void CDemoRecorder::SetFileHeader()
{
	memset(&fileHeader, 0, sizeof(DemoFileHeader));
	strcpy(fileHeader.magic, DEMOFILE_MAGIC);
	fileHeader.version = DEMOFILE_VERSION;
	fileHeader.headerSize = sizeof(DemoFileHeader);
	STRNCPY(fileHeader.versionString, (SpringVersion::GetSync()).c_str(), sizeof(fileHeader.versionString) - 1);
	fileHeader.unixTime = CTimeUtil::GetCurrentTime();
	fileHeader.playerStatElemSize = sizeof(PlayerStatistics);
	fileHeader.teamStatElemSize = sizeof(TeamStatistics);
	fileHeader.teamStatPeriod = TeamStatistics::statsPeriod;
	fileHeader.winningAllyTeamsSize = 0;

	demoStream.seekp(WriteFileHeader(false) + sizeof(DemoFileHeader));
}
Пример #8
0
CDemoRecorder::~CDemoRecorder()
{
	WritePlayerStats();
	WriteTeamStats();
	WriteFileHeader();

	delete recordDemo;

	if (demoName != wantedName) {
		rename(demoName.c_str(), wantedName.c_str());
	} else {
		remove("demos/unnamed.sdf");
		rename(demoName.c_str(), "demos/unnamed.sdf");
	}
}
Пример #9
0
    void DiMeshSerializerImpl::ExportMesh( const DiMesh* pMesh, DiDataStreamPtr stream )
    {
        mStream = stream;

        WriteFileHeader();

        DiMesh::ConstSubMeshIterator it = pMesh->GetSubMeshs();
        while (it.HasMoreElements())
        {
            DiSubMesh* sm = it.GetNext();
            WriteSubMesh(sm);
        }

        WriteBoundsInfo(pMesh);
    }
Пример #10
0
void CObjectOStream::Write(const CConstObjectInfo& object)
{
    // root writer
    BEGIN_OBJECT_FRAME2(eFrameNamed, object.GetTypeInfo());
    
    WriteFileHeader(object.GetTypeInfo());

    WriteObject(object);

    EndOfWrite();
    
    END_OBJECT_FRAME();

    if ( GetAutoSeparator() )
        Separator(*this);
}
Пример #11
0
void CObjectOStream::Write(TConstObjectPtr object, TTypeInfo typeInfo)
{
    // root writer
    BEGIN_OBJECT_FRAME2(eFrameNamed, typeInfo);
    
    WriteFileHeader(typeInfo);

    WriteObject(object, typeInfo);

    EndOfWrite();
    
    END_OBJECT_FRAME();

    if ( GetAutoSeparator() )
        Separator(*this);
}
/* save to the file */
bool FH_SaveToFile(const DataToSave&data,const std::string& filename)
{
  // try to open the file.
  // if failed then return false.
  HANDLE hFile;
  if(INVALID_HANDLE_VALUE==(hFile=CreateFile(filename.c_str(),GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)))
    return false;
  WriteFileHeader(data.nNumberOfQuestions,data.nTimeInSeconds,data.nMarks,hFile);

  // write questions //
  for(int i=0;i<data.questions.size();i++)
  {
     WriteQuestion(data.questions.at(i),hFile);
  }
  CloseHandle(hFile);  // if no error occurred.
  return true;
}
Пример #13
0
    void DiMotionSerializerImpl::ExportMotion( const DiMotion* pMotion, DiDataStreamPtr stream )
    {
        mStream = stream;

        WriteFileHeader();

        if (pMotion->GetSkeleton())
        {
            WriteSkeleton(pMotion->GetSkeleton());
        }

        DiMotion::ConstAnimationListIterator i = pMotion->GetAnimations();
        while (i.HasMoreElements())
        {
            WriteAnimation(i.GetNext());
        }
    }
Пример #14
0
CDemoRecorder::~CDemoRecorder()
{
	WritePlayerStats();
	WriteTeamStats();
	WriteFileHeader();

	recordDemo.close();

	if (demoName != wantedName) {
		if (rename(demoName.c_str(), wantedName.c_str()) != 0) {
            logOutput << "Renaming demo " << demoName << " to " << wantedName << "\n";
            logOutput << "failed: " << strerror(errno) << "\n";
		}
	} else {
	    // pointless?
		//remove("demos/unnamed.sdf");
		//rename(demoName.c_str(), "demos/unnamed.sdf");
	}
}
Пример #15
0
void PointSearchTester::PerformSearches()
{
	Rect rect;
	Point *pPointsFound = new Point[NUM_POINTS_TO_FIND];

	OpenResultsFile();
	WriteFileHeader();

	for (int i = 0; i < NUM_SEARCHES; i++)
	{
		const Rect searchRect = {rect.lx, rect.ly, rect.hx, rect.hy};
		int numPointsFound;

		numPointsFound = search(m_pSearchContext, searchRect, NUM_POINTS_TO_FIND, pPointsFound);
		WriteSearchResults(i, &rect, numPointsFound, pPointsFound);
	}

	CloseResultsFile();
	delete[] pPointsFound;
}
Пример #16
0
CDemoRecorder::CDemoRecorder()
{
	// We want this folder to exist
	if (!filesystem.CreateDirectory("demos"))
		return;

	wantedName = demoName = "demos/unnamed.sdf";

	std::string filename = filesystem.LocateFile(demoName, FileSystem::WRITE);
	recordDemo = SAFE_NEW std::ofstream(filename.c_str(), std::ios::out | std::ios::binary);

	memset(&fileHeader, 0, sizeof(DemoFileHeader));
	strcpy(fileHeader.magic, DEMOFILE_MAGIC);
	fileHeader.version = DEMOFILE_VERSION;
	fileHeader.headerSize = sizeof(DemoFileHeader);
	strcpy(fileHeader.versionString, VERSION_STRING);

	__time64_t currtime;
	_time64(&currtime);
	fileHeader.unixTime = currtime;

	recordDemo->write((char*)&fileHeader, sizeof(fileHeader));

	if (gameSetup) {
		// strip trailing null termination characters
		int length = gameSetup->gameSetupTextLength;
		while (gameSetup->gameSetupText[length - 1] == '\0')
			--length;

		fileHeader.scriptSize = length;
		recordDemo->write(gameSetup->gameSetupText, length);
	}

	fileHeader.playerStatElemSize = sizeof(CPlayer::Statistics);
	fileHeader.teamStatElemSize = sizeof(CTeam::Statistics);
	fileHeader.teamStatPeriod = CTeam::statsPeriod;
	fileHeader.winningAllyTeam = -1;

	WriteFileHeader();
}
Пример #17
0
bool Savegame::Save(BinaryFile& file)
{
    // Versionszeug schreiben
    WriteFileHeader(file);

    // Timestamp der Aufzeichnung
    unser_time_t tmpTime = libendian::ConvertEndianess<false>::fromNative(save_time);
    file.WriteRawData(&tmpTime, sizeof(tmpTime));

    // Mapname
    file.WriteShortString(mapName);

    WritePlayerData(file);
    WriteGGS(file);

    // Start-GF
    file.WriteUnsignedInt(start_gf);

    // Serialisiertes Spielzeug reinschreiben
    sgd.WriteToFile(file);

    return true;
}
Пример #18
0
static void WriteHeader(const char*  fileID)
{
    WriteFileHeader(fileID, 0, 0);
    WriteInt(GetAppID());
    WriteLine();
}
Пример #19
0
bool IO_UncertSimResults::AddUncertRun(const DC_UncertSimResults& resultHeader,
                                       const UncertRunResults&    results,
                                             bool                 addExisting)
{
    GenAppClearMsgs();
    bool openExisting = addExisting && ConvFileC::CFfileExists(fileName);

    DC_UncertSimResults currHeader;
    if (openExisting)
    {
        if (!ReadFileHeader(currHeader, false))
        {
            GenAppErrorMsg("UncertSimResults", "File contents incompatible");
            return false;
        }

        if ((currHeader.IsMultiple() && (!resultHeader.IsMultiple())) ||
            ((!currHeader.IsMultiple()) && resultHeader.IsMultiple()))
        {
            GenAppErrorMsg("UncertSimResults", "Cannot combine multiple & not multiple");
            return false;
        }

        if (currHeader.IsMultiple())
        {
            if (currHeader.multipleRunVariableIDs.Size() != resultHeader.multipleRunVariableIDs.Size())
                GenAppErrorMsg("UncertSimResults", "Multiple run results different size??");
        }
    }

    try
    {
        SC_IntArray runStartRecs;
        runStartRecs.SetResizable();
        int nextRec, runIndexRecord;
        if (openExisting)
        {
            ReadFileHeader(currHeader, true);
            ReadNextRecord();
            runIndexRecord = GetCurrentRec();
            nextRec = ReadInt();
            ReadIntArray(runStartRecs);
        }
        else
        {
            OpenFile(fileName, false);

            //  set up initial header info
            nRuns       = 0;
            WriteFileHeader(resultHeader);

            FlushBuffer(nextRec);

            runIndexRecord = nextRec;

            // initial header
            BufferReset(nextRec);
            WriteInt(0);
            FlushBuffer(nextRec);

            // backup and set nextRec
            BufferReset(runIndexRecord);
            WriteInt(nextRec);

            // reflush
            FlushBuffer();
        }

        int runStart = nextRec;

        //  set to next avail
        BufferReset(nextRec);

        // add the run to the end
        WriteOneRun(results, nextRec);
        nRuns++;

        // update header
        BufferReset(0);
        WriteFileHeader(resultHeader);
        FlushBuffer();

        //  update next avail record
        BufferReset(runIndexRecord);
        WriteInt(nextRec);

        // update run start records
        runStartRecs += runStart;
        WriteIntArray(runStartRecs);
        FlushBuffer();

        CloseFile();
        return true;
    }
    catch (BufFileC::BufferFileError& err) {
        GenAppErrorMsg("WriteUncertResults", err.errMsg);
     }

    CloseFile();
    return false;
}
Пример #20
0
void CDemoRecorder::SetGameID(const unsigned char* buf)
{
	memcpy(&fileHeader.gameID, buf, sizeof(fileHeader.gameID));
	WriteFileHeader(false);
}
Пример #21
0
static void WriteCFGHeader()
{
  WriteFileHeader(fileID, majorVersionNum, 0);

  WriteAppGlobals();
}
Пример #22
0
bool Md2::ConvertToMesh(const std::string &file, float scaleFactor)
{
	FILE *fp = fopen(file.c_str(), "wb");
	if (fp == NULL)
		return false;


	WriteFileHeader(fp);

	KeyFramesChunk *keyFramesChunk = new KeyFramesChunk();
	keyFramesChunk->numVertices = m_numVertices;
	for (long i = 0; i < m_numFrames; ++i)
	{
		KeyFrame *frame = keyFramesChunk->AddFrame();

		for (int j = 0; j < m_numVertices; ++j)
			frame->vertices[j] = m_frames[i].vertices[j] * scaleFactor;
		
		for (int j = 0; j < m_numVertices; ++j)
			frame->normals[j] = m_frames[i].normals[j];
	}
	WriteChunk(keyFramesChunk, fp);

	TexCoordsChunk *texCoordsChunk = new TexCoordsChunk();
	for (long i = 0; i < m_numTexCoords; ++i)
		texCoordsChunk->texCoords.push_back(m_texCoords[i]);
	WriteChunk(texCoordsChunk, fp);

	KeyFrameTrianglesChunk *trianglesChunk = new KeyFrameTrianglesChunk();
	for (long i = 0; i < m_numPolys; ++i)
	{
		KeyFrameTriangle t;

		t.vertices[0] = m_polys[i].vertex[0];
		t.vertices[1] = m_polys[i].vertex[1];
		t.vertices[2] = m_polys[i].vertex[2];

		t.texCoords[0] = m_polys[i].texCoord[0];
		t.texCoords[1] = m_polys[i].texCoord[1];
		t.texCoords[2] = m_polys[i].texCoord[2];

		trianglesChunk->triangles.push_back(t);
	}
	WriteChunk(trianglesChunk, fp);

	if (m_animations.size() > 0)
	{
		AnimationsChunk *animationsChunk = new AnimationsChunk();
		for (unsigned int i = 0; i < m_animations.size(); ++i)
		{
			AnimationSequence a;

			a.name = m_animations[i].name;
			a.start = m_animations[i].startFrame;
			a.end = m_animations[i].endFrame;

			animationsChunk->animations.push_back(a);
		}
		WriteChunk(animationsChunk, fp);
	}

	fclose(fp);
	return true;
}
Пример #23
0
boolean PutFileHeader(FILE *dst,                /* pointer to destination file*/
                      FileHeader_t *header,     /* pointer to header struct   */
                      long FileType,            /* file type integer pointer  */
                      long FormatType,          /* format type binary/ascii   */
                      long NHeaderRecord,       /* number of header records   */
                      long init_flag,           /* initialization flag 0,1    */
                      char *ProdAgency,         /* producer agency label      */
                      char *ProdInstitution,    /* producer institution label */
                      char *SoftwareVersion,    /* software version label     */
                      char *SoftwareLinkTime,   /* software link time         */
                      char *Documentation,      /* documentation label        */
                      char *SatName,            /* satellite name label       */
                      char *SensorName,         /* sensor name label          */
                      char *TimeEpoch,          /* Time epoch label           */
                      double TfirstObs,         /* Time first observation     */
                      double TlastObs,          /* Time last observation      */
                      long   Nobs,              /* number of observations     */
                      char *TimeTag,            /* time tag label FIRST,FINAL */
                      char *FileName,           /* Filename                   */
                      char *ProcessLevel        /* Processing level (1A or 1B)*/
                     )
/*----------------------------------------------------------------------------->
/ purpose: Take header arguments, update header struct FileHeader_t and 
/          write header information to file src
/
/ coded by: Gerhard L.H. Kruizinga                           09/12/2000
/
/ input:  *src    Pointer to data file
/ output: *record Pointer to header struct
/
/ return:      1       normal return
/              0       End Of File reached before header could be read
/ notes:
/              if any labels are set to "NONE" then default values will be used
/              as specified in file HeaderFile.txt
/
<-----------------------------------------------------------------------------*/
{
  char               TimeTagUTC[HEADERMAXCHAR],FinalTime[HEADERMAXCHAR];
  char               StartTime[HEADERMAXCHAR],NobsChar[HEADERMAXCHAR];
  char               file_type[HEADERMAXCHAR],file_format[HEADERMAXCHAR];
  char               HeadNrecord[HEADERMAXCHAR],NrBytes[HEADERMAXCHAR];
  char               none[HEADERMAXCHAR];

  int  year,month,day,hour,minute,second;

  double frac,secs;        

  GetUTCTimeTag(TimeTagUTC);

  strcat(TimeTagUTC," by ");
  strcat(TimeTagUTC,getenv("LOGNAME"));

  header->filetype   = FileType;
  header->formattype = FormatType;


  if ( header->nrecord < NRHEADERLABELS ) 
  {
    header->nrecord         = NRHEADERLABELS;
    header->NinputFileLabel = 0;
  }

  header->init_flag  = init_flag;

  sprintf(file_type,  "%d",header->filetype);
  sprintf(file_format,"%d",header->formattype);
  sprintf(HeadNrecord,"%d",header->nrecord);

  seccal(TfirstObs,&year,&month,&day,&hour,&minute,&second,&frac);

  frac = (double) (long) (frac * 100);
  frac /= 100;
  secs = (double)second + frac;
  sprintf(StartTime,"%f (%4d-%02d-%02d %02d:%02d:%05.2f)",TfirstObs,
                     year,month,day,hour,minute,secs);

  seccal(TlastObs,&year,&month,&day,&hour,&minute,&second,&frac);

  frac = (double) (long) (frac * 100);
  frac /= 100;
  secs = (double)second + frac;

  sprintf(FinalTime,"%f (%4d-%02d-%02d %02d:%02d:%05.2f)",TlastObs,
                     year,month,day,hour,minute,secs);

  sprintf(NobsChar,"%d",Nobs);

  sprintf(NrBytes,"%d",ftell(dst));

  strcpy(none,"NONE");

  ModifyFileHeader(header,GetHeaderLabel("iphProducerAgency")        , ProdAgency);
  ModifyFileHeader(header,GetHeaderLabel("iphProducerInstitution")   , ProdInstitution);
  ModifyFileHeader(header,GetHeaderLabel("iphFileType")              , file_type);
  ModifyFileHeader(header,GetHeaderLabel("iphFileFormat")            , file_format);
  ModifyFileHeader(header,GetHeaderLabel("iphHeadNrecord")           , HeadNrecord);
  ModifyFileHeader(header,GetHeaderLabel("iphSoftwareVersion")       , SoftwareVersion);
  ModifyFileHeader(header,GetHeaderLabel("iphSoftwareLinkTime")      , SoftwareLinkTime);
  ModifyFileHeader(header,GetHeaderLabel("iphDocumentation")         , Documentation);
  ModifyFileHeader(header,GetHeaderLabel("iphSatelliteName")         , SatName);
  ModifyFileHeader(header,GetHeaderLabel("iphSensorName")            , SensorName);
  ModifyFileHeader(header,GetHeaderLabel("iphTimeEpoch")             , TimeEpoch);
  ModifyFileHeader(header,GetHeaderLabel("iphTimeFirstObs")          , StartTime);
  ModifyFileHeader(header,GetHeaderLabel("iphTimeLastObs")           , FinalTime);
  ModifyFileHeader(header,GetHeaderLabel("iphNumberObs")             , NobsChar);
  ModifyFileHeader(header,GetHeaderLabel("iphNumberBytes")           , NrBytes);
  ModifyFileHeader(header,GetHeaderLabel("iphFileName")              , FileName);
  ModifyFileHeader(header,GetHeaderLabel("iphProcessLevel")          , ProcessLevel);

  strcpy(header->ProducerAgency      , ProdAgency);
  strcpy(header->ProducerInstitution , ProdInstitution);
  strcpy(header->SoftwareVersion     , SoftwareVersion);
  strcpy(header->Documentation       , Documentation);
  strcpy(header->SatelliteName       , SatName);
  strcpy(header->SensorName          , SensorName);
  strcpy(header->TimeEpoch           , TimeEpoch);
  header->TimeFirstObs = TfirstObs;
  header->TimeLastObs  = TlastObs;
  header->NumberObs    = Nobs;
  sscanf("%ld",NrBytes,&header->NumberBytes);
  strcpy(header->FileName            , FileName);
  strcpy(header->ProcessLevel        , ProcessLevel);

  if (strcmp(TimeTag,"FINAL") == 0)
  {
    ModifyFileHeader(header,GetHeaderLabel("iphProductCreateEndTime")  , TimeTagUTC);
    strcpy(header->ProductCreateEndTime, TimeTagUTC);
  }
  else
  {
    ModifyFileHeader(header,GetHeaderLabel("iphProductCreateStartTime"), TimeTagUTC);
    ModifyFileHeader(header,GetHeaderLabel("iphProductCreateEndTime")  , none);
    strcpy(header->ProductCreateStartTime, TimeTagUTC);
    strcpy(header->ProductCreateEndTime  , none);
  }

  WriteFileHeader(dst,header);

  return True;
}
Пример #24
0
main (int argc, char *argv[])
/*----------------------------------------------------------------------------->
/ purpose:  Dump Contents of any Level 1 product
/
/ coded by: Gerhard L.H. Kruizinga                08/23/00
/
<-----------------------------------------------------------------------------*/

{
  FILE         *src,*dst;

  FileHeader_t header;

  double       Acc1aZbias;

  char         BinFilename[HEADERMAXCHAR];
  char         AscFilename[HEADERMAXCHAR];
  char         TimeTag[HEADERMAXCHAR];
  char         file_format[HEADERMAXCHAR];
  char         NobsChar[HEADERMAXCHAR];
  char         FileTypeName[HEADERMAXCHAR];
  char         LinkTimeLabel[HEADERMAXCHAR];
  char         NrBytes[HEADERMAXCHAR];

  long         i,ShowHeader,arg_ndx,DumpNrec,AscFileDefined,HeaderOnly;
  long         MassTnk,MassThr,Ksnr;
  long         PresTnk,TempTnk,RegTnk,AdapTnk,TempRedTnk,ACC1A_count,AHK1A_vp;
  long         RmGdel,ACC1A_ang,ACC1A_lin;
  long         Ka_phase_only,K_phase_only;

/*----------------------------------------------------------------------------->
/ check usage
<-----------------------------------------------------------------------------*/

  if (argc < 2)
  {
   fprintf(stderr,
           "\n usage: %s -binfile Level1_Bin_File [-ascfile Level1_Asc_File] [-nohead] [-nrec] [-head_only]\n\n",
           argv[0]);
   fprintf(stderr,"         [-masstnk tnk_id (3=both tanks,0=none)] [-massthr tnk_id (3=both tanks,0=none)]\n");
   fprintf(stderr,"         [-pres_tnk tnk_id] [-temp_tnk tnk_id]\n");
   fprintf(stderr,"         [-reg_tnk tnk_id] [-adap_tnk tnk_id] [-tempred_tnk tnk_id]\n");
   fprintf(stderr,"         [-tstart Tstart] [-tfinal Tfinal] [-acc1a_count] [-acc1a_ang] [-acc1a_lin] [-ahk1a_vp]\n");
   fprintf(stderr,"         [-acc1a_zbias Acc1aZbias (def 0)] [-ksnr] [-ka] [-k] [-rm_gdel]\n");
   fprintf(stderr,"         If -ascfile is not defined then output will go to standard out\n");
   fprintf(stderr,"\n");
   exit(1);
  }

/*----------------------------------------------------------------------------->
/ Intialize Header information and other relevant info
<-----------------------------------------------------------------------------*/

  InitializeHeaders();

  LinkTime(LinkTimeLabel);

  MassTnk = 4;
  arg_ndx = FindOpt(argc,argv, "-masstnk");
  if (arg_ndx != -1) MassTnk  = GetLongArgv(argc,argv,"-masstnk");

  MassThr = 4;
  arg_ndx = FindOpt(argc,argv, "-massthr");
  if (arg_ndx != -1) MassThr  = GetLongArgv(argc,argv,"-massthr");

  PresTnk = 0;
  arg_ndx = FindOpt(argc,argv, "-pres_tnk");
  if (arg_ndx != -1) PresTnk  = GetLongArgv(argc,argv,"-pres_tnk");

  TempTnk = 0;
  arg_ndx = FindOpt(argc,argv, "-temp_tnk");
  if (arg_ndx != -1) TempTnk  = GetLongArgv(argc,argv,"-temp_tnk");

  TempRedTnk = 0;
  arg_ndx = FindOpt(argc,argv, "-tempred_tnk");
  if (arg_ndx != -1) TempRedTnk  = GetLongArgv(argc,argv,"-tempred_tnk");

  RegTnk = 0;
  arg_ndx = FindOpt(argc,argv, "-reg_tnk");
  if (arg_ndx != -1) RegTnk  = GetLongArgv(argc,argv,"-reg_tnk");

  AdapTnk = 0;
  arg_ndx = FindOpt(argc,argv, "-adap_tnk");
  if (arg_ndx != -1) AdapTnk  = GetLongArgv(argc,argv,"-adap_tnk");

  ShowHeader = 1;
  arg_ndx = FindOpt(argc,argv, "-nohead");
  if (arg_ndx != -1) ShowHeader  = 0;

  Ksnr = 0;
  arg_ndx = FindOpt(argc,argv, "-ksnr");
  if (arg_ndx != -1) Ksnr  = 1;

  Ka_phase_only = 0;
  arg_ndx = FindOpt(argc,argv, "-ka");
  if (arg_ndx != -1) Ka_phase_only  = 1;

  K_phase_only = 0;
  arg_ndx = FindOpt(argc,argv, "-k");
  if (arg_ndx != -1) K_phase_only  = 1;

  RmGdel = 0;
  arg_ndx = FindOpt(argc,argv, "-rm_gdel");
  if (arg_ndx != -1) RmGdel  = 1;

  HeaderOnly = 0;
  arg_ndx = FindOpt(argc,argv, "-head_only");
  if (arg_ndx != -1) HeaderOnly  = 1;

  DumpNrec = DUMPALL;
  arg_ndx = FindOpt(argc,argv, "-nrec");
  if (arg_ndx != -1) DumpNrec  = GetLongArgv(argc,argv,"-nrec");

  Tstart = -1.0e32;
  arg_ndx = FindOpt(argc,argv, "-tstart");
  if (arg_ndx != -1) Tstart  = GetDoubleArgv(argc,argv,"-tstart");

  Tfinal = 1.0e32;
  arg_ndx = FindOpt(argc,argv, "-tfinal");
  if (arg_ndx != -1) Tfinal  = GetDoubleArgv(argc,argv,"-tfinal");

  Acc1aZbias = 0.0;
  arg_ndx = FindOpt(argc,argv, "-acc1a_zbias");
  if (arg_ndx != -1) Acc1aZbias  = GetDoubleArgv(argc,argv,"-acc1a_zbias");

  AscFileDefined = 0;
  arg_ndx = FindOpt(argc,argv, "-ascfile");
  if (arg_ndx != -1) AscFileDefined = 1;

  ACC1A_count = 0;
  arg_ndx = FindOpt(argc,argv, "-acc1a_count");
  if (arg_ndx != -1) ACC1A_count = 1;

  ACC1A_ang = 0;
  arg_ndx = FindOpt(argc,argv, "-acc1a_ang");
  if (arg_ndx != -1) ACC1A_ang = 1;

  ACC1A_lin = 0;
  arg_ndx = FindOpt(argc,argv, "-acc1a_lin");
  if (arg_ndx != -1) ACC1A_lin = 1;

  AHK1A_vp = 0;
  arg_ndx = FindOpt(argc,argv, "-ahk1a_vp");
  if (arg_ndx != -1) AHK1A_vp = 1;

/*----------------------------------------------------------------------------->
/ Open files
<-----------------------------------------------------------------------------*/

  strcpy (BinFilename,GetStrArgv(argc,argv,"-binfile"));

  src = fopen(BinFilename,"r");
  if (src == NULL)
  {
   fprintf(stderr," Level 1 Product file  %s cannot be opened !! \n",
           BinFilename);
   exit(1);
  }


  if (AscFileDefined == 1)
  {
    strcpy (AscFilename,GetStrArgv(argc,argv,"-ascfile"));
    dst = fopen(AscFilename,"w");
    if (dst == NULL)
    {
     fprintf(stderr," Level 1 Product file  %s cannot be opened !! \n",
             AscFilename);
     exit(1);
    }
  }
  else
  {
    strcpy(AscFilename,"Standard_Out");
    dst = stdout;
  }

/*----------------------------------------------------------------------------->
/ Read Header information and write updated header to Ascii file
<-----------------------------------------------------------------------------*/

  if (ReadFileHeader(src,&header) == false)
  {   
    fprintf(stderr,"\n Problem reading file header for file %s\n",BinFilename);
    fprintf(stderr," See message above for problem\n\n");
    exit(1);
  }

  GetUTCTimeTag(TimeTag);
  strcat(TimeTag," by ");
  strcat(TimeTag,getenv("LOGNAME"));
 
  header.formattype = 1;
  strcpy(NrBytes,"Not Determined because output is stdout");

  if (!HeaderOnly)
  {
    sprintf(file_format,"%d",header.formattype);
    ModifyFileHeader(&header,GetHeaderLabel("iphFileFormat"),file_format);
    ModifyFileHeader(&header,GetHeaderLabel("iphFileName"),AscFilename);
    ModifyFileHeader(&header,GetHeaderLabel("iphNumberBytes")           , NrBytes);
  }

  if (ShowHeader != 0 ) WriteFileHeader(dst,&header);

  if (HeaderOnly) exit(0);

/*----------------------------------------------------------------------------->
/ Based on header information Dump Records
<-----------------------------------------------------------------------------*/

  if (header.filetype == GetFileType("ipGFD1XF"))  
    DumpGFD1XF(src,dst,DumpNrec,Ksnr,K_phase_only,Ka_phase_only);
  else if (header.filetype == GetFileType("ipACC1AF"))  
    DumpACC1AF(src,dst,DumpNrec,ACC1A_count,AHK1A_vp,RmGdel,ACC1A_ang,ACC1A_lin,Acc1aZbias);
  else if (header.filetype == GetFileType("ipACC1BF"))  
    DumpACC1BF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipGNV1AF"))  
    DumpGNV1AF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipGNV1BF"))  
    DumpGNV1BF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipKBR1BF"))  
    DumpKBR1BF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipSCA1AF"))  
    DumpSCA1AF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipSCA1BF"))  
    DumpSCA1BF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipPCI1AF"))  
    DumpPCI1AF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipXXXVOF"))  
    DumpXXXVOF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipIOA1BF"))  
    DumpIOA1BF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipOSCFQF"))  
    DumpOSCFQF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipMAG1XF"))  
    DumpMAG1XF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipHRT1XF"))  
    DumpHRT1XF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipTHR1XF"))  
    DumpTHR1XF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipIHK1XF"))  
    DumpIHK1XF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipCLK1BF"))  
    DumpCLK1BF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipTNK1XF"))  
    DumpTNK1XF(src,dst,DumpNrec, PresTnk,TempTnk,RegTnk,AdapTnk,TempRedTnk);
  else if (header.filetype == GetFileType("ipMAS1XF"))  
    DumpMAS1XF(src,dst,DumpNrec,MassTnk,MassThr);
  else if (header.filetype == GetFileType("ipILG1XF"))  
    DumpILG1XF(src,dst,DumpNrec);
  else if (header.filetype == GetFileType("ipTIM1XF"))  
    DumpTIM1XF(src,dst,DumpNrec);
  else  
  {  
    GetFileTypeName(header.filetype,FileTypeName);
    if (strcmp(FileTypeName,"NOT_DEFINED") != 0)
    {
      fprintf(stderr,"File Type %s can not be converted into ascii format!!\n\n",
                      FileTypeName);
    }
    else
    {
      fprintf(stderr," FileTypePointer = %d is not defined or filetype pointer refers to Level1A data!!\n",  
                       header.filetype);  
      fprintf(stderr," Check Header of input File!\n\n");  
      exit(1);  
    }
  }

  if (DumpNrec != DUMPALL)
  {
    sprintf(NobsChar,"%d",DumpNrec);
    ModifyFileHeader(&header,GetHeaderLabel("iphNumberObs"), NobsChar);
  }
  GetUTCTimeTag(TimeTag);
  strcat(TimeTag," by ");
  strcat(TimeTag,getenv("LOGNAME"));

  sprintf(NrBytes,"%d",ftell(dst));

  ModifyFileHeader(&header,GetHeaderLabel("iphNumberBytes")           , NrBytes);

  if (ShowHeader != 0 && dst != stdout) WriteFileHeader(dst,&header);

  fclose(src);
  fclose(dst);

  exit(0);

}