+2006-08-20 Borut Razem <borut.razem AT siol.net>
+
+ * sim/ucsim/cmd.src/newcmd.cc, sim/ucsim/cmd.src/newcmdcl.h:
+ removed cl_listen_console::match(), cl_console::match(),
+ restructured cl_commander::proc_input()
+
2006-08-16 Borut Razem <borut.razem AT siol.net>
* sim/ucsim/cmd.src/newcmd.cc, sim/ucsim/cmd.src/newcmdcl.h,
#include "cmdutil.h"
-extern "C" int vasprintf(char **strp, const char *format, va_list ap);
-extern "C" int vsnprintf(char *str, size_t size,const char *format,va_list ap);
-
-
/*
* Options of console
*/
int
cl_console::cmd_do_print(char *format, va_list ap)
{
+ int ret;
FILE *f = get_out();
- int ret = 0;
if (f)
{
- vfprintf(f, format, ap);
+ ret= vfprintf(f, format, ap);
fflush(f);
}
+ else
+ ret= 0;
return(ret);
}
* Input functions
*/
-int
-cl_console::match(int fdnum)
-{
- if (in &&
- fileno(in) == fdnum)
- return(1);
- return(0);
-}
-
int
cl_console::get_in_fd(void)
{
#ifdef HAVE_GETLINE
if (getline(&s, 0, in) < 0)
return(0);
-#else
-
-# ifdef HAVE_GETDELIM
+#elif defined HAVE_GETDELIM
size_t n= 30;
s= (char *)malloc(n);
if (getdelim(&s, &n, '\n', in) < 0)
free(s);
return(0);
}
-# else
-
-# ifdef HAVE_FGETS
+#elif defined HAVE_FGETS
s= (char *)malloc(300);
if (fgets(s, 300, in) == NULL)
{
free(s);
return(0);
}
-# endif
-# endif
#endif
s[strlen(s)-1]= '\0';
if (s[strlen(s)-1] == '\r')
in= out= 0;
}
-int
-cl_listen_console::match(int fdnum)
-{
- return(sock == fdnum);
-}
-
int
cl_listen_console::get_in_fd(void)
{
int
cl_commander::proc_input(void)
{
- UCSOCKET_T i;
+ for (int j = 0; j < cons->count; j++)
+ {
+ class cl_console *c = (class cl_console*)(cons->at(j));
- for (i= 0; i < fd_num; i++)
- if (FD_ISSET(i, &active_set))
- {
- class cl_console *c;
- int j;
- for (j= 0; j < cons->count; j++)
- {
- c= (class cl_console*)(cons->at(j));
- if (c->match(i))
- {
- actual_console= c;
- int retval= c->proc_input(cmdset);
- if (retval)
- {
- del_console(c);
- delete c;
- }
- actual_console= 0;
- return(cons->count == 0);
- }
- }
- }
- return(0);
+ int fd = c->get_in_fd();
+ if (fd >= 0 && FD_ISSET(fd, &active_set))
+ {
+ actual_console = c;
+ int retval = c->proc_input(cmdset);
+ if (retval)
+ {
+ del_console(c);
+ delete c;
+ }
+ actual_console = 0;
+ return(0 == cons->count);
+ }
+ }
+ return 0;
}
void
* Simulator of microcontrollers (cmd.src/cmdcl.h)
*
* Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
- *
+ *
* To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
*
*/
class cl_app *app;
int flags; // See CONS_XXXX
char *prompt;
-
+
public:
cl_console(void): cl_base() { app= 0; in= out= 0; flags= 0; }
cl_console(char *fin, char *fout, class cl_app *the_app);
virtual int debug(char *format, ...);
virtual void print_bin(long data, int bits);
virtual void print_char_octal(char c);
- virtual int match(int fdnum);
virtual int get_in_fd(void);
virtual int input_avail(void);
virtual char *read_line(void);
virtual void welcome(void) {}
- virtual int match(int fdnum);
virtual int get_in_fd(void);
virtual int proc_input(class cl_cmdset *cmdset);
};