00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <stdlib.h>
00022 #include <string.h>
00023 #include "fortran_macros.h"
00024 #include "ADFH.h"
00025
00026 #if defined(_WIN32) && defined(BUILD_DLL)
00027 # define CGNSDLL _declspec(dllexport)
00028 #else
00029 # define CGNSDLL
00030 #endif
00031
00032
00033
00034 static void StringFtoC(char *string, int string_length,
00035 char *c_string, int max_len, int *ierr) {
00036 int i, iend;
00037
00038 if (string == NULL || c_string == NULL) {
00039 *ierr = NULL_STRING_POINTER;
00040 return;
00041 }
00042
00044 for (iend = string_length-1; iend >= 0; iend--) {
00045 if (string[iend] != ' ') break;
00046 }
00047 if (iend >= max_len) {
00048 *ierr = STRING_LENGTH_TOO_BIG;
00049 return;
00050 }
00051
00053 for (i = 0; i <= iend; i++)
00054 c_string[i] = string[i];
00055
00057 c_string[i] = '\0';
00058 *ierr = NO_ERROR;
00059 }
00060
00061
00062
00063 static void StringCtoF(char *c_string, char *string,
00064 int string_length, int *ierr) {
00065 int i, len;
00066
00067 if (c_string == NULL || string == NULL) {
00068 *ierr = NULL_STRING_POINTER;
00069 return;
00070 }
00071 len = strlen(c_string);
00072
00073 if (len > string_length) len = string_length;
00074
00075 for (i = 0; i < len; i++)
00076 string[i] = c_string[i];
00077 while (i < string_length)
00078 string[i++] = ' ';
00079 *ierr = NO_ERROR;
00080 }
00081
00082
00083
00084 CGNSDLL void FMNAME(adfcnam, ADFCNAM) (double *ID, int *istart, int *inum,
00085 int *inamlen, int *inumret, STR_PSTR(names), int *ier STR_PLEN(names)) {
00086 char *tmp, *p = STR_PTR(names);
00087 int n, len = *inamlen;
00088
00089 *inumret = 0;
00090 if (*inum < 1) {
00091 *ier = NO_ERROR;
00092 return;
00093 }
00094 tmp = (char *) malloc (*inum * (len + 1));
00095 if (tmp == NULL) {
00096 *ier = MEMORY_ALLOCATION_FAILED;
00097 return;
00098 }
00099 ADFH_Children_Names(*ID, *istart, *inum, len+1, inumret, tmp, ier);
00100 if (*ier == NO_ERROR) {
00101 for (n = 0; n < *inumret; n++)
00102 StringCtoF(&tmp[n*(len+1)], &p[n*len], len, ier);
00103 }
00104 free(tmp);
00105 }
00106
00107
00108
00109 CGNSDLL void FMNAME(adfcids, ADFCIDS) (double *ID, int *istart, int *inum,
00110 int *inumret, double *cIDs, int *ier) {
00111
00112 ADFH_Children_IDs(*ID, *istart, *inum, inumret, cIDs, ier);
00113 }
00114
00115
00116
00117 CGNSDLL void FMNAME(adfrid, ADFRID) (double *ID) {
00118
00119 ADFH_Release_ID(*ID);
00120 }
00121
00122
00123
00124 CGNSDLL void FMNAME(adfcre, ADFCRE) (double *PID, STR_PSTR(name), double *ID,
00125 int *ier STR_PLEN(name)) {
00126 char c_name[ADF_NAME_LENGTH+1];
00127
00128 StringFtoC(STR_PTR(name), STR_LEN(name), c_name, ADF_NAME_LENGTH, ier);
00129 if (*ier == NO_ERROR)
00130 ADFH_Create(*PID, c_name, ID, ier);
00131 }
00132
00133
00134
00135 CGNSDLL void FMNAME(adfdclo, ADFDCLO) (double *RootID, int *ier) {
00136
00137 ADFH_Database_Close(*RootID, ier);
00138 }
00139
00140
00141
00142 CGNSDLL void FMNAME(adfddel, ADFDDEL) (STR_PSTR(filename),
00143 int *ier STR_PLEN(filename)) {
00144 int len = STR_LEN(filename);
00145 char *c_name;
00146
00147 if ((c_name = (char *) malloc (len + 1)) == NULL) {
00148 *ier = MEMORY_ALLOCATION_FAILED;
00149 return;
00150 }
00151 StringFtoC(STR_PTR(filename), len, c_name, len, ier);
00152 if (*ier == NO_ERROR)
00153 ADFH_Database_Delete(c_name, ier);
00154 free (c_name);
00155 }
00156
00157
00158
00159 CGNSDLL void FMNAME(adfdel, ADFDEL) (double *PID, double *ID, int *ier) {
00160
00161 ADFH_Delete(*PID, *ID, ier);
00162 }
00163
00164
00165
00166 CGNSDLL void FMNAME(adfdgc, ADFDGC) (double *ID, int *ier) {
00167
00168 ADFH_Database_Garbage_Collection(*ID, ier);
00169 }
00170
00171
00172
00173 CGNSDLL void FMNAME(adfdgf, ADFDGF) (double *RootID, STR_PSTR(format),
00174 int *ier STR_PLEN(format)) {
00175 char c_format[ADF_FORMAT_LENGTH+1];
00176
00177 ADFH_Database_Get_Format(*RootID, c_format, ier);
00178 if (*ier == NO_ERROR)
00179 StringCtoF(c_format, STR_PTR(format), STR_LEN(format), ier);
00180 }
00181
00182
00183
00184 CGNSDLL void FMNAME(adfdopn, ADFDOPN) (STR_PSTR(filename), STR_PSTR(status),
00185 STR_PSTR(format), double *RootID, int *ier STR_PLEN(filename)
00186 STR_PLEN(status) STR_PLEN(format)) {
00187 int len = STR_LEN(filename);
00188 char *c_filename;
00189 char c_status[ADF_STATUS_LENGTH+1];
00190 char c_format[ADF_FORMAT_LENGTH+1];
00191
00192 StringFtoC(STR_PTR(status), STR_LEN(status), c_status,
00193 ADF_STATUS_LENGTH, ier);
00194 if (*ier != NO_ERROR) return;
00195 StringFtoC(STR_PTR(format), STR_LEN(format), c_format,
00196 ADF_FORMAT_LENGTH, ier);
00197 if (*ier != NO_ERROR) return;
00198 if ((c_filename = (char *) malloc (len + 1)) == NULL) {
00199 *ier = MEMORY_ALLOCATION_FAILED;
00200 return;
00201 }
00202 StringFtoC(STR_PTR(filename), len, c_filename, len, ier);
00203 if (*ier == NO_ERROR)
00204 ADFH_Database_Open(c_filename, c_status, c_format, RootID, ier);
00205 free (c_filename);
00206 }
00207
00208
00209
00210 CGNSDLL void FMNAME(adfdsf, ADFDSF) (double *RootID, STR_PSTR(format),
00211 int *ier STR_PLEN(format)) {
00212 char c_format[ADF_FORMAT_LENGTH+1];
00213
00214 StringFtoC(STR_PTR(format), STR_LEN(format), c_format,
00215 ADF_FORMAT_LENGTH, ier);
00216 if (*ier == NO_ERROR)
00217 ADFH_Database_Set_Format(*RootID, c_format, ier);
00218 }
00219
00220
00221
00222 CGNSDLL void FMNAME(adfdver, ADFDVER) (double *RootID, STR_PSTR(version),
00223 STR_PSTR(cdate), STR_PSTR(mdate), int *ier STR_PLEN(version)
00224 STR_PLEN(cdate) STR_PLEN(mdate)) {
00225 char c_version[ADF_VERSION_LENGTH+1];
00226 char c_cdate[ADF_DATE_LENGTH+1];
00227 char c_mdate[ADF_DATE_LENGTH+1];
00228
00229 ADFH_Database_Version(*RootID, c_version, c_cdate, c_mdate, ier);
00230 if (*ier == NO_ERROR) {
00231 StringCtoF(c_version, STR_PTR(version), STR_LEN(version), ier);
00232 StringCtoF(c_cdate, STR_PTR(cdate), STR_LEN(cdate), ier);
00233 StringCtoF(c_mdate, STR_PTR(mdate), STR_LEN(mdate), ier);
00234 }
00235 }
00236
00237
00238
00239 CGNSDLL void FMNAME(adferr, ADFERR) (int *ier, STR_PSTR(errstr) STR_PLEN(errstr)) {
00240 int err;
00241 char errmsg[ADF_MAX_ERROR_STR_LENGTH+1];
00242
00243 ADFH_Error_Message(*ier, errmsg);
00244 StringCtoF(errmsg, STR_PTR(errstr), STR_LEN(errstr), &err);
00245 }
00246
00247
00248
00249 CGNSDLL void FMNAME(adfftd, ADFFTD) (double *ID, int *ier) {
00250
00251 ADFH_Flush_to_Disk(*ID, ier);
00252 }
00253
00254
00255
00256 CGNSDLL void FMNAME(adfgdt, ADFGDT) (double *ID, STR_PSTR(dtype),
00257 int *ier STR_PLEN(dtype)) {
00258 char c_type[ADF_DATA_TYPE_LENGTH+1];
00259
00260 ADFH_Get_Data_Type(*ID, c_type, ier);
00261 if (*ier == NO_ERROR)
00262 StringCtoF(c_type, STR_PTR(dtype), STR_LEN(dtype), ier);
00263 }
00264
00265
00266
00267 CGNSDLL void FMNAME(adfgdv, ADFGDV) (double *ID, int *dvals, int *ier) {
00268
00269 ADFH_Get_Dimension_Values(*ID, dvals, ier);
00270 }
00271
00272
00273
00274 CGNSDLL void FMNAME(adfges, ADFGES) (int *estate, int *ier) {
00275
00276 ADFH_Get_Error_State(estate, ier);
00277 }
00278
00279
00280
00281 CGNSDLL void FMNAME(adfglb, ADFGLB) (double *ID, STR_PSTR(label),
00282 int *ier STR_PLEN(label)) {
00283 char c_label[ADF_LABEL_LENGTH+1];
00284
00285 ADFH_Get_Label(*ID, c_label, ier);
00286 if (*ier == NO_ERROR)
00287 StringCtoF(c_label, STR_PTR(label), STR_LEN(label), ier);
00288 }
00289
00290
00291
00292 CGNSDLL void FMNAME(adfglkp, ADFGLKP) (double *ID, STR_PSTR(file), STR_PSTR(name),
00293 int *ier STR_PLEN(file) STR_PLEN(name)) {
00294 char c_file[ADF_FILENAME_LENGTH+1];
00295 char c_name[ADF_MAX_LINK_DATA_SIZE+1];
00296
00297 ADFH_Get_Link_Path(*ID, c_file, c_name, ier);
00298 if (*ier == NO_ERROR) {
00299 StringCtoF(c_file, STR_PTR(file), STR_LEN(file), ier);
00300 StringCtoF(c_name, STR_PTR(name), STR_LEN(name), ier);
00301 }
00302 }
00303
00304
00305
00306 CGNSDLL void FMNAME(adfgnam, ADFGNAM) (double *ID, STR_PSTR(name),
00307 int *ier STR_PLEN(name)) {
00308 char c_name[ADF_NAME_LENGTH+1];
00309
00310 ADFH_Get_Name(*ID, c_name, ier);
00311 if (*ier == NO_ERROR)
00312 StringCtoF(c_name, STR_PTR(name), STR_LEN(name), ier);
00313 }
00314
00315
00316
00317 CGNSDLL void FMNAME(adfgnd, ADFGND) (double *ID, int *ndims, int *ier) {
00318
00319 ADFH_Get_Number_of_Dimensions(*ID, ndims, ier);
00320 }
00321
00322
00323
00324 CGNSDLL void FMNAME(adfgnid, ADFGNID) (double *PID, STR_PSTR(name), double *ID,
00325 int *ier STR_PLEN(name)) {
00326 int len = STR_LEN(name);
00327 char *c_name;
00328
00329 if ((c_name = (char *) malloc (len+1)) == NULL) {
00330 *ier = MEMORY_ALLOCATION_FAILED;
00331 return;
00332 }
00333 StringFtoC(STR_PTR(name), len, c_name, len, ier);
00334 if (*ier == NO_ERROR)
00335 ADFH_Get_Node_ID(*PID, c_name, ID, ier);
00336 free(c_name);
00337 }
00338
00339
00340
00341 CGNSDLL void FMNAME(adfgrid, ADFGRID) (double *ID, double *RootID, int *ier) {
00342
00343 ADFH_Get_Root_ID(*ID, RootID, ier);
00344 }
00345
00346
00347
00348 CGNSDLL void FMNAME(adfislk, ADFISLK) (double *ID, int *lplen, int *ier) {
00349
00350 ADFH_Is_Link(*ID, lplen, ier);
00351 }
00352
00353
00354
00355 CGNSDLL void FMNAME(adflink, ADFLINK) (double *PID, STR_PSTR(name), STR_PSTR(file),
00356 STR_PSTR(nfile), double *ID, int *ier STR_PLEN(name)
00357 STR_PLEN(file) STR_PLEN(nfile)) {
00358 char c_name[ADF_NAME_LENGTH+1];
00359 char c_file[ADF_FILENAME_LENGTH+1];
00360 char c_nfile[ADF_MAX_LINK_DATA_SIZE+1];
00361
00362 StringFtoC(STR_PTR(name), STR_LEN(name), c_name, ADF_NAME_LENGTH, ier);
00363 if (*ier != NO_ERROR) return;
00364 StringFtoC(STR_PTR(file), STR_LEN(file), c_file, ADF_FILENAME_LENGTH, ier);
00365 if (*ier != NO_ERROR) return;
00366 StringFtoC(STR_PTR(nfile), STR_LEN(nfile), c_nfile,
00367 ADF_MAX_LINK_DATA_SIZE, ier);
00368 if (*ier == NO_ERROR)
00369 ADFH_Link(*PID, c_name, c_file, c_nfile, ID, ier);
00370 }
00371
00372
00373
00374 CGNSDLL void FMNAME(adflver, ADFLVER) (STR_PSTR(version), int *ier STR_PLEN(version)) {
00375 char c_version[ADF_VERSION_LENGTH+1];
00376
00377 ADFH_Library_Version(c_version, ier);
00378 if (*ier == NO_ERROR)
00379 StringCtoF(c_version, STR_PTR(version), STR_LEN(version), ier);
00380 }
00381
00382
00383
00384 CGNSDLL void FMNAME(adfmove, ADFMOVE) (double *PID, double *ID, double *NPID, int *ier) {
00385
00386 ADFH_Move_Child(*PID, *ID, *NPID, ier);
00387 }
00388
00389
00390
00391 CGNSDLL void FMNAME(adfncld, ADFNCLD) (double *ID, int *numcld, int *ier) {
00392
00393 ADFH_Number_of_Children(*ID, numcld, ier);
00394 }
00395
00396
00397
00398 CGNSDLL void FMNAME(adfpdim, ADFPDIM) (double *ID, STR_PSTR(dtype), int *dims,
00399 int *dvals, int *ier STR_PLEN(dtype)) {
00400 char c_type[ADF_DATA_TYPE_LENGTH+1];
00401
00402 StringFtoC(STR_PTR(dtype), STR_LEN(dtype), c_type,
00403 ADF_DATA_TYPE_LENGTH, ier);
00404 if (*ier == NO_ERROR)
00405 ADFH_Put_Dimension_Information(*ID, c_type, *dims, dvals, ier);
00406 }
00407
00408
00409
00410 CGNSDLL void FMNAME(adfpnam, ADFPNAM) (double *PID, double *ID, STR_PSTR(name),
00411 int *ier STR_PLEN(name)) {
00412 char c_name[ADF_NAME_LENGTH+1];
00413
00414 StringFtoC(STR_PTR(name), STR_LEN(name), c_name, ADF_NAME_LENGTH, ier);
00415 if (*ier == NO_ERROR)
00416 ADFH_Put_Name(*PID, *ID, c_name, ier);
00417 }
00418
00419
00420
00421 CGNSDLL void FMNAME(adfses, ADFSES) (int *estate, int *ier) {
00422
00423 ADFH_Set_Error_State(*estate, ier);
00424 }
00425
00426
00427
00428 CGNSDLL void FMNAME(adfslb, ADFSLB) (double *ID, STR_PSTR(label),
00429 int *ier STR_PLEN(label)) {
00430 char c_label[ADF_LABEL_LENGTH+1];
00431
00432 StringFtoC(STR_PTR(label), STR_LEN(label), c_label, ADF_LABEL_LENGTH, ier);
00433 if (*ier == NO_ERROR)
00434 ADFH_Set_Label(*ID, c_label, ier);
00435 }
00436
00437
00438
00439 CGNSDLL void FMNAME(adfread, ADFREAD) (double *ID, int *s_start, int *s_end,
00440 int *s_stride, int *m_num_dims, int *m_dims, int *m_start, int *m_end,
00441 int *m_stride, char *data, int *ier) {
00442
00443 ADFH_Read_Data(*ID, s_start, s_end, s_stride, *m_num_dims,
00444 m_dims, m_start, m_end, m_stride, data, ier);
00445 }
00446
00447
00448
00449 CGNSDLL void FMNAME(adfrall, ADFRALL) (double *ID, char *data, int *ier) {
00450
00451 ADFH_Read_All_Data(*ID, data, ier);
00452 }
00453
00454
00455
00456 CGNSDLL void FMNAME(adfrblk, ADFRBLK) (double *ID, int *b_start, int *b_end,
00457 char *data, int *ier) {
00458
00459 ADFH_Read_Block_Data(*ID, *b_start, *b_end, data, ier);
00460 }
00461
00462
00463
00464 CGNSDLL void FMNAME(adfwrit, ADFWRIT) (double *ID, int *s_start, int *s_end,
00465 int *s_stride, int *m_num_dims, int *m_dims, int *m_start, int *m_end,
00466 int *m_stride, char *data, int *ier) {
00467
00468 ADFH_Write_Data(*ID, s_start, s_end, s_stride, *m_num_dims,
00469 m_dims, m_start, m_end, m_stride, data, ier);
00470 }
00471
00472
00473
00474 CGNSDLL void FMNAME(adfwall, ADFWALL) (double *ID, char *data, int *ier) {
00475
00476 ADFH_Write_All_Data(*ID, data, ier);
00477 }
00478
00479
00480
00481 CGNSDLL void FMNAME(adfwblk, ADFRWBLK) (double *ID, int *b_start, int *b_end,
00482 char *data, int *ier) {
00483
00484 ADFH_Write_Block_Data(*ID, *b_start, *b_end, data, ier);
00485 }
00486
00487
00488
00489 CGNSDLL void FMNAME(adfreadc, ADFREADC) (double *ID, int *s_start, int *s_end,
00490 int *s_stride, int *m_num_dims, int *m_dims, int *m_start, int *m_end,
00491 int *m_stride, STR_PSTR(data), int *ier STR_PLEN(data)) {
00492
00493 ADFH_Read_Data(*ID, s_start, s_end, s_stride, *m_num_dims,
00494 m_dims, m_start, m_end, m_stride, STR_PTR(data), ier);
00495 }
00496
00497
00498
00499 CGNSDLL void FMNAME(adfrallc, ADFRALLC) (double *ID, STR_PSTR(data),
00500 int *ier STR_PLEN(data)) {
00501
00502 ADFH_Read_All_Data(*ID, STR_PTR(data), ier);
00503 }
00504
00505
00506
00507 CGNSDLL void FMNAME(adfrblkc, ADFRBLKC) (double *ID, int *b_start, int *b_end,
00508 STR_PSTR(data), int *ier STR_PLEN(data)) {
00509
00510 ADFH_Read_Block_Data(*ID, *b_start, *b_end, STR_PTR(data), ier);
00511 }
00512
00513
00514
00515 CGNSDLL void FMNAME(adfwritc, ADFWRITC) (double *ID, int *s_start, int *s_end,
00516 int *s_stride, int *m_num_dims, int *m_dims, int *m_start, int *m_end,
00517 int *m_stride, STR_PSTR(data), int *ier STR_PLEN(data)) {
00518
00519 ADFH_Write_Data(*ID, s_start, s_end, s_stride, *m_num_dims,
00520 m_dims, m_start, m_end, m_stride, STR_PTR(data), ier);
00521 }
00522
00523
00524
00525 CGNSDLL void FMNAME(adfwallc, ADFWALLC) (double *ID, STR_PSTR(data),
00526 int *ier STR_PLEN(data)) {
00527
00528 ADFH_Write_All_Data(*ID, STR_PTR(data), ier);
00529 }
00530
00531
00532
00533 CGNSDLL void FMNAME(adfwblkc, ADFRBWLKC) (double *ID, int *b_start, int *b_end,
00534 STR_PSTR(data), int *ier STR_PLEN(data)) {
00535
00536 ADFH_Write_Block_Data(*ID, *b_start, *b_end, STR_PTR(data), ier);
00537 }
00538