source: git/modules/modgen/proc_setup.cc @ 73d7b5

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