diff --git a/src/snc/gen_code.c b/src/snc/gen_code.c index 74665ab0fb6ef325715cbddcb22e56ceda86fd46..0a97324d68714130968431a15314d3e21033dabf 100644 --- a/src/snc/gen_code.c +++ b/src/snc/gen_code.c @@ -21,8 +21,6 @@ in the file LICENSE that is included with this distribution. #include "main.h" #include "gen_code.h" -static void gen_preamble(char *prog_name); -static void gen_header_preamble(char *prog_name); static void gen_main(char *prog_name); static void gen_user_var(Program *p); static void gen_global_c_code(Expr *global_c_list); @@ -57,26 +55,55 @@ void generate_code(Program *p, const char *header_name) set_gen_h(); - gen_code("/* Generated with snc from %s */\n", p->prog->src_file); + /* Initial comments */ + gen_code("/* Header file for program %s, ", p->name); + gen_code("generated by snc from %s */\n", p->prog->src_file); + + /* The usual C header file humdrum */ gen_code("#ifndef INCL%sh\n", p->name); gen_code("#define INCL%sh\n", p->name); - /* Generate preamble code */ - gen_header_preamble(p->name); + /* Includes */ + gen_code("#include \"epicsTypes.h\"\n"); + gen_code("#include \"seqCom.h\"\n"); /* Generate literal C code intermixed with global definitions */ gen_defn_c_code(p->prog, 0); - /* Generate global, state set, and state variable declarations */ - gen_user_var(p); + if (!p->options.reent) + { + gen_code("/* Warning: Access to SNL variables from outside */\n"); + gen_code("/* the program is only supported in reentrant mode */\n"); + } + else + { + /* Generate global, state set, and state variable declarations */ + gen_user_var(p); + } + + /* The usual C header file humdrum */ gen_code("#endif /* INCL%sh */\n", p->name); set_gen_c(); - gen_code("/* Generated with snc from %s */\n", p->prog->src_file); - gen_preamble(p->name); + /* Initial comments */ + gen_code("/* C code for program %s, ", p->name); + gen_code("generated by snc from %s */\n", p->prog->src_file); + + /* Includes */ + gen_code("#include <string.h>\n"); + gen_code("#include <stddef.h>\n"); + gen_code("#include <stdio.h>\n"); + gen_code("#include <limits.h>\n"); + gen_code("\n"); gen_code("#include \"%s\"\n", header_name); + if (!p->options.reent) + { + /* Generate global, state set, and state variable declarations */ + gen_user_var(p); + } + /* Generate code for each state set */ gen_ss_code(p); @@ -100,30 +127,6 @@ static void gen_main(char *prog_name) gen_code("#include \"seqMain.c\"\n"); } -/* Generate header preamble (includes, defines, etc.) */ -static void gen_header_preamble(char *prog_name) -{ - /* Program name (comment) */ - gen_code("\n/* Header file for program \"%s\" */\n", prog_name); - - /* Includes */ - gen_code("#include \"epicsTypes.h\"\n"); - gen_code("#include \"seqCom.h\"\n"); -} - -/* Generate preamble (includes, defines, etc.) */ -static void gen_preamble(char *prog_name) -{ - /* Program name (comment) */ - gen_code("\n/* C code for program \"%s\" */\n", prog_name); - - /* Includes */ - gen_code("#include <string.h>\n"); - gen_code("#include <stddef.h>\n"); - gen_code("#include <stdio.h>\n"); - gen_code("#include <limits.h>\n"); -} - void gen_var_decl(Var *vp) { gen_type(vp->type, vp->name);