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/cifputrec.c 30.6 07/26/96 07:19:13";
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 #define CIF_VERSION 3
00052
00053 #ifdef _ABSOFT
00054 #include "cif.h"
00055 #else
00056 #include <cif.h>
00057 #endif
00058
00059 #include <stdio.h>
00060 #include <string.h>
00061 #include <stdlib.h>
00062 #include <assert.h>
00063
00064 #include "cif_int.h"
00065
00066 static FILE *fd;
00067
00068
00069
00070 static int write_strlist (sp, ns)
00071 char **sp;
00072 int ns;
00073 {
00074 int i;
00075 short slen[100];
00076
00077 if (ns > 0) {
00078 for (i = 0; i < ns; i++)
00079 slen[i] = strlen (sp[i]);
00080 if (fwrite ((char *)slen, sizeof(short), i, fd) != i)
00081 return (CIF_SYSERR);
00082 for (i = 0; i < ns; i++) {
00083 if (fwrite ( sp[i], sizeof(char), slen[i], fd) != slen[i])
00084 return (CIF_SYSERR);
00085 }
00086 }
00087 return (0);
00088 }
00089
00090
00091 static int write_unitdir (cr)
00092 struct Cif_generic *cr;
00093 {
00094 int i, j;
00095 struct Cif_unitdir ut;
00096 struct Cif_urectbl ur[CIF_MAXRECORD];
00097 struct Cif_urectbl *urp;
00098
00099 ut.rectype = CIF_UNITDIR;
00100 ut.maxsid = CIFUDIR(cr)->maxsid;
00101 urp = CIFUDIR(cr)->ur;
00102 for (i = j = 0; i < (int) CIFUDIR(cr)->nsections; i++) {
00103 if (urp[i].nrecords > 0)
00104 ur[j++] = urp[i];
00105 }
00106 ut.nsections = j;
00107 if (fwrite (&ut, UNITDIR_SSIZE, 1, fd) != 1) return (CIF_SYSERR);
00108 if (fwrite (ur, URECTBL_SSIZE, j, fd) != j) return (CIF_SYSERR);
00109 return (0);
00110
00111 }
00112
00113
00114
00115
00116
00117
00118 int Cif_Putrecord
00119 #ifdef __STDC__
00120 (int cifd, struct Cif_generic *cr)
00121 #else
00122 (cifd, cr)
00123 int cifd;
00124 struct Cif_generic *cr;
00125 #endif
00126 {
00127
00128 int i, j, n;
00129 int rtype;
00130 char *cp;
00131 unsigned char c;
00132
00133 if (cifd < 0 || cifd >= CIF_FT_SIZE || _Cif_filetbl[cifd].form == NOT_A_CIF)
00134 return (CIF_NOTOPEN);
00135 else if (_Cif_filetbl[cifd].optype == 'r')
00136 return (CIF_BADREQ);
00137
00138 fd = _Cif_filetbl[cifd].fd;
00139 rtype = cr->rectype;
00140
00141 if (rtype < 1 || rtype > CIF_MAXRECORD || _Cif_structsize == 0)
00142 return (CIF_BADFORM);
00143
00144
00145
00146
00147
00148 if (rtype == CIF_UNITDIR)
00149 return (write_unitdir (cr));
00150
00151
00152
00153
00154
00155
00156 if (fwrite((char *)cr, sizeof(char), 1, fd) != 1) return (CIF_SYSERR);
00157 cp = (char *)cr;
00158
00159 if (fwrite(++cp, _Cif_shortsize[rtype][_Cif_filetbl[cifd].version]-1, 1, fd) != 1)
00160 return (CIF_SYSERR);
00161
00162 switch (rtype) {
00163
00164 case CIF_CALLSITE:
00165 if ((i = CIFCS(cr)->nargs) > 0) {
00166 if (fwrite((char *)CIFCS(cr)->argids, sizeof(long), i, fd) != i)
00167 return (CIF_SYSERR);
00168 }
00169 break;
00170
00171 case CIF_COMBLK:
00172
00173
00174 if (_Cif_filetbl[cifd].version == 1) {
00175
00176 if (fwrite (CIFCB1(cr)->name, sizeof(char), CIFCB1(cr)->nlen, fd) !=
00177 CIFCB1(cr)->nlen) return (CIF_SYSERR);
00178
00179 }
00180 else {
00181
00182 if (fwrite (CIFCB(cr)->name, sizeof(char), CIFCB(cr)->nlen, fd) !=
00183 CIFCB(cr)->nlen) return (CIF_SYSERR);
00184
00185 }
00186 break;
00187
00188 case CIF_CONST:
00189
00190
00191 if (_Cif_filetbl[cifd].version == 1) {
00192
00193 if (fwrite (CIFCON1(cr)->name, sizeof(char), CIFCON1(cr)->nlen, fd) !=
00194 CIFCON1(cr)->nlen) return (CIF_SYSERR);
00195 if (fwrite (CIFCON1(cr)->value, sizeof(char), CIFCON1(cr)->vlen, fd) !=
00196 CIFCON1(cr)->vlen) return (CIF_SYSERR);
00197
00198 }
00199 else {
00200
00201 if (fwrite (CIFCON(cr)->name, sizeof(char), CIFCON(cr)->nlen, fd) !=
00202 CIFCON(cr)->nlen) return (CIF_SYSERR);
00203 if (fwrite (CIFCON(cr)->value, sizeof(char), CIFCON(cr)->vlen, fd) !=
00204 CIFCON(cr)->vlen) return (CIF_SYSERR);
00205
00206 if (CIFCON(cr)->origform)
00207 if (fwrite (CIFCON(cr)->oform, sizeof(char), CIFCON(cr)->olen, fd) !=
00208 CIFCON(cr)->olen) return (CIF_SYSERR);
00209
00210 }
00211 break;
00212
00213 case CIF_ENTRY:
00214 if ((i = CIFENTRY(cr)->nargs) > 0) {
00215 if (fwrite (CIFENTRY(cr)->argids, sizeof(long), i, fd) != i)
00216 return (CIF_SYSERR);
00217 }
00218 if (fwrite (CIFENTRY(cr)->name, sizeof(char), CIFENTRY(cr)->nlen, fd)
00219 != CIFENTRY(cr)->nlen) return (CIF_SYSERR);
00220 break;
00221
00222 case CIF_FILE:
00223 if (_Cif_filetbl[cifd].version == 3) {
00224 if (fwrite (CIFFILE(cr)->name, sizeof(char), CIFFILE(cr)->nlen, fd)
00225 != CIFFILE(cr)->nlen) return (CIF_SYSERR);
00226
00227 if (fwrite (CIFFILE(cr)->oname, sizeof(char), CIFFILE(cr)->onlen, fd)
00228 != CIFFILE(cr)->onlen) return (CIF_SYSERR);
00229 }
00230 else {
00231 if (fwrite (CIFFILE1(cr)->name, sizeof(char), CIFFILE1(cr)->nlen, fd)
00232 != CIFFILE1(cr)->nlen) return (CIF_SYSERR);
00233 }
00234 break;
00235
00236 case CIF_LABEL:
00237 if (fwrite (CIFLABEL(cr)->name, sizeof(char), CIFLABEL(cr)->nlen, fd)
00238 != CIFLABEL(cr)->nlen) return (CIF_SYSERR);
00239 break;
00240
00241 case CIF_ORIG_CMD:
00242 if (fwrite (CIFOCMD(cr)->name, sizeof(char), CIFOCMD(cr)->nlen, fd)
00243 != CIFOCMD(cr)->nlen) return (CIF_SYSERR);
00244 break;
00245
00246 case CIF_MESSAGE:
00247 if (_Cif_filetbl[cifd].version == 3) {
00248 if (fwrite (CIFMSG(cr)->name, sizeof(char), CIFMSG(cr)->nlen, fd)
00249 != CIFMSG(cr)->nlen) return (CIF_SYSERR);
00250 if ((i = write_strlist (CIFMSG(cr)->args, (int) CIFMSG(cr)->nargs)) < 0)
00251 return (i);
00252 }
00253 else {
00254 if ((i = write_strlist (CIFMSG1(cr)->args, (int) CIFMSG1(cr)->nargs)) < 0)
00255 return (i);
00256 }
00257 break;
00258
00259 case CIF_MISC_OPTS:
00260
00261
00262 if (_Cif_filetbl[cifd].version == 1) {
00263
00264 if ((i = CIFMO1(cr)->nmsgs) > 0) {
00265 if (fwrite (CIFMO1(cr)->msgno, sizeof(long), i, fd) != i)
00266 return (CIF_SYSERR);
00267 }
00268 if ((i = write_strlist (CIFMO1(cr)->cdirs, (int) CIFMO1(cr)->ncdirs)) < 0)
00269 return (i);
00270 if ((i = CIFMO1(cr)->onlen) > 0) {
00271 if (fwrite (CIFMO1(cr)->objname, sizeof(char), i, fd) != i)
00272 return (CIF_SYSERR);
00273 }
00274 if ((i = CIFMO1(cr)->cnlen) > 0) {
00275 if (fwrite (CIFMO1(cr)->calname, sizeof(char), i, fd) != i)
00276 return (CIF_SYSERR);
00277 }
00278 if ((i = CIFMO1(cr)->inlen) > 0) {
00279 if (fwrite (CIFMO1(cr)->inname, sizeof(char), i, fd) != i)
00280 return (CIF_SYSERR);
00281 }
00282 }
00283 else {
00284
00285 if ((i = CIFMO(cr)->nmsgs) > 0) {
00286 if (fwrite (CIFMO(cr)->msgno, sizeof(long), i, fd) != i)
00287 return (CIF_SYSERR);
00288 }
00289 if ((i = write_strlist (CIFMO(cr)->cdirs, (int) CIFMO(cr)->ncdirs)) < 0)
00290 return (i);
00291 if ((i = CIFMO(cr)->onlen) > 0) {
00292 if (fwrite (CIFMO(cr)->objname, sizeof(char), i, fd) != i)
00293 return (CIF_SYSERR);
00294 }
00295 if ((i = CIFMO(cr)->cnlen) > 0) {
00296 if (fwrite (CIFMO(cr)->calname, sizeof(char), i, fd) != i)
00297 return (CIF_SYSERR);
00298 }
00299 if ((i = CIFMO(cr)->inlen) > 0) {
00300 if (fwrite (CIFMO(cr)->inname, sizeof(char), i, fd) != i)
00301 return (CIF_SYSERR);
00302 }
00303 if ((i = CIFMO(cr)->llen) > 0) {
00304 if (fwrite (CIFMO(cr)->lname, sizeof(char), i, fd) != i)
00305 return (CIF_SYSERR);
00306 }
00307
00308 if ((i = write_strlist (CIFMO(cr)->incdirs, (int) CIFMO(cr)->numincs)) < 0)
00309 return (i);
00310 }
00311 break;
00312
00313 case CIF_NAMELIST:
00314 if (fwrite (CIFNL(cr)->name, sizeof(char), CIFNL(cr)->nlen, fd) !=
00315 CIFNL(cr)->nlen) return (CIF_SYSERR);
00316 if (fwrite((char *)CIFNL(cr)->ids, sizeof(long), CIFNL(cr)->nids, fd)
00317 != CIFNL(cr)->nids) return (CIF_SYSERR);
00318 break;
00319
00320 case CIF_ND_MSG:
00321 if ((i = write_strlist (CIFNMSG(cr)->args, (int) CIFNMSG(cr)->nargs)) < 0)
00322 return (i);
00323 break;
00324
00325 case CIF_OBJECT:
00326
00327
00328 if (_Cif_filetbl[cifd].version == 1) {
00329
00330 if (CIFOBJ1(cr)->name != NULL) {
00331 if (fwrite (CIFOBJ1(cr)->name, sizeof(char), CIFOBJ1(cr)->nlen, fd)
00332 != CIFOBJ1(cr)->nlen) return (CIF_SYSERR);
00333 }
00334 if ((i = CIFOBJ1(cr)->ndims) > 0) {
00335 if (fwrite(CIFOBJ1(cr)->dim, DIM_SSIZE, i, fd) != i)
00336 return (CIF_SYSERR);
00337 }
00338 }
00339 else {
00340
00341 if (CIFOBJ(cr)->name != NULL) {
00342 if (fwrite (CIFOBJ(cr)->name, sizeof(char), CIFOBJ(cr)->nlen, fd)
00343 != CIFOBJ(cr)->nlen) return (CIF_SYSERR);
00344 }
00345 if ((i = CIFOBJ(cr)->ndims) > 0) {
00346 if (fwrite(CIFOBJ(cr)->dim, DIM_SSIZE, i, fd) != i)
00347 return (CIF_SYSERR);
00348 }
00349
00350 }
00351 break;
00352
00353 case CIF_CDIR:
00354 if (fwrite((char *)CIFCDIR(cr)->ids, sizeof(long), CIFCDIR(cr)->nids, fd)
00355 != CIFCDIR(cr)->nids) return (CIF_SYSERR);
00356 break;
00357
00358 case CIF_CDIR_DOSHARED:
00359 if (fwrite((char *)CIFCDIRDO(cr)->ids, sizeof(long), CIFCDIRDO(cr)->nids, fd)
00360 != CIFCDIRDO(cr)->nids) return (CIF_SYSERR);
00361 break;
00362
00363 case CIF_GEOMETRY:
00364 if ((i = CIFGEOM(cr)->ndims) > 0) {
00365 if (fwrite(CIFGEOM(cr)->dim, GEOM_SSIZE, i, fd) != i)
00366 return (CIF_SYSERR);
00367 }
00368 if (CIFGEOM(cr)->name != NULL) {
00369 if (fwrite (CIFGEOM(cr)->name, sizeof(char), CIFGEOM(cr)->nlen, fd)
00370 != CIFGEOM(cr)->nlen) return (CIF_SYSERR);
00371 }
00372 break;
00373
00374 case CIF_UNIT:
00375 if (fwrite (CIFUNIT(cr)->name, sizeof(char), CIFUNIT(cr)->nlen, fd)
00376 != CIFUNIT(cr)->nlen) return (CIF_SYSERR);
00377 break;
00378
00379 case CIF_ENDUNIT:
00380 if (fwrite (CIFENDU(cr)->name, sizeof(char), CIFENDU(cr)->nlen, fd)
00381 != CIFENDU(cr)->nlen) return (CIF_SYSERR);
00382 break;
00383
00384 case CIF_USAGE:
00385
00386
00387 if (_Cif_filetbl[cifd].version == 1) {
00388
00389 if (fwrite (CIFUSAGE1(cr)->use, sizeof(struct Cif_use),
00390 CIFUSAGE1(cr)->nuses, fd) != CIFUSAGE1(cr)->nuses)
00391 return (CIF_SYSERR);
00392
00393 }
00394 else {
00395
00396 if (fwrite (CIFUSAGE(cr)->use, sizeof(struct Cif_use),
00397 CIFUSAGE(cr)->nuses, fd) != CIFUSAGE(cr)->nuses)
00398 return (CIF_SYSERR);
00399
00400 if (CIFUSAGE(cr)->nmembs > 0) {
00401 if (fwrite (CIFUSAGE(cr)->membs, sizeof(long),
00402 CIFUSAGE(cr)->nmembs, fd) != CIFUSAGE(cr)->nmembs)
00403 return (CIF_SYSERR);
00404 }
00405 }
00406 break;
00407
00408 case CIF_FILEDIR:
00409 {
00410 struct Cif_unittbl *ut;
00411
00412 ut = CIFFDIR(cr)->ut;
00413 for (i= 0; i < (int) CIFFDIR(cr)->nunits; i++, ut++) {
00414 if (fwrite (ut, UNITTBL_SSIZE, 1, fd) != 1) return (CIF_SYSERR);
00415 if (fwrite (ut->name, sizeof(char), ut->nlen, fd) != ut->nlen)
00416 return (CIF_SYSERR);
00417 }
00418 break;
00419 }
00420
00421 case CIF_C_TAG:
00422
00423 for (i = 0; i < (int) CIFCTAG(cr)->nmods; i++) {
00424 if (fwrite (&(CIFCTAG(cr)->mods[i]), TMOD_SSIZE, 1, fd) != 1)
00425 return (CIF_SYSERR);
00426 }
00427
00428 i = CIFCTAG(cr)->nmems;
00429 if (fwrite (CIFCTAG(cr)->memids, sizeof(long), i, fd) != i)
00430 return(CIF_SYSERR);
00431 if (fwrite (CIFCTAG(cr)->name, sizeof(char), CIFCTAG(cr)->nlen, fd) !=
00432 CIFCTAG(cr)->nlen) return (CIF_SYSERR);
00433
00434 break;
00435
00436 case CIF_C_OPTS:
00437 if (fwrite (CIFCOPTS(cr)->name, sizeof(char), CIFCOPTS(cr)->nlen, fd) !=
00438 CIFCOPTS(cr)->nlen) return (CIF_SYSERR);
00439 if ((i = write_strlist (CIFCOPTS(cr)->incs, (int) CIFCOPTS(cr)->nincs)) < 0)
00440 return (i);
00441 if ((i = write_strlist (CIFCOPTS(cr)->defs, (int) CIFCOPTS(cr)->ndefs)) < 0)
00442 return (i);
00443 if ((i = write_strlist (CIFCOPTS(cr)->udefs, (int) CIFCOPTS(cr)->nudefs)) < 0)
00444 return (i);
00445 break;
00446
00447 case CIF_C_MESSAGE:
00448
00449
00450
00451 if (_Cif_filetbl[cifd].version == 1) {
00452
00453 if ((i = write_strlist (CIFCMSG1(cr)->args, (int) CIFCMSG1(cr)->nargs)) < 0)
00454 return (i);
00455
00456 }
00457 else {
00458
00459 if ((i = write_strlist (CIFCMSG(cr)->args, (int) CIFCMSG(cr)->nargs)) < 0)
00460 return (i);
00461 }
00462
00463 break;
00464
00465 case CIF_C_CONST:
00466 if (fwrite (CIFCCON(cr)->value, sizeof(char), CIFCCON(cr)->vlen, fd)
00467 != CIFCCON(cr)->vlen) return (CIF_SYSERR);
00468 break;
00469
00470 case CIF_C_ENTRY:
00471
00472
00473
00474 if (_Cif_filetbl[cifd].version == 1) {
00475
00476 for (i = 0; i < (int) CIFCENTRY1(cr)->nmods; i++) {
00477 if (fwrite (&(CIFCENTRY1(cr)->mods[i]), TMOD_SSIZE, 1, fd) != 1)
00478 return (CIF_SYSERR);
00479 }
00480 if (fwrite (CIFCENTRY1(cr)->argids, sizeof(long), CIFCENTRY1(cr)->nargs,
00481 fd) != CIFCENTRY1(cr)->nargs) return (CIF_SYSERR);
00482 if (fwrite (CIFCENTRY1(cr)->name, sizeof(char), CIFCENTRY1(cr)->nlen, fd)
00483 != CIFCENTRY1(cr)->nlen) return (CIF_SYSERR);
00484
00485 }
00486 else {
00487
00488 for (i = 0; i < (int) CIFCENTRY(cr)->nmods; i++) {
00489 if (fwrite (&(CIFCENTRY(cr)->mods[i]), TMOD_SSIZE, 1, fd) != 1)
00490 return (CIF_SYSERR);
00491 }
00492 if (fwrite (CIFCENTRY(cr)->argids, sizeof(long), CIFCENTRY(cr)->nargs,
00493 fd) != CIFCENTRY(cr)->nargs) return (CIF_SYSERR);
00494 if (fwrite (CIFCENTRY(cr)->name, sizeof(char), CIFCENTRY(cr)->nlen, fd)
00495 != CIFCENTRY(cr)->nlen) return (CIF_SYSERR);
00496 }
00497
00498 break;
00499
00500 case CIF_C_OBJECT:
00501 for (i = 0; i < (int) CIFCOBJ(cr)->nmods; i++) {
00502 if (fwrite (&(CIFCOBJ(cr)->mods[i]), TMOD_SSIZE, 1, fd) != 1)
00503 return (CIF_SYSERR);
00504 }
00505 if (CIFCOBJ(cr)->nlen > 0) {
00506 if (fwrite (CIFCOBJ(cr)->name, sizeof(char), CIFCOBJ(cr)->nlen, fd)
00507 != CIFCOBJ(cr)->nlen) return (CIF_SYSERR);
00508 }
00509 break;
00510
00511 case CIF_C_LINT_DIRECTIVE:
00512
00513 if (CIFCLDIR(cr)->nlen > 0) {
00514 if (fwrite (CIFCLDIR(cr)->name, sizeof(char), CIFCLDIR(cr)->nlen, fd)
00515 != CIFCLDIR(cr)->nlen) return (CIF_SYSERR);
00516 }
00517
00518 break;
00519
00520 case CIF_C_MACRO_DEF:
00521
00522 if (CIFCMDEF(cr)->nlen > 0) {
00523 if (fwrite (CIFCMDEF(cr)->name, sizeof(char), CIFCMDEF(cr)->nlen, fd)
00524 != CIFCMDEF(cr)->nlen) return (CIF_SYSERR);
00525 }
00526
00527 break;
00528
00529 case CIF_C_ENTRY_END:
00530
00531 if (CIFCEEND(cr)->nlen > 0) {
00532 if (fwrite (CIFCEEND(cr)->name, sizeof(char), CIFCEEND(cr)->nlen, fd)
00533 != CIFCEEND(cr)->nlen) return (CIF_SYSERR);
00534 }
00535
00536 break;
00537
00538 case CIF_BE_NODE:
00539 if (_Cif_filetbl[cifd].version == 2) {
00540
00541 if ( (n = CIFBENODE2(cr)->nsuccs) > 0 ) {
00542 if ( (int) fwrite( (char *)CIFBENODE2(cr)->succs, sizeof( int ), n, fd ) < n )
00543 return( CIF_SYSERR );
00544 }
00545 if ( (n = CIFBENODE2(cr)->nlines) > 0 ) {
00546 if ( (int) fwrite( (char *)CIFBENODE2(cr)->lines, sizeof( int ), n, fd ) < n )
00547 return( CIF_SYSERR );
00548 }
00549 cp = CIFBENODE2(cr)->label;
00550 n = strlen( cp );
00551 assert( n < 255 );
00552 c = n;
00553 if ( (int) fwrite( &c, 1, 1, fd ) < 1 )
00554 return( CIF_SYSERR );
00555 if ( (int) fwrite( cp, 1, n, fd ) < n )
00556 return( CIF_SYSERR );
00557
00558 } else {
00559
00560 if ( (n = CIFBENODE(cr)->nsuccs) > 0 ) {
00561 if ( (int) fwrite( (char *)CIFBENODE(cr)->succs, sizeof( int ), n, fd ) < n )
00562 return( CIF_SYSERR );
00563 }
00564 if ( (n = CIFBENODE(cr)->nlines) > 0 ) {
00565 if ( (int) fwrite( (char *)CIFBENODE(cr)->fid, sizeof( int ), n, fd ) < n )
00566 return( CIF_SYSERR );
00567 if ( (int) fwrite( (char *)CIFBENODE(cr)->lines, sizeof( int ), n, fd ) < n )
00568 return( CIF_SYSERR );
00569 }
00570 cp = CIFBENODE(cr)->label;
00571 n = strlen( cp );
00572 assert( n < 255 );
00573 c = n;
00574 if ( (int) fwrite( &c, 1, 1, fd ) < 1 )
00575 return( CIF_SYSERR );
00576 if ( (int) fwrite( cp, 1, n, fd ) < n )
00577 return( CIF_SYSERR );
00578 }
00579 break;
00580
00581 case CIF_BE_FID:
00582 if ( (n = CIFBEFID(cr)->nfid) > 0 ) {
00583 if ( (int) fwrite( (char *)CIFBEFID(cr)->fid, sizeof( int ), n, fd ) < n )
00584 return( CIF_SYSERR );
00585 }
00586 break;
00587
00588 case CIF_F90_CALLSITE:
00589 if ((i = CIFF90CS(cr)->nargs) > 0) {
00590 if (fwrite((char *)CIFF90CS(cr)->argids, sizeof(long), i, fd) != i)
00591 return (CIF_SYSERR);
00592 if (fwrite((char *)CIFF90CS(cr)->nmembs, sizeof(int), i, fd) != i)
00593 return (CIF_SYSERR);
00594
00595 for (j = 0; j < (int) CIFF90CS(cr)->nargs; j++) {
00596 if (CIFF90CS(cr)->nmembs[j] > 0)
00597 if (fwrite((char *)CIFF90CS(cr)->membs[j], sizeof(long), CIFF90CS(cr)->nmembs[j], fd) != CIFF90CS(cr)->nmembs[j])
00598 return (CIF_SYSERR);
00599 }
00600
00601 if (CIFF90CS(cr)->rank == 1) {
00602
00603 if (fwrite((char *)CIFF90CS(cr)->ranks, sizeof(int), i, fd) != i)
00604 return (CIF_SYSERR);
00605
00606 }
00607
00608
00609
00610 }
00611 break;
00612
00613 case CIF_F90_SCOPE_INFO:
00614 if ((i = CIFF90SI(cr)->numalts) > 0) {
00615 if (fwrite((char *)CIFF90SI(cr)->entryids, sizeof(long), i, fd) != i)
00616 return (CIF_SYSERR);
00617 }
00618 break;
00619
00620 case CIF_F90_COMBLK:
00621 if (fwrite (CIFF90CB(cr)->name, sizeof(char), CIFF90CB(cr)->nlen, fd) !=
00622 CIFF90CB(cr)->nlen) return (CIF_SYSERR);
00623 break;
00624
00625
00626 case CIF_F90_CONST:
00627 if (fwrite (CIFF90CON(cr)->value, sizeof(char), CIFF90CON(cr)->vlen, fd) !=
00628 CIFF90CON(cr)->vlen) return (CIF_SYSERR);
00629
00630 break;
00631
00632 case CIF_F90_ENTRY:
00633
00634 if ((i = CIFF90ENTRY(cr)->nargs) > 0) {
00635 if (fwrite (CIFF90ENTRY(cr)->argids, sizeof(long), i, fd) != i)
00636 return (CIF_SYSERR);
00637 }
00638 if (fwrite (CIFF90ENTRY(cr)->name, sizeof(char), CIFF90ENTRY(cr)->nlen, fd)
00639 != CIFF90ENTRY(cr)->nlen) return (CIF_SYSERR);
00640
00641 break;
00642
00643
00644
00645
00646 case CIF_F90_DERIVED_TYPE:
00647
00648
00649 if (_Cif_filetbl[cifd].version == 2) {
00650
00651 if (fwrite (CIFF90DTYPE2(cr)->name, sizeof(char), CIFF90DTYPE2(cr)->nlen, fd)
00652 != CIFF90DTYPE2(cr)->nlen) return (CIF_SYSERR);
00653 if ((i = CIFF90DTYPE2(cr)->nmembs) > 0) {
00654 if (fwrite (CIFF90DTYPE2(cr)->memids, sizeof(long), i, fd) != i)
00655 return (CIF_SYSERR);
00656 }
00657 }
00658 else {
00659
00660 if (fwrite (CIFF90DTYPE(cr)->name, sizeof(char), CIFF90DTYPE(cr)->nlen, fd)
00661 != CIFF90DTYPE(cr)->nlen) return (CIF_SYSERR);
00662 if ((i = CIFF90DTYPE(cr)->nmembs) > 0) {
00663 if (fwrite (CIFF90DTYPE(cr)->memids, sizeof(long), i, fd) != i)
00664 return (CIF_SYSERR);
00665 }
00666 }
00667
00668 break;
00669
00670 case CIF_F90_LABEL:
00671 if (fwrite (CIFF90LABEL(cr)->name, sizeof(char), CIFF90LABEL(cr)->nlen, fd)
00672 != CIFF90LABEL(cr)->nlen) return (CIF_SYSERR);
00673 break;
00674
00675 case CIF_F90_NAMELIST:
00676
00677 if (fwrite (CIFF90NL(cr)->name, sizeof(char), CIFF90NL(cr)->nlen, fd) !=
00678 CIFF90NL(cr)->nlen) return (CIF_SYSERR);
00679
00680 if (fwrite((char *)CIFF90NL(cr)->ids, sizeof(long), CIFF90NL(cr)->nids, fd)
00681 != CIFF90NL(cr)->nids) return (CIF_SYSERR);
00682
00683 break;
00684
00685 case CIF_F90_OBJECT:
00686 if (CIFF90OBJ(cr)->name != NULL) {
00687 if (fwrite (CIFF90OBJ(cr)->name, sizeof(char), CIFF90OBJ(cr)->nlen, fd)
00688 != CIFF90OBJ(cr)->nlen) return (CIF_SYSERR);
00689 }
00690 if ((i = CIFF90OBJ(cr)->ndims) > 0 &&
00691 CIFF90OBJ(cr)->atype != CIF_AT_DEFERRED) {
00692
00693
00694 if (fwrite(CIFF90OBJ(cr)->dim, DIM_SSIZE, i, fd) != i)
00695 return (CIF_SYSERR);
00696 }
00697 break;
00698
00699
00700 case CIF_F90_MISC_OPTS:
00701
00702 if ((i = CIFF90MO(cr)->ciflen) > 0) {
00703 if (fwrite (CIFF90MO(cr)->cifname, sizeof(char), i, fd) != i)
00704 return (CIF_SYSERR);
00705 }
00706
00707 if ((i = write_strlist (CIFF90MO(cr)->Pdirs, (int) CIFF90MO(cr)->nPdirs)) < 0)
00708 return (i);
00709
00710 if ((i = write_strlist (CIFF90MO(cr)->pdirs, (int) CIFF90MO(cr)->npdirs)) < 0)
00711 return (i);
00712 if ((i = CIFF90MO(cr)->nmsgs) > 0) {
00713 if (fwrite (CIFF90MO(cr)->msgno, sizeof(long), i, fd) != i)
00714 return (CIF_SYSERR);
00715 }
00716 if ((i = write_strlist (CIFF90MO(cr)->cdirs, (int) CIFF90MO(cr)->ncdirs)) < 0)
00717 return (i);
00718 if ((i = CIFF90MO(cr)->onlen) > 0) {
00719 if (fwrite (CIFF90MO(cr)->objname, sizeof(char), i, fd) != i)
00720 return (CIF_SYSERR);
00721 }
00722 if ((i = CIFF90MO(cr)->cnlen) > 0) {
00723 if (fwrite (CIFF90MO(cr)->calname, sizeof(char), i, fd) != i)
00724 return (CIF_SYSERR);
00725 }
00726 if ((i = CIFF90MO(cr)->inlen) > 0) {
00727 if (fwrite (CIFF90MO(cr)->inname, sizeof(char), i, fd) != i)
00728 return (CIF_SYSERR);
00729 }
00730 break;
00731
00732
00733 case CIF_F90_OPT_OPTS:
00734
00735 if ((i = CIFF90OPTOPT(cr)->noptlevels) > 0) {
00736 if (fwrite (CIFF90OPTOPT(cr)->lopts, OPTS_SSIZE, i, fd) != i)
00737 return (CIF_SYSERR);
00738 }
00739 break;
00740
00741 case CIF_F90_INT_BLOCK:
00742
00743
00744 if (_Cif_filetbl[cifd].version == 2) {
00745
00746 if ((i = CIFF90IB2(cr)->nlen) > 0) {
00747 if (fwrite (CIFF90IB2(cr)->name, sizeof(char), i, fd) != i)
00748 return (CIF_SYSERR);
00749 }
00750 if ((i = CIFF90IB2(cr)->numints) > 0) {
00751 if (fwrite (CIFF90IB2(cr)->procids, sizeof(long), i, fd) != i)
00752 return (CIF_SYSERR);
00753 }
00754 }
00755 else {
00756
00757 if ((i = CIFF90IB(cr)->nlen) > 0) {
00758 if (fwrite (CIFF90IB(cr)->name, sizeof(char), i, fd) != i)
00759 return (CIF_SYSERR);
00760 }
00761 if ((i = CIFF90IB(cr)->numints) > 0) {
00762 if (fwrite (CIFF90IB(cr)->procids, sizeof(long), i, fd) != i)
00763 return (CIF_SYSERR);
00764 }
00765 }
00766 break;
00767
00768 case CIF_F90_RENAME:
00769
00770 if ((i = CIFF90RN(cr)->nlen) > 0) {
00771 if (fwrite (CIFF90RN(cr)->name, sizeof(char), i, fd) != i)
00772 return (CIF_SYSERR);
00773 }
00774 if ((i = CIFF90RN(cr)->orignlen) > 0) {
00775 if (fwrite (CIFF90RN(cr)->origname, sizeof(char), i, fd) != i)
00776 return (CIF_SYSERR);
00777 }
00778
00779 if ((i = CIFF90RN(cr)->nlocalids) > 0) {
00780 if (fwrite (CIFF90RN(cr)->localid, sizeof(long), i, fd) != i)
00781 return (CIF_SYSERR);
00782 }
00783 break;
00784
00785 case CIF_CC_TYPE:
00786 if ((i = CIFCCTYPE(cr)->nlen) > 0) {
00787 if (fwrite (CIFCCTYPE(cr)->name, sizeof(char), i, fd) != i)
00788 return (CIF_SYSERR);
00789 }
00790 if ( (n = CIFCCTYPE(cr)->nmem) > 0 ) {
00791 if ( (int) fwrite( (char *)CIFCCTYPE(cr)->mem, sizeof( int ), n, fd ) < n )
00792 return( CIF_SYSERR );
00793 }
00794 break;
00795
00796 case CIF_CC_ENTRY:
00797 if ((i = CIFCCENT(cr)->nlen) > 0) {
00798 if (fwrite (CIFCCENT(cr)->name, sizeof(char), i, fd) != i)
00799 return (CIF_SYSERR);
00800 }
00801 if ((i = CIFCCENT(cr)->elen) > 0) {
00802 if (fwrite (CIFCCENT(cr)->ename, sizeof(char), i, fd) != i)
00803 return (CIF_SYSERR);
00804 }
00805 if ( (n = CIFCCENT(cr)->nparam) > 0 ) {
00806 if ( (int) fwrite( (char *)CIFCCENT(cr)->param, sizeof( int ), n, fd ) < n )
00807 return( CIF_SYSERR );
00808 }
00809 break;
00810
00811 case CIF_CC_OBJ:
00812 if ((i = CIFCCOBJ(cr)->nlen) > 0) {
00813 if (fwrite (CIFCCOBJ(cr)->name, sizeof(char), i, fd) != i)
00814 return (CIF_SYSERR);
00815 }
00816 break;
00817
00818 case CIF_CC_ENUM:
00819 if ((i = CIFCCENUM(cr)->nlen) > 0) {
00820 if (fwrite (CIFCCENUM(cr)->name, sizeof(char), i, fd) != i)
00821 return (CIF_SYSERR);
00822 }
00823 if ((i = CIFCCENUM(cr)->vlen) > 0) {
00824 if (fwrite (CIFCCENUM(cr)->value, sizeof(char), i, fd) != i)
00825 return (CIF_SYSERR);
00826 }
00827 break;
00828
00829 case CIF_CC_EXPR:
00830 if ( (n = CIFCCEXPR(cr)->noper) > 0 ) {
00831 if ( (int) fwrite( (char *)CIFCCEXPR(cr)->oper, sizeof( int ), n, fd ) < n )
00832 return( CIF_SYSERR );
00833 }
00834 break;
00835
00836 default:
00837 break;
00838
00839 }
00840 return (0);
00841 }