/// /// Compute the file name of the start parameter file. /// Format of returned filename: /// /// plots/par/basename_combinername[_+N][_-N]_var1[_var2]_start.dat /// /// \param c - Combiner object /// \return - filename /// TString FileNameBuilder::getFileNameStartPar(const Combiner *c) { TString name = "plots/par/"; name += getFileBaseName(c); name += "_start.dat"; return name; }
/// /// Compute the file name of the parameter file defining the Asimov /// point where the Asimov toy is generated at. /// The combiner name will be followed by the Asimov addition (getAsimovCombinerNameAddition()), /// but without the number denoting the Asimov point in the file, as the file contains all points. /// Format of returned filename: /// /// plots/par/basename_combinernameAsimov[_+N][_-N]_var1[_var2]_genpoints.dat /// /// \param c - Combiner object /// \return - filename /// TString FileNameBuilder::getFileNameAsimovPar(const Combiner *c) { TString name = "plots/par/"; name += getFileBaseName(c); // remove any string after the "Asimov" token and the first "_" after that // e.g.: "combinerAsimov3_" -> "combinerAsimov_" int startOfToken = name.Index(m_asimov); int startOfFirstUnderscore = name.Index("_",startOfToken); int length = startOfFirstUnderscore-(startOfToken+m_asimov.Sizeof())+1; name.Replace(startOfToken+m_asimov.Sizeof()-1, length, ""); name += "_genpoints.dat"; return name; }
/* * regRead * Open the specified registory. * Mode options are:- * * default - Exists in memory * meREGMODE_RELOAD - Delete the existing file, * meREGMODE_MERGE - Merge the existing file. */ meRegNode * regRead(meUByte *rname, meUByte *fname, int mode) { meLine hlp, *lp ; meUByte *fn ; meRegNode *rnp; /* Root node pointer */ meUInt flags ; /* Find the registry entry */ if(*rname == '/') rname++; if ((rnp = rnodeFind (&root, rname)) != NULL) { /* if not merging or reloading then we've can use the existing node */ if (!(mode & (meREGMODE_MERGE|meREGMODE_RELOAD))) goto finished; fn = rnp->value ; } else fn = NULL ; if(mode & meREGMODE_FROOT) { /* find the registry file */ /* have we been given a valid file name ? */ if ((fname != NULL) && (fname [0] != '\0')) { meUByte filename[meBUF_SIZE_MAX] ; /* Filename */ if(fileLookup(fname,(meUByte *)".erf",meFL_CHECKDOT|meFL_USESRCHPATH,filename)) fn = meStrdup(filename) ; else fn = meStrdup(fname) ; } /* else use the old file name (if there is one) else fail */ else if(fn == NULL) { mlwrite(MWABORT|MWWAIT,(meUByte *)"[No file name given to load]") ; return NULL ; } /* Load in the registry file */ flags = meRWFLAG_SILENT ; hlp.next = &hlp ; hlp.prev = &hlp ; if(mode & meREGMODE_CRYPT) { meUByte s1[meBUF_SIZE_MAX], *s2 ; int len ; meCrypt(NULL,0); meStrcpy(s1,getFileBaseName(fn)) ; len = meStrlen(s1) + 1 ; meCrypt(s1,len) ; if((s2=meUserName) == NULL) s2 = (meUByte *) "" ; meStrcpy(s1+len,s2) ; meCrypt(s1,len+meStrlen(s1+len)+1) ; flags |= meRWFLAG_CRYPT ; } if((ffReadFile(fn,flags,NULL,&hlp,0,0,0) == meABORT) && !(mode & meREGMODE_CREATE)) { mlwrite (MWABORT|MWWAIT,(meUByte *)"[Cannot load registry file %s]", fname); return NULL ; } lp = &hlp ; } else lp = frameCur->bufferCur->baseLine ; if ((rnp != NULL) && (mode & meREGMODE_RELOAD)) { /* Want to replace with new one. so delete old */ if(fn == rnp->value) rnp->value = NULL ; rnodeUnlink (rnp); rnodeDelete (rnp); rnp = NULL; } /* Construct the node for the file node */ if (rnp == NULL) { /* Construct the node */ if((rnp = regSet (&root, rname, NULL)) == NULL) return NULL ; rnp->mode = 0; } /* set the new file name */ if(rnp->value != fn) { meNullFree(rnp->value) ; rnp->value = fn ; } /* Now parse the registry file */ parseFile(rnp, lp) ; if(mode & meREGMODE_FROOT) meLineLoopFree(lp,0) ; finished: rnp->mode |= mode & meREGMODE_STORE_MASK ; return rnp ; }
/* * regSave * Save the registry back to file */ int regSave(meRegNode *rnp, meUByte *fname, int mode) { meRegNode *rr ; meInt ss=meTRUE, level=0, lineCount, charCount ; meUInt flags ; if(mode & meREGMODE_FROOT) { /* Find the filename */ if ((fname == NULL) || (fname[0] == '\0')) { fname = NULL; if(rnp->mode & meREGMODE_FROOT) fname = rnp->value; /* Use the default file name */ if(fname == NULL) return mlwrite(MWABORT|MWPAUSE,(meUByte *)"Registry: No file name specified on save"); } flags = meRWFLAG_WRITE ; if(mode & meREGMODE_BACKUP) flags |= meRWFLAG_BACKUP ; if(mode & meREGMODE_CRYPT) { meUByte s1[meBUF_SIZE_MAX], *s2 ; int len ; meCrypt(NULL,0); meStrcpy(s1,getFileBaseName(fname)) ; len = meStrlen(s1) + 1 ; meCrypt(s1,len) ; if((s2=meUserName) == NULL) s2 = (meUByte *) "" ; meStrcpy(s1+len,s2) ; meCrypt(s1,len+meStrlen(s1+len)+1) ; flags |= meRWFLAG_CRYPT ; } /* Open the file */ if(ffWriteFileOpen(fname,flags,NULL) <= 0) return meABORT ; /* Add a recognition string to the header */ if(!(mode & meREGMODE_CRYPT)) ss = ffWriteFileWrite(12,(meUByte *) ";-!- erf -!-",1) ; } else { mode &= ~meREGMODE_CRYPT ; lineCount = 0 ; charCount = 0 ; } /* Recurse the children of the node and write to file */ rr = rnp->child ; while((ss > 0) && (rr != NULL)) { meUByte buff[4096] ; int len ; /* Print the node */ if((len = level) != 0) memset(buff,' ',len) ; buff[len++] = '"' ; len = expandexp(-1,rr->name,4096-11,len,buff,-1,NULL,meEXPAND_BACKSLASH|meEXPAND_FFZERO|meEXPAND_PRINTABLE) ; buff[len++] = '"' ; if (rr->mode & (meREGMODE_HIDDEN|meREGMODE_INTERNAL)) { buff[len++] = ' ' ; buff[len++] = '0' + (rr->mode & (meREGMODE_HIDDEN|meREGMODE_INTERNAL)) ; } if (rr->value != NULL) { buff[len++] = ' ' ; buff[len++] = '=' ; buff[len++] = ' ' ; buff[len++] = '"' ; len = expandexp(-1,rr->value,4096-4,len,buff,-1,NULL,meEXPAND_BACKSLASH|meEXPAND_FFZERO|meEXPAND_PRINTABLE) ; buff[len++] = '"' ; } /* write open '{' if it has children */ if (rr->child != NULL) { buff[len++] = ' ' ; buff[len++] = '{' ; } if((mode & meREGMODE_FROOT) == 0) { buff[len] = '\0' ; if((ss = addLine(frameCur->windowCur->dotLine,buff)) <= 0) break ; lineCount += ss ; charCount += len + 1 ; } else if((ss = ffWriteFileWrite(len,buff,1)) <= 0) break ; /* Descend child */ if (rr->child != NULL) { rr = rr->child; level++; continue; } /* Ascend the tree */ for (;;) { /* Move to sibling */ if (rr->next != NULL) { rr = rr->next; break; } if (rr->parent != NULL) { if (--level < 0) { rr = NULL; break; } rr = rr->parent; /* as we are assending the tree, at least the first 'level' * number of chars in buffer must be ' 's so just splat in the '}' */ len = level ; buff[len++] = '}' ; if((mode & meREGMODE_FROOT) == 0) { buff[len] = '\0' ; if((ss = addLine(frameCur->windowCur->dotLine,buff)) <= 0) break ; lineCount += ss ; charCount += len + 1 ; } else if((ss = ffWriteFileWrite(len,buff,1)) <= 0) break ; } } } if(mode & meREGMODE_FROOT) { if(ffWriteFileClose(fname,meRWFLAG_WRITE,NULL) <= 0) return meABORT ; rnp->mode &= ~meREGMODE_CHANGE; } else { meWindow *wp ; level = frameCur->windowCur->dotLineNo ; frameCur->bufferCur->lineCount += lineCount ; meFrameLoopBegin() ; for(wp=loopFrame->windowList; wp!=NULL; wp=wp->next) { if (wp->buffer == frameCur->bufferCur) { if(wp->dotLineNo >= level) wp->dotLineNo += lineCount ; if(wp->markLineNo >= level) wp->markLineNo += lineCount ; wp->updateFlags |= WFMAIN|WFMOVEL ; } } meFrameLoopEnd() ; frameCur->windowCur->dotOffset = 0 ; #if MEOPT_UNDO meUndoAddInsChars(charCount) ; #endif if(ss <= 0) return mlwrite(MWABORT|MWPAUSE,(meUByte *)"[Failed to write registry %s]",fname) ; } return meTRUE ; }
TString FileNameBuilder::getFileBaseName(const MethodAbsScan *s) { return getFileBaseName(s->getCombiner()); }