From f270b847a817582f60f6371293fade65fe9afb9f Mon Sep 17 00:00:00 2001 From: jaortega Date: Mon, 26 Feb 2001 23:21:17 +0000 Subject: mix vm command dispatch refactoring --- mixlib/mix_vm_dump.c | 77 +++++++++++----------------------------------------- 1 file changed, 16 insertions(+), 61 deletions(-) (limited to 'mixlib/mix_vm_dump.c') diff --git a/mixlib/mix_vm_dump.c b/mixlib/mix_vm_dump.c index 2d773fc..91953fd 100644 --- a/mixlib/mix_vm_dump.c +++ b/mixlib/mix_vm_dump.c @@ -26,15 +26,12 @@ /* Create/destroy a dump context */ mix_dump_context_t * -mix_dump_context_new(gint fd, mix_address_t begin, mix_address_t end, +mix_dump_context_new(FILE *fd, mix_address_t begin, mix_address_t end, guint32 options) { mix_dump_context_t *result = NULL; - GIOChannel *channel = NULL; - if ( fd == MIX_DUMP_DEF_CHANNEL ) fd = STDIN_FILENO; - channel = g_io_channel_unix_new (fd); - g_return_val_if_fail (channel != NULL, NULL); + g_return_val_if_fail (fd != NULL, NULL); if ( begin > end ) begin = end; if ( end >= MEM_CELLS_NO_ ) end = MEM_CELLS_NO_; @@ -43,7 +40,7 @@ mix_dump_context_new(gint fd, mix_address_t begin, mix_address_t end, result->options = options; result->begin = begin; result->end = end; - result->channel = channel; + result->channel = fd; return result; } @@ -52,20 +49,9 @@ void mix_dump_context_delete (mix_dump_context_t *dc) { g_return_if_fail (dc != NULL); - g_io_channel_close (dc->channel); g_free (dc); } -gboolean /* TRUE if success */ -mix_dump_context_set_channel (mix_dump_context_t *dc, gint fd) -{ - g_return_val_if_fail (dc != NULL, FALSE); - g_io_channel_close (dc->channel); - dc->channel = g_io_channel_unix_new (fd == MIX_DUMP_DEF_CHANNEL? - STDERR_FILENO : fd); - return ( dc->channel != NULL ); -} - /* Use the dump context */ #define WORD_FMT_ "%s %02d %02d %02d %02d %02d (%010ld)" #define SHORT_FMT_ "%s %02d %02d (%04d)" @@ -80,55 +66,33 @@ mix_dump_context_set_channel (mix_dump_context_t *dc, gint fd) #define SHORT_ARGS_(s) SHORT_SIGN_ (s), SHORT_BYTE_ (s,1), SHORT_BYTE_ (s,2), \ SHORT_ABS_ (s) -static gboolean -write_buffer_ (const gchar *buf, guint len, GIOChannel *io) -{ - guint k, err; - - while ( len > 0 ) { - err = g_io_channel_write (io, (gchar *) buf, len, &k); - g_return_val_if_fail (err == G_IO_ERROR_NONE || - err == G_IO_ERROR_AGAIN, FALSE); - len -= k; - } - return TRUE; -} - - - void mix_vm_dump (const mix_vm_t *vm, const mix_dump_context_t *dc) { - static const guint BUF_LEN = 40; - gchar buf[BUF_LEN]; guint j, i; + FILE *f; g_return_if_fail (vm != NULL); g_return_if_fail (dc != NULL); - + f = dc->channel; + if ( (dc->options & MIX_DUMP_rA) == MIX_DUMP_rA ) { mix_word_t rA = get_rA_ (vm); - guint k = g_snprintf (buf, BUF_LEN, "rA: " WORD_FMT_ "\n", - WORD_ARGS_ (rA)); - g_return_if_fail (write_buffer_ (buf, k, dc->channel)); + fprintf (f, "rA: " WORD_FMT_ "\n", WORD_ARGS_ (rA)); } if ( (dc->options & MIX_DUMP_rX) == MIX_DUMP_rX ) { mix_word_t rX = get_rX_ (vm); - guint k = g_snprintf (buf, BUF_LEN, "rX: " WORD_FMT_ "\n", - WORD_ARGS_ (rX)); - g_return_if_fail (write_buffer_ (buf, k, dc->channel)); + fprintf (f, "rX: " WORD_FMT_ "\n", WORD_ARGS_ (rX)); } if ( (dc->options & MIX_DUMP_rJ) == MIX_DUMP_rJ ) { mix_short_t rJ = get_rJ_ (vm); - guint k = g_snprintf (buf, BUF_LEN, "rJ: " SHORT_FMT_ "\n", - SHORT_ARGS_ (rJ)); - g_return_if_fail (write_buffer_ (buf, k, dc->channel)); + fprintf (f, "rJ: " SHORT_FMT_ "\n", SHORT_ARGS_ (rJ)); } for (j = 0, i = 0; j < IREG_NO_; ++j) @@ -136,28 +100,21 @@ mix_vm_dump (const mix_vm_t *vm, const mix_dump_context_t *dc) if ( (dc->options & (MIX_DUMP_rI1<channel)); + fprintf (f, "rI%d: " SHORT_FMT_ "\t", j+1, SHORT_ARGS_ (rI)); i++; } - if ( i%2 == 0 && i != 0 ) - g_return_if_fail (write_buffer_ ("\n", 1, dc->channel)); + if ( i%2 == 0 && i != 0 ) fprintf (f, "\n"); } - if ( i%2 == 1 ) - g_return_if_fail (write_buffer_ ("\n", 1, dc->channel)); + if ( i%2 == 1 ) fprintf (f, "\n"); if ( (dc->options & MIX_DUMP_OVER) == MIX_DUMP_OVER ) { - guint k = g_snprintf (buf, BUF_LEN, _("Overflow: %s\n"), - get_over_ (vm)? "T":"F"); - g_return_if_fail (write_buffer_ (buf, k, dc->channel)); + fprintf (f, _("Overflow: %s\n"), get_over_ (vm)? "T":"F"); } if ( (dc->options & MIX_DUMP_CMP) == MIX_DUMP_CMP ) { - guint k; const gchar *val = "?"; switch (get_cmp_ (vm)) { @@ -174,8 +131,7 @@ mix_vm_dump (const mix_vm_t *vm, const mix_dump_context_t *dc) g_assert_not_reached (); break; } - k = g_snprintf (buf, BUF_LEN, _("Cmp: %s\n"), val); - g_return_if_fail (write_buffer_ (buf, k, dc->channel)); + fprintf (f, _("Cmp: %s\n"), val); } if ( (dc->options & MIX_DUMP_CELLS) == MIX_DUMP_CELLS ) @@ -183,10 +139,9 @@ mix_vm_dump (const mix_vm_t *vm, const mix_dump_context_t *dc) for (j = dc->begin; j < dc->end; ++j) { mix_word_t cell = get_cell_ (vm,j); - guint k = g_snprintf (buf, BUF_LEN, "%04d: " WORD_FMT_ "\n", j, - WORD_ARGS_ (cell)); - g_return_if_fail (write_buffer_ (buf, k, dc->channel)); + fprintf (f, "%04d: " WORD_FMT_ "\n", j, WORD_ARGS_ (cell)); } } + fflush (f); } -- cgit v1.2.3