Commit bdfbf9c5 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

* wrap/python/cgi/Makefile.am, wrap/python/cgi/ltl2tgba.in,

wrap/python/cgi/README: New files.
* wrap/python/Makefile.am (SUBDIRS): Add cgi.
* configure.ac: Output wrap/python/cgi/Makefile.
parent 4d819969
2003-08-05 Alexandre Duret-Lutz <aduret@src.lip6.fr>
* wrap/python/cgi/Makefile.am, wrap/python/cgi/ltl2tgba.in,
wrap/python/cgi/README: New files.
* wrap/python/Makefile.am (SUBDIRS): Add cgi.
* configure.ac: Output wrap/python/cgi/Makefile.
* wrap/python/spot.i: Add an ostringstream emulation.
2003-08-04 Alexandre Duret-Lutz <aduret@src.lip6.fr>
......
......@@ -44,6 +44,7 @@ AC_CONFIG_FILES([
src/misc/Makefile
wrap/Makefile
wrap/python/Makefile
wrap/python/cgi/Makefile
wrap/python/tests/Makefile
])
AC_CONFIG_FILES([wrap/python/tests/run], [chmod +x wrap/python/tests/run])
......
SUBDIRS = tests
SUBDIRS = cgi tests
AM_CPPFLAGS = -I$(PYTHONINC) -I$(top_srcdir)/src $(BUDDY_CPPFLAGS)
......
Makefile.in
Makefile
ltl2tgba.py
nodist_noinst_SCRIPTS = ltl2tgba.py
EXTRA_DIST = $(srcdir)/ltl2tgba.in README
ltl2tgba.py: $(srcdir)/ltl2tgba.in
sed -e 's|[@]PYTHON[@]|@PYTHON@|g' \
-e 's|[@]pythondir[@]|@pythondir@|g' \
-e 's|[@]PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g' \
<$(srcdir)/ltl2tgba.in >ltl2tgba.tmp
chmod +x ltl2tgba.tmp
mv -f ltl2tgba.tmp $@
ltl2tgba.py is a CGI script that translate user-supplied LTL formulae
to Transition-based Generalized Büchi Automata.
You have to install the script yourself if you want to test it.
1) Install Spot first (run `make install' from the top-level).
The CGI scripts uses the Python bindings and assume they
have been installed. Near the top of the script, you
should see a call to sys.path.insert(), with the expected
location og the Python bindings for spot. This path was
configured from ./configure's arguments and you should not
have to fiddle with it. I'm mentionning it just in case.
2) Copy ltl2tgba.py to some place were CGI execution is allowed.
Depending on your HTTP server's configuration, you may have
to rename the script as ltl2tgba.cgi or something else, so
that the server accept to run it.
Apache users in trouble should look at the following options
before digging the Apache manual deeper. These can go
in a .htaccess file (if allowed).
# Treat *.py files as CGI scripts
AddHandle cgi-script .py
# Allow CGI execution in some directory.
Options +ExecCGI
3) In the directory where you have installed ltl2tgba.py,
create a subdirectory called spotimg/. This is where
the script will output its images and other temporary
files. (If you want to change this name, see the imgdir
variable at the top of the script.)
This directory must be writable by the Unix user that
will run the script when the HTTP server processes the
request.
ltl2tgba purges old files (>10min) from this directory
each time it runs.
#!@PYTHON@
import sys
import os
import cgi
import cgitb; cgitb.enable()
sys.path.insert(0, '@pythondir@')
# Directory for temporary files (images and other auxiliary files).
imgdir = 'spotimg'
# Cleanup stale files from our image directory.
os.system('find ' + imgdir + ' -type f -amin +10 -print | xargs rm -f')
myself = os.environ['SCRIPT_NAME'];
form = cgi.FieldStorage()
filled = form.has_key('formula')
# FIXME: This assumes Apache.
uid = os.environ['UNIQUE_ID'];
imgprefix = imgdir + '/' + uid
def escaped_print_dot(dict, what):
print '<pre>'; sys.stdout.flush()
s = spot.ostringstream()
spot.bdd_print_dot(s, dict, what)
print cgi.escape(s.str())
del s
print '</pre>'; sys.stdout.flush()
def escaped_print_set(dict, what):
print '<pre>'; sys.stdout.flush()
s = spot.ostringstream()
spot.bdd_print_set(s, dict, what)
print cgi.escape(s.str())
del s
print '</pre>'; sys.stdout.flush()
print "Content-Type: text/html"
print
os.close(sys.stderr.fileno())
os.dup2(sys.stdout.fileno(), sys.stderr.fileno())
import spot
print "<TITLE>LTL-to-Bchi test</TITLE>"
print "<H1>Input</H1>"
formula = form.getfirst('formula', '')
options = [
('show_parse', 'show traces during parsing', 0),
('show_automaton_dot', 'print Bchi automaton as .dot', 0),
('show_automaton_gif', 'draw Bchi automaton', 1),
('show_degen_dot', 'print degeneralized Bchi automaton as .dot', 0),
('show_degen_gif', 'draw degeneralized Bchi automaton', 0),
('show_dictionnay', 'print BDD dictionary', 0),
('show_relation_dot', 'print the transition relation as .dot', 0),
('show_relation_set', 'print the transition relation as a BDD set', 0),
('show_relation_gif', 'draw the transition relation', 0),
('show_acceptance_dot', 'print the acceptance relation as .dot' , 0),
('show_acceptance_set', 'print the acceptance relation as a BDD set', 0),
('show_acceptance_gif', 'draw the acceptance relation', 0),
('show_lbtt', 'convert automaton for LBTT', 0),
]
print """<FORM action="%s" method="post"><P>
Formula to translate: <INPUT type="text" name="formula" value="%s"><BR>
Options:<TABLE><TR><TD>""" % (myself, formula)
for opt, desc, arg, in options:
if formula:
val = int(form.getfirst(opt, 0))
else:
val = arg
if val:
str = "checked"
else:
str = ""
globals()[opt] = val
print '<INPUT type="checkbox" name="%s" value="1" %s>%s<br>' % (opt, str,
desc)
print '</TD></TR></TABLE><INPUT type="submit" value="Send"></FORM>'
if not filled:
sys.exit(0)
print "<hr><H1>Output</H1>"
env = spot.default_environment.instance()
print "<H2>LTL Formula</H2>"
if show_parse: print '<pre>'
sys.stdout.flush()
sys.stderr.flush()
pel = spot.empty_parse_error_list()
f = spot.parse(formula, pel, env, show_parse)
if show_parse: print '</pre>'
print '<font color="red"><pre>'
err = spot.format_parse_errors(spot.get_cout(), formula, pel)
print '</pre></font>'
if not f:
print '<p><b>Aborting...</b></p>'
sys.exit(0)
if err:
print '<p><b>Continuing anyway...</b></p>'
print "<p>Formula is<code>", f, "</code></p>"
print '<H2>Automaton</H2>'
dict = spot.bdd_dict()
print '<p>Building automaton...',
sys.stdout.flush()
concrete = spot.ltl_to_tgba(f, dict)
print 'done.</p>'
sys.stdout.flush()
if show_automaton_dot:
print '<pre>'; sys.stdout.flush()
s = spot.ostringstream()
spot.dotty_reachable(s, concrete)
print cgi.escape(s.str())
del s
print '</pre>'; sys.stdout.flush()
if show_automaton_gif:
outfile = spot.ofstream(imgprefix + '-a.dot')
spot.dotty_reachable(outfile, concrete)
del outfile
os.spawnlp(os.P_WAIT, 'dot', 'dot', '-Tgif', '-o',
imgprefix + '-a.gif', imgprefix + '-a.dot')
print '<img src="' + imgprefix + '-a.gif">'
if show_degen_dot or show_degen_gif:
print '<H3>Degeneralized automaton</H3>'
degen = spot.tgba_tba_proxy(concrete)
if show_degen_dot:
print '<pre>'; sys.stdout.flush()
s = spot.ostringstream()
spot.dotty_reachable(s, degen)
print cgi.escape(s.str())
del s
print '</pre>'; sys.stdout.flush()
if show_degen_gif:
outfile = spot.ofstream(imgprefix + '-d.dot')
spot.dotty_reachable(outfile, degen)
del outfile
os.spawnlp(os.P_WAIT, 'dot', 'dot', '-Tgif', '-o',
imgprefix + '-d.gif', imgprefix + '-d.dot')
print '<img src="' + imgprefix + '-d.gif">'
else:
degen = 0
if show_dictionnay:
print '<H3>BDD dictionary</H3>'
print '<pre>'
sys.stdout.flush()
concrete.get_dict().dump(spot.get_cout())
print '</pre>'
if show_relation_dot or show_relation_set or show_relation_gif:
print '<H3>Transition relation</H3>'
if show_relation_dot:
escaped_print_dot(concrete.get_dict(),
concrete.get_core_data().relation)
if show_relation_set:
escaped_print_set(concrete.get_dict(),
concrete.get_core_data().relation)
if show_relation_gif:
outfile = spot.ofstream(imgprefix + '-b.dot')
spot.bdd_print_dot(outfile, concrete.get_dict(),
concrete.get_core_data().relation)
del outfile
os.spawnlp(os.P_WAIT, 'dot', 'dot', '-Tgif', '-o',
imgprefix + '-b.gif', imgprefix + '-b.dot')
print '<img src="' + imgprefix + '-b.gif">'
if show_acceptance_dot or show_acceptance_set or show_acceptance_gif:
print '<H3>Acceptance relation</H3>'
if show_acceptance_dot:
escaped_print_dot(concrete.get_dict(),
concrete.get_core_data().accepting_conditions)
if show_acceptance_set:
escaped_print_set(concrete.get_dict(),
concrete.get_core_data().accepting_conditions)
if show_acceptance_gif:
outfile = spot.ofstream(imgprefix + '-c.dot')
spot.bdd_print_dot(outfile, concrete.get_dict(),
concrete.get_core_data().accepting_conditions)
del outfile
os.spawnlp(os.P_WAIT, 'dot', 'dot', '-Tgif', '-o',
imgprefix + '-c.gif', imgprefix + '-c.dot')
print '<img src="' + imgprefix + '-c.gif">'
if show_lbtt:
print '<H3>LBTT conversion</H3>'
if degen:
print '<H4>Conversion of the generalized automaton</H4>'
print '<pre>'
sys.stdout.flush()
spot.lbtt_reachable(spot.get_cout(), concrete)
print '</pre>'
if degen:
print '<H4>Conversion of the degeneralized automaton</H4>'
print '<pre>'
sys.stdout.flush()
spot.lbtt_reachable(spot.get_cout(), degen)
print '</pre>'
sys.stdout.flush()
# Make sure degen is cleared before concrete.
del degen
del concrete
print '<hr>'
print 'Spot @PACKAGE_VERSION@'
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment