48 lines
9.9 KiB
Lua
48 lines
9.9 KiB
Lua
local b64str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
|
|
|
local logostr = [[
|
|
32Vid 1.1
|
|
14
|
|
!CPC0088AAAAAA8ADQAAAAAAAAAAACBFkAEgDosCkAEgDYIBgwEgXQBFAgEADgEBIAECAQANAgIAXQAAACDUrAvUpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==aee8912c
|
|
!CPC0090AAAAAA8ADQAAAAAAAAAAACBFkAEgDoIBiwGQASALnwKHAYMBIF0ARQMBAA4yATABAwEACxABAwMAXQAAAAgICSLUrQnUpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==54cba36e
|
|
!CPC00C8AAAAAA8ADQAAAAAAAAAAACBFkAEgDoIBiwGQASAMnwGHAYMBIAuHASACnwEgCZ8BgQEgAp8BgQEgCoMBiwGHASAyAEUDAQAOMgEwAQMBAAwTAwALEAMBAQAJEAQBAgAKAQMAMgAAAAqlnyHTrAnTpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==66c61a81
|
|
!CPC00ECAAAAAA8ADQAAAAAAAAAAACBFkAEgDoIBiwGQASAMnwGHAYMBIAuHASACnwEgCZ8BgQEgAp8BgQEgCIcBIAOHASAJlQEgAp8BgQEgCoIBgwIgFwBFAwEADjIBMAEDAQAMEwMACxADAQEACRAEAQIACBAEAQEACRADAQIACgEDABcAAAAKpZ8f06wJ06cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=237cdd0f
|
|
!CPC0124AAAAAA8ADQAAAAAAAAAAACA/jwEgBZABIAmCAYsBIAOCAYsBkAEgCYIBiwGPAZ8BhwGDASAGggGPASADhwEgAp8BIAmfAYEBIAKfAYEBIAiHASADhwEgCZUBIAKfAYEBIAqCAYMCIBcAP0ABAAUDAQAIQAMAAzIBMAEDAQAGQAYTAwAGBAJAAxQBEAIBAQAJQAEUARACAQIACBAEAQEACRADAQIACgEDABcAAAAKpZ8f06wJ06ckAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=1281e843
|
|
!CPC0144AAAAAA8ADQAAAAAAAAAAACAlnwGDASALhwGBASALgwEgBJ8BkAEgC4cBgQEgAYIBiwGQASAJggGLAY8BnwGHAYMBIAaCAY8BIAOHASACnwEgCZ8BgQEgAp8BgQEgCIcBIAOHASAJlQEgAp8BgQEgCoIBgwIgFwAlQAIAC0AEAAlABQQBAwEACEADBAIAATIBMAEDAQAGQAYTAwAGBAJAAxQBEAIBAQAJQAEUARACAQIACBAEAQEACRADAQIACgEDABcAAAAKpZ8f06wJ06ckAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=1ca3632d
|
|
!CPC0168AAAAAA8ADQAAAAAAAAAAACAYnwEgDJ8BgwGVAYIBiwEgCIcBgQEgApUBnwGBASAGgwEgBJ8BkAEgC4cBgQEgAYIBiwGQASAJggGLAY8BnwGHAYMBIAaCAY8BIAOHASACnwEgCZ8BgQEgAp8BgQEgCIcBIAOHASAJlQEgAp8BgQEgCoIBgwIgFwAYYAEADFACYAMACFAEYAEGAgAGUAUFAQMBAAhQAwUCAAEyATABAwEABlAGEwMABgUCUAMVARACAQEACVABFQEQAgECAAgQBAEBAAkQAwECAAoBAwAXAAAACaWfDNioCdSnBwITJACDCv6vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7f1066b0
|
|
!CPC0180AAAAAA8ADQAAAAAAAAAAACAYnwEgDJ8BgwGVAYIBiwEgCIcBgQEgApUBnwGBAYcBIAWDASAEnwGQASABiwGQASAIhwGBASABggGLAZABIAmCAYsBjwGfAYcBgwEgBoIBjwEgA4cBIAKfASAJnwGBASACnwGBASAIhwEgA4cBIAmVASACnwGBASAKggGDAiAXABhgAQAMUAJgAwAIUARgAQYCYAEABVAFBQEDAQABBgFgAQAFUAMFAgABMgEwAQMBAAZQBhMDAAYFAlADFQEQAgEBAAlQARUBEAIBAgAIEAQBAQAJEAMBAgAKAQMAFwAAAAmlnw3XqAnUpwcCFCQAgwr+rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==85fb6a05
|
|
!CPC0178AAAAAA8ADQAAAAAAAAAAACAXjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAlABdQAWACBgEACFAEYAIGAWABAAVQBgYCYAIABVADBQMwAQMBAAEGAQAFUAQFAQABMAETARABAAYFAVAEFQETARACAAgFAhUBEAMBAQAIEAQBAgAIEAQBAQAKAQQAJQAAAAqlnw/WqQnUpwUBDyQAhAr+rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==886211b1
|
|
!CPC0168AAAAAA8ADQAAAAAAAAAAACAJlwGQASAKnwGHASABlQEgAZ0BIAePAYEBIAOKAYcBjwGBASAJnwGHAYsBIAGCAYsBIAiRASADggGLASAGkAEgA4IBgwGHAYEBIAiDAY8BIAGfAYEBIAKXASAJhwEgA4cBIAifAYEBIAKfAYEBIAmVASAChwEgNAAJYAEGAQAKUANgAgYBAAdQBQYCYAIABVAEBQIwAQABBgIABVADBQEAAjADAAZQBhMCEAEABwUCUAEVAhACAQEACRAEAQEACBAEAQIACRADAQEANAAAAAqlnwvYqAnUpwIACiQAhAr+rwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==e5413615
|
|
!CPC0180AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfASALgwGPAYcBIAOFASAInwGBASACnwGBASAIlwEgA4cBIAqKAY8CgQEgCIgBkAEgKgAIYAFwAgcBAAhgBHACBwFwAQAFYAYHAnACAAVgAwYDQAEEAQABBwEABWAEBgEAAUABJAEgAQAGBgFgBCYBIAMACAYCJgEgAwIBAAggBAICAAggBAIBAAoCBAAIAQIAKgAAAP///wmlnwrXqAnUpw8KHiQAhAr+rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==15b0c7c0
|
|
!CPC01B0AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABiAEgB58BIAGIAZsBIBeXASAGAAhgAXACBwEACGAEcAIHAXABAAVgBgcCcAIABWADBgNAAQQBAAEHAQAFYAQGAQABQAEkASABAAYGAWAEJgEkASACAAgGAiYBIAMCAQAIIAQCAgAIIAQCAQAKAgQABwEEAAcQAQABAQEQAQAXEAEABgAAAP///wmlnwrXqAnUpw8KHiQAhAr+rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==207a1880
|
|
!CPC01DCAAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABiAEgBZ8BjAGbAZ8BjAGbAZUBIAefASADggEgCJcBIAGVASAGAAhgAXACBwEACGAEcAIHAXABAAVgBgcCcAIABWADBgNAAQQBAAEHAQAFYAQGAQABQAEkASABAAYGAWAEJgEkASACAAgGAiYBIAMCAQAIIAQCAgAIIAQCAQAKAgQABwEEAAUQAQEBEAIBARABAQEABxABAAMBAQAIEAEAARABAAYAAAD///8JpZ8K16gJ1KcPCh8kAIQK/q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=15b84ecc
|
|
!CPC0208AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABlwEgBZ8BjAGbAZ8BjAGbAZUBIAWfASABnwGCAYQBIAGCAYQBIAGFASACnwEgApUBIAGVASAGAAhgAXACBwEACGAEcAIHAXABAAVgBgcCcAIABWADBgNAAQQBAAEHAQAFYAQGAQABQAEkASABAAYGAWAEJgEkASACAAgGAiYBIAMCAQAIIAQCAgAIIAQCAQAKAgQABwEDEAEABRABAQEQAgEBEAEBAQAFEAEAARABAQIAAQECAAEBAQACEAEAAhABAAEQAQAGAAAA////CaWfCteoCdSnDwofJACECv6uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA48b5ed0d
|
|
!CPC0218AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABlwEgBZ8BjAGbAZ8BjAGbAZUBIAKCASAClQEgAZUBggGMAZABggGMAZABmgGQASABnwGQASABlQEgAZUBIAYACGABcAIHAQAIYARwAgcBcAEABWAGBwJwAgAFYAMGA0ABBAEAAQcBAAVgBAYBAAFAASQBIAEABgYBYAQmASQBIAIACAYCJgEgAwIBAAggBAICAAggBAIBAAoCBAAHAQMQAQAFEAEBARACAQEQAQEBAAIBAQACEAEAARABAQYQAQEBAAEQAQEBAAEQAQABEAEABgAAAP///wmlnwrXqAnUpwoIDyQAhAr+rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==548cda66
|
|
!CPC022CAAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABlwEgAp8BhAGfAowBmwGfAYwBmwGVASACigEgApUBIAGVAYIBjAGQAYIBjAGQAZoBjwGEAZ8BjwEgAZUBIAGVASACigEgAooBAAhgAXACBwEACGAEcAIHAXABAAVgBgcCcAIABWADBgNAAQQBAAEHAQAFYAQGAQABQAEkASABAAYGAWAEJgEkASACAAgGAiYBIAMCAQAIIAQCAgAIIAQCAQAKAgQABwEDEAEAAhABAQEQAgEBEAIBARABAQEAAgEBAAIQAQABEAEBBhACAQEQAgABEAEAARABAAIBAQACAQEAAAD///8JpZ8K16gJ1KcKCA8kAIQK/q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=f0226c54
|
|
!CPC0240AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABlwEgAp8BjAGbAZ8BjAGbAZ8BjAGbAZUBIAGQAZUBIAKVASABlQGCAYwBkAGCAYwBkAGaAY8BhQGfAY8BkAGVASABlQEgAZ8BmgEgAZ8BmgEACGABcAIHAQAIYARwAgcBcAEABWAGBwJwAgAFYAMGA0ABBAEAAQcBAAVgBAYBAAFAASQBIAEABgYBYAQmASQBIAIACAYCJgEgAwIBAAggBAICAAggBAIBAAoCBAAHAQMQAQACEAEBARACAQEQAgEBEAEBAQABAQEQAQACEAEAARABAQYQAgEBEAIBARABAAEQAQABEAEBAQABEAEBAQAAAP///wmlnwrXqAnUpwoIDyQAhAr+rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==9585a281
|
|
!CPC0240AAAAAA8ADQAAAAAAAAAAACAIjwGVAYsBkAEgCJ8BhwGBASABlQEgAYcBnwEgBY8BgwEgBIIBgQGTASAJnwGHAYEBggGQASABggEgCIsBkAEgAp8BggEgBosBIASfAYEBIAqDAY8BhwEgA4UBIAifAYEBIAKfAYEBIAiXASADhwEgCooBjwKBASAHmAGMAZABlwEgAp8BjAGbAZ8BjAGbAZ8BjAGbAZUBnwGQAZUBIAKVASABlQGCAYwBkAGCAYwBkAGaAY8BhQGdAY8BkAGVAYMBlAEgAY8BmgEgAY8BmgEACGABcAIHAQAIYARwAgcBcAEABWAGBwJwAgAFYAMGA0ABBAEAAQcBAAVgBAYBAAFAASQBIAEABgYBYAQmASQBIAIACAYCJgEgAwIBAAggBAICAAggBAIBAAoCBAAHAQMQAQACEAEBARACAQEQAgEBEAEBARABAQEQAQACEAEAARABAQYQAgEBEAIBARABAQEQAQABEAEBAQABEAEBAQAAAP///wmlnwrXqAnUpwoIDyQAhAr+rgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==9d0fbd72
|
|
|
|
]]
|
|
|
|
local lines, lineIndex = {}, 1; for line in logostr:gmatch("[^\r\n]+") do table.insert(lines, line) end; local readLine = function() local line = lines[lineIndex]; lineIndex = lineIndex + 1; return line end; if readLine() ~= "32Vid 1.1" then error("Unsupported file") end; local fps = tonumber(readLine()); local first, second = readLine(), readLine(); if second == "" or second == nil then fps = 0 end
|
|
|
|
term.clear()
|
|
|
|
local fi = 1
|
|
while true do
|
|
local f;if first then f,first=first,nil elseif second then f,second=second,nil else f=readLine()end;if f==""or f==nil then break end;local m=f:match("^!CP([CD])");if not m then error("Invalid file")end;local d;if m=="C"then local l=tonumber(f:sub(5,8),16);d=f:sub(9,l+8)else local l=tonumber(f:sub(5,16),16);d=f:sub(17,l+16)end;local function b64dec(s)local r="";for c in s:gmatch"...."do if c:sub(3,4)=="=="then r=r..string.char(bit32.bor(bit32.lshift(b64str:find(c:sub(1,1))-1,2),bit32.rshift(b64str:find(c:sub(2,2))-1,4)))elseif c:sub(4,4)=="="then local n=(b64str:find(c:sub(1,1))-1)*4096+(b64str:find(c:sub(2,2))-1)*64+(b64str:find(c:sub(3,3))-1);r=r..string.char(bit32.extract(n,10,8))..string.char(bit32.extract(n,2,8))else local n=(b64str:find(c:sub(1,1))-1)*262144+(b64str:find(c:sub(2,2))-1)*4096+(b64str:find(c:sub(3,3))-1)*64+(b64str:find(c:sub(4,4))-1);r=r..string.char(bit32.extract(n,16,8))..string.char(bit32.extract(n,8,8))..string.char(bit32.extract(n,0,8))end end;return r end;local dt=b64dec(d);assert(dt:sub(1,4)=="\0\0\0\0"and dt:sub(9,16)=="\0\0\0\0\0\0\0\0","Invalid file");local w,h=("HH"):unpack(dt,5);if w<=0 or h<=0 then break end;local c,n,p=string.unpack("c1B",dt,17);local tl={};local ch=c:byte();for y=1,h do local l="";for x=1,w do l=l..string.char(ch);n=n-1;if n==0 then c,n,p=string.unpack("c1B",dt,p);ch=c:byte()end end;tl[y]=l end;local fl,bl={},{};
|
|
for y=1,h do local fg,bg="","";for x=1,w do fg=fg..("%x"):format(bit32.band(ch,0x0F));bg=bg..("%x"):format(bit32.rshift(ch,4));n=n-1;if n==0 then ch,n,p=string.unpack("BB",dt,p)end end;fl[y]=fg;bl[y]=bg end;local tw,th=term.getSize();local sx=math.max(1,math.floor((tw-w)/2)+1);local sy=math.max(1,math.floor((th-h)/2)+1);local dh=math.min(h,th-sy+1);local dw=math.min(w,tw-sx+1);if dh>0 and dw>0 then for y=1,dh do local tx=string.sub(tl[y],1,dw);local fg=string.sub(fl[y],1,dw);local bg=string.sub(bl[y],1,dw);term.setCursorPos(sx,sy+y-1);term.blit(tx,fg,bg)end end;p=p-2;for i=0,15 do local r,g,b;r,g,b,p=string.unpack("BBB",dt,p);term.setPaletteColor(2^i,r/255,g/255,b/255)end;if fps==0 then read();break else sleep(1/fps)end
|
|
|
|
if fi == 8 then sleep(0.5) end
|
|
fi = fi+1
|
|
end
|
|
|
|
sleep(1.5)
|
|
-- Restore default palette
|
|
for i = 0, 15 do term.setPaletteColor(2^i, term.nativePaletteColor(2^i)) end
|
|
term.setBackgroundColor(colors.black)
|
|
term.setTextColor(colors.white)
|
|
term.clear()
|
|
term.setCursorPos(1, 1)
|
|
|
|
shell.run("shell") |