00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "format_data.h"
00033 #include "script.h"
00034 #include "gestion_erreurs.h"
00035
00036 #define ADD_DATA(data_i) if (cur_arg == n_arg) \
00037 { \
00038 if (i_buffer >= size) \
00039 stop = 1; \
00040 else \
00041 { \ f = (float) data_i; \
00042 *((float *) &_buffer[i_buffer]) = f; \
00043 i_buffer += sizeof(float); \
00044 } \
00045 }
00046
00047
00048 char *format_data_after_int(char *_buffer)
00049 {
00050 int stop = 0;
00051
00052 if (*_buffer == '-')
00053 _buffer++;
00054
00055 while(*_buffer && !stop)
00056 {
00057 if (*_buffer < '0' || *_buffer > '9')
00058 stop = 1;
00059 else
00060 _buffer++;
00061 }
00062
00063 return _buffer;
00064 }
00065
00066 char *format_data_after_float(char *_buffer)
00067 {
00068 int stop = 0;
00069
00070 _buffer = format_data_after_int(_buffer);
00071 if (*_buffer == '.')
00072 _buffer++;
00073 if (*_buffer == '-')
00074 return _buffer;
00075 _buffer = format_data_after_int(_buffer);
00076
00077 return _buffer;
00078 }
00079
00080 int format_data_get_data(char *_input, char *_buffer, char *_pattern, int size, int n_arg)
00081 {
00082 char _str[256];
00083 char _cur_pattern[256];
00084 char _value[32];
00085 char _str_value[256];
00086 char *_ppattern, *_pcur_pattern, *_pstr;
00087 int stop = 0;
00088 int cur_arg;
00089 int i_buffer = 0;
00090 int i;
00091 float f;
00092
00093 char _temp[256];
00094 char _buffer_temp[256];
00095
00096 size *= sizeof(float);
00097
00098 while(*_input && !stop)
00099 {
00100
00101 _ppattern = _pattern;
00102 cur_arg = 0;
00103 while(*_ppattern && !stop)
00104 {
00105 _input = templates_get_string(_input, _str);
00106 _ppattern = templates_get_string(_ppattern, _cur_pattern);
00107
00108 _pstr = _str;
00109 _pcur_pattern = _cur_pattern;
00110 while(*_pstr && !stop)
00111 {
00112 switch(*_pcur_pattern)
00113 {
00114 case '%':
00115 _pcur_pattern++;
00116 cur_arg++;
00117 switch(*_pcur_pattern)
00118 {
00119 case 'd':
00120 case 'i':
00121
00122 if (!sscanf(_pstr, "%f", &i))
00123 stop = 1;
00124 else
00125 {
00126 _pstr = format_data_after_int(_pstr);
00127 ADD_DATA(i);
00128 }
00129 break;
00130 case 'f':
00131
00132 if (!sscanf(_pstr, "%f", &f))
00133 stop = 1;
00134 else
00135 {
00136 _pstr = format_data_after_float(_pstr);
00137 ADD_DATA(f);
00138 }
00139 break;
00140 case '%':
00141 cur_arg--;
00142 if (*_pstr != '%')
00143 stop = 1;
00144 else
00145 _pstr++;
00146 break;
00147 default:
00148 SET_ERROR("Pattern not supported!");
00149 stop = 1;
00150 break;
00151 }
00152 _pcur_pattern++;
00153 break;
00154 default:
00155
00156 if (*_pstr != *_pcur_pattern)
00157 stop = 1;
00158 else
00159 {
00160 _pstr++;
00161 _pcur_pattern++;
00162 }
00163 }
00164 }
00165 }
00166 }
00167
00168 return i_buffer/sizeof(float);
00169 }