af::Msg * JobAf::writeTask( int i_b, int i_t, const std::string & i_mode, bool i_binary) const { std::ostringstream str; str << "{"; if( false == checkBlockTaskNumbers( i_b, i_t, "writeTask")) { return af::jsonMsgError("Invalid block/task number."); } af::MCTask mctask( m_id, i_b, i_t); fillTaskNames( mctask); if( i_mode == "info" ) { af::TaskExec * exec = generateTask( i_b, i_t); if( exec ) { mctask.setExec( exec); return mctask.generateMessage( i_binary); } } else if( i_mode == "log" ) { mctask.setLog( getTaskLog( i_b, i_t)); return mctask.generateMessage( i_binary); } else if( i_mode == "error_hosts") { std::list<std::string> list; m_blocks[i_b]->m_tasks[i_t]->getErrorHostsList( list); mctask.setErrorHosts( list); return mctask.generateMessage( i_binary); } else if( i_mode == "files" ) { if( i_binary ) return m_blocks[i_b]->m_tasks[i_t]->getStoredFiles(); else m_blocks[i_b]->m_tasks[i_t]->getStoredFiles( str); } else if( i_mode == "output") { // "output" is processed in threadProcessJSON(), // as file reading or render update waiting can be needed. AF_ERR << "Mode is \"output\"."; } str << "}"; return af::jsonMsg( str); }
int main() { // not recommended to do something with sizes :( COORD size = {9, 8}; drawTable(size); // task - aim, request - user input i4 task(generateTask()); i4 request; // index to watch which digit user is entered // line - offset for the log output int index = 0, line = 4; bool bQuit = false; while (!bQuit) { char ch[] = {readKey(), '\0'}; int code = (int)(ch[0]); // if input is digit if (code > 47 && code < 58 && index < 4) { int num = code - 48; bool bDublicate = false; for (int i = 0; i < index; ++i) { if (request[i] == num) { bDublicate = true; break; } } if (bDublicate) continue; request[index] = num; ++index; print({2 + index, 1}, ch); } // if input is erase if (code == KEY_BACK && index > 0) print({2 + index--, 1}, "_"); // if input is confirm if (code == KEY_ENTER && index == 4) { print({3, 1}, "____"); i2 fb = getFeedback(request, task); // hard way to do simple thing char c[] = { request[0] + 48, request[1] + 48, request[2] + 48, request[3] + 48, ' ', fb[0] + 48, ':', fb[1] + 48, '\0' }; print({1, line}, c); ++line; index = 0; // make the table longer if needed if (line > size.Y-1) { print({0, size.Y}, "|"); print({size.X, size.Y}, "|"); ++size.Y; } // win event if (fb[0] == 4) { for (int i = 0; i < size.X-1; ++i) print({1 + i, line}, "!"); readKey(); break; } } // if input is exit if (code == KEY_ESC) return 0; //printf("%d", code); } clearScreen(); system("pause"); return 0; }