18 #define StringSize 4096
\r
22 static int write_index = 0;
\r
23 static char write_buffer[StringSize];
\r
30 void set_affinity(engine_t *engine, int value){
\r
31 pipex_set_affinity(engine->pipex,value);
\r
34 // engine_set_nice_value()
\r
36 void engine_set_nice_value(engine_t *engine, int value){
\r
37 pipex_set_priority(engine->pipex,value);
\r
40 // engine_send_queue()
\r
42 void engine_send_queue(engine_t * engine, const char *format, ...) {
\r
44 if(write_index>=StringSize){
\r
45 my_fatal("engine_send_queue(): write_buffer overflow\n");
\r
47 va_start(arg_list,format);
\r
48 write_index += vsnprintf(write_buffer + write_index,
\r
49 StringSize-write_index,
\r
57 void engine_send(engine_t * engine, const char *format, ...) {
\r
59 if(write_index>=StringSize){
\r
60 my_fatal("engine_send(): write_buffer overflow\n");
\r
62 va_start(arg_list,format);
\r
63 vsnprintf(write_buffer + write_index,
\r
64 StringSize-write_index,
\r
68 pipex_writeln(engine->pipex,write_buffer);
\r
74 void engine_close(engine_t * engine){
\r
75 char string[StringSize];
\r
76 pipex_send_eof(engine->pipex);
\r
78 while (!engine_eof(engine)) {
\r
79 engine_get(Engine,string);
\r
81 pipex_exit(engine->pipex);
\r
86 void engine_open(engine_t * engine){
\r
89 if( (my_dir = my_getcwd( NULL, 0 )) == NULL )
\r
90 my_fatal("engine_open(): no current directory: %s\n",strerror(errno));
\r
91 if(my_chdir(option_get_string("EngineDir"))){
\r
92 my_fatal("engine_open(): cannot change directory: %s\n",strerror(errno));
\r
94 pipex_open(engine->pipex,"Engine",option_get_string("EngineCommand"));
\r
95 if(pipex_active(engine->pipex)){
\r
96 //play with affinity (bad idea)
\r
97 affinity=option_get_int("Affinity");
\r
98 if(affinity!=-1) set_affinity(engine,affinity); //AAA
\r
101 // set a low priority
\r
102 if (option_get_bool("UseNice")){
\r
103 my_log("POLYGLOT Adjust Engine Piority\n");
\r
104 engine_set_nice_value(engine, option_get_int("NiceValue"));
\r
110 bool engine_active(engine_t *engine){
\r
111 return pipex_active(engine->pipex);
\r
114 bool engine_eof(engine_t *engine){
\r
115 return pipex_eof(engine->pipex);
\r
118 bool engine_get_non_blocking(engine_t * engine, char *string){
\r
119 return pipex_readln_nb(engine->pipex,string);
\r
122 void engine_get(engine_t * engine, char *string){
\r
123 pipex_readln(engine->pipex,string);
\r