/usr/share/doc/dx/help/dxall1038 is in dx-doc 1:4.4.4-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | #!F-adobe-helvetica-medium-r-normal--18*
#!N
#!CNavyBlue #!N #!Rwrimp Writing
an Import Module #!N #!EC Any external filter, like the one
just illustrated, has the disadvantage of running more slowly than an
import module because it sends the data to a file or
through a socket. A built-in module reads the data into memory,
where Data Explorer uses it directly. In this example, the import
module SimpleImport reads the same HDF file as the external filter
did. Note: Because the import module is very simple and does
not require the traversal of input Fields, the Module Builder is
not used in this example. (This C program is also found
in #!F-adobe-times-bold-r-normal--18* /usr/lpp/dx/samples/program_guide/simpleimportfilter.c #!EF #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 01 #include
<dx/dx.h> #!EF #!N #!N #!EC #!N #!N #!F-adobe-times-bold-r-normal--18* df.h #!EF is
a necessary include file for HDF library routines. #!CForestGreen #!N #!N
#!F-adobe-courier-bold-r-normal--18* #!N 02 #include <df.h> #!N 03 #!N 04 #define MAXRANK
3 #!N 05 #!N 06 Error m_SimpleImport(Object *in, Object *out) #!N
07 { #!N 08 Array a=NULL; #!N 09 Field f=NULL; #!N
10 char *filename; #!N 11 int dims, counts[MAXRANK], numelements, i, j;
#!N 12 float deltas[MAXRANK*MAXRANK], origins[MAXRANK], *data; #!EF #!N #!N #!EC #!N
#!N Extract the file name from #!F-adobe-times-bold-r-normal--18* in[0] #!EF , and
check that it is a string. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N
13 if (!in[0]) { #!N 14 DXSetError(ERROR_BAD_PARAMETER,"missing filename"); #!N 15 goto
error; #!N 16 } #!N 17 else if (!DXExtractString(in[0], &filename)) {
#!N 18 DXSetError(ERROR_BAD_PARAMETER, "filename must be a string"); #!N 19 goto
error; #!N 20 } #!EF #!N #!N #!EC #!N #!N The
HDF library routine #!F-adobe-times-bold-r-normal--18* DFishdf #!EF checks the file for accessibility
and for the correct (HDF) format. If the file is not
accessible or is not an HDF file, the routine generates an
error message. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 21 if (DFishdf(filename) !=
0) { #!N 22 DXSetError(ERROR_BAD_PARAMETER, #!N 23 "file \"%s\" is not
accessible, or is not an hdf file", #!N 24 filename); #!N
25 goto error; #!N 26 } #!N 27 #!EF #!N #!N
#!EC #!N #!N Initialize the HDF library. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18*
#!N 28 DFSDrestart(); #!EF #!N #!N #!EC #!N #!N The HDF
library routine #!F-adobe-times-bold-r-normal--18* DFSDgetdims #!EF returns the dimensionality of the grid
(1D, 2D, etc.) in #!F-adobe-times-bold-r-normal--18* dims #!EF . The number of
positions in each dimension is returned in the Array #!F-adobe-times-bold-r-normal--18* counts
#!EF . #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 29 DFSDgetdims(filename, &dims, counts,
MAXRANK); #!EF #!N #!N #!EC #!N #!N Make a new Array
(scalar). #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 30 a = DXNewArray(TYPE_FLOAT, CATEGORY_REAL,
0); #!N 31 if (!a) #!N 32 goto error; #!EF #!N
#!N #!EC #!N #!N Determine the number of elements in the
data Array. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 33 numelements=1; #!N 34
for (i=0; i<dims; i++) { #!N 35 numelements= numelements * counts[i];
#!N 36 } #!EF #!N #!N #!EC #!N #!N Allocate space
to the data Array. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 37 if
(!DXAddArrayData(a, 0, numelements, NULL)) #!N 38 goto error; #!EF #!N #!N
#!EC #!N #!N Get a pointer to memory for the data
Array. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 39 data = (float *)DXGetArrayData(a);
#!N 40 if (!data) #!N 41 goto error; #!EF #!N #!N
#!EC #!N #!N The HDF library routine #!F-adobe-times-bold-r-normal--18* DFSDgetdata #!EF reads
the data from the HDF file to the data Array. #!CForestGreen
#!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 42 DFSDgetdata(filename, dims, counts, data); #!EF #!N
#!N #!EC #!N #!N Create a new Field. #!CForestGreen #!N #!N
#!F-adobe-courier-bold-r-normal--18* #!N 43 f = DXNewField(); #!N 44 if (!f) #!N
45 goto error; #!EF #!N #!N #!EC #!N #!N Set the
dependency of the data to "positions." #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N
46 if (!DXSetStringAttribute((Object)a, "dep", "positions")) #!N 47 goto error; #!EF #!N
#!N #!EC #!N #!N Set the data Array as the data
component of #!F-adobe-times-bold-r-normal--18* f #!EF . #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N
48 if (!DXSetComponentValue(f, "data", (Object)a)) #!N 49 goto error; #!N 50
a=NULL; #!EF #!N #!N #!EC #!N #!N Create the connections Array.
#!F-adobe-times-bold-r-normal--18* DXMakeGridConnections #!EF sets up the element type. Place the connections
in the Field. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 51 a =
DXMakeGridConnectionsV(dims, counts); #!N 52 if (!a) #!N 53 goto error; #!N
54 if (!DXSetComponentValue(f, "connections", (Object)a)) #!N 55 goto error; #!N 56
a=NULL; #!EF #!N #!N #!EC #!N #!N Now create the position
origin and deltas for the position (origin 0 and deltas 1
in each dimension). #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 57 for (i=0;
i<dims; i++) { #!N 58 origins[i] = 0.0; #!N 59 for
(j=0; j<dims; j++) { #!N 60 if (i==j) #!N 61 deltas[i*dims
+ j] = 1.0; #!N 62 else #!N 63 deltas[i*dims +
j] = 0.0; #!N 64 } #!N 65 } #!EF #!N
#!N #!EC #!N #!N Create the positions Array and place it
in the Field. #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 66 #!N 67
a = DXMakeGridPositionsV(dims, counts, origins, deltas); #!N 68 if (!a) #!N
69 goto error; #!N 70 if (!DXSetComponentValue(f, "positions", (Object)a)) #!N 71
goto error; #!N 72 a=NULL; #!EF #!N #!N #!EC #!N #!N
#!F-adobe-times-bold-r-normal--18* DXEndField #!EF sets default attributes and creates the bounding box.
#!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N 73 if (!DXEndField(f)) #!N 74 goto
error; #!N 75 #!EF #!N #!N #!EC #!N #!N Set #!F-adobe-times-bold-r-normal--18*
f #!EF as the first output of the module. #!CForestGreen #!N
#!N #!F-adobe-courier-bold-r-normal--18* #!N 76 out[0]=f; #!N 77 return OK; #!N 78
#!EF #!N #!N #!EC #!N #!N On error, delete #!F-adobe-times-bold-r-normal--18* f
#!EF and #!F-adobe-times-bold-r-normal--18* a #!EF . #!CForestGreen #!N #!N #!F-adobe-courier-bold-r-normal--18* #!N
79 error: #!N 80 DXDelete((Object)f); #!N 81 DXDelete((Object)a); #!N 82 return
ERROR; #!N 83 } #!EF #!N #!N #!EC #!N #!N #!N
#!F-adobe-times-medium-i-normal--18* Next Topic #!EF #!N #!N #!Lpickst,dxall1039 h Using the Pick Structure #!EL #!N #!F-adobe-times-medium-i-normal--18* #!N
|