summaryrefslogtreecommitdiff
path: root/src/mem/slicc/generator
diff options
context:
space:
mode:
authorNathan Binkert <nate@binkert.org>2009-05-11 10:38:43 -0700
committerNathan Binkert <nate@binkert.org>2009-05-11 10:38:43 -0700
commit2f30950143cc70bc42a3c8a4111d7cf8198ec881 (patch)
tree708f6c22edb3c6feb31dd82866c26623a5329580 /src/mem/slicc/generator
parentc70241810d4e4f523f173c1646b008dc40faad8e (diff)
downloadgem5-2f30950143cc70bc42a3c8a4111d7cf8198ec881.tar.xz
ruby: Import ruby and slicc from GEMS
We eventually plan to replace the m5 cache hierarchy with the GEMS hierarchy, but for now we will make both live alongside eachother.
Diffstat (limited to 'src/mem/slicc/generator')
-rw-r--r--src/mem/slicc/generator/fileio.cc66
-rw-r--r--src/mem/slicc/generator/fileio.hh46
-rw-r--r--src/mem/slicc/generator/html_gen.cc125
-rw-r--r--src/mem/slicc/generator/html_gen.hh49
-rw-r--r--src/mem/slicc/generator/mif_gen.cc1718
-rw-r--r--src/mem/slicc/generator/mif_gen.hh45
6 files changed, 2049 insertions, 0 deletions
diff --git a/src/mem/slicc/generator/fileio.cc b/src/mem/slicc/generator/fileio.cc
new file mode 100644
index 000000000..1707e5b7a
--- /dev/null
+++ b/src/mem/slicc/generator/fileio.cc
@@ -0,0 +1,66 @@
+
+/*
+ * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * fileio.C
+ *
+ * Description: See fileio.h
+ *
+ * $Id: fileio.C,v 3.3 2003/07/10 18:08:08 milo Exp $
+ *
+ * */
+
+#include "fileio.hh"
+
+void conditionally_write_file(string filename, ostringstream& sstr)
+{
+ ofstream out;
+ ifstream in;
+ string input_file;
+
+ // Read in the file if it exists
+ in.open(filename.c_str());
+ char c;
+ while (in.get(c)) {
+ input_file += c;
+ }
+ in.close();
+
+ // Check to see if the file is the same as what we want to write
+ if (input_file != sstr.str()) {
+ cout << " Overwriting file: " << filename << endl;
+ // Overwrite the old file with the new file
+ out.open(filename.c_str());
+ out << sstr.str();
+ out.close();
+ } else {
+ //cout << " Keeping old file: " << filename << endl;
+ }
+}
+
diff --git a/src/mem/slicc/generator/fileio.hh b/src/mem/slicc/generator/fileio.hh
new file mode 100644
index 000000000..3cca7ccaa
--- /dev/null
+++ b/src/mem/slicc/generator/fileio.hh
@@ -0,0 +1,46 @@
+
+/*
+ * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * fileio.h
+ *
+ * Description:
+ *
+ * $Id: fileio.h,v 3.2 2003/02/24 20:54:25 xu Exp $
+ *
+ * */
+
+#ifndef FILEIO_H
+#define FILEIO_H
+
+#include "slicc_global.hh"
+
+void conditionally_write_file(string filename, ostringstream& sstr);
+
+#endif //FILEIO_H
diff --git a/src/mem/slicc/generator/html_gen.cc b/src/mem/slicc/generator/html_gen.cc
new file mode 100644
index 000000000..3d17018e1
--- /dev/null
+++ b/src/mem/slicc/generator/html_gen.cc
@@ -0,0 +1,125 @@
+
+/*
+ * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * html_gen.C
+ *
+ * Description: See html_gen.h
+ *
+ * $Id: html_gen.C,v 3.4 2004/01/31 20:46:50 milo Exp $
+ *
+ * */
+
+#include "html_gen.hh"
+#include "fileio.hh"
+#include "SymbolTable.hh"
+
+string formatHTMLShorthand(const string shorthand);
+
+
+void createHTMLSymbol(const Symbol& sym, string title, ostream& out)
+{
+ out << "<HTML><BODY><BIG>" << endl;
+ out << title << ": " << endl;
+ out << formatHTMLShorthand(sym.getShorthand()) << " - ";
+ out << sym.getDescription();
+ out << "</BIG></BODY></HTML>" << endl;
+}
+
+void createHTMLindex(string title, ostream& out)
+{
+ out << "<html>" << endl;
+ out << "<head>" << endl;
+ out << "<title>" << title << "</title>" << endl;
+ out << "</head>" << endl;
+ out << "<frameset rows=\"*,30\">" << endl;
+ Vector<StateMachine*> machine_vec = g_sym_table.getStateMachines();
+ if (machine_vec.size() > 1) {
+ string machine = machine_vec[0]->getIdent();
+ out << " <frame name=\"Table\" src=\"" << machine << "_table.html\">" << endl;
+ } else {
+ out << " <frame name=\"Table\" src=\"empty.html\">" << endl;
+ }
+
+ out << " <frame name=\"Status\" src=\"empty.html\">" << endl;
+ out << "</frameset>" << endl;
+ out << "</html>" << endl;
+}
+
+string formatHTMLShorthand(const string shorthand)
+{
+ string munged_shorthand = "";
+ bool mode_is_normal = true;
+
+ // -- Walk over the string, processing superscript directives
+ for(unsigned int i = 0; i < shorthand.length(); i++) {
+ if(shorthand[i] == '!') {
+ // -- Reached logical end of shorthand name
+ break;
+ } else if( shorthand[i] == '_') {
+ munged_shorthand += " ";
+ } else if( shorthand[i] == '^') {
+ // -- Process super/subscript formatting
+ mode_is_normal = !mode_is_normal;
+ if(mode_is_normal) {
+ // -- Back to normal mode
+ munged_shorthand += "</SUP>";
+ } else {
+ // -- Going to superscript mode
+ munged_shorthand += "<SUP>";
+ }
+ } else if(shorthand[i] == '\\') {
+ // -- Process Symbol character set
+ if((i + 1) < shorthand.length()) {
+ i++; // -- Proceed to next char. Yes I know that changing the loop var is ugly!
+ munged_shorthand += "<B><FONT size=+1>";
+ munged_shorthand += shorthand[i];
+ munged_shorthand += "</FONT></B>";
+ } else {
+ // -- FIXME: Add line number info later
+ cerr << "Encountered a `\\` without anything following it!" << endl;
+ exit( -1 );
+ }
+ } else {
+ // -- Pass on un-munged
+ munged_shorthand += shorthand[i];
+ }
+ } // -- end for all characters in shorthand
+
+ // -- Do any other munging
+ if(!mode_is_normal) {
+ // -- Back to normal mode
+ munged_shorthand += "</SUP>";
+ }
+
+ // -- Return the formatted shorthand name
+ return munged_shorthand;
+}
+
+
diff --git a/src/mem/slicc/generator/html_gen.hh b/src/mem/slicc/generator/html_gen.hh
new file mode 100644
index 000000000..3f0de8df9
--- /dev/null
+++ b/src/mem/slicc/generator/html_gen.hh
@@ -0,0 +1,49 @@
+
+/*
+ * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * html_gen.h
+ *
+ * Description:
+ *
+ * $Id: html_gen.h,v 3.1 2001/12/12 01:00:35 milo Exp $
+ *
+ * */
+
+#ifndef HTML_GEN_H
+#define HTML_GEN_H
+
+#include "slicc_global.hh"
+#include "StateMachine.hh"
+
+string formatHTMLShorthand(const string shorthand);
+void createHTMLindex(string title, ostream& out);
+void createHTMLSymbol(const Symbol& sym, string title, ostream& out);
+
+#endif //HTML_GEN_H
diff --git a/src/mem/slicc/generator/mif_gen.cc b/src/mem/slicc/generator/mif_gen.cc
new file mode 100644
index 000000000..0e6253654
--- /dev/null
+++ b/src/mem/slicc/generator/mif_gen.cc
@@ -0,0 +1,1718 @@
+
+/*
+ * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * $Id$
+ *
+ */
+
+#include "mif_gen.hh"
+#include "State.hh"
+#include "Event.hh"
+#include "Action.hh"
+#include "Transition.hh"
+
+// -- Helper functions
+string formatShorthand(const string shorthand);
+string formatCellRuling(const string shorthand);
+
+void printStateTableMIF(const StateMachine& sm, ostream& out)
+{
+ const string mif_prolog1 =
+"<MIFFile 5.50> # Generated by Multifacet MIF Mungers Inc\n\
+<Tbls\n\
+ <Tbl\n\
+ <TblID 1>\n\
+ <TblTag `Format A'>\n\
+ <TblFormat\n\
+\n\
+ <TblAlignment Center>\n\
+\n\
+ # <TblXColumnNum 0>\n\
+ <TblXColumnRuling `Medium'>\n\
+\n\
+ <TblLRuling `Medium'>\n\
+ <TblRRuling `Medium'>\n\
+ <TblTRuling `Medium'>\n\
+ <TblBRuling `Medium'>\n\
+\n\
+ <TblColumn\n\
+ <TblColumnNum 0>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ <TblColumn\n\
+ <TblColumnNum 1>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ > # end of TblFormat\n\
+\n\
+ <TblNumColumns 2>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnWidth 6.00\">\n\
+ <TblTitle\n\
+ <TblTitleContent\n\
+ <Para\n\
+ <PgfTag `TableTitle'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ > # end of Pgf\n\
+ <PgfNumString `TABLE 1. '>\n\
+ <ParaLine\n\
+ <Marker\n\
+ <MType 9>\n\
+ <MTypeName `Cross-Ref'>\n\
+ <MCurrPage `1'>\n\
+ > # end of Marker\n\
+ <String `";
+
+ const string mif_prolog2 =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of TblTitleContent\n\
+ > # end of TblTitle\n\
+\n\
+ <TblH\n\
+ <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.44444\">\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `State'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ <ParaLine\n\
+ <String `Description'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+ > # end of TblH\n\
+\n\
+ <TblBody\n\
+";
+
+ const string row_before_state =
+" <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.22222\">\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_between_state_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_after_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+";
+
+ const string mif_epilog =
+" > # end of TblBody\n\
+ > # end of Tbl\n\
+> # end of Tbls\n\
+\n\
+ <Para\n\
+ <ParaLine\n\
+ <ATbl 1>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+\n\
+# End of MIFFile\n\
+";
+
+ out << mif_prolog1;
+ out << formatShorthand( sm.getShorthand() );
+ out << " states";
+ out << mif_prolog2;
+
+ for( int i = 0; i < sm.numStates(); i++ )
+ {
+ out << row_before_state;
+ out << formatShorthand( sm.getState( i ).getShorthand() );
+ out << row_between_state_desc;
+ out << sm.getState( i ).getDescription();
+ out << row_after_desc;
+ }
+
+ out << mif_epilog;
+}
+
+
+void printEventTableMIF(const StateMachine& sm, ostream& out)
+{
+ const string mif_prolog1 =
+"<MIFFile 5.50> # Generated by Multifacet MIF Mungers Inc\n\
+<Tbls\n\
+ <Tbl\n\
+ <TblID 1>\n\
+ <TblTag `Format A'>\n\
+ <TblFormat\n\
+\n\
+ <TblAlignment Center>\n\
+\n\
+ # <TblXColumnNum 0>\n\
+ <TblXColumnRuling `Medium'>\n\
+\n\
+ <TblLRuling `Medium'>\n\
+ <TblRRuling `Medium'>\n\
+ <TblTRuling `Medium'>\n\
+ <TblBRuling `Medium'>\n\
+\n\
+ <TblColumn\n\
+ <TblColumnNum 0>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ <TblColumn\n\
+ <TblColumnNum 1>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ > # end of TblFormat\n\
+\n\
+ <TblNumColumns 2>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnWidth 6.00\">\n\
+ <TblTitle\n\
+ <TblTitleContent\n\
+ <Para\n\
+ <PgfTag `TableTitle'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ > # end of Pgf\n\
+ <PgfNumString `TABLE 1. '>\n\
+ <ParaLine\n\
+ <Marker\n\
+ <MType 9>\n\
+ <MTypeName `Cross-Ref'>\n\
+ <MCurrPage `1'>\n\
+ > # end of Marker\n\
+ <String `";
+ const string mif_prolog2 =
+"'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of TblTitleContent\n\
+ > # end of TblTitle\n\
+\n\
+ <TblH\n\
+ <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.44444\">\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `Event'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <ParaLine\n\
+ <String `Description'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+ > # end of TblH\n\
+\n\
+ <TblBody\n\
+";
+
+ const string row_before_event =
+" <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.22222\">\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_between_event_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_after_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+";
+
+ const string mif_epilog =
+" > # end of TblBody\n\
+ > # end of Tbl\n\
+> # end of Tbls\n\
+\n\
+ <Para\n\
+ <ParaLine\n\
+ <ATbl 1>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+\n\
+# End of MIFFile\n\
+";
+
+ out << mif_prolog1;
+ out << formatShorthand( sm.getShorthand() );
+ out << " events";
+ out << mif_prolog2;
+
+ for( int i = 0; i < sm.numEvents(); i++ )
+ {
+ out << row_before_event;
+ out << formatShorthand( sm.getEvent( i ).getShorthand() );
+ out << row_between_event_desc;
+ out << sm.getEvent( i ).getDescription();
+ out << row_after_desc;
+ }
+
+ out << mif_epilog;
+}
+
+
+void printActionTableMIF(const StateMachine& sm, ostream& out)
+{
+ const string mif_prolog1 =
+"<MIFFile 5.50> # Generated by Multifacet MIF Mungers Inc\n\
+<Tbls\n\
+ <Tbl\n\
+ <TblID 1>\n\
+ <TblTag `Format A'>\n\
+ <TblFormat\n\
+\n\
+ <TblAlignment Center>\n\
+\n\
+ # <TblXColumnNum 0>\n\
+ <TblXColumnRuling `Medium'>\n\
+\n\
+ <TblLRuling `Medium'>\n\
+ <TblRRuling `Medium'>\n\
+ <TblTRuling `Medium'>\n\
+ <TblBRuling `Medium'>\n\
+\n\
+ <TblColumn\n\
+ <TblColumnNum 0>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ <TblColumn\n\
+ <TblColumnNum 1>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ > # end of TblFormat\n\
+\n\
+ <TblNumColumns 2>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnWidth 6.00\">\n\
+ <TblTitle\n\
+ <TblTitleContent\n\
+ <Para\n\
+ <PgfTag `TableTitle'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ > # end of Pgf\n\
+ <PgfNumString `TABLE 1. '>\n\
+ <ParaLine\n\
+ <Marker\n\
+ <MType 9>\n\
+ <MTypeName `Cross-Ref'>\n\
+ <MCurrPage `1'>\n\
+ > # end of Marker\n\
+ <String `";
+ const string mif_prolog2 =
+"'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of TblTitleContent\n\
+ > # end of TblTitle\n\
+\n\
+ <TblH\n\
+ <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.44444\">\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `Action'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <ParaLine\n\
+ <String `Description'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+ > # end of TblH\n\
+\n\
+ <TblBody\n\
+";
+
+ const string row_before_action =
+" <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.22222\">\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_between_action_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_after_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+";
+
+ const string mif_epilog =
+" > # end of TblBody\n\
+ > # end of Tbl\n\
+> # end of Tbls\n\
+\n\
+ <Para\n\
+ <ParaLine\n\
+ <ATbl 1>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+\n\
+# End of MIFFile\n\
+";
+
+ out << mif_prolog1;
+ out << formatShorthand( sm.getShorthand() );
+ out << " actions";
+ out << mif_prolog2;
+
+ for( int i = 0; i < sm.numActions(); i++ )
+ {
+ out << row_before_action;
+ out << formatShorthand( sm.getAction( i ).getShorthand() );
+ out << row_between_action_desc;
+ out << sm.getAction( i ).getDescription();
+ out << row_after_desc;
+ }
+
+ out << mif_epilog;
+}
+
+
+void printTransitionTableMIF(const StateMachine& sm, ostream& out)
+{
+ const string mif_prolog =
+"<MIFFile 5.50> # Generated by Multifacet MIF Mungers Inc\n\
+<Tbls\n\
+ <Tbl\n\
+ <TblID 1>\n\
+ <TblTag `Format A'>\n\
+ <TblFormat\n\
+\n\
+ <TblAlignment Center>\n\
+\n\
+ # <TblXColumnNum 0>\n\
+ <TblXColumnRuling `Medium'>\n\
+\n\
+ <TblLRuling `Medium'>\n\
+ <TblRRuling `Medium'>\n\
+ <TblTRuling `Medium'>\n\
+ <TblBRuling `Medium'>\n\
+ \n\
+";
+
+ const string tbl_fmt_before_col_num =
+" <TblColumn\n\
+ <TblColumnNum ";
+
+ const string tbl_fmt_after_col_num =
+ ">\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+";
+
+ const string tbl_fmt_before_num_cols =
+" > # end of TblFormat\n\
+\n\
+ <TblNumColumns ";
+
+ const string tbl_fmt_each_col_width_begin =
+ ">\n\
+ <TblColumnWidth ";
+
+ const string tbl_fmt_each_col_width_end = "\"";
+
+ const string tbl_before_first_header1 =
+ ">\n\
+ <TblTitle\n\
+ <TblTitleContent\n\
+ <Para\n\
+ <PgfTag `TableTitle'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ > # end of Pgf\n\
+ <PgfNumString `TABLE 1. '>\n\
+ <ParaLine\n\
+ <Marker\n\
+ <MType 9>\n\
+ <MTypeName `Cross-Ref'>\n\
+ <MCurrPage `1'>\n\
+ > # end of Marker\n\
+ <String `";
+
+ const string tbl_before_first_header2 =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of TblTitleContent\n\
+ > # end of TblTitle\n\
+\n\
+ <TblH\n\
+ <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.44444\">";
+
+ const string tbl_before_each_header =
+" <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `";
+
+ const string tbl_before_each_rot_header =
+" <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellAngle 270>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <ParaLine\n\
+ <String `";
+
+ const string tbl_after_each_header =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+";
+
+ const string before_first_row =
+" > # end of Row\n\
+ > # end of TblH\n\
+\n\
+ <TblBody\n\
+";
+
+ const string row_before_first_cell =
+" <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.22222\">";
+
+ const string row_cell_before_ruling =
+" <Cell\n\
+";
+
+ const string row_cell_before_contents =
+" <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_cell_after_contents =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+";
+
+ const string row_empty_cell =
+" <CellFill 5>\n\
+ <CellColor `Cyan'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <ParaLine\n\
+ <String `'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+";
+
+ const string row_after_last_cell =
+" > # end of Row\n\
+";
+
+
+ const string mif_epilog =
+" > # end of TblBody\n\
+ > # end of Tbl\n\
+> # end of Tbls\n\
+\n\
+ <Para\n\
+ <ParaLine\n\
+ <ATbl 1>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+\n\
+# End of MIFFile\n\
+";
+
+ int i, j, num_rows, num_cols;
+ string row_ruling;
+ string col_ruling;
+
+ num_rows = sm.numStates();
+ num_cols = sm.numEvents() + 1;
+
+ // -- Prolog
+ out << mif_prolog;
+
+ // -- Table format (for each column)
+ for( i = 0; i < num_cols; i++ )
+ {
+ out << tbl_fmt_before_col_num;
+ out << i;
+ out << tbl_fmt_after_col_num;
+ }
+
+ // -- Spell out width of each column
+
+ // -- FIXME: make following constants into parameters
+ const float total_table_width = 7.5; // -- Total page width = 7.5" (portrait mode)
+ const float min_col_width = 0.35; // -- Min col width (for legibility)
+ const float max_col_width = 0.75; // -- Max col width (for aesthetics)
+ float column_width;
+
+ // -- Calculate column width and clamp it within a range
+ column_width = total_table_width / num_cols;
+ column_width = ((column_width < min_col_width)
+ ? min_col_width
+ : ((column_width > max_col_width)
+ ? max_col_width
+ : column_width));
+
+ out << tbl_fmt_before_num_cols;
+ out << num_cols;
+ for( i = 0; i < num_cols; i++ )
+ {
+ out << tbl_fmt_each_col_width_begin << column_width << tbl_fmt_each_col_width_end;
+ }
+
+ // -- Column headers
+ out << tbl_before_first_header1;
+ out << formatShorthand( sm.getShorthand() );
+ out << " transitions";
+ out << tbl_before_first_header2;
+
+ out << tbl_before_each_header;
+ out << "State";
+ out << tbl_after_each_header;
+
+ for( i = 0; i < sm.numEvents(); i++ )
+ {
+ out << tbl_before_each_rot_header;
+ out << formatShorthand( sm.getEvent(i).getShorthand() );
+ out << tbl_after_each_header;
+ }
+ out << before_first_row;
+
+
+ // -- Body of table
+ for( i = 0; i < num_rows; i++ )
+ {
+ // -- Each row
+ out << row_before_first_cell;
+
+ // -- Figure out ruling
+ if (sm.getState(i).existPair("format")) {
+ row_ruling = formatCellRuling( sm.getState(i).lookupPair("format"));
+ } else {
+ row_ruling = "";
+ }
+
+ // -- First column = state
+ out << row_cell_before_ruling;
+ out << row_ruling;
+ out << row_cell_before_contents;
+ out << formatShorthand( sm.getState(i).getShorthand() );
+ out << row_cell_after_contents;
+
+ // -- One column for each event
+ for( j = 0; j < sm.numEvents(); j++ )
+ {
+ const Transition* trans_ptr = sm.getTransPtr( i, j );
+
+ // -- Figure out ruling
+ if (sm.getEvent(j).existPair("format")) {
+ col_ruling = formatCellRuling(sm.getEvent(j).lookupPair("format"));
+ } else {
+ col_ruling = "";
+ }
+
+ out << row_cell_before_ruling;
+ out << row_ruling;
+ out << col_ruling;
+
+ if( trans_ptr != NULL )
+ {
+ string actions;
+ string nextState;
+
+ // -- Get the actions
+ actions = formatShorthand( trans_ptr->getActionShorthands() );
+
+ // -- Get the next state
+ // FIXME: should compare index, not the string
+ if (trans_ptr->getNextStateShorthand() !=
+ sm.getState(i).getShorthand() )
+ {
+ nextState = formatShorthand( trans_ptr->getNextStateShorthand() );
+ } else
+ {
+ nextState = "";
+ }
+
+ // -- Print out "actions/next-state"
+ out << row_cell_before_contents;
+ out << actions;
+ if ((nextState.length() != 0) && (actions.length() != 0)) {
+ out << "/";
+ }
+ out << nextState;
+ out << row_cell_after_contents;
+ }
+ else
+ {
+ out << row_empty_cell;
+ }
+
+ }
+
+ out << row_after_last_cell;
+ }
+
+ // -- Epilog
+ out << mif_epilog;
+
+}
+/*
+void printTBETableMIF(const StateMachine& sm, const Vector<Field>& fields, ostream& out)
+{
+ const string mif_prolog1 =
+"<MIFFile 5.50> # Generated by Multifacet MIF Mungers Inc\n\
+<Tbls\n\
+ <Tbl\n\
+ <TblID 1>\n\
+ <TblTag `Format A'>\n\
+ <TblFormat\n\
+\n\
+ <TblAlignment Center>\n\
+\n\
+ # # <TblXColumnNum 0>\n\
+ <TblXColumnRuling `Medium'>\n\
+\n\
+ <TblLRuling `Medium'>\n\
+ <TblRRuling `Medium'>\n\
+ <TblTRuling `Medium'>\n\
+ <TblBRuling `Medium'>\n\
+\n\
+ <TblColumn\n\
+ <TblColumnNum 0>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ <TblColumn\n\
+ <TblColumnNum 1>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnH\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnH\n\
+ <TblColumnBody\n\
+ <PgfTag `CellBody'>\n\
+ > # end of TblColumnBody\n\
+ <TblColumnF\n\
+ <PgfTag `CellHeading'>\n\
+ > # end of TblColumnF\n\
+ > # end of TblColumn\n\
+ > # end of TblFormat\n\
+\n\
+ <TblNumColumns 2>\n\
+ <TblColumnWidth 0.51\">\n\
+ <TblColumnWidth 6.00\">\n\
+ <TblTitle\n\
+ <TblTitleContent\n\
+ <Para\n\
+ <PgfTag `TableTitle'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ > # end of Pgf\n\
+ <PgfNumString `TABLE 1. '>\n\
+ <ParaLine\n\
+ <Marker\n\
+ <MType 9>\n\
+ <MTypeName `Cross-Ref'>\n\
+ <MCurrPage `1'>\n\
+ > # end of Marker\n\
+ <String `";
+
+ const string mif_prolog2 =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of TblTitleContent\n\
+ > # end of TblTitle\n\
+\n\
+ <TblH\n\
+ <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.44444\">\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `Field'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellLRuling `Medium'>\n\
+ <CellBRuling `Medium'>\n\
+ <CellRRuling `Medium'>\n\
+ <CellTRuling `Medium'>\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellHeading'>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ <ParaLine\n\
+ <String `Description'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+ > # end of TblH\n\
+\n\
+ <TblBody\n\
+";
+
+ const string row_before_state =
+" <Row\n\
+ <RowMaxHeight 14.0\">\n\
+ <RowHeight 0.22222\">\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <Pgf\n\
+ <PgfAlignment Center>\n\
+ <PgfFont \n\
+ <FTag `'>\n\
+ <FFamily `Times'>\n\
+ <FVar `Regular'>\n\
+ <FWeight `Regular'>\n\
+ <FAngle `Regular'>\n\
+ <FPostScriptName `Times-Roman'>\n\
+ <FEncoding `FrameRoman'>\n\
+ <FSize 11.0 pt>\n\
+ <FUnderlining FNoUnderlining>\n\
+ <FOverline No>\n\
+ <FStrike No>\n\
+ <FChangeBar No>\n\
+ <FOutline No>\n\
+ <FShadow No>\n\
+ <FPairKern Yes>\n\
+ <FTsume No>\n\
+ <FCase FAsTyped>\n\
+ <FPosition FNormal>\n\
+ <FDX 0.0%>\n\
+ <FDY 0.0%>\n\
+ <FDW 0.0%>\n\
+ <FStretch 100.0%>\n\
+ <FLanguage USEnglish>\n\
+ <FLocked No>\n\
+ <FSeparation 0>\n\
+ <FColor `Black'>\n\
+ > # end of PgfFont\n\
+ >\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_between_state_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ <Cell\n\
+ <CellContent\n\
+ <Para\n\
+ <PgfTag `CellBody'>\n\
+ <ParaLine\n\
+ <String `";
+
+ const string row_after_desc =
+ "'>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+ > # end of CellContent\n\
+ > # end of Cell\n\
+ > # end of Row\n\
+";
+
+ const string mif_epilog =
+" > # end of TblBody\n\
+ > # end of Tbl\n\
+> # end of Tbls\n\
+\n\
+ <Para\n\
+ <ParaLine\n\
+ <ATbl 1>\n\
+ > # end of ParaLine\n\
+ > # end of Para\n\
+\n\
+# End of MIFFile\n\
+";
+
+ out << mif_prolog1;
+ out << sm.getShorthand();
+ out << " TBE";
+ out << mif_prolog2;
+
+ for( int i = 0; i < fields.size(); i++ ) {
+ out << row_before_state;
+ out << formatShorthand(fields[i].getShorthand());
+ out << row_between_state_desc;
+ out << fields[i].getDescription();
+ out << row_after_desc;
+ }
+
+ out << mif_epilog;
+}
+*/
+// --
+// -- Helper function to do some shorthand formatting (kludge before we
+// -- get the tuple attributes into the state machine language.
+// -- Current convention:
+// -- - each `_' indicates a toggle between normal mode and superscript
+// -- - each escaped (using `\') character indicates a letter formatted
+// -- using the Symbol character set. \a = alpha, \b = beta, \c = chi etc.
+// -- See the FrameMaker character sets manual in the Online Manuals.
+// -- - a `!' indicates extra stuff at the end which can be ignored (used
+// -- for determining cell ruling and so on)
+// --
+string formatShorthand(const string shorthand)
+{
+ string munged_shorthand = "";
+ bool mode_is_normal = true;
+ const string mif_superscript = "'> <Font <FPosition FSuperscript> <FLocked No> > <String `";
+ const string mif_normal = "'> <Font <FPosition FNormal> <FLocked No> > <String `";
+ const string mif_symbol = "'> <Font <FFamily `Symbol'> <FPostScriptName `Symbol'> <FEncoding `FrameRoman'> <FLocked No> > <String `";
+ const string mif_times = "'> <Font <FFamily `Times'> <FPostScriptName `Times-Roman'> <FEncoding `FrameRoman'> <FLocked No> > <String `";
+
+
+ // -- Walk over the string, processing superscript directives
+ for( unsigned int i = 0; i < shorthand.length(); i++ )
+ {
+ if( shorthand[i] == '!' )
+ {
+ // -- Reached logical end of shorthand name
+ break;
+ }
+ else if( shorthand[i] == '^' )
+ {
+ // -- Process super/subscript formatting
+
+ mode_is_normal = !mode_is_normal;
+ if( mode_is_normal )
+ {
+ // -- Back to normal mode
+ munged_shorthand += mif_normal;
+ }
+ else
+ {
+ // -- Going to superscript mode
+ munged_shorthand += mif_superscript;
+ }
+
+ }
+ else if( shorthand[i] == '\\' )
+ {
+ // -- Process Symbol character set
+ if( (i + 1) < shorthand.length() )
+ {
+ i++; // -- Proceed to next char. Yes I know that changing the loop var is ugly!
+ munged_shorthand += mif_symbol;
+ munged_shorthand += shorthand[i];
+ munged_shorthand += mif_times;
+ }
+ else
+ {
+ // -- FIXME: Add line number info later
+ cerr << "Encountered a `\\` without anything following it!" << endl;
+ exit( -1 );
+ }
+
+ }
+ else
+ {
+ // -- Pass on un-munged
+ munged_shorthand += shorthand[i];
+ }
+
+ } // -- end for all characters in shorthand
+
+ // -- Do any other munging
+
+ // -- Return the formatted shorthand name
+ return munged_shorthand;
+}
+
+
+// --
+// -- Helper function to figure out where to put rules in the table (kludge before we
+// -- get the tuple attributes into the shorthand machine language.
+// -- Current convention:
+// -- - a `!' in the shorthand indicates the beginning of ruling information
+// -- - `b' => bottom of this row is ruled
+// -- - `r' => right of this column is ruled
+// --
+string formatCellRuling( const string shorthand)
+{
+ for( unsigned int i = 0; i < shorthand.length(); i++ )
+ {
+ if( shorthand[i] == '!' )
+ {
+ // -- OK, found beginning of ruling information
+ for( unsigned int j = i+1; j < shorthand.length(); j++ )
+ {
+ if( shorthand[j] == 'b')
+ {
+ // -- Rule the bottom
+ return "<CellBRuling `Medium'>\n";
+ }
+ else if( shorthand[j] == 'r')
+ {
+ // -- Rule the bottom
+ return "<CellRRuling `Medium'>\n";
+ }
+
+ }
+
+ // -- No ruling directives recognized, return default ruling
+ return "";
+ }
+
+ }
+
+ // -- No ruling information found, return default ruling
+ return "";
+}
diff --git a/src/mem/slicc/generator/mif_gen.hh b/src/mem/slicc/generator/mif_gen.hh
new file mode 100644
index 000000000..ba1dc0b0b
--- /dev/null
+++ b/src/mem/slicc/generator/mif_gen.hh
@@ -0,0 +1,45 @@
+
+/*
+ * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * $Id: mif_gen.h,v 3.1 2001/12/12 01:00:35 milo Exp $
+ *
+ */
+
+#ifndef MIF_GEN_H
+#define MIF_GEN_H
+
+#include "StateMachine.hh"
+
+void printStateTableMIF(const StateMachine& sm, ostream& out);
+void printEventTableMIF(const StateMachine& sm, ostream& out);
+void printActionTableMIF(const StateMachine& sm, ostream& out);
+void printTransitionTableMIF(const StateMachine& sm, ostream& out);
+
+#endif //MIF_GEN_H