1 |
|
/* |
2 |
< |
* mon.cpp - Machine language monitor |
2 |
> |
* mon.cpp - mon main program |
3 |
|
* |
4 |
< |
* (C) 1997-1999 Christian Bauer |
4 |
> |
* mon (C) 1997-1999 Christian Bauer, Marc Hellwig |
5 |
> |
* |
6 |
> |
* This program is free software; you can redistribute it and/or modify |
7 |
> |
* it under the terms of the GNU General Public License as published by |
8 |
> |
* the Free Software Foundation; either version 2 of the License, or |
9 |
> |
* (at your option) any later version. |
10 |
> |
* |
11 |
> |
* This program is distributed in the hope that it will be useful, |
12 |
> |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 |
> |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 |
> |
* GNU General Public License for more details. |
15 |
> |
* |
16 |
> |
* You should have received a copy of the GNU General Public License |
17 |
> |
* along with this program; if not, write to the Free Software |
18 |
> |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 |
|
*/ |
20 |
|
|
21 |
< |
#include <sys/types.h> |
22 |
< |
#include <netinet/in.h> |
23 |
< |
#include <stdio.h> |
24 |
< |
#include <stdlib.h> |
25 |
< |
#include <string.h> |
26 |
< |
#include <signal.h> |
27 |
< |
#include <ctype.h> |
14 |
< |
#include <unistd.h> |
15 |
< |
#include <errno.h> |
21 |
> |
#include "sysdeps.h" |
22 |
> |
|
23 |
> |
#ifdef HAVE_READLINE_READLINE_H |
24 |
> |
extern "C" { |
25 |
> |
#include <readline/readline.h> |
26 |
> |
} |
27 |
> |
#endif |
28 |
|
|
29 |
+ |
#ifdef HAVE_READLINE_HISTORY_H |
30 |
|
extern "C" { |
31 |
< |
extern char *readline(char *prompt); |
19 |
< |
extern void add_history(char *str); |
31 |
> |
#include <readline/history.h> |
32 |
|
} |
33 |
+ |
#endif |
34 |
|
|
35 |
|
#include "mon.h" |
36 |
|
#include "mon_cmd.h" |
37 |
+ |
#include "version.h" |
38 |
|
|
39 |
|
|
40 |
|
// Buffer we're operating on |
252 |
|
|
253 |
|
static void read_line(char *prompt) |
254 |
|
{ |
255 |
+ |
#ifdef HAVE_LIBREADLINE |
256 |
|
static char *line_read = NULL; |
257 |
|
|
258 |
|
if (line_read) { |
267 |
|
|
268 |
|
strncpy(in_ptr = input, line_read, INPUT_LENGTH); |
269 |
|
input[INPUT_LENGTH-1] = 0; |
270 |
+ |
#else |
271 |
+ |
fprintf(monout, prompt); |
272 |
+ |
fflush(monout); |
273 |
+ |
fgets(in_ptr = input, INPUT_LENGTH, monin); |
274 |
+ |
char *s = strchr(input, '\n'); |
275 |
+ |
if (s != NULL) |
276 |
+ |
*s = 0; |
277 |
+ |
#endif |
278 |
|
} |
279 |
|
|
280 |
|
|
832 |
|
fprintf(monout, "No variables defined\n"); |
833 |
|
else |
834 |
|
for (Variable *v=first_var; v; v=v->next) |
835 |
< |
fprintf(monout, "%s = %08lx\n", v->name, v->value); |
835 |
> |
fprintf(monout, "%s = %08x\n", v->name, v->value); |
836 |
|
|
837 |
|
} else if (mon_token == T_NAME) { |
838 |
|
char var_name[256]; |
925 |
|
} |
926 |
|
|
927 |
|
if (mon_token == T_END) { |
928 |
< |
fprintf(monerr, "Buffer size: %08lx bytes\n", mon_mem_size); |
928 |
> |
fprintf(monerr, "Buffer size: %08x bytes\n", mon_mem_size); |
929 |
|
return; |
930 |
|
} |
931 |
|
|
937 |
|
} |
938 |
|
|
939 |
|
if ((mem = (uint8 *)realloc(mem, size)) != NULL) |
940 |
< |
fprintf(monerr, "Buffer size: %08lx bytes\n", mon_mem_size = size); |
940 |
> |
fprintf(monerr, "Buffer size: %08x bytes\n", mon_mem_size = size); |
941 |
|
else |
942 |
|
fprintf(monerr, "Unable to reallocate buffer\n"); |
943 |
|
} |
979 |
|
read_func = mon_read_word; |
980 |
|
write_func = mon_write_word; |
981 |
|
break; |
982 |
+ |
default: |
983 |
+ |
abort(); |
984 |
+ |
break; |
985 |
|
} |
986 |
|
|
987 |
|
while (adr<=end_adr) { |
1141 |
|
|
1142 |
|
// Print banner |
1143 |
|
if (interactive) |
1144 |
< |
fprintf(monerr, "\n *** mon V%d.%d by Christian Bauer ***\n" |
1145 |
< |
" *** Press 'h' for help ***\n\n", MON_VERSION, MON_REVISION); |
1144 |
> |
fprintf(monerr, "\n *** mon V%d.%d by Christian Bauer and Marc Hellwig ***\n" |
1145 |
> |
" *** Press 'h' for help ***\n\n", VERSION_MAJOR, VERSION_MINOR); |
1146 |
|
} |
1147 |
|
|
1148 |
|
init_abort(); |
1151 |
|
while (!done) { |
1152 |
|
if (interactive) { |
1153 |
|
char prompt[16]; |
1154 |
< |
sprintf(prompt, "[%08lx]-> ", mon_dot_address); |
1154 |
> |
sprintf(prompt, "[%08x]-> ", mon_dot_address); |
1155 |
|
read_line(prompt); |
1156 |
|
} else { |
1157 |
|
if (argc == 0) { |