int main(void) { #if _DEBUG freopen("input.txt","r", stdin); #endif input_proc(); do_something(); output_proc(); return 0; }
void Trace(int level, const wchar_t* file, int line, const wchar_t *format, ...) { WriteBufferProc output_proc = GetOutputWriter(level); if (output_proc) { wchar_t buffer[MAX_TRACE_BUFFER]; va_list args; if (file && line) { swprintf_s(buffer, sizeof buffer / sizeof *buffer, L"[%s:%ld] (%d) ", file, line, level); output_proc(buffer); } va_start(args, format); if (format && vswprintf_s(buffer, sizeof buffer / sizeof *buffer, format, args) >= 0) { output_proc(buffer); } } }
/** * @author Tom Nightingale * * @brief The program's entry point. * @details Initializes the processes and ports for IPC. */ int main() { int pfd[3][2]; int i = 0; int pid[2]; // Put keyboard into raw mode system("stty raw -icanon igncr -echo"); // Open the pipes. for (i = 0; i < 3; i++) { if (pipe(pfd[i]) < 0) { fatal("pipe call"); } } // Create 2 child processes; OUTPUT_PROC & TRANSLATE_PROC. for (i = 0; i < 2; i++) { if ((pid[i] = fork()) <= 0) { switch (i) { // Output process. case OUTPUT_PROC: // Closing unused pipe descriptors. close(pfd[PIPE_INPUT_OUTPUT][WRITE]); close(pfd[PIPE_TRANS_OUTPUT][WRITE]); close(pfd[PIPE_INPUT_TRANSLATE][READ]); close(pfd[PIPE_INPUT_TRANSLATE][WRITE]); output_proc(pfd[PIPE_INPUT_OUTPUT][READ], pfd[PIPE_TRANS_OUTPUT][READ]); return 0; // Translate process. case TRANSLATE_PROC: // Closing unused pipe descriptors. close(pfd[PIPE_INPUT_TRANSLATE][WRITE]); close(pfd[PIPE_TRANS_OUTPUT][READ]); close(pfd[PIPE_INPUT_OUTPUT][READ]); close(pfd[PIPE_INPUT_OUTPUT][WRITE]); translate_proc(pfd[PIPE_INPUT_TRANSLATE][READ], pfd[PIPE_TRANS_OUTPUT][WRITE]); return 0; } } } // Input process (parent). // Closing unused pipe descriptors. close(pfd[PIPE_INPUT_OUTPUT][READ]); close(pfd[PIPE_INPUT_TRANSLATE][READ]); close(pfd[PIPE_TRANS_OUTPUT][READ]); close(pfd[PIPE_TRANS_OUTPUT][WRITE]); input_proc(pid, pfd[PIPE_INPUT_OUTPUT][WRITE], pfd[PIPE_INPUT_TRANSLATE][WRITE]); // Return keyboard state. system("stty -raw icanon -igncr echo"); return 0; }