2008-05-29 Guillaume SADEGH <sadegh@lrde.epita.fr> * iface/nips/nips.cc, iface/nips/nips.hh, iface/nips/common.cc, iface/nips/common.hh, iface/nips/Makefile.am: TGBA implementation with the NIPS library. * iface/nips/emptiness_check.cc: Emptiness check on a Promela interface. * iface/nips/dottynips.cc: Dot printer on the NIPS interface. * iface/nips/compile.sh: Add. Wrapper around nips compiler to compile Promela to NIPS bytecode. * iface/nips/nips_vm,iface/nips/nips_vm/bytecode.h, iface/nips/nips_vm/ChangeLog, iface/nips/nips_vm/COPYING, iface/nips/nips_vm/hashtab.c, iface/nips/nips_vm/hashtab.h, iface/nips/nips_vm/INSTALL, iface/nips/nips_vm/instr.c, iface/nips/nips_vm/instr.h, iface/nips/nips_vm/instr_step.c, iface/nips/nips_vm/instr_step.h, iface/nips/nips_vm/instr_tools.c, iface/nips/nips_vm/instr_tools.h, iface/nips/nips_vm/instr_wrap.c, iface/nips/nips_vm/instr_wrap.h, iface/nips/nips_vm/interactive.c, iface/nips/nips_vm/interactive.h, iface/nips/nips_vm/main.c, iface/nips/nips_vm/Makefile, iface/nips/nips_vm/Makefile.am, iface/nips/nips_vm/nips_asm_help.pl, iface/nips/nips_vm/nips_asm_instr.pl, iface/nips/nips_vm/nips_asm.pl, iface/nips/nips_vm/nips_disasm.pl, iface/nips/nips_vm/nipsvm.c, iface/nips/nips_vm/nipsvm.h, iface/nips/nips_vm/README, iface/nips/nips_vm/rt_err.c, iface/nips/nips_vm/rt_err.h, iface/nips/nips_vm/search.c, iface/nips/nips_vm/search.h, iface/nips/nips_vm/split.c, iface/nips/nips_vm/split.h, iface/nips/nips_vm/state.c, iface/nips/nips_vm/state.h, iface/nips/nips_vm/state_inline.h, iface/nips/nips_vm/state_parts.c, iface/nips/nips_vm/state_parts.h, iface/nips/nips_vm/timeval.h, iface/nips/nips_vm/tools.h: NIPS VM added to the SPOT distribution. * configure.ac, iface/Makefile.am: Build system updated for the NIPS front-end.
77 lines
3.3 KiB
C
77 lines
3.3 KiB
C
/* NIPS VM - New Implementation of Promela Semantics Virtual Machine
|
|
* Copyright (C) 2005: Stefan Schuermans <stefan@schuermans.info>
|
|
* Michael Weber <michaelw@i2.informatik.rwth-aachen.de>
|
|
* Lehrstuhl fuer Informatik II, RWTH Aachen
|
|
* Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
|
|
*/
|
|
|
|
#ifndef INC_instr_wrap
|
|
#define INC_instr_wrap
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "bytecode.h"
|
|
#include "instr.h"
|
|
#include "state.h"
|
|
|
|
|
|
// successor state structure for instr_succ_buf_ex
|
|
typedef struct t_instr_succ_buf_ex_state
|
|
{
|
|
st_global_state_header *p_state; // the successor state
|
|
uint8_t label_1st; // label of STEP command of 1st part of sync. comm. (unused if ! sync)
|
|
uint8_t label; // label of STEP command (of 2nd part of sync. comm. if sync)
|
|
t_flag_reg flag_reg_1st; // flag register value returned by 1st part of sync. comm. (unused if ! sync)
|
|
t_flag_reg flag_reg; // flag register value returned (by 2nd part of sync. comm. if sync)
|
|
unsigned int succ_cb_flags; // boolean flags (if sync. comm. took place, if timeout occured, ...)
|
|
char *p_output; // pointer to 0-terminated output string (if process_output in instr_succ_buf_ex call was != 0)
|
|
} st_instr_succ_buf_ex_state;
|
|
|
|
|
|
// initialize successor state generation context for instr_succ_buf
|
|
// must be called before instr_succ_buf (only 1 time, not every time)
|
|
extern void instr_succ_buf_prepare( st_instr_succ_context *succ_ctx,
|
|
st_bytecode *bytecode );
|
|
|
|
|
|
// generate successor states in a buffer
|
|
// pointers to states are put into array pointed to by p_succ
|
|
// *pp_buf points to memory area of length *p_len to use for successor states
|
|
// returns number of successor states
|
|
extern unsigned long instr_succ_buf( st_instr_succ_context *succ_ctx, // must be initialized with instr_succ_buf_prepare
|
|
st_global_state_header *p_glob, // state to start with
|
|
st_global_state_header **p_succ, unsigned long succ_max,
|
|
char **pp_buf, unsigned long *p_buf_len );
|
|
|
|
|
|
// initialize successor state generation context for instr_succ_buf_ex
|
|
// must be called before instr_succ_buf_ex (only 1 time, not every time)
|
|
extern void instr_succ_buf_ex_prepare( st_instr_succ_context *succ_ctx,
|
|
st_bytecode *bytecode );
|
|
|
|
|
|
// generate successor states and extended information in a buffer
|
|
// state structure array succ is filled with results
|
|
// *pp_buf points to memory area of length *p_len to use for successor states and output strings
|
|
// returns number of successor states
|
|
extern unsigned long instr_succ_buf_ex( st_instr_succ_context *succ_ctx, // must be initialized with instr_succ_buf_ex_prepare
|
|
st_global_state_header *p_glob, // state to start with
|
|
t_flag_reg flag_reg, // value to put into flag register
|
|
int process_output, // if to process output (from print instructions)
|
|
st_instr_succ_buf_ex_state *succ, unsigned long succ_max,
|
|
char **pp_buf, unsigned long *p_buf_len );
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
|
|
#endif // #ifndef INC_instr_wrap
|