⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.c

📁 这是一个Linux下的集成开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif  READ_NUM(" entries",numentries); /* Get no. of entry points */  NEXTLINE;#ifdef DEBUG_PROJECT printf("read entries %d\n",numentries);#endif				/* Read defn arglists */  for(ientry=0; ientry<numentries; ientry++) {      proj_arg_info_in(fd,topfilename,TRUE);  }  NEXTLINE;  READ_NUM(" externals",numexts);	/* Get no. of external refs */#ifdef DEBUG_PROJECT printf("read exts %d\n",numexts);#endif  NEXTLINE;				/* Read invocation & ext def arglists */  for(iext=0; iext<numexts; iext++) {    proj_arg_info_in(fd,topfilename,FALSE);  }  NEXTLINE;			/* Read common block info */   READ_NUM(" comblocks",numblocks);#ifdef DEBUG_PROJECT printf("read num blocks %d\n",numblocks);#endif   NEXTLINE;   for(iblock=0; iblock<numblocks; iblock++) {     proj_com_info_in(fd,topfilename);   }   NEXTLINE; }/* end while(retval == 1) */ if(retval != EOF) READ_ERROR; init_symtab();		/* Clear out local strspace */}static char *prev_file_name="";/* used to reduce number of callocs */			/* Read arglist info */PRIVATE voidproj_arg_info_in(fd,filename,is_defn)    FILE *fd;    char *filename;		/* name of toplevel file */    int is_defn;  {    char id_name[MAXNAME+1],module_name[MAXNAME+1],sentinel[6];    char file_name[MAXNAME+1];    int id_class,id_type;    long id_size;    unsigned	      id_used_flag,	      id_set_flag,	      id_invoked,	      id_declared,	      id_library_module,	      future1,future2,future3;    unsigned h;    Gsymtab *gsymt, *module;    unsigned alist_class,alist_type,alist_is_defn,alist_is_call,       alist_external_decl,alist_actual_arg;    unsigned alist_line;    long alist_size;    unsigned numargs,iarg,arg_num,arg_class,arg_type,arg_dims;    unsigned long arg_elts;    long arg_size;    unsigned			/* Flags for arguments */		arg_is_lvalue,		arg_set_flag,		arg_assigned_flag,		arg_used_before_set,		arg_array_var,		arg_array_element,		arg_declared_external,		arg_future_flag;	/* possible flag for future use */    if(is_defn)	READ_STR(" entry",id_name); /* Entry point name */    else	READ_STR(" external",id_name); /* External name */    READ_NUM(" class",id_class); /* class as in symtab */    READ_NUM(" type",id_type); /* type as in symtab */    READ_LONG(" size",id_size); /* size as in symtab */    if(fscanf(fd," flags %d %d %d %d %d %d %d %d",	      &id_used_flag,	      &id_set_flag,	      &id_invoked,	      &id_declared,	      &id_library_module,	      &future1,&future2,&future3) != 8) READ_ERROR;    NEXTLINE;#ifdef DEBUG_PROJECT printf("read id name %s class %d type %d\n",id_name,id_class,id_type);#endif				/* Create global symtab entry */    h = hash_lookup(id_name);    if( (gsymt = hashtab[h].glob_symtab) == NULL) {      gsymt = install_global(h,id_type,class_SUBPROGRAM);      gsymt->size = id_size;    }    else if(is_defn)      gsymt->size = id_size;		/* Set library_module flag if project file was created		   with -lib mode in effect, or is now taken in -lib mode */    if(is_defn && (library_mode || id_library_module)) {      gsymt->library_module = TRUE;    }    if(id_used_flag)      gsymt->used_flag = TRUE;    if(id_set_flag)      gsymt->set_flag = TRUE;    if(id_invoked)      gsymt->invoked_as_func = TRUE;    if(id_declared)      gsymt->declared_external = TRUE;   while(   fscanf(fd,"%5s",sentinel),#ifdef DEBUG_PROJECT printf("sentinel=[%s]\n",sentinel),#endif	 strcmp(sentinel,(is_defn?"defn":"call")) == 0) {      ArgListHeader *ahead;      ArgListElement *alist;      NEXTLINE;      READ_STR(" module",module_name);      READ_STR(" file",file_name);      READ_NUM(" line",alist_line); /* line number */      READ_NUM(" class",alist_class);	/* class as in ArgListHeader */      READ_NUM(" type",alist_type); /* type as in ArgListHeader */      READ_LONG(" size",alist_size); /* size as in ArgListHeader */      if(fscanf(fd," flags %d %d %d %d",		&alist_is_defn,		&alist_is_call,		&alist_external_decl,		&alist_actual_arg) != 4) READ_ERROR;      NEXTLINE;#ifdef DEBUG_PROJECT printf("read alist class %d type %d line %d\n",alist_class,alist_type,alist_line);#endif		/* Find current module in symtab. If not there, make		   a global symtab entry for it. It will be filled		   in eventually when processing corresponding entry.		 */      h = hash_lookup(module_name);      if( (module = hashtab[h].glob_symtab) == NULL) {	module = install_global(h,type_UNDECL,class_SUBPROGRAM);      }      if(module->internal_entry) {	warning(NO_LINE_NUM,NO_COL_NUM,		"entry point redefined as module");	msg_tail(module->name);	msg_tail(": redefinition ignored");      }      else {	if(is_defn) {	  if(module != gsymt) {#ifdef DEBUG_PROJECT	    printf("\nLinking entry %s to module %s",		   gsymt->name,module->name);#endif	    gsymt->internal_entry = TRUE;	    gsymt->link.module=module; /* interior entry: link it to module */	  }	}	else {			/* call: add to child list */		/* Avoid duplication on child list.  It will have just		   been placed there on previous project-file entry,		   so it will be the first child on the list.		*/#ifdef DEBUG_PROJECT	  printf("\nChild %s of module %s",		 gsymt->name,module->name);#endif	  if(module->link.child_list == NULL	     || module->link.child_list->child != gsymt) {	    ChildList *node=	      (ChildList *)SN_calloc(1,sizeof(ChildList));#ifdef DEBUG_PROJECT	    printf(" linked in");#endif	    node->child = gsymt;	    node->next = module->link.child_list;	    module->link.child_list = node;	  }#ifdef DEBUG_PROJECT	  else {	    printf(" (duplicate)");	  }#endif	}      }      if(alist_is_defn || alist_is_call) {	  READ_NUM(" args",numargs);	  NEXTLINE;      }      else	numargs = 0;#ifdef DEBUG_PROJECT printf("read numargs %d\n",numargs);#endif/***      if(!is_defn) {**	gsymt->used_flag = TRUE;**      }*/				/* Create arglist structure */      if(((ahead=(ArgListHeader *) SN_calloc(1, sizeof(ArgListHeader)))		 		 == (ArgListHeader *) NULL) ||	  (numargs != 0 &&          ((alist=(ArgListElement *) SN_calloc(numargs,sizeof(ArgListElement)))				 == (ArgListElement *) NULL))){		oops_message(OOPS_FATAL,proj_line_num,NO_COL_NUM,			     "out of malloc space for argument list");      }			/* Initialize arglist and link it to symtab */      ahead->type = type_byte(alist_class,alist_type);      ahead->size = alist_size;      ahead->numargs = numargs;      ahead->arg_array = (numargs==0? NULL: alist);      ahead->module = module;      ahead->topfile = filename;			/* try to avoid reallocating space for same name */      ahead->filename =	(strcmp(file_name,filename)==0? filename:	 (strcmp(file_name,prev_file_name)==0? prev_file_name:	  (prev_file_name=strcpy(ckalloc(strlen(file_name)+1),file_name))));      ahead->line_num = alist_line;      ahead->is_defn = alist_is_defn;      ahead->is_call = alist_is_call;      ahead->external_decl = alist_external_decl;      ahead->actual_arg = alist_actual_arg;      ahead->next = gsymt->info.arglist;      gsymt->info.arglist = ahead;			/* Fill arglist array from project file */      for(iarg=0; iarg<numargs; iarg++) {	READ_NUM(" arg",arg_num);	if(arg_num != iarg+1) READ_ERROR;	READ_NUM(" class",arg_class);	READ_NUM(" type",arg_type);	READ_LONG(" size",arg_size);	READ_NUM(" dims",arg_dims);	READ_LONG(" elts",arg_elts);	if(fscanf(fd," flags %d %d %d %d %d %d %d %d",		&arg_is_lvalue,		&arg_set_flag,		&arg_assigned_flag,		&arg_used_before_set,		&arg_array_var,		&arg_array_element,		&arg_declared_external,		&arg_future_flag) != 8) READ_ERROR;	alist[iarg].info.array_dim = array_dim_info(arg_dims,arg_elts);	alist[iarg].type = type_byte(arg_class,arg_type);	alist[iarg].size = arg_size;	alist[iarg].is_lvalue = arg_is_lvalue;	alist[iarg].set_flag = arg_set_flag;	alist[iarg].assigned_flag = arg_assigned_flag;	alist[iarg].used_before_set = arg_used_before_set;	alist[iarg].array_var = arg_array_var;	alist[iarg].array_element = arg_array_element;	alist[iarg].declared_external = arg_declared_external;	NEXTLINE;#ifdef DEBUG_PROJECT printf("read arg num %d\n",arg_num);#endif      }    }/* end while( sentinel == "defn"|"call") */    if(strcmp(sentinel,"end") != 0) READ_ERROR;    NEXTLINE;}PRIVATE voidproj_com_info_in(fd,filename)     FILE *fd;     char *filename;{    char id_name[MAXNAME+1],module_name[MAXNAME+1];    char file_name[MAXNAME+1];    unsigned id_class,id_type;    unsigned			/* Flags in ComListHeader */		clist_any_used,		clist_any_set,		clist_saved,		clist_future;    unsigned clist_line;    unsigned numvars,ivar,var_num,var_class,var_type,var_dims;    unsigned long var_elts;    unsigned			/* Flags for common variables */		var_used,		var_set,		var_used_before_set,		var_assigned,		var_future_4,		var_future_3,		var_future_2,		var_future_1;    long var_size;      int h;      Gsymtab *gsymt, *module;      ComListHeader *chead;      ComListElement *clist;    READ_STR(" block",id_name);    READ_NUM(" class",id_class);    READ_NUM(" type",id_type);#ifdef DEBUG_PROJECT printf("read com name %s class %d type %d\n",id_name,id_class,id_type);#endif    NEXTLINE;    READ_STR(" module",module_name);    READ_STR(" file",file_name);    READ_NUM(" line",clist_line);    if(fscanf(fd," flags %d %d %d %d",		&clist_any_used,		&clist_any_set,		&clist_saved,		&clist_future) != 4) READ_ERROR;    NEXTLINE;    READ_NUM(" vars",numvars);#ifdef DEBUG_PROJECT printf("read flags %d %d %d %d line %d\n",	clist_any_used,	clist_any_set,	clist_saved,	clist_future,	clist_line);#endif    NEXTLINE;				/* Create global symtab entry */    h = hash_lookup(id_name);    if( (gsymt = hashtab[h].com_glob_symtab) == NULL)      gsymt = install_global(h,id_type,id_class);				/* Create arglist structure */    if(((chead=(ComListHeader *) SN_calloc(1, sizeof(ComListHeader)))		 		 == (ComListHeader *) NULL) ||	  (numvars != 0 &&          ((clist=(ComListElement *) SN_calloc(numvars,sizeof(ComListElement)))				 == (ComListElement *) NULL))){		oops_message(OOPS_FATAL,proj_line_num,NO_COL_NUM,			     "out of malloc space for common list");      }		/* Find current module in symtab. If not there, make		   a global symtab entry for it.  This is bogus, since		   all modules should have been defined previously. */      h = hash_lookup(module_name);      if( (module = hashtab[h].glob_symtab) == NULL) {	fprintf(stderr,"\nWarning-- something's bogus in project file\n");	module = install_global(h,type_UNDECL,class_SUBPROGRAM);      }			/* Initialize arglist and link it to symtab */      chead->numargs = numvars;      chead->line_num = clist_line;      chead->com_list_array = (numvars==0? NULL: clist);      chead->module = module;      chead->topfile = filename;      chead->any_used = clist_any_used;      chead->any_set = clist_any_set;      chead->saved = clist_saved;			/* try to avoid reallocating space for same name */      chead->filename =	(strcmp(file_name,filename)==0? filename:	 (strcmp(file_name,prev_file_name)==0? prev_file_name:	  (prev_file_name=strcpy(ckalloc(strlen(file_name)+1),file_name))));      chead->next = gsymt->info.comlist;      gsymt->info.comlist = chead;			/* Fill comlist array from project file */    for(ivar=0; ivar<numvars; ivar++) {      READ_NUM(" var",var_num); if(var_num != ivar+1) READ_ERROR;      READ_NUM(" class",var_class);      READ_NUM(" type",var_type);      READ_LONG(" size",var_size);      READ_NUM(" dims",var_dims);      READ_LONG(" elts",var_elts);	if(fscanf(fd," flags %d %d %d %d %d %d %d %d",		&var_used,		&var_set,		&var_used_before_set,		&var_assigned,		&var_future_4,		&var_future_3,		&var_future_2,		&var_future_1) != 8) READ_ERROR;      NEXTLINE;#ifdef DEBUG_PROJECT printf("read class %d type %d dims %d size %d\n",var_class,var_type,var_dims,var_size);#endif      clist[ivar].dimen_info = array_dim_info(var_dims,var_elts);      clist[ivar].type = type_byte(var_class,var_type);      clist[ivar].size = var_size;      clist[ivar].used = var_used;      clist[ivar].set = var_set;      clist[ivar].used_before_set = var_used_before_set;      clist[ivar].assigned = var_assigned;    }}/*proj_com_info_in*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -