Coco3

TRS-80 Coco3 emulator

by francisfortier

HTML

<textarea id="shell80" cols="80" rows="25" style="font-family: Consolas, Monospace; font-size: 8pt;"></textarea>
<script type="text/x-basic">
    5 cls 2
    10 for i = 1 to 10
    21 if i < 3 then
    22 print i " is lower than 3"
    23 else
    24 if i = 3 then
    25 print "three !"
    26 else
    27 print i " is greater than 3"
    28 endif
    29 endif
    30 next i
    40 print "fin i = " i
    50 print "before"
    60 gosub 100
    70 print "after"
    80 goto 120
    100 print "middle"
    110 return
    120 rem fin du program
    130 print "end"

</script>

JavaScript

context = {
    variables: {},
    substack: [],
    label: null,
    colors: ["#000", "#f00", "#0f0", "#00f", "#ff0", "#f0f", "#0ff", "#fff"],
    loops: {}
};

Expression = function () {
};

Expression.parse = function (tokenizer, delimiter1,  delimiter2,  delimiter3) {
    /// <param name="tokenizer" type="Tokenizer"></param>
    /// <param name="delimiter" type="String"></param>
    var leftExpr, rightExpr;
    var exprType;

    while (tokenizer.hasMoreToken())
    {
        var token = token = tokenizer.nextToken();

        if (token.toLowerCase() === delimiter1
            || token.toLowerCase() === delimiter2
            || token.toLowerCase() === delimiter3)
        {
            return leftExpr;
        }

        var c = token.charAt(0);

        if (c === '"')
        {
            rightExpr = new ConstantExpression(token.substr(1, token.length - 2));
            leftExpr = leftExpr ? leftExpr.concat(rightExpr) : rightExpr;

            // Lorsqu'on a un string, on doit la concaténer au reste de l'expression
            rightExpr = Expression.parse(tokenizer, delimiter1, delimiter2, delimiter3);

            if (rightExpr)
            {
                return leftExpr.concat(rightExpr);
            }

            return leftExpr;
        }
        else if (context.variables.hasOwnProperty(token))
        {
            rightExpr = new VariableExpression(token);

            if (token.charAt(token.length - 1) === '$')
            {
                leftExpr = leftExpr ? leftExpr.concat(rightExpr) : rightExpr;

                // Lorsqu'on a un string, on doit la concaténer au reste de l'expression
                rightExpr = Expression.parse(tokenizer, delimiter1, delimiter2, delimiter3);

                if (rightExpr)
                {
                    return leftExpr.concat(rightExpr);
                }

                return leftExpr;
            }
        }
        else if (c === '(')
        {
            rightExpr =...