-
Notifications
You must be signed in to change notification settings - Fork 4
/
fiocl.h
243 lines (210 loc) · 6.12 KB
/
fiocl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
/*
* Simulator of microcontrollers (fiocl.h)
*
* Copyright (C) 1997,16 Drotos Daniel, Talker Bt.
*
* To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
*
*/
/* This file is part of microcontroller simulator: ucsim.
UCSIM is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
UCSIM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with UCSIM; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/*@1@*/
#ifndef FIOCL_HEADER
#define FIOCL_HEADER
#include <stdio.h>
#include <stdarg.h>
#include "charscl.h"
#include "pobjcl.h"
enum file_type {
F_UNKNOWN,
F_FILE,
F_CHAR,
F_SOCKET,
F_LISTENER,
F_PIPE,
F_CONSOLE, // win only
F_SERIAL // win only
};
enum tu_special_keys {
TU_UP = -10,
TU_DOWN = -11,
TU_LEFT = -12,
TU_RIGHT = -13,
TU_HOME = -14,
TU_END = -15,
TU_PGUP = -16,
TU_PGDOWN = -17,
TU_DEL = -18,
TU_F1 = -19,
TU_F2 = -20,
TU_F3 = -21,
TU_F4 = -22,
TU_F5 = -23,
TU_F6 = -24,
TU_F7 = -25,
TU_F8 = -26,
TU_F9 = -27,
TU_F10 = -28,
TU_F11 = -29,
TU_F12 = -30,
TU_INS = -31,
// mouse reports in 4 bytes: FF X Y Code
TU_BTN1 = -50, // button1
TU_BTN2 = -51, // button2
TU_BTN3 = -52, // button3
TU_CBTN1 = -53, // CTRL-button1
TU_CBTN2 = -54, // CTRL-button2
TU_CBTN3 = -55, // CTRL-button3
TU_ABTN1 = -56, // ALT-button1
TU_ABTN2 = -57, // ALT-button2
TU_ABTN3 = -58, // ALT-button3
TU_SUP = -59, // Scroll-UP
TU_SDOWN = -60, // Scroll-DOWN
TU_CSUP = -61, // CTRL-Scroll-UP
TU_CSDOWN = -62, // CTRL-Scroll-DOWN
};
/* History */
class cl_history: public cl_ustrings
{
protected:
int nr;
//chars actual_line;
public:
cl_history(char *aname);
cl_history(const char *aname);
virtual ~cl_history(void);
public:
char *up(chars line);
char *down(chars line);
char *enter(chars line);
void replace(chars line);
};
/* General file */
class cl_f: public cl_base
{
public:
int file_id;
bool tty;
enum file_type type;
protected:
chars file_name, file_mode;
bool cooking;
class cl_f *echo_to, *echo_of;
chars echo_color;
bool own;
int at_end;
char line[1024];
int cursor;
char esc_buffer[100];
char last_ln;
int buffer[1024];
int last_used, first_free;
bool attributes_saved;
class cl_history *hist;
bool proc_telnet; // in raw mode
bool proc_escape; // in raw mode
public:
cl_f(void);
cl_f(chars fn, chars mode);
cl_f(int the_server_port);
virtual ~cl_f(void);
virtual class cl_f *copy(chars mode);
virtual int init(void);
//virtual int open(void) { return init(); }
virtual int open(char *fn);
virtual int open(char *fn, char *mode);
virtual int use_opened(int opened_file_id, char *mode);
virtual int own_opened(int opened_file_id, char *mode);
virtual int use_opened(FILE *f, chars mode);
virtual int own_opened(FILE *f, chars mode);
virtual enum file_type determine_type(void)= 0;
virtual void changed(void);
virtual int close(void);
virtual int stop_use(void);
virtual bool opened(void) { return file_id >= 0; }
virtual char *get_file_name() { return file_name; };
virtual char *get_fname() { return file_name; };
virtual class cl_f *get_echo_to() { return echo_to; }
protected:
virtual int put(int c);
virtual int get(void);
virtual int free_place(void);
virtual int finish_esc(int k);
virtual int process_telnet(unsigned char ci);
virtual int process_esc(char c);
virtual int process_csi(void);
virtual int process(char c);
virtual int pick(void);
virtual int pick(char c);
virtual int pick(const char *s);
public:
virtual int input_avail(void);
virtual int read(int *buf, int max);
virtual int get_c(void);
virtual chars get_s(void);
public:
//FILE *f(void) { return file_f; };
int id(void) { return file_id; };
virtual int check_dev(void)= 0;
virtual int read_dev(int *buf, int max);
virtual int write(char *buf, int count);
virtual int write_str(char *s);
virtual int write_str(const char *s);
virtual int vprintf(const char *format, va_list ap);
virtual int prntf(const char *format, ...);
virtual bool eof(void);
//virtual void flush(void);
virtual void echo_cursor_save();
virtual void echo_cursor_restore();
virtual void echo_cursor_go_left(int n);
virtual void echo_cursor_go_right(int n);
virtual void echo_write(char *b, int l);
virtual void echo_write_str(char *s);
virtual void echo_write_str(const char *s);
virtual void set_echo_color(chars col);
virtual chars get_echo_color() { return echo_color; }
virtual void prepare_terminal();
virtual void save_attributes();
virtual void restore_attributes();
virtual int raw(void);
virtual int cooked(void);
virtual void check(void) { return; }
virtual int echo(class cl_f *out);
virtual void interactive(class cl_f *echo_out);
virtual int get_cooking() { return cooking; }
virtual void set_telnet(bool val);
virtual void set_escape(bool val);
virtual bool get_telnet() { return proc_telnet; }
virtual bool get_escape() { return proc_escape; }
public:
int server_port;
public:
//virtual int listen(int on_port);
//virtual class cl_f *accept();
//virtual int connect(chars host, int to_port);
};
//extern void deb(const char *format, ...);
extern int mk_srv_socket(int port);
extern class cl_f *mk_io(chars fn, chars mode);
extern class cl_f *cp_io(/*FILE *f*/int file_id, chars mode);
extern class cl_f *mk_srv(int server_port);
extern int srv_accept(class cl_f *listen_io,
class cl_f **fin, class cl_f **fout);
extern bool check_inputs(class cl_list *active, class cl_list *avail);
extern void msleep(int msec);
extern void loop_delay();
extern chars fio_type_name(enum file_type t);
extern void sigpipe_off();
#endif
/* End of fiocl.h */