# HG changeset patch # User Matti Hamalainen # Date 1531148824 -10800 # Node ID 25a29d29ee6a03a53e75705951c89e0fe641f190 # Parent 55b0a77af60286e8be6af4792ced4065b5a17e72 Add helper class MPWriteCtx for exporting data and source code. diff -r 55b0a77af602 -r 25a29d29ee6a exporters.pde --- 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);