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 #include "script.h"
00032 #include "error_management.h"
00033
00034 #define ADD_DATA(data_i) if (cur_arg == n_arg) \
00035 { \
00036 f = (float) data_i; \
00037 value_to_print = f; \
00038 }
00039
00040
00041 char *format_data_after_int(char *_buffer)
00042 {
00043 int stop = 0;
00044
00045
00046 if (*_buffer == '-')
00047 _buffer++;
00048
00049 while(*_buffer && !stop)
00050 {
00051 if (*_buffer < '0' || *_buffer > '9')
00052 stop = 1;
00053 else
00054 _buffer++;
00055 }
00056
00057
00058 return _buffer;
00059 }
00060
00061
00062 char *format_data_after_float(char *_buffer)
00063 {
00064 int stop = 0;
00065
00066
00067 _buffer = format_data_after_int(_buffer);
00068
00069 if (*_buffer == '.')
00070 _buffer++;
00071
00072 if (*_buffer == '-')
00073 return _buffer;
00074
00075 _buffer = format_data_after_int(_buffer);
00076
00077 return _buffer;
00078 }
00079
00080
00081 int format_data_get_data(char *_input, char *_pattern, int n_arg)
00082 {
00083 char _str[256];
00084 char _cur_pattern[256];
00085 char _value[32];
00086 char _str_value[256];
00087 char *_ppattern, *_pcur_pattern, *_pstr;
00088 int stop = 0;
00089 int cur_arg;
00090 int i_buffer = 0;
00091 int i;
00092 float f, value_to_print;
00093 char *_end_of_line;
00094
00095 char _temp[256];
00096 char _buffer_temp[256];
00097
00098
00099 while(*_input)
00100 {
00101
00102 _ppattern = _pattern;
00103
00104 cur_arg = 0;
00105 stop = 0;
00106
00107 _end_of_line = _input;
00108
00109 while(*_end_of_line && *_end_of_line != '\n')
00110 _end_of_line++;
00111
00112
00113 while(*_ppattern && !stop)
00114 {
00115
00116 if (_input > _end_of_line)
00117 {
00118 stop = 1;
00119 break;
00120 }
00121
00122 _input = templates_get_string(_input, _str);
00123
00124 _ppattern = templates_get_string(_ppattern, _cur_pattern);
00125
00126 _pstr = _str;
00127 _pcur_pattern = _cur_pattern;
00128
00129 while(*_pstr && !stop)
00130 {
00131
00132 switch(*_pcur_pattern)
00133 {
00134
00135 case '%':
00136 _pcur_pattern++;
00137 cur_arg++;
00138 switch(*_pcur_pattern)
00139 {
00140
00141 case 'd':
00142 case 'i':
00143
00144 if (!sscanf(_pstr, "%f", &i))
00145 stop = 1;
00146
00147 else
00148 {
00149
00150 _pstr = format_data_after_int(_pstr);
00151
00152 ADD_DATA(i);
00153 }
00154 break;
00155
00156 case 'f':
00157
00158 if (!sscanf(_pstr, "%f", &f))
00159 stop = 1;
00160
00161 else
00162 {
00163
00164 _pstr = format_data_after_float(_pstr);
00165
00166 ADD_DATA(f);
00167 }
00168 break;
00169
00170 case '%':
00171
00172 cur_arg--;
00173 if (*_pstr != '%')
00174 stop = 1;
00175 else
00176 _pstr++;
00177 break;
00178 default:
00179
00180 SET_ERROR("Pattern not supported!");
00181 stop = 1;
00182 break;
00183 }
00184
00185 _pcur_pattern++;
00186 break;
00187
00188 default:
00189
00190 if (*_pstr != *_pcur_pattern)
00191 stop = 1;
00192 else
00193 {
00194 _pstr++;
00195 _pcur_pattern++;
00196 }
00197 }
00198 }
00199 }
00200
00201 if (!stop)
00202 printf("%.10f\r\n", value_to_print);
00203 }
00204
00205 return i_buffer/sizeof(float);
00206 }