changeset 121:25a29d29ee6a

Add helper class MPWriteCtx for exporting data and source code.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 09 Jul 2018 18:07:04 +0300
parents 55b0a77af602
children ffa6533584ca
files exporters.pde
diffstat 1 files changed, 109 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/exporters.pde	Mon Jul 09 17:44:47 2018 +0300
+++ b/exporters.pde	Mon Jul 09 18:07:04 2018 +0300
@@ -11,6 +11,115 @@
 int g_gridmode = OLD;
 
 
+public class MPWriteCtx
+{
+    public int m_offs, m_bpl, m_bytes, m_indent;
+    public String m_byteDef, m_eol, m_src;
+
+    MPWriteCtx()
+    {
+        m_offs = 0;
+        m_bpl = 32;
+        m_bytes = 0;
+        m_indent = 4;
+        m_byteDef = ".byte";
+        m_src = "";
+        m_eol = "\n";
+    }
+
+    void setOffs(int offs)
+    {
+        m_offs = offs;
+    }
+
+    void setBPL(int bpl)
+    {
+        m_bpl = bpl;
+    }
+
+    String getIndent()
+    {
+        String str = "";
+        for (int n = 0; n < m_indent; n++)
+            str += " ";
+        return str;
+    }
+
+    void label(String blabel)
+    {
+        eol();
+        m_src += blabel +":";
+        eol();
+        m_bytes = 0;
+    }
+
+    void comment(String bstr)
+    {
+        indent();
+        m_src += "; "+ bstr;
+        eol();
+    }
+
+    void eol()
+    {
+        m_src += m_eol;
+    }
+
+    void eod()
+    {
+        eol();
+        eol();
+    }
+
+    void byteDef()
+    {
+        m_src += m_byteDef +" ";
+    }
+
+    void indent()
+    {
+        m_src += getIndent();
+    }
+
+    void line(String str)
+    {
+        m_src += str;
+        eol();
+    }
+
+    void writeByte(int bval, String blabel)
+    {
+        m_data[m_offs++] = byte(bval);
+
+        if (blabel != null)
+        {
+            m_src += blabel +": "+ m_byteDef +" "+ str(int(bval)) + m_eol;
+        }
+        else
+        {
+            m_src += str(int(bval));
+
+            if (m_bpl > 0 &&
+                ++m_bytes >= m_bpl)
+            {
+                eol();
+                indent();
+                byteDef();
+                m_bytes = 0;
+            }
+            else
+                m_src += ",";
+        }
+    }
+
+    void writeByteAt(int offs, int bval, String blabel)
+    {
+        m_offs = offs;
+        writeByte(bval, blabel);
+    }
+}
+
+
 void mpCopyByte(byte[] fdata, int moffs, int toffs)
 {
     g_map[moffs    ] = byte((fdata[toffs] & 128) >> 7);