test code for our MBED board

Dependencies:   mbed lwip

Committer:
lolpcc
Date:
Wed May 04 08:30:52 2011 +0000
Revision:
1:6877bb99aa17

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lolpcc 1:6877bb99aa17 1 #include "mbed.h"
lolpcc 1:6877bb99aa17 2 #include "local_defines.h"
lolpcc 1:6877bb99aa17 3 #include "useful.h"
lolpcc 1:6877bb99aa17 4 #include "scripting.h"
lolpcc 1:6877bb99aa17 5
lolpcc 1:6877bb99aa17 6 extern int var[MAX_VAR];
lolpcc 1:6877bb99aa17 7 extern int sys_state;
lolpcc 1:6877bb99aa17 8 extern FILE *exec_fp;
lolpcc 1:6877bb99aa17 9
lolpcc 1:6877bb99aa17 10 long jmp[MAX_JMP]; /* Jump points */
lolpcc 1:6877bb99aa17 11
lolpcc 1:6877bb99aa17 12 void clear_var(void)
lolpcc 1:6877bb99aa17 13 {
lolpcc 1:6877bb99aa17 14 int a = 0;
lolpcc 1:6877bb99aa17 15
lolpcc 1:6877bb99aa17 16 while(a != MAX_VAR){
lolpcc 1:6877bb99aa17 17 var[a] = 0;
lolpcc 1:6877bb99aa17 18 a++;
lolpcc 1:6877bb99aa17 19 }
lolpcc 1:6877bb99aa17 20 }
lolpcc 1:6877bb99aa17 21
lolpcc 1:6877bb99aa17 22 void set_var(int c, char **a)
lolpcc 1:6877bb99aa17 23 {
lolpcc 1:6877bb99aa17 24 int v,val;
lolpcc 1:6877bb99aa17 25
lolpcc 1:6877bb99aa17 26 if(sys_state & EXEC_CALLED){
lolpcc 1:6877bb99aa17 27 if(c != 3)
lolpcc 1:6877bb99aa17 28 var_exec_error(VAR_SET_CNT_ERROR);
lolpcc 1:6877bb99aa17 29 else {
lolpcc 1:6877bb99aa17 30 v = return_var(a[1]);
lolpcc 1:6877bb99aa17 31 val = htoi(a[2]);
lolpcc 1:6877bb99aa17 32 var[v]=val;
lolpcc 1:6877bb99aa17 33 }
lolpcc 1:6877bb99aa17 34
lolpcc 1:6877bb99aa17 35 } else
lolpcc 1:6877bb99aa17 36 var_exec_error(VAR_EXEC_ERROR);
lolpcc 1:6877bb99aa17 37
lolpcc 1:6877bb99aa17 38 }
lolpcc 1:6877bb99aa17 39
lolpcc 1:6877bb99aa17 40 void sum_var(int c, char **a)
lolpcc 1:6877bb99aa17 41 {
lolpcc 1:6877bb99aa17 42 int v,val1,val2;
lolpcc 1:6877bb99aa17 43
lolpcc 1:6877bb99aa17 44 if(sys_state & EXEC_CALLED){
lolpcc 1:6877bb99aa17 45 if(c != 4)
lolpcc 1:6877bb99aa17 46 var_exec_error(VAR_SUM_CNT_ERROR);
lolpcc 1:6877bb99aa17 47 else {
lolpcc 1:6877bb99aa17 48 val1 = htoi(a[1]);
lolpcc 1:6877bb99aa17 49 val2 = htoi(a[3]);
lolpcc 1:6877bb99aa17 50 v = return_var(a[1]);
lolpcc 1:6877bb99aa17 51 switch(a[2][0]){
lolpcc 1:6877bb99aa17 52 case '+' :
lolpcc 1:6877bb99aa17 53 var[v] = val1 + val2;
lolpcc 1:6877bb99aa17 54 break;
lolpcc 1:6877bb99aa17 55 case '-' :
lolpcc 1:6877bb99aa17 56 var[v] = val1 - val2;
lolpcc 1:6877bb99aa17 57 break;
lolpcc 1:6877bb99aa17 58 case '/' :
lolpcc 1:6877bb99aa17 59 var[v] = val1 / val2;
lolpcc 1:6877bb99aa17 60 break;
lolpcc 1:6877bb99aa17 61 case '*' :
lolpcc 1:6877bb99aa17 62 var[v] = val1 * val2;
lolpcc 1:6877bb99aa17 63 break;
lolpcc 1:6877bb99aa17 64 case '%' :
lolpcc 1:6877bb99aa17 65 var[v] = val1 * val2;
lolpcc 1:6877bb99aa17 66 break;
lolpcc 1:6877bb99aa17 67 default :
lolpcc 1:6877bb99aa17 68 var_exec_error(VAR_SUM_TYPE_ERROR);
lolpcc 1:6877bb99aa17 69 }
lolpcc 1:6877bb99aa17 70 }
lolpcc 1:6877bb99aa17 71 } else
lolpcc 1:6877bb99aa17 72 var_exec_error(VAR_EXEC_ERROR);
lolpcc 1:6877bb99aa17 73 }
lolpcc 1:6877bb99aa17 74 void point_var(int c, char **a)
lolpcc 1:6877bb99aa17 75 {
lolpcc 1:6877bb99aa17 76 int v;
lolpcc 1:6877bb99aa17 77 if(sys_state & EXEC_CALLED){
lolpcc 1:6877bb99aa17 78 v = return_jmp(a[1]);
lolpcc 1:6877bb99aa17 79 jmp[v] = ftell(exec_fp); /* Read the current file pointers position */
lolpcc 1:6877bb99aa17 80 sys_state = sys_state | INDENT_SET; /* Mark the state as set */
lolpcc 1:6877bb99aa17 81 } else
lolpcc 1:6877bb99aa17 82 var_exec_error(VAR_EXEC_ERROR);
lolpcc 1:6877bb99aa17 83 }
lolpcc 1:6877bb99aa17 84 void tst_var(int c, char **a)
lolpcc 1:6877bb99aa17 85 {
lolpcc 1:6877bb99aa17 86 int v,val,j;
lolpcc 1:6877bb99aa17 87 int doit=0;
lolpcc 1:6877bb99aa17 88
lolpcc 1:6877bb99aa17 89 if(sys_state & EXEC_CALLED){
lolpcc 1:6877bb99aa17 90 if(sys_state & INDENT_SET){
lolpcc 1:6877bb99aa17 91 if(c != 5)
lolpcc 1:6877bb99aa17 92 var_exec_error(VAR_TST_CNT_ERROR);
lolpcc 1:6877bb99aa17 93 else {
lolpcc 1:6877bb99aa17 94 v = return_var(a[1]);
lolpcc 1:6877bb99aa17 95 j = return_jmp(a[4]);
lolpcc 1:6877bb99aa17 96 val = htoi(a[3]);
lolpcc 1:6877bb99aa17 97 switch(a[2][0]){
lolpcc 1:6877bb99aa17 98 case '<' :
lolpcc 1:6877bb99aa17 99 if(var[v] < val)
lolpcc 1:6877bb99aa17 100 doit = 1;
lolpcc 1:6877bb99aa17 101 break;
lolpcc 1:6877bb99aa17 102 case '>' :
lolpcc 1:6877bb99aa17 103 if(var[v] > val)
lolpcc 1:6877bb99aa17 104 doit = 1;
lolpcc 1:6877bb99aa17 105 break;
lolpcc 1:6877bb99aa17 106 case '=' :
lolpcc 1:6877bb99aa17 107 if(var[v] == val)
lolpcc 1:6877bb99aa17 108 doit = 1;
lolpcc 1:6877bb99aa17 109 break;
lolpcc 1:6877bb99aa17 110 case '!' :
lolpcc 1:6877bb99aa17 111 if(var[v] != val)
lolpcc 1:6877bb99aa17 112 doit = 1;
lolpcc 1:6877bb99aa17 113 break;
lolpcc 1:6877bb99aa17 114 default :
lolpcc 1:6877bb99aa17 115 var_exec_error(VAR_TST_TYPE_ERROR);
lolpcc 1:6877bb99aa17 116 }
lolpcc 1:6877bb99aa17 117 if(doit)
lolpcc 1:6877bb99aa17 118 fseek (exec_fp ,jmp[j] , SEEK_SET );
lolpcc 1:6877bb99aa17 119 }
lolpcc 1:6877bb99aa17 120 } else
lolpcc 1:6877bb99aa17 121 var_exec_error(VAR_INDENT_ERROR);
lolpcc 1:6877bb99aa17 122 } else
lolpcc 1:6877bb99aa17 123 var_exec_error(VAR_EXEC_ERROR);
lolpcc 1:6877bb99aa17 124 }
lolpcc 1:6877bb99aa17 125 void clr_var(int c, char **a)
lolpcc 1:6877bb99aa17 126 {
lolpcc 1:6877bb99aa17 127 if(sys_state & EXEC_CALLED){
lolpcc 1:6877bb99aa17 128 clear_var();
lolpcc 1:6877bb99aa17 129 } else
lolpcc 1:6877bb99aa17 130 var_exec_error(VAR_EXEC_ERROR);
lolpcc 1:6877bb99aa17 131 }
lolpcc 1:6877bb99aa17 132 void var_exec_error(int state)
lolpcc 1:6877bb99aa17 133 {
lolpcc 1:6877bb99aa17 134 switch(state){
lolpcc 1:6877bb99aa17 135 case VAR_EXEC_ERROR :
lolpcc 1:6877bb99aa17 136 lprintf("Can only be called from an exec call\n");
lolpcc 1:6877bb99aa17 137 break;
lolpcc 1:6877bb99aa17 138 case VAR_SET_CNT_ERROR :
lolpcc 1:6877bb99aa17 139 lprintf("Format: set v<num> <value>\n");
lolpcc 1:6877bb99aa17 140 break;
lolpcc 1:6877bb99aa17 141 case VAR_SUM_CNT_ERROR :
lolpcc 1:6877bb99aa17 142 lprintf("Format: sum v<num> <action> v<num>\n");
lolpcc 1:6877bb99aa17 143 break;
lolpcc 1:6877bb99aa17 144 case VAR_TST_CNT_ERROR :
lolpcc 1:6877bb99aa17 145 lprintf("Format: tst v<num> <type> <value>\n");
lolpcc 1:6877bb99aa17 146 break;
lolpcc 1:6877bb99aa17 147 case VAR_INDENT_ERROR :
lolpcc 1:6877bb99aa17 148 lprintf("In branch test, with no point to loop back to\n");
lolpcc 1:6877bb99aa17 149 break;
lolpcc 1:6877bb99aa17 150 case VAR_SUM_TYPE_ERROR :
lolpcc 1:6877bb99aa17 151 lprintf("Unknown test type should be either +-/*\n");
lolpcc 1:6877bb99aa17 152 break;
lolpcc 1:6877bb99aa17 153 case VAR_TST_TYPE_ERROR :
lolpcc 1:6877bb99aa17 154 lprintf("Unknown test type should be either <>=!\n");
lolpcc 1:6877bb99aa17 155 break;
lolpcc 1:6877bb99aa17 156 default :
lolpcc 1:6877bb99aa17 157 lprintf("Unknown exec_error %04x\n",state);
lolpcc 1:6877bb99aa17 158 }
lolpcc 1:6877bb99aa17 159 }
lolpcc 1:6877bb99aa17 160
lolpcc 1:6877bb99aa17 161 int return_jmp(char *str)
lolpcc 1:6877bb99aa17 162 {
lolpcc 1:6877bb99aa17 163 char buf[0x4];
lolpcc 1:6877bb99aa17 164 int a;
lolpcc 1:6877bb99aa17 165
lolpcc 1:6877bb99aa17 166 buf[0] = str[1];
lolpcc 1:6877bb99aa17 167 buf[1] = str[2];
lolpcc 1:6877bb99aa17 168 buf[2] = str[3];
lolpcc 1:6877bb99aa17 169 buf[3] = str[4];
lolpcc 1:6877bb99aa17 170 a = atoi(buf);
lolpcc 1:6877bb99aa17 171 if(a > MAX_VAR){
lolpcc 1:6877bb99aa17 172 lprintf("In Return_jmp, jmp number %d more than MAXJMP %d, returned -1\n",
lolpcc 1:6877bb99aa17 173 a,MAX_JMP);
lolpcc 1:6877bb99aa17 174 return(-1);
lolpcc 1:6877bb99aa17 175 }
lolpcc 1:6877bb99aa17 176 return(a);
lolpcc 1:6877bb99aa17 177 }
lolpcc 1:6877bb99aa17 178