source: ThirdParty/mpqc_open/src/lib/util/psi3/libpsio/read_block.cc@ 00f983

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck 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 JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_levmar Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 00f983 was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 1.8 KB
Line 
1/*!
2 \file read_block.c
3 \ingroup (PSIO)
4*/
5
6#include <unistd.h>
7#include <string.h>
8#include <util/psi3/libpsio/psio.h>
9
10namespace psi3 {
11namespace libpsio {
12
13/*!
14** PSIO_READ_BLOCK(): Read a block of data.
15**
16** \param unit = file number to read from
17** \param key = key to search for
18** \param buffer = where to put data
19** \param blksiz = ??
20** \param start_blk = ??
21** \param end_blk = ??
22**
23** \ingroup (PSIO)
24*/
25int psio_read_block(unsigned int unit, char *key, char *buffer, ULI blksiz,
26 ULI start_blk, ULI end_blk)
27{
28 ULI size, shift;
29 psio_ud *this_unit;
30 psio_address sadd, eadd;
31 psio_tocentry *this_entry;
32
33 this_unit = &(psio_unit[unit]);
34
35 /* Find the entry in the TOC */
36 this_entry = psio_tocscan(unit, key);
37
38 if(this_entry == NULL) {
39 fprintf(stderr, "PSIO_ERROR: Can't find TOC Entry %s\n", key);
40 psio_error(unit,PSIO_ERROR_NOTOCENT);
41 }
42 else {
43 size = (end_blk - start_blk + 1) * blksiz; /* The total buffer size */
44 shift = start_blk * blksiz; /* Number of bytes to shift from start */
45
46 /* Compute the starting page and offset for the block */
47 sadd = psio_get_address(this_entry->sadd, shift);
48
49 /* Make sure the block starts and ends within the entry */
50 if((sadd.page > this_entry->eadd.page))
51 psio_error(unit,PSIO_ERROR_BLKSTART);
52 else if((sadd.page == this_entry->eadd.page) &&
53 (sadd.offset > this_entry->eadd.offset))
54 psio_error(unit,PSIO_ERROR_BLKSTART);
55
56 eadd = psio_get_address(sadd, size);
57 if((eadd.page > this_entry->eadd.page))
58 psio_error(unit,PSIO_ERROR_BLKEND);
59 else if((eadd.page == this_entry->eadd.page) &&
60 (eadd.offset > this_entry->eadd.offset))
61 psio_error(unit,PSIO_ERROR_BLKEND);
62
63 /* Now read the actual data from the unit */
64 psio_rw(unit, buffer, sadd, size, 0);
65 }
66
67 return(0);
68}
69
70}
71}
Note: See TracBrowser for help on using the repository browser.