int main(int argc, char **argv) { #ifdef WIN32 WSADATA wsa_data; WSAStartup(0x0201, &wsa_data); #endif try { SimpleEventLoop loop; //1. listen on PORT HelloWorldListener tcp_listener( &loop); tcp_listener.start_listen_on_tcp( CString("0.0.0.0:%d", PORT).c_str() ); //2. also we handle ctrl-C QuitSignalHandler control_c_handler(&loop); control_c_handler.start_handle_signal( SIGINT ); //3. also listen on a unix domain socket HelloWorldListener un_listener( &loop); un_listener.start_listen_on_un( ".haha" ); //4. the main loop loop.run(); printf("done\n"); } catch (std::exception& ex) { LOG_ERROR("Exception in main(): %s\n", ex.what()); return 1; } catch (...) { LOG_ERROR("Unknown exception in main()\n"); return 1; } return 0; }
void get_next_char (void) { char *s; #ifdef USE_TCL /* Soar-Bugs #54, TMH */ if ( current_agent(alternate_input_exit) && (current_agent(alternate_input_string) == NULL) && (current_agent(alternate_input_suffix) == NULL) ) { current_agent(current_char) = EOF_AS_CHAR; control_c_handler(0); return; } #endif if (current_agent(using_input_string)) { if (*(current_agent(input_string))!='\0') current_agent(current_char) = *(current_agent(input_string)++); return; } #ifdef USE_X_DISPLAY if (x_input_buffer != NIL) { current_agent(current_char) = x_input_buffer[x_input_buffer_index++]; if (current_agent(current_char) == '\n') { x_input_buffer = NIL; } } else { current_agent(current_char) = current_agent(current_file)->buffer [current_agent(current_file)->current_column++]; } #elif defined(USE_TCL) if (current_agent(alternate_input_string) != NULL) { current_agent(current_char) = *current_agent(alternate_input_string)++; if (current_agent(current_char) == '\0') { current_agent(alternate_input_string) = NIL; current_agent(current_char) = *current_agent(alternate_input_suffix)++; } } else if (current_agent(alternate_input_suffix) != NULL) { current_agent(current_char) = *current_agent(alternate_input_suffix)++; if (current_agent(current_char) == '\0') { current_agent(alternate_input_suffix) = NIL; /* Soar-Bugs #54, TMH */ if ( current_agent(alternate_input_exit) ) { current_agent(current_char) = EOF_AS_CHAR; control_c_handler(0); return; } current_agent(current_char) = current_agent(current_file)->buffer [current_agent(current_file)->current_column++]; } } else { current_agent(current_char) = current_agent(current_file)->buffer [current_agent(current_file)->current_column++]; } #elif _WINDOWS if (current_agent(current_file)->file==stdin) { switch (current_agent(current_line)[current_agent(current_line_index)]) { case EOF_AS_CHAR: case 0: if (!AvailableWindowCommand()) { current_agent(current_line)[current_agent(current_line_index)=0]=current_agent(current_char)=EOF_AS_CHAR; break; } else { s=GetWindowCommand(); strcpy(current_agent(current_line),s+1); if (current_agent(print_prompt_flag)=(s[0]=='1')) print("%s",s+1); free(s); current_agent(current_line_index)=0; } default: current_agent(current_char)=current_agent(current_line)[current_agent(current_line_index)++]; break; } } else current_agent(current_char) = current_agent(current_file)->buffer [current_agent(current_file)->current_column++]; #else current_agent(current_char) = current_agent(current_file)->buffer [current_agent(current_file)->current_column++]; #endif if (current_agent(current_char)) return; if ((current_agent(current_file)->current_column == BUFSIZE) && (current_agent(current_file)->buffer[BUFSIZE-2] != '\n') && (current_agent(current_file)->buffer[BUFSIZE-2] != EOF_AS_CHAR)) { char msg[512]; sprintf (msg, "lexer.c: Error: line too long (max allowed is %d chars)\nFile %s, line %lu\n", MAX_LEXER_LINE_LENGTH, current_agent(current_file)->filename, current_agent(current_file)->current_line); abort_with_fatal_error(msg); } s = fgets (current_agent(current_file)->buffer, BUFSIZE, current_agent(current_file)->file); if (s) { current_agent(current_file)->current_line++; if (reading_from_top_level()) { tell_printer_that_output_column_has_been_reset (); if (current_agent(logging_to_file)) print_string_to_log_file_only (current_agent(current_file)->buffer); } } else { /* s==NIL means immediate eof encountered or read error occurred */ if (! feof(current_agent(current_file)->file)) { if(reading_from_top_level()) { #ifndef _WINDOWS control_c_handler(0); /* AGR 581 */ #endif return; } else { print ("I/O error while reading file %s; ignoring the rest of it.\n", current_agent(current_file)->filename); } } current_agent(current_file)->buffer[0] = EOF_AS_CHAR; current_agent(current_file)->buffer[1] = 0; } current_agent(current_char) = current_agent(current_file)->buffer[0]; current_agent(current_file)->current_column = 1; }