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

📄 xspim.c

📁 用汇编语言编程源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef __STDC__voidpopup_console (Widget w, XtPointer client_data, XtPointer call_data)#elsevoidpopup_console (w, client_data, call_data)     Widget w;     XtPointer client_data, call_data;#endif{  if (console_is_visible)    {      console_is_visible = 0;      XtPopdown (shell1);    }  else    {      console_is_visible = 1;      XtPopup (shell1, XtGrabNone);    }}#ifdef __STDC__voidread_file (char *name, int assembly_file)#elsevoidread_file (name, assembly_file)     char *name;     int assembly_file;#endif{  int error_flag;  if (*name == '\0')    error_flag = 1;  else if (assembly_file)    error_flag = read_assembly_file (name);  if (!error_flag)    {      PC = find_symbol_address (DEFAULT_RUN_LOCATION);      redisplay_text ();      center_text_at_PC ();      redisplay_data ();    }}#ifdef __STDC__voidstart_program (mem_addr addr)#elsevoidstart_program (addr)     mem_addr addr;#endif{  if (addr == 0)    addr = starting_address ();  if (addr != 0)    execute_program (addr, DEFAULT_RUN_STEPS, 0, 0);}#ifdef __STDC__voidexecute_program (mem_addr pc, int steps, int display, int cont_bkpt)#elsevoidexecute_program (pc, steps, display, cont_bkpt)     mem_addr pc;     int steps, display, cont_bkpt;#endif{  if (!setjmp (spim_top_level_env))    {      char *undefs = undefined_symbol_string ();      if (undefs != NULL)	{	  write_output (message_out, "The following symbols are undefined:\n");	  write_output (message_out, undefs);	  write_output (message_out, "\n");	  free (undefs);	}      spim_is_running = 1;      show_running ();      if (run_program (pc, steps, display, cont_bkpt))	continue_prompt (0);    }  redisplay_text ();  spim_is_running = 0;  center_text_at_PC ();  redisplay_data ();}#ifdef __STDC__static voidshow_running (void)#elsestatic voidshow_running ()#endif{  Arg args[1];  XtSetArg (args[0], XtNstring, "Running.....");  XtSetValues (register_window, args, ONE);}/* Redisplay the contents of the registers and, if modified, the data   and stack segments. */#ifdef __STDC__voidredisplay_data (void)#elsevoidredisplay_data ()#endif{  display_registers ();  display_data_seg ();}/* Redisplay the contents of the registers in a wide variety of   formats. */#ifdef __STDC__static voiddisplay_registers (void)#elsestatic voiddisplay_registers ()#endif{  static char buf[8 * K];  int max_buf_len = 8 * K;  int string_len = 0;  Arg args [2];  registers_as_string (buf, &max_buf_len, &string_len, print_gpr_hex, print_fpr_hex);  XtSetArg (args[0], XtNstring, (String)buf);  XtSetArg (args[1], XtNlength, string_len);  XtSetValues (register_window, args, TWO);}/* Redisplay the text segment and ktext segments if they have changed. */#ifdef __STDC__voidredisplay_text (void)#elsevoidredisplay_text ()#endif{  static String buf = NULL;  static int max_buf_len = 16 * K;  int string_len = 0;  Arg args [2];  if (!text_modified)    return;  if (buf == NULL)    buf = (String) malloc (max_buf_len);  *buf = '\0';  buf = insts_as_string (TEXT_BOT, text_top, buf, &max_buf_len, &string_len);  sprintf (&buf[string_len], "\n\tKERNEL\n");  string_len += strlen (&buf[string_len]);  buf = insts_as_string (K_TEXT_BOT, k_text_top, buf, &max_buf_len, &string_len);  XtSetArg (args[0], XtNstring, buf);  XtSetArg (args[1], XtNlength, string_len);  XtSetValues (text_window, args, TWO);  text_modified = 0;}/* Center the text window at the instruction at the current PC and   highlight the instruction. */#ifdef __STDC__static voidcenter_text_at_PC (void)#elsestatic voidcenter_text_at_PC ()#endif{  char buf[100];  XawTextBlock text;  XawTextPosition start, finish;  static mem_addr prev_PC = 0;  XawTextUnsetSelection(text_window);  if (PC < TEXT_BOT || (PC > text_top && (PC < K_TEXT_BOT || PC > k_text_top)))    return;  sprintf (buf, "\n[0x%08x]", PC);  text.firstPos = 0;  text.length = strlen (buf);  text.ptr = buf;  text.format = FMT8BIT;  /* Find start of line at PC: */  start = XawTextSearch (text_window, prev_PC <= PC ? XawsdRight : XawsdLeft,			 &text);  if (start == XawTextSearchError)    {      start = XawTextSearch (text_window,			     prev_PC > PC ? XawsdRight : XawsdLeft,			     &text);    }  if (start == XawTextSearchError)    {      if (PC != 0x00400000) return;      XawTextSetInsertionPoint (text_window, 0);    }  else    XawTextSetInsertionPoint (text_window, start + 1);  /* Find end of the line: */  text.length = 1;  finish = XawTextSearch (text_window, XawsdRight, &text);  if (finish == XawTextSearchError)    return;  /* Highlight the line: */  XawTextSetSelection(text_window, start + 1, finish);  prev_PC = PC;}/* Display the contents of the data and stack segments, if they have   been modified. */#ifdef __STDC__static voiddisplay_data_seg (void)#elsestatic voiddisplay_data_seg ()#endif{  static String buf = NULL;  static int max_buf_len = 16 * K;  int string_len = 0;  Arg args [2];  if (!data_modified)    return;  if (buf == NULL)    buf = (char *) malloc (max_buf_len);  buf = data_seg_as_string(buf, &max_buf_len, &string_len);  XtSetArg (args[0], XtNstring, buf);  XtSetArg (args[1], XtNlength, string_len);  XtSetValues (data_window, args, TWO);  data_modified = 0;}/* IO facilities: */#ifdef __STDC__voidwrite_output (port fp, char *fmt, ...)#else/*VARARGS0*/voidwrite_output (va_alist)va_dcl#endif{  va_list args;  Widget w;#ifndef __STDC__  char *fmt;  port fp;#endif  char io_buffer [IO_BUFFSIZE];#ifdef __STDC__  va_start (args, fmt);#else  va_start (args);  fp = va_arg (args, port);  fmt = va_arg (args, char *);#endif  w = (Widget) fp.f;  if (w == console && !console_is_visible)    {      XtPopup (shell1, XtGrabNone);      console_is_visible = 1;    }  vsprintf (io_buffer, fmt, args);  va_end (args);  write_text_to_window (w, io_buffer);  /* Look for keyboard input (such as ^C) */  while (XtAppPending (app_context))    {      XEvent event;      XtAppNextEvent (app_context, &event);      XtDispatchEvent (&event);    }}/* Simulate the semantics of fgets, not gets, on an x-window. */#ifdef __STDC__voidread_input (char *str, int str_size)#elsevoidread_input (str, str_size)     char *str;     int str_size;#endif{  char buffer[11];  KeySym key;  XComposeStatus compose;  XEvent event;  char *ptr;  if (!console_is_visible)    {      XtPopup (shell1, XtGrabNone);      console_is_visible = 1;    }  ptr = str;  while (1 < str_size)		/* Reserve space for null */    {      XtAppNextEvent (app_context, &event);      if (event.type == KeyPress)	{	  int chars = XLookupString (&event.xkey, buffer, 10, &key, &compose);	  if ((key == XK_Return) || (key == XK_KP_Enter))	    {	      *ptr++ = '\n';	      write_text_to_window (console, "\n");	      break;	    }	  else if (*buffer == 3) /* ^C */	    XtDispatchEvent (&event);	  else	    {	      int n = (chars < str_size - 1 ? chars : str_size - 1);	      strncpy (ptr, buffer, n);	      ptr += n;	      str_size -= n;	      buffer[chars] = '\0';	      write_text_to_window (console, buffer);	    }	}      else	XtDispatchEvent (&event);    }  if (0 < str_size)    *ptr = '\0';}#ifdef __STDC__intconsole_input_available (void)#elseintconsole_input_available ()#endif{  if (mapped_io)    return (XtAppPending (app_context));  else    return (0);}#ifdef __STDC__charget_console_char (void)#elsecharget_console_char ()#endif{  XEvent event;  if (!console_is_visible)    {      XtPopup (shell1, XtGrabNone);      console_is_visible = 1;    }  while (1)    {      XtAppNextEvent (app_context, &event);      if (event.type == KeyPress)	{	  char buffer[11];	  KeySym key;	  XComposeStatus compose;	  XLookupString (&event.xkey, buffer, 10, &key, &compose);	  if (*buffer == 3)		       /* ^C */	    XtDispatchEvent (&event);	  else if (*buffer != 0)	    return (buffer[0]);	}      else	XtDispatchEvent (&event);    }}#ifdef __STDC__voidput_console_char (char c)#elsevoidput_console_char (c)     char c;#endif{  char buf[4];  buf[0] = c;  buf[1] = '\0';  if (!console_is_visible)    {      XtPopup (shell1, XtGrabNone);      console_is_visible = 1;    }  write_text_to_window (console, buf);}/* Print an error message. */#ifdef __STDC__voiderror (char *fmt, ...)#else/*VARARGS0*/voiderror (va_alist)va_dcl#endif{  va_list args;#ifndef __STDC__  char *fmt;#endif  char io_buffer [IO_BUFFSIZE];#ifdef __STDC__  va_start (args, fmt);#else  va_start (args);  fmt = va_arg (args, char *);#endif  vsprintf (io_buffer, fmt, args);  va_end (args);  if (message != 0)    write_text_to_window (message, io_buffer);  else    fprintf (stderr, "%s", io_buffer);}#ifdef __STDC__int*run_error (char *fmt, ...)#else/*VARARGS0*/int*run_error (va_alist)va_dcl#endif{  va_list args;#ifndef __STDC__  char *fmt;#endif  char io_buffer [IO_BUFFSIZE];#ifdef __STDC__  va_start (args, fmt);#else  va_start (args);  fmt = va_arg (args, char *);#endif  vsprintf (io_buffer, fmt, args);  va_end (args);  if (message != 0)    write_text_to_window (message, io_buffer);  else    fprintf (stderr, "%s", io_buffer);  if (spim_is_running)    longjmp (spim_top_level_env, 1);  return (0);			/* So it can be used in expressions */}#ifdef __STDC__static voidwrite_text_to_window (Widget w, char *s)#elsestatic voidwrite_text_to_window (w, s)     Widget w;     char *s;#endif{  XawTextBlock textblock;  XawTextPosition ip = XawTextGetInsertionPoint (w);  if (!s || strlen (s) == 0) return;  textblock.firstPos = 0;  textblock.length = strlen (s);  textblock.ptr = s;  textblock.format = FMT8BIT;  XawTextReplace (w, ip, ip, &textblock);  XawTextSetInsertionPoint (w,			    XawTextGetInsertionPoint (w) + textblock.length);}

⌨️ 快捷键说明

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