| 1 | // archeopsfile.h
 | 
|---|
| 2 | // Eric Aubourg         CEA/DAPNIA/SPP   juillet 1999
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #ifndef ARCHEOPSFILE_H
 | 
|---|
| 5 | #define ARCHEOPSFILE_H
 | 
|---|
| 6 | 
 | 
|---|
| 7 | #include <stdio.h>
 | 
|---|
| 8 | #include <string>
 | 
|---|
| 9 | #include <stack>
 | 
|---|
| 10 | 
 | 
|---|
| 11 | using namespace std;
 | 
|---|
| 12 | 
 | 
|---|
| 13 | #include "ark.h"
 | 
|---|
| 14 | #include "archexc.h"
 | 
|---|
| 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,
 | 
|---|
| 32 |  // block_catalog_flash_mask = 1 << block_catalog_flash,
 | 
|---|
| 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 |   
 | 
|---|
| 52 |   void setUTCOffset(double UTCOffset=2); // StartMJD : decodage a partir du nom du bloc...
 | 
|---|
| 53 |   double getStartMJD();
 | 
|---|
| 54 |   
 | 
|---|
| 55 |   bool nextBlock();   // go to next block, true if block exists (ie not EOF)
 | 
|---|
| 56 |   bool nextBlock(long mask); // go to next block matching mask
 | 
|---|
| 57 |   bool gotValidBlock(); // current block is good
 | 
|---|
| 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();
 | 
|---|
| 63 |   string filename() {return fn;}
 | 
|---|
| 64 |   
 | 
|---|
| 65 |   
 | 
|---|
| 66 |   void pushMark();    // push current file position, and "last" blocks
 | 
|---|
| 67 |   void popMark();     // pops last file position and "last" blocks
 | 
|---|
| 68 |     
 | 
|---|
| 69 |   void grabLastBlocs(ArcheopsFile const& oldFile);
 | 
|---|
| 70 |   
 | 
|---|
| 71 |   block_type_modele*  aheadBlock();   // internal buffer
 | 
|---|
| 72 |   block_type_modele*  currentBlock(); // internal buffer
 | 
|---|
| 73 |   bool sameBlockNumAhead();
 | 
|---|
| 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 |   
 | 
|---|
| 91 |   void forceBlock(block_type_modele* blk);
 | 
|---|
| 92 |     
 | 
|---|
| 93 |   static double decodeMJD(string const& dateString); // sans tenir compte de TU-TLeg
 | 
|---|
| 94 |     
 | 
|---|
| 95 | protected:
 | 
|---|
| 96 |   BlockSet*                 blockSet;
 | 
|---|
| 97 |   stack<BlockSet*>          blockStack;
 | 
|---|
| 98 |   stack<long>               fposStack;
 | 
|---|
| 99 |   
 | 
|---|
| 100 |   void saveCurBlock();
 | 
|---|
| 101 |   void postProcessBlock();
 | 
|---|
| 102 | 
 | 
|---|
| 103 |   void swapEntete(block_type_modele* blk);
 | 
|---|
| 104 |   void swapContent(block_type_modele* blk);
 | 
|---|
| 105 |   
 | 
|---|
| 106 |   void computeMJD(string const& fname);
 | 
|---|
| 107 |   
 | 
|---|
| 108 |   bool fixBlock(block_type_modele* blk);
 | 
|---|
| 109 |   long searchNextBlock(long pos);
 | 
|---|
| 110 |     
 | 
|---|
| 111 |   int                       curKind;
 | 
|---|
| 112 |   int                       curRawKind;
 | 
|---|
| 113 |   long                      curPos;
 | 
|---|
| 114 |   long                      peekPos;
 | 
|---|
| 115 |   long                      fLen;
 | 
|---|
| 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
 | 
|---|