integer*4 name_table_size parameter (name_table_size=5003) !should be a prime number c name table structure/name_table_entry/ character*31 name !name of var or logical*1 inuse logical*1 deleted integer*4 type !type of var-.or. of types below union map integer*4 string_loc endmap map logical*4 logical_value endmap map integer*4 integer_value endmap map integer*4 first_list_string integer*4 next_list_string endmap map integer*4 first_line_loc endmap endunion endstructure c c variant structure as follows c c var name (c*31) c in use (l*1) c deleted (l*1) c type (i*4) c string_loc(i*4) integer_value(i*4) logical_value(l*4) 1st_list_str(i*4) 1st_line_loc(i*4) c nxt_list_str(i*4) c c type 1 type 4 type 2 type 8 type 16 c c var name is name of variable,list,macro or macro argument c c in the case of a variable of type logical or integer, it contains c its current value as partof the structure c c if the var is type string or list, it contains a pointer to the c string table of the (first) string value of the var c c macro is like type list in that a pointer is to the first string of a c chain containing the text of the macro c record/name_table_entry/name_table(name_table_size) integer*4 type_unused,type_string,type_logical,type_value,type_list integer*4 type_macro parameter (type_unused=0) parameter (type_string=1) ! uses string table parameter (type_logical=2) parameter (type_value=4) parameter (type_list=8) ! uses string table parameter (type_macro=16) ! uses name table and string tables common/name_table_common/name_table integer*4 string_table_size parameter (string_table_size=10000) structure /string_table_entry/ logical*4 in_use integer*4 next_string c character*(max_line_length) string character*(132) string endstructure record/string_table_entry/string_table(string_table_size) common/string_table_common/string_table