| [350] | 1 | // archeopsfile.h
 | 
|---|
 | 2 | // Eric Aubourg         CEA/DAPNIA/SPP   juillet 1999
 | 
|---|
 | 3 | 
 | 
|---|
| [310] | 4 | #ifndef ARCHEOPSFILE_H
 | 
|---|
 | 5 | #define ARCHEOPSFILE_H
 | 
|---|
 | 6 | 
 | 
|---|
 | 7 | #include <stdio.h>
 | 
|---|
 | 8 | #include <string>
 | 
|---|
 | 9 | #include <stack>
 | 
|---|
 | 10 | 
 | 
|---|
| [534] | 11 | using namespace std;
 | 
|---|
| [315] | 12 | 
 | 
|---|
| [534] | 13 | #include "ark.h"
 | 
|---|
 | 14 | #include "archexc.h"
 | 
|---|
| [310] | 15 | 
 | 
|---|
 | 16 | enum {
 | 
|---|
 | 17 |   block_param_mask = 1 << block_param,
 | 
|---|
 | 18 |   block_journal_mask = 1 << block_journal,
 | 
|---|
 | 19 |   block_reglage_mask = 1 << block_reglage,
 | 
|---|
 | 20 |   block_dilution_mask = 1 << block_dilution,
 | 
|---|
 | 21 |   block_gps_mask = 1 << block_gps,
 | 
|---|
 | 22 |   block_une_periode_mask = 1 << block_une_periode,
 | 
|---|
 | 23 |   block_synchro_sol_mask = 1 << block_synchro_sol,
 | 
|---|
 | 24 |   block_pointage_sol_mask = 1 << block_pointage_sol,
 | 
|---|
 | 25 |   block_bolo_nc_mask = 1 << block_bolo,
 | 
|---|
 | 26 |   block_gyro_nc_mask = 1 << block_gyro,
 | 
|---|
 | 27 |   block_sst_nc_mask = 1 << block_sst,
 | 
|---|
 | 28 |   block_11_mask = 1 << block_11,
 | 
|---|
 | 29 |   block_bolo_comprime_mask = 1 << block_bolo_comprime,
 | 
|---|
 | 30 |   block_gyro_comprime_mask = 1 << block_gyro_comprime,
 | 
|---|
 | 31 |   block_sst_comprime_mask = 1 << block_sst_comprime,
 | 
|---|
| [342] | 32 |  // block_catalog_flash_mask = 1 << block_catalog_flash,
 | 
|---|
| [310] | 33 |   block_cmd_flash_mask = 1 << block_cmd_flash,
 | 
|---|
 | 34 |   block_data_brute_mask = 1 << block_data_brute,
 | 
|---|
 | 35 |   block_18_mask = 1 << block_18,
 | 
|---|
 | 36 |   block_19_mask = 1 << block_19,
 | 
|---|
 | 37 | 
 | 
|---|
 | 38 |   block_bolo_mask = block_bolo_nc_mask | block_bolo_comprime_mask,
 | 
|---|
 | 39 |   block_gyro_mask = block_gyro_nc_mask | block_gyro_comprime_mask,
 | 
|---|
 | 40 |   block_sst_mask = block_sst_nc_mask | block_sst_comprime_mask
 | 
|---|
 | 41 | };
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 | class BlockSet;
 | 
|---|
 | 44 | 
 | 
|---|
 | 45 | 
 | 
|---|
 | 46 | class ArcheopsFile {
 | 
|---|
 | 47 | public:
 | 
|---|
 | 48 |   ArcheopsFile(string const& fname);  // starting before first block
 | 
|---|
 | 49 |   ArcheopsFile(ArcheopsFile const&);
 | 
|---|
 | 50 |   virtual ~ArcheopsFile();
 | 
|---|
 | 51 |   
 | 
|---|
| [534] | 52 |   void setUTCOffset(double UTCOffset=2); // StartMJD : decodage a partir du nom du bloc...
 | 
|---|
| [310] | 53 |   double getStartMJD();
 | 
|---|
 | 54 |   
 | 
|---|
| [342] | 55 |   bool nextBlock();   // go to next block, true if block exists (ie not EOF)
 | 
|---|
| [310] | 56 |   bool nextBlock(long mask); // go to next block matching mask
 | 
|---|
| [342] | 57 |   bool gotValidBlock(); // current block is good
 | 
|---|
| [310] | 58 |   int  blockKind();   // kind of the current bloc, enum in archeops.h
 | 
|---|
 | 59 |   int  blockRawKind();   // kind of the current raw bloc, enum in archeops.h
 | 
|---|
 | 60 |   int  blockNum();   // number (timestamp) of the current bloc
 | 
|---|
 | 61 |   string blockKdName();
 | 
|---|
 | 62 |   string blockRawKdName();
 | 
|---|
| [342] | 63 |   string filename() {return fn;}
 | 
|---|
| [310] | 64 |   
 | 
|---|
 | 65 |   
 | 
|---|
 | 66 |   void pushMark();    // push current file position, and "last" blocks
 | 
|---|
 | 67 |   void popMark();     // pops last file position and "last" blocks
 | 
|---|
| [315] | 68 |     
 | 
|---|
| [310] | 69 |   void grabLastBlocs(ArcheopsFile const& oldFile);
 | 
|---|
 | 70 |   
 | 
|---|
| [315] | 71 |   block_type_modele*  aheadBlock();   // internal buffer
 | 
|---|
| [310] | 72 |   block_type_modele*  currentBlock(); // internal buffer
 | 
|---|
| [315] | 73 |   bool sameBlockNumAhead();
 | 
|---|
| [310] | 74 |   
 | 
|---|
 | 75 |   block_type_param*         lastParam();  // saved blocks, including current
 | 
|---|
 | 76 |   block_type_journal*       lastJournal();
 | 
|---|
 | 77 |   block_type_reglage*       lastReglage();
 | 
|---|
 | 78 |   block_type_dilution*      lastDilution();
 | 
|---|
 | 79 |   block_type_gps*           lastGPS();
 | 
|---|
 | 80 |   block_type_une_periode*   lastUnePeriode();
 | 
|---|
 | 81 |   block_type_synchro_sol*   lastSynchroSol();
 | 
|---|
 | 82 |   block_type_pointage_sol*  lastPointageSol();
 | 
|---|
 | 83 |   block_type_bolo*          lastBolo();   // can be uncompressed bolo_comp
 | 
|---|
 | 84 |   block_type_bolo*          llastBolo();   
 | 
|---|
 | 85 |   block_type_gyro*          lastGyro();
 | 
|---|
 | 86 |   block_type_sst*           lastSST();
 | 
|---|
 | 87 |   block_type_bolo_comprime* lastBoloComp();   
 | 
|---|
 | 88 |   block_type_gyro_comprime* lastGyroComp();
 | 
|---|
 | 89 |   block_type_sst_comprime*  lastSSTComp();
 | 
|---|
 | 90 |   
 | 
|---|
| [342] | 91 |   void forceBlock(block_type_modele* blk);
 | 
|---|
| [315] | 92 |     
 | 
|---|
| [342] | 93 |   static double decodeMJD(string const& dateString); // sans tenir compte de TU-TLeg
 | 
|---|
| [315] | 94 |     
 | 
|---|
| [310] | 95 | protected:
 | 
|---|
 | 96 |   BlockSet*                 blockSet;
 | 
|---|
 | 97 |   stack<BlockSet*>          blockStack;
 | 
|---|
| [534] | 98 |   stack<long>               fposStack;
 | 
|---|
| [310] | 99 |   
 | 
|---|
 | 100 |   void saveCurBlock();
 | 
|---|
 | 101 |   void postProcessBlock();
 | 
|---|
| [315] | 102 | 
 | 
|---|
 | 103 |   void swapEntete(block_type_modele* blk);
 | 
|---|
 | 104 |   void swapContent(block_type_modele* blk);
 | 
|---|
| [310] | 105 |   
 | 
|---|
 | 106 |   void computeMJD(string const& fname);
 | 
|---|
| [342] | 107 |   
 | 
|---|
 | 108 |   bool fixBlock(block_type_modele* blk);
 | 
|---|
 | 109 |   long searchNextBlock(long pos);
 | 
|---|
| [315] | 110 |     
 | 
|---|
| [310] | 111 |   int                       curKind;
 | 
|---|
 | 112 |   int                       curRawKind;
 | 
|---|
| [315] | 113 |   long                      curPos;
 | 
|---|
 | 114 |   long                      peekPos;
 | 
|---|
| [534] | 115 |   long                      fLen;
 | 
|---|
| [310] | 116 |   FILE* f;
 | 
|---|
 | 117 |   string fn;
 | 
|---|
 | 118 |   
 | 
|---|
 | 119 |   double rawMJD;   // decodage a partir du nom de fichier, sans application d'offset heure locale
 | 
|---|
 | 120 |   double startMJD; // MJD du debut du fichier.
 | 
|---|
 | 121 |   double utcOffset;
 | 
|---|
 | 122 | private:
 | 
|---|
 | 123 | };
 | 
|---|
 | 124 | 
 | 
|---|
 | 125 | #endif
 | 
|---|