The System Interface
The system interface in a "software shield" that hide the implementation of some generic functions the intepreter's business logic needs.
In this way not the AVIL interpreter can run in the same way on different hardware.
This was initially useful to debug AVIL on my PC and may be it will be useful in porting AVIL on other hardware platforms.
You can (if you ar brave enough) have a look at ../libraries/AVIL/sys.h, the header file that defines the interface functions.
The implementation of abovementioned functions are in ../libraries/AVIL/arduinoSys.cpp OR ../libraries/AVIL/pcSys.cpp (depending on what you set in the configuration file).
If you arrived arrived at this point you don't need big explanation to understand the meaning of this functions:
1 class Sys 2 { 3 public: 4 5 //system initialization 6 bool static init(); 7 //check if file exists 8 bool static fileExists(const char* fileName); 9 //get file line 10 bool static getFileLine(char* fileName, unsigned int lineNumber, char *line); 11 12 //input from user 13 bool static userInput(char* dst, size_t size); 14 //output to user 15 void static userOutput(const char* msg); 16 #if SYSTEM == ARDU_UNO 17 void static userOutput(const __FlashStringHelper* msg); 18 #endif 19 void static userOutput(char c); 20 void static userOutput(int num); 21 22 23 //condition to stop a running program 24 bool static killSignalReceived(); 25 //call to a custom function 26 bool static callFunc(const char* sysProgramName); 27 //check 28 bool static funcExists(const char* programName); 29 //runtime error 30 void static runtimeError(unsigned int errorCode, unsigned int programLine); 31 32 private: 33 34 Sys(); 35 36 };
But it could be useful for you to know that you can use the functions userOutput/userInput in your sketch to conveniently manage input/output (they are automatically redirected to/from serial or ethernet (depending on what you set in the configuration file).
To use these functions you must include the System Interfaca in your sketch like this:
1 #include <avil.h> 2 #include <sys.h>
Using these functions I easily created an interesting minimal "interactive shell".