Action_Thermostats
        Add_AtomRandomPerturbation
        Add_SelectAtomByNameAction
        Adding_Graph_to_ChangeBondActions
        Adding_MD_integration_tests
        Adding_StructOpt_integration_tests
        AutomationFragmentation_failures
        Candidate_v1.6.1
        Candidate_v1.7.0
        ChangeBugEmailaddress
        ChemicalSpaceEvaluator
        EmpiricalPotential_contain_HomologyGraph_documentation
        Enhance_userguide
        Enhanced_StructuralOptimization
        Enhanced_StructuralOptimization_continued
        Example_ManyWaysToTranslateAtom
        Exclude_Hydrogens_annealWithBondGraph
        Fix_Verbose_Codepatterns
        ForceAnnealing_oldresults
        ForceAnnealing_with_BondGraph
        ForceAnnealing_with_BondGraph_continued
        ForceAnnealing_with_BondGraph_continued_betteresults
        ForceAnnealing_with_BondGraph_contraction-expansion
        GeometryObjects
        Gui_displays_atomic_force_velocity
        IndependentFragmentGrids_IntegrationTest
        JobMarket_RobustOnKillsSegFaults
        JobMarket_StableWorkerPool
        PythonUI_with_named_parameters
        QtGui_reactivate_TimeChanged_changes
        Recreated_GuiChecks
        StoppableMakroAction
        TremoloParser_IncreasedPrecision
        TremoloParser_MultipleTimesteps
        stable
      
      
      
| Rev | Line |   | 
|---|
| [0b990d] | 1 | /*!
 | 
|---|
 | 2 |    \file volseek.c
 | 
|---|
 | 3 |    \ingroup (PSIO)
 | 
|---|
 | 4 | */
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | #include <unistd.h>
 | 
|---|
 | 7 | #include <util/psi3/libpsio/psio.h>
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 | namespace psi3 {
 | 
|---|
 | 10 | namespace libpsio {
 | 
|---|
 | 11 | 
 | 
|---|
 | 12 | /* This is strictly used to avoid overflow errors on lseek() calls */
 | 
|---|
 | 13 | #define PSIO_BIGNUM 10000
 | 
|---|
 | 14 | 
 | 
|---|
 | 15 | /*!
 | 
|---|
 | 16 | ** PSIO_VOLSEEK()
 | 
|---|
 | 17 | **
 | 
|---|
 | 18 | ** \ingroup (PSIO)
 | 
|---|
 | 19 | */
 | 
|---|
 | 20 | int psio_volseek(psio_vol *vol, ULI page, ULI offset, ULI numvols)
 | 
|---|
 | 21 | {
 | 
|---|
 | 22 |   int stream, errcod;
 | 
|---|
 | 23 |   ULI bignum, total_offset;
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 |   bignum = PSIO_BIGNUM*numvols;
 | 
|---|
 | 26 | 
 | 
|---|
 | 27 |   stream = vol->stream;
 | 
|---|
 | 28 | 
 | 
|---|
 | 29 |   /* Set file pointer to beginning of file */
 | 
|---|
 | 30 |   errcod = lseek(stream, (ULI) 0, SEEK_SET);
 | 
|---|
 | 31 |   if(errcod == -1) return(errcod);
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 |   /* lseek() through large chunks of the file to avoid offset overflows */
 | 
|---|
 | 34 |   for(; page > bignum; page -= bignum) {
 | 
|---|
 | 35 |       total_offset = PSIO_BIGNUM * PSIO_PAGELEN;
 | 
|---|
 | 36 |       errcod = lseek(stream, total_offset, SEEK_CUR);
 | 
|---|
 | 37 |       if(errcod == -1) return(errcod);
 | 
|---|
 | 38 |     }
 | 
|---|
 | 39 | 
 | 
|---|
 | 40 |   /* Now compute the final offset including the page-relative term */ 
 | 
|---|
 | 41 |   total_offset = (ULI) page/numvols; /* This should truncate */
 | 
|---|
 | 42 |   total_offset *= PSIO_PAGELEN;
 | 
|---|
 | 43 |   total_offset += offset; /* Add the page-relative term */
 | 
|---|
 | 44 |   errcod = lseek(stream, total_offset, SEEK_CUR);
 | 
|---|
 | 45 |   if(errcod == -1) return(errcod);
 | 
|---|
 | 46 | 
 | 
|---|
 | 47 |   return(0);
 | 
|---|
 | 48 | }
 | 
|---|
 | 49 | 
 | 
|---|
 | 50 | }
 | 
|---|
 | 51 | }
 | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.