⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pangen2.h

📁 对软件进行可达性测试的软件
💻 H
📖 第 1 页 / 共 2 页
字号:
/***** spin: pangen2.h *****//* Copyright (c) 1989-2007 by Lucent Technologies, Bell Laboratories.     *//* All Rights Reserved.  This software is for educational purposes only.  *//* No guarantee whatsoever is expressed or implied by the distribution of *//* this code.  Permission is given to distribute this code provided that  *//* this introductory message is not removed and no monies are exchanged.  *//* Software written by Gerard J. Holzmann.  For tool documentation see:   *//*             http://spinroot.com/                                       *//* Send all bug-reports and/or questions to: bugs@spinroot.com            *//* (c) 2007: small additions for V5.0 to support multi-core verifications */static char *Nvr1[] = {		/* allow separate compilation */	"#ifdef VERI",	"void",	"check_claim(int st)",	"{",	"	if (st == endclaim)",	"		uerror(\"claim violated!\");",	"	if (stopstate[VERI][st])",	"		uerror(\"end state in claim reached\");",	"}",	"#endif",	0,};static char *Pre0[] = {"#ifdef SC",	"#define _FILE_OFFSET_BITS	64",	/* to allow file sizes greater than 2Gb */"#endif",	"#include <stdio.h>",	"#include <signal.h>",	"#include <stdlib.h>",	"#include <stdarg.h>",	"#include <string.h>",	"#include <ctype.h>",	"#include <errno.h>",	"#if defined(WIN32) || defined(WIN64)",		"#include <time.h>",	"#else",		"#include <unistd.h>",		"#include <sys/times.h>",	"#endif",	"#include <sys/types.h>",	/* defines off_t */	"#include <sys/stat.h>",	"#include <fcntl.h>",	"#define Offsetof(X, Y)	((unsigned long)(&(((X *)0)->Y)))",	"#ifndef max",	"#define max(a,b) (((a)<(b)) ? (b) : (a))",	"#endif",	"#ifndef PRINTF",	"int Printf(const char *fmt, ...); /* prototype only */",	"#endif",	0,};static char *Preamble[] = {	"#ifdef CNTRSTACK",	"#define onstack_now()	(LL[trpt->j6] && LL[trpt->j7])",	"#define onstack_put()	 LL[trpt->j6]++; LL[trpt->j7]++",	"#define onstack_zap()	 LL[trpt->j6]--; LL[trpt->j7]--",	"#endif",	"#if !defined(SAFETY) && !defined(NOCOMP)",		/*		 * V_A identifies states in the current statespace		 * A_V identifies states in the 'other' statespace		 * S_A remembers how many leading bytes in the sv		 * are used for these markers + fairness bits		 */		"#define V_A	(((now._a_t&1)?2:1) << (now._a_t&2))",		"#define A_V	(((now._a_t&1)?1:2) << (now._a_t&2))",		"int	S_A = 0;",	"#else",		"#define V_A	0",		"#define A_V	0",		"#define S_A	0",	"#endif","#ifdef MA",	"#undef onstack_now",	"#undef onstack_put",	"#undef onstack_zap",	"#define onstack_put()	;",	"#define onstack_zap()	gstore((char *) &now, vsize, 4)","#else",	"#if defined(FULLSTACK) && !defined(BITSTATE)",	"#define onstack_put()	trpt->ostate = Lstate",	"#define onstack_zap()	{ \\",	"	if (trpt->ostate) \\",	"		trpt->ostate->tagged = \\",	"		(S_A)? (trpt->ostate->tagged&~V_A) : 0; \\",	"	}",	"#endif","#endif",	"#ifndef NO_V_PROVISO",	"#define V_PROVISO",	"#endif",	"",	"struct H_el {",	"	struct H_el *nxt;",	"#ifdef FULLSTACK",	"	unsigned int tagged;",	"	#if defined(BITSTATE) && !defined(NOREDUCE) && !defined(SAFETY)",		"	unsigned int proviso;", /* uses just 1 bit 0/1 */	"	#endif",	"#endif",	"#if defined(CHECK) || (defined(COLLAPSE) && !defined(FULLSTACK))",	"	unsigned long st_id;",	"#endif",	"#if !defined(SAFETY) || defined(REACH)",	"	unsigned int D;",	"#endif",	"#if NCORE>1",	"	/* could cost 1 extra word: 4 bytes if 32-bit and 8 bytes if 64-bit */",	"	#ifdef V_PROVISO",	"	uchar	cpu_id;		/* id of cpu that created the state */",	"	#endif",	"#endif",	"#ifdef COLLAPSE",	"	#if VECTORSZ<65536",	"	unsigned short ln;",	/* length of vector */	"	#else",	"	unsigned long ln;",	/* length of vector */	"	#endif",	"#endif",	"	unsigned state;",	"} **H_tab, **S_Tab;\n",	"typedef struct Trail {",	"	int   st;	/* current state */",	"	uchar pr;	/* process id */",	"	uchar tau;	/* 8 bit-flags */",	"	uchar o_pm;	/* 8 more bit-flags */",	"#if 0",	"	Meaning of bit-flags:",	"	tau&1   -> timeout enabled",	"	tau&2   -> request to enable timeout 1 level up (in claim)",	"	tau&4   -> current transition is a  claim move",	"	tau&8   -> current transition is an atomic move",	"	tau&16  -> last move was truncated on stack",	"	tau&32  -> current transition is a preselected move",	"	tau&64  -> at least one next state is not on the stack",	"	tau&128 -> current transition is a stutter move",	"	o_pm&1	-> the current pid moved -- implements else",	"	o_pm&2	-> this is an acceptance state",	"	o_pm&4	-> this is a  progress state",	"	o_pm&8	-> fairness alg rule 1 undo mark",	"	o_pm&16	-> fairness alg rule 3 undo mark",	"	o_pm&32	-> fairness alg rule 2 undo mark",	"	o_pm&64 -> the current proc applied rule2",	"	o_pm&128 -> a fairness, dummy move - all procs blocked",	"#endif",	"#ifdef NSUCC",	"	uchar n_succ;	/* nr of successor states */",	"#endif",	"#if defined(FULLSTACK) && defined(MA) && !defined(BFS)",	"	uchar proviso;",	"#endif",	"#ifndef BFS",	"	uchar  o_n, o_ot;	/* to save locals */",	"#endif",	"	uchar  o_m;",	"#ifdef EVENT_TRACE",		"#if nstates_event<256",	"	uchar o_event;",		"#else",	"	unsigned short o_event;",		"#endif",	"#endif",	"	int o_tt;",	"#ifndef BFS",	"	short o_To;",		"#ifdef RANDOMIZE",	"	short oo_i;",		"#endif",	"#endif",	"#if defined(HAS_UNLESS) && !defined(BFS)",	"	int e_state;	/* if escape trans - state of origin */",	"#endif",	"#if (defined(FULLSTACK) && !defined(MA)) || defined(BFS) || (NCORE>1)",	"	struct H_el *ostate;	/* pointer to stored state */",	"#endif",	/* CNTRSTACK when !NOREDUCE && BITSTATE && SAFETY, uses LL[] */	"#if defined(CNTRSTACK) && !defined(BFS)",	"	long	j6, j7;",	"#endif",	"	Trans *o_t;",	/* transition fct, next state   */	"#if defined(BUDGET)",	"	double o_budget;",	"#endif",	"#ifdef HAS_SORTED",	"	short ipt;",	/* insertion slot in q */	"#endif",	"	union {",	"		int oval;",	/* single backup value of variable */	"		int *ovals;",	/* ptr to multiple values */	"	} bup;",	"} Trail;",	"Trail	*trail, *trpt;",	"FILE	*efd;",	"uchar	*this;",	"long	maxdepth=10000;",	"long	omaxdepth=10000;",	"#if NCORE>1",	"long	z_handoff = -1;",	"#endif",	"#ifdef SC",	/* stack cycling */	"char	*stackfile;", 	"#endif",	"uchar	*SS, *LL;",	"uchar	HASH_NR = 0;",	"",	"double memcnt = (double) 0;",	"double memlim = (double) (1<<30);",	"",	"/* for emalloc: */",	"static char *have;",	"static long left = 0L;",	"static double fragment = (double) 0;",	"static unsigned long grow;",	"",	"unsigned int HASH_CONST[] = {",	"	/* asuming 4 bytes per int */",	"	0x88888EEF,	0x00400007,",	"	0x04c11db7,	0x100d4e63,",	"	0x0fc22f87,	0x3ff0c3ff,",	"	0x38e84cd7,	0x02b148e9,",	"	0x98b2e49d,	0xb616d379,",	"	0xa5247fd9,	0xbae92a15,",	"	0xb91c8bc5,	0x8e5880f3,",	"	0xacd7c069,	0xb4c44bb3,",	"	0x2ead1fb7,	0x8e428171,",	"	0xdbebd459,	0x828ae611,",	"	0x6cb25933,	0x86cdd651,",	"	0x9e8f5f21,	0xd5f8d8e7,",	"	0x9c4e956f,	0xb5cf2c71,",	"	0x2e805a6d,	0x33fc3a55,",	"	0xaf203ed1,	0xe31f5909,",	"	0x5276db35,	0x0c565ef7,",	"	0x273d1aa5,	0x8923b1dd,",	"	0",	"};",	"#if NCORE>1",	"extern int core_id;",	"#endif",	"long	mreached=0;",	"int done=0, errors=0, Nrun=1;",	"int	c_init_done=0;",	"char	*c_stack_start = (char *) 0;",	"double	nstates=0, nlinks=0, truncs=0, truncs2=0;",	"double	nlost=0, nShadow=0, hcmp=0, ngrabs=0;",	"#if defined(BUDGET)",	"double budget=0.0;",	"#endif",	"int	c_init_run;",	"#ifdef BFS",	"double midrv=0, failedrv=0, revrv=0;",	"#endif",	"unsigned long	nr_states=0; /* nodes in DFA */",	"long	Fa=0, Fh=0, Zh=0, Zn=0;",	"long	PUT=0, PROBE=0, ZAPS=0;",	"long	Ccheck=0, Cholds=0;",	"int	a_cycles=0, upto=1, strict=0, verbose = 0, signoff = 0;",	"#ifdef HAS_CODE",	"int	gui = 0, coltrace = 0, readtrail = 0, whichtrail = 0, onlyproc = -1, silent = 0;",	"#endif",	"int	state_tables=0, fairness=0, no_rck=0, Nr_Trails=0;",	"char	simvals[128];",	"#ifndef INLINE",	"int	TstOnly=0;",	"#endif",	"unsigned long mask, nmask;",	"#ifdef BITSTATE",	"int	ssize=23;	/* 1 Mb */",	"#else",	"int	ssize=19;	/* 512K slots */",	"#endif",	"int	hmax=0, svmax=0, smax=0;",	"int	Maxbody=0, XX;",	"uchar	*noptr;	/* used by macro Pptr(x) */",	"#ifdef VAR_RANGES",	"void logval(char *, int);",	"void dumpranges(void);",	"#endif",	"#ifdef MA",	"#define INLINE_REV",	"extern void dfa_init(unsigned short);",	"extern int  dfa_member(unsigned long);",	"extern int  dfa_store(uchar *);",	"unsigned int	maxgs = 0;",	"#endif",	"State	comp_now;	/* compressed state vector */",	"State	comp_msk;",	"uchar	*Mask = (uchar *) &comp_msk;",	"#ifdef COLLAPSE",	"State	comp_tmp;",	"static char	*scratch = (char *) &comp_tmp;",	"#endif",	"Stack	*stack; 	/* for queues, processes */",	"Svtack	*svtack;	/* for old state vectors */",	"#ifdef BITSTATE",	"static unsigned int hfns = 3;	/* new default */",	"#endif",	"static unsigned long j1;",	"static unsigned long K1, K2;",	"static unsigned long j2, j3, j4;",	"#ifdef BITSTATE",#ifndef POWOW	"static long udmem;",#endif	"#endif",	"static long	A_depth = 0;",	"long	depth = 0;",	/* not static to support -S2 option, but possible clash with embedded code */	"#if NCORE>1",	"long nr_handoffs = 0;",	"#endif",	"static uchar	warned = 0, iterative = 0, like_java = 0, every_error = 0;",	"static uchar	noasserts = 0, noends = 0, bounded = 0;",	"#if SYNC>0 && ASYNC==0",	"void set_recvs(void);",	"int  no_recvs(int);",	"#endif",	"#if SYNC",	"#define IfNotBlocked	if (boq != -1) continue;",	"#define UnBlock     	boq = -1",	"#else",	"#define IfNotBlocked	/* cannot block */",	"#define UnBlock     	/* don't bother */",	"#endif\n",	"#ifdef BITSTATE",	"int (*bstore)(char *, int);",	"int bstore_reg(char *, int);",#ifndef POWOW	"int bstore_mod(char *, int);",#endif	"#endif",	"void active_procs(void);",	"void cleanup(void);",	"void do_the_search(void);",	"void find_shorter(int);",	"void iniglobals(void);",	"void stopped(int);",	"void wrapup(void);",	"int *grab_ints(int);",	"void ungrab_ints(int *, int);",	0,};static char *Tail[] = {	"Trans *",	"settr(	int t_id, int a, int b, int c, int d,",	"	char *t, int g, int tpe0, int tpe1)",	"{	Trans *tmp = (Trans *) emalloc(sizeof(Trans));\n",	"	tmp->atom  = a&(6|32);	/* only (2|8|32) have meaning */",	"	if (!g) tmp->atom |= 8;	/* no global references */",	"	tmp->st    = b;",	"	tmp->tpe[0] = tpe0;",	"	tmp->tpe[1] = tpe1;",	"	tmp->tp    = t;",	"	tmp->t_id  = t_id;",	"	tmp->forw  = c;",	"	tmp->back  = d;",	"	return tmp;",	"}\n",	"Trans *",	"cpytr(Trans *a)",	"{	Trans *tmp = (Trans *) emalloc(sizeof(Trans));\n",	"	int i;",	"	tmp->atom  = a->atom;",	"	tmp->st    = a->st;",	"#ifdef HAS_UNLESS",	"	tmp->e_trans = a->e_trans;",	"	for (i = 0; i < HAS_UNLESS; i++)",	"		tmp->escp[i] = a->escp[i];",	"#endif",	"	tmp->tpe[0] = a->tpe[0];",	"	tmp->tpe[1] = a->tpe[1];",	"	for (i = 0; i < 6; i++)",	"	{	tmp->qu[i] = a->qu[i];",	"		tmp->ty[i] = a->ty[i];",	"	}",	"	tmp->tp    = (char *) emalloc(strlen(a->tp)+1);",	"	strcpy(tmp->tp, a->tp);",	"	tmp->t_id  = a->t_id;",	"	tmp->forw  = a->forw;",	"	tmp->back  = a->back;",	"	return tmp;",	"}\n",	"#ifndef NOREDUCE",	"int",	"srinc_set(int n)",	"{	if (n <= 2) return LOCAL;",	"	if (n <= 2+  DELTA) return Q_FULL_F; /* 's' or nfull  */",	"	if (n <= 2+2*DELTA) return Q_EMPT_F; /* 'r' or nempty */",	"	if (n <= 2+3*DELTA) return Q_EMPT_T; /* empty */",	"	if (n <= 2+4*DELTA) return Q_FULL_T; /* full  */",	"	if (n ==   5*DELTA) return GLOBAL;",	"	if (n ==   6*DELTA) return TIMEOUT_F;",	"	if (n ==   7*DELTA) return ALPHA_F;",	"	Uerror(\"cannot happen srinc_class\");",	"	return BAD;",	"}",	"int",	"srunc(int n, int m)",	"{	switch(m) {",	"	case Q_FULL_F: return n-2;",	"	case Q_EMPT_F: return n-2-DELTA;",	"	case Q_EMPT_T: return n-2-2*DELTA;",	"	case Q_FULL_T: return n-2-3*DELTA;",	"	case ALPHA_F:",	"	case TIMEOUT_F: return 257; /* non-zero, and > MAXQ */",	"	}",	"	Uerror(\"cannot happen srunc\");",	"	return 0;",	"}",	"#endif",	"int cnt;",	"#ifdef HAS_UNLESS",	"int",	"isthere(Trans *a, int b)", /* is b already in a's list? */	"{	Trans *t;",	"	for (t = a; t; t = t->nxt)",	"		if (t->t_id == b)",	"			return 1;",	"	return 0;",	"}",	"#endif",	"#ifndef NOREDUCE",	"int",	"mark_safety(Trans *t) /* for conditional safety */",	"{	int g = 0, i, j, k;",	"",	"	if (!t) return 0;",	"	if (t->qu[0])",	"		return (t->qu[1])?2:1;	/* marked */",	"",	"	for (i = 0; i < 2; i++)",	"	{	j = srinc_set(t->tpe[i]);",	"		if (j >= GLOBAL && j != ALPHA_F)",	"			return -1;",	"		if (j != LOCAL)",	"		{	k = srunc(t->tpe[i], j);",	"			if (g == 0",	"			||  t->qu[0] != k",	"			||  t->ty[0] != j)",	"			{	t->qu[g] = k;",	"				t->ty[g] = j;",	"				g++;",	"	}	}	}",	"	return g;",	"}",	"#endif",	"void",	"retrans(int n, int m, int is, short srcln[], uchar reach[], uchar lstate[])",	"	/* process n, with m states, is=initial state */",	"{	Trans *T0, *T1, *T2, *T3;",	"	int i, k;",	"#ifndef NOREDUCE",	"	int g, h, j, aa;",	"#endif",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -