void z_output_stream (void) { flush_buffer (); switch ((short) zargs[0]) { case 1: ostream_screen = TRUE; break; case -1: ostream_screen = FALSE; break; case 2: if (!ostream_script) script_open (); break; case -2: if (ostream_script) script_close (); break; case 3: memory_open (zargs[1], zargs[2], zargc >= 3); break; case -3: memory_close (); break; case 4: if (!ostream_record) record_open (); break; case -4: if (ostream_record) record_close (); break; } }/* z_output_stream */
void storeb (zword addr, zbyte value) { if (addr >= h_dynamic_size) runtime_error (ERR_STORE_RANGE); if (addr == H_FLAGS + 1) { /* flags register is modified */ h_flags &= ~(SCRIPTING_FLAG | FIXED_FONT_FLAG); h_flags |= value & (SCRIPTING_FLAG | FIXED_FONT_FLAG); if (value & SCRIPTING_FLAG) { if (!ostream_script) script_open (); } else { if (ostream_script) script_close (); } /* TOR - glkified / refresh_text_style (); */ } SET_BYTE (addr, value); }/* storeb */
void script_new_line (void) { if (fputc ('\n', sfp) == EOF) script_close (); script_width = 0; }/* script_new_line */
int main(int argc, char** argv) { /* If no args are specified... */ if (argc == 1) { puts(HELP_MSG); return 1; } /* Set defaults */ os_detect(); g_filename = DEFAULT; g_cc = NULL; g_dotnet = NULL; g_verbose = 0; /* Process any options that will effect script processing */ arg_set(argc, argv); if (!preprocess()) return 1; /* chdir() to the directory containing the project script, so that * relative paths may be used in the script */ io_chdir(path_getdir(g_filename)); /* Now run the script */ g_hasScript = script_run(g_filename); if (g_hasScript < 0) { puts("** Script failed to run, ending."); return 1; } /* Process any options that depend on the script output */ arg_reset(); if (!postprocess()) return 1; /* All done */ if (g_hasScript) script_close(); prj_close(); return 0; }
void Processor::z_output_stream() { flush_buffer(); switch ((short) zargs[0]) { case 1: ostream_screen = true; break; case -1: ostream_screen = false; break; case 2: if (!ostream_script) script_open(); break; case -2: if (ostream_script) script_close(); break; case 3: memory_open(zargs[1], zargs[2], zargc >= 3); break; case -3: memory_close(); break; case 4: if (!ostream_record) record_open(); break; case -4: if (ostream_record) record_close(); break; default: break; } }
int cdecl frotz_main (void) { os_init_setup (); init_buffer (); init_err (); init_memory (); init_process (); init_sound (); os_init_screen (); init_undo (); z_restart (); interpret (); script_close (); record_close (); replay_close (); reset_memory (); os_reset_screen (); return 0; }/* main */
int genPythonInterface(FILE *out) { TYPE_LIST *l; int i, j, k, n = 0, p; TYPE_STR *t; DCL_NOM_LIST *m, *ltypedefs; char buf[80]; char *str; ID_LIST *ln; script_open(out); cat_begin(out); fprintf(out, "#------------------ Fichier généré automatiquement ------------------\n"); fprintf(out, "#------------------ Ne pas éditer manuellement !!! ------------------\n\n"); fprintf(out, "from ctypes import *\n\n"); for (ln = imports; ln != NULL; ln = ln->next) { fprintf(out, "from %s.struct import *\n", ln->name); } /* Reverse the list */ for (l = types; l != NULL; l = l->next) { n++; } TYPE_LIST** reversed = malloc(n * sizeof(TYPE_LIST*)); if (reversed == NULL) return -1; for (i = n-1, l = types; l != NULL; l = l->next, i--) { reversed[i] = l; } for (i = 0; i < n; i++) { l = reversed[i]; t = l->type; if (/* t->used == 0 || */ (t->flags & TYPE_IMPORT)) { continue; } /* Corps de la fonction */ switch (t->type) { /* Types de base: normalement on ne passe pas la... */ case CHAR: case SHORT: case INT: case FLOAT: case DOUBLE: break; /* Structure: on traite chaque membre */ case STRUCT: fprintf(out, "class %s(Structure):\n", t->name); fprintf(out, " _fields_ = [\n"); for (m = t->members; m != NULL; m = m->next) { genTypeName(m->dcl_nom, buf); fprintf(out, " (\"%s\", %s),\n", m->dcl_nom->name, buf); } fprintf(out, " ]\n\n"); break; case UNION: fprintf(out, "class %s(Union):\n", t->name); fprintf(out, " _fields_ = [\n"); for (m = t->members; m != NULL; m = m->next) { genTypeName(m->dcl_nom, buf); fprintf(out, " (\"%s\", %s),\n", m->dcl_nom->name, buf); } break; case ENUM: fprintf(out, "# enum value for %s\n", t->name); fprintf(out, "("); p = 0; for (m = t->members; m != NULL; m = m->next) { fprintf(out, "%s, ", m->dcl_nom->name); p++; } fprintf(out, ") = ("); for (m = t->members; m != NULL; m = m->next) { fprintf(out, "%d, ", m->dcl_nom->pointeur); p++; } fprintf(out, ")\n\n"); break; case TYPEDEF: break; } } free(reversed); cat_end(out); script_close(out, "server/struct.py"); return 0; }
int typeGen(FILE *out) { ID_LIST *il; DCL_NOM_LIST *l, *m, *l1; TYPE_STR *t; char *type, *var; script_open(out); subst_begin(out, PROTO_TYPE_H); /* Nom du module */ print_sed_subst(out, "module", module->name); print_sed_subst(out, "MODULE", module->NAME); /* Nombre de taches d'exec */ print_sed_subst(out, "nbExecTask", "%d", nbExecTask); subst_end(out); cat_begin(out); fprintf(out, "#ifndef %s_TYPE1_H\n", module->name); fprintf(out, "#define %s_TYPE1_H\n\n", module->name); for (il = includeFiles; il != NULL; il = il->next) { if (il->name != NULL) fprintf(out, "#include \"%s\"\n", il->name); } /* for */ fprintf(out, "\n"); /* Structure de donne'es interne */ for (l = typedefs; l != NULL; l = l->next) { t = l->dcl_nom->type; if (t->used == 0) { continue; } /* Ne genere pas les types deja declares */ if (((t->flags & TYPE_INTERNAL_DATA) != TYPE_INTERNAL_DATA) && ((t->flags & TYPE_GENOM) != TYPE_GENOM)) { continue; } if (t->flags & TYPE_INTERNAL_DATA) { /* trouve' la structure interne */ fprintf(out, "/*\n" " * Structure de donnees interne\n" " */\n"); } else { fprintf(out, "/*\n" " * Type declare' dans %s\n" " */\n", nomfic); } l->dcl_nom->flags = 1; fprintf(out, "typedef %s", nom_type(t)); if (t->type == STRUCT || t->type == UNION || t->type == ENUM) { fprintf(out, " {\n"); if (t->members == NULL) { trouve_members(t); } for (m = t->members; m != NULL; m = m->next) { if (t->type == ENUM) { if (m->dcl_nom->flags == ENUM_VALUE) fprintf(out, "\t%s = %d%s\n", m->dcl_nom->name, m->dcl_nom->pointeur, m->next?",":""); else fprintf(out, "\t%s%s\n", m->dcl_nom->name, m->next?",":""); } else { dcl_nom_decl(m->dcl_nom, &type, &var); fprintf(out, "\t%s %s;\n", type, var); free(type); free(var); } } /* for */ fprintf(out, "} "); } dcl_nom_decl(l->dcl_nom, &type, &var); fprintf(out, "%s", var); free(type); free(var); /* recherche d'autres noms pour ce type */ for (l1 = typedefs; l1 != NULL; l1 = l1->next) { if (l1->dcl_nom->flags == 1) { continue; } if (l1->dcl_nom->type == t) { dcl_nom_decl(l1->dcl_nom, &type, &var); l1->dcl_nom->flags = 1; fprintf(out, ", %s", var); free(type); free(var); } } /* for */ fprintf(out, ";\n\n"); } /* for */ fputs("\n#endif\n", out); cat_end(out); script_close(out, "server/%sType.h", module->name); return(0); }
int genTclservClientMsgLib(FILE *out) { RQST_LIST *l; RQST_STR *r; int abortNum; /* * MsgLib.c */ script_open(out); subst_begin(out, PROTO_TCLSERV_CLIENT_MSG_TITLE); /* nom du module */ print_sed_subst(out, "module", module->name); print_sed_subst(out, "MODULE", module->NAME); /* numero de la requete d'abort */ abortNum = trouve_abort_num(); print_sed_subst(out, "abortRequestNum", "%s_ABORT_RQST", module->NAME); subst_end(out); /* Every request */ for (l = requetes; l != NULL; l=l->next) { r=l->rqst; subst_begin(out,r->type == CONTROL ? PROTO_TCLSERV_CLIENT_MSG_CTRL : PROTO_TCLSERV_CLIENT_MSG_EXEC); msgLibSubstRqst(out, l->rqst); subst_end(out); } /* for */ script_close(out, "server/tclservClient/%sTclservClientMsgLib.c", module->name); /* * MsgLib.h */ script_open(out); subst_begin(out, PROTO_TCLSERV_CLIENT_MSG_HEADER); /* Nom du Module */ print_sed_subst(out, "module", module->name); print_sed_subst(out, "MODULE", module->NAME); subst_end(out); /* Prototypes */ /* Every request */ for (l = requetes; l != NULL; l=l->next) { r=l->rqst; subst_begin(out,r->type == CONTROL ? PROTO_TCLSERV_CLIENT_MSG_CTRL_PROTO : PROTO_TCLSERV_CLIENT_MSG_CTRL_EXEC); msgLibSubstRqst(out, l->rqst); subst_end(out); } /* for */ cat_begin(out); fprintf(out, "#ifdef __cplusplus\n"); fprintf(out, "}\n"); fprintf(out, "#endif\n"); fprintf(out, "#endif /* %sTCLSERV_CLIENT_MSG_LIB_H */\n", module->name); cat_end(out); script_close(out, "server/tclservClient/%sTclservClientMsgLib.h", module->name); return(0); }
int openprsGen(FILE *out, int genTclservClient) { RQST_LIST *rl; RQST_STR *rqst; POSTER_LIST *post; const char *file_header_op = ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n" ";; Automatically generated by GenoM: do not edit by hand. ;;\n" ";; Copyright (C) 1999-2007 LAAS/CNRS ;;\n" ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"; /* ------------------------------------------------------------ * LES SYM */ script_open(out); /* Entete */ cat_begin(out); fprintf(out, "%s", file_header_op); /* Declaration de chaque requete */ for (rl = requetes; rl != NULL; rl = rl->next) { rqst = rl->rqst; fprintf(out, "declare op_predicate %s-%s\n", module->NAME, rqst->NAME); fprintf(out, "declare op_predicate %s-%s-REPORT\n", module->NAME, rqst->NAME); fprintf(out, "declare op_predicate %s-%s-ASYNC\n", module->NAME, rqst->NAME); fprintf(out, "declare symbol %s_%s\n", module->NAME, rqst->NAME); if (rqst->input) { declareCStruct(out,rqst->input->dcl_nom,1); } if (rqst->output) { declareCStruct(out,rqst->output->dcl_nom,1); } } fprintf(out, "declare op_predicate %s-ABORT\n", module->NAME); fprintf(out, "declare op_predicate %s-ABORT-REPORT\n", module->NAME); fprintf(out, "declare op_predicate %s-ABORT-ASYNC\n", module->NAME); fprintf(out, "declare symbol %s_ABORT\n", module->NAME); for (post = posters; post != NULL; post = post->next) { DCL_NOM_STR *n; STR_REF_LIST *l; fprintf(out, "declare op_predicate READ-%s-%s\n", module->NAME, post->NAME); fprintf(out, "declare op_predicate WRITE-%s-%s\n", module->NAME, post->NAME); fprintf(out, "declare ff %s-%s 0\n", module->NAME, post->NAME); for (l = post->data; l != NULL; l = l->next) { char *NAME; int i; n = l->str_ref->dcl_nom; NAME = xalloc(strlen(n->name) + 1); for (i = 0; n->name[i] != '\0'; NAME[i] = toupper(n->name[i]), i++); fprintf(out, "declare op_predicate READ-%s-%s-%s\n", module->NAME, post->NAME, NAME); fprintf(out, "declare op_predicate WRITE-%s-%s-%s\n", module->NAME, post->NAME, NAME); fprintf(out, "declare ff %s-%s-%s 0\n", module->NAME, post->NAME, NAME); free(NAME); } } cat_end(out); script_close(out, "server/openprs/%sOpenprs.sym", module->name); /* ------------------------------------------------------------ * LES INC */ script_open(out); /* Entete */ cat_begin(out); fprintf(out, "%s", file_header_op); fprintf(out, "include \"@MODULEDATADIR@/%sOpenprs.sym\"\n", module->name); fprintf(out, "load opf \"@MODULEDATADIR@/%sOpenprs.opf\"\n", module->name); cat_end(out); script_close(out, "server/openprs/%sOpenprs.inc.input", module->name); /* ------------------------------------------------------------ * LES MAKEFILES */ openprsMakeGen(out); /* ------------------------------------------------------------ * L'ENCODAGE DES STRUCTURES (openprs -> genom) */ openprsEncodeGen(out); /* ------------------------------------------------------------ * LE DECODAGE DES STRUCTURES (genom -> openprs) */ openprsDecodeGen(out); /* ------------------------------------------------------------ * LES OP pour les requetes et les posters. */ openprsOpGen(out); /* ------------------------------------------------------------ * DECLARATION DES REQUETES, DES POSTERS ET DES ATOMS */ script_open(out); /* Entete du fichier */ subst_begin(out, PROTO_OPENPRS_C); print_sed_subst(out, "module", module->name); print_sed_subst(out, "MODULE", module->NAME); subst_end(out); cat_begin(out); /* Declaration des requetes */ if (!declareRequests(out,genTclservClient)) { return -1; } /* Declaration des posters */ declarePosters(out); /* Declaration des atomes (enum + reports) */ declareMainAndAtoms(out,genTclservClient); /* FIN */ cat_end(out); script_close(out, "server/openprs/%sRequestsOpenprs.c", module->name); /* ------------------------------------------------------------ * LES PROTOS */ script_open(out); subst_begin(out, PROTO_OPENPRS_PROTO); print_sed_subst(out, "module", module->name); print_sed_subst(out, "MODULE", module->NAME); subst_end(out); script_close(out, "server/openprs/%sRequestsOpenprsProto.h", module->name); return 0; } /* openprsGen */
int tclClientGen(FILE *out) { int n; char *buf = NULL, *type = NULL, *var = NULL, *tmp; RQST_LIST *rqst; POSTER_LIST *poster; RQST_INPUT_INFO_LIST *iinfo; /* Client part */ script_open(out); subst_begin(out, PROTO_TCLCLIENT); print_sed_subst(out, "module", module->name); for(rqst = requetes; rqst != NULL; rqst=rqst->next) { bufcat(&buf, "\"%s\" ", rqst->name); } for(poster = posters; poster != NULL; poster=poster->next) { if (poster->data != NULL) { /* SDI Reference list: generate one function per struct */ DCL_NOM_LIST *memberList; for(memberList = poster->type->members; memberList != NULL; memberList = memberList->next) { bufcat(&buf, "\"%s%sPosterRead\" ", poster->name, memberList->dcl_nom->name); } } else { /* User defined type: generate only one function */ bufcat(&buf, "\"%sPosterRead\" ", poster->name); } } print_sed_subst(out, "rqstList", buf); if (buf != NULL) free(buf); buf = NULL; subst_end(out); /* requêtes */ for(rqst = requetes; rqst != NULL; rqst=rqst->next) { subst_begin(out, PROTO_TCLCLIENTRQST); print_sed_subst(out, "module", module->name); print_sed_subst(out, "requestName", rqst->name); if (rqst->rqst->doc == NULL) print_sed_subst(out, "requestDoc", "** undocumented **"); else { tmp = tclQuoteString(rqst->rqst->doc); print_sed_subst(out, "requestDoc", tmp); free(tmp); } /* input ------------------------------------------------------- */ if (rqst->rqst->input == NULL) { print_sed_subst(out, "inputFormat", ""); print_sed_subst(out, "requestUsage", "no arguments"); print_sed_subst(out, "argNumber", "0"); } else { dcl_nom_decl(rqst->rqst->input->dcl_nom, &type, &var); if (type == NULL || var == NULL) { /* should not happen */ fprintf(stderr, "No input type for %s", rqst->name); return -1; } iinfo = rqst->rqst->input_info; tclInputFormatGen(&buf, rqst->rqst->input->dcl_nom->name, rqst->rqst->input->dcl_nom, &iinfo, 0); /* tmp = tclQuoteString(buf); */ print_sed_subst(out, "inputFormat", buf); /* free(tmp); */ if (buf != NULL) free(buf); buf = NULL; n = tclArgNumberGen(rqst->rqst->input->dcl_nom); if (n < 0) { fprintf(stderr, "Error: could not enumerate input of %s.\n", rqst->name); return -1; } print_sed_subst(out, "argNumber", "%d", n); tclUsageGen(&buf, rqst->rqst->input->dcl_nom, NULL); tmp = tclQuoteString(buf); print_sed_subst(out, "requestUsage", tmp); free(tmp); if (buf != NULL) free(buf); buf = NULL; if (type != NULL) free(type); if (var != NULL) free(var); } /* output ------------------------------------------------------ */ if (rqst->rqst->output == NULL) { print_sed_subst(out, "outputFormat", "{} status "); } else { if (rqst->rqst->output->dcl_nom->name == NULL) { /* should not happen */ fprintf(stderr, "No output name for %s", rqst->name); return -1; } bufcat(&buf, "{} status "); tclOutputFormatGen(&buf, rqst->rqst->output->dcl_nom->name, rqst->rqst->output->dcl_nom); tmp = tclQuoteString(buf); print_sed_subst(out, "outputFormat", tmp); free(tmp); if (buf != NULL) free(buf); buf = NULL; } subst_end(out); } /* posters */ for(poster = posters; poster != NULL; poster=poster->next) { DCL_NOM_LIST *memberList; if (poster->data != NULL) { /* SDI Reference list: generate one function per struct */ for(memberList = poster->type->members; memberList != NULL; memberList = memberList->next) { subst_begin(out, PROTO_TCLCLIENTPOSTER); print_sed_subst(out, "module", module->name); bufcat(&buf, "%s%s", poster->name, memberList->dcl_nom->name); print_sed_subst(out, "posterName", buf); if (buf != NULL) free(buf); buf = NULL; bufcat(&buf, "{} status "); tclOutputFormatGen(&buf, memberList->dcl_nom->name, memberList->dcl_nom); tmp = tclQuoteString(buf); print_sed_subst(out, "outputFormat", tmp); free(tmp); if (buf != NULL) free(buf); buf = NULL; tclUsageGen(&buf, memberList->dcl_nom, NULL); tmp = tclQuoteString(buf); print_sed_subst(out, "posterDoc", tmp); free(tmp); if (buf != NULL) free(buf); buf = NULL; subst_end(out); } } else { /* User defined type: generate only one function */ subst_begin(out, PROTO_TCLCLIENTPOSTER); print_sed_subst(out, "module", module->name); print_sed_subst(out, "posterName", poster->name); bufcat(&buf, "{} status "); for(memberList = poster->type->members; memberList != NULL; memberList = memberList->next) { tclOutputFormatGen(&buf, memberList->dcl_nom->name, memberList->dcl_nom); } tmp = tclQuoteString(buf); print_sed_subst(out, "outputFormat", tmp); free(tmp); if (buf != NULL) free(buf); buf = NULL; for(memberList = poster->type->members; memberList != NULL; memberList = memberList->next) { tclUsageGen(&buf, memberList->dcl_nom, NULL); } tmp = tclQuoteString(buf); print_sed_subst(out, "posterDoc", tmp); free(tmp); if (buf != NULL) free(buf); buf = NULL; subst_end(out); } } script_close(out, "server/tcl/%sClient.tcl", module->name); return 0; }