⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mix_vm_command.c

📁 汇编语言编程源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  g_return_if_fail (dis != NULL);  if (dis->editor) g_free (dis->editor);  dis->editor = (edit_tplt) ? g_strdup (edit_tplt) : NULL;  if (dis->config && dis->editor)    mix_config_update (dis->config, EDITOR_KEY_, dis->editor);}voidmix_vm_cmd_dispatcher_set_assembler (mix_vm_cmd_dispatcher_t *dis,				     const gchar *asm_tplt){  g_return_if_fail (dis != NULL);  if (dis->assembler) g_free (dis->assembler);  dis->assembler = (asm_tplt) ? g_strdup (asm_tplt) : NULL;  if (dis->config && dis->assembler)    mix_config_update (dis->config, ASM_KEY_, dis->assembler);}const gchar *mix_vm_cmd_dispatcher_get_editor (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, NULL);  return dis->editor;}const gchar *mix_vm_cmd_dispatcher_get_assembler (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, NULL);  return dis->assembler;}const gchar *mix_vm_cmd_dispatcher_get_src_file_path (const mix_vm_cmd_dispatcher_t *dis){  static gchar *PATH = NULL;    const mix_vm_t *vm = mix_vm_cmd_dispatcher_get_vm (dis);  const mix_src_file_t *f  = mix_vm_get_src_file (vm);    if (PATH)    {      g_free (PATH);      PATH = NULL;    }  if (f)    PATH = mix_file_complete_name (mix_src_file_get_path (f), MIX_SRC_DEFEXT);        return PATH;}const gchar *mix_vm_cmd_dispatcher_get_program_path (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, NULL);  return dis->program;}/* install hooks */voidmix_vm_cmd_dispatcher_pre_hook (mix_vm_cmd_dispatcher_t *dis,				mix_vm_command_t cmd,				mix_vm_cmd_hook_t hook, gpointer data){  hook_ *phook;    g_return_if_fail (dis != NULL);  g_return_if_fail (cmd < MIX_CMD_INVALID);  phook = g_new (hook_, 1);  phook->func = hook;  phook->data = data;    dis->pre_hooks[cmd] = g_slist_append (dis->pre_hooks[cmd], phook);}voidmix_vm_cmd_dispatcher_post_hook (mix_vm_cmd_dispatcher_t *dis,				 mix_vm_command_t cmd,				 mix_vm_cmd_hook_t hook, gpointer data){  hook_ *phook;    g_return_if_fail (dis != NULL);  g_return_if_fail (cmd < MIX_CMD_INVALID);  phook = g_new (hook_, 1);  phook->func = hook;  phook->data = data;    dis->post_hooks[cmd] = g_slist_append (dis->post_hooks[cmd], phook);}voidmix_vm_cmd_dispatcher_global_pre_hook (mix_vm_cmd_dispatcher_t *dis,				       mix_vm_cmd_global_hook_t hook,				       gpointer data){  global_hook_ *phook;    g_return_if_fail (dis != NULL);  phook = g_new (global_hook_, 1);  phook->func = hook;  phook->data = data;    dis->global_pre = g_slist_append (dis->global_pre, phook);}voidmix_vm_cmd_dispatcher_global_post_hook (mix_vm_cmd_dispatcher_t *dis,					mix_vm_cmd_global_hook_t hook,					gpointer data){  global_hook_ *phook;    g_return_if_fail (dis != NULL);  phook = g_new (global_hook_, 1);  phook->func = hook;  phook->data = data;    dis->global_post = g_slist_append (dis->global_post, phook);}/* dispatch a command */gboolean /* TRUE if success, FALSE otherwise */mix_vm_cmd_dispatcher_dispatch (mix_vm_cmd_dispatcher_t *dis,				mix_vm_command_t cmd, const gchar *arg){  g_return_val_if_fail (dis != NULL, FALSE);    if (dis->global_pre)    exec_global_hook_list_ (dis->global_pre, dis, cmd, arg);    if (cmd < MIX_CMD_INVALID)    {      if (dis->pre_hooks[cmd])	exec_hook_list_ (dis->pre_hooks[cmd], dis, arg);      fflush (dis->out);      fflush (dis->err);      dis->result = (commands_[cmd].func)(dis, arg);      fflush (dis->out);      fflush (dis->err);      if (dis->post_hooks[cmd])	exec_hook_list_ (dis->post_hooks[cmd], dis, arg);      fflush (dis->out);      fflush (dis->err);    }  else    {      fprintf (dis->err, "Unknown command. Try: help\n");    }  if (dis->global_post)    exec_global_hook_list_ (dis->global_post, dis, cmd, arg);  fflush (dis->out);  fflush (dis->err);  return dis->result;}/* dispatch a command in text format */gbooleanmix_vm_cmd_dispatcher_dispatch_text (mix_vm_cmd_dispatcher_t *dis,				     const gchar *text){  gchar *cp, *arg = "";  int k = 0;    g_return_val_if_fail (dis != NULL, FALSE);  g_return_val_if_fail (text != NULL, FALSE);    cp = g_strdup (text);  while (cp[k] && !isspace (cp[k])) ++k;  if (cp[k])    {      cp[k] = '\0'; ++k;      while (cp[k] && isspace (cp[k])) ++k;      arg = cp + k;    }  (void) mix_vm_cmd_dispatcher_dispatch_split_text (dis, cp, arg);    g_free (cp);  return dis->result;}/* dispatch a command in text format, with command and arg split */gbooleanmix_vm_cmd_dispatcher_dispatch_split_text (mix_vm_cmd_dispatcher_t *dis,					   const gchar *command,					   const gchar *arg){  mix_vm_command_info_t *info;    g_return_val_if_fail (dis, FALSE);    if (!command) return FALSE;  if (!arg) arg = "";    info = (mix_vm_command_info_t *)g_hash_table_lookup (dis->commands, command);  if (info)    {      if (dis->global_pre)	exec_global_hook_list_ (dis->global_pre, dis, MIX_CMD_LOCAL, arg);      fflush (dis->out);      fflush (dis->err);      dis->result = info->func (dis, arg);      fflush (dis->out);      fflush (dis->err);      if (dis->global_post)	exec_global_hook_list_ (dis->global_post, dis, MIX_CMD_LOCAL, arg);      fflush (dis->out);      fflush (dis->err);    }  else    dis->result =      mix_vm_cmd_dispatcher_dispatch (dis,				      mix_vm_command_from_string (command),				      arg);  return dis->result;}/* get the last dispatch's result */gbooleanmix_vm_cmd_dispatcher_get_last_result (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, FALSE);  return dis->result;}/* get total uptime */mix_time_tmix_vm_cmd_dispatcher_get_uptime (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, 0);  return dis->uptime;}/* get program total time */mix_time_tmix_vm_cmd_dispatcher_get_progtime (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, 0);  return dis->progtime;}/* get time lapse */mix_time_tmix_vm_cmd_dispatcher_get_laptime (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, 0);  return dis->laptime;}/* toggle time printing */voidmix_vm_cmd_dispatcher_print_time (mix_vm_cmd_dispatcher_t * dis, gboolean print){  g_return_if_fail (dis != NULL);  dis->printtime = print;}/* get the mix vm */const mix_vm_t *mix_vm_cmd_dispatcher_get_vm (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, NULL);  return dis->vm;}/* src file info */gulongmix_vm_cmd_dispatcher_get_src_file_lineno (const mix_vm_cmd_dispatcher_t *dis){  g_return_val_if_fail (dis != NULL, 0);  return mix_vm_get_break_lineno (dis->vm);}const gchar *mix_vm_cmd_dispatcher_get_src_file_line (const mix_vm_cmd_dispatcher_t *dis,					 gulong line, gboolean cr){  const mix_src_file_t *file;  g_return_val_if_fail (dis != NULL, NULL);    file = mix_vm_get_src_file (dis->vm);    if (line == 0 || file == NULL) return cr? "" : "\n";    if (cr)    return mix_src_file_get_line (file, line);  else    {      enum {BUFF_SIZE = 256};      static gchar BUFFER[BUFF_SIZE];      int len =	snprintf (BUFFER, BUFF_SIZE, "%s", mix_src_file_get_line (file, line));      if (len > 0 && BUFFER[len - 1] == '\n') BUFFER[len - 1] = '\0';      return BUFFER;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -