コード例 #1
0
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 */
コード例 #2
0
ファイル: fastmem.c プロジェクト: bloat/emacs-glulx
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 */
コード例 #3
0
int
notify_group_exec(vrrp_sgroup_t * vgroup, int state)
{
	char *script = get_gscript(vgroup, state);
	char *gscript = get_ggscript(vgroup);
	int ret = 0;

	/* Launch the notify_* script */
	if (script && script_open(script)) {
		notify_exec(script);
		ret = 1;
	}

	/* Launch the generic notify script */
	if (gscript && script_open_litteral(gscript)) {
		notify_script_exec(gscript, "GROUP", state, vgroup->gname, 0);
		ret = 1;
	}

	return ret;
}
コード例 #4
0
int
notify_instance_exec(vrrp_t * vrrp, int state)
{
	char *script = get_iscript(vrrp, state);
	char *gscript = get_igscript(vrrp);
	int ret = 0;

	/* Launch the notify_* script */
	if (script && script_open(script)) {
		notify_exec(script);
		ret = 1;
	}

	/* Launch the generic notify script */
	if (gscript && script_open_litteral(gscript)) {
		notify_script_exec(gscript, "INSTANCE", state, vrrp->iname,
				   vrrp->effective_priority);
		ret = 1;
	}

	return ret;
}
コード例 #5
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;
	}
}
コード例 #6
0
ファイル: pythonInterfaceGen.c プロジェクト: openrobots/genom
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;
}
コード例 #7
0
ファイル: typeGen.c プロジェクト: openrobots/genom
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);
}
コード例 #8
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);
}
コード例 #9
0
ファイル: openprsGen.c プロジェクト: openrobots/genom
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 */
コード例 #10
0
ファイル: tclClientGen.c プロジェクト: openrobots/genom
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;
}