#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