Add term.blit

This commit is contained in:
Alessandro Proto 2023-01-28 23:13:12 +01:00
parent 38ff61f614
commit c278d997ff

View file

@ -139,6 +139,11 @@ internal class Term : IPlugin
name = "setBlink", name = "setBlink",
function = L_SetBlink, function = L_SetBlink,
}, },
new()
{
name = "blit",
function = L_Blit,
},
new(), new(),
}; };
@ -561,4 +566,53 @@ internal class Term : IPlugin
return 0; return 0;
} }
private static int L_Blit(IntPtr state)
{
var L = Lua.FromIntPtr(state);
var text = L.CheckString(1);
L.CheckType(2, LuaType.Table);
L.CheckType(3, LuaType.Table);
var len = L.Length(1);
L.ArgumentCheck(L.Length(2) == len, 2, "length does not match");
L.ArgumentCheck(L.Length(3) == len, 3, "length does not match");
var fg = new Color[len];
var bg = new Color[len];
L.PushCopy(2);
for (int i = 1; i <= len; i++)
{
L.GetInteger(-1, i);
var v = L.CheckInteger(-1);
L.Pop(1);
UnpackRGB((uint)v, out var r, out var g, out var b);
fg[i - 1] = new Color(r, g, b);
}
L.Pop(1);
L.PushCopy(3);
for (int i = 1; i <= len; i++)
{
L.GetInteger(-1, i);
var v = L.CheckInteger(-1);
L.Pop(1);
UnpackRGB((uint)v, out var r, out var g, out var b);
bg[i - 1] = new Color(r, g, b);
}
L.Pop(1);
for (int i = 0; i < len; i++)
{
ForegroundColor = fg[i];
BackgroundColor = bg[i];
Write(text[i].ToString());
}
return 0;
}
} }