IPS(Interpreter for Process Structures) for mbed

Dependencies:   ConfigFile FATFileSystem mbed

IPS port from linux/unix version.

mbed_blinky.ips

0 VAR led1
" LED1 " DigitalOut led1 !
: main
    ANFANG
    1 JA?
      1 led1 @ write
      200 wait_ms
      0 led1 @ write
      200 wait_ms
    DANN/NOCHMAL
;
main
Revision:
4:b62b40563944
Parent:
2:908338b1151a
diff -r 9f526f0d9720 -r b62b40563944 mbedAPI.cpp
--- a/mbedAPI.cpp	Sat May 23 09:14:47 2015 +0000
+++ b/mbedAPI.cpp	Sun May 24 21:29:48 2015 +0900
@@ -204,23 +204,23 @@
 
 void mbedAPI::code_method_I2C(int f, mbedObj& obj) {
     if (f == mbed_read) {
-        uint16_t a3 = ips.pull_ps(); // addr
-        uint16_t a2 = ips.pull_ps(); // data length
-        uint16_t a1 = ips.pull_ps(); // data pointer
-        char buf[a2];
-        reinterpret_cast<I2C*>(obj.p)->read(a3, buf, a1);
-        for(int i = 0; i < a2; i++) {
-            ips.pokeB(a1 + i, buf[i]);
+        uint16_t addr = ips.pull_ps();
+        uint16_t len = ips.pull_ps();
+        uint16_t ptr = ips.pull_ps();
+        char buf[len];
+        reinterpret_cast<I2C*>(obj.p)->read(addr, buf, len);
+        for(int i = 0; i < len; i++) {
+            ips.pokeB(ptr + i, buf[i]);
         }
     } else if (f == mbed_write) {
-        uint16_t a3 = ips.pull_ps(); // addr
-        uint16_t a2 = ips.pull_ps(); // data length
-        uint16_t a1 = ips.pull_ps(); // data pointer
-        char buf[a2];
-        for(int i = 0; i < a2; i++) {
-            buf[i] = ips.peekB(a1 + i);
+        uint16_t addr = ips.pull_ps();
+        uint16_t len = ips.pull_ps();
+        uint16_t ptr = ips.pull_ps();
+        char buf[len];
+        for(int i = 0; i < len; i++) {
+            buf[i] = ips.peekB(ptr + i);
         }
-        reinterpret_cast<I2C*>(obj.p)->write(a3, buf, a1);
+        reinterpret_cast<I2C*>(obj.p)->write(addr, buf, len);
     } else {
         error("%s %d", __LINE__, f);
     }