sdcc-gas/sim/ucsim/fiocl.h

244 lines
6.1 KiB
C++

/*
* 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 */