version 1.4.39b
[polyglot.git] / engine.c
1 // engine.c\r
2 \r
3 // includes\r
4 \r
5 #include <stdlib.h>\r
6 #include <stdarg.h>\r
7 #include <string.h>\r
8 #include <errno.h>\r
9 \r
10 #include "engine.h"\r
11 #include "option.h"\r
12 #include "pipex.h"\r
13 #include "util.h"\r
14 \r
15 // variables\r
16 \r
17 engine_t Engine[1];\r
18 #define StringSize ((int)4096)\r
19 \r
20 // functions\r
21 \r
22 // set_affinity()\r
23 \r
24 void set_affinity(engine_t *engine, int value){\r
25     pipex_set_affinity(engine->pipex,value);\r
26 }\r
27 \r
28 // engine_set_nice_value()\r
29 \r
30 void engine_set_nice_value(engine_t *engine, int value){\r
31     pipex_set_priority(engine->pipex,value);\r
32 }\r
33 \r
34 // engine_send_queue()\r
35 \r
36 void engine_send_queue(engine_t * engine, const char *format, ...) {\r
37     char buf[FormatBufferSize];\r
38     CONSTRUCT_ARG_STRING(format,buf);\r
39     pipex_write(engine->pipex,buf);\r
40 }\r
41 \r
42 // engine_send()\r
43 \r
44 void engine_send(engine_t * engine, const char *format, ...) {\r
45     char buf[FormatBufferSize];\r
46     CONSTRUCT_ARG_STRING(format,buf);\r
47     pipex_writeln(engine->pipex,buf);\r
48 }\r
49 \r
50 // engine_close()\r
51 \r
52 void engine_close(engine_t * engine){\r
53     char string[StringSize];\r
54     pipex_send_eof(engine->pipex);\r
55         // TODO: Timeout\r
56     while (!engine_eof(engine)) { \r
57       engine_get(engine,string);\r
58     }\r
59     pipex_exit(engine->pipex);\r
60 }\r
61 \r
62 // engine_open()\r
63 \r
64 void engine_open(engine_t * engine){\r
65     int affinity;\r
66     pipex_open(engine->pipex,\r
67                "Engine",\r
68                option_get_string(Option,"EngineDir"),\r
69                option_get_string(Option,"EngineCommand"));\r
70     if(pipex_active(engine->pipex)){\r
71             //play with affinity (bad idea)\r
72         affinity=option_get_int(Option,"Affinity");\r
73         if(affinity!=-1) set_affinity(engine,affinity); //AAA\r
74             // set a low priority\r
75         if (option_get_bool(Option,"UseNice")){\r
76             my_log("POLYGLOT Adjust Engine Piority\n");\r
77             engine_set_nice_value(engine, option_get_int(Option,"NiceValue"));\r
78         }\r
79     }\r
80     \r
81 }\r
82 \r
83 bool engine_active(engine_t *engine){\r
84     return pipex_active(engine->pipex);\r
85 }\r
86 \r
87 bool engine_eof(engine_t *engine){\r
88     return pipex_eof(engine->pipex);\r
89 }\r
90 \r
91 bool engine_get_non_blocking(engine_t * engine, char *string){\r
92     return pipex_readln_nb(engine->pipex,string);\r
93  }\r
94 \r
95 void engine_get(engine_t * engine, char *string){\r
96     pipex_readln(engine->pipex,string);\r
97 }\r
98 \r
99 \r