[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]
findコマンド生成アプリのコンソール版が完成しました。わずか878KBの超軽量ツールです。
仕上げは標準出力のGUIへの反映になりますが、すんなり実装できればありがたいです。
ところで私のコードの書き方は、C/C++界隈ではメジャーらしいK&RスタイルではなくJavaスタイルです。情報密度と可読性を優先しているので、1行1前カッコは禁止がマイルールです。後カッコはブロックの終わりが分かりやすいため、1行表示しています。
void execute_cb(Fl_Widget*, void*){
stringstream cmd;
stringstream pre;
const char* dir;
onoff_from = from_rbtn->value();
onoff_to = to_rbtn->value();
onoff_name = name_rbtn->value();
dir = dir_input->value();
cmd << "cd " << string(dir) << " && " << "find `pwd` -type file ";
if (onoff_from == 1){
const char* from_char = from_input->value();
string from_str = string(from_char);
std::cout << "from_str " << from_str << endl;
string day = from_str.substr(6);
string month = from_str.substr(4, 2);
string year = from_str.substr(0, 4);
int days = GetDays(stoi(year), stoi(month), stoi(day));
int predays = days - 1;
std::cout << "days " << days << endl;
std::cout << "predays " << predays << endl;
std::cout << day << " " << month << " " << year <<endl;
preDate = { 0, 0, 0, stoi(day) -1, stoi(month)-1, stoi(year)};
preDate_t = std::mktime(&preDate);
preDate2 = localtime(&preDate_t);
int pre_y = preDate2->tm_year;
int pre_m = preDate2->tm_mon + 1;
int pre_d = preDate2->tm_mday;
std::cout << "pre_y pre_m pre_d " << pre_y << " " << pre_m << " " << pre_d <<endl;
int day2 = GetDay(pre_y, pre_m, pre_d, predays);
std::cout << "day2 " << day2 <<endl;
pre << pre_y;
pre << setw(2) << setfill('0') << pre_m;
pre << setw(2) << setfill('0') << day2;
std::cout << pre.str() << endl;
cmd << "-newerct '" << pre.str() << " 23:59' ";
std::cout << cmd.str() << endl;
}
if (onoff_to == 1){
const char* to_char = to_input->value();
string to_str = string(to_char);
cmd << "! -newerct '" << to_str << " 23:59' " ;
std::cout << cmd.str() << endl;
}
if (onoff_name == 1){
const char* name_char = name_input->value();
string name_str = string(name_char);
cmd << "-name '*" << name_str << "*' " ;
}
cmd << "! -name '*DS_Store*'" ;
std::cout << cmd.str() << endl;
system((cmd.str()).c_str());
// 件数表示
cmd << " | wc -l";
std::cout << cmd.str() << endl;
system((cmd.str()).c_str());
}