2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
3 Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
4 Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
14 #include "ConfigValue.h"
15 #include "ConfigCache.h"
23 // Read each value, and append it as a ConfigValue to the config_cache we were passed
24 virtual void transfer_values_to_cache( ConfigCache
* ) = 0;
25 virtual bool is_named( uint16_t check_sum
) = 0;
26 virtual void write( string setting
, string value
) = 0;
27 virtual string
read( uint16_t check_sums
[3] ) = 0;
29 uint16_t name_checksum
;
31 virtual string
process_char_from_ascii_config(int c
, ConfigCache
* cache
) {
33 if (c
== '\n' || c
== EOF
)
36 if( buffer
[0] == '#' ){ buffer
.clear(); return ""; } // Ignore comments
37 if( buffer
.length() < 3 ){ buffer
.clear(); return ""; } //Ignore empty lines
38 size_t begin_key
= buffer
.find_first_not_of(" ");
39 size_t begin_value
= buffer
.find_first_not_of(" ", buffer
.find_first_of(" ", begin_key
));
41 uint16_t check_sums
[3];
42 get_checksums(check_sums
, buffer
.substr(begin_key
, buffer
.find_first_of(" ", begin_key
) - begin_key
).append(" "));
44 ConfigValue
* result
= new ConfigValue
;
47 result
->check_sums
[0] = check_sums
[0];
48 result
->check_sums
[1] = check_sums
[1];
49 result
->check_sums
[2] = check_sums
[2];
51 result
->value
= buffer
.substr(begin_value
, buffer
.find_first_of("\r\n# ", begin_value
+1)-begin_value
);
52 // Append the newly found value to the cache we were passed
53 cache
->replace_or_push_back(result
);
64 virtual string
process_char_from_ascii_config(int c
, uint16_t line_checksums
[3]) {
67 if (c
== '\n' || c
== EOF
)
70 if( buffer
[0] == '#' ){ buffer
.clear(); return ""; } // Ignore comments
71 if( buffer
.length() < 3 ){ buffer
.clear(); return ""; } //Ignore empty lines
72 size_t begin_key
= buffer
.find_first_not_of(" ");
73 size_t begin_value
= buffer
.find_first_not_of(" ", buffer
.find_first_of(" ", begin_key
));
75 uint16_t check_sums
[3];
76 get_checksums(check_sums
, buffer
.substr(begin_key
, buffer
.find_first_of(" ", begin_key
) - begin_key
).append(" "));
78 if(check_sums
[0] == line_checksums
[0] && check_sums
[1] == line_checksums
[1] && check_sums
[2] == line_checksums
[2] ){
79 value
= buffer
.substr(begin_value
, buffer
.find_first_of("\r\n# ", begin_value
+1)-begin_value
);