1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
.\" gd_getdata.3. The gd_getdata man page.
.\"
.\" Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016 D. V. Wiebe
.\"
.\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.\"
.\" This file is part of the GetData project.
.\"
.\" Permission is granted to copy, distribute and/or modify this document
.\" under the terms of the GNU Free Documentation License, Version 1.2 or
.\" any later version published by the Free Software Foundation; with no
.\" Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
.\" Texts. A copy of the license is included in the `COPYING.DOC' file
.\" as part of this distribution.
.\"
.TH gd_seek 3 "25 December 2016" "Version 0.10.0" "GETDATA"
.SH NAME
gd_seek \(em reposition a Dirfile field pointer
.SH SYNOPSIS
.SC
.B #include <getdata.h>
.HP
.BI "off_t gd_seek(DIRFILE *" dirfile ", const char *" field_code ", off_t"
.IB frame_num ", off_t " sample_num ", int " flags );
.EC
.SH DESCRIPTION
The
.FN gd_seek
function changes the position of the I/O pointer associated with the field
.ARG field_code
in the dirfile(5) database specified by
.ARG dirfile .
In normal operation,
.FN gd_seek
advances the field I/O pointer
.ARG frame_num
frames plus
.ARG sample_num
samples from the origin point specified in
.ARG flags ,
which should contain one of
.BR GD_SEEK_SET ", " GD_SEEK_CUR ,
or
.BR GD_SEEK_END ,
indicating, respectively, sample zero, the current position of the
field pointer, and the location of the end-of-field marker (see
.F3 gd_eof ).
In addition to one of the symbols above, the
.ARG flags
parameter may also, optionally, be bitwise or'd with
.BR GD_SEEK_WRITE ,
which will result in the field being padded (with zero for integer types, or a
IEEE-754 conforming not-a-number otherwise) in the event of seeking past the
end-of-field marker.
The effect of attempting to seek past the end-of-field is encoding specific.
Some encodings don't actually add the padding requested by
.B GD_SEEK_WRITE
unless a subsequent
.F3 gd_putdata
call is used to add more data to the field at the new end-of-field. Other
encodings add the padding, advancing the end-of-field, regardless of subsequent
writes. Similarly, attempting to seek past the end-of-field marker in read mode
(without specifying
.BR GD_SEEK_WRITE )
is also encoding specific: in some encodings the field pointer will be moved
past the end-of-field marker, while in others, it will be repositioned to the
end of field. Check the return value to determine the result.
In general,
.B GD_SEEK_WRITE
should be used on
.FN gd_seek
calls before a write via
.F3 gd_putdata ,
while calls before a read via
.F3 gd_getdata
should omit the
.B GD_SEEK_WRITE
flag. So the following:
.IP
.SC
.BI "gd_seek(" dirfile ", " field_code ", " a ", " b ,
.B GD_SEEK_SET | GD_SEEK_WRITE);
.br
.BI "gd_putdata(" dirfile ", " field_code ", GD_HERE, 0, " c ", " d ", " type ,
.IB data );
.EC
.P
is equivalent to:
.IP
.SC
.BI "gd_putdata(" dirfile ", " field_code ", " a ", " b ", " c ", " d ,
.IB type ", " data );
.EC
.P
and, similarly,
.IP
.SC
.BI "gd_seek(" dirfile ", " field_code ", " a ", " b ", GD_SEEK_SET);"
.br
.BI "gd_getdata(" dirfile ", " field_code ", GD_HERE, 0, " c ", " d ", " type ,
.IB data );
.EC
.P
is equivalent to:
.IP
.SC
.BI "gd_getdata(" dirfile ", " field_code ", " a ", " b ", " c ", " d ,
.IB type ", " data );
.EC
.P
Only
.B RAW
fields (and the implicit
.I INDEX
field) have field I/O pointers associated with them. Calling
.FN gd_seek
on a derived field will move the field pointers of all of the field's inputs.
It is possible to create derived fields which simultaneously read from different
places of the same input field. Calling
.FN gd_seek
on such a field will result in an error.
.SH RETURN VALUE
Upon successful completion,
.FN gd_seek
returns a non-negative integer indicating the I/O position, in samples, of the
specified field after performing the seek. On error, it returns a
negative-valued error code. Possible error codes are:
.DD GD_E_ALLOC
The library was unable to allocate memory.
.DD GD_E_ARGUMENT
The
.ARG flags
parameter didn't contain exactly one of
.BR GD_SEEK_SET ", " GD_SEEK_CUR ,
or
.BR GD_SEEK_END .
.DD GD_E_BAD_CODE
The field specified by
.ARG field_code ,
or one of the fields it uses for input, was not found in the database.
.DD GD_E_BAD_DIRFILE
The supplied dirfile was invalid.
.DD GD_E_BAD_FIELD_TYPE
An attempt was made to seek relative to
.B GD_SEEK_END
on the
.I INDEX
field, which has no end-of-field marker.
.DD GD_E_DIMENSION
The specified field or one of its inputs wasn't of vector type.
.DD GD_E_DOMAIN
The field position couldn't be set due to a derived field reading simultaneously
from more than one place in a
.B RAW
field.
.DD GD_E_INTERNAL_ERROR
An internal error occurred in the library while trying to perform the task.
This indicates a bug in the library. Please report the incident to the
maintainer.
.DD GD_E_IO
An error occurred while trying to open or read from a file on disk containing
a raw field.
.DD GD_E_RANGE
The request resulted an attempt to move the I/O pointer of the specified field
or one of its inputs to a negative sample number.
.DD GD_E_RECURSE_LEVEL
Too many levels of recursion were encountered while trying to resolve
.ARG field_code .
This usually indicates a circular dependency in field specification in the
dirfile.
.DD GD_E_UNKNOWN_ENCODING
The encoding scheme of a RAW field could not be determined. This may also
indicate that the binary file associated with the RAW field could not be found.
.DD GD_E_UNSUPPORTED
Reading from dirfiles with the encoding scheme of the specified dirfile is not
supported by the library. See
dirfile-encoding(5)
for details on dirfile encoding schemes.
.PP
The error code is also stored in the
.B DIRFILE
object and may be retrieved after this function returns by calling
.F3 gd_error .
A descriptive error string for the error may be obtained by calling
.F3 gd_error_string .
.SH HISTORY
The
.FN gd_seek
function appeared in GetData-0.8.0.
In GetData-0.10.0, the error return from this function changed from -1 to a
negative-valued error code.
.SH SEE ALSO
.F3 gd_getdata ,
.F3 gd_open ,
.F3 gd_putdata ,
.F3 gd_tell
|