diff options
Diffstat (limited to 'mixlib')
-rw-r--r-- | mixlib/mix_predicate.c | 6 | ||||
-rw-r--r-- | mixlib/mix_predicate_list.c | 14 | ||||
-rw-r--r-- | mixlib/mix_predicate_list.h | 2 | ||||
-rw-r--r-- | mixlib/mix_vm.c | 17 | ||||
-rw-r--r-- | mixlib/mix_vm.h | 4 | ||||
-rw-r--r-- | mixlib/mix_vm_command.c | 31 |
6 files changed, 44 insertions, 30 deletions
diff --git a/mixlib/mix_predicate.c b/mixlib/mix_predicate.c index 544da64..38049dc 100644 --- a/mixlib/mix_predicate.c +++ b/mixlib/mix_predicate.c @@ -165,12 +165,12 @@ mix_predicate_get_message (const mix_predicate_t *predicate) switch (predicate->type) { case MIX_PRED_REG_A: - snprintf (BUFFER, SIZE, "Register A changed to %s%d", + snprintf (BUFFER, SIZE, "Register A changed to %s%ld", mix_word_is_negative (predicate->data.regA)? "-" : "+", mix_word_magnitude (predicate->data.regA)); break; case MIX_PRED_REG_X: - snprintf (BUFFER, SIZE, "Register X changed to %s%d", + snprintf (BUFFER, SIZE, "Register X changed to %s%ld", mix_word_is_negative (predicate->data.regX)? "-" : "+", mix_word_magnitude (predicate->data.regX)); break; @@ -194,7 +194,7 @@ mix_predicate_get_message (const mix_predicate_t *predicate) predicate->data.over ? "ON" : "OFF"); break; case MIX_PRED_MEM: - snprintf (BUFFER, SIZE, "Memory address %d changed to %s%d", + snprintf (BUFFER, SIZE, "Memory address %d changed to %s%ld", predicate->control, mix_word_is_negative (predicate->data.mem)? "-" : "+", mix_word_magnitude (predicate->data.mem)); diff --git a/mixlib/mix_predicate_list.c b/mixlib/mix_predicate_list.c index 3e4fe08..42f6ea6 100644 --- a/mixlib/mix_predicate_list.c +++ b/mixlib/mix_predicate_list.c @@ -85,13 +85,19 @@ mix_predicate_list_add (mix_predicate_list_t *list, mix_predicate_t *predicate) (void)mix_predicate_eval (predicate, list->vm); } -void +gboolean mix_predicate_list_remove (mix_predicate_list_t *list, mix_predicate_t *predicate) { - g_return_if_fail (list != NULL); - g_return_if_fail (predicate != NULL); - list->predicates = g_slist_remove (list->predicates, predicate); + g_return_val_if_fail (list != NULL, FALSE); + g_return_val_if_fail (predicate != NULL, FALSE); + if (g_slist_find (list->predicates, predicate)) + { + list->predicates = g_slist_remove (list->predicates, predicate); + return TRUE; + } + else + return FALSE; } void diff --git a/mixlib/mix_predicate_list.h b/mixlib/mix_predicate_list.h index 416f3db..3d22028 100644 --- a/mixlib/mix_predicate_list.h +++ b/mixlib/mix_predicate_list.h @@ -50,7 +50,7 @@ mix_predicate_list_last_true_eval (const mix_predicate_list_t *list); extern void mix_predicate_list_add (mix_predicate_list_t *list, mix_predicate_t *predicate); -extern void +extern gboolean mix_predicate_list_remove (mix_predicate_list_t *list, mix_predicate_t *predicate); diff --git a/mixlib/mix_vm.c b/mixlib/mix_vm.c index 8929527..0e9f61b 100644 --- a/mixlib/mix_vm.c +++ b/mixlib/mix_vm.c @@ -601,22 +601,21 @@ mix_vm_clear_all_breakpoints (mix_vm_t *vm) } -gint +gboolean mix_vm_set_conditional_breakpoint (mix_vm_t *vm, mix_predicate_t *pred) { - g_return_val_if_fail (vm != NULL, MIX_VM_BP_ERROR); - g_return_val_if_fail (pred != NULL, MIX_VM_BP_ERROR); + g_return_val_if_fail (vm != NULL, FALSE); + g_return_val_if_fail (pred != NULL, FALSE); mix_predicate_list_add (get_pred_list_ (vm), pred); - return MIX_VM_BP_OK; + return TRUE; } -gint +gboolean mix_vm_clear_conditional_breakpoint (mix_vm_t *vm, mix_predicate_t *pred) { - g_return_val_if_fail (vm != NULL, MIX_VM_BP_ERROR); - g_return_val_if_fail (pred != NULL, MIX_VM_BP_ERROR); - mix_predicate_list_remove (get_pred_list_ (vm), pred); - return MIX_VM_BP_OK; + g_return_val_if_fail (vm != NULL, FALSE); + g_return_val_if_fail (pred != NULL, FALSE); + return mix_predicate_list_remove (get_pred_list_ (vm), pred); } const gchar * diff --git a/mixlib/mix_vm.h b/mixlib/mix_vm.h index 663062b..d0403cc 100644 --- a/mixlib/mix_vm.h +++ b/mixlib/mix_vm.h @@ -207,10 +207,10 @@ extern void mix_vm_clear_all_breakpoints (mix_vm_t *vm); #include "mix_predicate.h" -extern gint +extern gboolean mix_vm_set_conditional_breakpoint (mix_vm_t *vm, mix_predicate_t *pred); -extern gint +extern gboolean mix_vm_clear_conditional_breakpoint (mix_vm_t *vm, mix_predicate_t *pred); extern const gchar * diff --git a/mixlib/mix_vm_command.c b/mixlib/mix_vm_command.c index 0dc56c5..0a3091a 100644 --- a/mixlib/mix_vm_command.c +++ b/mixlib/mix_vm_command.c @@ -1571,10 +1571,12 @@ cmd_cbpr_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) mix_predicate_type_t pred = get_reg_pred_ (arg); if (pred != INVALID_REG_) { - mix_vm_clear_conditional_breakpoint (dis->vm, dis->preds[pred]); - fprintf (dis->out, - _("Conditional breakpoint on r%s change removed\n"), - arg); + if (mix_vm_clear_conditional_breakpoint (dis->vm, dis->preds[pred])) + fprintf (dis->out, + _("Conditional breakpoint on r%s change removed\n"), + arg); + else + fprintf (dis->err, _("No breakpoint set on r%s change\n"), arg); return TRUE; } else @@ -1643,7 +1645,7 @@ cmd_sbpo_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) { mix_vm_set_conditional_breakpoint (dis->vm, dis->preds[MIX_PRED_OVER]); fprintf (dis->out, - _("Conditional breakpoint on overflow toggled set.\n")); + _("Conditional breakpoint on overflow toggled set\n")); } return TRUE; } @@ -1655,9 +1657,12 @@ cmd_cbpo_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) fprintf (dis->err, _("Unexpected argument: %s\n"), arg); else { - mix_vm_clear_conditional_breakpoint (dis->vm, dis->preds[MIX_PRED_OVER]); - fprintf (dis->out, - _("Conditional breakpoint on overflow toggled removed.\n")); + if (mix_vm_clear_conditional_breakpoint + (dis->vm, dis->preds[MIX_PRED_OVER])) + fprintf (dis->out, + _("Conditional breakpoint on overflow toggled removed.\n")); + else + fprintf (dis->err, _("No breakpoint set on overflow toggle\n")); } return TRUE; } @@ -1683,9 +1688,13 @@ cmd_cbpc_ (mix_vm_cmd_dispatcher_t *dis, const gchar *arg) fprintf (dis->err, _("Unexpected argument: %s\n"), arg); else { - mix_vm_clear_conditional_breakpoint (dis->vm, dis->preds[MIX_PRED_CMP]); - fprintf (dis->out, - _("Conditional breakpoint on comparison flag changed removed.\n")); + if (mix_vm_clear_conditional_breakpoint + (dis->vm, dis->preds[MIX_PRED_CMP])) + fprintf + (dis->out, + _("Conditional breakpoint on comparison flag changed removed.\n")); + else + fprintf (dis->err, _("No breakpoint set on comparison flag change\n")); } return TRUE; } |