flash on 2013-1-30

by ohisama
♥0 | Line 209 | Modified 2013-01-30 22:11:29 | MIT License
play

ActionScript3 source code

/**
 * Copyright ohisama ( http://wonderfl.net/user/ohisama )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ivWD
 */

package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import com.bit101.components.*;
    public class Main extends Sprite
    {
        private const SAMPLE_CODE : String = '\tpush\t"i"\n\tpush\t"0"\t\n\tset\n\tpush\t"x"\nloop\tpush\t"i"\n\tpush\t"i"\n\tget\t\n\tpush\t"1"\n\t+\n\tset\n\tpush\t"29"\n\tpush\t"i"\n\tget\n\t>\n\t!\n\tif\tloop\n\tpush\t"i"\n\tget\n\tset\n';
        private var editor : TextArea;
        private var stdout : TextArea;
        private var button : PushButton;
        public function Main()
        {
            Style.fontSize = 10;
            editor = new TextArea(this, 0, 0);
            editor.width = 200;
            editor.height = 380;
            editor.text = SAMPLE_CODE;
            stdout = new TextArea(this, 250, 0);
            stdout.width = 200;
            stdout.height = 380;
            button = new PushButton(this, 200, 220, "abc", function(e : MouseEvent) : void
            {
                stdout.text = "";
                run();
            });
            button.width = 50;
        }
        private function run() : void
        {
            var c1 : int;
            var c2 : int;
            var c3 : int;
            var a : String;
            var i : int;
            var j : int;
            var pc : int = 0;
            var la : Array = new Array();
            var r : Array = new Array();
            var m : Array = String(editor.text).split("\n");
            //stdout.text = String(m.length);
            for (j = 0; j < m.length ; j++)
            {
                //stdout.text += m[j];
                var cm : Array = String(m[j]).split("\t");
                if (cm[0] != "") la[cm[0]] = pc + 2;
                switch (cm[1])
                {
                case "if":
                    r[pc] = "0x9D";
                    pc++;
                    r[pc] = "0x02";
                    pc++;
                    r[pc] = "0x00";
                    pc++;
                    if (la[cm[2]] > 1)
                    {
                        c3 = 255 + la[cm[2]] - pc - 3;
                        r[pc] = " " + c3;
                        pc++;
                        r[pc] = "0xFF";
                        pc++;
                    }
                    else
                    {
                        r[pc] = cm[2];
                        pc++;
                        r[pc] = "0x00";
                        pc++;
                    }
                break;
                case "jump":
                    r[pc] = "0x99";
                    pc++;
                    r[pc] = "0x02";
                    pc++;
                    r[pc] = "0x00";
                    pc++;
                    if (la[cm[2]] > 1)
                    {
                        c3 = 255 + la[cm[2]] - pc - 3;
                        r[pc] = " " + c3;
                        pc++;
                        r[pc] = "0xFF";
                        pc++;
                    }
                    else
                    {
                        r[pc] = cm[2];
                        pc++;
                        r[pc] = "0x00";
                        pc++;
                    }
                break;
                case "push":
                    r[pc] = "0x96";
                    pc++;
                    c1 = cm[2].indexOf("\"") + 1;
                    c2 = cm[2].indexOf("\"", 1) - c1;
                    a = cm[2].substr(c1, c2);
                    c3 = c2 + 2;
                    r[pc] = " " + c3;
                    pc++;
                    r[pc] = "0x00";
                    pc++;
                    r[pc] = "0x00";
                    pc++;
                    for (i = 0; i < c2; i++)
                    {
                        r[pc] = a.charAt(i);
                        pc++;
                    }
                    r[pc] = "0x00";
                    pc++;
                break;
                case "end":
                    r[pc] = "0x00";
                    pc++;
                break;
                case "+":
                    r[pc] = "0x0A";
                    pc++;
                break;
                case "-":
                    r[pc] = "0x0B";
                    pc++;
                break;
                case "*":
                    r[pc] = "0x0C";
                    pc++;
                break;
                case "/":
                    r[pc] = "0x0D";
                    pc++;
                break;
                case "=":
                    r[pc] = "0x0E";
                    pc++;
                break;
                case ">":
                    r[pc] = "0x0F";
                    pc++;
                break;
                case "&":
                    r[pc] = "0x10";
                    pc++;
                break;
                case "|":
                    r[pc] = "0x11";
                    pc++;
                break;
                case "!":
                    r[pc] = "0x12";
                    pc++;
                break;
                case "eq":
                    r[pc] = "0x13";
                    pc++;
                break;
                case "len":
                    r[pc] = "0x14";
                    pc++;
                break;
                case "pop":
                    r[pc] = "0x17";
                    pc++;
                break;
                case "int":
                    r[pc] = "0x18";
                    pc++;
                break;
                case "get":
                    r[pc] = "0x1C";
                    pc++;
                break;
                case "set":
                    r[pc] = "0x1D";
                    pc++;
                break;
                case "add":
                    r[pc] = "0x21";
                    pc++;
                break;
                case "rnd":
                    r[pc] = "0x30";
                    pc++;
                break;
                case "time":
                    r[pc] = "0x34";
                    pc++;
                break;
                }
            }        
            for (j = 0; j < la.length; j++)
            {
                for (i = 0; i < pc; i++)
                {
                    if (r[i] == la[j])
                    {
                        c3 = la[j] - i - 4;
                        r[i] = " " + c3;
                    }
                }
            }
            for (i = 0; i < r.length; i++)
            {
                stdout.text += String(i) + " - " + r[i] + "\n";
            }
        }
    }
}

Forked