data.c
References to this file elsewhere.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <strings.h>
5
6 #include "registry.h"
7 #include "protos.h"
8 #include "data.h"
9
10 #define MAXTOKENS 30
11
12 int
13 init_dim_table()
14 {
15 Dim = NULL ;
16 return(0) ;
17 }
18
19 node_t *
20 new_node ( int kind )
21 { node_t *p ; p = (node_t *)malloc(sizeof(node_t)) ; bzero(p,sizeof(node_t)); p->node_kind = kind ; return (p) ; }
22
23 int
24 add_node_to_end ( node_t * node , node_t ** list )
25 {
26 node_t * p ;
27 if ( *list == NULL )
28 { *list = node ; }
29 else
30 {
31 for ( p = *list ; p->next != NULL ; p = p->next ) ;
32 p->next = node ;
33 }
34 return(0) ;
35 }
36
37 int
38 add_node_to_end_4d ( node_t * node , node_t ** list )
39 {
40 node_t * p ;
41 if ( *list == NULL )
42 { *list = node ; }
43 else
44 {
45 for ( p = *list ; p->next4d != NULL ; p = p->next4d ) ;
46 p->next4d = node ;
47 }
48 return(0) ;
49 }
50
51 #if 0
52 int
53 show_nodelist( node_t * p )
54 {
55 show_nodelist1( p , 0 ) ;
56 }
57
58 show_nodelist1( node_t * p , int indent )
59 {
60 if ( p == NULL ) return(0) ;
61 show_node1( p, indent) ;
62 show_nodelist1( p->next, indent ) ;
63 }
64
65 int
66 show_node( node_t * p )
67 {
68 return(show_node1(p,0)) ;
69 }
70
71 int
72 show_node1( node_t * p, int indent )
73 {
74 char spaces[] = " " ;
75 char tmp[25] , t1[25] , t2[25] ;
76 char * x, *ca, *ld, *ss, *se, *sg ;
77 char *nodekind ;
78 node_t * q ;
79 int nl ;
80 int i ;
81
82 if ( p == NULL ) return(1) ;
83 strcpy(tmp, spaces) ;
84 if ( indent >= 0 && indent < 20 ) tmp[indent] = '\0' ;
85
86 // this doesn't make much sense any more, ever since node_kind was
87 // changed to a bit mask
88 if ( p->node_kind & RCONFIG ) nodekind = "RCONFIG" ;
89 else if ( p->node_kind & I1 ) nodekind = "I1" ;
90 else if ( p->node_kind & FIELD ) nodekind = "FIELD" ;
91 else if ( p->node_kind & FOURD ) nodekind = "FOURD" ;
92 else if ( p->node_kind & MEMBER ) nodekind = "MEMBER" ;
93 else if ( p->node_kind & RCONFIG ) nodekind = "RCONFIG" ;
94
95 if ( !p->scalar_array_member )
96 {
97 switch ( p->node_kind )
98 {
99 case RCONFIG :
100 case I1 :
101 case FIELD :
102 case FOURD :
103 case MEMBER :
104 fprintf(stderr,"%s%s : %10s ndims %1d\n",tmp,nodekind,p->name, p->ndims) ;
105 for ( i = 0 ; i < p->ndims ; i++ )
106 {
107 sg = "" ;
108 switch ( p->dims[i]->coord_axis ) {
109 case COORD_X : ca = "X" ; if ( p->stag_x ) sg = "*" ; break ;
110 case COORD_Y : ca = "Y" ; if ( p->stag_y ) sg = "*" ; break ;
111 case COORD_Z : ca = "Z" ; if ( p->stag_z ) sg = "*" ; break ;
112 case COORD_C : ca = "C" ; break ;
113 }
114 switch ( p->dims[i]->len_defined_how ) {
115 case DOMAIN_STANDARD : ld = "STANDARD" ; ss = "" ; se = "" ; break ;
116 case NAMELIST : ld = "NAMELIST" ; ss = p->dims[i]->associated_namelist_variable ; se="" ; break ;
117 case CONSTANT : ld = "CONSTANT" ; sprintf(t1,"%d",p->dims[i]->coord_start) ; ss = t1 ;
118 sprintf(t2,"%d",p->dims[i]->coord_end ) ; se = t2 ;
119 break ;
120 }
121 fprintf(stderr," dim %1d: %c %2s%s %10s %10s %10s\n",i,p->dims[i]->dim_name,ca,sg,ld,ss,se) ;
122 }
123 nl = 0 ;
124 if ( strlen( p->use ) > 0 ) {
125 nl = 1 ; fprintf(stderr," use: %s",p->use) ;
126 if ( p->scalar_array_member ) fprintf(stderr,"(4D)") ;
127 }
128 if ( strlen( p->dname ) > 0 ) { nl = 1 ; fprintf(stderr," dname: %s",p->dname) ; }
129 if ( strlen( p->descrip ) > 0 ) { nl = 1 ; fprintf(stderr," descrip: %s",p->descrip) ; }
130 if ( nl == 1 ) fprintf(stderr,"\n") ;
131 show_node1( p->type, indent+1 ) ;
132 break ;
133 case TYPE :
134 x = "derived" ;
135 if ( p->type_type == SIMPLE ) x = "simple" ;
136 fprintf(stderr,"%sTYPE : %10s %s ndims %1d\n",tmp,p->name,x, p->ndims) ;
137 show_nodelist1( p->fields, indent+1 ) ;
138 break ;
139 case DIM :
140 break ;
141 default :
142 break ;
143 }
144 }
145 show_nodelist1( p->members , indent+2 ) ;
146 return(0) ;
147 }
148 #endif
149
150 int
151 set_mark ( int val , node_t * lst )
152 {
153 node_t * p ;
154 if ( lst == NULL ) return(0) ;
155 for ( p = lst ; p != NULL ; p = p->next )
156 {
157 p->mark = val ;
158 set_mark( val , p->fields ) ;
159 set_mark( val , p->members ) ;
160 }
161 return(0) ;
162 }
163
164 int
165 set_mark_4d ( int val , node_t * lst )
166 {
167 node_t * p ;
168 if ( lst == NULL ) return(0) ;
169 for ( p = lst ; p != NULL ; p = p->next4d )
170 {
171 p->mark = val ;
172 set_mark( val , p->fields ) ;
173 set_mark( val , p->members ) ;
174 }
175 return(0) ;
176 }
177