Check in polyglot-1.4w10UCIb15
[polyglot.git] / gui.cpp
1 // gui.cpp
2
3 // includes
4
5 #include <cstdarg>
6
7 #include "gui.h"
8 #include "main.h"
9
10 // constants
11
12 static const int StringSize = 4096;
13
14 // variables
15
16 gui_t GUI[1];
17
18 // functions
19
20
21 // gui_init()
22
23 void gui_init(gui_t *gui){
24     #ifdef _WIN32
25    (gui->pipeStdin).Open();
26 #else
27    // xboard
28
29    gui->io->in_fd = STDIN_FILENO;
30    gui->io->out_fd = STDOUT_FILENO;
31    gui->io->name = "GUI";
32
33    io_init(gui->io);
34 #endif
35 }
36
37
38 // gui_get_non_blocking()
39
40 // this is only non_blocking on windows!
41
42 bool gui_get_non_blocking(gui_t * gui, char string[], int size) {
43
44    ASSERT(xboard!=NULL);
45    ASSERT(string!=NULL);
46    ASSERT(size>=256);
47 #ifndef _WIN32
48    if (!io_get_line(gui->io,string,size)) { // EOF
49       my_log("POLYGLOT *** EOF from GUI ***\n");
50       quit();
51    }
52    return true;
53 #else
54    if ((gui->pipeStdin).LineInput(string)) {
55        my_log("GUI->Adapter: %s\n", string);
56        return true;
57    } else {
58         string[0]='\0';
59         return false;
60    }
61    
62 #endif
63 }
64
65 // gui_get()
66
67 void gui_get(gui_t * gui, char string[], int size) {
68     bool data_available;
69     while(true){
70         data_available=gui_get_non_blocking(gui, string, size);
71         if(!data_available){
72             Idle();
73         }else{
74             break;
75         }
76     }
77 }
78
79
80 // gui_send()
81
82 void gui_send(gui_t * gui, const char format[], ...) {
83
84    va_list arg_list;
85    char string[StringSize];
86
87    ASSERT(xboard!=NULL);
88    ASSERT(format!=NULL);
89
90    // format
91
92    va_start(arg_list,format);
93    vsprintf(string,format,arg_list);
94    va_end(arg_list);
95
96    // send
97
98 #ifndef _WIN32
99    io_send(gui->io,"%s",string);
100 #else
101    printf("%s\n",string);
102    fflush(stdout);
103    my_log("Adapter->GUI: %s\n",string);
104 #endif
105 }
106