2 * Copyright © 2008 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
21 #include <sys/types.h>
22 #include <sys/socket.h>
23 #include <netinet/in.h>
25 static int s51_port = 0;
26 static char *cpu = "8051";
27 static double freq = 11059200;
28 char *s51_prompt = "> ";
29 struct ccdbg *s51_dbg;
34 fprintf(stderr, "You're doing it wrong.\n");
39 main(int argc, char **argv)
42 FILE *console_in = stdin;
43 FILE *console_out = stdout;
46 while ((opt = getopt(argc, argv, "PVvHht:X:c:r:Z:s:S:p:")) != -1) {
52 freq = strtod(optarg, &endptr);
55 if (endptr[0] != '\0') {
56 if (!strcmp(endptr, "k"))
58 else if (!strcmp(endptr, "M") )
68 s51_port = strtol(optarg, &endptr, 0);
69 if (endptr == optarg || strlen(endptr) != 0)
97 struct sockaddr_in in;
99 l = socket(AF_INET, SOCK_STREAM, 0);
104 r = setsockopt(l, SOL_SOCKET, SO_REUSEADDR, &one, sizeof (int));
106 perror("setsockopt");
109 in.sin_family = AF_INET;
110 in.sin_port = htons(s51_port);
111 in.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
112 r = bind(l, (struct sockaddr *) &in, sizeof (in));
123 struct sockaddr_in client_addr;
124 socklen_t client_len = sizeof (struct sockaddr_in);
125 FILE *client_in, *client_out;
127 s = accept(l, (struct sockaddr *)
128 &client_addr, &client_len);
133 client_in = fdopen(s, "r");
134 client_out = fdopen(s, "w");
135 if (!client_in || !client_out) {
139 command_read(client_in, client_out);
144 command_read(console_in, console_out);