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

📄 symbol.c

📁 有限元程序
💻 C
字号:
/* *  =============================================================================  *  ALADDIN Version 2.1. *                                                                      *  symbol.c : Symbol Table : Modified to take (multiple) numbers. *                                                                     *  Copyright (C) 1995-2000 by Mark Austin, Xiaoguang Chen, and Wane-Jang Lin *  Institute for Systems Research,                                            *  University of Maryland, College Park, MD 20742                                    *                                                                      *  This software is provided "as is" without express or implied warranty. *  Permission is granted to use this software on any computer system *  and to redistribute it freely, subject to the following restrictions: *  *  1. The authors are not responsible for the consequences of use of *     this software, even if they arise from defects in the software. *  2. The origin of this software must not be misrepresented, either *     by explicit claim or by omission. *  3. Altered versions must be plainly marked as such and must not *     be misrepresented as being the original software. *  4. This software may not be sold or included in commercial software *     products without a license.  *  5. This notice is to remain intact. *                                                                     *  Written by: Mark Austin, Xiaoguang Chen, and Wane-Jang Lin      December 1995 *  =============================================================================  */#include <stdio.h>#include <string.h>#include "defs.h"#include "miscellaneous.h"#include "units.h"#include "matrix.h"#include "fe_database.h"#include "symbol.h"#define TABLE_SIZE 101typedef SYMBOL SymbolNode;static  SymbolNode *SymbolTable[TABLE_SIZE];static  SymbolNode *SymbolList;char	 *malloc(), *calloc();SymbolNode *AllocSymbolNode();/* ====================== *//* (a) Build Symbol table *//* ====================== */#ifdef __STDC__SYMBOL *build_table(char *s, int t, double d)#elseSYMBOL *build_table(s, t, d)char  *s;int    t;double d;#endif{SYMBOL *sp;   sp = install(s);   sp->type    = t;   sp->u.value = d;   return (sp);}/* =================== *//* (b) : hash function *//* =================== */#ifdef __STDC__int hash(char *s)#elseint hash(s)char	*s;#endif{int mid, len;    len = strlen(s);     mid = (len + 1) / 2;    return ((s[0] + mid * s[mid - 1] + len * s[len - 1]) % TABLE_SIZE);}/* =========================== *//* (c) : initialize hash table *//* =========================== */SymbolInit(){SymbolNode *h, *next;int	   i;	for (i=0; i < TABLE_SIZE; i++) {		h = SymbolTable[i];		while (h != NULL) {			next = h->next;			FreeSymbolNode(h);			h = next;		}		SymbolTable[i] = NULL;	}}/* ===================== *//* (d) : free hash nodes *//* ===================== */#ifdef __STDC__FreeSymbolNode(SymbolNode *h)#elseFreeSymbolNode(h)SymbolNode *h;#endif{	h->next = SymbolList;	SymbolList = h;}/* ======================== *//* (e) : allocate hash node *//* ======================== */SYMBOL *AllocSymbolNode(){SYMBOL *h;	while ((h = SymbolList) != NULL) {		SymbolList = h->next;	}	if ((h = (SymbolNode *)calloc(1, sizeof(SymbolNode))) == NULL) {		fprintf(stderr,"AllocSymbolNode(): malloc failed\n");		exit(1);	}	return h;}/* ================================================== *//* (f) : lookup string name, return NULL if not found *//* ================================================== */#ifdef __STDC__SYMBOL *lookup(char *s)#elseSYMBOL *lookup(s)char *s;#endif{SymbolNode  *h;int hash_val;#ifdef DEBUG    printf("****** enter lookup():\n");#endif    hash_val = hash(s);    for( h = SymbolTable[hash_val]; h != NULL; h = h->next) {     	 if((h->cpSymName != NULL) && strcmp(s, h->cpSymName) == 0) {	    return h;         }    }#ifdef DEBUG    printf("Return (SYMBOL *) NULL\n");    printf("Leaving lookup(): \n");#endif    return NULL;}/* ================================= *//* (g) : install node if not present *//* ================================= */#ifdef __STDC__SYMBOL *install(char *s)#elseSYMBOL *install(s)char   *s;#endif{SYMBOL *h;int hash_val;       hash_val = hash(s);#ifdef DEBUG    printf("****** In install(): hash_val = %d \n", hash_val);    printf("****** In install():  s = %s\n", s);#endif    /* Allow repetition of numbers in Symbol Table */    if(strcmp("", s) != 0) {       if((h = lookup(s)) != NULL)          return h;    }    /* Allocate Symbol Table Node and Name */    h = AllocSymbolNode();    if(strcmp("", s) != 0)     h->cpSymName = SaveString(s);    h->next = SymbolTable[hash_val];    SymbolTable[hash_val] = h;        return h;}/* ======================== *//* (h) : print symbol table *//* ======================== */void print_symtable(){SYMBOL *h;int i;    for(i = 1; i <= TABLE_SIZE; i++) {        fprintf(stdout," INFO >> i = %3d : ", i);        for(h = SymbolTable[i-1]; h != NULL; h = h->next)     	    fprintf(stdout,"%17s ", h->cpSymName);        fprintf(stdout,"\n");    }}

⌨️ 快捷键说明

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