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
00038
00039
00040
00041 static char USMID[] = "@(#) libcif/cifgetrec.c 30.18 06/27/97 14:34:02";
00042
00043
00044
00045
00046
00047
00048
00049
00050 #define CIF_VERSION 3
00051
00052 #ifdef _ABSOFT
00053 #include "cif.h"
00054 #else
00055 #include <cif.h>
00056 #endif
00057
00058 #if defined(BUILD_OS_DARWIN)
00059 #include <stdlib.h>
00060 #else
00061 #include <malloc.h>
00062 #endif
00063 #include <memory.h>
00064 #include <stdio.h>
00065 #include <stdlib.h>
00066 #include <string.h>
00067
00068 #include "cif_int.h"
00069
00070
00071
00072 static int ascii_callsite __((struct Cif_callsite *));
00073 static int ascii_cifhdr __((struct Cif_cifhdr *));
00074 static int ascii_comblk __((struct Cif_comblk *));
00075 static int ascii_const __((struct Cif_const *));
00076 static int ascii_entry __((struct Cif_entry *));
00077 static int ascii_file __((struct Cif_file *));
00078 static int ascii_loop __((struct Cif_loop *));
00079 static int ascii_include __((struct Cif_include *));
00080 static int ascii_label __((struct Cif_label *));
00081 static int ascii_message __((struct Cif_message *));
00082 static int ascii_namelist __((struct Cif_namelist *));
00083 static int ascii_object __((struct Cif_object *));
00084 static int ascii_srcfile __((struct Cif_srcfile *));
00085 static int ascii_summary __((struct Cif_summary *));
00086 static int ascii_unit __((struct Cif_unit *));
00087 static int ascii_endunit __((struct Cif_endunit *));
00088 static int ascii_usage __((struct Cif_usage *));
00089 static int ascii_f90_usage __((struct Cif_usage *));
00090 static int ascii_nd_msg __((struct Cif_nd_msg *));
00091 static int ascii_edopts __((struct Cif_edopts *));
00092 static int ascii_mach_char __((struct Cif_mach_char *));
00093 static int ascii_misc_opts __((struct Cif_misc_opts *));
00094 static int ascii_opt_opts __((struct Cif_opt_opts *));
00095 static int ascii_stmt_type __((struct Cif_stmt_type *));
00096 static int ascii_transform __((struct Cif_transform *));
00097
00098 static int ascii_cdir __((struct Cif_cdir *));
00099 static int ascii_cdir_doshared __((struct Cif_cdir_doshared *));
00100 static int ascii_geometry __((struct Cif_geometry *));
00101 static int ascii_continuation __((struct Cif_continuation *));
00102
00103 static int ascii_c_tag __((struct Cif_c_tag *));
00104 static int ascii_c_opts __((struct Cif_c_opts *));
00105 static int ascii_c_message __((struct Cif_c_message *));
00106 static int ascii_c_const __((struct Cif_c_const *));
00107 static int ascii_c_entry __((struct Cif_c_entry *));
00108 static int ascii_c_object __((struct Cif_c_object *));
00109 static int ascii_c_entry_end __((struct Cif_c_entry_end *));
00110 static int ascii_c_lint_directive __((struct Cif_c_lint_directive *));
00111 static int ascii_c_macro_def __((struct Cif_c_macro_def *));
00112 static int ascii_c_macro_undef __((struct Cif_c_macro_undef *));
00113 static int ascii_c_macro_usage __((struct Cif_c_macro_usage *));
00114
00115 #ifndef CRAY2
00116 static int ascii_f90_callsite __((struct Cif_f90_callsite *));
00117 static int ascii_f90_comblk __((struct Cif_f90_comblk *));
00118 static int ascii_f90_const __((struct Cif_f90_const *));
00119 static int ascii_f90_entry __((struct Cif_f90_entry *));
00120 static int ascii_f90_loop __((struct Cif_f90_loop *));
00121 static int ascii_f90_derived_type __((struct Cif_f90_derived_type *));
00122 static int ascii_f90_label __((struct Cif_f90_label *));
00123 static int ascii_f90_namelist __((struct Cif_f90_namelist *));
00124 static int ascii_f90_object __((struct Cif_f90_object *));
00125 static int ascii_f90_misc_opts __((struct Cif_f90_misc_opts *));
00126 static int ascii_f90_opt_opts __((struct Cif_f90_opt_opts *));
00127 static int ascii_f90_begin_scope __((struct Cif_f90_begin_scope *));
00128 static int ascii_f90_end_scope __((struct Cif_f90_end_scope *));
00129 static int ascii_f90_scope_info __((struct Cif_f90_scope_info *));
00130 static int ascii_f90_use_module __((struct Cif_f90_use_module *));
00131 static int ascii_f90_rename __((struct Cif_f90_rename *));
00132 static int ascii_f90_int_block __((struct Cif_f90_int_block *));
00133 static int ascii_f90_vectorization __((struct Cif_f90_vectorization *));
00134
00135 static int ascii_BE_node __((struct Cif_BE_node *));
00136 static int ascii_BE_fid __((struct Cif_BE_fid *));
00137 static int ascii_cc_type __((struct Cif_cc_type *));
00138 static int ascii_cc_entry __((struct Cif_cc_entry *));
00139 static int ascii_cc_obj __((struct Cif_cc_obj *));
00140 static int ascii_cc_subtype __((struct Cif_cc_subtype *));
00141 static int ascii_cc_enum __((struct Cif_cc_enum *));
00142 static int ascii_cc_expr __((struct Cif_cc_expr *));
00143 static int ascii_src_pos __((struct Cif_src_pos *));
00144 static int ascii_orig_cmd __((struct Cif_orig_cmd *));
00145 #endif
00146
00147 static int (*ascii_record[CIF_MAXRECORD]) () = {
00148 0,
00149 ascii_callsite,
00150 ascii_cifhdr,
00151 ascii_comblk,
00152 ascii_const,
00153 ascii_cdir,
00154 ascii_entry,
00155 ascii_file,
00156 ascii_loop,
00157 ascii_include,
00158 ascii_label,
00159 ascii_message,
00160 ascii_namelist,
00161 ascii_object,
00162 ascii_srcfile,
00163 ascii_summary,
00164 ascii_cdir_doshared,
00165 ascii_unit,
00166 ascii_endunit,
00167 ascii_usage,
00168 ascii_nd_msg,
00169 ascii_edopts,
00170 ascii_mach_char,
00171 ascii_misc_opts,
00172 ascii_opt_opts,
00173 ascii_stmt_type,
00174 ascii_geometry,
00175 ascii_continuation,
00176 #ifndef CRAY2
00177 ascii_f90_callsite,
00178 ascii_f90_comblk,
00179 ascii_f90_const,
00180 ascii_f90_entry,
00181 ascii_f90_loop,
00182 ascii_f90_derived_type,
00183 ascii_f90_label,
00184 ascii_f90_namelist,
00185 ascii_f90_object,
00186 ascii_f90_misc_opts,
00187 ascii_f90_opt_opts,
00188 ascii_f90_begin_scope,
00189 ascii_f90_end_scope,
00190 ascii_f90_scope_info,
00191 ascii_f90_use_module,
00192 ascii_f90_rename,
00193 ascii_f90_int_block,
00194 ascii_f90_vectorization,
00195 ascii_BE_node,
00196 #else
00197 NULL, NULL, NULL, NULL,
00198 NULL, NULL, NULL, NULL,
00199 NULL, NULL, NULL, NULL,
00200 NULL, NULL, NULL, NULL,
00201 NULL, NULL, NULL,
00202 #endif
00203 ascii_transform,
00204 0,0,
00205 ascii_BE_fid,
00206 ascii_c_tag,
00207 ascii_c_opts,
00208 ascii_c_message,
00209 ascii_c_const,
00210 ascii_c_entry,
00211 ascii_c_object,
00212 ascii_c_lint_directive,
00213 ascii_c_macro_def,
00214 ascii_c_macro_undef,
00215 ascii_c_macro_usage,
00216 ascii_c_entry_end,
00217 0,0,0,0,0,0,0,0,
00218 ascii_orig_cmd,
00219 0,0,0,0,0,0,0,0,0,
00220 ascii_cc_type,
00221 ascii_cc_entry,
00222 ascii_cc_obj,
00223 ascii_cc_subtype,
00224 ascii_cc_enum,
00225 ascii_cc_expr,
00226 ascii_src_pos
00227
00228
00229 };
00230
00231
00232
00233
00234 static short valid_record[CIF_MAXRECORD] = {
00235 NO,
00236 YES,
00237 YES,
00238 YES,
00239 YES,
00240 YES,
00241 YES,
00242 YES,
00243 YES,
00244 YES,
00245 YES,
00246 YES,
00247 YES,
00248 YES,
00249 YES,
00250 YES,
00251 YES,
00252 YES,
00253 YES,
00254 YES,
00255 YES,
00256 YES,
00257 YES,
00258 YES,
00259 YES,
00260 YES,
00261 YES,
00262 YES,
00263 YES,
00264 YES,
00265 YES,
00266 YES,
00267 YES,
00268 YES,
00269 YES,
00270 YES,
00271 YES,
00272 YES,
00273 YES,
00274 YES,
00275 YES,
00276 YES,
00277 YES,
00278 YES,
00279 YES,
00280 YES,
00281 YES,
00282 YES,
00283 YES,
00284 YES,
00285 YES,
00286 YES,
00287 YES,
00288 YES,
00289 YES,
00290 YES,
00291 YES,
00292 YES,
00293 YES,
00294 YES,
00295 YES,
00296 YES,
00297 NO, NO, NO, NO, NO, NO, NO, NO,
00298 YES,
00299 NO, NO, NO, NO, NO, NO, NO, NO, NO,
00300 YES,
00301 YES,
00302 YES,
00303 YES,
00304 YES,
00305 YES,
00306 YES
00307
00308 };
00309
00310
00311
00312
00313
00314
00315 struct Cif_generic *_cif_map_buffer = (struct Cif_generic *) NULL;
00316
00317
00318 static int lcifd;
00319 static int lmode;
00320
00321 static int binary_record __((struct Cif_generic **, FILE *));
00322
00323
00324
00325
00326
00327
00328
00329 static int global_msgfid = -1;
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341 static char *ntoken;
00342 static char delim;
00343 static char *token () {
00344 char *tok;
00345
00346 if (*ntoken == '\0')
00347 return ((char *)NULL);
00348 else {
00349 tok = ntoken;
00350 delim = *ntoken++;
00351 while (delim != SEPARATOR && delim != '\n' && delim != '\0')
00352 delim = *ntoken++;
00353 *(ntoken-1) = '\0';
00354 return (tok);
00355 }
00356 }
00357
00358
00359
00360
00361
00362
00363
00364
00365 static int compuse (u1, u2)
00366 struct Cif_use *u1, *u2;
00367 {
00368 int ret;
00369
00370 if ((ret = ( u1->fid - u2->fid )) != 0)
00371 return (ret);
00372 else if ((ret = ( u1->line - u2->line )) != 0)
00373 return (ret);
00374 else
00375 return ( u1->cpos - u2->cpos );
00376 }
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391 int Cif_Getrecord
00392 #ifdef __STDC__
00393 (int cifd, struct Cif_generic **cif_record)
00394 #else
00395 (cifd, cif_record)
00396 int cifd;
00397 struct Cif_generic **cif_record;
00398 #endif
00399 {
00400
00401 int rtype;
00402 int status = 0;
00403
00404 if (cifd < 0 || cifd >= CIF_FT_SIZE || _Cif_filetbl[cifd].form == NOT_A_CIF)
00405 return (CIF_NOTOPEN);
00406 else if (_Cif_filetbl[cifd].optype == 'w')
00407 return (CIF_BADREQ);
00408 lcifd = cifd;
00409
00410
00411
00412
00413
00414
00415 lmode = _Cif_filetbl[cifd].mode;
00416 if (lmode == CIF_MEM_DEFAULT) {
00417 if ((status = Cif_Memmode (cifd, CIF_MEM_FIXED)) != 0)
00418 return (status);
00419 lmode = _Cif_filetbl[cifd].mode;
00420 }
00421 if (lmode == CIF_MEM_FIXED)
00422 _Cif_memarea[_Cif_filetbl[cifd].fme].mused = 0;
00423
00424 if (_Cif_filetbl[cifd].form == ASCII_CIF) {
00425
00426
00427
00428
00429
00430
00431
00432 do {
00433 do {
00434 if (_Cif_filetbl[cifd].ifull == NO) {
00435 if (fgets(_Cif_filetbl[cifd].ip, CIF_BUFSIZE, _Cif_filetbl[cifd].fd)
00436 == NULL)
00437 {
00438 if (feof (_Cif_filetbl[cifd].fd))
00439 return (CIF_EOF);
00440 else
00441 return (CIF_SYSERR);
00442 }
00443 }
00444 _Cif_filetbl[cifd].ifull = NO;
00445 ntoken = _Cif_filetbl[cifd].ip;
00446 rtype = atoi (token ());
00447 } while (rtype >= CIF_MAXRECORD || ascii_record[rtype] == 0 ||
00448 _Cif_filetbl[cifd].rmask[rtype] == '\0');
00449
00450
00451
00452
00453
00454 *cif_record = (struct Cif_generic *) _Cif_space[lmode]
00455 (_Cif_structsize[rtype][_Cif_filetbl[cifd].return_version], lcifd);
00456 if (*cif_record == NULL)
00457 status = CIF_NOMEM;
00458 else {
00459 (void) memset ((char *)*cif_record,
00460 '\0',
00461 _Cif_structsize
00462 [rtype][_Cif_filetbl[cifd].return_version]);
00463
00464 (*cif_record)->rectype = rtype;
00465 status = ascii_record[rtype] (*cif_record);
00466
00467 }
00468
00469
00470
00471
00472
00473
00474 if (status == CIF_MAXRECORD &&
00475 lmode == CIF_MEM_INDIV)
00476 Cif_Free(*cif_record);
00477
00478 } while (status == CIF_MAXRECORD);
00479 }
00480
00481 else
00482 status = binary_record (cif_record, _Cif_filetbl[cifd].fd);
00483
00484 return (status);
00485 }
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496 int _Cif_binary_map_version (rtype, map_buffer, cr)
00497 int rtype;
00498 struct Cif_generic *map_buffer;
00499 struct Cif_generic *cr;
00500 {
00501
00502 switch (rtype) {
00503
00504 case CIF_OBJECT : {
00505 struct Cif_object *to = (struct Cif_object *) cr;
00506 struct Cif_object *from = (struct Cif_object *) map_buffer;
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516 (void) memcpy((char *) cr, (char *) map_buffer,
00517 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00518
00519 if (_Cif_filetbl[lcifd].return_version == 1) {
00520 if (from->storage == CIF_ST_DATA)
00521
00522
00523
00524
00525 to->storage = CIF_ST_STATIC;
00526 }
00527 else
00528 if (_Cif_filetbl[lcifd].version == 1) {
00529
00530 to->geomid = 0;
00531 to->dist = 0;
00532 to->pointer = 0;
00533 }
00534
00535 break;
00536 }
00537
00538 case CIF_CONST : {
00539 struct Cif_const *to = (struct Cif_const *) cr;
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549 (void) memcpy((char *) cr, (char *) map_buffer,
00550 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00551
00552 if (_Cif_filetbl[lcifd].version == 1 &&
00553 _Cif_filetbl[lcifd].return_version != 1) {
00554
00555
00556
00557
00558 to->origform = 0;
00559 to->olen = 0;
00560 to->oform = (char *) NULL;
00561 }
00562
00563 break;
00564 }
00565
00566
00567 case CIF_FILE : {
00568 struct Cif_file *to = (struct Cif_file *) cr;
00569
00570 struct Cif_file *from = (struct Cif_file *) map_buffer;
00571
00572 (void) memcpy((char *) cr, (char *) map_buffer,
00573 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].version]);
00574
00575
00576
00577 break;
00578 }
00579
00580 case CIF_COMBLK : {
00581 struct Cif_comblk *to = (struct Cif_comblk *) cr;
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591 (void) memcpy((char *) cr, (char *) map_buffer,
00592 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00593
00594 if (_Cif_filetbl[lcifd].version == 1 &&
00595 _Cif_filetbl[lcifd].return_version != 1)
00596 to->dist = 0;
00597
00598 break;
00599 }
00600
00601 case CIF_USAGE : {
00602 struct Cif_usage *to = (struct Cif_usage *) cr;
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612 (void) memcpy((char *) cr, (char *) map_buffer,
00613 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00614
00615 if (_Cif_filetbl[lcifd].version == 1 &&
00616 _Cif_filetbl[lcifd].return_version != 1) {
00617 to->nmembs = 0;
00618 to->membs = (long *) NULL;
00619 }
00620
00621 break;
00622 }
00623
00624 case CIF_MACH_CHAR : {
00625 struct Cif_mach_char *to = (struct Cif_mach_char *) cr;
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635 (void) memcpy((char *) cr, (char *) map_buffer,
00636 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00637
00638 if (_Cif_filetbl[lcifd].version == 1 &&
00639 _Cif_filetbl[lcifd].return_version != 1) {
00640 to->numbanks = 0;
00641 to->numcpus = 0;
00642 to->instbufsize = 0;
00643 to->clockperiod = 0;
00644 to->numclregs = 0;
00645 to->bankbusytime = 0;
00646 }
00647
00648 break;
00649 }
00650
00651 case CIF_C_MESSAGE : {
00652 struct Cif_c_message *to = (struct Cif_c_message *) cr;
00653
00654 (void) memcpy((char *) cr, (char *) map_buffer,
00655 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00656
00657 if (_Cif_filetbl[lcifd].version == 1 &&
00658 _Cif_filetbl[lcifd].return_version != 1)
00659
00660 to->msgcode = 0;
00661
00662 break;
00663 }
00664
00665 case CIF_MISC_OPTS : {
00666 struct Cif_misc_opts *to = (struct Cif_misc_opts *) cr;
00667
00668 (void) memcpy((char *) cr, (char *) map_buffer,
00669 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00670
00671 if (_Cif_filetbl[lcifd].version == 1 &&
00672 _Cif_filetbl[lcifd].return_version != 1) {
00673 to->llen = 0;
00674 to->cifopt = 0;
00675 to->inputlen = 0;
00676 to->runtime = 0;
00677 to->numincs = 0;
00678 }
00679
00680 break;
00681 }
00682
00683
00684 case CIF_OPT_OPTS : {
00685
00686 if (_Cif_filetbl[lcifd].return_version == 1) {
00687
00688 struct Cif_opt_opts *from = (struct Cif_opt_opts *) map_buffer;
00689 struct Cif_opt_opts_1 *to = (struct Cif_opt_opts_1 *) cr;
00690
00691 to->values = from->values;
00692
00693 } else if (_Cif_filetbl[lcifd].version == 1) {
00694
00695
00696 struct Cif_opt_opts_1 *from = (struct Cif_opt_opts_1 *) map_buffer;
00697 struct Cif_opt_opts *to = (struct Cif_opt_opts *) cr;
00698
00699 to->values = from->values;
00700 to->inlevel = 0;
00701
00702 } else {
00703
00704 (void) memcpy((char *) cr, (char *) map_buffer,
00705 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00706 }
00707 break;
00708 }
00709
00710
00711 case CIF_C_ENTRY : {
00712
00713 if (_Cif_filetbl[lcifd].return_version == 1) {
00714
00715 struct Cif_c_entry *from = (struct Cif_c_entry *) map_buffer;
00716 struct Cif_c_entry_1 *to = (struct Cif_c_entry_1 *) cr;
00717
00718 to->rectype = from->rectype;
00719 to->ptype = from->ptype;
00720 if (from->symclass == 5)
00721 to->symclass = 0;
00722 else
00723 to->symclass = from->symclass;
00724 to->retvalue = from->retvalue;
00725 to->varargs = from->varargs;
00726 to->scope = from->scope;
00727 to->nlen = from->nlen;
00728 to->symid = from->symid;
00729 to->nargs = from->nargs;
00730 to->nmods = from->nmods;
00731 to->qual = from->qual;
00732 to->btype = from->btype;
00733
00734 }
00735 else
00736
00737 if (_Cif_filetbl[lcifd].version == 1) {
00738
00739 struct Cif_c_entry_1 *from = (struct Cif_c_entry_1 *) map_buffer;
00740 struct Cif_c_entry *to = (struct Cif_c_entry *) cr;
00741
00742 to->rectype = from->rectype;
00743 to->ptype = from->ptype;
00744 to->symclass = from->symclass;
00745 to->retvalue = from->retvalue;
00746 to->varargs = from->varargs;
00747 to->tagid = 0;
00748 to->scope = from->scope;
00749 to->nlen = from->nlen;
00750 to->symid = from->symid;
00751 to->nargs = from->nargs;
00752 to->nmods = from->nmods;
00753 to->qual = from->qual;
00754 to->btype = from->btype;
00755 to->link = 0;
00756
00757 }
00758 else {
00759 (void) memcpy((char *) cr, (char *) map_buffer,
00760 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00761 }
00762
00763 break;
00764 }
00765
00766 case CIF_C_TAG : {
00767 struct Cif_c_tag *tag = (struct Cif_c_tag *) cr;
00768
00769 (void) memcpy((char *) cr, (char *) map_buffer,
00770 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00771
00772
00773
00774 if (_Cif_filetbl[lcifd].version == 1 &&
00775 _Cif_filetbl[lcifd].return_version != 1 &&
00776 tag->entity == 10)
00777 tag->entity = 9;
00778 else
00779 if (_Cif_filetbl[lcifd].version != 1 &&
00780 _Cif_filetbl[lcifd].return_version == 1 &&
00781 tag->entity == 9)
00782 tag->entity = 10;
00783
00784 break;
00785 }
00786
00787 case CIF_C_OBJECT : {
00788
00789 struct Cif_c_object *obj = (struct Cif_c_object *) cr;
00790
00791 (void) memcpy((char *) cr, (char *) map_buffer,
00792 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00793
00794 if (_Cif_filetbl[lcifd].return_version == 1) {
00795
00796 struct Cif_c_object *from = (struct Cif_c_object *) map_buffer;
00797 struct Cif_c_object_1 *to = (struct Cif_c_object_1 *) cr;
00798
00799 to->mods = from->mods;
00800 to->name = from->name;
00801
00802 }
00803 else
00804
00805 if (_Cif_filetbl[lcifd].version == 1) {
00806
00807
00808 struct Cif_c_object_1 *from = (struct Cif_c_object_1 *) map_buffer;
00809 struct Cif_c_object *to = (struct Cif_c_object *) cr;
00810
00811 to->mods = from->mods;
00812 to->name = from->name;
00813
00814 }
00815
00816 if (_Cif_filetbl[lcifd].version == 1 &&
00817 _Cif_filetbl[lcifd].return_version != 1 &&
00818 (obj->entity == 11 || obj->entity == 12))
00819 obj->entity --;
00820 else
00821 if (_Cif_filetbl[lcifd].version != 1 &&
00822 _Cif_filetbl[lcifd].return_version == 1 &&
00823 (obj->entity == 10 || obj->entity == 11))
00824 obj->entity ++;
00825
00826 break;
00827 }
00828
00829 case CIF_MESSAGE :
00830 {
00831 (void) memcpy((char *) cr, (char *) map_buffer,
00832 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00833
00834 if (_Cif_filetbl[lcifd].return_version < 3 &&
00835 _Cif_filetbl[lcifd].version == 3) {
00836
00837 struct Cif_message *from = (struct Cif_message *) map_buffer;
00838 struct Cif_message_1 *to = (struct Cif_message_1 *) cr;
00839
00840 to->fid = from->pfid;
00841
00842 ((struct Cif_message *)cr)->nlen = from->nlen;
00843
00844
00845
00846 }
00847
00848 break;
00849 }
00850
00851
00852 case CIF_F90_INT_BLOCK :
00853 case CIF_F90_DERIVED_TYPE :
00854 case CIF_BE_NODE :
00855 {
00856
00857 (void) memcpy((char *) cr, (char *) map_buffer,
00858 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00859 break;
00860 }
00861
00862 default:
00863
00864
00865
00866
00867
00868
00869
00870
00871 if (_Cif_filetbl[lcifd].rmask[rtype] == '\0') {
00872
00873 (void) memcpy((char *) cr, (char *) map_buffer,
00874 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].version]);
00875
00876 }
00877 else {
00878
00879 (void) memcpy((char *) cr, (char *) map_buffer,
00880 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
00881
00882 }
00883
00884
00885
00886
00887
00888
00889 if (rtype == CIF_STMT_TYPE &&
00890 CIFSTMT(cr)->type == CIF_TP_CDIR &&
00891 _Cif_filetbl[lcifd].return_version == 1) {
00892 return( 0 );
00893 }
00894
00895 }
00896
00897
00898 return( 1 );
00899
00900
00901 }
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912 static int binary_record (cif_record, fd)
00913 struct Cif_generic **cif_record;
00914 FILE *fd;
00915 {
00916
00917 int rtype, stat, size;
00918 register char *cp;
00919 struct Cif_generic *cr;
00920 struct Cif_generic rechdr;
00921 int keep = 1;
00922
00923 do {
00924 cp = (char *)&rechdr;
00925
00926 if (fread (cp, sizeof(char), 1, fd) != 1) {
00927
00928 if (feof(fd)) return (CIF_EOF);
00929 else return (CIF_SYSERR);
00930
00931 }
00932
00933 rtype = rechdr.rectype;
00934
00935
00936 if (rtype > CIF_MAXRECORD || valid_record[rtype] == NO) {
00937 return (CIF_BADFORM);
00938 }
00939
00940
00941
00942
00943
00944 if (_Cif_filetbl[lcifd].rmask[rtype] == '\0') {
00945
00946 cr = *cif_record = (struct Cif_generic *) _Cif_space[lmode]
00947 (_Cif_structsize[rtype][_Cif_filetbl[lcifd].version],
00948 lcifd);
00949
00950 }
00951 else {
00952
00953 cr = *cif_record = (struct Cif_generic *) _Cif_space[lmode]
00954 (_Cif_structsize[rtype][_Cif_filetbl[lcifd].return_version],
00955 lcifd);
00956
00957 }
00958
00959
00960 if (cr == NULL)
00961 return (CIF_NOMEM);
00962
00963
00964 if (_Cif_filetbl[lcifd].rmask[rtype] == '\0') {
00965
00966 (void) memset ((char *)cr, '\0',
00967 _Cif_structsize[rtype][_Cif_filetbl[lcifd].version]);
00968
00969 }
00970 else {
00971
00972 (void) memset ((char *)cr, '\0',
00973 _Cif_structsize[rtype][_Cif_filetbl[lcifd].return_version]);
00974
00975 }
00976
00977 cp = (char *)cr + 1;
00978 size = _Cif_shortsize[rtype][_Cif_filetbl[lcifd].version] - 1;
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009 if (_Cif_filetbl[lcifd].version == _Cif_filetbl[lcifd].return_version) {
01010
01011 if (fread (cp, size, 1, fd) != 1)
01012 IO_ERROR;
01013 }
01014 else {
01015
01016
01017
01018
01019
01020 if (_cif_map_buffer == (struct Cif_generic *) NULL)
01021 _cif_map_buffer = (struct Cif_generic *) malloc(CIF_MAX_SSIZE);
01022
01023 (void) memset ((char *)_cif_map_buffer, '\0',
01024 _Cif_shortsize[rtype][_Cif_filetbl[lcifd].return_version]);
01025
01026 if (fread ((char *) _cif_map_buffer + 1, size, 1, fd) != 1)
01027 IO_ERROR;
01028
01029 keep = _Cif_binary_map_version(rtype, _cif_map_buffer, cr);
01030
01031 }
01032
01033
01034 cr->rectype = rtype;
01035
01036 if ((stat = _Cif_binread (lcifd, rtype, cr, fd)) < 0)
01037 return (stat);
01038
01039
01040
01041
01042
01043
01044
01045 if ((keep == 0 ||
01046 _Cif_filetbl[lcifd].rmask[rtype] == '\0') &&
01047 _Cif_filetbl[lcifd].mode == CIF_MEM_INDIV)
01048 Cif_Free(cr);
01049
01050 }
01051 while (keep == 0 || _Cif_filetbl[lcifd].rmask[rtype] == '\0');
01052
01053 return (rtype);
01054
01055 }
01056
01057
01058
01059
01060
01061
01062
01063 static int strlist(args)
01064 register char ***args;
01065 {
01066 register int n, i, len;
01067 register char *c;
01068 char **aptr;
01069
01070 aptr = NULL;
01071 if ( (n = atoi (token()) ) > 0) {
01072 aptr = (char **)_Cif_space[lmode] (sizeof(char *)*n, lcifd);
01073 if (aptr == NULL)
01074 return (CIF_NOMEM);
01075 for (i = 0; i < n; i++) {
01076 c = token();
01077 len = strlen (c);
01078 aptr[i] = _Cif_space[lmode] (len+1, lcifd);
01079 if (aptr[i] == NULL)
01080 return (CIF_NOMEM);
01081 (void) strcpy (aptr[i], c);
01082 }
01083 }
01084 *args = aptr;
01085 return(n);
01086 }
01087
01088
01089
01090
01091
01092
01093
01094 static int llist(args, varargs)
01095 long **args;
01096 int *varargs;
01097 {
01098 register int n, i;
01099 register char *c;
01100 register long *aptr;
01101
01102 c = token();
01103
01104
01105
01106
01107
01108 if (varargs != NULL) {
01109 *varargs = 0;
01110 if (*c == '*') {
01111 *varargs = 1;
01112 c++;
01113 }
01114 }
01115
01116 aptr = NULL;
01117 if ( (n = atoi (c) ) > 0) {
01118 aptr = (long *)_Cif_space[lmode] (sizeof(long)*n, lcifd);
01119 if (aptr == NULL)
01120 return (CIF_NOMEM);
01121 for (i = 0; i < n; i++)
01122 aptr[i] = atoi (token());
01123 }
01124 *args = aptr;
01125 return(n);
01126 }
01127
01128
01129
01130
01131
01132
01133
01134
01135 static int filltype(basic, qual, tmod)
01136 register int *basic;
01137 register int *qual;
01138 register struct Cif_tmod **tmod;
01139 {
01140 register char *c;
01141 register char *c_array;
01142 register int len, n, i, funcseen = NO;
01143 static char digit[ ] = { '\0', '\0' };
01144 struct Cif_tmod *tm;
01145
01146
01147
01148
01149
01150 len = strlen(c = token());
01151
01152 *basic = strtol(&c[len-2], (char **)NULL, 16);
01153 c[len-2] = '\0';
01154 *qual = strtol(&c[len-3], (char **)NULL, 16);
01155 c[len-3] = '\0';
01156 len -= 3;
01157 if (len <= 0) {
01158 *tmod = (struct Cif_tmod *)NULL;
01159 return (0);
01160 }
01161
01162
01163
01164 tm= (struct Cif_tmod *)_Cif_space[lmode](sizeof(struct Cif_tmod)*len, lcifd);
01165 if (tm == NULL)
01166 return (CIF_NOMEM);
01167
01168
01169
01170
01171
01172
01173 for (i = 0; i < len; i++) {
01174 digit[0] = c[i];
01175
01176
01177
01178 tm[i].mod = n = strtol(digit, (char **)NULL, 16);
01179
01180
01181
01182
01183
01184
01185
01186
01187
01188 if (n == CIF_TMC_ARRAY) {
01189 c_array = token();
01190 if (c_array != (char *) NULL)
01191 if (atol(c_array) < 0)
01192 tm[i].val = 0;
01193 else
01194 tm[i].val = atol(c_array);
01195 else
01196 tm[i].val = 0;
01197 }
01198 else if (n == CIF_TMC_FUNCNOPR || n == CIF_TMC_FUNCPRO) {
01199 if (funcseen == NO) {
01200 funcseen = YES;
01201 tm[i].val = 0;
01202 continue;
01203 }
01204 else
01205 tm[i].val = atol(token());
01206 }
01207 else
01208 tm[i].val = 0;
01209 }
01210 *tmod = tm;
01211 return (len);
01212 }
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223 static int ascii_c_const (con)
01224 struct Cif_c_const *con;
01225 {
01226 register char *c1, *c2;
01227 register long i;
01228
01229 con->symid = atol (token());
01230 con->btype = strtol (token(), (char **)NULL, 16);
01231 c1 = token();
01232 i = strlen (c1) + 1;
01233 if (delim == SEPARATOR) {
01234 c2 = token();
01235 i += strlen (c2) + 1;
01236 }
01237 else
01238 c2 = NULL;
01239 con->vlen = i;
01240 con->value = _Cif_space[lmode] (i, lcifd);
01241 if (con->value == NULL)
01242 return (CIF_NOMEM);
01243 (void) strcpy (con->value, c1);
01244 if (c2 != NULL)
01245 (void) strcpy (con->value+strlen(c1)+1, c2);
01246 return (CIF_C_CONST);
01247
01248 }
01249
01250
01251
01252
01253 static int ascii_c_entry (ent)
01254 struct Cif_c_entry *ent;
01255 {
01256 register long i;
01257 register char *c;
01258 int basic, qual, v;
01259
01260
01261
01262
01263 if (_Cif_filetbl[lcifd].return_version == 1) {
01264 struct Cif_c_entry_1 *ent1 = (struct Cif_c_entry_1 *) ent;
01265 int symclass;
01266
01267 c = token();
01268 ent1->nlen = i = strlen (c);
01269 ent1->name = _Cif_space[lmode] (i+1, lcifd);
01270 if (ent1->name == NULL)
01271 return (CIF_NOMEM);
01272 (void) strcpy (ent1->name, c);
01273 ent1->symid = atol (token());
01274 ent1->ptype = atoi (token());
01275 symclass = atoi (token());
01276 if (_Cif_filetbl[lcifd].version != 1 &&
01277 symclass == 5)
01278 symclass = 0;
01279
01280 ent1->symclass = symclass;
01281 ent1->scope = atoi (token());
01282
01283
01284
01285
01286 if (_Cif_filetbl[lcifd].version != 1)
01287
01288 (void) token();
01289
01290 c = token();
01291 ent1->retvalue = (*c == 'F') ? 0 : ((*c == 'T') ? 1 : 2);
01292 if ((i = llist(&(ent1->argids), &v)) < 0)
01293 return (CIF_NOMEM);
01294 ent1->nargs = i;
01295 ent1->varargs = v;
01296 if ((i = filltype(&basic, &qual, &(ent1->mods))) < 0)
01297 return (CIF_NOMEM);
01298 ent1->nmods = i;
01299 ent1->qual = qual;
01300 ent1->btype = basic;
01301
01302 }
01303 else {
01304
01305 c = token();
01306 ent->nlen = i = strlen (c);
01307 ent->name = _Cif_space[lmode] (i+1, lcifd);
01308 if (ent->name == NULL)
01309 return (CIF_NOMEM);
01310 (void) strcpy (ent->name, c);
01311 ent->symid = atol (token());
01312 ent->ptype = atoi (token());
01313 ent->symclass = atoi (token());
01314 ent->scope = atoi (token());
01315
01316 if (_Cif_filetbl[lcifd].version != 1)
01317 ent->tagid = atol (token());
01318
01319
01320 c = token();
01321 ent->retvalue = (*c == 'F') ? 0 : ((*c == 'T') ? 1 : ((*c == 'I') ? 3 : 2));
01322 if ((i = llist(&(ent->argids), &v)) < 0)
01323 return (CIF_NOMEM);
01324 ent->nargs = i;
01325 ent->varargs = v;
01326 if ((i = filltype(&basic, &qual, &(ent->mods))) < 0)
01327 return (CIF_NOMEM);
01328 ent->nmods = i;
01329 ent->qual = qual;
01330 ent->btype = basic;
01331 if (delim == SEPARATOR) {
01332 ent->link = atol(token());
01333 }
01334 }
01335
01336 return (CIF_C_ENTRY);
01337 }
01338
01339
01340
01341 static int ascii_c_entry_end (ent_end)
01342 struct Cif_c_entry_end *ent_end;
01343 {
01344 register long i;
01345 register char *c;
01346
01347 c = token();
01348 ent_end->nlen = i = strlen (c);
01349 ent_end->name = _Cif_space[lmode] (i+1, lcifd);
01350 if (ent_end->name == NULL)
01351 return (CIF_NOMEM);
01352 (void) strcpy (ent_end->name, c);
01353 ent_end->symid = atol (token());
01354 ent_end->fid = atol (token());
01355 ent_end->strline = atol (token());
01356 ent_end->endline = atol (token());
01357
01358 return (CIF_C_ENTRY_END);
01359 }
01360
01361
01362 static int ascii_c_lint_directive (lint_dir)
01363 struct Cif_c_lint_directive *lint_dir;
01364 {
01365 register long i;
01366 register char *c;
01367
01368 c = token();
01369 lint_dir->nlen = i = strlen (c);
01370 lint_dir->name = _Cif_space[lmode] (i+1, lcifd);
01371 if (lint_dir->name == NULL)
01372 return (CIF_NOMEM);
01373 (void) strcpy (lint_dir->name, c);
01374 lint_dir->val = atol (token());
01375 lint_dir->objid = atol (token());
01376 lint_dir->fid = atol (token());
01377 lint_dir->strline = atol (token());
01378 lint_dir->strpos = atol (token());
01379 lint_dir->endline = atol (token());
01380 lint_dir->endpos = atol (token());
01381
01382 return (CIF_C_LINT_DIRECTIVE);
01383 }
01384
01385 static int ascii_c_macro_def (macro_def)
01386 struct Cif_c_macro_def *macro_def;
01387 {
01388 register long i;
01389 register char *c;
01390
01391 macro_def->symid = atol (token());
01392
01393 c = token();
01394 macro_def->nlen = i = strlen (c);
01395 macro_def->name = _Cif_space[lmode] (i+1, lcifd);
01396 if (macro_def->name == NULL)
01397 return (CIF_NOMEM);
01398 (void) strcpy (macro_def->name, c);
01399
01400 macro_def->fid = atol (token());
01401 macro_def->strline = atol (token());
01402 macro_def->strpos = atol (token());
01403 macro_def->endline = atol (token());
01404 macro_def->endpos = atol (token());
01405
01406 return (CIF_C_MACRO_DEF);
01407 }
01408
01409 static int ascii_c_macro_undef (macro_undef)
01410 struct Cif_c_macro_undef *macro_undef;
01411 {
01412
01413 macro_undef->symid = atol (token());
01414 macro_undef->fid = atol (token());
01415 macro_undef->line = atol (token());
01416 macro_undef->cpos = atol (token());
01417
01418 return (CIF_C_MACRO_UNDEF);
01419 }
01420
01421 static int ascii_c_macro_usage (macro_use)
01422 struct Cif_c_macro_usage *macro_use;
01423 {
01424 macro_use->useid = atol(token());
01425 macro_use->symid = atol(token());
01426 macro_use->fid = atol(token());
01427 macro_use->strline = atol(token());
01428 macro_use->strpos = atol(token());
01429 macro_use->endline = atol(token());
01430 macro_use->endpos = atol(token());
01431
01432 return (CIF_C_MACRO_USAGE);
01433 }
01434
01435
01436
01437
01438 static int ascii_c_message (msg)
01439 struct Cif_c_message *msg;
01440 {
01441 register char *c;
01442 register int tmp;
01443
01444
01445
01446
01447 if (_Cif_filetbl[lcifd].return_version == 1) {
01448 struct Cif_c_message_1 *msg1 = (struct Cif_c_message_1 *) msg;
01449
01450 msg1->severity = atoi(token());
01451 msg1->msgno = atoi(token());
01452
01453
01454
01455
01456
01457 if (_Cif_filetbl[lcifd].version != 1)
01458
01459 (void) token();
01460
01461 msg1->fid = atol(token());
01462 msg1->fline = atol(token());
01463 c = token();
01464 msg1->flinesuf = *c;
01465 msg1->incid = atol(token());
01466 msg1->iline = atol(token());
01467 tmp = strlist(&(msg1->args));
01468 if (tmp < 0)
01469 return (CIF_NOMEM);
01470 msg1->nargs = tmp;
01471 }
01472 else {
01473
01474 msg->severity = atoi(token());
01475 msg->msgno = atoi(token());
01476
01477 if (_Cif_filetbl[lcifd].version != 1)
01478 msg->msgcode = atoi(token());
01479
01480
01481 msg->fid = atol(token());
01482 msg->fline = atol(token());
01483 c = token();
01484 msg->flinesuf = *c;
01485 msg->incid = atol(token());
01486 msg->iline = atol(token());
01487 tmp = strlist(&(msg->args));
01488 if (tmp < 0)
01489 return (CIF_NOMEM);
01490 msg->nargs = tmp;
01491 }
01492
01493 return (CIF_C_MESSAGE);
01494 }
01495
01496
01497
01498
01499
01500 static int ascii_c_object (obj)
01501 struct Cif_c_object *obj;
01502 {
01503 register char *c;
01504 register int i;
01505 int basic, qual;
01506
01507
01508
01509
01510
01511
01512
01513 if (_Cif_filetbl[lcifd].return_version == 1) {
01514 struct Cif_c_object_1 *obj1 = (struct Cif_c_object_1 *) obj;
01515
01516 c = token();
01517 obj1->nlen = i = strlen (c);
01518 obj1->name = _Cif_space[lmode] (i+1, lcifd);
01519 if (obj1->name == NULL)
01520 return (CIF_NOMEM);
01521 (void) strcpy (obj1->name, c);
01522 obj1->symid = atol (token());
01523 obj1->entity = atoi (token());
01524
01525
01526
01527 if (_Cif_filetbl[lcifd].version != 1 &&
01528 (obj1->entity == 10 || obj1->entity == 11))
01529 obj1->entity ++;
01530
01531 obj1->symclass = atoi (token());
01532 obj1->scope = atoi (token());
01533 obj1->tagid = atol (token());
01534 obj1->psymid = atol (token());
01535 obj1->size = atoi (token());
01536 if ((i = filltype(&basic, &qual, &(obj1->mods))) < 0)
01537 return (CIF_NOMEM);
01538 obj1->nmods = i;
01539 obj1->qual = qual;
01540 obj1->btype = basic;
01541
01542 }
01543 else {
01544
01545 c = token();
01546 obj->nlen = i = strlen (c);
01547 obj->name = _Cif_space[lmode] (i+1, lcifd);
01548 if (obj->name == NULL)
01549 return (CIF_NOMEM);
01550 (void) strcpy (obj->name, c);
01551 obj->symid = atol (token());
01552 obj->entity = atoi (token());
01553
01554
01555
01556 if (_Cif_filetbl[lcifd].version == 1 &&
01557 (obj->entity == 11 || obj->entity == 12))
01558 obj->entity --;
01559
01560 obj->symclass = atoi (token());
01561 obj->scope = atoi (token());
01562 obj->tagid = atol (token());
01563 obj->psymid = atol (token());
01564 obj->size = atoi (token());
01565 if ((i = filltype(&basic, &qual, &(obj->mods))) < 0)
01566 return (CIF_NOMEM);
01567 obj->nmods = i;
01568 obj->qual = qual;
01569 obj->btype = basic;
01570
01571 if (delim == SEPARATOR) {
01572 obj->link = atol(token());
01573 }
01574 }
01575
01576 return (CIF_C_OBJECT);
01577 }
01578
01579 static int ascii_c_opts (opt)
01580 struct Cif_c_opts *opt;
01581 {
01582 register char *c;
01583 register long i;
01584
01585 c = token();
01586 opt->nlen = i = strlen (c);
01587 opt->name = _Cif_space[lmode] (i+1, lcifd);
01588 if (opt->name == NULL)
01589 return (CIF_NOMEM);
01590 (void) strcpy (opt->name, c);
01591 (void) strcpy (opt->bopts, token());
01592 opt->msglev = atoi(token());
01593 opt->truncval = atoi (token());
01594 opt->debug = *token();
01595 (void) strncpy (opt->report, token(), sizeof(opt->report));
01596 opt->atsklev = atoi (token());
01597 opt->inlnlev = atoi (token());
01598 opt->sclrlev = atoi (token());
01599 opt->vctrlev = atoi (token());
01600 if ((i = strlist(&(opt->incs))) < 0)
01601 return (CIF_NOMEM);
01602 opt->nincs = i;
01603 if ((i = strlist(&(opt->defs))) < 0)
01604 return (CIF_NOMEM);
01605 opt->ndefs = i;
01606 if ((i = strlist(&(opt->udefs))) < 0)
01607 return (CIF_NOMEM);
01608 opt->nudefs = i;
01609
01610 return (CIF_C_OPTS);
01611 }
01612
01613
01614
01615
01616 static int ascii_c_tag (tag)
01617 struct Cif_c_tag *tag;
01618 {
01619 register char *c;
01620 register long i;
01621 int basic, qual;
01622 register int tmp;
01623
01624 c = token();
01625 tag->nlen = i = strlen(c);
01626 tag->name = _Cif_space[lmode] (i+1, lcifd);
01627 if (tag->name == NULL)
01628 return (CIF_NOMEM);
01629 (void) strcpy (tag->name, c);
01630 tag->tagid = atol (token());
01631 tag->entity = atoi (token());
01632
01633
01634
01635 if (_Cif_filetbl[lcifd].version == 1 &&
01636 _Cif_filetbl[lcifd].return_version != 1 &&
01637 tag->entity == 10)
01638 tag->entity = 9;
01639 else
01640 if (_Cif_filetbl[lcifd].version != 1 &&
01641 _Cif_filetbl[lcifd].return_version == 1 &&
01642 tag->entity == 9)
01643 tag->entity = 10;
01644
01645 tag->size = atoi (token());
01646 tmp = llist(&(tag->memids), (int *) NULL);
01647 if (tmp < 0)
01648 return (CIF_NOMEM);
01649 tag->nmems = tmp;
01650 tmp = filltype(&basic, &qual, &(tag->mods));
01651 if (tmp < 0)
01652 return (CIF_NOMEM);
01653 tag->nmods = tmp;
01654 tag->qual = qual;
01655 tag->btype = basic;
01656
01657 return (CIF_C_TAG);
01658 }
01659
01660 static int ascii_callsite (cs)
01661 struct Cif_callsite *cs;
01662 {
01663
01664 register long i;
01665 register int nargs;
01666
01667 cs->entryid = atol (token());
01668 cs->fid = atol (token());
01669 cs->line = atol (token());
01670 cs->cpos = atol (token());
01671 if ( (nargs = cs->nargs = atoi (token())) > 0) {
01672 cs->argids = (long *)_Cif_space[lmode] (sizeof(long)*nargs, lcifd);
01673 if (cs->argids == NULL)
01674 return (CIF_NOMEM);
01675 i = 0;
01676 while (i < nargs)
01677 cs->argids[i++] = atol (token());
01678 }
01679 if (delim == SEPARATOR)
01680 cs->valused = (*token() == 'F' ? 0 : 1);
01681 return (CIF_CALLSITE);
01682
01683 }
01684
01685 static int ascii_cifhdr (hdr)
01686 struct Cif_cifhdr *hdr;
01687 {
01688
01689 (void) token();
01690 hdr->version = atoi (token()+1);
01691 hdr->lang = _Cif_filetbl[lcifd].lang = atoi (token());
01692
01693
01694
01695
01696
01697
01698
01699 hdr->srcfid = _Cif_filetbl[lcifd].srcfid;
01700
01701
01702
01703
01704
01705
01706 #ifndef CRAY2
01707 if (_Cif_filetbl[lcifd].lang == CIF_LG_F90) {
01708 ascii_record[CIF_USAGE] = ascii_f90_usage;
01709 }
01710 else {
01711 ascii_record[CIF_USAGE] = ascii_usage;
01712 }
01713 #endif
01714
01715 (void) strcpy (hdr->cvers, token());
01716 (void) strcpy (hdr->date, token());
01717 (void) strcpy (hdr->time, token());
01718 (void) strcpy (hdr->group, token());
01719 hdr->msgfid = atol (token());
01720
01721
01722
01723
01724
01725
01726 global_msgfid = hdr->msgfid;
01727 (void) strncpy (hdr->machname, token(), 8);
01728 (void) strncpy (hdr->hostcpu, token(), 8);
01729 hdr->hostcpu[8] = '\0';
01730 hdr->canpos = _Cif_filetbl[lcifd].seek;
01731 hdr->form = ASCII_CIF_FORMAT;
01732 hdr->form = 0;
01733 return (CIF_CIFHDR);
01734
01735 }
01736
01737 static int ascii_comblk (cb)
01738 struct Cif_comblk *cb;
01739 {
01740
01741 register char *c;
01742 register long i;
01743
01744
01745
01746
01747
01748
01749 if (_Cif_filetbl[lcifd].return_version == 1) {
01750 struct Cif_comblk_1 *cb1 = (struct Cif_comblk_1 *) cb;
01751
01752 c = token();
01753 cb1->nlen = i = strlen (c);
01754 cb1->name = _Cif_space[lmode] (i+1, lcifd);
01755 if (cb1->name == NULL)
01756 return (CIF_NOMEM);
01757 (void) strcpy (cb1->name, c);
01758 cb1->symid = atol (token());
01759 cb1->cbtype = atoi (token());
01760 cb1->length = atol (token());
01761
01762
01763
01764
01765
01766 if (_Cif_filetbl[lcifd].version != 1)
01767
01768 (void) token();
01769
01770 }
01771
01772 else {
01773
01774 c = token();
01775 cb->nlen = i = strlen (c);
01776 cb->name = _Cif_space[lmode] (i+1, lcifd);
01777 if (cb->name == NULL)
01778 return (CIF_NOMEM);
01779 (void) strcpy (cb->name, c);
01780 cb->symid = atol (token());
01781 cb->cbtype = atoi (token());
01782 cb->length = atol (token());
01783
01784 if (_Cif_filetbl[lcifd].version != 1) {
01785 c = token();
01786 if (c != (char *) NULL &&
01787 *c != (char) NULL)
01788 cb->dist = atoi(c);
01789 }
01790
01791
01792 }
01793
01794 return (CIF_COMBLK);
01795
01796 }
01797
01798
01799 static int ascii_const (con)
01800 struct Cif_const *con;
01801 {
01802 register int i;
01803 register char *c;
01804 register long attr;
01805 register int n;
01806
01807
01808
01809
01810
01811
01812 if (_Cif_filetbl[lcifd].return_version == 1) {
01813 struct Cif_const_1 *con1 = (struct Cif_const_1 *) con;
01814
01815 c = token();
01816 con1->nlen = i= strlen (c);
01817 con1->name = _Cif_space[lmode] (i+1, lcifd);
01818 if (con1->name == NULL)
01819 return (CIF_NOMEM);
01820 (void) strcpy (con1->name, c);
01821 con1->symid = atol (token());
01822 con1->dtype = atoi (token());
01823 if (con1->dtype == 100)
01824 con1->dtype = 0;
01825 else
01826 (con1->dtype)++;
01827
01828
01829
01830 if ( (con1->nvalues = atoi (token())) == 1) {
01831
01832 con1->vlen = i = strlen (c = token());
01833 con1->value = _Cif_space[lmode] (i+1, lcifd);
01834 if (con1->value == NULL)
01835 return (CIF_NOMEM);
01836 (void) strcpy (con1->value, c);
01837
01838 }
01839
01840
01841
01842 attr = strtol (token(), (char **)NULL, 16);
01843 con1->imptype = ((attr & CO_ATTR_IMPTYPE) != 0);
01844
01845
01846
01847
01848
01849
01850
01851 if (_Cif_filetbl[lcifd].version != 1) {
01852
01853
01854
01855 (void) token();
01856 if (delim == SEPARATOR)
01857 (void) token();
01858 }
01859 }
01860 else {
01861 c = token();
01862 con->nlen = i= strlen (c);
01863 con->name = _Cif_space[lmode] (i+1, lcifd);
01864 if (con->name == NULL)
01865 return (CIF_NOMEM);
01866 (void) strcpy (con->name, c);
01867 con->symid = atol (token());
01868 con->dtype = atoi (token());
01869 if (con->dtype == 100)
01870 con->dtype = 0;
01871 else
01872 (con->dtype)++;
01873
01874
01875
01876 if ( (con->nvalues = atoi (token())) == 1) {
01877 con->vlen = i = strlen (c = token());
01878 con->value = _Cif_space[lmode] (i+1, lcifd);
01879 if (con->value == NULL)
01880 return (CIF_NOMEM);
01881 (void) strcpy (con->value, c);
01882 }
01883
01884
01885
01886 attr = strtol (token(), (char **)NULL, 16);
01887 con->imptype = ((attr & CO_ATTR_IMPTYPE) != 0);
01888
01889 if ((attr & CO_ATTR_CHAR) != 0) {
01890 (void) token();
01891 }
01892
01893
01894 if ((attr & CO_ATTR_DIM) != 0) {
01895 n = atoi(token());
01896
01897 while (n > 0) {
01898 (void) token();
01899 (void) token();
01900 n--;
01901 }
01902
01903 }
01904
01905 if (_Cif_filetbl[lcifd].version != 1) {
01906
01907
01908 con->origform = atoi(token());
01909 if (con->origform) {
01910 c = token();
01911 con->olen = i = strlen (c);
01912 con->oform = _Cif_space[lmode] (i+1, lcifd);
01913 if (con->oform == NULL)
01914 return (CIF_NOMEM);
01915 (void) strcpy (con->oform, c);
01916 }
01917 }
01918
01919 }
01920 return (CIF_CONST);
01921
01922 }
01923
01924
01925 static int ascii_edopts (eo)
01926 struct Cif_edopts *eo;
01927 {
01928
01929 eo->opts = strtol (token(), (char **)NULL, 16);
01930 return (CIF_EDOPTS);
01931
01932 }
01933
01934 static int ascii_entry (entry)
01935 struct Cif_entry *entry;
01936 {
01937
01938 register char *c;
01939 register long i, len;
01940
01941 c = token();
01942 entry->nlen = len = strlen (c);
01943 entry->name = _Cif_space[lmode] (len+1, lcifd);
01944 if (entry->name == NULL)
01945 return (CIF_NOMEM);
01946 (void) strcpy (entry->name, c);
01947 entry->symid = atol (token());
01948 entry->etype = atol (token());
01949 entry->dtype = atol (token());
01950 if (entry->dtype == 100)
01951 entry->dtype = 0;
01952 else
01953 (entry->dtype)++;
01954
01955
01956
01957 if ( (len = atoi (token())) >= 0) {
01958 entry->valargs = 1;
01959 if (len > 0) {
01960 entry->nargs = len;
01961 entry->argids = (long *)_Cif_space[lmode] (sizeof(long)*len, lcifd);
01962 if (entry->argids == NULL)
01963 return (CIF_NOMEM);
01964 for (i = 0; i < len; i++)
01965 (entry->argids)[i] = atol (token());
01966 }
01967 }
01968
01969
01970
01971 i = strtol (token(), (char **)NULL, 16);
01972 entry->recur = ((i & EN_ATTR_RECUR) != 0);
01973 entry->stmtfunc = ((i & EN_ATTR_STMTF) != 0);
01974 entry->extrn = ((i & EN_ATTR_EXTERN) != 0);
01975 entry->intrin = ((i & EN_ATTR_INTRIN) != 0);
01976 entry->imptype = ((i & EN_ATTR_IMPTYPE) != 0);
01977 if ((i & EN_ATTR_CHAR) != 0)
01978 entry->charlen = atol (token());
01979 else
01980 entry->charlen = 0;
01981 return (CIF_ENTRY);
01982
01983 }
01984
01985 static int ascii_file (file)
01986 struct Cif_file *file;
01987 {
01988
01989 register char *c;
01990 register long len;
01991
01992 if (_Cif_filetbl[lcifd].return_version == 3) {
01993
01994 c = token();
01995
01996 file->nlen = len = strlen (c);
01997 file->name = _Cif_space[lmode] (len+1, lcifd);
01998 if (file->name == NULL)
01999 return (CIF_NOMEM);
02000 (void) strcpy (file->name, c);
02001 #ifdef KEY
02002 char *fld = token();
02003 if (fld == NULL) {
02004 fprintf(stderr, "libcif, Cif_file error : Could not open ascii_file\n");
02005 exit(-1);
02006 }
02007
02008 file->fid = atol (fld);
02009 #else
02010 file->fid = atol (token());
02011 #endif
02012
02013 if (delim == SEPARATOR) {
02014
02015 c = token();
02016
02017 file->onlen = len = strlen (c);
02018 file->oname = _Cif_space[lmode] (len+1, lcifd);
02019 if (file->oname == NULL)
02020 return (CIF_NOMEM);
02021 (void) strcpy (file->oname, c);
02022 }
02023 }
02024 else {
02025
02026 struct Cif_file_1 *file1 = (struct Cif_file_1 *) file;
02027
02028 c = token();
02029
02030 file1->nlen = len = strlen (c);
02031 file1->name = _Cif_space[lmode] (len+1, lcifd);
02032 if (file1->name == NULL)
02033 return (CIF_NOMEM);
02034 (void) strcpy (file1->name, c);
02035 file1->fid = atol (token());
02036
02037
02038
02039
02040
02041
02042 if (_Cif_filetbl[lcifd].lang == CIF_LG_F77 &&
02043 file1->fid == global_msgfid &&
02044 _Cif_filetbl[lcifd].return_version == 1) {
02045 return ( CIF_MAXRECORD );
02046 }
02047
02048
02049 }
02050 return (CIF_FILE);
02051
02052 }
02053
02054 static int ascii_include (inc)
02055 struct Cif_include *inc;
02056 {
02057
02058 inc->srcid = atol (token());
02059 inc->line = atol (token());
02060 inc->cpos = atol (token());
02061 inc->incid = atol (token());
02062 return (CIF_INCLUDE);
02063
02064 }
02065
02066 static int ascii_label (label)
02067 struct Cif_label *label;
02068 {
02069
02070 register char *c;
02071 register long i;
02072
02073 c = token();
02074 label->nlen = i = strlen (c);
02075 label->name = _Cif_space[lmode] (i+1, lcifd);
02076 if (label->name == NULL)
02077 return (CIF_NOMEM);
02078 (void) strcpy (label->name, c);
02079 label->symid = atol (token());
02080 label->ltype = atoi (token());
02081 return (CIF_LABEL);
02082
02083 }
02084
02085 static int ascii_loop (loop)
02086 struct Cif_loop *loop;
02087 {
02088
02089 loop->lptype = atol (token());
02090 loop->sfid = atol (token());
02091 loop->strline = atol (token());
02092 loop->strcpos = atol (token());
02093 loop->efid = atol (token());
02094 loop->endline = atol (token());
02095 loop->endcpos = atol (token());
02096 if (delim == SEPARATOR)
02097 loop->symid = atol (token());
02098 if (delim == SEPARATOR)
02099 loop->labelid = atol (token());
02100 return (CIF_LOOP);
02101
02102 }
02103
02104
02105 #define NFORTCHARS 8
02106 #define CIF_MCF_TAILGT 0x01
02107 #define CIF_MCF_BDM 0x02
02108 #define CIF_MCF_CIGS 0x04
02109 #define CIF_MCF_EMA 0x08
02110 #define CIF_MCF_READVL 0x10
02111 #define CIF_MCF_VPOP 0x20
02112 #define CIF_MCF_VRECUR 0x40
02113 #define CIF_MCF_AVL 0x80
02114
02115
02116
02117
02118
02119
02120
02121
02122
02123
02124
02125
02126
02127
02128 static int ascii_mach_char (mc)
02129 struct Cif_mach_char *mc;
02130 {
02131 int i;
02132 long valmask;
02133
02134 static int fort_mc[NFORTCHARS] = {
02135 CIF_MCF_TAILGT,
02136 CIF_MCF_BDM,
02137 CIF_MCF_CIGS,
02138 CIF_MCF_EMA,
02139 CIF_MCF_READVL,
02140 CIF_MCF_VPOP,
02141 CIF_MCF_VRECUR,
02142 CIF_MCF_AVL
02143 };
02144 static int gen_mc[NFORTCHARS] = {
02145 CIF_MC_TAILGT,
02146 CIF_MC_BDM,
02147 CIF_MC_CIGS,
02148 CIF_MC_EMA,
02149 CIF_MC_READVL,
02150 CIF_MC_VPOP,
02151 CIF_MC_VRECUR,
02152 CIF_MC_AVL
02153 };
02154
02155
02156
02157
02158
02159
02160 if (_Cif_filetbl[lcifd].return_version == 1) {
02161 struct Cif_mach_char_1 *mc1 = (struct Cif_mach_char_1 *) mc;
02162
02163 for (i = 0; i < 16; i++) mc1->cpuname[i] = '\0';
02164 (void) strcpy (mc1->cpuname, token());
02165 mc1->memspeed = atoi (token());
02166 mc1->memsize = atol (token());
02167 valmask = strtol (token(), (char **)NULL, 16);
02168
02169
02170
02171
02172
02173
02174 if (_Cif_filetbl[lcifd].lang == CIF_LG_F77) {
02175 if (_Cif_filetbl[lcifd].version != 1) {
02176
02177
02178
02179
02180 #ifdef CRAY2
02181
02182
02183
02184
02185 if (mc1->valmask | CIF_MC_TAILGT_1) {
02186 mc1->valmask = CIF_MC_TAILGT;
02187 }
02188 else {
02189 mc1->valmask = 0;
02190 }
02191 #else
02192 mc1->valmask = valmask & CIF_MC_MASK;
02193 #endif
02194
02195 }
02196 else {
02197
02198
02199
02200 mc1->valmask = 0;
02201 for (i = 0; i < NFORTCHARS; i++)
02202 if (valmask & fort_mc[i]) mc1->valmask |= gen_mc[i];
02203 }
02204 }
02205 else {
02206 mc1->valmask = valmask;
02207 }
02208
02209
02210
02211
02212
02213
02214 if (_Cif_filetbl[lcifd].version != 1 &&
02215 delim == SEPARATOR) {
02216
02217
02218
02219 (void) token();
02220 (void) token();
02221 (void) token();
02222 (void) token();
02223 (void) token();
02224 (void) token();
02225 }
02226
02227 }
02228 else {
02229
02230 (void) strcpy (mc->cpuname, token());
02231
02232 mc->memspeed = atoi (token());
02233 mc->memsize = atol (token());
02234 valmask = strtol (token(), (char **)NULL, 16);
02235
02236
02237
02238
02239
02240
02241 if (_Cif_filetbl[lcifd].lang == CIF_LG_F77) {
02242
02243
02244
02245
02246
02247
02248 if (_Cif_filetbl[lcifd].version == 1) {
02249 mc->valmask = 0;
02250 for (i = 0; i < NFORTCHARS; i++)
02251 if (valmask & fort_mc[i]) mc->valmask |= gen_mc[i];
02252 }
02253 else
02254
02255
02256
02257 mc->valmask = valmask;
02258 }
02259 else {
02260 mc->valmask = valmask;
02261 }
02262
02263
02264
02265
02266
02267
02268 if (_Cif_filetbl[lcifd].version != 1 &&
02269 delim == SEPARATOR) {
02270
02271 mc->numbanks = atol (token());
02272 mc->numcpus = atol (token());
02273 mc->instbufsize = atol (token());
02274 mc->clockperiod = atol (token());
02275 mc->numclregs = atol (token());
02276 mc->bankbusytime = atol (token());
02277
02278 if (delim == SEPARATOR)
02279 mc->tbitlen = atoi (token());
02280
02281 }
02282
02283
02284 }
02285
02286 return (CIF_MACH_CHAR);
02287
02288 }
02289
02290 static int ascii_message (msg)
02291 struct Cif_message *msg;
02292 {
02293 register char *c;
02294 register long i;
02295 register int tmp;
02296
02297 if (_Cif_filetbl[lcifd].return_version <= 2) {
02298 struct Cif_message_1 *msg1 = (struct Cif_message_1 *) msg;
02299
02300 msg1->severity = atoi (token());
02301 msg1->msgno = atol (token());
02302 msg1->fid = atol (token());
02303 msg1->uline = atol (token());
02304 msg1->cpos = atoi (token());
02305 msg1->fline = atol (token());
02306 tmp = strlist(&(msg1->args));
02307 if (tmp < 0)
02308 return (CIF_NOMEM);
02309 msg1->nargs = tmp;
02310
02311 }
02312 else {
02313 msg->severity = atoi (token());
02314 msg->msgno = atol (token());
02315 msg->fid = atol (token());
02316 msg->uline = atol (token());
02317 msg->cpos = atoi (token());
02318 msg->fline = atol (token());
02319 tmp = strlist(&(msg->args));
02320 if (tmp < 0)
02321 return (CIF_NOMEM);
02322 msg->nargs = tmp;
02323
02324
02325 if (_Cif_filetbl[lcifd].version >= 3 &&
02326 delim == SEPARATOR) {
02327
02328 c = token();
02329 msg->nlen = i = strlen(c);
02330 msg->name = _Cif_space[lmode] (i+1, lcifd);
02331 if (msg->name == NULL)
02332 return (CIF_NOMEM);
02333 (void) strcpy (msg->name, c);
02334 if (delim == SEPARATOR) {
02335 msg->order = atoi(token());
02336 if (delim == SEPARATOR) {
02337 msg->flags = atoi(token());
02338 if (delim == SEPARATOR) {
02339 msg->pfid = atol(token());
02340 }
02341 }
02342 }
02343 }
02344 else {
02345
02346
02347
02348
02349
02350
02351
02352
02353
02354
02355
02356
02357
02358 msg->pfid = msg->fid;
02359 }
02360
02361 }
02362
02363 return (CIF_MESSAGE);
02364 }
02365
02366 static int ascii_misc_opts (mo)
02367 struct Cif_misc_opts *mo;
02368 {
02369 register int i, j;
02370 register char *c;
02371 register int tmp;
02372
02373
02374
02375
02376
02377
02378 if (_Cif_filetbl[lcifd].return_version == 1) {
02379 struct Cif_misc_opts_1 *mo1 = (struct Cif_misc_opts_1 *) mo;
02380
02381 mo1->malloc = atoi (token());
02382 mo1->intlen = atoi (token());
02383 mo1->msglvl = atoi (token());
02384 mo1->vopt = atoi (token());
02385 mo1->amode = atoi (token ());
02386 mo1->trunc = atoi (token ());
02387 mo1->truncval = atoi (token());
02388 tmp = llist(&(mo1->msgno), (int *) NULL);
02389 if (tmp < 0)
02390 return (CIF_NOMEM);
02391 mo1->nmsgs = tmp;
02392
02393 tmp = strlist (&(mo1->cdirs));
02394 if (tmp < 0)
02395 return (CIF_NOMEM);
02396
02397 mo1->ncdirs = tmp;
02398 c = token();
02399 if ((mo1->onlen = i = strlen (c)) > 0) {
02400 mo1->objname = _Cif_space[lmode] (i+1, lcifd);
02401 if (mo1->objname == NULL)
02402 return (CIF_NOMEM);
02403 (void) strcpy (mo1->objname, c);
02404 }
02405 c = token();
02406 if (c != (char *) NULL && (mo1->cnlen = i = strlen (c)) > 0) {
02407 mo1->calname = _Cif_space[lmode] (i+1, lcifd);
02408 if (mo1->calname == NULL)
02409 return (CIF_NOMEM);
02410 (void) strcpy (mo1->calname, c);
02411 }
02412
02413 c = token();
02414 if (delim == SEPARATOR) {
02415 if (c != (char *) NULL && (mo1->inlen = i = strlen (c)) > 0) {
02416 mo1->inname = _Cif_space[lmode] (i+1, lcifd);
02417 if (mo1->inname == NULL)
02418 return (CIF_NOMEM);
02419 (void) strcpy (mo1->inname, c);
02420 }
02421 }
02422
02423
02424
02425
02426
02427
02428 if (_Cif_filetbl[lcifd].version != 1) {
02429
02430
02431
02432
02433 (void) token();
02434 (void) token();
02435 (void) token();
02436 (void) token();
02437 i = atoi(token());
02438 for (j = 0; j < i; j++)
02439 (void) token();
02440 }
02441
02442
02443 }
02444
02445 else {
02446
02447 mo->malloc = atoi (token());
02448 mo->intlen = atoi (token());
02449 mo->msglvl = atoi (token());
02450 mo->vopt = atoi (token());
02451 mo->amode = atoi (token ());
02452 mo->trunc = atoi (token ());
02453 mo->truncval = atoi (token());
02454 tmp = llist(&(mo->msgno), (int *) NULL);
02455 if (tmp < 0)
02456 return (CIF_NOMEM);
02457 mo->nmsgs = tmp;
02458
02459 tmp = strlist (&(mo->cdirs));
02460 if (tmp < 0)
02461 return (CIF_NOMEM);
02462 mo->ncdirs = tmp;
02463
02464 c = token();
02465 if ((mo->onlen = i = strlen (c)) > 0) {
02466 mo->objname = _Cif_space[lmode] (i+1, lcifd);
02467 if (mo->objname == NULL)
02468 return (CIF_NOMEM);
02469 (void) strcpy (mo->objname, c);
02470 }
02471
02472 c = token();
02473 if ((mo->cnlen = i = strlen (c)) > 0) {
02474 mo->calname = _Cif_space[lmode] (i+1, lcifd);
02475 if (mo->calname == NULL)
02476 return (CIF_NOMEM);
02477 (void) strcpy (mo->calname, c);
02478 }
02479
02480 c = token();
02481 if (delim == SEPARATOR) {
02482 if ((mo->inlen = i = strlen (c)) > 0) {
02483 mo->inname = _Cif_space[lmode] (i+1, lcifd);
02484 if (mo->inname == NULL)
02485 return (CIF_NOMEM);
02486 (void) strcpy (mo->inname, c);
02487 }
02488 }
02489
02490
02491
02492 if (_Cif_filetbl[lcifd].version != 1) {
02493
02494 c = token();
02495 if (delim == SEPARATOR) {
02496 if (c != (char *) NULL && (mo->llen = i = strlen (c)) > 0) {
02497 mo->lname = _Cif_space[lmode] (i+1, lcifd);
02498 if (mo->lname == NULL)
02499 return (CIF_NOMEM);
02500 (void) strcpy (mo->lname, c);
02501 }
02502 }
02503
02504 mo->cifopt = strtol (token(), (char **)NULL, 16);
02505 mo->inputlen = atoi(token());
02506 mo->runtime = strtol (token(), (char **)NULL, 16);
02507 tmp = strlist (&(mo->incdirs));
02508 if (tmp < 0)
02509 return (CIF_NOMEM);
02510 mo->numincs = tmp;
02511 }
02512
02513 }
02514
02515
02516 return (CIF_MISC_OPTS);
02517
02518 }
02519
02520 static int ascii_namelist (nl)
02521 struct Cif_namelist *nl;
02522 {
02523
02524 register long i;
02525 register char *c;
02526
02527 c = token();
02528 nl->nlen = i = strlen (c);
02529 nl->name = _Cif_space[lmode] (i+1, lcifd);
02530 if (nl->name == NULL)
02531 return (CIF_NOMEM);
02532 (void) strcpy (nl->name, c);
02533 nl->symid = atol (token());
02534 if ((nl->nids = atoi (token())) > 0) {
02535 nl->ids = (long *) _Cif_space[lmode] (sizeof(long)*nl->nids, lcifd);
02536 if (nl->ids == NULL)
02537 return (CIF_NOMEM);
02538 for (i = 0; i < (int) nl->nids; i++)
02539 (nl->ids)[i] = atol (token());
02540
02541 }
02542 return (CIF_NAMELIST);
02543
02544 }
02545
02546 static int ascii_nd_msg (nmsg)
02547 struct Cif_nd_msg *nmsg;
02548 {
02549 register int tmp;
02550
02551 nmsg->severity = atoi (token());
02552 nmsg->msgno = atol (token());
02553 nmsg->fid = atol (token());
02554 nmsg->fline = atol (token());
02555 nmsg->cpos = atoi (token());
02556 nmsg->uline = atol (token());
02557 (void) strncpy (nmsg->group, token(), 16);
02558 nmsg->msgfid = atol (token());
02559
02560 tmp = strlist(&(nmsg->args));
02561 if (tmp < 0)
02562 return (CIF_NOMEM);
02563 nmsg->nargs = tmp;
02564 return (CIF_ND_MSG);
02565
02566 }
02567
02568
02569
02570
02571 static int ascii_object (obj)
02572 struct Cif_object *obj;
02573 {
02574
02575 register char *c;
02576 register long i, attr;
02577 struct Cif_dim *dim;
02578
02579
02580
02581
02582
02583
02584 if (_Cif_filetbl[lcifd].return_version == 1) {
02585 struct Cif_object_1 *obj1 = (struct Cif_object_1 *) obj;
02586
02587 c = token();
02588 if ((obj1->nlen = i = strlen (c)) > 0) {
02589 obj1->name = _Cif_space[lmode] (i+1, lcifd);
02590 if (obj1->name == NULL)
02591 return (CIF_NOMEM);
02592 (void) strcpy (obj1->name, c);
02593 }
02594 else
02595 obj1->name = NULL;
02596 obj1->symid = atol (token());
02597 obj1->dtype = atoi (token());
02598 if (obj1->dtype == 100)
02599 obj1->dtype = 0;
02600 else
02601 (obj1->dtype)++;
02602
02603 obj1->symclass = atoi (token());
02604
02605 obj1->storage = atol (token());
02606 if ((i = atol (token())) >= 0) {
02607 obj1->valoffset = 1;
02608 obj1->offset = i;
02609 }
02610
02611
02612
02613 attr = strtol (token(), (char **)NULL, 16);
02614 obj1->aarray = ((attr & CO_ATTR_AUTO) != 0);
02615 obj1->equiv = ((attr & CO_ATTR_EQUIV) != 0);
02616 obj1->data = ((attr & CO_ATTR_DATA) != 0);
02617 obj1->save = ((attr & CO_ATTR_SAVE) != 0);
02618 obj1->imptype = ((attr & CO_ATTR_IMPTYPE) != 0);
02619
02620
02621
02622
02623
02624
02625
02626
02627
02628
02629
02630
02631
02632 if ((attr & CO_ATTR_CHAR) != 0) {
02633 c = token ();
02634 if (*c == '*')
02635 obj1->cltype = 1;
02636 else
02637 obj1->charlen = atol (c);
02638 }
02639 else
02640 obj1->charlen = 0;
02641 if ((attr & CO_ATTR_DIM) == 0)
02642 obj1->ndims = 0;
02643 else {
02644 obj1->ndims = atoi (token());
02645 dim = obj1->dim = (struct Cif_dim *)_Cif_space[lmode]
02646 (sizeof(struct Cif_dim)*obj1->ndims, lcifd);
02647 if (dim == NULL)
02648 return (CIF_NOMEM);
02649 for (i=0; i < (int) obj1->ndims; i++) {
02650 c = token ();
02651 if (*c == 'E')
02652 dim->ltype = CIF_DM_EXPR;
02653 else if (*c == '*')
02654 dim->ltype = CIF_DM_ASSUMED;
02655 else {
02656 dim->ltype = CIF_DM_CONSTANT;
02657 dim->lower = atol (c);
02658 }
02659 c = token ();
02660 if (*c == 'E')
02661 dim->utype = CIF_DM_EXPR;
02662 else if (*c == '*')
02663 dim->utype = CIF_DM_ASSUMED;
02664 else {
02665 dim->utype = CIF_DM_CONSTANT;
02666 dim->upper = atol (c);
02667 }
02668 dim++;
02669 }
02670 }
02671
02672
02673
02674
02675
02676
02677
02678 if (_Cif_filetbl[lcifd].version != 1) {
02679
02680
02681
02682
02683 (void) token();
02684 (void) token();
02685 (void) token();
02686 }
02687
02688 }
02689 else {
02690 c = token();
02691 if ((obj->nlen = i = strlen (c)) > 0) {
02692 obj->name = _Cif_space[lmode] (i+1, lcifd);
02693 if (obj->name == NULL)
02694 return (CIF_NOMEM);
02695 (void) strcpy (obj->name, c);
02696 }
02697 else
02698 obj->name = NULL;
02699 obj->symid = atol (token());
02700 obj->dtype = atoi (token());
02701 if (obj->dtype == 100)
02702 obj->dtype = 0;
02703 else
02704 (obj->dtype)++;
02705
02706 obj->symclass = atoi (token());
02707 obj->storage = atol (token());
02708 if ((i = atol (token())) >= 0) {
02709 obj->valoffset = 1;
02710 obj->offset = i;
02711 }
02712
02713
02714
02715 attr = strtol (token(), (char **)NULL, 16);
02716 obj->aarray = ((attr & CO_ATTR_AUTO) != 0);
02717 obj->equiv = ((attr & CO_ATTR_EQUIV) != 0);
02718 obj->data = ((attr & CO_ATTR_DATA) != 0);
02719 obj->save = ((attr & CO_ATTR_SAVE) != 0);
02720 obj->imptype = ((attr & CO_ATTR_IMPTYPE) != 0);
02721
02722
02723
02724
02725
02726
02727 obj->peresident = ((attr & CO_ATTR_PE_RESIDENT) != 0);
02728 obj->pointee = ((attr & CO_ATTR_POINTEE) != 0);
02729 obj->arraydec = ((attr & CO_ATTR_ARRAY_DEC) != 0);
02730 obj->geomdec = ((attr & CO_ATTR_GEOM_DEC) != 0);
02731
02732 if ((attr & CO_ATTR_CHAR) != 0) {
02733 c = token ();
02734 if (*c == '*')
02735 obj->cltype = 1;
02736 else
02737 obj->charlen = atol (c);
02738 }
02739 else
02740 obj->charlen = 0;
02741 if ((attr & CO_ATTR_DIM) == 0)
02742 obj->ndims = 0;
02743 else {
02744 obj->ndims = atoi (token());
02745 dim = obj->dim = (struct Cif_dim *)_Cif_space[lmode]
02746 (sizeof(struct Cif_dim)*obj->ndims, lcifd);
02747
02748 if (dim == NULL)
02749 return (CIF_NOMEM);
02750 for (i=0; i < (int) obj->ndims; i++) {
02751 c = token ();
02752 if (*c == 'E')
02753 dim->ltype = CIF_DM_EXPR;
02754 else if (*c == '*')
02755 dim->ltype = CIF_DM_ASSUMED;
02756 else {
02757 dim->ltype = CIF_DM_CONSTANT;
02758 dim->lower = atol (c);
02759 }
02760 c = token ();
02761 if (*c == 'E')
02762 dim->utype = CIF_DM_EXPR;
02763 else if (*c == '*')
02764 dim->utype = CIF_DM_ASSUMED;
02765 else {
02766 dim->utype = CIF_DM_CONSTANT;
02767 dim->upper = atol (c);
02768 }
02769 dim++;
02770 }
02771 }
02772
02773 if (_Cif_filetbl[lcifd].version != 1) {
02774
02775
02776
02777
02778
02779
02780
02781
02782 c = token();
02783 if (c != (char *) NULL &&
02784 *c != (char) NULL)
02785 obj->dist = atoi(c);
02786
02787 if (obj->pointee || obj->dist == 3) {
02788 c = token();
02789 if (c != (char *) NULL &&
02790 *c != (char) NULL)
02791 if (obj->pointee)
02792 obj->pointer = atol(c);
02793 else
02794 obj->geomid = atol(c);
02795 }
02796
02797
02798 }
02799 }
02800
02801 return (CIF_OBJECT);
02802
02803 }
02804
02805 static int ascii_opt_opts (oo)
02806 struct Cif_opt_opts *oo;
02807 {
02808
02809
02810
02811
02812
02813 if (_Cif_filetbl[lcifd].return_version == 1) {
02814 struct Cif_opt_opts_1 *oo1 = (struct Cif_opt_opts_1 *) oo;
02815
02816 oo1->values = strtol (token(), (char **)NULL, 16);
02817
02818
02819
02820 if (_Cif_filetbl[lcifd].version != 1) {
02821
02822
02823
02824 if (oo1->values == CIF_OOF_INLINE)
02825 (void) token();
02826 }
02827
02828
02829 }
02830 else {
02831
02832 oo->values = strtol (token(), (char **)NULL, 16);
02833
02834 if (_Cif_filetbl[lcifd].version != 1) {
02835
02836
02837 if (oo->values == CIF_OOF_INLINE)
02838 oo->inlevel = atoi(token());
02839 }
02840 }
02841
02842 return (CIF_OPT_OPTS);
02843
02844 }
02845
02846 static int ascii_srcfile (src)
02847 struct Cif_srcfile *src;
02848 {
02849
02850 src->fid = atol (token());
02851 if (delim == SEPARATOR)
02852 src->form = atoi (token());
02853 else
02854 src->form = 0;
02855 return (CIF_SRCFILE);
02856
02857 }
02858
02859 static int ascii_transform (tran)
02860 struct Cif_transform *tran;
02861 {
02862 tran->type = atoi(token());
02863 tran->fid = atol(token());
02864 tran->line = atol(token());
02865
02866 return (CIF_TRANSFORM);
02867
02868 }
02869
02870 static int ascii_stmt_type (stmt)
02871 struct Cif_stmt_type *stmt;
02872 {
02873
02874 stmt->type = atol (token());
02875 stmt->fid = atol (token());
02876 stmt->line = atol (token());
02877 stmt->cpos = atol (token());
02878
02879 if ( *ntoken != 0 )
02880 stmt->efid = atol (token());
02881 if ( *ntoken != 0 )
02882 stmt->eline = atol (token());
02883 if ( *ntoken != 0 )
02884 stmt->ecpos = atol (token());
02885
02886
02887
02888
02889
02890 if (stmt->type == CIF_TP_CDIR &&
02891 _Cif_filetbl[lcifd].return_version == 1) {
02892 return ( CIF_MAXRECORD );
02893
02894 }
02895
02896 return (CIF_STMT_TYPE);
02897
02898 }
02899
02900 static int ascii_summary (sum)
02901 struct Cif_summary *sum;
02902 {
02903
02904 (void) strcpy (sum->level, token());
02905 (void) strcpy (sum->gdate, token());
02906 (void) strcpy (sum->gtime, token());
02907 (void) strcpy (sum->ctime, token());
02908 sum->fldlen = atol (token());
02909 sum->nlines = atol (token());
02910 sum->csize = atol (token());
02911 sum->dsize = atol (token());
02912 return (CIF_SUMMARY);
02913
02914 }
02915
02916
02917 static int ascii_cdir (cdir)
02918 struct Cif_cdir *cdir;
02919 {
02920 register long i;
02921
02922 cdir->type = atoi (token());
02923 cdir->fid = atol (token());
02924 cdir->line = atol (token());
02925 cdir->cpos = atol (token());
02926 cdir->nids = atoi (token());
02927 if (cdir->nids > 0) {
02928 cdir->ids = (long *)_Cif_space[lmode] (sizeof(long)*(cdir->nids), lcifd);
02929 for (i = 0; i < (int) cdir->nids; i++) {
02930 cdir->ids[i] = atol (token());
02931 }
02932 }
02933
02934 return(CIF_CDIR);
02935 }
02936
02937
02938 static int ascii_cdir_doshared (dos)
02939 struct Cif_cdir_doshared *dos;
02940 {
02941 register long i;
02942 char *c;
02943
02944 dos->type = atoi (token());
02945 c = token();
02946 dos->random = (*c == '1' ? 1 : 0);
02947 dos->fid = atol (token());
02948 dos->line = atol (token());
02949 dos->cpos = atol (token());
02950 c = token();
02951 if (*c == 'E') {
02952 dos->mexpr = 1;
02953 dos->m = atol(c);
02954 }
02955 else {
02956 dos->mexpr = 0;
02957 }
02958 dos->mfid = atol (token());
02959 dos->mline = atol (token());
02960 dos->mcpos = atol (token());
02961 dos->nids = atoi (token());
02962 if (dos->nids > 0) {
02963 dos->ids = (long *)_Cif_space[lmode] (sizeof(long)*(dos->nids), lcifd);
02964 for (i = 0; i < (int) dos->nids; i++) {
02965 dos->ids[i] = atol (token());
02966 }
02967 }
02968
02969 return(CIF_CDIR_DOSHARED);
02970 }
02971
02972 static int ascii_geometry (geom)
02973 struct Cif_geometry *geom;
02974 {
02975 register long i;
02976 char *c;
02977 struct Cif_geometry_dim *dim;
02978
02979 c = token();
02980 if (c != (char *) NULL) {
02981 geom->nlen = i = strlen (c);
02982 geom->name = _Cif_space[lmode] (i+1, lcifd);
02983 if (geom->name == NULL)
02984 return (CIF_NOMEM);
02985 (void) strcpy (geom->name, c);
02986 }
02987 else
02988 geom->nlen = 0;
02989
02990 geom->geomid = atol (token());
02991 geom->ndims = atoi (token());
02992 dim = geom->dim = (struct Cif_geometry_dim *)_Cif_space[lmode]
02993 (sizeof(struct Cif_geometry_dim)*geom->ndims, lcifd);
02994 if (dim == NULL)
02995 return (CIF_NOMEM);
02996 for (i=0; i < (int) geom->ndims; i++) {
02997 dim->dist = strtol (token(), (char **)NULL, 16);
02998 c = token();
02999 if (*c == 'E') {
03000 dim->wtype = 1;
03001 dim->weight = 0;
03002 }
03003 else {
03004 dim->wtype = 0;
03005 dim->weight = atol (c);
03006 }
03007 dim->wfid = atol (token());
03008 dim->wline = atol (token());
03009 dim->wcpos = atol (token());
03010 c = token();
03011 if (*c == 'E') {
03012 dim->btype = 1;
03013 dim->bsize = 0;
03014 }
03015 else {
03016 dim->btype = 0;
03017 dim->bsize = atol (c);
03018 }
03019 dim->bfid = atol (token());
03020 dim->bline = atol (token());
03021 dim->bcpos = atol (token());
03022
03023 dim++;
03024 }
03025
03026 return(CIF_GEOMETRY);
03027 }
03028
03029 static int ascii_continuation (co)
03030 struct Cif_continuation *co;
03031 {
03032 char *c;
03033
03034 c = token();
03035 co->type = (*c == '0' ? 0 : 1);
03036 co->fid = atol (token());
03037 co->line = atol (token());
03038 co->cpos = atol (token());
03039
03040 return(CIF_CONTINUATION);
03041 }
03042
03043
03044 #ifndef CRAY2
03045 static int ascii_f90_callsite (cs)
03046 struct Cif_f90_callsite *cs;
03047 {
03048 register int i, j;
03049 register int nargs;
03050 register char *c;
03051
03052 cs->entryid = atol (token());
03053 cs->scopeid = atol (token());
03054 cs->fid = atol (token());
03055 cs->line = atol (token());
03056 cs->cpos = atol (token());
03057 cs->procid = atol (token());
03058 nargs = atoi (token());
03059 if (nargs >= 0)
03060 cs->nargs = nargs;
03061 else
03062 cs->nargs = 0;
03063 if (nargs > 0) {
03064
03065 cs->argids = (long *)_Cif_space[lmode] (sizeof(long)*nargs, lcifd);
03066 if (cs->argids == NULL)
03067 return (CIF_NOMEM);
03068
03069 cs->nmembs = (int *)_Cif_space[lmode] (sizeof(long)*nargs, lcifd);
03070 if (cs->nmembs == NULL)
03071 return (CIF_NOMEM);
03072
03073 cs->membs = (long **)_Cif_space[lmode] (sizeof(long *)*nargs, lcifd);
03074 if (cs->membs == NULL)
03075 return (CIF_NOMEM);
03076
03077 for (i = 0; i < nargs; i++) {
03078 c = token();
03079
03080
03081
03082
03083
03084 if (*c == '%') {
03085 cs->nmembs[i] = atoi (token()) - 1;
03086 cs->argids[i] = atol (token());
03087
03088 cs->membs[i] =
03089 (long *)_Cif_space[lmode] (sizeof(long)*cs->nmembs[i], lcifd);
03090 for (j = 0; j < cs->nmembs[i]; j++) {
03091 cs->membs[i][j] = atol( token());
03092 }
03093
03094 (void) token();
03095 }
03096 else {
03097 cs->argids[i] = atol (c);
03098 cs->nmembs[i] = 0;
03099 cs->membs[i] = 0;
03100 }
03101 }
03102
03103 }
03104
03105
03106
03107
03108
03109
03110 if (delim == SEPARATOR) {
03111
03112 cs->rank = 1;
03113 cs->ranks = (int *)_Cif_space[lmode] (sizeof(int)*nargs, lcifd);
03114 if (cs->ranks == NULL)
03115 return (CIF_NOMEM);
03116
03117 for (i = 0; i < nargs; i++) {
03118 cs->ranks[i] = atoi(token());
03119 }
03120 }
03121
03122 return(CIF_F90_CALLSITE);
03123 }
03124
03125
03126 static int ascii_f90_comblk (cb)
03127 struct Cif_f90_comblk *cb;
03128 {
03129 register char *c;
03130 register long i;
03131
03132 c = token();
03133 cb->nlen = i = strlen (c);
03134 cb->name = _Cif_space[lmode] (i+1, lcifd);
03135 if (cb->name == NULL)
03136 return (CIF_NOMEM);
03137 (void) strcpy (cb->name, c);
03138 cb->symid = atol (token());
03139 cb->scopeid = atol (token());
03140 cb->cbtype = atoi (token());
03141 cb->moduleid = atol (token());
03142 cb->length = atol (token());
03143 c = token();
03144 if (c != (char *) NULL)
03145 cb->dist = atoi (c);
03146
03147 return(CIF_F90_COMBLK);
03148 }
03149
03150
03151 static int ascii_f90_const (con)
03152 struct Cif_f90_const *con;
03153 {
03154 register int i;
03155 register char *c;
03156
03157 con->symid = atol (token());
03158 con->scopeid = atol (token());
03159 c = token();
03160 con->aggregate = (*c == '0' ? 0 : 1);
03161
03162
03163
03164 if (con->aggregate == 0) {
03165 con->vlen = i = strlen (c = token());
03166 con->value = _Cif_space[lmode] (i+1, lcifd);
03167 if (con->value == NULL)
03168 return (CIF_NOMEM);
03169 (void) strcpy (con->value, c);
03170 }
03171 else
03172 c = token();
03173
03174 con->fid = atol (token());
03175 con->strline = atol (token());
03176 con->strpos = atol (token());
03177 con->endline = atol (token());
03178 con->endpos = atol (token());
03179
03180 return(CIF_F90_CONST);
03181 }
03182
03183
03184 static int ascii_f90_entry (entry)
03185 struct Cif_f90_entry *entry;
03186 {
03187
03188 register char *c;
03189 register long i, len;
03190
03191 c = token();
03192 entry->nlen = len = strlen (c);
03193 entry->name = _Cif_space[lmode] (len+1, lcifd);
03194 if (entry->name == NULL)
03195 return (CIF_NOMEM);
03196 (void) strcpy (entry->name, c);
03197 entry->symid = atol (token());
03198 entry->scopeid = atol (token());
03199 entry->etype = atoi (token());
03200 entry->ptype = atoi (token());
03201
03202
03203
03204 i = strtol (token(), (char **)NULL, 16);
03205 entry->defined = ((i & F90_EN_ATTR_DEFINED) != 0);
03206 entry->intblock = ((i & F90_EN_ATTR_INT_BLOCK) != 0);
03207 entry->referenced = ((i & F90_EN_ATTR_REFERENCED) != 0);
03208 entry->optional = ((i & F90_EN_ATTR_OPTIONAL) != 0);
03209 entry->priv = ((i & F90_EN_ATTR_PRIVATE) != 0);
03210 entry->recur = ((i & F90_EN_ATTR_RECUR) != 0);
03211 entry->useassoc = ((i & F90_EN_ATTR_USE) != 0);
03212
03213 entry->stmtfunc = (entry->etype == CIF_F90_ET_STMT);
03214
03215 entry->resultid = atol (token());
03216
03217 entry->moduleid = atol (token());
03218
03219
03220
03221 if ( (len = atoi (token())) >= 0) {
03222 entry->valargs = 1;
03223 if (len > 0) {
03224 entry->nargs = len;
03225 entry->argids = (long *)_Cif_space[lmode] (sizeof(long)*len, lcifd);
03226 if (entry->argids == NULL)
03227 return (CIF_NOMEM);
03228 for (i = 0; i < len; i++)
03229 (entry->argids)[i] = atol (token());
03230 }
03231 }
03232 else {
03233 entry->valargs = 0;
03234 entry->nargs = 0;
03235 }
03236
03237
03238 return(CIF_F90_ENTRY);
03239 }
03240
03241
03242 static int ascii_f90_loop (loop)
03243 struct Cif_f90_loop *loop;
03244 {
03245 int statementID;
03246
03247 loop->scopeid = atol (token());
03248 loop->lptype = atol (token());
03249 loop->sfid = atol (token());
03250 loop->strline = atol (token());
03251 loop->strcpos = atol (token());
03252 loop->efid = atol (token());
03253 loop->endline = atol (token());
03254 loop->endcpos = atol (token());
03255 if (delim == SEPARATOR)
03256 loop->symid = atol (token());
03257 if (delim == SEPARATOR)
03258 loop->labelid = atol (token());
03259 if (delim == SEPARATOR)
03260 loop->nameid = atol (token());
03261
03262 if (delim == SEPARATOR) {
03263 statementID = atol (token());
03264
03265
03266
03267 setStmtid(loop, statementID);
03268 }
03269
03270 return(CIF_F90_LOOP);
03271 }
03272
03273
03274 static int ascii_f90_derived_type (dt)
03275 struct Cif_f90_derived_type *dt;
03276 {
03277 register char *c;
03278 register long i, len;
03279
03280 if (_Cif_filetbl[lcifd].return_version <= 2) {
03281 struct Cif_f90_derived_type_2 *dt2 = (struct Cif_f90_derived_type_2 *) dt;
03282
03283 c = token();
03284 dt2->nlen = len = strlen (c);
03285 dt2->name = _Cif_space[lmode] (len+1, lcifd);
03286 if (dt2->name == NULL)
03287 return (CIF_NOMEM);
03288 (void) strcpy (dt2->name, c);
03289 dt2->symid = atol (token());
03290 dt2->scopeid = atol (token());
03291 dt2->dervtype = atol (token());
03292
03293 dt2->flag = strtol (token(), (char **)NULL, 16);
03294
03295 dt2->sequence = ((dt2->flag & CIF_DRT_SEQUENCE) != 0);
03296 dt2->defprivate = ((dt2->flag & CIF_DRT_PRIVATE) != 0);
03297 dt2->comprivate = ((dt2->flag & CIF_DRT_COMP_PRIVATE) != 0);
03298
03299
03300
03301 if ( (len = atoi (token())) > 0) {
03302 dt2->nmembs = len;
03303 dt2->memids = (long *)_Cif_space[lmode] (sizeof(long)*len, lcifd);
03304 if (dt2->memids == NULL)
03305 return (CIF_NOMEM);
03306 for (i = 0; i < len; i++)
03307 (dt2->memids)[i] = atol (token());
03308 }
03309 }
03310 else {
03311 c = token();
03312 dt->nlen = len = strlen (c);
03313 dt->name = _Cif_space[lmode] (len+1, lcifd);
03314 if (dt->name == NULL)
03315 return (CIF_NOMEM);
03316 (void) strcpy (dt->name, c);
03317 dt->symid = atol (token());
03318 dt->scopeid = atol (token());
03319 dt->dervtype = atol (token());
03320
03321 dt->flag = strtol (token(), (char **)NULL, 16);
03322
03323 dt->sequence = ((dt->flag & CIF_DRT_SEQUENCE) != 0);
03324 dt->defprivate = ((dt->flag & CIF_DRT_PRIVATE) != 0);
03325 dt->comprivate = ((dt->flag & CIF_DRT_COMP_PRIVATE) != 0);
03326
03327
03328
03329 if ( (len = atoi (token())) > 0) {
03330 dt->nmembs = len;
03331 dt->memids = (long *)_Cif_space[lmode] (sizeof(long)*len, lcifd);
03332 if (dt->memids == NULL)
03333 return (CIF_NOMEM);
03334 for (i = 0; i < len; i++)
03335 (dt->memids)[i] = atol (token());
03336 }
03337
03338
03339 if (_Cif_filetbl[lcifd].version >= 3 &&
03340 delim == SEPARATOR) {
03341 dt->moduleid = atol (token());
03342 }
03343 }
03344
03345 return (CIF_F90_DERIVED_TYPE);
03346 }
03347
03348
03349
03350 static int ascii_f90_label (label)
03351 struct Cif_f90_label *label;
03352 {
03353 register char *c;
03354 register long i;
03355
03356 c = token();
03357 label->nlen = i = strlen (c);
03358 label->name = _Cif_space[lmode] (i+1, lcifd);
03359 if (label->name == NULL)
03360 return (CIF_NOMEM);
03361 (void) strcpy (label->name, c);
03362 label->symid = atol (token());
03363 label->scopeid = atol (token());
03364 label->ltype = atoi (token());
03365
03366 return(CIF_F90_LABEL);
03367 }
03368
03369
03370 static int ascii_f90_namelist (nl)
03371 struct Cif_f90_namelist *nl;
03372 {
03373 register long i;
03374 register char *c;
03375
03376 c = token();
03377 nl->nlen = i = strlen (c);
03378 nl->name = _Cif_space[lmode] (i+1, lcifd);
03379 if (nl->name == NULL)
03380 return (CIF_NOMEM);
03381 (void) strcpy (nl->name, c);
03382 nl->symid = atol (token());
03383 nl->scopeid = atol (token());
03384 nl->moduleid = atol (token());
03385 if ((nl->nids = atoi (token())) > 0) {
03386 nl->ids = (long *) _Cif_space[lmode] (sizeof(long)*nl->nids, lcifd);
03387 if (nl->ids == NULL)
03388 return (CIF_NOMEM);
03389 for (i = 0; i < (int) nl->nids; i++)
03390 (nl->ids)[i] = atol (token());
03391
03392 }
03393
03394 return(CIF_F90_NAMELIST);
03395 }
03396
03397
03398 static int ascii_f90_object (obj)
03399 struct Cif_f90_object *obj;
03400 {
03401 register char *c;
03402 register long i, attr, storeagid;
03403 struct Cif_dim *dim;
03404
03405 c = token();
03406 if ((obj->nlen = i = strlen (c)) > 0) {
03407 obj->name = _Cif_space[lmode] (i+1, lcifd);
03408 if (obj->name == NULL)
03409 return (CIF_NOMEM);
03410 (void) strcpy (obj->name, c);
03411 }
03412 else
03413 obj->name = NULL;
03414 obj->symid = atol (token());
03415 obj->scopeid = atol (token());
03416
03417
03418
03419
03420
03421
03422 obj->dtype = atoi (token());
03423 if (_Cif_filetbl[lcifd].version < 3) {
03424 if (obj->dtype < CIF_F90_DT_MAX)
03425 obj->dtype = _Cif_f90_to_f77_dtypes[obj->dtype];
03426
03427 }
03428
03429 obj->symclass = atoi (token());
03430 obj->storage = atol (token());
03431
03432 c = token();
03433 if (c != (char *) NULL &&
03434 *c != (char) NULL) {
03435 storeagid = atol(c);
03436 if (storeagid < 0)
03437 obj->storageid = 0;
03438 else
03439 obj->storageid = storeagid;
03440 }
03441
03442 c = token();
03443 if (*c != '\0' &&
03444 (i = atol (c)) >= 0) {
03445 obj->valoffset = 1;
03446 obj->offset = i;
03447 }
03448
03449
03450
03451 attr = strtol (token(), (char **)NULL, 16);
03452 obj->imptype = ((attr & F90_CO_ATTR_IMPTYPE) != 0);
03453 obj->pointee = ((attr & F90_CO_ATTR_POINTEE) != 0);
03454 obj->deftype = ((attr & F90_CO_ATTR_DEF_TYPE) != 0);
03455 obj->startype = ((attr & F90_CO_ATTR_STAR_TYPE) != 0);
03456 obj->kindtype = ((attr & F90_CO_ATTR_KIND_TYPE) != 0);
03457 obj->save = ((attr & F90_CO_ATTR_SAVE) != 0);
03458 obj->data = ((attr & F90_CO_ATTR_DATA) != 0);
03459 obj->equiv = ((attr & F90_CO_ATTR_EQUIV) != 0);
03460 obj->arraydec = ((attr & F90_CO_ATTR_ARRAY_DEC) != 0);
03461 obj->geomdec = ((attr & F90_CO_ATTR_GEOM_DEC) != 0);
03462 obj->peresident = ((attr & F90_CO_ATTR_PE_RESIDENT) != 0);
03463 obj->allocatable = ((attr & F90_CO_ATTR_ALLOCATABLE) != 0);
03464 obj->intentin = ((attr & F90_CO_ATTR_INTENTIN) != 0);
03465 obj->intentout = ((attr & F90_CO_ATTR_INTENTOUT) != 0);
03466 obj->intentinout = ((attr & F90_CO_ATTR_INTENTINOUT) != 0);
03467 obj->optional = ((attr & F90_CO_ATTR_OPTIONAL) != 0);
03468 obj->pointer = ((attr & F90_CO_ATTR_POINTER) != 0);
03469 obj->priv = ((attr & F90_CO_ATTR_PRIVATE) != 0);
03470 obj->target = ((attr & F90_CO_ATTR_TARGET) != 0);
03471 obj->localname = ((attr & F90_CO_ATTR_LOCAL_NAME) != 0);
03472
03473
03474
03475 if (obj->symclass == CIF_F90_SC_STRUCT)
03476 obj->dervid = atol (token());
03477 else
03478 c = token();
03479
03480 c = token ();
03481 if (*c == 'E')
03482 obj->chartype = CIF_DM_EXPR;
03483 else if (*c == '*')
03484 obj->chartype = CIF_DM_ASSUMED;
03485 else {
03486 obj->chartype = CIF_DM_CONSTANT;
03487 obj->charlen = atol (c);
03488 }
03489
03490 obj->ndims = atoi (token());
03491
03492 if (obj->ndims == 0) {
03493 c = token();
03494 }
03495 else {
03496 obj->atype = atoi(token());
03497 if (obj->atype != CIF_AT_DEFERRED) {
03498
03499
03500
03501 dim = obj->dim = (struct Cif_dim *)_Cif_space[lmode]
03502 (sizeof(struct Cif_dim)*obj->ndims, lcifd);
03503 if (dim == NULL)
03504 return (CIF_NOMEM);
03505 for (i=0; i < (int) obj->ndims; i++) {
03506 c = token ();
03507 if (*c == 'E') {
03508 dim->ltype = CIF_DM_EXPR;
03509 dim->lower = 0;
03510 } else if (*c == '*') {
03511 dim->ltype = CIF_DM_ASSUMED;
03512 dim->lower = 0;
03513 } else {
03514 dim->ltype = CIF_DM_CONSTANT;
03515 dim->lower = atol (c);
03516 }
03517 if (obj->atype == CIF_AT_ASSUMED) {
03518 dim->utype = CIF_DM_ASSUMED;
03519 dim->upper = 0;
03520 }
03521 else {
03522 c = token ();
03523 if (*c == 'E') {
03524 dim->utype = CIF_DM_EXPR;
03525 dim->upper = 0;
03526 } else if (*c == '*') {
03527 dim->utype = CIF_DM_ASSUMED;
03528 dim->upper = 0;
03529 } else {
03530 dim->utype = CIF_DM_CONSTANT;
03531 dim->upper = atol (c);
03532 }
03533 }
03534 dim++;
03535 }
03536 }
03537 }
03538
03539
03540 c = token();
03541 if (c != (char *) NULL &&
03542 *c != (char) NULL) {
03543 obj->dist = atoi (c);
03544 }
03545
03546
03547 c = token();
03548 if (c != (char *) NULL &&
03549 *c != (char) NULL) {
03550 obj->geomid = atol (c);
03551 }
03552
03553
03554
03555 c = token();
03556 if (c != (char *) NULL &&
03557 *c != (char) NULL) {
03558 obj->pointerid = atol (c);
03559 }
03560
03561 return(CIF_F90_OBJECT);
03562 }
03563
03564
03565 static int ascii_f90_misc_opts (mo)
03566 struct Cif_f90_misc_opts *mo;
03567 {
03568 register int i;
03569 register char *c;
03570 register int tmp;
03571
03572 mo->intlen = atoi (token());
03573 mo->msglvl = atoi (token());
03574 mo->vopt = atoi (token());
03575 mo->trunc = atoi (token ());
03576 mo->truncval = atoi (token());
03577 tmp = llist(&(mo->msgno), (int *) NULL);
03578 if (tmp < 0)
03579 return (CIF_NOMEM);
03580 mo->nmsgs = tmp;
03581
03582 tmp = strlist (&(mo->cdirs));
03583 if (tmp < 0)
03584 return (CIF_NOMEM);
03585 mo->ncdirs = tmp;
03586
03587 c = token();
03588 if ((mo->onlen = i = strlen (c)) > 0) {
03589 mo->objname = _Cif_space[lmode] (i+1, lcifd);
03590 if (mo->objname == NULL)
03591 return (CIF_NOMEM);
03592 (void) strcpy (mo->objname, c);
03593 }
03594 c = token();
03595 if ((mo->cnlen = i = strlen (c)) > 0) {
03596 mo->calname = _Cif_space[lmode] (i+1, lcifd);
03597 if (mo->calname == NULL)
03598 return (CIF_NOMEM);
03599 (void) strcpy (mo->calname, c);
03600 }
03601
03602 c = token();
03603 if ((mo->inlen = i = strlen (c)) > 0) {
03604 mo->inname = _Cif_space[lmode] (i+1, lcifd);
03605 if (mo->inname == NULL)
03606 return (CIF_NOMEM);
03607 (void) strcpy (mo->inname, c);
03608 }
03609
03610 c = token();
03611 if ((mo->ciflen = i = strlen (c)) > 0) {
03612 mo->cifname = _Cif_space[lmode] (i+1, lcifd);
03613 if (mo->cifname == NULL)
03614 return (CIF_NOMEM);
03615 (void) strcpy (mo->cifname, c);
03616 }
03617
03618 mo->cifopts = strtol (token(), (char **)NULL, 16);
03619 mo->swidth = atoi (token ());
03620
03621 tmp = strlist (&(mo->Pdirs));
03622 if (tmp < 0)
03623 return (CIF_NOMEM);
03624 mo->nPdirs = tmp;
03625
03626 tmp = strlist (&(mo->pdirs));
03627 if (tmp < 0)
03628 return (CIF_NOMEM);
03629 mo->npdirs = tmp;
03630
03631 c = token();
03632 mo->srcform = (*c == '0' ? 0 : 1);
03633
03634
03635
03636
03637
03638 if (delim == SEPARATOR) {
03639 mo->runtime = strtol (token(), (char **)NULL, 16);
03640 }
03641
03642 return(CIF_F90_MISC_OPTS);
03643 }
03644
03645
03646 static int ascii_f90_opt_opts (opt)
03647 struct Cif_f90_opt_opts *opt;
03648 {
03649 register int i;
03650 struct Cif_f90_level_opts *optlevel;
03651
03652 opt->values = strtol (token(), (char **)NULL, 16);
03653 opt->noptlevels = atoi (token());
03654 optlevel = opt->lopts = (struct Cif_f90_level_opts *)_Cif_space[lmode]
03655 (sizeof(struct Cif_f90_level_opts)*opt->noptlevels, lcifd);
03656 if (optlevel== NULL)
03657 return (CIF_NOMEM);
03658 for (i=0; i < (int) opt->noptlevels; i++) {
03659 optlevel->optinlevel = strtol (token(), (char **)NULL, 16);
03660 optlevel->level = atoi (token ());
03661 optlevel++;
03662 }
03663 opt->newdef = 1;
03664
03665
03666
03667 return(CIF_F90_OPT_OPTS);
03668 }
03669
03670
03671 static int ascii_f90_begin_scope (bs)
03672 struct Cif_f90_begin_scope *bs;
03673 {
03674 bs->scopeid = atol (token ());
03675 bs->symid = atol (token ());
03676 bs->fid = atol (token ());
03677 bs->line = atol (token ());
03678 bs->cpos = atol (token ());
03679 bs->stype = atol (token ());
03680 bs->level = atoi (token ());
03681 bs->parentid = atol (token ());
03682
03683 return(CIF_F90_BEGIN_SCOPE);
03684 }
03685
03686
03687 static int ascii_f90_end_scope (es)
03688 struct Cif_f90_end_scope *es;
03689 {
03690 es->scopeid = atol (token ());
03691 es->fid = atol (token ());
03692 es->line = atol (token ());
03693 es->cpos = atol (token ());
03694 es->error = atoi (token ());
03695
03696 return(CIF_F90_END_SCOPE);
03697 }
03698
03699
03700 static int ascii_f90_scope_info (si)
03701 struct Cif_f90_scope_info *si;
03702 {
03703 register long attr;
03704 register int i;
03705
03706 si->scopeid = atol (token ());
03707
03708 attr = strtol (token(), (char **)NULL, 16);
03709 si->impnone = ((attr & SC_ATTR_IMPNONE) != 0);
03710 si->doesio = ((attr & SC_ATTR_IO) != 0);
03711 si->hascalls = ((attr & SC_ATTR_CALL) != 0);
03712 si->hascmics = ((attr & SC_ATTR_CMIC) != 0);
03713
03714
03715
03716
03717
03718 if (delim == SEPARATOR) {
03719 si->numalts = atoi (token ());
03720 if (si->numalts > 0) {
03721 si->entryids =
03722 (long *) _Cif_space[lmode] (sizeof(long)*si->numalts, lcifd);
03723 if (si->entryids == NULL)
03724 return (CIF_NOMEM);
03725 for (i = 0; i < (int) si->numalts; i++)
03726 (si->entryids)[i] = atol (token());
03727 }
03728 }
03729
03730 return(CIF_F90_SCOPE_INFO);
03731 }
03732
03733
03734 static int ascii_f90_use_module (um)
03735 struct Cif_f90_use_module *um;
03736 {
03737 um->modid = atol (token ());
03738 um->modfid = atol (token ());
03739 um->direct = atoi (token ());
03740
03741 return(CIF_F90_USE_MODULE);
03742 }
03743
03744
03745 static int ascii_f90_rename (rn)
03746 struct Cif_f90_rename *rn;
03747 {
03748 register char *c;
03749 register int i;
03750 register int max_id = 5;
03751
03752 rn->scopeid = atol (token ());
03753 c = token();
03754 if ((rn->nlen = i = strlen (c)) > 0) {
03755 rn->name = _Cif_space[lmode] (i+1, lcifd);
03756 if (rn->name == NULL)
03757 return (CIF_NOMEM);
03758 (void) strcpy (rn->name, c);
03759 }
03760
03761 rn->nameid = atol (token ());
03762 rn->modid = atol (token ());
03763
03764 c = token();
03765 if ((rn->orignlen = i = strlen (c)) > 0) {
03766 rn->origname = _Cif_space[lmode] (i+1, lcifd);
03767 if (rn->origname == NULL)
03768 return (CIF_NOMEM);
03769 (void) strcpy (rn->origname, c);
03770 }
03771
03772 rn->origmodid = atol (token ());
03773
03774
03775
03776
03777
03778
03779 rn->localid = (long *) malloc (sizeof(long) * max_id);
03780 i = 0;
03781 while (1) {
03782 c = token();
03783 if (c != (char *) NULL &&
03784 *c != (char) NULL) {
03785
03786 rn->localid[i] = atol (c);
03787 i++;
03788 if (i == max_id) {
03789 max_id+=5;
03790 rn->localid = (long *) realloc((char *) rn->localid,
03791 sizeof(long) * max_id);
03792 }
03793 }
03794 else {
03795 break;
03796 }
03797 }
03798 rn->nlocalids = i;
03799
03800 return(CIF_F90_RENAME);
03801 }
03802
03803
03804 static int ascii_f90_int_block (ib)
03805 struct Cif_f90_int_block *ib;
03806 {
03807 register char *c;
03808 register int i;
03809
03810 if (_Cif_filetbl[lcifd].return_version <= 2) {
03811 struct Cif_f90_int_block_2 *ib2 = (struct Cif_f90_int_block_2 *) ib;
03812
03813 c = token();
03814 if ((ib2->nlen = i = strlen (c)) > 0) {
03815 ib2->name = _Cif_space[lmode] (i+1, lcifd);
03816 if (ib2->name == NULL)
03817 return (CIF_NOMEM);
03818 (void) strcpy (ib2->name, c);
03819 }
03820
03821 ib2->intid = atol (token ());
03822 ib2->scopeid = atol (token());
03823 ib2->type = atoi (token ());
03824
03825
03826
03827
03828
03829
03830 ib2->priv = (*token() == '1');
03831
03832 if ((ib2->numints = atoi (token())) > 0) {
03833 ib2->procids = (long *) _Cif_space[lmode] (sizeof(long)*ib2->numints, lcifd);
03834 if (ib2->procids == NULL)
03835 return (CIF_NOMEM);
03836 for (i = 0; i < (int) ib2->numints; i++)
03837 (ib2->procids)[i] = atol (token());
03838
03839 }
03840 }
03841 else {
03842
03843 c = token();
03844 if ((ib->nlen = i = strlen (c)) > 0) {
03845 ib->name = _Cif_space[lmode] (i+1, lcifd);
03846 if (ib->name == NULL)
03847 return (CIF_NOMEM);
03848 (void) strcpy (ib->name, c);
03849 }
03850
03851 ib->intid = atol (token ());
03852 ib->scopeid = atol (token());
03853 ib->type = atoi (token ());
03854
03855
03856
03857
03858
03859
03860 ib->priv = (*token() == '1');
03861
03862 if ((ib->numints = atoi (token())) > 0) {
03863 ib->procids = (long *) _Cif_space[lmode] (sizeof(long)*ib->numints, lcifd);
03864 if (ib->procids == NULL)
03865 return (CIF_NOMEM);
03866 for (i = 0; i < (int) ib->numints; i++)
03867 (ib->procids)[i] = atol (token());
03868 }
03869
03870
03871 if (_Cif_filetbl[lcifd].version >= 3 &&
03872 delim == SEPARATOR) {
03873 ib->moduleid = atol (token());
03874 }
03875 }
03876
03877 return(CIF_F90_INT_BLOCK);
03878 }
03879
03880
03881 static int ascii_f90_vectorization (vect)
03882 struct Cif_f90_vectorization *vect;
03883 {
03884 (void) fprintf(stderr, "libcif: vectorization message %p\n", vect);
03885 return(CIF_F90_VECTORIZATION);
03886 }
03887 #endif
03888
03889
03890
03891
03892
03893 static int ascii_unit (unit)
03894 struct Cif_unit *unit;
03895 {
03896 register int i;
03897 register char *c;
03898
03899 c = token();
03900 unit->nlen = i = strlen (c);
03901 unit->name = _Cif_space[lmode] (i+1, lcifd);
03902 if (unit->name == NULL)
03903 return (CIF_NOMEM);
03904 (void) strcpy (unit->name, c);
03905 unit->fid = atol (token());
03906 unit->line = atol (token());
03907 unit->cpos = atol (token());
03908 return (CIF_UNIT);
03909
03910 }
03911
03912 static int ascii_endunit (eu)
03913 struct Cif_endunit *eu;
03914 {
03915 register int i;
03916 register char *c;
03917
03918 c = token();
03919 eu->nlen = i = strlen (c);
03920 eu->name = _Cif_space[lmode] (i+1, lcifd);
03921 if (eu->name == NULL)
03922 return (CIF_NOMEM);
03923 (void) strcpy (eu->name, c);
03924 eu->fid = atol (token());
03925 eu->line = atol (token());
03926 eu->cpos = atol (token());
03927 return (CIF_ENDUNIT);
03928
03929 }
03930
03931 static int ascii_usage (usage)
03932 struct Cif_usage *usage;
03933 {
03934 # define UBINCR 5
03935
03936 register char *c;
03937 long i, nuses, note_pos = -10;
03938
03939
03940
03941 long utype;
03942
03943 static struct Cif_use *ubuff = NULL;
03944 static int ubi;
03945 static int ubsize = 0;
03946
03947
03948
03949
03950
03951
03952
03953 if (_Cif_filetbl[lcifd].return_version == 1) {
03954 struct Cif_usage_1 *usage1 = (struct Cif_usage_1 *) usage;
03955
03956 usage1->symid = atol (token());
03957 ubi = 0;
03958
03959 while (1) {
03960
03961
03962
03963 i = 0;
03964 c = ntoken;
03965 while (*c != '\0')
03966 if (*c++ == SEPARATOR) i++;
03967 nuses = (++i) / 4;
03968
03969
03970
03971 if (ubi + nuses > ubsize) {
03972 if (ubsize == 0) {
03973 ubsize = UBINCR;
03974
03975 ubuff = (struct Cif_use *) malloc (sizeof(struct Cif_use)*UBINCR);
03976 }
03977 else {
03978 ubsize += UBINCR;
03979 ubuff = (struct Cif_use *)realloc (ubuff,
03980 sizeof(struct Cif_use)*ubsize);
03981 }
03982 if (ubuff == NULL)
03983 return (CIF_NOMEM);
03984 }
03985 for (i = 0; i < nuses; i++) {
03986 ubuff[ubi].fid = atol (token());
03987 ubuff[ubi].line = atol (token());
03988 ubuff[ubi].cpos = atol (token());
03989
03990
03991
03992
03993
03994
03995
03996
03997 if (_Cif_filetbl[lcifd].lang == CIF_LG_C ||
03998 _Cif_filetbl[lcifd].lang == CIF_LG_CC) {
03999 ubuff[ubi].utype =
04000 strtol (token(), (char **)NULL, 16);
04001 }
04002 else {
04003 utype = atol (token());
04004 ubuff[ubi].utype = utype % 100;
04005
04006
04007
04008
04009 if (_Cif_filetbl[lcifd].return_version != 1) {
04010 if (_Cif_filetbl[lcifd].return_version != 1) {
04011 if (utype >= 200)
04012 ubuff[ubi].init = 1;
04013 else
04014 if (utype >= 100)
04015 ubuff[ubi].data = 1;
04016 }
04017 }
04018 }
04019 ubi++;
04020 }
04021
04022
04023
04024
04025
04026
04027
04028
04029
04030
04031
04032 note_pos = Cif_Getpos(lcifd);
04033
04034 if (fgets (_Cif_filetbl[lcifd].ip, CIF_BUFSIZE, _Cif_filetbl[lcifd].fd)
04035 == NULL)
04036 {
04037 if (feof(_Cif_filetbl[lcifd].fd))
04038 break;
04039 else
04040 return (CIF_SYSERR);
04041 }
04042 ntoken = _Cif_filetbl[lcifd].ip;
04043 if (atoi (token ()) != CIF_USAGE) {
04044 _Cif_filetbl[lcifd].ifull = YES;
04045 break;
04046 }
04047 else if (atol (token ()) != usage1->symid) {
04048 _Cif_filetbl[lcifd].ifull = YES;
04049 break;
04050 }
04051 }
04052
04053
04054
04055 if (note_pos != -10)
04056 (void) Cif_Setpos(lcifd, note_pos);
04057
04058
04059
04060 if (ubi > 1)
04061 (void) qsort ( (char *)ubuff, ubi, sizeof(struct Cif_use), (int(*)()) compuse);
04062 i = sizeof(struct Cif_use) * ubi;
04063 usage1->use = (struct Cif_use *)_Cif_space[lmode] (i, lcifd);
04064 if (usage1->use == NULL)
04065 return (CIF_NOMEM);
04066 (void) memcpy ((char *)usage1->use, (char *)ubuff, i);
04067 usage1->nuses = ubi;
04068 }
04069
04070 else {
04071
04072 usage->symid = atol (token());
04073 ubi = 0;
04074
04075 while (1) {
04076
04077
04078
04079 i = 0;
04080 c = ntoken;
04081 while (*c != '\0')
04082 if (*c++ == SEPARATOR) i++;
04083 nuses = (++i) / 4;
04084
04085
04086
04087 if (ubi + nuses > ubsize) {
04088 if (ubsize == 0) {
04089 ubsize = UBINCR;
04090 ubuff = (struct Cif_use *) malloc (sizeof(struct Cif_use)*UBINCR);
04091 }
04092 else {
04093 ubsize += UBINCR;
04094 ubuff = (struct Cif_use *)realloc (ubuff,
04095 sizeof(struct Cif_use)*ubsize);
04096 }
04097 if (ubuff == NULL)
04098 return (CIF_NOMEM);
04099 }
04100 for (i = 0; i < nuses; i++) {
04101 (void) memset((char *)&ubuff[ubi], 0, sizeof(struct Cif_use));
04102 ubuff[ubi].fid = atol (token());
04103 ubuff[ubi].line = atol (token());
04104 ubuff[ubi].cpos = atol (token());
04105
04106
04107
04108
04109
04110
04111
04112 if (_Cif_filetbl[lcifd].lang == CIF_LG_C ||
04113 _Cif_filetbl[lcifd].lang == CIF_LG_CC) {
04114 ubuff[ubi].utype =
04115 strtol (token(), (char **)NULL, 16);
04116 }
04117 else {
04118 utype = atol (token());
04119 ubuff[ubi].utype = utype % 100;
04120
04121
04122
04123
04124 if (_Cif_filetbl[lcifd].return_version != 1) {
04125 if (_Cif_filetbl[lcifd].return_version != 1) {
04126 if (utype >= 200)
04127 ubuff[ubi].init = 1;
04128 else
04129 if (utype >= 100)
04130 ubuff[ubi].data = 1;
04131 }
04132 }
04133 }
04134 ubi++;
04135 }
04136
04137
04138
04139
04140
04141
04142
04143
04144
04145
04146
04147 note_pos = Cif_Getpos(lcifd);
04148
04149 if (fgets (_Cif_filetbl[lcifd].ip, CIF_BUFSIZE, _Cif_filetbl[lcifd].fd)
04150 == NULL)
04151 {
04152 if (feof(_Cif_filetbl[lcifd].fd))
04153 break;
04154 else
04155 return (CIF_SYSERR);
04156 }
04157 ntoken = _Cif_filetbl[lcifd].ip;
04158 if (atoi (token ()) != CIF_USAGE) {
04159 _Cif_filetbl[lcifd].ifull = YES;
04160 break;
04161 }
04162 else if (atol (token ()) != usage->symid) {
04163 _Cif_filetbl[lcifd].ifull = YES;
04164 break;
04165 }
04166 }
04167
04168
04169
04170 if (note_pos != -10)
04171 (void) Cif_Setpos(lcifd, note_pos);
04172
04173
04174
04175 if (ubi > 1)
04176 (void) qsort ( (char *)ubuff, ubi, sizeof(struct Cif_use), (int(*)()) compuse);
04177 i = sizeof(struct Cif_use) * ubi;
04178 usage->use = (struct Cif_use *)_Cif_space[lmode] (i, lcifd);
04179 if (usage->use == NULL)
04180 return (CIF_NOMEM);
04181 (void) memcpy ((char *)usage->use, (char *)ubuff, i);
04182 usage->nuses = ubi;
04183
04184 }
04185
04186 return (CIF_USAGE);
04187
04188 }
04189
04190
04191
04192
04193
04194
04195
04196
04197
04198
04199 static int ascii_f90_usage (usage)
04200 struct Cif_usage *usage;
04201 {
04202 long i;
04203 long utype;
04204
04205 static struct Cif_use *ubuff = NULL;
04206
04207 usage->symid = atol (token());
04208
04209 ubuff = (struct Cif_use *) _Cif_space[lmode] (sizeof(struct Cif_use),
04210 lcifd);
04211 ubuff->fid = atol (token());
04212 ubuff->line = atol (token());
04213 ubuff->cpos = atol (token());
04214 utype = atol(token());
04215 ubuff->utype = utype % 100;
04216
04217
04218
04219
04220 ubuff->init = 0;
04221 ubuff->data = 0;
04222 if (_Cif_filetbl[lcifd].return_version != 1) {
04223 if (utype >= 200)
04224 ubuff->init = 1;
04225 else
04226 if (utype >= 100)
04227 ubuff->data = 1;
04228 }
04229
04230
04231
04232
04233
04234
04235
04236
04237 if (delim == SEPARATOR) {
04238 usage->nmembs = atoi (token());
04239 if (usage->nmembs > 0) {
04240 usage->membs = (long *) _Cif_space[lmode] ((sizeof(long) * usage->nmembs),
04241 lcifd);
04242 for (i = 0; i < (int) usage->nmembs; i++) {
04243 usage->membs[i] = atol (token());
04244 }
04245 }
04246 }
04247
04248 usage->use = ubuff;
04249 usage->nuses = 1;
04250
04251 return (CIF_USAGE);
04252
04253 }
04254
04255
04256 #ifndef CRAY2
04257 static int ascii_BE_node (ent)
04258 struct Cif_BE_node *ent;
04259 {
04260 char *cp;
04261 int i, n;
04262
04263 if ( _Cif_filetbl[lcifd].return_version == 2 ) {
04264
04265 struct Cif_BE_node_2 *v2 = (struct Cif_BE_node_2 *) ent;
04266 v2->block = atoi (token());
04267 v2->blocklet = atoi (token());
04268 v2->is_entry = atoi (token());
04269 v2->nsuccs = n = atoi (token());
04270 if ( n < 0 ) {
04271 return( CIF_BADFORM );
04272 } else if ( n == 0 ) {
04273 v2->succs = (int *) NULL;
04274 } else {
04275 v2->succs = (int *)
04276 _Cif_space[ lmode ](n * sizeof( int ), lcifd);
04277 if ( v2->succs == NULL )
04278 return( CIF_NOMEM );
04279 for ( i = 0; i < n; i++ ) {
04280 v2->succs[ i ] = atoi (token());
04281 }
04282 }
04283 v2->nlines = n = atoi (token());
04284 if ( n < 0 ) {
04285 return( CIF_BADFORM );
04286 } else if ( n == 0 ) {
04287 v2->lines = (int *) NULL;
04288 } else {
04289 if ( _Cif_filetbl[lcifd].version >= 3 ) {
04290
04291
04292 for ( i = 0; i < n; i++ ) {
04293 (void) token();
04294 }
04295 }
04296 v2->lines = (int *)
04297 _Cif_space[ lmode ](n * sizeof( int ), lcifd);
04298 if ( v2->lines == NULL )
04299 return( CIF_NOMEM );
04300 for ( i = 0; i < n; i++ ) {
04301 v2->lines[ i ] = atoi (token());
04302 }
04303 }
04304 v2->type = atoi (token());
04305 v2->subtype = atoi (token());
04306 v2->index = atoi (token());
04307 cp = token();
04308 n = strlen (cp);
04309 v2->label = _Cif_space[ lmode ](n+1, lcifd);
04310 if ( v2->label == NULL )
04311 return( CIF_NOMEM );
04312 (void) strcpy( v2->label, cp );
04313 for ( i = 0; i < CIF_IT_MAX; i++ ) {
04314 v2->icnt[ i ] = atoi (token());
04315 }
04316 v2->app_before = atoi (token());
04317 v2->app_after = atoi (token());
04318 v2->clocks = atoi (token());
04319
04320 } else {
04321
04322 ent->block = atoi (token());
04323 ent->blocklet = atoi (token());
04324 ent->is_entry = atoi (token());
04325 ent->nsuccs = n = atoi (token());
04326 if ( n < 0 ) {
04327 return( CIF_BADFORM );
04328 } else if ( n == 0 ) {
04329 ent->succs = (int *) NULL;
04330 } else {
04331 ent->succs = (int *)
04332 _Cif_space[ lmode ](n * sizeof( int ), lcifd);
04333 if ( ent->succs == NULL )
04334 return( CIF_NOMEM );
04335 for ( i = 0; i < n; i++ ) {
04336 ent->succs[ i ] = atoi (token());
04337 }
04338 }
04339 ent->nlines = n = atoi (token());
04340 if ( n < 0 ) {
04341 return( CIF_BADFORM );
04342 } else if ( n == 0 ) {
04343 ent->fid = (int *) NULL;
04344 ent->lines = (int *) NULL;
04345 } else {
04346 ent->fid = (int *)
04347 _Cif_space[ lmode ](n * sizeof( int ), lcifd);
04348 if ( ent->fid == NULL )
04349 return( CIF_NOMEM );
04350 ent->lines = (int *)
04351 _Cif_space[ lmode ](n * sizeof( int ), lcifd);
04352 if ( ent->lines == NULL )
04353 return( CIF_NOMEM );
04354 if ( _Cif_filetbl[lcifd].version >= 3 ) {
04355 for ( i = 0; i < n; i++ ) {
04356 ent->fid[ i ] = atoi (token());
04357 }
04358 for ( i = 0; i < n; i++ ) {
04359 ent->lines[ i ] = atoi (token());
04360 }
04361 } else {
04362 for ( i = 0; i < n; i++ ) {
04363 ent->fid[ i ] = 0;
04364 ent->lines[ i ] = atoi (token());
04365 }
04366 }
04367 }
04368 ent->type = atoi (token());
04369 ent->subtype = atoi (token());
04370 ent->index = atoi (token());
04371 cp = token();
04372 n = strlen (cp);
04373 ent->label = _Cif_space[ lmode ](n+1, lcifd);
04374 if ( ent->label == NULL )
04375 return( CIF_NOMEM );
04376 (void) strcpy( ent->label, cp );
04377 for ( i = 0; i < CIF_IT_MAX; i++ ) {
04378 ent->icnt[ i ] = atoi (token());
04379 }
04380 ent->app_before = atoi (token());
04381 ent->app_after = atoi (token());
04382 ent->clocks = atoi (token());
04383 if ( *ntoken != 0 )
04384 return( CIF_BADFORM );
04385 }
04386 return( CIF_BE_NODE );
04387 }
04388
04389
04390 static int ascii_BE_fid (ent)
04391 struct Cif_BE_fid *ent;
04392 {
04393 char *cp;
04394 int i, n;
04395
04396 ent->block = atoi (token());
04397 ent->blocklet = atoi (token());
04398
04399 ent->nfid = n = atoi (token());
04400 if ( n < 0 ) {
04401 return( CIF_BADFORM );
04402 } else if ( n == 0 ) {
04403 ent->fid = (int *) NULL;
04404 } else {
04405 ent->fid = (int *)
04406 _Cif_space[ lmode ](n * sizeof( int ), lcifd);
04407 if ( ent->fid == NULL )
04408 return( CIF_NOMEM );
04409 for ( i = 0; i < n; i++ ) {
04410 ent->fid[ i ] = atoi (token());
04411 }
04412 }
04413 return( CIF_BE_FID );
04414 }
04415 #endif
04416
04417
04418 static int ascii_cc_type (spos)
04419 struct Cif_cc_type *spos;
04420 {
04421 int i, n;
04422 char *c;
04423
04424 spos->scopeid = atoi(token());
04425 spos->ptype = atol(token());
04426 spos->size = atol(token());
04427 spos->typeId = atol(token());
04428 spos->type = atoi(token());
04429
04430 switch( spos->type ) {
04431 case CIF_CCT_INT:
04432 spos->flags = atoi(token());
04433 spos->prec = atoi(token());
04434 break;
04435 case CIF_CCT_FLOAT:
04436 spos->subtype = atoi(token());
04437 break;
04438 case CIF_CCT_COMPLEX:
04439 spos->subtype = atoi(token());
04440 break;
04441 case CIF_CCT_CLASS:
04442 case CIF_CCT_STRUCT:
04443 case CIF_CCT_UNION:
04444 case CIF_CCT_ENUM:
04445 c = token();
04446 spos->nlen = i = strlen (c);
04447 spos->name = _Cif_space[lmode] (i+1, lcifd);
04448 if (spos->name == NULL)
04449 return (CIF_NOMEM);
04450 (void) strcpy (spos->name, c);
04451 spos->symid = atoi(token());
04452 spos->nmem = i = atoi(token());
04453 i *= sizeof( int );
04454 spos->mem = (int *)_Cif_space[lmode] (i, lcifd);
04455 if (spos->mem == NULL)
04456 return (CIF_NOMEM);
04457 for ( i = 0; i < (int)spos->nmem; i++ )
04458 spos->mem[ i ] = atoi(token());
04459 break;
04460 case CIF_CCT_TYPEDEF:
04461 c = token();
04462 spos->nlen = i = strlen (c);
04463 spos->name = _Cif_space[lmode] (i+1, lcifd);
04464 if (spos->name == NULL)
04465 return (CIF_NOMEM);
04466 (void) strcpy (spos->name, c);
04467 spos->symid = atoi(token());
04468 spos->btype = atoi(token());
04469 break;
04470 case CIF_CCT_QUALIFIED:
04471 spos->btype = atoi(token());
04472 spos->flags = atoi(token());
04473 break;
04474 case CIF_CCT_FUNCTION:
04475 spos->rtype = atoi(token());
04476 spos->flags = atoi(token());
04477 spos->nmem = i = atoi(token());
04478 i *= sizeof( int );
04479 spos->mem = (int *)_Cif_space[lmode] (i, lcifd);
04480 if (spos->mem == NULL)
04481 return (CIF_NOMEM);
04482 for ( i = 0; i < (int)spos->nmem; i++ )
04483 spos->mem[ i ] = atoi(token());
04484 break;
04485 case CIF_CCT_POINTER:
04486 spos->btype = atoi(token());
04487 break;
04488 case CIF_CCT_ARRAY:
04489 break;
04490 case CIF_CCT_PTRMEM:
04491 break;
04492 case CIF_CCT_TEMPAR:
04493 break;
04494 }
04495
04496 if ( spos->name == NULL ) {
04497 spos->nlen = i = 0;
04498 spos->name = _Cif_space[lmode] (i+1, lcifd);
04499 if (spos->name == NULL)
04500 return (CIF_NOMEM);
04501 (void) strcpy (spos->name, "");
04502 }
04503
04504 return( CIF_CC_TYPE );
04505 }
04506
04507
04508 static int ascii_cc_entry (spos)
04509 struct Cif_cc_entry *spos;
04510 {
04511 register int i, n;
04512 register char *c;
04513
04514 c = token();
04515 spos->nlen = i = strlen (c);
04516 spos->name = _Cif_space[lmode] (i+1, lcifd);
04517 if (spos->name == NULL)
04518 return (CIF_NOMEM);
04519 (void) strcpy (spos->name, c);
04520
04521 c = token();
04522 spos->elen = i = strlen (c);
04523 spos->ename = _Cif_space[lmode] (i+1, lcifd);
04524 if (spos->ename == NULL)
04525 return (CIF_NOMEM);
04526 (void) strcpy (spos->ename, c);
04527
04528 spos->symid = atoi(token());
04529 spos->linkage = atol(token());
04530 spos->typeId = atol(token());
04531 spos->attr = atoi(token());
04532 spos->scopeid = atoi(token());
04533 spos->ptype = atoi(token());
04534 spos->sfid = atoi(token());
04535 spos->sline = atoi(token());
04536 spos->scol = atoi(token());
04537 spos->efid = atoi(token());
04538 spos->eline = atoi(token());
04539 spos->ecol = atoi(token());
04540 spos->fsymid = atoi(token());
04541
04542 spos->nparam = i = atoi(token());
04543 i *= sizeof( int );
04544 spos->param = (int *)_Cif_space[lmode] (i, lcifd);
04545 if (spos->param == NULL)
04546 return (CIF_NOMEM);
04547 for ( i = 0; i < (int)spos->nparam; i++ )
04548 spos->param[ i ] = atoi(token());
04549
04550 return( CIF_CC_ENTRY );
04551 }
04552
04553
04554 static int ascii_cc_obj (spos)
04555 struct Cif_cc_obj *spos;
04556 {
04557 register int i;
04558 register char *c;
04559
04560 c = token();
04561 spos->nlen = i = strlen (c);
04562 spos->name = _Cif_space[lmode] (i+1, lcifd);
04563 if (spos->name == NULL)
04564 return (CIF_NOMEM);
04565 (void) strcpy (spos->name, c);
04566
04567 spos->symid = atoi(token());
04568 spos->typeId = atol(token());
04569 spos->symcl = atol(token());
04570 spos->linkage = atol(token());
04571 spos->storage = atol(token());
04572 spos->scopeid = atol(token());
04573 spos->offset = atol(token());
04574 spos->ptype = atoi(token());
04575 return( CIF_CC_OBJ );
04576 }
04577
04578
04579 static int ascii_cc_subtype (spos)
04580 struct Cif_cc_subtype *spos;
04581 {
04582 spos->symid = atoi(token());
04583 spos->symkind = atoi(token());
04584 spos->subkind = atoi(token());
04585 spos->flags = atol(token());
04586 spos->ptype = atoi(token());
04587 return( CIF_CC_SUBTYPE );
04588 }
04589
04590
04591 static int ascii_cc_enum (spos)
04592 struct Cif_cc_enum *spos;
04593 {
04594 register int i;
04595 register char *c;
04596
04597 spos->symid = atoi(token());
04598 c = token();
04599 spos->nlen = i = strlen (c);
04600 spos->name = _Cif_space[lmode] (i+1, lcifd);
04601 if (spos->name == NULL)
04602 return (CIF_NOMEM);
04603 (void) strcpy (spos->name, c);
04604
04605 spos->typeId = atol(token());
04606 c = token();
04607 spos->vlen = i = strlen (c);
04608 spos->value = _Cif_space[lmode] (i+1, lcifd);
04609 if (spos->value == NULL)
04610 return (CIF_NOMEM);
04611 (void) strcpy (spos->value, c);
04612 return( CIF_CC_ENUM );
04613 }
04614
04615
04616 static int ascii_cc_expr (spos)
04617 struct Cif_cc_expr *spos;
04618 {
04619 spos->exprid = atoi(token());
04620 spos->type = atol(token());
04621 spos->fid = atol(token());
04622 spos->line = atol(token());
04623 spos->col = atol(token());
04624 spos->noper = atol(token());
04625
04626 return( CIF_CC_EXPR );
04627 }
04628
04629
04630 static int ascii_src_pos (spos)
04631 struct Cif_src_pos *spos;
04632 {
04633 spos->kind = atoi(token());
04634
04635 spos->srcid = atol(token());
04636 spos->psrcid = atol(token());
04637
04638 spos->sline = atol(token());
04639 spos->scol = atoi(token());
04640
04641 if (spos->kind == CIF_SRC_KIND_MAIN ||
04642 spos->kind == CIF_SRC_KIND_INCLUDE ||
04643 spos->kind == CIF_SRC_KIND_INLINE ||
04644 spos->kind == CIF_SRC_KIND_TAIL)
04645 spos->fid = atol(token());
04646 else {
04647 spos->eline = atol(token());
04648 spos->ecol = atoi(token());
04649 spos->symid = atol(token());
04650 }
04651
04652 return( CIF_SRC_POS );
04653 }
04654
04655
04656 static int ascii_orig_cmd (ocmd)
04657 struct Cif_orig_cmd *ocmd;
04658 {
04659 register int i;
04660 register char *c;
04661
04662 c = token();
04663 ocmd->nlen = i = strlen (c);
04664 ocmd->name = _Cif_space[lmode] (i+1, lcifd);
04665 if (ocmd->name == NULL)
04666 return (CIF_NOMEM);
04667 (void) strcpy (ocmd->name, c);
04668
04669 return( CIF_ORIG_CMD );
04670 }
04671