00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 static char USMID[] = "@(#) libcif/cifbinread.c 30.8 07/26/96 07:19:13";
00038
00039
00040
00041
00042
00043
00044
00045 #define CIF_VERSION 3
00046
00047 #ifdef _ABSOFT
00048 #include "cif.h"
00049 #else
00050 #include <cif.h>
00051 #endif
00052
00053 #include <memory.h>
00054 #include <stdio.h>
00055 #include <assert.h>
00056
00057 #include "cif_int.h"
00058
00059 extern void free(void *ptr);
00060
00061
00062
00063
00064
00065 static int
00066 read_strlist (cifd, ns, sp, fd)
00067 int cifd;
00068 int ns;
00069 char ***sp;
00070 FILE *fd;
00071 {
00072 register int i;
00073 register char **cp;
00074 register int mode;
00075 short slen[100];
00076
00077 if (fread ((char *)slen, sizeof(short), ns, fd) != ns) IO_ERROR;
00078 mode = _Cif_filetbl[cifd].mode;
00079 cp = *sp = (char **)_Cif_space[mode] (ns * sizeof(char *), cifd);
00080 if (cp == NULL)
00081 return (CIF_NOMEM);
00082 for (i = 0; i < ns; i++) {
00083 cp[i] = _Cif_space[mode] (slen[i]+1, cifd);
00084 if (cp[i] == NULL)
00085 return (CIF_NOMEM);
00086 if (fread (cp[i], sizeof(char), slen[i], fd) != slen[i]) IO_ERROR;
00087 (cp[i])[slen[i]] = '\0';
00088 }
00089 return (0);
00090 }
00091
00092
00093
00094
00095
00096 int
00097 _Cif_binread
00098 #ifdef __STDC__
00099 (int cifd, int rtype, struct Cif_generic *cr, FILE *fd)
00100 #else
00101 (cifd, rtype, cr, fd)
00102 int cifd;
00103 int rtype;
00104 struct Cif_generic *cr;
00105 FILE *fd;
00106 #endif
00107 {
00108
00109 register int i, n;
00110 register char *cp;
00111 register long *lp;
00112 register int mode;
00113 unsigned char c;
00114
00115 mode = _Cif_filetbl[cifd].mode;
00116
00117 switch (rtype) {
00118
00119 case CIF_CALLSITE:
00120 if ((n = CIFCS(cr)->nargs) > 0) {
00121 lp= CIFCS(cr)->argids= (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00122 if (lp == NULL)
00123 return (CIF_NOMEM);
00124 if (fread ((char *)lp, sizeof(long), n, fd) != n) IO_ERROR;
00125 }
00126 break;
00127
00128 case CIF_CIFHDR:
00129 CIFHDR(cr)->canpos = _Cif_filetbl[cifd].seek;
00130 CIFHDR(cr)->form = BINARY_CIF_FORMAT;
00131 break;
00132
00133 case CIF_COMBLK:
00134 if (_Cif_filetbl[cifd].return_version == 1) {
00135
00136 n = CIFCB1(cr)->nlen;
00137 cp = CIFCB1(cr)->name = _Cif_space[mode] (n+1, cifd);
00138 if (cp == NULL)
00139 return (CIF_NOMEM);
00140 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00141 cp[n] = '\0';
00142 }
00143 else {
00144
00145 n = CIFCB(cr)->nlen;
00146 cp = CIFCB(cr)->name = _Cif_space[mode] (n+1, cifd);
00147 if (cp == NULL)
00148 return (CIF_NOMEM);
00149 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00150 cp[n] = '\0';
00151 }
00152 break;
00153
00154 case CIF_CONST:
00155 n = CIFCON(cr)->nlen;
00156 cp = CIFCON(cr)->name = _Cif_space[mode] (n+1, cifd);
00157 if (cp == NULL)
00158 return(CIF_NOMEM);
00159 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00160 cp[n] = '\0';
00161 n = CIFCON(cr)->vlen;
00162 cp = CIFCON(cr)->value = _Cif_space[mode] (n+1, cifd);
00163 if (cp == NULL)
00164 return(CIF_NOMEM);
00165 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00166 cp[n] = '\0';
00167
00168 if (CIFCON(cr)->origform) {
00169 n = CIFCON(cr)->olen;
00170 cp = CIFCON(cr)->oform = _Cif_space[mode] (n+1, cifd);
00171
00172 if (cp == NULL)
00173 return(CIF_NOMEM);
00174 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00175 cp[n] = '\0';
00176 }
00177
00178
00179 break;
00180
00181 case CIF_ENTRY:
00182 if ((n = CIFENTRY(cr)->nargs) > 0) {
00183 lp = CIFENTRY(cr)->argids = (long *) _Cif_space[mode]
00184 (sizeof(long)*n, cifd);
00185 if (lp == NULL)
00186 return (CIF_NOMEM);
00187 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00188 }
00189 n = CIFENTRY(cr)->nlen;
00190 cp = CIFENTRY(cr)->name = _Cif_space[mode] (n+1, cifd);
00191 if (cp == NULL)
00192 return (CIF_NOMEM);
00193 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00194 cp[n] = '\0';
00195 break;
00196
00197 case CIF_FILE:
00198 if (_Cif_filetbl[cifd].return_version < 3) {
00199 int onlen = CIFFILE(cr)->onlen;
00200
00201
00202
00203
00204
00205 n = CIFFILE1(cr)->nlen;
00206 cp = CIFFILE1(cr)->name = _Cif_space[mode] (n+1, cifd);
00207 if (cp == NULL)
00208 return (CIF_NOMEM);
00209 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00210 cp[n] = '\0';
00211
00212
00213 if (_Cif_filetbl[cifd].version == 3) {
00214
00215
00216
00217
00218 char *tmp;
00219 tmp = _Cif_space[mode] (onlen +1, cifd);
00220 if (tmp == NULL)
00221 return (CIF_NOMEM);
00222 if (fread (tmp, sizeof(char), onlen, fd) != onlen) IO_ERROR;
00223 }
00224 }
00225 else {
00226
00227 n = CIFFILE(cr)->nlen;
00228 cp = CIFFILE(cr)->name = _Cif_space[mode] (n+1, cifd);
00229 if (cp == NULL)
00230 return (CIF_NOMEM);
00231 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00232 cp[n] = '\0';
00233
00234 if (_Cif_filetbl[cifd].version == 3) {
00235 n = CIFFILE(cr)->onlen;
00236 if (n > 0) {
00237 cp = CIFFILE(cr)->oname = _Cif_space[mode] (n+1, cifd);
00238 if (cp == NULL)
00239 return (CIF_NOMEM);
00240 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00241 cp[n] = '\0';
00242 }
00243 }
00244 else {
00245 CIFFILE(cr)->oname = (char *) NULL;
00246 }
00247 }
00248 break;
00249
00250 case CIF_LABEL:
00251 n = CIFLABEL(cr)->nlen;
00252 cp = CIFLABEL(cr)->name = _Cif_space[mode] (n+1, cifd);
00253 if (cp == NULL)
00254 return (CIF_NOMEM);
00255 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00256 cp[n] = '\0';
00257 break;
00258
00259 case CIF_ORIG_CMD:
00260 n = CIFOCMD(cr)->nlen;
00261 cp = CIFOCMD(cr)->name = _Cif_space[mode] (n+1, cifd);
00262 if (cp == NULL)
00263 return (CIF_NOMEM);
00264 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00265 cp[n] = '\0';
00266 break;
00267
00268 case CIF_CDIR:
00269 n = CIFCDIR(cr)->nids;
00270 lp = CIFCDIR(cr)->ids = (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00271 if (lp == NULL)
00272 return (CIF_NOMEM);
00273 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00274 break;
00275
00276 case CIF_CDIR_DOSHARED:
00277 n = CIFCDIRDO(cr)->nids;
00278 lp = CIFCDIRDO(cr)->ids = (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00279 if (lp == NULL)
00280 return (CIF_NOMEM);
00281 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00282 break;
00283
00284 case CIF_GEOMETRY:
00285 if ((n = CIFGEOM(cr)->ndims) > 0) {
00286 CIFGEOM(cr)->dim =
00287 (struct Cif_geometry_dim *)_Cif_space[mode](sizeof(struct Cif_geometry_dim)*n, cifd);
00288 if (CIFGEOM(cr)->dim == NULL)
00289 return (CIF_NOMEM);
00290 if (fread ((char *)CIFGEOM(cr)->dim, GEOM_SSIZE, n, fd) != n) IO_ERROR;
00291 }
00292 n = CIFGEOM(cr)->nlen;
00293 if (n > 0) {
00294 cp = CIFGEOM(cr)->name = _Cif_space[mode] (n+1, cifd);
00295 if (cp == NULL)
00296 return (CIF_NOMEM);
00297 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00298 cp[n] = '\0';
00299 }
00300 break;
00301
00302 case CIF_MESSAGE:
00303
00304 if (_Cif_filetbl[cifd].return_version < 3) {
00305
00306 if (_Cif_filetbl[cifd].version == 3) {
00307
00308
00309
00310
00311 char *tmp;
00312 n = CIFMSG(cr)->nlen;
00313 tmp = _Cif_space[mode] (n +1, cifd);
00314 if (tmp == NULL)
00315 return (CIF_NOMEM);
00316 if (fread (tmp, sizeof(char), n, fd) != n) IO_ERROR;
00317 }
00318
00319 if (CIFMSG1(cr)->nargs > 0) {
00320 if ((i= read_strlist (cifd,
00321 (int) CIFMSG1(cr)->nargs,
00322 &CIFMSG1(cr)->args, fd)) < 0)
00323 return (i);
00324 }
00325 }
00326 else {
00327 if (_Cif_filetbl[cifd].version == 3) {
00328 n = CIFMSG(cr)->nlen;
00329 if (n > 0) {
00330 cp = CIFMSG(cr)->name = _Cif_space[mode] (n+1, cifd);
00331 if (cp == NULL)
00332 return (CIF_NOMEM);
00333 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00334 cp[n] = '\0';
00335 }
00336 }
00337 else {
00338 CIFMSG(cr)->name = (char *) NULL;
00339 }
00340 if (CIFMSG(cr)->nargs > 0) {
00341 if ((i= read_strlist (cifd,
00342 (int) CIFMSG(cr)->nargs,
00343 &CIFMSG(cr)->args, fd)) < 0)
00344 return (i);
00345 }
00346 }
00347
00348 break;
00349
00350 case CIF_MISC_OPTS:
00351
00352 if (_Cif_filetbl[cifd].return_version == 1) {
00353
00354 if ((n = CIFMO1(cr)->nmsgs) > 0) {
00355 lp= CIFMO1(cr)->msgno= (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
00356 if (lp == NULL)
00357 return (CIF_NOMEM);
00358 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00359 }
00360 if (CIFMO1(cr)->ncdirs > 0) {
00361 if ((i= read_strlist (cifd, (int) CIFMO1(cr)->ncdirs, &CIFMO1(cr)->cdirs, fd)) < 0)
00362 return (i);
00363 }
00364 n = CIFMO1(cr)->onlen;
00365 cp = CIFMO1(cr)->objname = _Cif_space[mode] (n+1, cifd);
00366 if (cp == NULL)
00367 return (CIF_NOMEM);
00368 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00369 cp[n] = '\0';
00370 n = CIFMO1(cr)->cnlen;
00371 cp = CIFMO1(cr)->calname = _Cif_space[mode] (n+1, cifd);
00372 if (cp == NULL)
00373 return (CIF_NOMEM);
00374 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00375 cp[n] = '\0';
00376 n = CIFMO1(cr)->inlen;
00377 cp = CIFMO1(cr)->inname = _Cif_space[mode] (n+1, cifd);
00378 if (cp == NULL)
00379 return (CIF_NOMEM);
00380 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00381 cp[n] = '\0';
00382 }
00383 else {
00384
00385 if ((n = CIFMO(cr)->nmsgs) > 0) {
00386 lp= CIFMO(cr)->msgno= (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
00387 if (lp == NULL)
00388 return (CIF_NOMEM);
00389 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00390 }
00391 if (CIFMO(cr)->ncdirs > 0) {
00392 if ((i= read_strlist (cifd, (int) CIFMO(cr)->ncdirs, &CIFMO(cr)->cdirs, fd)) < 0)
00393 return (i);
00394 }
00395 n = CIFMO(cr)->onlen;
00396 cp = CIFMO(cr)->objname = _Cif_space[mode] (n+1, cifd);
00397 if (cp == NULL)
00398 return (CIF_NOMEM);
00399 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00400 cp[n] = '\0';
00401 n = CIFMO(cr)->cnlen;
00402 cp = CIFMO(cr)->calname = _Cif_space[mode] (n+1, cifd);
00403 if (cp == NULL)
00404 return (CIF_NOMEM);
00405 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00406 cp[n] = '\0';
00407 n = CIFMO(cr)->inlen;
00408 cp = CIFMO(cr)->inname = _Cif_space[mode] (n+1, cifd);
00409 if (cp == NULL)
00410 return (CIF_NOMEM);
00411 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00412 cp[n] = '\0';
00413 n = CIFMO(cr)->llen;
00414 cp = CIFMO(cr)->lname = _Cif_space[mode] (n+1, cifd);
00415 if (cp == NULL)
00416 return (CIF_NOMEM);
00417 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00418 cp[n] = '\0';
00419
00420 if (CIFMO(cr)->numincs > 0) {
00421 if ((i= read_strlist (cifd, (int) CIFMO(cr)->numincs, &CIFMO(cr)->incdirs, fd)) < 0)
00422 return (i);
00423 }
00424
00425 }
00426
00427 break;
00428
00429 case CIF_NAMELIST:
00430 n = CIFNL(cr)->nlen;
00431 cp = CIFNL(cr)->name = _Cif_space[mode] (n+1, cifd);
00432 if (cp == NULL)
00433 return (CIF_NOMEM);
00434 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00435 cp[n] = '\0';
00436 n = CIFNL(cr)->nids;
00437 lp = CIFNL(cr)->ids = (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00438 if (lp == NULL)
00439 return (CIF_NOMEM);
00440 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00441 break;
00442
00443 case CIF_ND_MSG:
00444 if (CIFNMSG(cr)->nargs > 0) {
00445 if ((i = read_strlist (cifd, (int) CIFNMSG(cr)->nargs, &CIFNMSG(cr)->args, fd))
00446 < 0) return (i);
00447 }
00448 break;
00449
00450 case CIF_OBJECT:
00451 if (_Cif_filetbl[cifd].return_version == 1) {
00452
00453 if ((n = CIFOBJ1(cr)->nlen) > 0) {
00454 cp = CIFOBJ1(cr)->name = _Cif_space[mode] (n+1, cifd);
00455 if (cp == NULL)
00456 return (CIF_NOMEM);
00457 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00458 cp[n] = '\0';
00459 }
00460 if ((n = CIFOBJ1(cr)->ndims) > 0) {
00461 CIFOBJ1(cr)->dim =
00462 (struct Cif_dim *)_Cif_space[mode] (sizeof(struct Cif_dim)*n, cifd);
00463 if (CIFOBJ1(cr)->dim == NULL)
00464 return (CIF_NOMEM);
00465 if (fread ((char *)CIFOBJ1(cr)->dim, DIM_SSIZE, n, fd) != n) IO_ERROR;
00466 }
00467 }
00468 else {
00469 if ((n = CIFOBJ(cr)->nlen) > 0) {
00470 cp = CIFOBJ(cr)->name = _Cif_space[mode] (n+1, cifd);
00471 if (cp == NULL)
00472 return (CIF_NOMEM);
00473 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00474 cp[n] = '\0';
00475 }
00476 if ((n = CIFOBJ(cr)->ndims) > 0) {
00477 CIFOBJ(cr)->dim =
00478 (struct Cif_dim *)_Cif_space[mode] (sizeof(struct Cif_dim)*n, cifd);
00479 if (CIFOBJ(cr)->dim == NULL)
00480 return (CIF_NOMEM);
00481 if (fread ((char *)CIFOBJ(cr)->dim, DIM_SSIZE, n, fd) != n) IO_ERROR;
00482 }
00483 }
00484 break;
00485
00486 case CIF_UNIT:
00487 n = CIFUNIT(cr)->nlen;
00488 cp = CIFUNIT(cr)->name = _Cif_space[mode] (n+1, cifd);
00489 if (cp == NULL)
00490 return (CIF_NOMEM);
00491 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00492 cp[n] = '\0';
00493 break;
00494
00495 case CIF_ENDUNIT:
00496 n = CIFENDU(cr)->nlen;
00497 cp = CIFENDU(cr)->name = _Cif_space[mode] (n+1, cifd);
00498 if (cp == NULL)
00499 return (CIF_NOMEM);
00500 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00501 cp[n] = '\0';
00502 break;
00503
00504 case CIF_USAGE:
00505 if (_Cif_filetbl[cifd].return_version == 1) {
00506
00507 n = CIFUSAGE1(cr)->nuses;
00508 CIFUSAGE1(cr)->use =
00509 (struct Cif_use *) _Cif_space[mode] (sizeof(struct Cif_use_1)*n, cifd);
00510 if (CIFUSAGE1(cr)->use == NULL)
00511 return (CIF_NOMEM);
00512 if (fread ((char *)CIFUSAGE1(cr)->use, sizeof(struct Cif_use_1), n, fd)
00513 != n) IO_ERROR;
00514
00515 }
00516 else {
00517
00518 n = CIFUSAGE(cr)->nuses;
00519 CIFUSAGE(cr)->use =
00520 (struct Cif_use *) _Cif_space[mode] (sizeof(struct Cif_use)*n, cifd);
00521 if (CIFUSAGE(cr)->use == NULL)
00522 return (CIF_NOMEM);
00523 if (fread ((char *)CIFUSAGE(cr)->use, sizeof(struct Cif_use), n, fd)
00524 != n) IO_ERROR;
00525
00526 if (CIFUSAGE(cr)->nmembs > 0) {
00527
00528 n = CIFUSAGE(cr)->nmembs;
00529 CIFUSAGE(cr)->membs = (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
00530 if (CIFUSAGE(cr)->membs == NULL)
00531 return (CIF_NOMEM);
00532 if (fread ((char *)CIFUSAGE(cr)->membs, sizeof(long), n, fd)
00533 != n) IO_ERROR;
00534 }
00535 }
00536 break;
00537
00538 case CIF_FILEDIR:
00539 {
00540 struct Cif_unittbl *ut;
00541
00542 n = CIFFDIR(cr)->nunits;
00543 ut = CIFFDIR(cr)->ut = (struct Cif_unittbl *) _Cif_space[mode]
00544 (sizeof(struct Cif_unittbl)*n, cifd);
00545 if (ut == NULL)
00546 return (CIF_NOMEM);
00547 (void) memset((char *)ut, 0, n * sizeof(struct Cif_unittbl));
00548 for (i = 0; i < n; i++, ut++) {
00549 if (fread ((char *)ut, UNITTBL_SSIZE, 1, fd) != 1) IO_ERROR;
00550 cp = ut->name = _Cif_space[mode] (ut->nlen+1, cifd);
00551 if (cp == NULL)
00552 return (CIF_NOMEM);
00553 if (fread (cp, sizeof(char), ut->nlen, fd) != ut->nlen) IO_ERROR;
00554 cp[ut->nlen] = '\0';
00555 }
00556 break;
00557 }
00558
00559 case CIF_UNITDIR:
00560 {
00561 struct Cif_urectbl ur[CIF_MAXRECORD];
00562 struct Cif_urectbl *urp;
00563
00564 n = sizeof(struct Cif_urectbl) * CIF_MAXRECORD;
00565 urp = CIFUDIR(cr)->ur = (struct Cif_urectbl *) _Cif_space[mode] (n, cifd);
00566 if (urp == NULL)
00567 return(CIF_NOMEM);
00568 (void) memset ((char *)urp, '\0', n);
00569 n = CIFUDIR(cr)->nsections;
00570 if (fread ((char *)ur, sizeof(struct Cif_urectbl), n, fd) != n)
00571 IO_ERROR;
00572 for (i = 0; i < n; i++) {
00573 urp[ur[i].rectype] = ur[i];
00574
00575
00576
00577 if (_Cif_shortsize[ur[i].rectype][_Cif_filetbl[cifd].return_version] == 0)
00578 urp[ur[i].rectype].nrecords = 0;
00579 }
00580
00581
00582 if (_Cif_filetbl[cifd].return_version == 1)
00583 CIFUDIR(cr)->nsections = CIF_MAXRECORD_1;
00584 else
00585 CIFUDIR(cr)->nsections = CIF_MAXRECORD;
00586
00587 break;
00588 }
00589
00590 case CIF_C_TAG:
00591 {
00592 struct Cif_tmod *tm;
00593
00594 n = CIFCTAG(cr)->nmods;
00595 tm = CIFCTAG(cr)->mods =
00596 (struct Cif_tmod *) _Cif_space[mode] (sizeof(struct Cif_tmod)*n, cifd);
00597 if (tm == NULL)
00598 return (CIF_NOMEM);
00599 for (i = 0; i < n; i++)
00600 if (fread ((char *)&(tm[i]), TMOD_SSIZE, 1, fd) != 1) IO_ERROR;
00601 n = CIFCTAG(cr)-> nmems;
00602 CIFCTAG(cr)->memids = (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
00603 if (CIFCTAG(cr)->memids == NULL)
00604 return (CIF_NOMEM);
00605 if (fread ((char *)CIFCTAG(cr)->memids, sizeof(long), n, fd) != n)
00606 IO_ERROR;
00607 n = CIFCTAG(cr)->nlen;
00608 CIFCTAG(cr)->name = _Cif_space[mode](n+1, cifd);
00609 if (CIFCTAG(cr)->name == NULL)
00610 return (CIF_NOMEM);
00611 if (fread ((char *)CIFCTAG(cr)->name, sizeof(char), n, fd) != n)
00612 IO_ERROR;
00613 (CIFCTAG(cr)->name)[n] = '\0';
00614 break;
00615 }
00616
00617 case CIF_C_OPTS:
00618 n = CIFCOPTS(cr)->nlen;
00619 CIFCOPTS(cr)->name = _Cif_space[mode](n+1, cifd);
00620 if (CIFCOPTS(cr)->name == NULL)
00621 return (CIF_NOMEM);
00622 if (fread ((char *)CIFCOPTS(cr)->name, sizeof(char), n, fd) != n)
00623 IO_ERROR;
00624 (CIFCOPTS(cr)->name)[n] = '\0';
00625 if (CIFCOPTS(cr)->nincs > 0) {
00626 if ((i = read_strlist (cifd, (int) CIFCOPTS(cr)->nincs, &CIFCOPTS(cr)->incs, fd))
00627 < 0) return (i);
00628 }
00629 if (CIFCOPTS(cr)->ndefs > 0) {
00630 if ((i = read_strlist (cifd, (int) CIFCOPTS(cr)->ndefs, &CIFCOPTS(cr)->defs, fd))
00631 < 0) return (i);
00632 }
00633 if (CIFCOPTS(cr)->nudefs > 0) {
00634 if ((i = read_strlist (cifd, (int) CIFCOPTS(cr)->nudefs, &CIFCOPTS(cr)->udefs, fd))
00635 < 0) return (i);
00636 }
00637 break;
00638
00639 case CIF_C_MESSAGE:
00640 if (_Cif_filetbl[cifd].return_version == 1) {
00641 if (CIFCMSG1(cr)->nargs > 0) {
00642 if ((i = read_strlist (cifd, (int) CIFCMSG(cr)->nargs, &CIFCMSG(cr)->args, fd)) < 0)
00643 return (i);
00644 }
00645 }
00646 else {
00647 if (CIFCMSG(cr)->nargs > 0) {
00648 if ((i = read_strlist (cifd, (int) CIFCMSG(cr)->nargs, &CIFCMSG(cr)->args, fd)) < 0)
00649 return (i);
00650 }
00651 }
00652 break;
00653
00654 case CIF_C_CONST:
00655 n = CIFCCON(cr)->vlen;
00656 CIFCCON(cr)->value = _Cif_space[mode](n+1, cifd);
00657 if (CIFCCON(cr)->value == NULL)
00658 return (CIF_NOMEM);
00659 if (fread ((char *)CIFCCON(cr)->value, sizeof(char), n, fd) != n)
00660 IO_ERROR;
00661 (CIFCCON(cr)->value)[n] = '\0';
00662 break;
00663
00664 case CIF_C_ENTRY:
00665 {
00666 struct Cif_tmod *tm;
00667
00668 if (_Cif_filetbl[cifd].return_version == 1) {
00669
00670 n = CIFCENTRY1(cr)->nmods;
00671 tm = CIFCENTRY1(cr)->mods =
00672 (struct Cif_tmod *) _Cif_space[mode] (sizeof(struct Cif_tmod)*n, cifd);
00673 if (tm == NULL)
00674 return (CIF_NOMEM);
00675 for (i = 0; i < n; i++)
00676 if (fread ((char *)&(tm[i]), TMOD_SSIZE, 1, fd) != 1) IO_ERROR;
00677
00678 n = CIFCENTRY1(cr)->nargs;
00679 CIFCENTRY1(cr)->argids = (long *) _Cif_space[mode](sizeof(long)*n, cifd);
00680 if (CIFCENTRY1(cr)->argids == NULL)
00681 return (CIF_NOMEM);
00682 if (fread ((char *)CIFCENTRY1(cr)->argids, sizeof(long), n, fd) != n)
00683 IO_ERROR;
00684
00685 n = CIFCENTRY1(cr)->nlen;
00686 CIFCENTRY1(cr)->name = _Cif_space[mode](n+1, cifd);
00687 if (CIFCENTRY1(cr)->name == NULL)
00688 return (CIF_NOMEM);
00689 if (fread ((char *)CIFCENTRY1(cr)->name, sizeof(char), n, fd) != n)
00690 IO_ERROR;
00691 (CIFCENTRY1(cr)->name)[n] = '\0';
00692 }
00693 else {
00694
00695 n = CIFCENTRY(cr)->nmods;
00696 tm = CIFCENTRY(cr)->mods =
00697 (struct Cif_tmod *) _Cif_space[mode] (sizeof(struct Cif_tmod)*n, cifd);
00698 if (tm == NULL)
00699 return (CIF_NOMEM);
00700 for (i = 0; i < n; i++)
00701 if (fread ((char *)&(tm[i]), TMOD_SSIZE, 1, fd) != 1) IO_ERROR;
00702
00703 n = CIFCENTRY(cr)->nargs;
00704 CIFCENTRY(cr)->argids = (long *) _Cif_space[mode](sizeof(long)*n, cifd);
00705 if (CIFCENTRY(cr)->argids == NULL)
00706 return (CIF_NOMEM);
00707 if (fread ((char *)CIFCENTRY(cr)->argids, sizeof(long), n, fd) != n)
00708 IO_ERROR;
00709
00710 n = CIFCENTRY(cr)->nlen;
00711 CIFCENTRY(cr)->name = _Cif_space[mode](n+1, cifd);
00712 if (CIFCENTRY(cr)->name == NULL)
00713 return (CIF_NOMEM);
00714 if (fread ((char *)CIFCENTRY(cr)->name, sizeof(char), n, fd) != n)
00715 IO_ERROR;
00716 (CIFCENTRY(cr)->name)[n] = '\0';
00717 }
00718
00719 break;
00720 }
00721
00722 case CIF_C_OBJECT:
00723 {
00724 struct Cif_tmod *tm;
00725
00726 n = CIFCOBJ(cr)->nmods;
00727 tm = CIFCOBJ(cr)->mods =
00728 (struct Cif_tmod *) _Cif_space[mode] (sizeof(struct Cif_tmod)*n, cifd);
00729 if (tm == NULL)
00730 return (CIF_NOMEM);
00731 for (i = 0; i < n; i++)
00732 if (fread ((char *)&(tm[i]), TMOD_SSIZE, 1, fd) != 1) IO_ERROR;
00733 if ((n = CIFCOBJ(cr)->nlen) > 0) {
00734 CIFCOBJ(cr)->name = _Cif_space[mode](n+1, cifd);
00735 if (CIFCOBJ(cr)->name == NULL)
00736 return (CIF_NOMEM);
00737 if (fread ((char *)CIFCOBJ(cr)->name, sizeof(char), n, fd) != n)
00738 IO_ERROR;
00739 (CIFCOBJ(cr)->name)[n] = '\0';
00740 }
00741
00742 break;
00743 }
00744
00745 case CIF_C_LINT_DIRECTIVE:
00746 {
00747 if ((n = CIFCLDIR(cr)->nlen) > 0) {
00748 CIFCLDIR(cr)->name = _Cif_space[mode](n+1, cifd);
00749 if (CIFCLDIR(cr)->name == NULL)
00750 return (CIF_NOMEM);
00751 if (fread ((char *)CIFCLDIR(cr)->name, sizeof(char), n, fd) != n)
00752 IO_ERROR;
00753 (CIFCLDIR(cr)->name)[n] = '\0';
00754 }
00755
00756 break;
00757 }
00758
00759 case CIF_C_MACRO_DEF:
00760 {
00761 if ((n = CIFCMDEF(cr)->nlen) > 0) {
00762 CIFCMDEF(cr)->name = _Cif_space[mode](n+1, cifd);
00763 if (CIFCMDEF(cr)->name == NULL)
00764 return (CIF_NOMEM);
00765 if (fread ((char *)CIFCMDEF(cr)->name, sizeof(char), n, fd) != n)
00766 IO_ERROR;
00767 (CIFCMDEF(cr)->name)[n] = '\0';
00768 }
00769
00770 break;
00771 }
00772
00773 case CIF_C_ENTRY_END:
00774 {
00775 if ((n = CIFCEEND(cr)->nlen) > 0) {
00776 CIFCEEND(cr)->name = _Cif_space[mode](n+1, cifd);
00777 if (CIFCEEND(cr)->name == NULL)
00778 return (CIF_NOMEM);
00779 if (fread ((char *)CIFCEEND(cr)->name, sizeof(char), n, fd) != n)
00780 IO_ERROR;
00781 (CIFCEEND(cr)->name)[n] = '\0';
00782 }
00783
00784 break;
00785 }
00786
00787 #ifndef CRAY2
00788 case CIF_F90_CALLSITE:
00789 if ((n = CIFF90CS(cr)->nargs) > 0) {
00790 lp= CIFF90CS(cr)->argids= (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00791 if (lp == NULL)
00792 return (CIF_NOMEM);
00793 if (fread ((char *)lp, sizeof(long), n, fd) != n) IO_ERROR;
00794
00795 lp= (long *) (CIFF90CS(cr)->nmembs=
00796 (int *)_Cif_space[mode] (sizeof(int)*n, cifd));
00797 if (lp == NULL)
00798 return (CIF_NOMEM);
00799 if (fread ((char *)lp, sizeof(int), n, fd) != n) IO_ERROR;
00800 lp= (long *) (CIFF90CS(cr)->membs=
00801 (long **)_Cif_space[mode] (sizeof(long *)*n, cifd));
00802 if (lp == NULL)
00803 return (CIF_NOMEM);
00804
00805 for (i = 0; i < (int) CIFF90CS(cr)->nargs; i++) {
00806 if (CIFF90CS(cr)->nmembs[i] > 0) {
00807 lp= (long *) (CIFF90CS(cr)->membs[i]=
00808 (long *)_Cif_space[mode] (sizeof(long)*CIFF90CS(cr)->nmembs[i], cifd));
00809 if (lp == NULL)
00810 return (CIF_NOMEM);
00811 if (fread ((char *)lp, sizeof(long), CIFF90CS(cr)->nmembs[i], fd) != CIFF90CS(cr)->nmembs[i]) IO_ERROR;
00812 }
00813 }
00814
00815 if (CIFF90CS(cr)->rank == 1) {
00816
00817 lp= (long *) (CIFF90CS(cr)->ranks = (int *)_Cif_space[mode] (sizeof(int)*n, cifd));
00818 if (lp == NULL)
00819 return (CIF_NOMEM);
00820 if (fread ((char *)lp, sizeof(int), n, fd) != n) IO_ERROR;
00821 }
00822
00823
00824 }
00825 break;
00826
00827 case CIF_F90_SCOPE_INFO:
00828 if ((n = CIFF90SI(cr)->numalts) > 0) {
00829 lp= CIFF90SI(cr)->entryids= (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00830 if (lp == NULL)
00831 return (CIF_NOMEM);
00832 if (fread ((char *)lp, sizeof(long), n, fd) != n) IO_ERROR;
00833 }
00834 break;
00835
00836 case CIF_F90_COMBLK:
00837 n = CIFF90CB(cr)->nlen;
00838 cp = CIFF90CB(cr)->name = _Cif_space[mode] (n+1, cifd);
00839 if (cp == NULL)
00840 return (CIF_NOMEM);
00841 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00842 cp[n] = '\0';
00843 break;
00844
00845 case CIF_F90_CONST:
00846 n = CIFF90CON(cr)->vlen;
00847 cp = CIFF90CON(cr)->value = _Cif_space[mode] (n+1, cifd);
00848 if (cp == NULL)
00849 return(CIF_NOMEM);
00850 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00851 cp[n] = '\0';
00852 break;
00853
00854 case CIF_F90_ENTRY:
00855
00856 if ((n = CIFF90ENTRY(cr)->nargs) > 0) {
00857 lp = CIFF90ENTRY(cr)->argids = (long *) _Cif_space[mode]
00858 (sizeof(long)*n, cifd);
00859 if (lp == NULL)
00860 return (CIF_NOMEM);
00861 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00862 }
00863 n = CIFF90ENTRY(cr)->nlen;
00864 cp = CIFF90ENTRY(cr)->name = _Cif_space[mode] (n+1, cifd);
00865 if (cp == NULL)
00866 return (CIF_NOMEM);
00867 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00868 cp[n] = '\0';
00869 break;
00870
00871 case CIF_F90_DERIVED_TYPE:
00872 if (_Cif_filetbl[cifd].return_version == 2) {
00873
00874 n = CIFF90DTYPE2(cr)->nlen;
00875 cp = CIFF90DTYPE2(cr)->name = _Cif_space[mode] (n+1, cifd);
00876 if (cp == NULL)
00877 return (CIF_NOMEM);
00878 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00879 cp[n] = '\0';
00880
00881 if ((n = CIFF90DTYPE2(cr)->nmembs) > 0) {
00882 lp = CIFF90DTYPE2(cr)->memids = (long *) _Cif_space[mode]
00883 (sizeof(long)*n, cifd);
00884 if (lp == NULL)
00885 return (CIF_NOMEM);
00886 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00887 }
00888 }
00889 else {
00890 n = CIFF90DTYPE(cr)->nlen;
00891 cp = CIFF90DTYPE(cr)->name = _Cif_space[mode] (n+1, cifd);
00892 if (cp == NULL)
00893 return (CIF_NOMEM);
00894 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00895 cp[n] = '\0';
00896
00897 if ((n = CIFF90DTYPE(cr)->nmembs) > 0) {
00898 lp = CIFF90DTYPE(cr)->memids = (long *) _Cif_space[mode]
00899 (sizeof(long)*n, cifd);
00900 if (lp == NULL)
00901 return (CIF_NOMEM);
00902 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00903 }
00904 }
00905 break;
00906
00907 case CIF_F90_LABEL:
00908 n = CIFF90LABEL(cr)->nlen;
00909 cp = CIFF90LABEL(cr)->name = _Cif_space[mode] (n+1, cifd);
00910 if (cp == NULL)
00911 return (CIF_NOMEM);
00912 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00913 cp[n] = '\0';
00914 break;
00915
00916 case CIF_F90_NAMELIST:
00917 n = CIFF90NL(cr)->nlen;
00918 cp = CIFF90NL(cr)->name = _Cif_space[mode] (n+1, cifd);
00919 if (cp == NULL)
00920 return (CIF_NOMEM);
00921 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00922 cp[n] = '\0';
00923 n = CIFF90NL(cr)->nids;
00924 lp = CIFF90NL(cr)->ids = (long *)_Cif_space[mode] (sizeof(long)*n, cifd);
00925 if (lp == NULL)
00926 return (CIF_NOMEM);
00927 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00928 break;
00929
00930 case CIF_F90_OBJECT:
00931 if ((n = CIFF90OBJ(cr)->nlen) > 0) {
00932 cp = CIFF90OBJ(cr)->name = _Cif_space[mode] (n+1, cifd);
00933 if (cp == NULL)
00934 return (CIF_NOMEM);
00935 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00936 cp[n] = '\0';
00937 }
00938 if ((n = CIFF90OBJ(cr)->ndims) > 0 &&
00939 CIFF90OBJ(cr)->atype != CIF_AT_DEFERRED) {
00940
00941
00942 CIFF90OBJ(cr)->dim =
00943 (struct Cif_dim *)_Cif_space[mode] (sizeof(struct Cif_dim)*n, cifd);
00944 if (CIFF90OBJ(cr)->dim == NULL)
00945 return (CIF_NOMEM);
00946 if (fread ((char *)CIFF90OBJ(cr)->dim, DIM_SSIZE, n, fd) != n) IO_ERROR;
00947 }
00948 break;
00949
00950
00951 case CIF_F90_MISC_OPTS:
00952 n = CIFF90MO(cr)->ciflen;
00953 cp = CIFF90MO(cr)->cifname = _Cif_space[mode] (n+1, cifd);
00954 if (cp == NULL)
00955 return (CIF_NOMEM);
00956 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00957 cp[n] = '\0';
00958
00959 if (CIFF90MO(cr)->nPdirs > 0) {
00960 if ((i= read_strlist (cifd, (int) CIFF90MO(cr)->nPdirs, &CIFF90MO(cr)->Pdirs, fd)) < 0)
00961 return (i);
00962 }
00963 if (CIFF90MO(cr)->npdirs > 0) {
00964 if ((i= read_strlist (cifd, (int) CIFF90MO(cr)->npdirs, &CIFF90MO(cr)->pdirs, fd)) < 0)
00965 return (i);
00966 }
00967 if ((n = CIFF90MO(cr)->nmsgs) > 0) {
00968 lp= CIFF90MO(cr)->msgno= (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
00969 if (lp == NULL)
00970 return (CIF_NOMEM);
00971 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
00972 }
00973 if (CIFF90MO(cr)->ncdirs > 0) {
00974 if ((i= read_strlist (cifd, (int) CIFF90MO(cr)->ncdirs, &CIFF90MO(cr)->cdirs, fd)) < 0)
00975 return (i);
00976 }
00977 n = CIFF90MO(cr)->onlen;
00978 cp = CIFF90MO(cr)->objname = _Cif_space[mode] (n+1, cifd);
00979 if (cp == NULL)
00980 return (CIF_NOMEM);
00981 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00982 cp[n] = '\0';
00983 n = CIFF90MO(cr)->cnlen;
00984 cp = CIFF90MO(cr)->calname = _Cif_space[mode] (n+1, cifd);
00985 if (cp == NULL)
00986 return (CIF_NOMEM);
00987 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00988 cp[n] = '\0';
00989 n = CIFF90MO(cr)->inlen;
00990 cp = CIFF90MO(cr)->inname = _Cif_space[mode] (n+1, cifd);
00991 if (cp == NULL)
00992 return (CIF_NOMEM);
00993 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
00994 cp[n] = '\0';
00995 break;
00996
00997 case CIF_F90_OPT_OPTS:
00998
00999 if ((n = CIFF90OPTOPT(cr)->noptlevels) > 0) {
01000 CIFF90OPTOPT(cr)->lopts =
01001 (struct Cif_f90_level_opts *)_Cif_space[mode] (sizeof(struct Cif_f90_level_opts)*n, cifd);
01002 if (CIFF90OPTOPT(cr)->lopts == NULL)
01003 return (CIF_NOMEM);
01004 if (CIFF90OPTOPT(cr)->newdef == 1) {
01005 if (fread ((char *)CIFF90OPTOPT(cr)->lopts, OPTS_SSIZE, n, fd) != n) IO_ERROR;
01006 }
01007 else {
01008 if (fread ((char *)CIFF90OPTOPT(cr)->lopts, 4, n, fd) != n) IO_ERROR;
01009 }
01010 }
01011 break;
01012
01013 case CIF_F90_INT_BLOCK:
01014 if (_Cif_filetbl[cifd].return_version == 2) {
01015
01016 n = CIFF90IB2(cr)->nlen;
01017 cp = CIFF90IB2(cr)->name = _Cif_space[mode] (n+1, cifd);
01018 if (cp == NULL)
01019 return (CIF_NOMEM);
01020 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
01021 cp[n] = '\0';
01022
01023 if ((n = CIFF90IB2(cr)->numints) > 0) {
01024 lp= CIFF90IB2(cr)->procids= (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
01025 if (lp == NULL)
01026 return (CIF_NOMEM);
01027 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
01028 }
01029 }
01030 else {
01031
01032 n = CIFF90IB(cr)->nlen;
01033 cp = CIFF90IB(cr)->name = _Cif_space[mode] (n+1, cifd);
01034 if (cp == NULL)
01035 return (CIF_NOMEM);
01036 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
01037 cp[n] = '\0';
01038
01039 if ((n = CIFF90IB(cr)->numints) > 0) {
01040 lp= CIFF90IB(cr)->procids= (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
01041 if (lp == NULL)
01042 return (CIF_NOMEM);
01043 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
01044 }
01045 }
01046 break;
01047
01048 case CIF_F90_RENAME:
01049
01050 n = CIFF90RN(cr)->nlen;
01051 cp = CIFF90RN(cr)->name = _Cif_space[mode] (n+1, cifd);
01052 if (cp == NULL)
01053 return (CIF_NOMEM);
01054 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
01055 cp[n] = '\0';
01056
01057 n = CIFF90RN(cr)->orignlen;
01058 cp = CIFF90RN(cr)->origname = _Cif_space[mode] (n+1, cifd);
01059 if (cp == NULL)
01060 return (CIF_NOMEM);
01061 if (fread (cp, sizeof(char), n, fd) != n) IO_ERROR;
01062 cp[n] = '\0';
01063
01064 if ((n = CIFF90RN(cr)->nlocalids) > 0) {
01065 lp= CIFF90RN(cr)->localid = (long *) _Cif_space[mode] (sizeof(long)*n, cifd);
01066 if (lp == NULL)
01067 return (CIF_NOMEM);
01068 if (fread (lp, sizeof(long), n, fd) != n) IO_ERROR;
01069 }
01070 break;
01071
01072 case CIF_CC_TYPE:
01073 n = CIFCCTYPE(cr)->nlen;
01074 cp = CIFCCTYPE(cr)->name = _Cif_space[mode] (n+1, cifd);
01075 if (cp == NULL)
01076 return (CIF_NOMEM);
01077 if (fread (cp, sizeof(char), n, fd) != n)
01078 IO_ERROR;
01079 cp[n] = '\0';
01080
01081 if ( (n = CIFCCTYPE(cr)->nmem) > 0 ) {
01082 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01083 if ( cp == NULL )
01084 return( CIF_NOMEM );
01085 CIFCCTYPE(cr)->mem = (int *) cp;
01086 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01087 IO_ERROR;
01088 }
01089 break;
01090
01091 case CIF_CC_ENTRY:
01092 n = CIFCCENT(cr)->nlen;
01093 cp = CIFCCENT(cr)->name = _Cif_space[mode] (n+1, cifd);
01094 if (cp == NULL)
01095 return (CIF_NOMEM);
01096 if (fread (cp, sizeof(char), n, fd) != n)
01097 IO_ERROR;
01098 cp[n] = '\0';
01099
01100 n = CIFCCENT(cr)->elen;
01101 cp = CIFCCENT(cr)->ename = _Cif_space[mode] (n+1, cifd);
01102 if (cp == NULL)
01103 return (CIF_NOMEM);
01104 if (fread (cp, sizeof(char), n, fd) != n)
01105 IO_ERROR;
01106 cp[n] = '\0';
01107
01108 if ( (n = CIFCCENT(cr)->nparam) > 0 ) {
01109 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01110 if ( cp == NULL )
01111 return( CIF_NOMEM );
01112 CIFCCENT(cr)->param = (int *) cp;
01113 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01114 IO_ERROR;
01115 }
01116 break;
01117
01118 case CIF_CC_OBJ:
01119 n = CIFCCOBJ(cr)->nlen;
01120 cp = CIFCCOBJ(cr)->name = _Cif_space[mode] (n+1, cifd);
01121 if (cp == NULL)
01122 return (CIF_NOMEM);
01123 if (fread (cp, sizeof(char), n, fd) != n)
01124 IO_ERROR;
01125 cp[n] = '\0';
01126 break;
01127
01128 case CIF_CC_ENUM:
01129 n = CIFCCENUM(cr)->nlen;
01130 cp = CIFCCENUM(cr)->name = _Cif_space[mode] (n+1, cifd);
01131 if (cp == NULL)
01132 return (CIF_NOMEM);
01133 if (fread (cp, sizeof(char), n, fd) != n)
01134 IO_ERROR;
01135 cp[n] = '\0';
01136 n = CIFCCENUM(cr)->vlen;
01137 cp = CIFCCENUM(cr)->value = _Cif_space[mode] (n+1, cifd);
01138 if (cp == NULL)
01139 return (CIF_NOMEM);
01140 if (fread (cp, sizeof(char), n, fd) != n)
01141 IO_ERROR;
01142 cp[n] = '\0';
01143 break;
01144
01145 case CIF_CC_EXPR:
01146 if ( (n = CIFCCEXPR(cr)->noper) > 0 ) {
01147 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01148 if ( cp == NULL )
01149 return( CIF_NOMEM );
01150 CIFCCEXPR(cr)->oper = (int *) cp;
01151 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01152 IO_ERROR;
01153 }
01154 break;
01155
01156 case CIF_BE_NODE:
01157 if ( _Cif_filetbl[cifd].return_version == 2 ) {
01158 if ( (n = CIFBENODE2(cr)->nsuccs) > 0 ) {
01159 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01160 if ( cp == NULL )
01161 return( CIF_NOMEM );
01162 CIFBENODE2(cr)->succs = (int *) cp;
01163 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01164 IO_ERROR;
01165 }
01166 if ( (n = CIFBENODE2(cr)->nlines) > 0 ) {
01167 if ( _Cif_filetbl[cifd].version == 3 ) {
01168
01169
01170 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01171 if ( cp == NULL )
01172 return( CIF_NOMEM );
01173 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01174 IO_ERROR;
01175 free( cp );
01176 }
01177 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01178 if ( cp == NULL )
01179 return( CIF_NOMEM );
01180 CIFBENODE2(cr)->lines = (int *) cp;
01181 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01182 IO_ERROR;
01183 }
01184 if ( (int) fread( &c, 1, 1, fd ) < 1 )
01185 IO_ERROR;
01186 n = c;
01187 cp = _Cif_space[ mode ]( n+1, cifd );
01188 if ( cp == NULL )
01189 return( CIF_NOMEM );
01190 CIFBENODE2(cr)->label = cp;
01191 if ( (int) fread( cp, 1, n, fd ) < n )
01192 IO_ERROR;
01193 cp[ n ] = 0;
01194 }
01195 else {
01196 if ( (n = CIFBENODE(cr)->nsuccs) > 0 ) {
01197 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01198 if ( cp == NULL )
01199 return( CIF_NOMEM );
01200 CIFBENODE(cr)->succs = (int *) cp;
01201 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01202 IO_ERROR;
01203 }
01204 if ( (n = CIFBENODE(cr)->nlines) > 0 ) {
01205 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01206 if ( cp == NULL )
01207 return( CIF_NOMEM );
01208 CIFBENODE(cr)->fid = (int *) cp;
01209 if ( _Cif_filetbl[cifd].version == 2 ) {
01210 for ( i = 0; i < n; i++ )
01211 CIFBENODE(cr)->fid[ i ] = 0;
01212 } else {
01213 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01214 IO_ERROR;
01215 }
01216 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01217 if ( cp == NULL )
01218 return( CIF_NOMEM );
01219 CIFBENODE(cr)->lines = (int *) cp;
01220 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01221 IO_ERROR;
01222 }
01223 if ( (int) fread( &c, 1, 1, fd ) < 1 )
01224 IO_ERROR;
01225 n = c;
01226 assert( n >= 0 && n < 255 );
01227 cp = _Cif_space[ mode ]( n+1, cifd );
01228 if ( cp == NULL )
01229 return( CIF_NOMEM );
01230 CIFBENODE(cr)->label = cp;
01231 if ( (int) fread( cp, 1, n, fd ) < n )
01232 IO_ERROR;
01233 cp[ n ] = 0;
01234 }
01235 break;
01236
01237 case CIF_BE_FID:
01238 if ( (n = CIFBEFID(cr)->nfid) > 0 ) {
01239 cp = _Cif_space[ mode ]( n * sizeof( int ), cifd );
01240 if ( cp == NULL )
01241 return( CIF_NOMEM );
01242 CIFBEFID(cr)->fid = (int *) cp;
01243 if ( (int) fread( cp, sizeof( int ), n, fd ) < n )
01244 IO_ERROR;
01245 }
01246 break;
01247
01248 #endif
01249
01250
01251 case CIF_MACH_CHAR:
01252 if (_Cif_filetbl[cifd].lang == CIF_LG_F77) {
01253 if (_Cif_filetbl[cifd].return_version == 1) {
01254
01255
01256
01257
01258
01259 #ifdef CRAY2
01260
01261
01262
01263
01264 if (CIFMC1(cr)->valmask | CIF_MC_TAILGT_1) {
01265 CIFMC1(cr)->valmask = CIF_MC_TAILGT;
01266 }
01267 else {
01268 CIFMC1(cr)->valmask = 0;
01269 }
01270 #else
01271 CIFMC1(cr)->valmask = CIFMC1(cr)->valmask & CIF_MC_MASK;
01272 #endif
01273
01274 }
01275 }
01276
01277 break;
01278
01279 default:
01280 break;
01281
01282 }
01283
01284 return (0);
01285
01286 }