00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __ASEBA_NATIVES_H
00025 #define __ASEBA_NATIVES_H
00026
00027 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00031 #include "../common/types.h"
00032 #include "vm.h"
00033
00034 #ifdef _MSC_VER
00035 #pragma warning( disable: 4200) // disable 0 size arrays warning
00036 #define inline __inline // msvc does not support the standart C99/C++ static inline construct
00037 #endif
00038
00046
00047
00048
00050 typedef struct
00051 {
00052 uint16 size;
00053 const char* name;
00054 } AsebaVariableDescription;
00055
00057 typedef struct
00058 {
00059 const char* name;
00060 AsebaVariableDescription variables[];
00061 } AsebaVMDescription;
00062
00064 typedef struct
00065 {
00066 const char* name;
00067 const char* doc;
00068 } AsebaLocalEventDescription;
00069
00071 typedef void (*AsebaNativeFunctionPointer)(AsebaVMState *vm);
00072
00074 typedef struct
00075 {
00076 sint16 size;
00077 const char* name;
00078 } AsebaNativeFunctionArgumentDescription;
00079
00081 typedef struct
00082 {
00083 const char* name;
00084 const char* doc;
00085 AsebaNativeFunctionArgumentDescription arguments[];
00086 } AsebaNativeFunctionDescription;
00087
00088
00089
00091 static inline sint16 AsebaNativePopArg(AsebaVMState *vm)
00092 {
00093 return vm->stack[vm->sp--];
00094 }
00095
00096
00097
00099 void AsebaNative_veccopy(AsebaVMState *vm);
00101 extern const AsebaNativeFunctionDescription AsebaNativeDescription_veccopy;
00102
00104 void AsebaNative_vecfill(AsebaVMState *vm);
00106 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecfill;
00107
00109 void AsebaNative_vecaddscalar(AsebaVMState *vm);
00111 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecaddscalar;
00112
00114 void AsebaNative_vecadd(AsebaVMState *vm);
00116 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecadd;
00117
00119 void AsebaNative_vecsub(AsebaVMState *vm);
00121 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecsub;
00122
00124 void AsebaNative_vecmul(AsebaVMState *vm);
00126 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecmul;
00127
00129 void AsebaNative_vecdiv(AsebaVMState *vm);
00131 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecdiv;
00132
00134 void AsebaNative_vecmin(AsebaVMState *vm);
00136 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecmin;
00137
00139 void AsebaNative_vecmax(AsebaVMState *vm);
00141 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecmax;
00142
00144 void AsebaNative_vecdot(AsebaVMState *vm);
00146 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecdot;
00147
00149 void AsebaNative_vecstat(AsebaVMState *vm);
00151 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecstat;
00152
00154 void AsebaNative_mathmuldiv(AsebaVMState *vm);
00156 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathmuldiv;
00157
00159 void AsebaNative_mathatan2(AsebaVMState *vm);
00161 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathatan2;
00162
00164 void AsebaNative_mathsin(AsebaVMState *vm);
00166 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathsin;
00167
00169 void AsebaNative_mathcos(AsebaVMState *vm);
00171 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathcos;
00172
00174 void AsebaNative_mathrot2(AsebaVMState *vm);
00176 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathrot2;
00177
00179 void AsebaNative_mathsqrt(AsebaVMState *vm);
00181 extern const AsebaNativeFunctionDescription AsebaNativeDescription_mathsqrt;
00182
00184 void AsebaNative_vecnonzerosequence(AsebaVMState *vm);
00186 extern const AsebaNativeFunctionDescription AsebaNativeDescription_vecnonzerosequence;
00187
00189 #define ASEBA_NATIVES_STD_FUNCTIONS \
00190 AsebaNative_veccopy, \
00191 AsebaNative_vecfill, \
00192 AsebaNative_vecaddscalar, \
00193 AsebaNative_vecadd, \
00194 AsebaNative_vecsub, \
00195 AsebaNative_vecmul, \
00196 AsebaNative_vecdiv, \
00197 AsebaNative_vecmin, \
00198 AsebaNative_vecmax, \
00199 AsebaNative_vecdot, \
00200 AsebaNative_vecstat, \
00201 AsebaNative_mathmuldiv, \
00202 AsebaNative_mathatan2, \
00203 AsebaNative_mathsin, \
00204 AsebaNative_mathcos, \
00205 AsebaNative_mathrot2, \
00206 AsebaNative_mathsqrt, \
00207 AsebaNative_vecnonzerosequence
00208
00210 #define ASEBA_NATIVES_STD_DESCRIPTIONS \
00211 &AsebaNativeDescription_veccopy, \
00212 &AsebaNativeDescription_vecfill, \
00213 &AsebaNativeDescription_vecaddscalar, \
00214 &AsebaNativeDescription_vecadd, \
00215 &AsebaNativeDescription_vecsub, \
00216 &AsebaNativeDescription_vecmul, \
00217 &AsebaNativeDescription_vecdiv, \
00218 &AsebaNativeDescription_vecmin, \
00219 &AsebaNativeDescription_vecmax, \
00220 &AsebaNativeDescription_vecdot, \
00221 &AsebaNativeDescription_vecstat, \
00222 &AsebaNativeDescription_mathmuldiv, \
00223 &AsebaNativeDescription_mathatan2, \
00224 &AsebaNativeDescription_mathsin, \
00225 &AsebaNativeDescription_mathcos, \
00226 &AsebaNativeDescription_mathrot2, \
00227 &AsebaNativeDescription_mathsqrt, \
00228 &AsebaNativeDescription_vecnonzerosequence
00229
00232 #ifdef __cplusplus
00233 }
00234 #endif
00235
00236 #endif