about summary refs log tree commit diff stats
path: root/etc
ModeNameSize
-rw-r--r--Makefile912log stats plain blame
-rw-r--r--README972log stats plain blame
-rw-r--r--all.c678log stats plain blame
-rw-r--r--lua.hpp191log stats plain blame
-rw-r--r--lua.ico1078log stats plain blame
-rw-r--r--lua.pc658log stats plain blame
-rw-r--r--luavs.bat1070log stats plain blame
-rw-r--r--min.c800log stats plain blame
-rw-r--r--noparser.c1253log stats plain blame
-rw-r--r--strict.lua928log stats plain blame
itter Kartik K. Agaram <vc@akkartik.com> 2015-06-23 14:02:12 -0700 1631 - update html versions' href='/akkartik/mu/commit/html/076scenario_console_test.mu.html?h=main&id=dbe124108b7a3529feeeba91339928c4ac737072'>dbe12410 ^
a654e4ec ^

dbe12410 ^

a654e4ec ^





dbe12410 ^

a654e4ec ^
dbe12410 ^



f5465e12 ^


dbe12410 ^

32b8fac2 ^



dbe12410 ^

f5465e12 ^







dbe12410 ^




a654e4ec ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59



                                                                                          
                                               

                                                
                                   

                                                                                         

                       
                                                                                                 
                                                                                            
                                      
                               
                            

                             

>}
    # if single arg is 'type', run in typewriter mode
    tmp2 <- string-equal? *tmp, "type"
    compare tmp2, 0  # false
    {
      break-if-=
      repl
      return 0
    }
    # if single arg is 'test' ...
    tmp2 <- string-equal? *tmp, "test2"
    compare tmp2, 0  # false
    {
      break-if-=
      test
      return 0
    }
  }
  # otherwise error message
  print-string-to-real-screen "usage:\n"
  print-string-to-real-screen "  to run tests: tile test\n"
  print-string-to-real-screen "  full-screen mode: tile screen\n"
  print-string-to-real-screen "  regular REPL: tile type\n"
  return 1
}

fn interactive {
  enable-screen-grid-mode
  enable-keyboard-immediate-mode
  var env-storage: environment
  var env/esi: (addr environment) <- address env-storage
  initialize-environment env
  draw-screen env
  {
    var key/eax: grapheme <- read-key-from-real-keyboard
    compare key, 0x11  # 'ctrl-q'
    break-if-=
    process env, key
    render env
    loop
  }
  enable-keyboard-type-mode
  enable-screen-type-mode
}

fn test {
  var env-storage: environment
  var env/esi: (addr environment) <- address env-storage
  initialize-environment-with-fake-screen env, 0x20, 0xa0
  process-all env, "3 3 fake-screen =s"
  process env, 0xc  # ctrl-l
  process-all env, "s 1 down 1 right"
  process env, 4  # ctrl-d: start defining function
  process-all env, "foo"
  process env, 0xa  # newline: define function
  process env, 0x435b1b  # right-arrow
#?   process env, 5  # ctrl-e: end of line
  print-string 0, "==\n"
  process env, 0xa  # newline: expand
  render env
}

fn process-all env: (addr environment), cmds: (addr array byte) {
  var cmds-stream: (stream byte 0x100)
  var cmds-stream-a/esi: (addr stream byte) <- address cmds-stream
  write cmds-stream-a, cmds
  {
    var done?/eax: boolean <- stream-empty? cmds-stream-a
    compare done?, 0  # false
    break-if-!=
    var g/eax: grapheme <- read-grapheme cmds-stream-a
    process env, g
    loop
  }
}

fn repl {
  {
    # prompt
    print-string-to-real-screen "> "
    # read
    var line-storage: (stream byte 0x100)
    var line/ecx: (addr stream byte) <- address line-storage
    clear-stream line
    read-line-from-real-keyboard line
    var done?/eax: boolean <- stream-empty? line
    compare done?, 0  # false
    break-if-!=
    # parse
    var env-storage: environment
    var env/esi: (addr environment) <- address env-storage
    initialize-environment env
    {
      var done?/eax: boolean <- stream-empty? line
      compare done?, 0  # false
      break-if-!=
      var g/eax: grapheme <- read-grapheme line
      process env, g
      loop
    }
    # eval
    var stack-storage: value-stack
    var stack/edi: (addr value-stack) <- address stack-storage
    initialize-value-stack stack, 0x10
    evaluate-environment env, stack
    # print
    var empty?/eax: boolean <- value-stack-empty? stack
    {
      compare empty?, 0  # false
      break-if-!=
      var result/xmm0: float <- pop-number-from-value-stack stack
      print-float-decimal-approximate 0, result, 3
      print-string 0, "\n"
      print-string 0, "width: "
      var width/eax: int <- float-size result, 3
      print-int32-decimal 0, width
      print-string 0, "\n"
    }
    #
    loop
  }
}