1 /*-------------------------------------------------------------------------
2 This software is provided 'as-is', without any express or implied warranty.
3 In no event will the authors be held liable for any damages arising from
4 the use of this software.
5 
6 Permission is granted to anyone to use this software for any purpose,
7 including commercial applications, and to alter it and redistribute it
8 freely, subject to the following restrictions:
9 
10 1. The origin of this software must not be misrepresented; you must not
11    claim that you wrote the original software. If you use this software
12    in a product, an acknowledgment in the product documentation would be
13    appreciated but is not required.
14 
15 2. Altered source versions must be plainly marked as such, and must not
16    be misrepresented as being the original software.
17 
18 3. This notice may not be removed or altered from any source distribution.
19 -------------------------------------------------------------------------*/
20 
21 #include <stdlib.h>
22 #include <stdio.h>
23 #include <stdarg.h>
24 #include <string.h>
25 #include "fortran_macros.h"
26 #include "cgns_io.h"
27 #ifdef MEM_DEBUG
28 #include "cg_malloc.h"
29 #endif
30 
31 #if defined(_WIN32) && defined(BUILD_DLL)
32 # define CGIODLL __declspec(dllexport)
33 #else
34 # define CGIODLL
35 #endif
36 
37 /*=========================================================
38  * local string conversions
39  *=========================================================*/
40 
to_c_string(char * f_str,int f_len,char * c_str,int c_len)41 static int to_c_string(char *f_str, int f_len, char *c_str, int c_len)
42 {
43     int i, iend;
44 
45     for (iend = f_len-1; iend >= 0; iend--) {
46         if (f_str[iend] != ' ') break;
47     }
48     if (iend >= c_len) iend = c_len - 1;
49 
50     for (i = 0; i <= iend; i++)
51         c_str[i] = f_str[i];
52     c_str[i] = 0;
53     return i;
54 }
55 
56 /*---------------------------------------------------------*/
57 
to_f_string(char * c_str,char * f_str,int f_len)58 static int to_f_string(char *c_str, char *f_str, int f_len)
59 {
60     int i, c_len;
61 
62     c_len = (int)strlen(c_str);
63     if (c_len > f_len) c_len = f_len;
64 
65     for (i = 0; i < c_len; i++)
66         f_str[i] = c_str[i];
67     while (i < f_len)
68         f_str[i++] = ' ';
69     return f_len;
70 }
71 
72 /*---------------------------------------------------------*/
73 
new_c_string(char * str,int len,cgint_f * ier)74 static char *new_c_string (char *str, int len, cgint_f *ier)
75 {
76     char *c_str;
77 
78     if (len < 1 || str == NULL) {
79       *ier = (cgint_f)CGIO_ERR_NULL_STRING;
80         return NULL;
81     } else if ( len == 2 && strncmp(str, "\0", 2) == 0 ) {
82       *ier = (cgint_f)CGIO_ERR_NULL_STRING;
83       return NULL;
84     }
85 
86     c_str = (char *) malloc (len + 1);
87     if (c_str == NULL) {
88         *ier = (cgint_f)CGIO_ERR_MALLOC;
89         return NULL;
90     }
91     to_c_string (str, len, c_str, len);
92     if (strlen(c_str) < 1) {
93         free (c_str);
94         *ier = (cgint_f)CGIO_ERR_NULL_STRING;
95         return NULL;
96     }
97     *ier = 0;
98     return c_str;
99 }
100 
101 /*=========================================================
102  * paths for searching for linked-to files
103  *=========================================================*/
104 
FMNAME(cgio_path_add_f,CGIO_PATH_ADD_F)105 CGIODLL void FMNAME(cgio_path_add_f, CGIO_PATH_ADD_F) (
106     STR_PSTR(path), cgint_f *ier STR_PLEN(path))
107 {
108   char *c_path = new_c_string(STR_PTR(path), STR_LEN(path), ier);
109 
110   if (*ier == 0) {
111     *ier = (cgint_f)cgio_path_add(c_path);
112     free(c_path);
113   }
114 }
115 
116 /*---------------------------------------------------------*/
117 
FMNAME(cgio_path_delete_f,CGIO_PATH_DELETE_F)118 CGIODLL void FMNAME(cgio_path_delete_f, CGIO_PATH_DELETE_F) (
119     STR_PSTR(path), cgint_f *ier STR_PLEN(path))
120 {
121     char *c_path = new_c_string(STR_PTR(path), STR_LEN(path), ier);
122 
123     if (*ier == CGIO_ERR_MALLOC) return;
124     *ier = (cgint_f)cgio_path_delete(c_path);
125     if (c_path) free(c_path);
126 }
127 
128 /*=========================================================
129  * utility routines independent of open files
130  *=========================================================*/
131 
cgio_is_supported_f(cgsize_t * file_type,cgint_f * ier)132 CGIODLL void cgio_is_supported_f(
133     cgsize_t *file_type, cgint_f *ier)
134 {
135     *ier = (cgint_f)cgio_is_supported((int)*file_type);
136 }
137 
138 /*---------------------------------------------------------*/
139 
FMNAME(cgio_check_file_f,CGIO_CHECK_FILE_F)140 CGIODLL void FMNAME(cgio_check_file_f, CGIO_CHECK_FILE_F) (
141     STR_PSTR(filename), cgint_f *file_type, cgint_f *ier STR_PLEN(filename))
142 {
143     int i_file_type;
144     char *c_name = new_c_string(STR_PTR(filename), STR_LEN(filename), ier);
145 
146     if (*ier == 0) {
147         *ier = (cgint_f)cgio_check_file(c_name, &i_file_type);
148         *file_type = (cgint_f)i_file_type;
149         free(c_name);
150     }
151 }
152 
153 /*=========================================================
154  * file operations
155  *=========================================================*/
156 
FMNAME(cgio_open_file_f,CGIO_OPEN_FILE_F)157 CGIODLL void FMNAME(cgio_open_file_f, CGIO_OPEN_FILE_F) (
158     STR_PSTR(filename), cgint_f *file_mode, cgint_f *file_type,
159     cgint_f *cgio_num, cgint_f *ier STR_PLEN(filename))
160 {
161     int i_cgio_num;
162     char *c_name = new_c_string(STR_PTR(filename), STR_LEN(filename), ier);
163 
164     if (*ier == 0) {
165         *ier = (cgint_f)cgio_open_file(c_name, (int)*file_mode, (int)*file_type, &i_cgio_num);
166         *cgio_num = (cgint_f)i_cgio_num;
167         free(c_name);
168     }
169 }
170 
171 /*---------------------------------------------------------*/
172 
cgio_close_file_f(cgint_f * cgio_num,cgint_f * ier)173 CGIODLL void cgio_close_file_f(
174     cgint_f *cgio_num, cgint_f *ier)
175 {
176     *ier = (cgint_f)cgio_close_file((int)*cgio_num);
177 }
178 
179 /*---------------------------------------------------------*/
180 
cgio_flush_to_disk_f(cgint_f * cgio_num,cgint_f * ier)181 CGIODLL void cgio_flush_to_disk_f(
182     cgint_f *cgio_num, cgint_f *ier)
183 {
184     *ier = (cgint_f)cgio_flush_to_disk((int)*cgio_num);
185 }
186 
187 /*=========================================================
188  * file information
189  *=========================================================*/
190 
FMNAME(cgio_library_version_f,CGIO_LIBRARY_VERSION_F)191 CGIODLL void FMNAME(cgio_library_version_f, CGIO_LIBRARY_VERSION_F) (
192     cgint_f *cgio_num, STR_PSTR(version), cgint_f *ier STR_PLEN(version))
193 {
194     char c_version[CGIO_MAX_VERSION_LENGTH+1];
195 
196     *ier = (cgint_f)cgio_library_version((int)*cgio_num, c_version);
197     if (*ier == 0)
198         to_f_string(c_version, STR_PTR(version), STR_LEN(version));
199 }
200 
201 /*---------------------------------------------------------*/
202 
FMNAME(cgio_file_version_f,CGIO_FILE_VERSION_F)203 CGIODLL void FMNAME(cgio_file_version_f, CGIO_FILE_VERSION_F) (
204     cgint_f *cgio_num, STR_PSTR(file_version), STR_PSTR(creation_date),
205     STR_PSTR(modified_date), cgint_f *ier STR_PLEN(file_version)
206     STR_PLEN(creation_date) STR_PLEN(modified_date))
207 {
208     char c_version[CGIO_MAX_VERSION_LENGTH+1];
209     char c_cdate[CGIO_MAX_VERSION_LENGTH+1];
210     char c_mdate[CGIO_MAX_VERSION_LENGTH+1];
211 
212     *ier = (cgint_f)cgio_file_version((int)*cgio_num, c_version, c_cdate, c_mdate);
213     if (*ier == 0) {
214         to_f_string(c_version, STR_PTR(file_version), STR_LEN(file_version));
215         to_f_string(c_cdate, STR_PTR(creation_date), STR_LEN(creation_date));
216         to_f_string(c_mdate, STR_PTR(modified_date), STR_LEN(modified_date));
217     }
218 }
219 
220 /*---------------------------------------------------------*/
221 
cgio_get_root_id_f(cgint_f * cgio_num,double * rootid,cgint_f * ier)222 CGIODLL void cgio_get_root_id_f(
223     cgint_f *cgio_num, double *rootid, cgint_f *ier)
224 {
225     *ier = (cgint_f)cgio_get_root_id((int)*cgio_num, rootid);
226 }
227 
228 /*---------------------------------------------------------*/
229 
cgio_get_file_type_f(cgint_f * cgio_num,cgint_f * file_type,cgint_f * ier)230 CGIODLL void cgio_get_file_type_f(
231     cgint_f *cgio_num, cgint_f *file_type, cgint_f *ier)
232 {
233     int i_file_type;
234 
235     *ier = (cgint_f)cgio_get_file_type((int)*cgio_num, &i_file_type);
236     *file_type = (cgint_f)i_file_type;
237 }
238 
239 /*=========================================================
240  * error handling
241  *=========================================================*/
242 
cgio_error_code_f(cgint_f * errcode,cgint_f * file_type)243 CGIODLL void cgio_error_code_f(
244     cgint_f *errcode, cgint_f *file_type)
245 {
246     int i_errcode, i_file_type;
247 
248     cgio_error_code(&i_errcode, &i_file_type);
249     *errcode = (cgint_f)i_errcode;
250     *file_type = (cgint_f)i_file_type;
251 }
252 
253 /*---------------------------------------------------------*/
254 
FMNAME(cgio_error_message_f,CGIO_ERROR_MESSAGE_F)255 CGIODLL void FMNAME(cgio_error_message_f,CGIO_ERROR_MESSAGE_F) (
256     STR_PSTR(errmsg), cgint_f *ier STR_PLEN(errmsg))
257 {
258     char c_error[CGIO_MAX_ERROR_LENGTH+1];
259 
260     *ier = (cgint_f)cgio_error_message(c_error);
261     if (*ier == 0)
262         to_f_string(c_error, STR_PTR(errmsg), STR_LEN(errmsg));
263 }
264 
265 /*---------------------------------------------------------*/
266 
FMNAME(cgio_error_exit_f,CGIO_ERROR_EXIT_F)267 CGIODLL void FMNAME(cgio_error_exit_f, CGIO_ERROR_EXIT_F)(
268     STR_PSTR(errmsg) STR_PLEN(errmsg))
269 {
270     cgint_f ier;
271     char *c_error = new_c_string(STR_PTR(errmsg), STR_LEN(errmsg), &ier);
272 
273     cgio_error_exit(c_error);
274 }
275 
276 /*---------------------------------------------------------*/
277 
cgio_error_abort_f(cgint_f * abort_flag)278 CGIODLL void cgio_error_abort_f(
279     cgint_f *abort_flag)
280 {
281     cgio_error_abort((int)*abort_flag);
282 }
283 
284 /*=========================================================
285  * basic node operations
286  *=========================================================*/
287 
FMNAME(cgio_create_node_f,CGIO_CREATE_NODE_F)288 CGIODLL void FMNAME(cgio_create_node_f, CGIO_CREATE_NODE_F) (
289     cgint_f *cgio_num, double *pid, STR_PSTR(name),
290     double *id, cgint_f *ier STR_PLEN(name))
291 {
292     char c_name[CGIO_MAX_NAME_LENGTH+1];
293 
294     to_c_string(STR_PTR(name), STR_LEN(name), c_name, CGIO_MAX_NAME_LENGTH);
295     *ier = (cgint_f)cgio_create_node((int)*cgio_num, *pid, c_name, id);
296 }
297 
298 /*---------------------------------------------------------*/
299 
FMNAME(cgio_new_node_f,CGIO_NEW_NODE_F)300 CGIODLL void FMNAME(cgio_new_node_f, CGIO_NEW_NODE_F) (
301     cgint_f *cgio_num, double *pid, STR_PSTR(name), STR_PSTR(label),
302     STR_PSTR(data_type), cgint_f *ndims, cgsize_t *dims, void *data,
303     double *id, cgint_f *ier STR_PLEN(name) STR_PLEN(label) STR_PLEN(data_type))
304 {
305     char c_name[CGIO_MAX_NAME_LENGTH+1];
306     char c_label[CGIO_MAX_LABEL_LENGTH+1];
307     char c_dtype[CGIO_MAX_DATATYPE_LENGTH+1];
308 
309     to_c_string(STR_PTR(name), STR_LEN(name), c_name, CGIO_MAX_NAME_LENGTH);
310     to_c_string(STR_PTR(label), STR_LEN(label), c_label, CGIO_MAX_LABEL_LENGTH);
311     to_c_string(STR_PTR(data_type), STR_LEN(data_type),
312                 c_dtype, CGIO_MAX_DATATYPE_LENGTH);
313     *ier = (cgint_f)cgio_new_node((int)*cgio_num, *pid, c_name, c_label, c_dtype,
314                (int)*ndims, dims, data, id);
315 }
316 
317 /*---------------------------------------------------------*/
318 
cgio_delete_node_f(cgint_f * cgio_num,double * pid,double * id,cgint_f * ier)319 CGIODLL void cgio_delete_node_f(
320     cgint_f *cgio_num, double *pid, double *id, cgint_f *ier)
321 {
322     *ier = (cgint_f)cgio_delete_node((int)*cgio_num, *pid, *id);
323 }
324 
325 /*---------------------------------------------------------*/
326 
cgio_move_node_f(cgint_f * cgio_num,double * pid,double * id,double * npid,cgint_f * ier)327 CGIODLL void cgio_move_node_f(
328     cgint_f *cgio_num, double *pid, double *id, double *npid, cgint_f *ier)
329 {
330     *ier = (cgint_f)cgio_move_node((int)*cgio_num, *pid, *id, *npid);
331 }
332 
333 /*---------------------------------------------------------*/
334 
cgio_release_id_f(cgint_f * cgio_num,double * id,cgint_f * ier)335 CGIODLL void cgio_release_id_f(
336     cgint_f *cgio_num, double *id, cgint_f *ier)
337 {
338     *ier = (cgint_f)cgio_release_id((int)*cgio_num, *id);
339 }
340 
341 /*=========================================================
342  * links
343  *=========================================================*/
344 
cgio_is_link_f(cgint_f * cgio_num,double * id,cgint_f * link_len,cgint_f * ier)345 CGIODLL void cgio_is_link_f(
346     cgint_f *cgio_num, double *id, cgint_f *link_len, cgint_f *ier)
347 {
348     int i_link_len;
349 
350     *ier = (cgint_f)cgio_is_link((int)*cgio_num, *id, &i_link_len);
351     *link_len = (cgint_f)i_link_len;
352 }
353 
354 /*---------------------------------------------------------*/
355 
cgio_link_size_f(cgint_f * cgio_num,double * id,cgint_f * file_len,cgint_f * name_len,cgint_f * ier)356 CGIODLL void cgio_link_size_f(
357     cgint_f *cgio_num, double *id, cgint_f *file_len,
358     cgint_f *name_len, cgint_f *ier)
359 {
360     int i_file_len, i_name_len;
361 
362     *ier = (cgint_f)cgio_link_size((int)*cgio_num, *id, &i_file_len, &i_name_len);
363     *file_len = (cgint_f)i_file_len;
364     *name_len = (cgint_f)i_name_len;
365 }
366 
367 /*---------------------------------------------------------*/
368 
FMNAME(cgio_create_link_f,CGIO_CREATE_LINK_F)369 CGIODLL void FMNAME(cgio_create_link_f, CGIO_CREATE_LINK_F) (
370     cgint_f *cgio_num, double *pid, STR_PSTR(name), STR_PSTR(filename),
371     STR_PSTR(name_in_file), double *id, cgint_f *ier
372     STR_PLEN(name) STR_PLEN(filename) STR_PLEN(name_in_file))
373 {
374     char c_name[CGIO_MAX_NAME_LENGTH+1];
375     char *c_file, *c_link;
376 
377     c_file = new_c_string(STR_PTR(filename), STR_LEN(filename), ier);
378     if (*ier) {
379         if (*ier != CGIO_ERR_NULL_STRING) return;
380         c_file = "";
381     }
382     c_link = new_c_string(STR_PTR(name_in_file), STR_LEN(name_in_file), ier);
383     if (*ier) {
384         if (*c_file) free(c_file);
385         return;
386     }
387     to_c_string(STR_PTR(name), STR_LEN(name), c_name, CGIO_MAX_NAME_LENGTH);
388     *ier = (cgint_f)cgio_create_link((int)*cgio_num, *pid, c_name, c_file, c_link, id);
389     if (*c_file) free(c_file);
390     free(c_link);
391 }
392 
393 /*---------------------------------------------------------*/
394 
FMNAME(cgio_get_link_f,CGIO_GET_LINK_F)395 CGIODLL void FMNAME(cgio_get_link_f, CGIO_GET_LINK_F) (
396     cgint_f *cgio_num, double *id, STR_PSTR(filename), STR_PSTR(name_in_file),
397     cgint_f *ier STR_PLEN(filename) STR_PLEN(name_in_file))
398 {
399     char c_file[CGIO_MAX_FILE_LENGTH+1];
400     char c_link[CGIO_MAX_LINK_LENGTH+1];
401 
402     *ier = (cgint_f)cgio_get_link((int)*cgio_num, *id, c_file, c_link);
403     if (*ier == 0) {
404         to_f_string(c_file, STR_PTR(filename), STR_LEN(filename));
405         to_f_string(c_link, STR_PTR(name_in_file), STR_LEN(name_in_file));
406     }
407 }
408 
409 /*=========================================================
410  * node children
411  *=========================================================*/
412 
cgio_number_children_f(cgint_f * cgio_num,double * pid,cgint_f * num_children,cgint_f * ier)413 CGIODLL void cgio_number_children_f(
414     cgint_f *cgio_num, double *pid, cgint_f *num_children, cgint_f *ier)
415 {
416     int i_num_children;
417 
418     *ier = cgio_number_children(*cgio_num, *pid, &i_num_children);
419     *num_children = (cgint_f)i_num_children;
420 }
421 
422 /*---------------------------------------------------------*/
423 
cgio_children_ids_f(cgint_f * cgio_num,double * pid,cgint_f * start,cgint_f * max_ret,cgint_f * num_ret,double * ids,cgint_f * ier)424 CGIODLL void cgio_children_ids_f(
425     cgint_f *cgio_num, double *pid, cgint_f *start, cgint_f *max_ret,
426     cgint_f *num_ret, double *ids, cgint_f *ier)
427 {
428     int i_num_ret;
429 
430     *ier = cgio_children_ids((int)*cgio_num, *pid, (int)*start, (int)*max_ret,
431                &i_num_ret, ids);
432     *num_ret = (cgint_f)i_num_ret;
433 }
434 
435 /*---------------------------------------------------------*/
436 
FMNAME(cgio_children_names_f,CGIO_CHILDREN_NAMES_F)437 CGIODLL void FMNAME(cgio_children_names_f, CGIO_CHILDREN_NAMES_F) (
438     cgint_f *cgio_num, double *pid, cgint_f *start, cgint_f *max_ret,
439     cgint_f *name_len, cgint_f *num_ret, STR_PSTR(names),
440     cgint_f *ier STR_PLEN(names))
441 {
442     int i_num_ret, i_name_len = (int)*name_len;
443     char *c_names;
444 
445     c_names = (char *) malloc ((size_t)*max_ret * (CGIO_MAX_NAME_LENGTH + 1));
446     if (c_names == NULL) {
447       *ier = (cgint_f)CGIO_ERR_MALLOC;
448         return;
449     }
450     *ier = (cgint_f)cgio_children_names((int)*cgio_num, *pid, (int)*start, (int)*max_ret,
451                CGIO_MAX_NAME_LENGTH + 1, &i_num_ret, c_names);
452     if (*ier == 0) {
453         int n;
454         char *pc = c_names;
455         char *pf = STR_PTR(names);
456         for (n = 0; n < i_num_ret; n++) {
457             to_f_string(pc, pf, i_name_len);
458             pc += (CGIO_MAX_NAME_LENGTH + 1);
459             pf += i_name_len;
460         }
461         *num_ret = (cgint_f)i_num_ret;
462     }
463     free(c_names);
464 }
465 
466 /*=========================================================
467  * read nodes
468  *=========================================================*/
469 
FMNAME(cgio_get_node_id_f,CGIO_GET_NODE_ID_F)470 CGIODLL void FMNAME(cgio_get_node_id_f, CGIO_GET_NODE_ID_F) (
471     cgint_f *cgio_num, double *pid, STR_PSTR(name), double *id,
472     cgint_f *ier STR_PLEN(name))
473 {
474     char c_name[CGIO_MAX_NAME_LENGTH+1];
475 
476     to_c_string(STR_PTR(name), STR_LEN(name), c_name, CGIO_MAX_NAME_LENGTH);
477     *ier = (cgint_f)cgio_get_node_id((int)*cgio_num, *pid, c_name, id);
478 }
479 
480 /*---------------------------------------------------------*/
481 
FMNAME(cgio_get_name_f,CGIO_GET_NAME_F)482 CGIODLL void FMNAME(cgio_get_name_f, CGIO_GET_NAME_F) (
483     cgint_f *cgio_num, double *id, STR_PSTR(name),
484     cgint_f *ier STR_PLEN(name))
485 {
486     char c_name[CGIO_MAX_NAME_LENGTH+1];
487 
488     *ier = (cgint_f)cgio_get_name((int)*cgio_num, *id, c_name);
489     if (*ier == 0)
490         to_f_string(c_name, STR_PTR(name), STR_LEN(name));
491 }
492 
493 /*---------------------------------------------------------*/
494 
FMNAME(cgio_get_label_f,CGIO_GET_LABEL_F)495 CGIODLL void FMNAME(cgio_get_label_f, CGIO_GET_LABEL_F) (
496     cgint_f *cgio_num, double *id, STR_PSTR(label),
497     cgint_f *ier STR_PLEN(label))
498 {
499     char c_label[CGIO_MAX_LABEL_LENGTH+1];
500 
501     *ier = (cgint_f)cgio_get_label((int)*cgio_num, *id, c_label);
502     if (*ier == 0)
503         to_f_string(c_label, STR_PTR(label), STR_LEN(label));
504 }
505 
506 /*---------------------------------------------------------*/
507 
FMNAME(cgio_get_data_type_f,CGIO_GET_DATA_TYPE_F)508 CGIODLL void FMNAME(cgio_get_data_type_f, CGIO_GET_DATA_TYPE_F) (
509     cgint_f *cgio_num, double *id, STR_PSTR(data_type),
510     cgint_f *ier STR_PLEN(data_type))
511 {
512     char c_type[CGIO_MAX_DATATYPE_LENGTH+1];
513 
514     *ier = (cgint_f)cgio_get_data_type((int)*cgio_num, *id, c_type);
515     if (*ier == 0)
516         to_f_string(c_type, STR_PTR(data_type), STR_LEN(data_type));
517 }
518 
519 /*---------------------------------------------------------*/
520 
cgio_get_data_size_f(cgint_f * cgio_num,double * id,cgsize_t * size,cgint_f * ier)521 CGIODLL void cgio_get_data_size_f(
522     cgint_f *cgio_num, double *id, cgsize_t *size, cgint_f *ier)
523 {
524     cglong_t data_size;
525 
526     *ier = (cgint_f)cgio_get_data_size((int)*cgio_num, *id, &data_size);
527     *size = (cgsize_t)data_size;
528 }
529 
530 /*---------------------------------------------------------*/
531 
FMNAME(cgio_read_all_data_type_f,CGIO_READ_ALL_DATA_TYPE_F)532 CGIODLL void FMNAME(cgio_read_all_data_type_f, CGIO_READ_ALL_DATA_TYPE_F) (
533     cgint_f *cgio_num, double *id, STR_PSTR(m_data_type), void *data, cgint_f *ier STR_PLEN(m_data_type))
534 {
535     char c_dtype[CGIO_MAX_DATATYPE_LENGTH+1];
536     to_c_string(STR_PTR(m_data_type), STR_LEN(m_data_type), c_dtype, CGIO_MAX_DATATYPE_LENGTH);
537     *ier = (cgint_f)cgio_read_all_data_type((int)*cgio_num, *id, c_dtype, data);
538 }
539 
540 /*---------------------------------------------------------*/
541 
FMNAME(cgio_read_block_data_type_f,CGIO_READ_BLOCK_DATA_TYPE_F)542 CGIODLL void FMNAME(cgio_read_block_data_type_f, CGIO_READ_BLOCK_DATA_TYPE_F) (
543     cgint_f *cgio_num, double *id, cgsize_t *b_start, cgsize_t *b_end,
544     STR_PSTR(m_data_type), void *data, cgint_f *ier STR_PLEN(m_data_type))
545 {
546     char c_dtype[CGIO_MAX_DATATYPE_LENGTH+1];
547     to_c_string(STR_PTR(m_data_type), STR_LEN(m_data_type), c_dtype, CGIO_MAX_DATATYPE_LENGTH);
548     *ier = (cgint_f)cgio_read_block_data_type((int)*cgio_num, *id, *b_start, *b_end, c_dtype, data);
549 }
550 
551 /*---------------------------------------------------------*/
552 
FMNAME(cgio_read_data_type_f,CGIO_READ_DATA_TYPE_F)553 CGIODLL void FMNAME(cgio_read_data_type_f, CGIO_READ_DATA_TYPE_F) (
554     cgint_f *cgio_num, double *id, cgsize_t *s_start, cgsize_t *s_end,
555     cgsize_t *s_stride,  STR_PSTR(m_data_type), cgint_f *m_ndims, cgsize_t *m_dims, cgsize_t *m_start,
556     cgsize_t *m_end, cgsize_t *m_stride, void *data, cgint_f *ier STR_PLEN(m_data_type))
557 {
558     char c_dtype[CGIO_MAX_DATATYPE_LENGTH+1];
559     to_c_string(STR_PTR(m_data_type), STR_LEN(m_data_type), c_dtype, CGIO_MAX_DATATYPE_LENGTH);
560     *ier = (cgint_f)cgio_read_data_type((int)*cgio_num, *id, s_start, s_end, s_stride, c_dtype,
561            (int)*m_ndims, m_dims, m_start, m_end, m_stride, data);
562 }
563 
564 /*=========================================================
565  * write nodes
566  *=========================================================*/
567 
FMNAME(cgio_set_name_f,CGIO_SET_NAME_F)568 CGIODLL void FMNAME(cgio_set_name_f, CGIO_SET_NAME_F) (
569     cgint_f *cgio_num, double *pid, double *id, STR_PSTR(name),
570     cgint_f *ier STR_PLEN(name))
571 {
572     char c_name[CGIO_MAX_NAME_LENGTH+1];
573 
574     to_c_string(STR_PTR(name), STR_LEN(name), c_name, CGIO_MAX_NAME_LENGTH);
575     *ier = (cgint_f)cgio_set_name((int)*cgio_num, *pid, *id, c_name);
576 }
577 
578 /*---------------------------------------------------------*/
579 
FMNAME(cgio_set_label_f,CGIO_SET_LABEL_F)580 CGIODLL void FMNAME(cgio_set_label_f, CGIO_SET_LABEL_F) (
581     cgint_f *cgio_num, double *id, STR_PSTR(label),
582     cgint_f *ier STR_PLEN(label))
583 {
584     char c_label[CGIO_MAX_LABEL_LENGTH+1];
585 
586     to_c_string(STR_PTR(label), STR_LEN(label), c_label, CGIO_MAX_LABEL_LENGTH);
587     *ier = (cgint_f)cgio_set_label((int)*cgio_num, *id, c_label);
588 }
589 
590 /*---------------------------------------------------------*/
591 
FMNAME(cgio_write_all_data_f,CGIO_WRITE_ALL_DATA_F)592 CGIODLL void FMNAME(cgio_write_all_data_f, CGIO_WRITE_ALL_DATA_F) (
593     cgint_f *cgio_num, double *id, void *data, cgint_f *ier)
594 {
595     *ier = (cgint_f)cgio_write_all_data((int)*cgio_num, *id, data);
596 }
597 
598 /*---------------------------------------------------------*/
599 
FMNAME(cgio_write_block_data_f,CGIO_WRITE_BLOCK_DATA_F)600 CGIODLL void FMNAME(cgio_write_block_data_f, CGIO_WRITE_BLOCK_DATA_F) (
601     cgint_f *cgio_num, double *id, cgsize_t *b_start, cgsize_t *b_end,
602     void *data, cgint_f *ier)
603 {
604     *ier = (cgint_f)cgio_write_block_data((int)*cgio_num, *id, *b_start, *b_end, data);
605 }
606 
607 /*---------------------------------------------------------*/
608 
FMNAME(cgio_write_data_f,CGIO_WRITE_DATA_F)609 CGIODLL void FMNAME(cgio_write_data_f, CGIO_WRITE_DATA_F) (
610     cgint_f *cgio_num, double *id, cgsize_t *s_start, cgsize_t *s_end,
611     cgsize_t *s_stride, cgsize_t *m_ndims, cgsize_t *m_dims, cgsize_t *m_start,
612     cgsize_t *m_end, cgsize_t *m_stride, void *data, cgint_f *ier)
613 {
614     *ier = (cgint_f)cgio_write_data((int)*cgio_num, *id, s_start, s_end, s_stride,
615                (int)*m_ndims, m_dims, m_start, m_end, m_stride, data);
616 }
617 
618 #undef CGIODLL
619 
620