1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Copyright (c) 2013 The Chromium Authors. All rights reserved. 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * found in the LICENSE file. 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)NaClTerm.prefix = 'lua' 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)NaClTerm.nmf = '//storage.googleapis.com/gonacl/demos/publish/234230_dev/lua/lua.nmf' 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)window.onload = function() { 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) lib.init(function() { 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('shell').addEventListener('click', runLua, false); 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('scimark').addEventListener('click', runSciMark, false); 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('unittests').addEventListener('click', runUnitTests, false); 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('binarytrees').addEventListener('click', runBinaryTrees, false); 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('mandlebrot').addEventListener('click', runMandlebrot, false); 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('donut').addEventListener('click', runDonut, false); 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('fibonacci').addEventListener('click', runFibonacci, false); 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('banner').addEventListener('click', runBanner, false); 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NaClTerm.init(); 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }); 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runLua() { 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NaClTerm.argv = []; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.restartNaCl(); 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runUnitTests() { 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NaClTerm.argv = ['-e_U=true', 'all.lua'] 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.restartNaCl(); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runSciMark(e) { 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NaClTerm.argv = ['/mnt/http/scimark.lua'] 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.restartNaCl(); 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runBinaryTrees(e) { 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NaClTerm.argv = ['/mnt/http/binarytrees.lua'] 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.restartNaCl(); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runMandlebrot(e) { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!term_.command.loaded) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runLua(); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.sendMessage('for i=-1,1,.08 do for r=-2,1,.04 do I=i R=r n=0 b=I*I while n<26 and R*R+b<4 do I=2*R*I+i R=R*R-b+r b=I*I n=n+1 end io.write(string.char(n+32)) end print() end') 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('terminal').focus(); 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runFibonacci(e) { 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!term_.command.loaded) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runLua(); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.sendMessage('function fib(n) return n<2 and n or fib(n-1)+fib(n-2) end\nprint(fib(10))\nprint(fib(30))\n') 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('terminal').focus(); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runBanner(e) { 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!term_.command.loaded) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runLua(); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.sendMessage( 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)'t=0 A={64,36,35,42,33,61,59,58,126,45,44,46,32}L={0,254,195,3,224,135,231,127, \ 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)124,60,128,255,120,158,207,199,241,252,192,121,30,31,61,227,1,223,243,188,63,251 \ 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles),190,193,28,156,62,248,143,7,126}D={2,3,3,4,1,5,6,7,8,9,10,1,11,12,13,14,15,16,4 \ 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles),1,10,14,7,17,18,10,1,19,3,20,21,15,15,3,22,21,11,7,17,18,23,2,24,25,13,14,15,26 \ 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles),27,13,21,11,7,8,28,29,19,7,25,13,2,3,30,3,8,21,11,7,25,10,29,31,7,32,13,21,19, \ 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)27,27,13,33,34,7,25,10,35,15,16,24,20,21,19,24,27,8,36,37,7,25,10,10,31,38,39,13 \ 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}B=bit32 M=math I=io.write T=string.char P=print S=M.sin C=M.cos F=M.floor b={} \ 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)for i=1,1200 do b[i]=0 end for i,v in ipairs(D)do w=L[v]for j=1,8 do if B.band(w \ 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles),1)==1 then b[160-48+i*8+j]=1 end w=B.rshift(w,1)end end P("\\x1b[2J") for w=1, \ 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)4720 do P("\\x1b[H")s=1.06*S(t*.07)^2 for i=1,1200 do x=s*((i%60)-34)+34 y=s*(F(i \ 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/60)-15)+15 n=32 if y>=0 and y<20 and x>=0 and x<60 and b[F(y)*60+F(x)]==1 then \ 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)n=A[M.min(F(((x-30+C(t)*20)^2+(y-S(t)^2*10)^2)/(195*S(t*.2)^32+5)),12)+1]end if \ 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)i%60==0 then n=10 end I(T(n))end t=t+.005 end'); 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('terminal').focus(); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function runDonut(e) { 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!term_.command.loaded) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) runLua(); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) term_.command.sendMessage( 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)' A=0 B=0 z={}b=\n\ 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) {}E={32,46,44,45,126,\n\ 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58,59,61,33,42,35,36,64}S\n\ 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) =math.sin C=math.cos F=math.\n\ 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) floor I=io.write T=string.char W=60\n\ 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) P=print H=25 P("\\x1b[2J")for w=1,240\n\ 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) do for o=0,W*H do b[o]=1 z[o]=0 end e=\n\ 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) S(A)g=C(A)m=C(B)n=S(B)for j=0,6.28,.09\n\ 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) do d=C(j)f=S(j) for i=0,6.28,.04\n\ 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)do c=S(i)h=d+2 D =1/(c*h*e+f*g+5)\n\ 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)l=C(i)t=c*h*g- f*e x=F(W/2+W*\n\ 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles).3*D*(l*h*m-t*n ))y=F(H/2+H*.6*\n\ 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) D*(l*h*n+t*m))o =x+W*y N=math.\n\ 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) max(0,F(8*((f*e-c*d*g)*m-c*d*e-f*g -l*\n\ 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) d *n)))+2 if H> y and y>0 and x>0 and\n\ 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) W>x and D> z[o] then z[o]=D b[o]=N\n\ 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) end end end P( "\\x1b[H")for k=0\n\ 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ,W* H do if k%W~=0 then I(T(\n\ 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) E[b[k]]))else I( T( 10))\n\ 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) end end A = A + .04\n\ 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) B=B+.02 end') 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.getElementById('terminal').focus(); 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 116