int main() { clear; cout << "MarBattery v.1.0" << endl << "This software is distributed under GNU GPL v3 terms. Use it on your own risk." << endl << endl; // left one line :) cout << "getinfo"; getinfo(batraw); cout << "after"; return 0; }
MarBattery v.1.0 This software is distributed under GNU GPL v3 terms. Use it on your own risk. Segmentation fault
unsigned char getinfo(battery_state_raw batvar_raw, bool closefile = true) { cout << "opening"; if (datadump.is_open() == false) datadump.open(datadumppath.c_str(), ios::in); cout << 's'; system( datadumpcmd.c_str() ); //this stupid function need `const char*` cout << "ed_r"; extractdata_raw(); cout << "ed"; extractdata(); //get only needed ones bat.showdata(); //show it if ( closefile == true ) datadump.close(); //if needed }
#define trashit() getline(datadump, *trash) // I couldn't make a function and don't wanna write it over and over ;) #define getit(a) getline(datadump, batraw.a) void extractdata_raw() { cout << "extractdata_raw"; string* trash = new string; // próbowałem też string* trash = NULL; trashit(); trashit(); //lines 1, 2 getit(capacity_bars); //line 3 getit(capacity_bars_full); //line 4 //.... trashit(); trashit(); trashit(); //line 16, 17, 18 getit(voltage_now); //line 17 getit(voltage_design); // line 18 //T(h)rash it all!! :D delete [] trash; cout << "deleting"; }
#define rawatof(data) bat.data=atof(tmpraw.data.c_str()) // I'm too lazy to write it so many times ;D #define extractme(info) tmpraw.info=batraw.info #define br batraw #define vn voltage_now #define vd voltage_design void extractdata() { battery_state_raw tmpraw; extractme(capacity_bars)[34]; rawatof(capacity_bars); //.... extractme(voltage_now)[29] + br.vn[30] + br.vn[31] + br.vn[32]; rawatof(voltage_now); extractme(voltage_design)[28] + br.vd[29] + br.vd[30] + br.vd[31]; rawatof(voltage_design); }
class battery_state { public: friend void extractdata(); inline bool isPresent(); battery_state() : voltage_now(0), voltage_design(0), percentage(0), capacity_full(0), capacity_now(0) ,capacity_bars(0), capacity_bars_full(0) {} // zero-it, the stupid compiler doesn't allow me to make it auto-variable unsigned char showdata(); private: //dane składowe
public: friend void extractdata_raw(); friend void extractdata();