spot/iface/nips/nips_vm/nips_asm_help.pl
Guillaume Sadegh bc5f13bb4e NIPS VM added to the SPOT distribution.
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.
2008-05-30 13:22:00 +02:00

148 lines
2.9 KiB
Perl
Executable file

# NIPS Asm - New Implementation of Promela Semantics Assembler
# 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
use strict;
# escape a string
sub escape_str
{
my $str = shift;
$str =~ s/\0/\\0/g;
$str =~ s/\r/\\r/g;
$str =~ s/\n/\\n/g;
$str =~ s/\t/\\t/g;
$str =~ s/"/\\"/g;
$str =~ s/'/\\'/g;
my $i;
for( $i = 1; $i < 32; $i++ )
{
my $c = pack( "C", $i );
my $h = sprintf( "%02X", $i );
$str =~ s/$c/\\x$h/g;
}
return $str;
}
# convert a byte, a word, a dword to binary
sub byte2bin
{
my $value = shift;
return pack( "C", $value & 0xFF );
}
sub word2bin
{
my $value = shift;
return pack( "CC", ($value >> 8) & 0xFF,
$value & 0xFF );
}
sub dword2bin
{
my $value = shift;
return pack( "CCCC", ($value >> 24) & 0xFF,
($value >> 16) & 0xFF,
($value >> 8) & 0xFF,
$value & 0xFF );
}
# convert a byte, a word, a dword from binary
sub bin2byte
{
my @data = unpack( "C", shift );
return @data[0];
}
sub bin2word
{
my @data = unpack( "CC", shift );
return @data[0] << 8 | @data[1];
}
sub bin2dword
{
my @data = unpack( "CCCC", shift );
return @data[0] << 24 | @data[1] << 16 | @data[2] << 8 | @data[3];
}
# write a byte, a word, a dword to a binary file
sub wr_byte
{
my $filehandle = shift;
my $byte = shift;
print $filehandle byte2bin( $byte );
}
sub wr_word
{
my $filehandle = shift;
my $word = shift;
print $filehandle word2bin( $word );
}
sub wr_dword
{
my $filehandle = shift;
my $dword = shift;
print $filehandle dword2bin( $dword );
}
# read a byte, a word, a dword from a binary file
sub rd_byte
{
my $filehandle = shift;
my $data;
read $filehandle, $data, 1;
return bin2byte( $data );
}
sub rd_word
{
my $filehandle = shift;
my $data;
read $filehandle, $data, 2;
return bin2word( $data );
}
sub rd_dword
{
my $filehandle = shift;
my $data;
read $filehandle, $data, 4;
return bin2dword( $data );
}
# write a string to a binary file
sub wr_string
{
my $filehandle = shift;
my $str = shift;
wr_word( $filehandle, length( $str ) + 1 );
print $filehandle $str . "\0";
}
# read a string from a binary file
sub rd_string
{
my $filehandle = shift;
my $str_sz = rd_word( $filehandle );
my $str;
read $filehandle, $str, $str_sz;
$str =~ s/\0.*$//;
return $str;
}
# write size to binary file
sub wr_size_tmp
{
my $filehandle = shift;
my $pos = tell $filehandle;
wr_dword( $filehandle, 0 );
return $pos;
}
sub wr_size_fillin
{
my $filehandle = shift;
my $sz_pos = shift;
my $pos = tell $filehandle;
seek $filehandle, $sz_pos, 0;
wr_dword( $filehandle, $pos - $sz_pos - 4 );
seek $filehandle, $pos, 0;
}
1;