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
207
208
209
210
|
Image i/o. Coded May 1983, D. Tody.
This initial implementation of IMIO, described in the ".hlp" design file,
provides most of the functionality of the IMIO interface, but is not
fully optimized internally. Features include:
(1) 7 disk datatypes (ushort, silrdx).
(2) 6 in-core datatypes (the standard silrdx).
(3) Images of up to 7 dimensions are supported internally, though
only images of up to 3 dimensions are currently supported in the
interface.
(4) Fully automatic multidimensional buffer allocation, resizing,
and deallocation.
(5) Arbitrary number of input buffers, allocated in a round robin
fashion, need not be the same size or dimension.
(5) Fully automatic type conversion.
(6) General image sections, coordinate flip, and subsampling.
(7) Both "compressed" and "block aligned" storage modes are
supported, with IMIO automatically selecting the optimal
choice during image creation. The device blocksize is a
runtime variable.
Planned future improvements:
(1) Boundary extension.
(3) Optimization to the get/put line procedures to work directly
out of the FIO buffers when possible.
(3) Addition of the get/put pixel procedures.
(4) The image header is currently a simple binary file (structure).
Only one image header structure per header file is permitted.
Will be modified to use database facilities, and to permit
embedded image headers.
(5) Support for the unsigned byte disk datatype.
FV NOTES: I've made the following bug fixes:
In imioff:
The setting of IM_PHYSDIM was taken outside the loop called when
IM_NDIM was zero. There is was no way to set IM_PHYSDIM in the programmer
interface.
In imhdr.h:
The offset to the user area IMU was changed from 603 to 613. This was
a typo?
In impnln:
The coerce statement is wrong since imgobf calls coerce to the
appropriate data type.
In impnln:
There was a typo which did not set ve.
------------------------
Review image interface. Device namining convention, use of explicit
pathnames. File read/write permissions required. Why didn't imdopen
work.
Remove imdmap.x from system library, put in libim.a.
Nov 84
Optimized line at a time i/o. Added capability to reference directly
into the FIO buffer. This greatly improved the efficiency of simple image
operations (no section, type conversion, etc.), without reducing the generality
of the interface.
---------------------------------------------------------------------------
IMIO Modifications, April 1985
1. Boundary Extension
types: constant, nearest, reflect, wrap
parameters: nbndrypix, tybndry, bndrypixval
2. Database Access
New fields may be added to an image with IMADD. The value of an existing
field is set with one of the IMPUT procedures; automatic type conversion will
be performed if necessary and permissible. The value of an existing field is
fetched with an IMGET procedure. The image database interface is both forward
and backward compatible, i.e., no changes are required to current programs and
the same interface (ignoring minor semantic details) will be available when
image headers are moved into DBIO.
Functions
get,g - get the value of a field
put,p - set the value of a field
add,a - add a new field to a database
acc - determine if the named field exists
del - delete a field
gftype - get field datatype
gfn - get field name (matching a template)
Procedures
value = imget[bcsilrdx] (im, "field")
imgstr (im, "field", outstr, maxch)
imput[bcsilrdx] (im, "field", value)
impstr (im, "field", value)
imadd[bcsilrdx] (im, "field", def_value)
imastr (im, "field", def_value)
imaddf (im, "field", "datatype")
y/n = imaccf (im, "field")
imdelf (im, "field")
type = imgftype (im, "field")
list = imofnl[us] (im, template)
nchars/EOF = imgnfn (list, outstr, maxch)
imcfnl (list)
The database interface may be used to access any field of the image header,
including the following standard fields. Note that the nomenclature has
been changed slightly to make it more consistent with FITS. Additional
standard fields will be defined in the future.
keyword type description
i_naxis i number of axes (dimensionality)
i_naxis[1-7] l length of an axis ("i_naxis1", etc.)
i_pixtype i pixel datatype (SPP integer code)
i_minpixval r minimum pixel value
i_maxpixval r maximum pixel value
i_ctime l time of image creation
i_mtime l time of last modify
i_limtime l time when limits (minmax) were last updated
i_title s title string
The following additional field names are recognized, but may disappear in the
future:
i_history s history record (a string buffer at present)
i_pixfile s pathname of the pixel storage file
The names of the standard fields share an "i_" prefix to reduce the possibility
of collisions with data dependent keywords, to identify the standard fields in
sorted listings, to allow use of pattern matching to discriminate between the
standard fields and user fields, and so on. The use of the "i_" prefix is
made optional for the convenience of the interactive user, but the full name
should always be used in compiled programs.
3. Subfile Management (not implemented)
A subfile B of file A is a file which is logically subordinate to A but
which is physically a separate file to the host operating system. A subfile
need not reside in the same directory as the main file.
FIO shall provide support for subfiles as an abstract datatype. For each
ordinary file there shall optionally be zero or one subfile index files with
the same root name as the main file but with the extension .zsf. The index
file, if present, shall list the subfiles of the main file. The operations
supported by FIO for subfiles shall include the following:
add a subfile to index and return pathname
delete a subfile from index and return pathname
get the pathname of a subfile
delete both index entry and physical file
delete a file and all subfiles
It is important that FIO maintain the mapping of a subfile name to a physical
file name to permit moves, copies, renames, etc. of files and their subfiles.
Having to open the index file to get the pathname of a subfile is however
inefficient. To achieve both flexibility and efficiency the system packages
IMIO and DBIO will cache the names of subfiles to eliminate most accesses to
the index files.
add a subfile:
add subfile to the index
cache pathname
open subfile:
repeat {
open subfile using cached pathname
if (file cannot be opened) {
call fio to get the pathname of the subfile
if (different from cached pathname) {
update cached pathname
next
} else
error: cannot open file
} else {
read file header and verify that this is our subfile
if (not our subfile) {
close file
call fio to get the pathname of the subfile
if (different from cached pathname) {
update cached pathname
next
} else
error: not our subfile
} else
break # success
}
}
|