1/*  This file is part of the program psim.
2
3    Copyright (C) 1994-1995,1998, Andrew Cagney <cagney@highland.com.au>
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19    */
20
21
22#ifndef _SIM_CALLBACKS_H_
23#define _SIM_CALLBACKS_H_
24
25/* Simulator output:
26
27   Functions to report diagnostic information to the user. */
28
29#define printf_filtered sim_io_printf_filtered
30void sim_io_printf_filtered
31(const char *msg, ...) __attribute__ ((format (printf, 1, 2)));
32
33void NORETURN error
34(const char *msg, ...);
35
36
37/* External environment:
38
39   Some HOST OS's require regular polling so that external events such
40   as GUI io can be handled. */
41
42void sim_io_poll_quit
43(void);
44
45
46
47/* Model I/O:
48
49   These functions provide the interface between the modeled targets
50   standard input and output streams and the hosts external
51   environment.
52
53   The underlying model is responsible for co-ordinating I/O
54   interactions such as:
55
56        main()
57        {
58          const char mess[] = "Hello World\r\n";
59          int out;
60          out = dup(1);
61          close(1);
62          write(out, mess, sizeof(mess))
63        }
64
65   That is to say, the underlying model would, in implementing dup()
66   recorded the fact that any output directed at fid-OUT should be
67   displayed using sim_io_write_stdout().  While for the code stub:
68
69        main()
70        {
71          const char mess[] = "Hello World\r\n";
72          int out;
73          close(1);
74          out = open("output", 0x0001|0x0200, 0); // write+create
75          out = dup(1);
76          write(out, mess, sizeof(mess))
77        }
78
79   would result in output to fid-1 being directed towards the file
80   "output". */
81
82
83int
84sim_io_write_stdout
85(const char *buf,
86 int sizeof_buf);
87
88int
89sim_io_write_stderr
90(const char *buf,
91 int sizeof_buf);
92
93/* read results */
94enum { sim_io_eof = -1, sim_io_not_ready = -2, }; /* See: IEEE 1275 */
95
96int
97sim_io_read_stdin
98(char *buf,
99 int sizeof_buf);
100
101#define flush_stdoutput sim_io_flush_stdoutput
102void sim_io_flush_stdoutput
103(void);
104
105
106/* Simulator instance.  */
107extern psim *simulator;
108
109
110/* Memory management with an allocator that clears memory before use. */
111
112void *zalloc
113(long size);
114
115#define ZALLOC(TYPE) (TYPE*)zalloc(sizeof (TYPE))
116
117void zfree(void*);
118
119#endif
120