diff --git a/McBitFont/Export.cs b/McBitFont/Export.cs index 11f5fcb..4d4f351 100644 --- a/McBitFont/Export.cs +++ b/McBitFont/Export.cs @@ -51,7 +51,7 @@ namespace McBitFont { comments.Add("font_header_map", "// Font header map:\n" + - "// packed; // Flag for packed font" + + "// packed; // Flag for packed font\n" + "// width; // Font width in pixels (0 - variable width)\n" + "// height; // Font height in pixels\n" + "// space; // Font space in pixels\n" + diff --git a/McBitFont/FodyWeavers.xml b/McBitFont/FodyWeavers.xml new file mode 100644 index 0000000..5029e70 --- /dev/null +++ b/McBitFont/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/McBitFont/Form1.Designer.cs b/McBitFont/Form1.Designer.cs index 8bfd76e..72ca31b 100644 --- a/McBitFont/Form1.Designer.cs +++ b/McBitFont/Form1.Designer.cs @@ -72,6 +72,7 @@ redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + selectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); fontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); makeVarWidthToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); prependSymbolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -101,7 +102,7 @@ chkHexCodes = new System.Windows.Forms.CheckBox(); chkRectSelect = new System.Windows.Forms.CheckBox(); label3 = new System.Windows.Forms.Label(); - selectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + importTextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)nudX).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudY).BeginInit(); panel1.SuspendLayout(); @@ -523,7 +524,7 @@ // // fileToolStripMenuItem // - fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, saveToolStripMenuItem, saveAsToolStripMenuItem, importImageToolStripMenuItem, exportToolStripMenuItem, exitToolStripMenuItem }); + fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { newToolStripMenuItem, openToolStripMenuItem, saveToolStripMenuItem, saveAsToolStripMenuItem, importTextToolStripMenuItem1, importImageToolStripMenuItem, exportToolStripMenuItem, exitToolStripMenuItem }); fileToolStripMenuItem.Name = "fileToolStripMenuItem"; fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); fileToolStripMenuItem.Text = "File"; @@ -616,7 +617,7 @@ undoToolStripMenuItem.Image = Properties.Resources.arrow_undo; undoToolStripMenuItem.Name = "undoToolStripMenuItem"; undoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z; - undoToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + undoToolStripMenuItem.Size = new System.Drawing.Size(144, 22); undoToolStripMenuItem.Text = "Undo"; undoToolStripMenuItem.ToolTipText = "Undo last canvas change"; undoToolStripMenuItem.Click += undoToolStripMenuItem_Click; @@ -626,7 +627,7 @@ redoToolStripMenuItem.Image = Properties.Resources.arrow_redo; redoToolStripMenuItem.Name = "redoToolStripMenuItem"; redoToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y; - redoToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + redoToolStripMenuItem.Size = new System.Drawing.Size(144, 22); redoToolStripMenuItem.Text = "Redo"; redoToolStripMenuItem.ToolTipText = "Redo canvas change"; redoToolStripMenuItem.Click += redoToolStripMenuItem_Click; @@ -638,7 +639,7 @@ copyToolStripMenuItem.Name = "copyToolStripMenuItem"; copyToolStripMenuItem.ShortcutKeyDisplayString = ""; copyToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C; - copyToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + copyToolStripMenuItem.Size = new System.Drawing.Size(144, 22); copyToolStripMenuItem.Text = "Copy"; copyToolStripMenuItem.ToolTipText = "Copy current symbol to clipboard"; copyToolStripMenuItem.Click += copyToolStripMenuItem_Click; @@ -650,11 +651,19 @@ pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; pasteToolStripMenuItem.ShortcutKeyDisplayString = ""; pasteToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V; - pasteToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + pasteToolStripMenuItem.Size = new System.Drawing.Size(144, 22); pasteToolStripMenuItem.Text = "Paste"; pasteToolStripMenuItem.ToolTipText = "Paste from clipboard to current symbol"; pasteToolStripMenuItem.Click += pasteToolStripMenuItem_Click; // + // selectToolStripMenuItem + // + selectToolStripMenuItem.Image = Properties.Resources.fam_rectt; + selectToolStripMenuItem.Name = "selectToolStripMenuItem"; + selectToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + selectToolStripMenuItem.Text = "Select"; + selectToolStripMenuItem.Click += selectToolStripMenuItem_Click; + // // fontToolStripMenuItem // fontToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { makeVarWidthToolStripMenuItem, prependSymbolToolStripMenuItem, appendSymbolToolStripMenuItem, removeSymbolToolStripMenuItem, removeBeforeToolStripMenuItem, removeAfterToolStripMenuItem, CodeShiftToolStripMenuItem }); @@ -956,13 +965,13 @@ label3.TabIndex = 21; label3.Text = "Cursor:"; // - // selectToolStripMenuItem + // importTextToolStripMenuItem1 // - selectToolStripMenuItem.Image = Properties.Resources.fam_rectt; - selectToolStripMenuItem.Name = "selectToolStripMenuItem"; - selectToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - selectToolStripMenuItem.Text = "Select"; - selectToolStripMenuItem.Click += selectToolStripMenuItem_Click; + importTextToolStripMenuItem1.Image = Properties.Resources.folder_table; + importTextToolStripMenuItem1.Name = "importTextToolStripMenuItem1"; + importTextToolStripMenuItem1.Size = new System.Drawing.Size(184, 22); + importTextToolStripMenuItem1.Text = "Import text file"; + importTextToolStripMenuItem1.Click += importTextToolStripMenuItem1_Click; // // MainForm // @@ -1090,6 +1099,7 @@ private System.Windows.Forms.ToolStripMenuItem FillToolStripMenuItem; private System.Windows.Forms.CheckBox chkRectSelect; private System.Windows.Forms.ToolStripMenuItem selectToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem importTextToolStripMenuItem1; } } diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index c684761..4f97cd9 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -711,13 +711,9 @@ namespace McBitFont { } private void newToolStripMenuItem_Click(object sender, EventArgs e) { - checkModifiedFrame(); - if (prjModified) { - if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { - saveToolStripMenuItem.PerformClick(); - return; - } - } + CheckModifiedFrame(); + if (CheckModifiedProject()) return; + New form = new New(this); if (form.ShowDialog() == DialogResult.OK) { Cursor.Current = Cursors.WaitCursor; @@ -797,7 +793,7 @@ namespace McBitFont { private void MiniList_SelectedIndexChanged(object sender, EventArgs e) { if (miniList.FocusedItem == null) return; - checkModifiedFrame(); + CheckModifiedFrame(); if (miniList.SelectedItems.Count == 0) { removeSymbolToolStripMenuItem.Enabled = false; removeBeforeToolStripMenuItem.Enabled = false; @@ -852,7 +848,7 @@ namespace McBitFont { } private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { - checkModifiedFrame(); + CheckModifiedFrame(); if (dlgSave.ShowDialog() == DialogResult.OK) { SaveProject(dlgSave.FileName); } @@ -935,13 +931,13 @@ namespace McBitFont { this.Text = "McBitFont v" + version + " - " + prjName; } + + private void openToolStripMenuItem_Click(object sender, EventArgs e) { - if (prjModified) { - if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { - saveAsToolStripMenuItem.PerformClick(); - return; - } - } + CheckModifiedFrame(); + if (CheckModifiedProject()) return; + + dlgOpen.FilterIndex = 1; if (dlgOpen.ShowDialog() == DialogResult.OK) { LoadProject(dlgOpen.FileName); } @@ -1035,7 +1031,7 @@ namespace McBitFont { } // Check modified / Save frame - private void checkModifiedFrame() { + private void CheckModifiedFrame() { if (modified) { if (MessageBox.Show("Current symbol is modified.\nDo you want to save the changes?", "Symbol was modified!", MessageBoxButtons.YesNo) == DialogResult.Yes) { SaveFrame(); @@ -1044,11 +1040,22 @@ namespace McBitFont { } } + // Check if project was modified + private bool CheckModifiedProject() { + if (prjModified) { + if (MessageBox.Show("The project is modified.\nDo you want to save it first?", "Project was modified!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { + saveToolStripMenuItem.PerformClick(); + return true; + } + } + return false; + } + private void saveToolStripMenuItem_Click_1(object sender, EventArgs e) { if (prjFileName == "") { saveAsToolStripMenuItem.PerformClick(); } else { - checkModifiedFrame(); + CheckModifiedFrame(); SaveProject(prjFileName); } @@ -1160,7 +1167,7 @@ namespace McBitFont { private void CodeShiftToolStripMenuItem_Click(object sender, EventArgs e) { if (!monospaced && frames.Count == 1) return; - checkModifiedFrame(); + CheckModifiedFrame(); CodeShift csform = new CodeShift(this); if (csform.ShowDialog() == DialogResult.OK) { @@ -1240,5 +1247,82 @@ namespace McBitFont { chkRectSelect.Checked = !chkRectSelect.Checked; selectToolStripMenuItem.Checked = !selectToolStripMenuItem.Checked; } + + private void importTextToolStripMenuItem1_Click(object sender, EventArgs e) { + if (CheckModifiedProject()) return; + + dlgOpen.FilterIndex = 2; + if (dlgOpen.ShowDialog() == DialogResult.OK) { + var lines = File.ReadAllLines(dlgOpen.FileName); + int bits = 0; + List data = []; + foreach (var line in lines) { + if (line.TrimStart().StartsWith("//")) continue; // Ignore comments + if (line.Trim().Length < 1) continue; // Ignore empty lines + if (bits == 0) { + if (line.Contains("uint8_t")) bits = 8; // Found 8 bit array + if (line.Contains("uint16_t")) bits = 16; // Found 16 bit array + if (line.Contains("uint31_t")) bits = 32; // Found 32 bit array + } + string s = line; + if (s.IndexOf("//") >= 0) s = s.Remove(s.IndexOf("//")); // Remove comments + var words = s.Split(','); // split a line by commas + string w; + foreach (var word in words) { + int numBase = 10; + + w = word.Trim(); + if (w.Length < 1) continue; + + if (w.IndexOf("0x") >= 0) { // Check if value is written as hexadecimal + w = w.Remove(w.IndexOf("0x"), 2); + numBase = 16; + } + if (w.IndexOf("0b") >= 0) { // Check if value is written as binary + w = w.Remove(w.IndexOf("0b"), 2); + numBase = 2; + } + + try { // Try to convert a number from text + data.Add(Convert.ToUInt32(w, numBase)); + } + catch { + continue; + } + + //MessageBox.Show(w + ": Length: " + w.Length + " Bits: " + bits + " Converted: " + data.Last() + "\nData length: " + data.Count); + } + } + if (MessageBox.Show(bits + "-font found. " + data.Count + " numbers (" + data.Count * bits / 8 + " bytes) total\n" + "Start code: " + data.ElementAt(4) + " End code: " + data.ElementAt(5) + "\nDo you want to load it?", "Import from text file", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { + // Font header + bool packed = data.ElementAt(0) == 1; + int width= (int)data.ElementAt(1); + int height = (int)data.ElementAt(2); + int first = (int)data.ElementAt(4); + int last = (int)data.ElementAt(5); + + frames.Clear(); + miniList.Clear(); + ilMiniatures.Images.Clear(); + + FrameMiniature newf; + int neww = width; + int curFrame = 0; + int frameNumIndex = 0; + for (int i = 0; i < data.Count; i++) { + if (frameNumIndex == 0) { + if (width == 0) { + neww = (int)data.ElementAt(i); + frameNumIndex++; + } + newf = new(curFrame + first, neww, height); + } + // TODO: fill frame.data with current byte + // increment NumIndex + } + } + //MessageBox.Show(bits + "-font found. " + data.Count + " numbers (" + data.Count * bits / 8 + " bytes) total\n" + "Start code: " + data.ElementAt(4) + " End code: " + data.ElementAt(5)); + } + } } } diff --git a/McBitFont/McBitFont.csproj b/McBitFont/McBitFont.csproj index 8b14b8f..ec839cf 100644 --- a/McBitFont/McBitFont.csproj +++ b/McBitFont/McBitFont.csproj @@ -32,6 +32,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/McBitFont/Properties/Resources.Designer.cs b/McBitFont/Properties/Resources.Designer.cs index 2c7606b..97cde8f 100644 --- a/McBitFont/Properties/Resources.Designer.cs +++ b/McBitFont/Properties/Resources.Designer.cs @@ -250,6 +250,16 @@ namespace McBitFont.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder_table { + get { + object obj = ResourceManager.GetObject("folder_table", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/McBitFont/Properties/Resources.resx b/McBitFont/Properties/Resources.resx index 90e4395..e072095 100644 --- a/McBitFont/Properties/Resources.resx +++ b/McBitFont/Properties/Resources.resx @@ -142,9 +142,6 @@ ..\Resources\redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\Famfamfam-Silk-Disk.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -196,12 +193,18 @@ ..\Resources\arrow_redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\fam_base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\fam_rectt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Famfamfam-Silk-Page-white.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Famfamfam-Silk-Disk.16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\Canvas_Fill.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -220,7 +223,7 @@ ..\Resources\icon_64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\fam_base.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\folder_table.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/McBitFont/Resources/folder_table.png b/McBitFont/Resources/folder_table.png new file mode 100644 index 0000000..473cee3 Binary files /dev/null and b/McBitFont/Resources/folder_table.png differ diff --git a/examples/tests/test16x16.mbfont b/examples/tests/test16x16.mbfont new file mode 100644 index 0000000..2a2ad2a Binary files /dev/null and b/examples/tests/test16x16.mbfont differ diff --git a/examples/tests/test16x16.txt b/examples/tests/test16x16.txt new file mode 100644 index 0000000..a6e58eb --- /dev/null +++ b/examples/tests/test16x16.txt @@ -0,0 +1,50 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 38 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Hexadecimal +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Column per line + +// Font header map: +// packed; // Flag for packed font// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t Untitled[] = { + // Meta header + 0, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 16, // Font height in pixels + 0, // Font space (between symbols) in pixels + 0, // First character code + 0, // Last character code + // Data: + 0xfc, 0x1f, + 0x00, 0x30, + 0x0c, 0x60, + 0x06, 0x1c, + 0x02, 0x36, + 0x32, 0x23, + 0x32, 0x21, + 0x82, 0x21, + 0x82, 0x2c, + 0xc6, 0x2c, + 0x64, 0x20, + 0x3c, 0x30, + 0x00, 0x10, + 0x1e, 0x20, + 0xf0, 0x3f, + 0x00, 0x00 +}; diff --git a/examples/tests/testfont.txt b/examples/tests/testfont.txt new file mode 100644 index 0000000..727a511 --- /dev/null +++ b/examples/tests/testfont.txt @@ -0,0 +1,258 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 1768 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Hexadecimal +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Symbol per line + +// Font header map: +// packed; // Flag for packed font// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t haxrcorp_4089_cyrillic_altgr[] = { + // Meta header + 0, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 10, // Font height in pixels + 0, // Font space (between symbols) in pixels + 32, // First character code + 255, // Last character code + // Data: + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 32 --> + 0x01, 0xbe, 0x00, // 33 --> ! + 0x03, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, // 34 --> " + 0x05, 0x28, 0x00, 0x7c, 0x00, 0x28, 0x00, 0x7c, 0x00, 0x28, 0x00, // 35 --> # + 0x05, 0x4c, 0x00, 0x92, 0x00, 0xff, 0x01, 0x92, 0x00, 0x64, 0x00, // 36 --> $ + 0x07, 0x84, 0x00, 0x4a, 0x00, 0x24, 0x00, 0x10, 0x00, 0x48, 0x00, 0xa4, 0x00, 0x42, 0x00, // 37 --> % + 0x06, 0x6c, 0x00, 0x92, 0x00, 0x92, 0x00, 0xac, 0x00, 0x40, 0x00, 0xb0, 0x00, // 38 --> & + 0x01, 0x0e, 0x00, // 39 --> ' + 0x03, 0x7c, 0x00, 0x82, 0x00, 0x01, 0x01, // 40 --> ( + 0x03, 0x01, 0x01, 0x82, 0x00, 0x7c, 0x00, // 41 --> ) + 0x05, 0x14, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x08, 0x00, 0x14, 0x00, // 42 --> * + 0x05, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, // 43 --> + + 0x02, 0x00, 0x01, 0xc0, 0x00, // 44 --> , + 0x05, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, // 45 --> - + 0x01, 0x80, 0x00, // 46 --> . + 0x07, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, // 47 --> / + 0x05, 0x7c, 0x00, 0xa2, 0x00, 0x92, 0x00, 0x8a, 0x00, 0x7c, 0x00, // 48 --> 0 + 0x02, 0x04, 0x00, 0xfe, 0x00, // 49 --> 1 + 0x05, 0x84, 0x00, 0xc2, 0x00, 0xa2, 0x00, 0x92, 0x00, 0x8c, 0x00, // 50 --> 2 + 0x05, 0x44, 0x00, 0x82, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 51 --> 3 + 0x05, 0x30, 0x00, 0x28, 0x00, 0x24, 0x00, 0xfe, 0x00, 0x20, 0x00, // 52 --> 4 + 0x05, 0x4e, 0x00, 0x8a, 0x00, 0x8a, 0x00, 0x8a, 0x00, 0x72, 0x00, // 53 --> 5 + 0x05, 0x7c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x64, 0x00, // 54 --> 6 + 0x05, 0x02, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x32, 0x00, 0x0e, 0x00, // 55 --> 7 + 0x05, 0x6c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 56 --> 8 + 0x05, 0x4c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x7c, 0x00, // 57 --> 9 + 0x01, 0x48, 0x00, // 58 --> : + 0x02, 0x00, 0x01, 0xc8, 0x00, // 59 --> ; + 0x03, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, // 60 --> < + 0x05, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, // 61 --> = + 0x03, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, // 62 --> > + 0x05, 0x04, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x12, 0x00, 0x0c, 0x00, // 63 --> ? + 0x08, 0x7e, 0x00, 0x81, 0x00, 0x99, 0x00, 0xa5, 0x00, 0xa5, 0x00, 0xbd, 0x00, 0xa1, 0x00, 0x1e, 0x00, // 64 --> @ + 0x05, 0xfc, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0xfc, 0x00, // 65 --> A + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 66 --> B + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, // 67 --> C + 0x05, 0xfe, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 68 --> D + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, // 69 --> E + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x02, 0x00, // 70 --> F + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x92, 0x00, 0x74, 0x00, // 71 --> G + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, // 72 --> H + 0x01, 0xfe, 0x00, // 73 --> I + 0x05, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, // 74 --> J + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, // 75 --> K + 0x05, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // 76 --> L + 0x07, 0xfe, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0xfe, 0x00, // 77 --> M + 0x05, 0xfe, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xfe, 0x00, // 78 --> N + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 79 --> O + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x0c, 0x00, // 80 --> P + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x01, // 81 --> Q + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x32, 0x00, 0x52, 0x00, 0x8c, 0x00, // 82 --> R + 0x05, 0x4c, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x64, 0x00, // 83 --> S + 0x05, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, // 84 --> T + 0x05, 0x7e, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, // 85 --> U + 0x05, 0x0e, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x0e, 0x00, // 86 --> V + 0x07, 0x7e, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7e, 0x00, // 87 --> W + 0x05, 0xc6, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0xc6, 0x00, // 88 --> X + 0x05, 0x06, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x06, 0x00, // 89 --> Y + 0x05, 0xc2, 0x00, 0xa2, 0x00, 0x92, 0x00, 0x8a, 0x00, 0x86, 0x00, // 90 --> Z + 0x03, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, // 91 --> [ + 0x07, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, // 92 --> \ + 0x03, 0x01, 0x01, 0x01, 0x01, 0xff, 0x01, // 93 --> ] + 0x05, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, // 94 --> ^ + 0x05, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // 95 --> _ + 0x03, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, // 96 --> ` + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, 0x00, // 97 --> a + 0x04, 0xfe, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 98 --> b + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x50, 0x00, // 99 --> c + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xfe, 0x00, // 100 --> d + 0x04, 0x70, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x30, 0x00, // 101 --> e + 0x02, 0xfc, 0x00, 0x12, 0x00, // 102 --> f + 0x04, 0x70, 0x00, 0x88, 0x02, 0x88, 0x02, 0xf8, 0x01, // 103 --> g + 0x04, 0xfe, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, // 104 --> h + 0x01, 0xfa, 0x00, // 105 --> i + 0x02, 0x00, 0x02, 0xfa, 0x01, // 106 --> j + 0x04, 0xfe, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, // 107 --> k + 0x01, 0xfe, 0x00, // 108 --> l + 0x07, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, // 109 --> m + 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0, 0x00, // 110 --> n + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 111 --> o + 0x04, 0xf8, 0x03, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 112 --> p + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, 0x03, // 113 --> q + 0x03, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, // 114 --> r + 0x03, 0x90, 0x00, 0xa8, 0x00, 0x48, 0x00, // 115 --> s + 0x03, 0x08, 0x00, 0xfe, 0x00, 0x08, 0x00, // 116 --> t + 0x04, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, // 117 --> u + 0x04, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, // 118 --> v + 0x07, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, 0x80, 0x00, 0x80, 0x00, 0x78, 0x00, // 119 --> w + 0x04, 0xd8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xd8, 0x00, // 120 --> x + 0x04, 0x78, 0x00, 0x80, 0x02, 0x80, 0x02, 0xf8, 0x01, // 121 --> y + 0x04, 0xc8, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x98, 0x00, // 122 --> z + 0x03, 0x10, 0x00, 0xee, 0x00, 0x01, 0x01, // 123 --> { + 0x01, 0xff, 0x01, // 124 --> | + 0x03, 0x01, 0x01, 0xee, 0x00, 0x10, 0x00, // 125 --> } + 0x06, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, // 126 --> ~ + 0x00, // 127 -->  + 0x00, // 128 --> Ђ + 0x00, // 129 --> Ѓ + 0x00, // 130 --> ‚ + 0x00, // 131 --> ѓ + 0x00, // 132 --> „ + 0x00, // 133 --> … + 0x00, // 134 --> † + 0x00, // 135 --> ‡ + 0x00, // 136 --> € + 0x00, // 137 --> ‰ + 0x00, // 138 --> Љ + 0x00, // 139 --> ‹ + 0x00, // 140 --> Њ + 0x00, // 141 --> Ќ + 0x00, // 142 --> Ћ + 0x00, // 143 --> Џ + 0x00, // 144 --> ђ + 0x00, // 145 --> ‘ + 0x00, // 146 --> ’ + 0x00, // 147 --> “ + 0x00, // 148 --> ” + 0x04, 0x30, 0x00, 0x78, 0x00, 0x78, 0x00, 0x30, 0x00, // 149 --> • + 0x00, // 150 --> – + 0x00, // 151 --> — + 0x00, // 152 --> ˜ + 0x00, // 153 --> ™ + 0x00, // 154 --> љ + 0x00, // 155 --> › + 0x00, // 156 --> њ + 0x00, // 157 --> ќ + 0x00, // 158 --> ћ + 0x00, // 159 --> џ + 0x00, // 160 -->   + 0x00, // 161 --> Ў + 0x00, // 162 --> ў + 0x00, // 163 --> Ј + 0x00, // 164 --> ¤ + 0x00, // 165 --> Ґ + 0x01, 0xef, 0x01, // 166 --> ¦ + 0x00, // 167 --> § + 0x00, // 168 --> Ё + 0x07, 0x7c, 0x00, 0x82, 0x00, 0xba, 0x00, 0xaa, 0x00, 0xaa, 0x00, 0x82, 0x00, 0x7c, 0x00, // 169 --> © + 0x00, // 170 --> Є + 0x00, // 171 --> « + 0x00, // 172 --> ¬ + 0x00, // 173 --> ­ + 0x00, // 174 --> ® + 0x00, // 175 --> Ї + 0x04, 0x06, 0x00, 0x09, 0x00, 0x09, 0x00, 0x06, 0x00, // 176 --> ° + 0x05, 0x88, 0x00, 0x88, 0x00, 0xbe, 0x00, 0x88, 0x00, 0x88, 0x00, // 177 --> ± + 0x04, 0x12, 0x00, 0x19, 0x00, 0x15, 0x00, 0x12, 0x00, // 178 --> І + 0x00, // 179 --> і + 0x00, // 180 --> ґ + 0x00, // 181 --> µ + 0x00, // 182 --> ¶ + 0x00, // 183 --> · + 0x00, // 184 --> ё + 0x08, 0xfe, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xfe, 0x00, 0x24, 0x00, 0x2a, 0x00, 0x24, 0x00, // 185 --> № + 0x00, // 186 --> є + 0x00, // 187 --> » + 0x00, // 188 --> ј + 0x00, // 189 --> Ѕ + 0x00, // 190 --> ѕ + 0x00, // 191 --> ї + 0x05, 0xfc, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0xfc, 0x00, // 192 --> А + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x62, 0x00, // 193 --> Б + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 194 --> В + 0x05, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, // 195 --> Г + 0x07, 0x80, 0x01, 0xfc, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0xfc, 0x00, 0x80, 0x01, // 196 --> Д + 0x05, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, // 197 --> Е + 0x07, 0xee, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0xee, 0x00, // 198 --> Ж + 0x05, 0x44, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x6c, 0x00, // 199 --> З + 0x05, 0xfe, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0xfe, 0x00, // 200 --> И + 0x05, 0xfc, 0x00, 0x21, 0x00, 0x12, 0x00, 0x09, 0x00, 0xfc, 0x00, // 201 --> Й + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, // 202 --> К + 0x05, 0x80, 0x00, 0x7c, 0x00, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, // 203 --> Л + 0x07, 0xfe, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0xfe, 0x00, // 204 --> М + 0x05, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, // 205 --> Н + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 206 --> О + 0x05, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, // 207 --> П + 0x05, 0xfe, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x0c, 0x00, // 208 --> Р + 0x05, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, // 209 --> С + 0x05, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, // 210 --> Т + 0x05, 0x4e, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x7e, 0x00, // 211 --> У + 0x07, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0xff, 0x01, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 212 --> Ф + 0x05, 0xc6, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0xc6, 0x00, // 213 --> Х + 0x06, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x01, // 214 --> Ц + 0x05, 0x0e, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, // 215 --> Ч + 0x07, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, // 216 --> Ш + 0x08, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x01, // 217 --> Щ + 0x07, 0x02, 0x00, 0x02, 0x00, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, // 218 --> Ъ + 0x07, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe, 0x00, // 219 --> Ы + 0x05, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, // 220 --> Ь + 0x05, 0x44, 0x00, 0x82, 0x00, 0x92, 0x00, 0x92, 0x00, 0x7c, 0x00, // 221 --> Э + 0x08, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x7c, 0x00, // 222 --> Ю + 0x05, 0x8c, 0x00, 0x52, 0x00, 0x32, 0x00, 0x12, 0x00, 0xfe, 0x00, // 223 --> Я + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, 0x00, // 224 --> а + 0x04, 0x7c, 0x00, 0x8a, 0x00, 0x8a, 0x00, 0x72, 0x00, // 225 --> б + 0x04, 0xf8, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x50, 0x00, // 226 --> в + 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, // 227 --> г + 0x06, 0x80, 0x01, 0xf0, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf0, 0x00, 0x80, 0x01, // 228 --> д + 0x04, 0x70, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x30, 0x00, // 229 --> е + 0x07, 0xd8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xd8, 0x00, // 230 --> ж + 0x04, 0x50, 0x00, 0x88, 0x00, 0xa8, 0x00, 0x50, 0x00, // 231 --> з + 0x05, 0xf8, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0xf8, 0x00, // 232 --> и + 0x05, 0xf8, 0x00, 0x41, 0x00, 0x22, 0x00, 0x11, 0x00, 0xf8, 0x00, // 233 --> й + 0x04, 0xf8, 0x00, 0x20, 0x00, 0x50, 0x00, 0x88, 0x00, // 234 --> к + 0x04, 0x80, 0x00, 0x70, 0x00, 0x08, 0x00, 0xf8, 0x00, // 235 --> л + 0x05, 0xf8, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0xf8, 0x00, // 236 --> м + 0x04, 0xf8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8, 0x00, // 237 --> н + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 238 --> о + 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf8, 0x00, // 239 --> п + 0x04, 0xf8, 0x03, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 240 --> р + 0x04, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x50, 0x00, // 241 --> с + 0x05, 0x08, 0x00, 0x08, 0x00, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, // 242 --> т + 0x04, 0x78, 0x00, 0x80, 0x02, 0x80, 0x02, 0xf8, 0x01, // 243 --> у + 0x07, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0xfe, 0x03, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 244 --> ф + 0x04, 0xd8, 0x00, 0x20, 0x00, 0x20, 0x00, 0xd8, 0x00, // 245 --> х + 0x05, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x01, // 246 --> ц + 0x04, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8, 0x00, // 247 --> ч + 0x07, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, // 248 --> ш + 0x08, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf8, 0x00, 0x80, 0x01, // 249 --> щ + 0x05, 0x08, 0x00, 0xf8, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x40, 0x00, // 250 --> ъ + 0x06, 0xf8, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf8, 0x00, // 251 --> ы + 0x04, 0xf8, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x40, 0x00, // 252 --> ь + 0x04, 0x50, 0x00, 0x88, 0x00, 0xa8, 0x00, 0x70, 0x00, // 253 --> э + 0x06, 0xf8, 0x00, 0x20, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, // 254 --> ю + 0x04, 0x90, 0x00, 0x68, 0x00, 0x28, 0x00, 0xf8, 0x00 // 255 --> я +}; diff --git a/icons/famfamfam/folder_table.png b/icons/famfamfam/folder_table.png new file mode 100644 index 0000000..473cee3 Binary files /dev/null and b/icons/famfamfam/folder_table.png differ