#include "hdetparasciifileio.h"
#include "hdetgeompar.h"
#include "hgeomcompositevolume.h"
#include "hgeomshapes.h"
#include "htrb3calpar.h"
#include "TClass.h"
ClassImp(HDetParAsciiFileIo)
HDetParAsciiFileIo::HDetParAsciiFileIo(fstream* f) {
  
  pFile=f;
  sepLine=
    "##############################################################################\n";
}
Bool_t HDetParAsciiFileIo::findContainer(const Text_t* name) {
  
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf];
  Text_t buf2[maxbuf];
  sprintf(buf2,"%s%s%s","[",name,"]");
  pFile->clear();
  pFile->seekg(0,ios::beg);
  while (!pFile->eof()) {
    pFile->getline(buf,maxbuf);
    if (buf[0]!='[') continue;
    if (!strncmp(buf,buf2,strlen(buf2))) break;
  }
  if (pFile->eof()) return kFALSE;
  return kTRUE;
}
Bool_t HDetParAsciiFileIo::checkAllFound(Int_t* set, Int_t setSize) {
  
  Bool_t allFound=kTRUE;
  for(Int_t i=0; i<setSize; i++) {
    if (set[i]==999) {
      set[i]=0;
      printf(" %i",i);
    }
    if (set[i]) allFound=kFALSE;
  }
  printf("\n");
  return allFound;
}
void HDetParAsciiFileIo::writeHeader(const Text_t* name, const Text_t* context,
                                     const Text_t* author, const Text_t* description) {
  
  
  pFile->write(sepLine,strlen(sepLine));
  pFile->write(fHeader.Data(),fHeader.Length());
  pFile->write(sepLine,strlen(sepLine));
  *pFile<<"["<<name<<"]\n";
  if (strlen(context)>0) *pFile<<"// Parameter Context: "<<context<<"\n";
  if (strlen(author)>0) *pFile<<"author:      "<<author<<"\n";
  TString t=description;
  if (!t.IsNull()) {
    t=t.ReplaceAll("\n"," \\\n");
    *pFile<<"description: "<<t<<"\n";
  }
  *pFile<<"//-----------------------------------------------------------"
            "-----------------\n";
}
void HDetParAsciiFileIo::readComment(const Char_t* lastBuf, HParSet* pPar) {
  
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf];
  TString s=lastBuf;
  TString pName, pVal;
  Ssiz_t n=s.First(':');
  Ssiz_t m=s.Last('\\');
  pName=s(0,n);
  if (m>0) pVal=s(n+1,m-n-1);
  else pVal=s(n+1,s.Length()-n-1);
  pVal=pVal.Strip(pVal.kLeading);
  while (m>0) {
    pVal+="\n";
    pFile->getline(buf,maxbuf);
    if (buf[0]!='/') {
      s=buf;
      m=s.Last('\\');
      if (m>0) pVal+=s(0,m);
      else pVal+=s;
    }
  }
  if (pName.CompareTo("author")==0) pPar->setAuthor(pVal.Data());
  else if ( pName.CompareTo("description")==0) pPar->setDescription(pVal.Data());
}
void HDetParAsciiFileIo::writeComment(HParSet* pPar) {
  TString t=pPar->getAuthor();
  if (!t.IsNull()) *pFile<<"author:      "<<t<<"\n";
  t=pPar->getDescription();
  if (!t.IsNull()) {
    t=t.ReplaceAll("\n"," \\\n");
    *pFile<<"description: "<<t<<"\n";
  }
}
Int_t HDetParAsciiFileIo::writeFile(HDetGeomPar* pPar) {
  if (pFile) {
    Text_t buf[4000];
    const Text_t* detName=pPar->getDetectorName();
    Text_t com1[]=
        "# Parameters describing the geometry of the ";
    Text_t com2[]="\n"
        "#\n"
        "# Format:\n"
        "#   [";
    Text_t com3[]="GeomLabPositions] lab positions of the modules:\n"
        "#      name of volume   name of reference module\n"
        "#      rotation matrix\n"
        "#      translation vector\n"
        "#\n"
        "#   [";
    Text_t com4[]="GeomVolumes] parameters of the volumes:\n"
        "#      name of volume   shape   name of mother\n"
        "#      x, y and z components of points \n"
        "#      rotation matrix\n"
        "#      translation vector\n"
        "#\n";
    pFile->write(sepLine,strlen(sepLine));
    sprintf(buf,"%s%s%s%s%s%s%s",
         com1,detName,com2,detName,com3,detName,com4);
    pFile->write(buf,strlen(buf));
    pFile->write(sepLine,strlen(sepLine));
    sprintf(buf,"[%s%s]\n",detName,"GeomLabPositions");
    pFile->write(buf,strlen(buf));
    writeComment(pPar);
    const Char_t* sl="// ------------------------------------------------------\n";
    for(Int_t m=0;m<pPar->getNumModules();m++) {
      HModGeomPar* mod=pPar->getModule(m);
      if (mod) {
        pFile->write(sl,strlen(sl));
        sprintf(buf,"%s  %s\n",mod->GetName(),mod->getRefName());
        pFile->write(buf,strlen(buf));
        writeTransform(mod->getLabTransform());
      }
    }
    pFile->write(sepLine,strlen(sepLine));
    sprintf(buf,"[%s%s]\n",detName,"GeomVolumes");
    pFile->write(buf,strlen(buf));
    HGeomShapes* shapes=pPar->getShapes();
    for(Int_t m=0;m<pPar->getNumRefModules();m++) {
      HGeomCompositeVolume* mod=pPar->getRefVolume(m);
      if (mod) {
        writeVolume(mod,shapes);
        for(Int_t c=0;c<mod->getNumComponents();c++) {
          HGeomVolume* vol=mod->getComponent(c);
          if (vol&&strlen(vol->GetName())>0) writeVolume(vol,shapes);
        }
      }
    }
    pFile->write(sepLine,strlen(sepLine));
    pPar->setChanged(kFALSE);
    return 1;
  }
  cerr<<"Output is not writable"<<endl;
  return -1;
}  
Bool_t HDetParAsciiFileIo::read(HDetGeomPar* pPar,Int_t* set) {
  if (!pFile) return kFALSE;
  pFile->clear();
  pFile->seekg(0,ios::beg);
  const Char_t* detName=pPar->getDetectorName();
  TString key1(detName);
  key1+="GeomLabPositions";
  Bool_t allFound=readLabPositions(key1,pPar,set,pPar->getMaxSectors(),
                                   pPar->getMaxModules());
  if (pPar->isFirstInitialization() && allFound) {
    TString key2(detName);
    key2+="GeomVolumes";
    if (readVolumes(key2,pPar)==kFALSE) allFound=kFALSE;
  }
  if (allFound) {
    pPar->setInputVersion(1,inputNumber);
    pPar->setChanged();
    pPar->setNotFirstInit();
    printf("%s initialized from Ascii file\n",pPar->GetName());
  } else pPar->setInputVersion(-1,inputNumber);
  return allFound;  
}
Bool_t HDetParAsciiFileIo::readLabPositions(const Text_t* keyName,
            HDetGeomPar* pPar,Int_t* set, Int_t maxSec, Int_t maxMod) {
  
  if (!findContainer(keyName)) return kFALSE;
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf], name[10], ref[10];
  Int_t s=-1,m,n;
  HGeomTransform transform;
  Bool_t all=kFALSE;
  while (!all && !pFile->eof()) {             
    pFile->getline(buf,maxbuf);
    if (buf[0]=='#') all=kTRUE;
    else {
      if (buf[0]!='/') {
        if (strstr(buf,":")) readComment(buf,pPar);
        else {
          sscanf(buf,"%s%s",name,ref);
          readTransform(transform);
          if (maxSec>0) s=pPar->getSecNum(name);
          m=pPar->getModNumInMod(name);
          if (maxSec>0) n=s*maxMod+m;
          else n=m;
          HModGeomPar* mod=0;
          if (set[n] && (mod=pPar->getModule(s,m))) {
            mod->getLabTransform().setTransform(transform);
            if (pPar->isFirstInitialization()) {
              mod->SetName(name);
              mod->setRefName(ref);
              Int_t mr=pPar->getModNumInMod(ref);
              HGeomCompositeVolume* refMod=pPar->getRefVolume(mr);
              if (refMod==0) {
                Int_t num=pPar->getNumComponents();
                refMod=new HGeomCompositeVolume(num);
                refMod->SetName(ref);
                pPar->addRefVolume(refMod,mr);
              }
              mod->setVolume(refMod);
            }
            set[n]=999;
          }
        }
      }
    }
  }
  Int_t setSize=0;
  if (maxSec>0) setSize=maxSec*maxMod;
  else setSize=maxMod;
  return checkAllFound(set,setSize);
}
Bool_t HDetParAsciiFileIo::readVolumes(const Text_t* keyName,HDetGeomPar* pPar) {
  
  if (!findContainer(keyName)) return kFALSE;
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf], name[10], mother[10], shape[10];
  HGeomVolume volume;
  HGeomShapes* shapes=pPar->getShapes();
  Bool_t all=kFALSE;
  while (!all && !pFile->eof()) {             
    pFile->getline(buf,maxbuf);
    if (buf[0]=='#') all=kTRUE;
    else {
      if (buf[0]!='/') {
        sscanf(buf,"%s%s%s",name,shape,mother);
        TString s(shape);
        s.ToUpper();
        if (s.Length()==3) s.Append(' ');
        volume.setShape(s);
        volume.setMother(mother);
        Int_t nPoints=shapes->readPoints(pFile,&volume);
        if (nPoints==0) return kFALSE;
        HGeomTransform& t=volume.getTransform();
        readTransform(t);
        Int_t m, l;
        if (strcmp(mother,"CAVE")==0) {
          m=pPar->getModNumInMod(name);
          l=-1;
        } 
        else {
          m=pPar->getModNumInComp(name);
          l=pPar->getCompNum(name);
        }
        HGeomCompositeVolume* volu=pPar->getRefVolume(m);
        if (volu) {
          if (l==-1) {
            if (volu->getNumPoints()==0) volu->setVolumePar(volume);
          } else {
            HGeomVolume* v=volu->getComponent(l);
            if (v->getNumPoints()==0) {
              v->SetName(name);
              v->setVolumePar(volume);
            } 
          }
        }
      }
    }
  }
  Bool_t allFound=kTRUE;
  HGeomCompositeVolume* v;
  for(Int_t i=0;i<pPar->getNumRefModules();i++) {
    v=pPar->getRefVolume(i);
    if (v && v->getNumPoints()==0) allFound=kFALSE;
  }
  return allFound;
}
void HDetParAsciiFileIo::readTransform(HGeomTransform& tf) {
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf];
  Double_t r[9], t[3];
  pFile->getline(buf,maxbuf);
  sscanf(buf,"%lf%lf%lf%lf%lf%lf%lf%lf%lf",&r[0],&r[1],&r[2],
         &r[3],&r[4],&r[5],&r[6],&r[7],&r[8]);
  pFile->getline(buf,maxbuf);
  sscanf(buf,"%lf%lf%lf",&t[0],&t[1],&t[2]);
  tf.setRotMatrix(r);
  tf.setTransVector(t);
}
void HDetParAsciiFileIo::writeTransform(const HGeomTransform& tf) {
  Text_t buf[155];
  const HGeomRotation& r=tf.getRotMatrix();
  sprintf(buf,"%10.7f%11.7f%11.7f%11.7f%11.7f%11.7f%11.7f%11.7f%11.7f\n",
            r(0),r(1),r(2),r(3),r(4),r(5),r(6),r(7),r(8));
  pFile->write(buf,strlen(buf));
  const HGeomVector& v=tf.getTransVector();
  sprintf(buf,"%9.3f%10.3f%10.3f\n",v(0),v(1),v(2));
  pFile->write(buf,strlen(buf));
}
Bool_t HDetParAsciiFileIo::readVolume(HGeomVolume* volu,HGeomShapes* shapes,
                                    Text_t* buf) {
  Text_t name[10], mother[10], shape[10];
  sscanf(buf,"%s%s%s",name,shape,mother);
  volu->SetName(name);
  volu->setMother(mother);
  TString s(shape);
  s.ToUpper();
  if (s.Length()==3) s.Append(' ');
  volu->setShape(s);
  Int_t nPoints=shapes->readPoints(pFile,volu);
  if (nPoints==0) return kFALSE;
  HGeomTransform& t=volu->getTransform();
  readTransform(t);
  return kTRUE;
}
void HDetParAsciiFileIo::writeVolume(HGeomVolume* volu,HGeomShapes* shapes) {
  Text_t buf[120];
  sprintf(buf,"%s\n",
          "// ------------------------------------------------------");
  pFile->write(buf,strlen(buf));
  sprintf(buf,"%s  %s  %s\n",volu->GetName(),
            (const Char_t*)volu->getShape(),(const Char_t*)volu->getMother());
  pFile->write(buf,strlen(buf));
  shapes->writePoints(pFile,volu);
  writeTransform(volu->getTransform());
}
Bool_t HDetParAsciiFileIo::read(HTrb3Calpar* pPar) {
  if (!findContainer(pPar->GetName())) return kFALSE;
  pPar->clear();
  const Int_t maxbuf = 155;
  Text_t buf[maxbuf], key1[30], key2[30], key3[30], key4[30], key5[30];
  const Char_t delim[]=" ";
  Int_t address=0, subevid=0, nChan=0, nBin=0, nData=0, nEdges;
  Bool_t rc = kTRUE;
  while (!pFile->eof() && rc) {
    pFile->getline(buf, maxbuf);
    if (buf[0] == '#') break;
    if (buf[0] != '/' && buf[0] != '\0') {
      if (strstr(buf,"trbnet-address")) {
        Int_t n = sscanf(buf,"%s 0x%x %s 0x%x %s %i %s %i %s %i",key1,&address,key2,&subevid,key3,&nEdges,key4,&nChan,key5,&nBin);
        if (n != 10) {
          Error("read(HTrb3Calpar*)","Invalid data in line %s\n", buf);
          rc = kFALSE;
          break;
        }
        HTrb3CalparTdc* tdc = pPar->addTdc(address);
        nData = tdc->makeArray(subevid,nEdges,nChan,nBin);
        Float_t* arr = tdc->getBinsPar();
        Int_t l = 0;
        if (nData>0 && arr) {
          do {
            pFile->getline(buf,maxbuf);
            if (strstr(buf,"trbnet-address")) {
              rc = kFALSE;
              break;
            }
            Char_t* ss=strtok(buf,delim);
            while (ss!=0 && l<nData) {
              sscanf(ss,"%f",&arr[l]);
              l++;
              ss=strtok(NULL,delim);
            }
          } while (l<nData && buf[0]!='#' && buf[0]!='/' && !pFile->eof());
        }
        if (l<nData) {
          Error("read(HTrb3Calpar*)",
                "Not enough data for trbnet_address 0x%x\n", address );
          rc = kFALSE;
        }
      }
    }
  }
  if (rc && address > 0) {
    pPar->setInputVersion(1, inputNumber);
    pPar->setChanged();
    printf("%s initialized from Ascii file\n", pPar->GetName());
    return kTRUE;
  }
  return kFALSE;
}
 hdetparasciifileio.cc:100  hdetparasciifileio.cc:101  hdetparasciifileio.cc:102  hdetparasciifileio.cc:103  hdetparasciifileio.cc:104  hdetparasciifileio.cc:105  hdetparasciifileio.cc:106  hdetparasciifileio.cc:107  hdetparasciifileio.cc:108  hdetparasciifileio.cc:109  hdetparasciifileio.cc:110  hdetparasciifileio.cc:111  hdetparasciifileio.cc:112  hdetparasciifileio.cc:113  hdetparasciifileio.cc:114  hdetparasciifileio.cc:115  hdetparasciifileio.cc:116  hdetparasciifileio.cc:117  hdetparasciifileio.cc:118  hdetparasciifileio.cc:119  hdetparasciifileio.cc:120  hdetparasciifileio.cc:121  hdetparasciifileio.cc:122  hdetparasciifileio.cc:123  hdetparasciifileio.cc:124  hdetparasciifileio.cc:125  hdetparasciifileio.cc:126  hdetparasciifileio.cc:127  hdetparasciifileio.cc:128  hdetparasciifileio.cc:129  hdetparasciifileio.cc:130  hdetparasciifileio.cc:131  hdetparasciifileio.cc:132  hdetparasciifileio.cc:133  hdetparasciifileio.cc:134  hdetparasciifileio.cc:135  hdetparasciifileio.cc:136  hdetparasciifileio.cc:137  hdetparasciifileio.cc:138  hdetparasciifileio.cc:139  hdetparasciifileio.cc:140  hdetparasciifileio.cc:141  hdetparasciifileio.cc:142  hdetparasciifileio.cc:143  hdetparasciifileio.cc:144  hdetparasciifileio.cc:145  hdetparasciifileio.cc:146  hdetparasciifileio.cc:147  hdetparasciifileio.cc:148  hdetparasciifileio.cc:149  hdetparasciifileio.cc:150  hdetparasciifileio.cc:151  hdetparasciifileio.cc:152  hdetparasciifileio.cc:153  hdetparasciifileio.cc:154  hdetparasciifileio.cc:155  hdetparasciifileio.cc:156  hdetparasciifileio.cc:157  hdetparasciifileio.cc:158  hdetparasciifileio.cc:159  hdetparasciifileio.cc:160  hdetparasciifileio.cc:161  hdetparasciifileio.cc:162  hdetparasciifileio.cc:163  hdetparasciifileio.cc:164  hdetparasciifileio.cc:165  hdetparasciifileio.cc:166  hdetparasciifileio.cc:167  hdetparasciifileio.cc:168  hdetparasciifileio.cc:169  hdetparasciifileio.cc:170  hdetparasciifileio.cc:171  hdetparasciifileio.cc:172  hdetparasciifileio.cc:173  hdetparasciifileio.cc:174  hdetparasciifileio.cc:175  hdetparasciifileio.cc:176  hdetparasciifileio.cc:177  hdetparasciifileio.cc:178  hdetparasciifileio.cc:179  hdetparasciifileio.cc:180  hdetparasciifileio.cc:181  hdetparasciifileio.cc:182  hdetparasciifileio.cc:183  hdetparasciifileio.cc:184  hdetparasciifileio.cc:185  hdetparasciifileio.cc:186  hdetparasciifileio.cc:187  hdetparasciifileio.cc:188  hdetparasciifileio.cc:189  hdetparasciifileio.cc:190  hdetparasciifileio.cc:191  hdetparasciifileio.cc:192  hdetparasciifileio.cc:193  hdetparasciifileio.cc:194  hdetparasciifileio.cc:195  hdetparasciifileio.cc:196  hdetparasciifileio.cc:197  hdetparasciifileio.cc:198  hdetparasciifileio.cc:199  hdetparasciifileio.cc:200  hdetparasciifileio.cc:201  hdetparasciifileio.cc:202  hdetparasciifileio.cc:203  hdetparasciifileio.cc:204  hdetparasciifileio.cc:205  hdetparasciifileio.cc:206  hdetparasciifileio.cc:207  hdetparasciifileio.cc:208  hdetparasciifileio.cc:209  hdetparasciifileio.cc:210  hdetparasciifileio.cc:211  hdetparasciifileio.cc:212  hdetparasciifileio.cc:213  hdetparasciifileio.cc:214  hdetparasciifileio.cc:215  hdetparasciifileio.cc:216  hdetparasciifileio.cc:217  hdetparasciifileio.cc:218  hdetparasciifileio.cc:219  hdetparasciifileio.cc:220  hdetparasciifileio.cc:221  hdetparasciifileio.cc:222  hdetparasciifileio.cc:223  hdetparasciifileio.cc:224  hdetparasciifileio.cc:225  hdetparasciifileio.cc:226  hdetparasciifileio.cc:227  hdetparasciifileio.cc:228  hdetparasciifileio.cc:229  hdetparasciifileio.cc:230  hdetparasciifileio.cc:231  hdetparasciifileio.cc:232  hdetparasciifileio.cc:233  hdetparasciifileio.cc:234  hdetparasciifileio.cc:235  hdetparasciifileio.cc:236  hdetparasciifileio.cc:237  hdetparasciifileio.cc:238  hdetparasciifileio.cc:239  hdetparasciifileio.cc:240  hdetparasciifileio.cc:241  hdetparasciifileio.cc:242  hdetparasciifileio.cc:243  hdetparasciifileio.cc:244  hdetparasciifileio.cc:245  hdetparasciifileio.cc:246  hdetparasciifileio.cc:247  hdetparasciifileio.cc:248  hdetparasciifileio.cc:249  hdetparasciifileio.cc:250  hdetparasciifileio.cc:251  hdetparasciifileio.cc:252  hdetparasciifileio.cc:253  hdetparasciifileio.cc:254  hdetparasciifileio.cc:255  hdetparasciifileio.cc:256  hdetparasciifileio.cc:257  hdetparasciifileio.cc:258  hdetparasciifileio.cc:259  hdetparasciifileio.cc:260  hdetparasciifileio.cc:261  hdetparasciifileio.cc:262  hdetparasciifileio.cc:263  hdetparasciifileio.cc:264  hdetparasciifileio.cc:265  hdetparasciifileio.cc:266  hdetparasciifileio.cc:267  hdetparasciifileio.cc:268  hdetparasciifileio.cc:269  hdetparasciifileio.cc:270  hdetparasciifileio.cc:271  hdetparasciifileio.cc:272  hdetparasciifileio.cc:273  hdetparasciifileio.cc:274  hdetparasciifileio.cc:275  hdetparasciifileio.cc:276  hdetparasciifileio.cc:277  hdetparasciifileio.cc:278  hdetparasciifileio.cc:279  hdetparasciifileio.cc:280  hdetparasciifileio.cc:281  hdetparasciifileio.cc:282  hdetparasciifileio.cc:283  hdetparasciifileio.cc:284  hdetparasciifileio.cc:285  hdetparasciifileio.cc:286  hdetparasciifileio.cc:287  hdetparasciifileio.cc:288  hdetparasciifileio.cc:289  hdetparasciifileio.cc:290  hdetparasciifileio.cc:291  hdetparasciifileio.cc:292  hdetparasciifileio.cc:293  hdetparasciifileio.cc:294  hdetparasciifileio.cc:295  hdetparasciifileio.cc:296  hdetparasciifileio.cc:297  hdetparasciifileio.cc:298  hdetparasciifileio.cc:299  hdetparasciifileio.cc:300  hdetparasciifileio.cc:301  hdetparasciifileio.cc:302  hdetparasciifileio.cc:303  hdetparasciifileio.cc:304  hdetparasciifileio.cc:305  hdetparasciifileio.cc:306  hdetparasciifileio.cc:307  hdetparasciifileio.cc:308  hdetparasciifileio.cc:309  hdetparasciifileio.cc:310  hdetparasciifileio.cc:311  hdetparasciifileio.cc:312  hdetparasciifileio.cc:313  hdetparasciifileio.cc:314  hdetparasciifileio.cc:315  hdetparasciifileio.cc:316  hdetparasciifileio.cc:317  hdetparasciifileio.cc:318  hdetparasciifileio.cc:319  hdetparasciifileio.cc:320  hdetparasciifileio.cc:321  hdetparasciifileio.cc:322  hdetparasciifileio.cc:323  hdetparasciifileio.cc:324  hdetparasciifileio.cc:325  hdetparasciifileio.cc:326  hdetparasciifileio.cc:327  hdetparasciifileio.cc:328  hdetparasciifileio.cc:329  hdetparasciifileio.cc:330  hdetparasciifileio.cc:331  hdetparasciifileio.cc:332  hdetparasciifileio.cc:333  hdetparasciifileio.cc:334  hdetparasciifileio.cc:335  hdetparasciifileio.cc:336  hdetparasciifileio.cc:337  hdetparasciifileio.cc:338  hdetparasciifileio.cc:339  hdetparasciifileio.cc:340  hdetparasciifileio.cc:341  hdetparasciifileio.cc:342  hdetparasciifileio.cc:343  hdetparasciifileio.cc:344  hdetparasciifileio.cc:345  hdetparasciifileio.cc:346  hdetparasciifileio.cc:347  hdetparasciifileio.cc:348  hdetparasciifileio.cc:349  hdetparasciifileio.cc:350  hdetparasciifileio.cc:351  hdetparasciifileio.cc:352  hdetparasciifileio.cc:353  hdetparasciifileio.cc:354  hdetparasciifileio.cc:355  hdetparasciifileio.cc:356  hdetparasciifileio.cc:357  hdetparasciifileio.cc:358  hdetparasciifileio.cc:359  hdetparasciifileio.cc:360  hdetparasciifileio.cc:361  hdetparasciifileio.cc:362  hdetparasciifileio.cc:363  hdetparasciifileio.cc:364  hdetparasciifileio.cc:365  hdetparasciifileio.cc:366  hdetparasciifileio.cc:367  hdetparasciifileio.cc:368  hdetparasciifileio.cc:369  hdetparasciifileio.cc:370  hdetparasciifileio.cc:371  hdetparasciifileio.cc:372  hdetparasciifileio.cc:373  hdetparasciifileio.cc:374  hdetparasciifileio.cc:375  hdetparasciifileio.cc:376  hdetparasciifileio.cc:377  hdetparasciifileio.cc:378  hdetparasciifileio.cc:379  hdetparasciifileio.cc:380  hdetparasciifileio.cc:381  hdetparasciifileio.cc:382  hdetparasciifileio.cc:383  hdetparasciifileio.cc:384  hdetparasciifileio.cc:385  hdetparasciifileio.cc:386  hdetparasciifileio.cc:387  hdetparasciifileio.cc:388  hdetparasciifileio.cc:389  hdetparasciifileio.cc:390  hdetparasciifileio.cc:391  hdetparasciifileio.cc:392  hdetparasciifileio.cc:393  hdetparasciifileio.cc:394  hdetparasciifileio.cc:395  hdetparasciifileio.cc:396  hdetparasciifileio.cc:397  hdetparasciifileio.cc:398  hdetparasciifileio.cc:399  hdetparasciifileio.cc:400  hdetparasciifileio.cc:401  hdetparasciifileio.cc:402  hdetparasciifileio.cc:403  hdetparasciifileio.cc:404  hdetparasciifileio.cc:405  hdetparasciifileio.cc:406  hdetparasciifileio.cc:407  hdetparasciifileio.cc:408  hdetparasciifileio.cc:409  hdetparasciifileio.cc:410  hdetparasciifileio.cc:411  hdetparasciifileio.cc:412  hdetparasciifileio.cc:413  hdetparasciifileio.cc:414  hdetparasciifileio.cc:415  hdetparasciifileio.cc:416  hdetparasciifileio.cc:417  hdetparasciifileio.cc:418  hdetparasciifileio.cc:419  hdetparasciifileio.cc:420  hdetparasciifileio.cc:421  hdetparasciifileio.cc:422  hdetparasciifileio.cc:423  hdetparasciifileio.cc:424  hdetparasciifileio.cc:425