source: git/old_modgen/modgen/proc_setup.cc @ c7d29b

fieker-DuValspielwiese
Last change on this file since c7d29b was c36fda, checked in by Oleksandr Motsak <motsak@…>, 10 years ago
Moved all the outdated modgen related stuff to /old_modgen/ for now
  • Property mode set to 100644
File size: 4.8 KB
Line 
1/*
2 */
3
4#include <stdio.h>
5#include <string.h>
6#include <stdlib.h>
7#include <ctype.h>
8#include "modgen.h"
9#include "typmap.h"
10
11
12#if 1
13#  define logx printf
14#else
15#  define logx
16#endif
17/*#define DEBUG 1*/
18
19static char default_do_typecheck = 1;
20static char default_do_return = 1;
21
22/*========================================================================*/
23int init_proc(
24  procdefv p,
25  char *procname,
26  paramdefv ret,
27  int lineno,
28  language_defs language
29  )
30{
31  int i;
32 
33  if( p == NULL) return -1;
34  if( p->procname != NULL ) free(p->procname);
35 
36  if( p->funcname != NULL ) free(p->funcname);
37  if( p->c_code != NULL ) free(p->c_code);
38  if( p->help_string != NULL) free(p->help_string);
39  if( p->example_string != NULL) free(p->example_string);
40 
41  if( p->paramcnt>0 ) { 
42    //free(p->param);
43  }
44
45  memset((void *)p, 0, sizeof(procdef));
46  p->procname = strdup(procname);
47
48  if( ret != NULL ) {
49    char typname[32];
50
51    decl2str(ret->typ, typname);
52    ret->typname = strdup(typname);
53    memcpy((void *)(&p->return_val), (void *)ret, sizeof(paramdef));
54  } else {
55    p->return_val.name = strdup("NONE");
56    p->return_val.typname = strdup("NONE");
57    p->return_val.typ = NONE;
58  }
59 
60  p->language = language;
61  p->lineno = lineno;
62  p->flags.auto_header = 1;
63 
64  p->flags.do_declaration = 1;
65  p->flags.declaration_done = 0;
66  p->flags.do_typecheck = default_do_typecheck;
67  p->flags.typecheck_done = 0;
68  p->flags.do_return = default_do_return;
69 
70  return 0;
71}
72
73/*========================================================================*/
74void AddParam(
75  procdefv p,
76  paramdefv vnew,
77  char *varname
78  )
79{
80  paramdef pnew;
81  int paramcnt = 0;
82  char typname[32];
83 
84  memset(typname, 0, sizeof(typname));
85  decl2str(vnew->typ, typname);
86 
87#if DEBUG
88  logx("AddParam(%d, %s, %s, %d)\n", p->paramcnt, p->procname,
89       typname, vnew->typ);
90#endif
91
92  memset((void *)&pnew, '\0', sizeof(paramdef));
93  pnew.name = (char *)malloc(strlen(vnew->name)+1);
94  memset(pnew.name, '\0', strlen(vnew->name)+1);
95//   pnew.next = NULL;
96  memcpy(pnew.name, vnew->name, strlen(vnew->name));
97  pnew.typname = (char *)malloc(strlen(typname)+1);
98  memset(pnew.typname, '\0', strlen(typname)+1);
99  memcpy(pnew.typname, typname, strlen(typname));
100  pnew.typ = vnew->typ;
101
102  paramcnt = p->paramcnt;
103  if(varname == NULL) {
104    snprintf(typname, sizeof(typname), "arg%d", paramcnt);
105    pnew.varname = strdup(typname);
106  } else pnew.varname = strdup(varname);
107
108 if(p->paramcnt==0) {
109    p->param = (paramdefv)malloc(sizeof(paramdef));
110 }
111  else {
112    p->param =
113      (paramdefv)realloc(p->param,
114                         (paramcnt+1)*sizeof(paramdef));
115  }
116 
117  memcpy((void *)(&p->param[paramcnt]),
118         (void *)&pnew, sizeof(paramdef));
119  (p->paramcnt)++;
120#if DEBUG
121  logx("AddParam() done\n");
122#endif
123}
124
125/*========================================================================*/
126void proc_set_default_var(
127  var_type type,
128  var_token varid,
129  char *varname,
130  void *varvalue
131  )
132{
133  int *i;
134  char *q;
135
136  switch(type) {
137      case VAR_NUM:
138      case VAR_BOOL:
139        i = (int *)varvalue;
140        switch(varid) {
141            case VAR_TYPECHECK: default_do_typecheck = *i; break;
142            case VAR_RETURN:    default_do_return = *i; break;
143            default:            break;
144        }
145        break;
146      case VAR_STRING:
147        q = (char *)varvalue;
148        switch(varid) {
149        }
150        break;
151      case VAR_FILE:
152        q = (char *)varvalue;
153        printf("'%s'", q);
154        break;
155
156      case VAR_FILES:
157        break;
158  }
159  printf("\n");
160 
161  return;
162}
163
164/*========================================================================*/
165void proc_set_var(
166  procdefv p,
167  var_type type,
168  var_token varid,
169  char *varname,
170  void *varvalue
171  )
172{
173  int *i;
174  char *q;
175 
176 
177//  printf(">>>>>>>>Test 4 %s()[%d] '%s' = ", p->procname, type, varname);
178  fflush(stdout);
179  switch(type) {
180      case VAR_NUM:
181      case VAR_BOOL:
182        i = (int *)varvalue;
183        switch(varid) {
184            case VAR_TYPECHECK: p->flags.do_typecheck = *i; break;
185            case VAR_RETURN:    p->flags.do_return = *i; break;
186            default:            break;
187        }
188        break;
189
190      case VAR_STRING:
191        q = (char *)varvalue;
192        switch(varid) {
193            case VAR_HELP:
194              break;
195        }
196        break;
197
198      case VAR_FILE:
199        q = (char *)varvalue;
200        //printf("'%s'", q);
201        break;
202
203      case VAR_FILES:
204        break;
205  }
206//  printf("\n");
207 
208  return;
209}
210
211/*========================================================================*/
212char *ReservedVarnames[] = {
213  "__v",
214  "__h"
215  "__res",
216  "__v_save"
217  "__tok",
218  "__index",
219  NULL 
220};
221
222int check_reseverd(
223  char *name
224  )
225{
226  int i;
227 
228  for(i=0; ReservedVarnames[i] != NULL; i++)
229    if(strcmp(ReservedVarnames[i], name)==0) return 1;
230  return 0;
231}
232 
233/*========================================================================*/
Note: See TracBrowser for help on using the repository browser.