public static System.Drawing.Image LoadImg(string filename) { // this gives Out of Memory on Linux filename = PathFix(filename); if (!File.Exists(filename)) { VbX.MsgBox("File not found:" + filename); return(null); } if (!IsLinux) { return(System.Drawing.Image.FromFile(filename)); } // I understand this does work on linux // VbX.MsgBox (filename); Stream sr = new FileStream(filename, FileMode.Open); System.Drawing.Image im = System.Drawing.Image.FromStream(sr); sr.Close(); sr = null; return(im); //return null; }
public static string PathFixDir(string path, string lookfor) { if (lookfor.Length == 0) { return(slash); } string path2 = ""; if (path.Length > 0) { if (VbX.Right(path, 1) != slash) { path += slash; } path2 = path; } else { path2 = "." + slash; } foreach (string dir in Directory.GetDirectories(path2)) { if (dir.ToLower() == path + lookfor.ToLower()) { return(dir); } } if (path.Length > 0) { lookfor = path + slash + lookfor; } return(lookfor); }
public static string PathFixFile(string path, string lookfor) { string path2 = ""; if (path.Length > 0) { if (VbX.Right(path, 1) != slash) { path += slash; } path2 = path; } else { path2 = "." + slash; } try { foreach (string dir in Directory.GetFiles(path2)) { if (dir.ToLower() == path + lookfor.ToLower()) { return(dir); } } } catch (Exception ex) { VbX.MsgBox(ex.ToString()); } return(path + lookfor); }
void doOnebytebatch(string bitdata)//, StringBuilder Chunk) { bitdata = bitdata.Trim(); if (bitdata.Length == 0) { return; } int lng = bitdata.Length / 8; if (lng < 3) { // this code needs at least 3 bytes! dobytebatch(bitdata); return; } // Chunk.Append(nl + "defb &00,"); //Double Zero nibble is the marker for a repating byte batch addbytetodata(0); while (lng >= 0) { int pp2 = lng; if (pp2 > 255) { pp2 = 255; } // Chunk.Append((pp2).ToString("x")); addbytetodata(pp2); lng -= 255; } addbytetodata(VbX.BinToHex(unnibble(bitdata.Substring(0, 8)))); }
private void updateinfo() { txtInfo.Text = ""; step = VbX.CInt(txtScale.Text); if (step == 0) { step = 1; } txtInfo.Text += "Input Frequency :" + Frequency.ToString() + nl; txtInfo.Text += "Filelength :" + FileLength.ToString() + nl; Bitdepth = VbX.CInt(VbX.Left(cboBitDepth.Text, 1)); if (cboBitDepth.Text == "CPC+ DMA") { Bitdepth = 16; } Single dividor = 8 / Bitdepth; if (dividor <= 0) { dividor = 1; } //if (cboBitDepth.Text == "CPC+ DMA") { dividor = 0.5F; } txtInfo.Text += "Output Frequency :" + (Frequency / step).ToString() + nl; txtInfo.Text += "Output Size (bytes):" + ((FileLength / step) / dividor).ToString() + nl; DestFile = txtSrc.Text.ToLower().Replace(".wav", Bitdepth.ToString() + "-" + step.ToString() + ".raw"); }
void addbytetodata(string b) { if (b.Length > 2) { VbX.MsgBox("Chunk too long!" + b); } RleData[RleDataPos] = (byte)VbX.HexToInt(b); RleDataPos++; }
void addbytetodata(int b) { if (b > 255) { VbX.MsgBox("Int too high!" + b); } RleData[RleDataPos] = (byte)b; RleDataPos++; }
public static string addslash(string lin) { if (lin.Length == 0) { return(""); } if (VbX.Right(lin, 1) == "/" || VbX.Right(lin, 1) == "\\") { return(lin); } return(lin + slash); }
/* * * private string GetPair(int y, int x) * { * int transpcount = 0; * if (x < 0) return "Bad!"; * string thispair = ""; * for (int pair = 0; pair < 2; pair++) * { * int thisbyte = 0; * for (int bit = 0; bit < 4; bit++) * { * int tx = x + (3 - bit) + (pair * 4); * int dot = spritepixel[tx, y]; * if (dot > 15) * { * transpcount++; * dot = 0; * } * else if (dot > 3) { * dot = 3; * } * string binary = VbX.Right("00" + Convert.ToString(dot, 2), 2); * string Binary2 = binary.Substring(1, 1) + "000" + binary.Substring(0, 1); * * thisbyte = thisbyte + (Convert.ToInt32(Binary2, 2) << bit); * // if (dot == 3) VbX.MsgBox(Binary2 + " " + bit.ToString() + " " + thisbyte.ToString()); * } * thispair = VbX.Right("00" + thisbyte.ToString("X"), 2) + thispair; * } * if (transpcount == 8) { return "ZZZZ"; } * return thispair; * } */ private string GetPair(int y, int x) { int transpcount = 0; if (x < 0) { return("Bad!"); } string thispair = ""; for (int pair = 0; pair < 2; pair++) { int thisbyte = 0; for (int bit = 0; bit < 2; bit++) { int tx = x + (bit) + (pair * 2); int dot = spritepixel[tx, y]; if (dot > 15) { transpcount++; dot = 0; } // else if (dot > 1) { // dot = 1; // } string binary = VbX.Right("0000" + Convert.ToString(dot, 2), 4); string Binary2 = binary;//binary.Substring(1, 1) + "000" + binary.Substring(0, 1); thisbyte = thisbyte + (Convert.ToInt32(Binary2, 2) << (1 - bit) * 4); // if (dot == 3) VbX.MsgBox(Binary2 + " " + bit.ToString() + " " + thisbyte.ToString()); } thispair = thispair + VbX.Right("00" + thisbyte.ToString("X"), 2); } // VbX.MsgBox(thispair); if (transpcount == 8) { return("ZZZZ"); } return(thispair); }
void donibblebatch(string nibblename, int nibblecount)//, StringBuilder Chunk) { int lineitem = 0; //while (nibblecount > 0) // { //if (lineitem > 0) //{ Chunk.Append(","); } //else //{ Chunk.Append(nl + "defb "); } int nc = nibblecount; if (nibblecount > 15) { nc = 15; } //nibblecount -= nc; string ct = VbX.IntToBin(nc).Substring(4, 4); addbytetodata(VbX.BinToHex(nibblename + ct)); nibblecount -= 15; while (nibblecount >= 0) { int pp2 = nibblecount; if (pp2 > 255) { pp2 = 255; } //Chunk.Append(",&" + (pp2).ToString("x")); addbytetodata(pp2); nibblecount -= 255; } lineitem++; // } }
public static string IntToBin(int i) { return(VbX.Right("00000000" + Convert.ToString(i, 2), 8)); }
public static string GetItem(string lin, string ch, int pos, string brackets) { if (lin.Length == 0 || ch.Length == 0) { return(""); } string bracketarray = ""; string part = ""; int foundnum = 0; for (int i = 1; i <= lin.Length; i++) { string c = VbX.Mid(lin, i, 1); if (c == ch & string.IsNullOrEmpty(bracketarray)) { if (foundnum == pos) { return(part); } else { part = ""; foundnum = foundnum + 1; } } else { part = part + c; } // MsgBox(c) if (c == VbX.Chr(34) & VbX.InStr(brackets, VbX.Chr(34)) > 0) { if (VbX.Right(bracketarray, 1) == VbX.Chr(34) & !string.IsNullOrEmpty(bracketarray)) { bracketarray = VbX.Left(bracketarray, VbX.Len(bracketarray) - 1); } else { bracketarray = bracketarray + VbX.Chr(34); } //part = part + c } else if ((c == "(" | c == ")") & VbX.InStr(brackets, "(") > 0) { if (VbX.Right(bracketarray, 1) == "(" & c == ")" & !string.IsNullOrEmpty(bracketarray)) { bracketarray = VbX.Left(bracketarray, VbX.Len(bracketarray) - 1); } else { bracketarray = bracketarray + "("; } //part = part + c } else if ((c == "{" | c == "}") & VbX.InStr(brackets, "{") > 0) { if (VbX.Right(bracketarray, 1) == "{" & c == "}" & !string.IsNullOrEmpty(bracketarray)) { bracketarray = VbX.Left(bracketarray, VbX.Len(bracketarray) - 1); } else { bracketarray = bracketarray + "{"; } //part = part + c } } if (foundnum == pos) { return(part); } if (pos == -1) { return(foundnum.ToString()); } return(""); }
void dobytebatch(string bitdata)//, StringBuilder Chunk) { bitdata = bitdata.Trim(); if (bitdata.Length == 0) { return; } int lng = bitdata.Length / 8; int partnum = 0; for (int i = 0; i < bitdata.Length; i += 8) { //; string part = VbX.Mid(bitdata + " ", i + 1, 8).Trim(); if (part.Length == 8) { //if (i > 0) //{ //Chunk.Append(","); //} //else //{ //Chunk.Append(nl + "defb "); //} // if (partnum == 14) partnum = 0; if (partnum == 0) { int pp = (lng - (i / 8)); if (pp > 15) { pp = 15; } //Chunk.Append("&" + (16 * pp).ToString("x") + ","); addbytetodata((16 * pp)); if (pp == 15) { pp = (lng - (i / 8)); pp -= 15; while (pp >= 0) { int pp2 = pp; if (pp2 > 255) { pp2 = 255; } //Chunk.Append("&" + (pp2).ToString("x") + ","); addbytetodata(pp2); pp -= 255; } } } partnum = partnum + 1; addbytetodata(VbX.BinToHex(unnibble(part))); // VbX.MsgBox("&" + globals.BinToHex(part)); // donibblebatch(part, 1, Chunk); } else { //Chunk.Append(nl); donibblebatch(part, 1); } } }
public void NewRLE() { string lastnibble = ""; string Randombytes = ""; int nibblecount = 1; int FirstY = height; // intentionally backwards! int LastY = 0; LastY = height; // intentionally backwards! FirstY = 0; //} int CurrentMode = 0; //1=nibble . 2=byte 3=repeatingbytes int lineitem = 0; String RepeatingBytes = ""; // MSX Version has two literal bytes at the start string thispair2 = GetPair(0, 0); addbytetodata(VbX.HexToInt(thispair2.Substring(0, 2))); addbytetodata(VbX.HexToInt(thispair2.Substring(2, 2))); // MSX Version has two literal bytes at the start for (int y = FirstY; y < LastY; y++) { int fx = 0; if (y == 0) { fx = 4; // MSX Version has two literal bytes at the start } for (int x = fx; x <= width - 4; x += 4) { string thispair = GetPair(y, x); for (int by = 0; by < 2; by++) { string ThisByte = ""; switch (by) { case 0: ThisByte = thispair.Substring(0, 2); break; case 1: ThisByte = thispair.Substring(2, 2); break; } string nibble = ""; for (int n = 0; n < 2; n++) { switch (n) { case 0: //nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "11001100"); //nibble = nibble.Substring(0, 2) + nibble.Substring(4, 2); nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "11110000"); nibble = nibble.Substring(0, 4); break; case 1: //nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "00110011"); //nibble = nibble.Substring(2 + 0, 2) + nibble.Substring(2 + 4, 2); nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "00001111"); nibble = nibble.Substring(4, 4); break; } if (nibble == lastnibble) { nibblecount++; CurrentMode = 1; } else if (lastnibble == "") { lastnibble = nibble; nibblecount = 1; } else { if (nibblecount > 1) { if (Randombytes.Length > 1) { if (Randombytes.Length == 4) { donibblebatch(Randombytes, 1); donibblebatch(lastnibble, nibblecount); lastnibble = ""; } else { dobytebatchWithRepeater(Randombytes); donibblebatch(lastnibble, nibblecount); } Randombytes = ""; } else { { donibblebatch(lastnibble, nibblecount); } } } else { if (VbX.Len(Randombytes) == 4 && n == 1) // { //finish the last byte donibblebatch(Randombytes, nibblecount); nibblecount = 0; Randombytes = lastnibble; CurrentMode = 2; } else { Randombytes = Randombytes + lastnibble; CurrentMode = 2; nibblecount = 0; } } nibblecount = 1; lastnibble = nibble; } } } } } dobytebatchWithRepeater(Randombytes); donibblebatch(lastnibble, nibblecount); /* * FirstY = FirstY + VbX.CInt(txtYpos.Text); * * globals.imagedata.Append(Filename + ":" + nl); * globals.imagedata.Append("ld hl," + Filename + "_rledata-1" + nl); * globals.imagedata.Append("ld de," + Filename + "_rledataEnd-1" + nl); * globals.imagedata.Append("ld b," + FirstY.ToString() + nl); * int thiswidth = b.Width / 4; * globals.imagedata.Append("ld ixh," + thiswidth.ToString() + nl); * * * thiswidth = VbX.CInt(txtXpos.Text) + thiswidth - 1; * * globals.imagedata.Append("ld IXL," + thiswidth.ToString() + nl); * * globals.imagedata.Append("di" + nl); * globals.imagedata.Append("exx " + nl); * globals.imagedata.Append("push bc" + nl); * globals.imagedata.Append("exx" + nl); * globals.imagedata.Append("jp RLE_Draw" + nl); * globals.imagedata.Append(Filename + "_rledata:" + nl); * globals.imagedata.Append(Chunk.ToString() + nl); * globals.imagedata.Append(Filename + "_rledataEnd: defb 0" + nl); * textBox1.Text = globals.initdata + nl + globals.imagedata.ToString() + nl + globals.globaldata.ToString(); */ }
public void NewRLE() { //string Filename = DoFilename(txtFilename.Text);//"Pic" + ss.GetItem(txtFilename.Text, "\\", ss.CountItems(txtFilename.Text, "\\")).Replace(".", ""); // addheader(); // globals.PicNumber += 3 ; string lastnibble = ""; string Randombytes = ""; int nibblecount = 1; int FirstY = height; // intentionally backwards! int LastY = 0; LastY = height; // intentionally backwards! FirstY = 0; //} int CurrentMode = 0; //1=nibble . 2=byte 3=repeatingbytes int lineitem = 0; String RepeatingBytes = ""; for (int y = FirstY; y < LastY; y++) { for (int x = width - 16; x >= 0; x -= 16) { string thispair = GetPair(y, x); for (int by = 0; by < 2; by++) { string ThisByte = ""; switch (by) { case 0: ThisByte = thispair.Substring(0, 2); break; case 1: ThisByte = thispair.Substring(2, 2); break; } string nibble = ""; for (int n = 0; n < 2; n++) { switch (n) { case 1: //nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "11001100"); //nibble = nibble.Substring(0, 2) + nibble.Substring(4, 2); nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "11110000"); nibble = nibble.Substring(0, 4); break; case 0: //nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "00110011"); //nibble = nibble.Substring(2 + 0, 2) + nibble.Substring(2 + 4, 2); nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "00001111"); nibble = nibble.Substring(4, 4); break; } if (nibble == lastnibble) { nibblecount++; CurrentMode = 1; } else if (lastnibble == "") { lastnibble = nibble; nibblecount = 1; } else { if (nibblecount > 1) { if (Randombytes.Length > 1) { if (Randombytes.Length == 4) { donibblebatch(Randombytes, 1); donibblebatch(lastnibble, nibblecount); lastnibble = ""; } else { dobytebatchWithRepeater(Randombytes); donibblebatch(lastnibble, nibblecount); } Randombytes = ""; } else { { donibblebatch(lastnibble, nibblecount); } } } else { if (VbX.Len(Randombytes) == 4 && n == 1) // { //finish the last byte donibblebatch(Randombytes, nibblecount); nibblecount = 0; Randombytes = lastnibble; CurrentMode = 2; } else { Randombytes = Randombytes + lastnibble; CurrentMode = 2; nibblecount = 0; } } nibblecount = 1; lastnibble = nibble; } } } } } dobytebatchWithRepeater(Randombytes); donibblebatch(lastnibble, nibblecount); /* * FirstY = FirstY + VbX.CInt(txtYpos.Text); * * globals.imagedata.Append(Filename + ":" + nl); * globals.imagedata.Append("ld hl," + Filename + "_rledata-1" + nl); * globals.imagedata.Append("ld de," + Filename + "_rledataEnd-1" + nl); * globals.imagedata.Append("ld b," + FirstY.ToString() + nl); * int thiswidth = b.Width / 4; * globals.imagedata.Append("ld ixh," + thiswidth.ToString() + nl); * * * thiswidth = VbX.CInt(txtXpos.Text) + thiswidth - 1; * * globals.imagedata.Append("ld IXL," + thiswidth.ToString() + nl); * * globals.imagedata.Append("di" + nl); * globals.imagedata.Append("exx " + nl); * globals.imagedata.Append("push bc" + nl); * globals.imagedata.Append("exx" + nl); * globals.imagedata.Append("jp RLE_Draw" + nl); * globals.imagedata.Append(Filename + "_rledata:" + nl); * globals.imagedata.Append(Chunk.ToString() + nl); * globals.imagedata.Append(Filename + "_rledataEnd: defb 0" + nl); * textBox1.Text = globals.initdata + nl + globals.imagedata.ToString() + nl + globals.globaldata.ToString(); */ }
public void NewRLE() { string lastnibble = ""; string Randombytes = ""; int nibblecount = 1; int FirstY = height; // intentionally backwards! int LastY = 0; LastY = height; // intentionally backwards! FirstY = 0; //} int CurrentMode = 0; //1=nibble . 2=byte 3=repeatingbytes int lineitem = 0; String RepeatingBytes = ""; for (int y = FirstY; y < LastY; y++) { for (int x = width - 8; x >= 0; x -= 8) { string thispair = GetPair(y, x); for (int by = 0; by < 2; by++) { string ThisByte = ""; switch (by) { case 0: ThisByte = thispair.Substring(0, 2); break; case 1: ThisByte = thispair.Substring(2, 2); break; } string nibble = ""; for (int n = 0; n < 2; n++) { switch (n) { case 1: nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "11001100"); nibble = nibble.Substring(0, 2) + nibble.Substring(4, 2); break; case 0: nibble = VbX.BinAnd(VbX.HexToBin(ThisByte), "00110011"); nibble = nibble.Substring(2 + 0, 2) + nibble.Substring(2 + 4, 2); break; } if (nibble == lastnibble) { nibblecount++; CurrentMode = 1; } else if (lastnibble == "") { lastnibble = nibble; nibblecount = 1; } else { if (nibblecount > 1) { if (Randombytes.Length > 1) { if (Randombytes.Length == 4) { donibblebatch(Randombytes, 1); donibblebatch(lastnibble, nibblecount); lastnibble = ""; } else { dobytebatchWithRepeater(Randombytes); donibblebatch(lastnibble, nibblecount); } Randombytes = ""; } else { { donibblebatch(lastnibble, nibblecount); } } } else { if (VbX.Len(Randombytes) == 4 && n == 1) // { //finish the last byte donibblebatch(Randombytes, nibblecount); nibblecount = 0; Randombytes = lastnibble; CurrentMode = 2; } else { Randombytes = Randombytes + lastnibble; CurrentMode = 2; nibblecount = 0; } } nibblecount = 1; lastnibble = nibble; } } } } } dobytebatchWithRepeater(Randombytes); donibblebatch(lastnibble, nibblecount); }