Geodesic Light Dome Controller Program

Dependencies:   mbed

Committer:
lolpcc
Date:
Wed Mar 24 09:06:23 2010 +0000
Revision:
1:dc58f0b0eeec
Parent:
0:a7af7ec8b12f

        

Who changed what in which revision?

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