diff options
| -rw-r--r-- | mixlib/xmix_vm_handlers.c | 13 | 
1 files changed, 11 insertions, 2 deletions
| diff --git a/mixlib/xmix_vm_handlers.c b/mixlib/xmix_vm_handlers.c index 5fcd209..4ebfc77 100644 --- a/mixlib/xmix_vm_handlers.c +++ b/mixlib/xmix_vm_handlers.c @@ -663,6 +663,7 @@ cmd_smem_ (mix_vm_cmd_dispatcher_t *dis, const gchar *carg)    glong value = 0;    int k = 0;    gchar *arg = NULL; +  mix_word_t wval;    if (ok)      { @@ -679,6 +680,12 @@ cmd_smem_ (mix_vm_cmd_dispatcher_t *dis, const gchar *carg)  	{  	  while (isspace (arg[k])) k++;  	  value = atol (arg + k); + +          if ((value == 0) && (arg[k] == '-')) +            wval = MIX_WORD_MINUS_ZERO; +          else +            wval = mix_word_new (value); +  	  if ( arg[k] == '+' || arg[k] == '-' ) k++;  	  while (isdigit (arg[k])) k++;  	  ok = arg[k] == '\0'; @@ -686,12 +693,14 @@ cmd_smem_ (mix_vm_cmd_dispatcher_t *dis, const gchar *carg)      }    if (ok) -    mix_vm_set_addr_contents (dis->vm, mix_short_new (addr), -			      mix_word_new (value)); +    { +      mix_vm_set_addr_contents (dis->vm, mix_short_new (addr), wval); +    }    else      {        log_error_ (dis, _("Invalid argument: %s"), arg);      } +    if (arg) g_free (arg);    return ok; | 
