source: trunk/bindings/f77/napif_test.f @ 1822

Revision 1636, 14.2 KB checked in by Pete Jemian, 7 months ago (diff)

point to current WWW site in license text, refs #281

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1C------------------------------------------------------------------------------
2C NeXus - Neutron & X-ray Common Data Format
3C 
4C Test program for NeXus FORTRAN 77 interface
5C
6C Copyright (C) 1997-2002, Freddie Akeroyd
7C
8C This library is free software; you can redistribute it and/or
9C modify it under the terms of the GNU Lesser General Public
10C License as published by the Free Software Foundation; either
11C version 2 of the License, or (at your option) any later version.
12C
13C This library is distributed in the hope that it will be useful,
14C but WITHOUT ANY WARRANTY; without even the implied warranty of
15C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16C Lesser General Public License for more details.
17C
18C You should have received a copy of the GNU Lesser General Public
19C License along with this library; if not, write to the Free Software
20C Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21C
22C  For further information, see <http://www.nexusformat.org>
23C
24C $Id$
25C------------------------------------------------------------------------------
26
27      INCLUDE 'napif.inc'
28      INTEGER NXRANK, NXDIMS(NX_MAXRANK), NXTYPE, NXLEN
29      INTEGER ENTRY_STATUS, ATTR_STATUS
30      INTEGER*4 I, J
31      REAL*4 R
32      BYTE I1_ARRAY(4)
33      INTEGER*2 I2_ARRAY(4)
34      INTEGER*4 I4_ARRAY(4) 
35      REAL*4 R4_ARRAY(4,5)
36      REAL*8 R8_ARRAY(4,5)
37      INTEGER*4 ARRAY_DIMS(2), UNLIMITED_DIMS(1)
38      INTEGER*4 CHUNK_SIZE(2)
39      INTEGER*4 SLAB_START(2), SLAB_SIZE(2)
40      CHARACTER*64 NAME, CLASS
41      CHARACTER*128 CHAR_BUFFER
42      BYTE CHAR_BUFFER_B(128)
43      CHARACTER*64 GROUP_NAME, CLASS_NAME
44      INTEGER FILEID(NXHANDLESIZE)
45      INTEGER GLINK(NXLINKSIZE), DLINK(NXLINKSIZE), BLINK(NXLINKSIZE)
46      INTEGER*4 COMP_ARRAY(20,100)
47      INTEGER*4 DIMS(2), CDIMS(2), UDIMS(1)
48      BYTE I1_BUFFER(4)
49      INTEGER*2 I2_BUFFER(4)
50      INTEGER*4 I4_BUFFER(4), U_BUFFER(7)
51      REAL*4 R4_BUFFER(4)
52      REAL*8 R8_BUFFER(16)
53      DATA I1_ARRAY /1, 2, 3, 4/
54      DATA I2_ARRAY /1000, 2000, 3000, 4000/
55      DATA I4_ARRAY /1000000, 2000000, 3000000, 4000000/
56      DATA R4_ARRAY /1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,
57     +  15.,16.,17.,18.,19.,20./
58      DATA R8_ARRAY/1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,
59     +  15.,16.,17.,18.,19.,20./
60      DATA ARRAY_DIMS /4, 5/
61      DATA CHUNK_SIZE /4, 5/
62      DATA U_BUFFER /0,1,2,3,4,5,6/
63      EQUIVALENCE (CHAR_BUFFER, CHAR_BUFFER_B)
64
65      IF (NXOPEN('NXtest.nxs', NXACC_CREATEXML, FILEID) .NE. NX_OK) STOP
66      IF (NXMAKEGROUP(FILEID, 'entry', 'NXentry') .NE. NX_OK) STOP
67      IF (NXOPENGROUP(FILEID, 'entry', 'NXentry') .NE. NX_OK) STOP
68         IF (NXMAKEDATA(FILEID, 'ch_data', NX_CHAR, 1, 10) .NE. NX_OK) 
69     +        STOP
70         IF (NXOPENDATA(FILEID, 'ch_data') .NE. NX_OK) STOP
71            IF (NXPUTCHARDATA(FILEID, 'NeXus data') .NE. NX_OK) STOP
72         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
73         IF (NXMAKEDATA(FILEID, 'i1_data', NX_INT8, 1, 4) .NE. NX_OK) 
74     +        STOP
75         IF (NXOPENDATA(FILEID, 'i1_data') .NE. NX_OK) STOP
76            IF (NXPUTDATA(FILEID, I1_ARRAY) .NE. NX_OK) STOP
77         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
78         IF (NXMAKEDATA(FILEID, 'i2_data', NX_INT16, 1, 4) .NE. NX_OK) 
79     +        STOP
80         IF (NXOPENDATA(FILEID, 'i2_data') .NE. NX_OK) STOP
81            IF (NXPUTDATA(FILEID, I2_ARRAY) .NE. NX_OK) STOP
82         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
83         IF (NXMAKEDATA(FILEID, 'i4_data', NX_INT32, 1, 4) .NE. NX_OK) 
84     +        STOP
85         IF (NXOPENDATA(FILEID, 'i4_data') .NE. NX_OK) STOP
86            IF (NXPUTDATA(FILEID, I4_ARRAY) .NE. NX_OK) STOP
87         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
88         IF (NXCOMPMAKEDATA(FILEID, 'r4_data', NX_FLOAT32, 2, 
89     +        ARRAY_DIMS, NX_COMP_LZW, CHUNK_SIZE) .NE. NX_OK) STOP
90         IF (NXOPENDATA(FILEID, 'r4_data') .NE. NX_OK) STOP
91            IF (NXPUTDATA(FILEID, R4_ARRAY) .NE. NX_OK) STOP
92         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
93         IF (NXMAKEDATA(FILEID, 'r8_data', NX_FLOAT64, 2, ARRAY_DIMS) 
94     +        .NE. NX_OK) STOP
95         IF (NXOPENDATA(FILEID, 'r8_data') .NE. NX_OK) STOP
96            SLAB_START(1) = 1
97            SLAB_START(2) = 5
98            SLAB_SIZE(1) = 4
99            SLAB_SIZE(2) = 1
100            IF (NXPUTSLAB(FILEID, R8_ARRAY(1,5), SLAB_START, SLAB_SIZE) 
101     +        .NE. NX_OK) STOP
102            SLAB_START(1) = 1
103            SLAB_START(2) = 1
104            SLAB_SIZE(1) = 4
105            SLAB_SIZE(2) = 4
106            IF (NXPUTSLAB(FILEID, R8_ARRAY, SLAB_START, SLAB_SIZE) 
107     +        .NE. NX_OK) STOP
108            IF (NXPUTCHARATTR(FILEID, 'ch_attribute', 'NeXus',5,NX_CHAR) 
109     +        .NE. NX_OK) STOP
110            IF (NXPUTATTR(FILEID, 'i4_attribute', 42, 1, NX_INT32) 
111     +        .NE. NX_OK) STOP
112            IF (NXPUTATTR(FILEID, 'r4_attribute', 3.14159265, 1, 
113     +        NX_FLOAT32) .NE. NX_OK) STOP
114            IF (NXGETDATAID(FILEID, DLINK) .NE. NX_OK) STOP
115         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
116         IF (NXMAKEGROUP(FILEID, 'data', 'NXdata') .NE. NX_OK) STOP
117         IF (NXOPENGROUP(FILEID, 'data', 'NXdata') .NE. NX_OK) STOP
118            IF (NXMAKELINK(FILEID, DLINK) .NE. NX_OK) STOP
119            DIMS(1) = 20
120            DIMS(2) = 100
121            DO I = 1,100
122               DO J = 1,20
123                  COMP_ARRAY(J,I) = I-1
124               END DO
125            END DO
126            CDIMS(1) = 20
127            CDIMS(2) = 20
128            IF (NXCOMPMAKEDATA(FILEID, 'comp_data', NX_INT32, 2, DIMS, 
129     +        NX_COMP_LZW, CDIMS) .NE. NX_OK) STOP
130            IF (NXOPENDATA(FILEID, 'comp_data') .NE. NX_OK) STOP
131               IF (NXPUTDATA(FILEID, COMP_ARRAY) .NE. NX_OK) STOP
132            IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
133            IF (NXFLUSH(FILEID) .NE. NX_OK) STOP
134C            UDIMS(1) = NX_UNLIMITED
135            UDIMS(1) = 7*SLAB_SIZE(1)
136            IF (NXMAKEDATA(FILEID, 'flush_data', NX_INT32, 1, UDIMS) 
137     +        .NE. NX_OK) STOP
138               SLAB_SIZE(1) = 1
139               DO I = 1,7
140                  SLAB_START(1) = I
141                  IF (NXOPENDATA(FILEID, 'flush_data') .NE. NX_OK) STOP
142                     IF (NXPUTSLAB(FILEID, U_BUFFER(I), SLAB_START, 
143     +                 SLAB_SIZE) .NE. NX_OK) STOP
144                     IF (NXFLUSH(FILEID) .NE. NX_OK) STOP
145               END DO
146         IF (NXCLOSEGROUP(FILEID) .NE. NX_OK) STOP
147         IF (NXMAKEGROUP(FILEID, 'sample', 'NXsample') .NE. NX_OK) STOP
148         IF (NXOPENGROUP(FILEID, 'sample', 'NXsample') .NE. NX_OK) STOP
149            IF (NXMAKEDATA(FILEID, 'ch_data', NX_CHAR, 1, 12) .NE. 
150     +        NX_OK) STOP
151            IF (NXOPENDATA(FILEID, 'ch_data') .NE. NX_OK) STOP
152            IF (NXPUTCHARDATA(FILEID, 'NeXus sample') .NE. NX_OK) STOP
153            IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
154            IF (NXGETGROUPID (FILEID, GLINK) .NE. NX_OK) STOP
155         IF (NXCLOSEGROUP (FILEID) .NE. NX_OK) STOP
156      IF (NXCLOSEGROUP (FILEID) .NE. NX_OK) STOP
157      IF (NXMAKEGROUP (FILEID, "link", "NXentry") .NE. NX_OK) STOP
158      IF (NXOPENGROUP (FILEID, "link", "NXentry") .NE. NX_OK) STOP
159         IF (NXMAKELINK (fileid, GLINK) .NE. NX_OK) STOP
160      IF (NXCLOSEGROUP(FILEID) .NE. NX_OK) STOP
161      IF (NXCLOSE(FILEID) .NE. NX_OK) STOP
162C *** read data
163      IF (NXOPEN('NXtest.nxs', NXACC_READ, FILEID) .NE. NX_OK) STOP
164      IF (NXGETATTRINFO(FILEID, J) .NE. NX_OK) STOP
165      IF (J .GT. 0) WRITE(*,'(1X,A,I2)') 
166     +  'Number of global attributes: ', J
167      DO I = 1,J
168         ATTR_STATUS = NXGETNEXTATTR(FILEID,NAME,NXDIMS,NXTYPE)
169         IF (ATTR_STATUS .EQ. NX_ERROR) THEN
170            STOP
171         ELSE IF (ATTR_STATUS .EQ. NX_OK) THEN
172            NXLEN = LEN(CHAR_BUFFER)
173            IF (NXGETCHARATTR(FILEID, NAME, CHAR_BUFFER, NXLEN, NXTYPE)
174     +        .NE. NX_OK) STOP
175            WRITE(*,'(4X,A)') NAME(1:LEN_TRIM(NAME))//' = '
176     +        //CHAR_BUFFER(1:LEN_TRIM(CHAR_BUFFER))
177         END IF
178      END DO
179      IF (NXOPENGROUP(FILEID, 'entry', 'NXentry') .NE. NX_OK) STOP
180         IF (NXGETGROUPINFO(FILEID, I, GROUP_NAME, CLASS_NAME) .NE. 
181     +     NX_OK) STOP
182         WRITE(*,'(1X,A,I2,A)') 'Group: '
183     +     //GROUP_NAME(1:LEN_TRIM(GROUP_NAME))//'('
184     +     //CLASS_NAME(1:LEN_TRIM(CLASS_NAME))
185     +     //') contains ',I,' items'
186  100 ENTRY_STATUS=NXGETNEXTENTRY(FILEID,NAME,CLASS,NXTYPE)
187      IF (ENTRY_STATUS .EQ. NX_ERROR) STOP
188      IF (CLASS(1:LEN_TRIM(CLASS)) .NE. 'SDS') THEN
189         IF (ENTRY_STATUS .NE. NX_EOD) THEN
190            WRITE(*,'(4X,A)') 'Subgroup: '//NAME(1:LEN_TRIM(NAME))//'('
191     +        //CLASS(1:LEN_TRIM(CLASS))//')'
192            ENTRY_STATUS = NX_OK
193         END IF
194      ELSE IF (ENTRY_STATUS .EQ. NX_OK) THEN
195         IF (NXOPENDATA(FILEID,NAME) .NE. NX_OK) STOP
196         IF (NXGETINFO(FILEID,NXRANK,NXDIMS,NXTYPE) .NE. NX_OK) STOP
197         WRITE(*,FMT='(4X,A,I2,A)') NAME(1:LEN_TRIM(NAME))//'(', 
198     +     NXTYPE,')'
199         IF (NXTYPE .EQ. NX_CHAR) THEN
200            IF (NXGETCHARDATA(FILEID,CHAR_BUFFER) .NE. NX_OK) STOP
201            WRITE(*,FMT='(4X,A)') 
202     +        'Values : '//CHAR_BUFFER(1:NXDIMS(1))
203         ELSE IF (NXTYPE .EQ. NX_INT8) THEN
204            IF (NXGETDATA(FILEID,I1_BUFFER) .NE. NX_OK) STOP
205            WRITE(*,FMT='(4X,A,4I3)') 'Values : ', I1_BUFFER
206         ELSE IF (NXTYPE .EQ. NX_INT16) THEN
207            IF (NXGETDATA(FILEID,I2_BUFFER) .NE. NX_OK) STOP
208            WRITE(*,FMT='(4X,A,4I6)') 'Values : ', I2_BUFFER
209         ELSE IF (NXTYPE .EQ. NX_INT32) THEN
210            IF (NXGETDATA(FILEID,I4_BUFFER) .NE. NX_OK) STOP
211            WRITE(*,FMT='(4X,A,4I12)') 'Values : ', I4_BUFFER
212         ELSE IF (NXTYPE .EQ. NX_FLOAT32) THEN
213            SLAB_START(1) = 1
214            SLAB_START(2) = 1
215            SLAB_SIZE(1) = 4
216            SLAB_SIZE(2) = 1
217            IF (NXGETSLAB(FILEID, R4_BUFFER, SLAB_START, SLAB_SIZE) 
218     +            .NE. NX_OK) STOP
219            WRITE(*,FMT='(4X,A,4F7.2)') 'Values : ', R4_BUFFER
220            SLAB_START(2) = 2
221            IF (NXGETSLAB(FILEID, R4_BUFFER, SLAB_START, SLAB_SIZE) 
222     +            .NE. NX_OK) STOP
223            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', R4_BUFFER
224            SLAB_START(2) = 3
225            IF (NXGETSLAB(FILEID, R4_BUFFER, SLAB_START, SLAB_SIZE) 
226     +            .NE. NX_OK) STOP
227            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', R4_BUFFER
228            SLAB_START(2) = 4
229            IF (NXGETSLAB(FILEID, R4_BUFFER, SLAB_START, SLAB_SIZE) 
230     +            .NE. NX_OK) STOP
231            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', R4_BUFFER
232            SLAB_START(2) = 5
233            IF (NXGETSLAB(FILEID, R4_BUFFER, SLAB_START, SLAB_SIZE) 
234     +            .NE. NX_OK) STOP
235            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', R4_BUFFER
236         ELSE IF (NXTYPE .EQ. NX_FLOAT64) THEN
237            SLAB_START(1) = 1
238            SLAB_START(2) = 1
239            SLAB_SIZE(1) = 4
240            SLAB_SIZE(2) = 1
241            IF (NXGETSLAB(FILEID, R8_BUFFER, SLAB_START, SLAB_SIZE) 
242     +            .NE. NX_OK) STOP
243            WRITE(*,FMT='(4X,A,4F7.2)') 'Values : ', 
244     +        (R8_BUFFER(I), I=1,4)
245            SLAB_START(2) = 2
246            IF (NXGETSLAB(FILEID, R8_BUFFER, SLAB_START, SLAB_SIZE) 
247     +            .NE. NX_OK) STOP
248            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', 
249     +        (R8_BUFFER(I), I=1,4)
250            SLAB_START(2) = 3
251            IF (NXGETSLAB(FILEID, R8_BUFFER, SLAB_START, SLAB_SIZE) 
252     +            .NE. NX_OK) STOP
253            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', 
254     +        (R8_BUFFER(I), I=1,4)
255            SLAB_START(2) = 4
256            IF (NXGETSLAB(FILEID, R8_BUFFER, SLAB_START, SLAB_SIZE) 
257     +            .NE. NX_OK) STOP
258            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', 
259     +        (R8_BUFFER(I), I=1,4)
260            SLAB_START(2) = 5
261            IF (NXGETSLAB(FILEID, R8_BUFFER, SLAB_START, SLAB_SIZE) 
262     +            .NE. NX_OK) STOP
263            WRITE(*,FMT='(4X,A,4F7.2)') '       : ', 
264     +        (R8_BUFFER(I), I=1,4)
265         END IF
266  200    ATTR_STATUS = NXGETNEXTATTR (FILEID, NAME, NXDIMS, NXTYPE)
267         IF (ATTR_STATUS .EQ. NX_ERROR) STOP
268         IF (ATTR_STATUS .EQ. NX_OK) THEN
269            IF (NXTYPE .EQ. NX_CHAR) THEN
270               LENGTH=LEN(CHAR_BUFFER)
271               IF (NXGETCHARATTR(FILEID,NAME,CHAR_BUFFER,LENGTH,NXTYPE) 
272     +               .NE. NX_OK) STOP
273               WRITE(*,FMT='(7X,A)') NAME(1:LEN_TRIM(NAME))//' : '
274     +           //CHAR_BUFFER(1:LEN_TRIM(CHAR_BUFFER))
275            ELSE IF (NXTYPE .EQ. NX_INT32) THEN
276               LENGTH=1
277               IF (NXGETATTR(FILEID,NAME,I,LENGTH,NXTYPE) 
278     +               .NE. NX_OK) STOP
279               WRITE(*,FMT='(7X,A,I5)') NAME(1:LEN_TRIM(NAME))//' : ',
280     +           I
281            ELSE IF (NXTYPE .EQ. NX_FLOAT32) THEN
282               LENGTH=1
283               IF (NXGETATTR(FILEID,NAME,R,LENGTH,NXTYPE) 
284     +               .NE. NX_OK) STOP
285               WRITE(*,FMT='(7X,A,F10.6)') NAME(1:LEN_TRIM(NAME))
286     +           //' : ', R
287            END IF
288         END IF
289         IF (ATTR_STATUS .NE. NX_EOD) GOTO 200
290         IF (NXCLOSEDATA(FILEID) .NE. NX_OK) STOP
291      END IF
292      IF (ENTRY_STATUS .NE. NX_EOD) GOTO 100
293      IF (NXCLOSEGROUP(FILEID) .NE. NX_OK) STOP
294      IF (NXOPENGROUP (FILEID, "link", "NXentry") .NE. NX_OK) STOP
295         IF (NXGETGROUPID (FILEID, GLINK) .NE. NX_OK) STOP
296      IF (NXCLOSEGROUP (FILEID) .NE. NX_OK) STOP
297      IF (NXOPENGROUP (FILEID, "link", "NXentry") .NE. NX_OK) STOP
298         IF (NXGETGROUPID (FILEID, BLINK) .NE. NX_OK) STOP
299         IF (NXSAMEID(FILEID, GLINK, BLINK)) THEN
300            WRITE(*,*) 'Link Check OK'
301         ELSE
302            WRITE(*,*) 'Link Check Failed'
303         ENDIF
304C-------- NXOPENPATH Test
305      IF(NXOPENPATH(FILEID,'/entry/data/comp_data') .NE. NX_OK)STOP
306      IF(NXOPENPATH(FILEID,'/entry/data/comp_data') .NE. NX_OK)STOP
307      IF(NXOPENPATH(FILEID,'../r8_data') .NE. NX_OK)STOP
308      WRITE(6,*)'NXOPENPATH Test Succeeded'
309      IF (NXCLOSEGROUP(FILEID) .NE. NX_OK) STOP
310      IF (NXCLOSE(FILEID) .NE. NX_OK) STOP
311      STOP
312      END
313C----------------------------------------------------------------------
314C     LEN_TRIM trims remaining blanks and tabs from the end of "string"
315C      INTEGER FUNCTION LEN_TRIM (STRING)
316C      INTEGER I
317C      CHARACTER*(*) STRING
318C      I = LEN(STRING)
319C      DO WHILE (I .GE. 1 .AND. 
320C     +(STRING(I:I).EQ.' '.OR. STRING(I:I).EQ.CHAR(0).OR.
321C     + STRING(I:I).EQ.CHAR(9)))
322C         I = I - 1
323C      END DO
324C      LEN_TRIM = MIN(I,LEN(STRING))
325C      RETURN
326C      END
327
Note: See TracBrowser for help on using the repository browser.