diff options
Diffstat (limited to 'mixutils')
| -rw-r--r-- | mixutils/mixvm_command.c | 48 | 
1 files changed, 42 insertions, 6 deletions
| diff --git a/mixutils/mixvm_command.c b/mixutils/mixvm_command.c index 19eddf0..4014ede 100644 --- a/mixutils/mixvm_command.c +++ b/mixutils/mixvm_command.c @@ -53,6 +53,7 @@ DEC_FUN (sreg_);  DEC_FUN (scmp_);  DEC_FUN (sover_);  DEC_FUN (smem_); +DEC_FUN (ssym_);  DEC_FUN (sbp_);  DEC_FUN (sbpa_);  DEC_FUN (cbp_); @@ -96,6 +97,8 @@ COMMAND commands[] = {    { "sover", cmd_sover_, N_("Set overflow flag value"), "sover T | F" },    { "smem", cmd_smem_, N_("Set memory contents in given address"),       "smem ADDRESS VALUE" }, +  { "ssym", cmd_ssym_, N_("Set the value of an existing of newly defined symbol"), +    "ssym SYMBOL WEXPR" },    { "sbp", cmd_sbp_, N_("Set break point at given line"), "sbp LINENO" },    { "cbp", cmd_cbp_, N_("Clear break point at given line"), "cbp LINENO" },    { "sbpa", cmd_sbpa_, N_("Set break point at given address"), @@ -236,8 +239,13 @@ cmd_load_ (char *arg)  {    errno = 0;    if (arg == NULL || *arg == '\0') -    fputs (_("Missing file name\n"), stderr); -  else if (!mix_vm_load_file (vm_, arg) ) +    { +      fputs (_("Missing file name\n"), stderr); +      return TRUE; +    } +  mix_eval_remove_symbols_from_table (eval_, +				      mix_vm_get_symbol_table (vm_)); +  if (!mix_vm_load_file (vm_, arg) )      {        fprintf (stderr, _("Cannot load %s: "), arg);        if ( errno == 0 ) @@ -246,9 +254,8 @@ cmd_load_ (char *arg)  	perror (NULL);        return TRUE + 1;      } -  mix_eval_use_symbol_table (eval_, -			     (mix_symbol_table_t *) -			     mix_vm_get_symbol_table (vm_)); +  mix_eval_set_symbols_from_table (eval_, +				   mix_vm_get_symbol_table (vm_));    fprintf (stderr, _("Program loaded. Start address: %d\n"),  	   mix_vm_get_prog_count (vm_)); @@ -344,7 +351,7 @@ cmd_pc_ (char *arg)  static int  cmd_psym_ (char *arg)  { -  const mix_symbol_table_t *table = mix_vm_get_symbol_table (vm_); +  const mix_symbol_table_t *table = mix_eval_symbol_table (eval_);    if ( table == NULL )      fputs (_("Symbol table not available\n"), stderr);    else if (arg != NULL && *arg != '\0') @@ -627,6 +634,35 @@ cmd_smem_ (char *arg)  }  static int +cmd_ssym_ (char *arg) +{ +  if (arg == NULL || strlen(arg) == 0) +    { +      fprintf (stderr, _("Missing arguments\n")); +      return cmd_help_ ("ssym"); +    } +  else +    { +      gchar *a = g_strdup (arg); +      gchar *s = strtok (a, " \t"); +      gchar *w = strtok (NULL, " \t"); +      if (w != NULL && strtok (NULL, " \t") == NULL) +	{ +	  cmd_weval_ (w); +	  if (mix_eval_last_error (eval_) == MIX_EVAL_OK) +	    mix_eval_set_symbol (eval_, s, mix_eval_value (eval_)); +	} +      else +	{ +	  fprintf (stderr, _("Wrong argument number\n")); +	  cmd_help_ ("ssym"); +	} +      g_free (a); +      return TRUE; +    } +} + +static int  cmd_sbp_ (char *arg)  {    glong lineno; | 
