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

📄 menu_memory.c

📁 linux上实现的多种型号的AVR模拟器
💻 C
📖 第 1 页 / 共 5 页
字号:
      if(type_sram_window==HEX)	sprintf(buf,"%X",sram_pointer[n+address_sram]);      else sprintf(buf,"%u",sram_pointer[n+address_sram]);      XtVaSetValues(field_sram[n],XmNvalue,buf,NULL);      delete_tip(field_sram[n],sram_tip_str[n]);      xs_widget_tip(field_sram[n],		    conv_to_bin((int)sram_pointer[n+address_sram],				sram_tip_str[n]));    }}void get_focus_field_sram_callback (Widget w,XtPointer client_data,				    XtPointer call_data){  XtVaSetValues(w,XmNcursorPositionVisible,True,NULL);  XtAddCallback(w,XmNvalueChangedCallback,		(XtCallbackProc)field_sram_changed_callback,NULL);}void lose_focus_field_sram_callback (Widget w,XtPointer client_data,			       XtPointer call_data){  XtVaSetValues(w,XmNcursorPositionVisible,False,NULL);  XtRemoveCallback(w,XmNvalueChangedCallback,(XtCallbackProc)		   field_sram_changed_callback,NULL);}void field_sram_changed_callback(Widget w,XtPointer client_data,				 XtPointer call_data){  char *buf,buf2[7];  int n;    buf=XmTextFieldGetString(w);  n=0;  while(n<nlines_sram*16&&w!=field_sram[n]) n++;  if(type_sram_window==DEC)    sram_pointer[n+address_sram]=strtoul(buf,NULL,10);  else    {      sprintf(buf2,"0x%s",buf);      sram_pointer[n+address_sram]=strtoul(buf2,NULL,16);      delete_tip(field_sram[n],sram_tip_str[n]);      xs_widget_tip(field_sram[n],		    conv_to_bin((int)sram_pointer[n+address_sram],				sram_tip_str[n]));    }  XtFree(buf);}void switch_button_sram(Widget w,XtPointer client_data,XtPointer call_data){  XmString string;  int n;  if(type_sram_window==HEX)     {      type_sram_window=DEC;      string=XmStringGenerate(_("   Hex   "),XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(w,XmNlabelString,string,NULL);      XmStringFree(string);      for(n=0;n<nlines_sram*16;n++)	XtVaSetValues(field_sram[n],XmNmaxLength,3,NULL);    }  else    {      type_sram_window=HEX;      string=XmStringGenerate(_(" Decimal "),XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(w,XmNlabelString,string,NULL);      XmStringFree(string);      for(n=0;n<nlines_sram*16;n++)	XtVaSetValues(field_sram[n],XmNmaxLength,2,NULL);    }  full_update_sram_window();}void close_button_sram(Widget w,XtPointer client_data,XtPointer call_data){  XtVaSetValues(menu[MEMORY_MENU].sub_menu[SRAM_BUTTON].button,XmNset,		XmUNSET,NULL);  XtUnmanageChild(sram_window);  return;}void set_size_sram_window(Widget w,XtPointer client_data,XtPointer call_data){  Dimension width,height,height_label;  XtRemoveCallback(w,XmNpopupCallback,(XtCallbackProc)set_size_sram_window,		   NULL);  XtVaGetValues(w,XmNwidth,&width,XmNheight,&height,NULL);  XtVaGetValues(label_sram[0],XmNheight,&height_label,NULL);  sram_window_step=height_label+2;  height_min_sram_window=height-nlines_sram*sram_window_step;  XtVaSetValues(w,XmNmaxWidth,width,XmNminWidth,width,XmNminHeight,		height+(4-nlines_sram)*sram_window_step,		XmNheightInc,sram_window_step,XmNmaxHeight,		height_min_sram_window+MAX_SRAM_LINES*sram_window_step,NULL);}/* I/O window */void create_io_ports_window(void){  Widget scroll,temp,shell,frame,io_form,*widgetlist;  XmString string;  int n,num_ports,n_wid;  address_io_old=address_io;  for(n=0;controllers[type_micro].io_registers[n].code!=-1;n++);  num_ports=n;  shell=XtVaCreateWidget("IO_WINDOW",xmDialogShellWidgetClass,toplevel,			 XmNtitle,_("I/O Registers"),			 XmNkeyboardFocusPolicy,XmPOINTER,NULL);  io_window=XtVaCreateWidget("form",xmFormWidgetClass,shell,			     XmNautoUnmanage,False,			     XmNdialogStyle,XmDIALOG_MODELESS,			     XmNfractionBase,3,NULL);  frame=XtVaCreateManagedWidget("frame",xmFrameWidgetClass,io_window,				XmNtopAttachment,XmATTACH_FORM,				XmNtopOffset,5,				XmNleftAttachment,XmATTACH_FORM,				XmNleftOffset,5,				XmNrightAttachment,XmATTACH_FORM,				XmNrightOffset,5,NULL);  io_form=XtVaCreateManagedWidget("form",xmFormWidgetClass,frame,NULL);    string=XmStringGenerate(_("Name  Addr  Bit values   Hex"),			  XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  temp=XtVaCreateManagedWidget("label",xmLabelGadgetClass,io_form,			       XmNlabelString,string,XmNtopOffset,5,			       XmNleftAttachment,XmATTACH_FORM,			       XmNleftOffset,5,NULL);  XmStringFree(string);    temp=XtVaCreateManagedWidget("separator",xmSeparatorGadgetClass,io_form,			       XmNtopAttachment,XmATTACH_WIDGET,			       XmNtopWidget,temp,			       XmNleftAttachment,XmATTACH_FORM,			       XmNrightAttachment,XmATTACH_FORM,NULL);  /* create scroll window */  scroll=XtVaCreateManagedWidget("Scroll",xmScrolledWindowWidgetClass,				 io_form,				 XmNscrollingPolicy,XmAPPLICATION_DEFINED,				 XmNscrollBarDisplayPolicy,XmSTATIC,				 XmNvisualPolicy,XmVARIABLE,				 XmNleftAttachment,XmATTACH_FORM,				 XmNleftOffset,3,				 XmNrightAttachment,XmATTACH_FORM,				 XmNrightOffset,2,				 XmNtopAttachment,XmATTACH_WIDGET,				 XmNtopWidget,temp,				 XmNtopOffset,2,				 XmNbottomAttachment,XmATTACH_FORM,				 NULL);    dataform_io=XtVaCreateManagedWidget("form area",xmFormWidgetClass,scroll,				      NULL);    vscr_io_bar=XtVaCreateManagedWidget("scr_bar",xmScrollBarWidgetClass,				      scroll,XmNorientation,XmVERTICAL,				      XmNincrement,1,XmNminimum,0,				      XmNvalue,0,				      XmNmaximum,num_ports,				      XmNsliderSize,nlines_io,				      NULL);  XtAddCallback(vscr_io_bar,XmNvalueChangedCallback,		(XtCallbackProc)scroll_bar_io_callback,NULL);  XtAddCallback(vscr_io_bar,XmNdragCallback,		(XtCallbackProc)scroll_bar_io_callback,NULL);  XmScrolledWindowSetAreas(scroll,NULL,vscr_io_bar,dataform_io);   /* allocate memory for labels and bit buttons */  if(nlines_io>num_ports) nlines_io=num_ports;  if((label_io=malloc(MAX_IO_PORT_LINES*sizeof(Widget)))==NULL)    {      puts("create_io_ports_window(): can't allocate memory for 'label_io'");      exit(1);    }  memset(label_io,0,MAX_IO_PORT_LINES*sizeof(Widget));  if((bit_button=malloc(MAX_IO_PORT_LINES*sizeof(Widget *)))==NULL)    {      puts("create_io_ports_window(): \can't allocate memory for 'bit_button'");      exit(1);    }  for(n=0;n<MAX_IO_PORT_LINES;n++)    if((bit_button[n]=malloc(8*sizeof(Widget)))==NULL)      {      printf("create_io_ports_window(): \can't allocate memory for 'bit_button[%d]'",n);      exit(1);      }  if((label_io_val=malloc(MAX_IO_PORT_LINES*sizeof(Widget)))==NULL)    {      puts("create_io_ports_window(): \can't allocate memory for 'label_io_val'");      exit(1);    }  if((label_io_addr=malloc(MAX_IO_PORT_LINES*sizeof(Widget)))==NULL)    {      puts("create_io_ports_window(): \can't allocate memory for 'label_io_addr'");      exit(1);    }  /* create name labels of ports and bit buttons */  if((widgetlist=malloc(nlines_io*11*sizeof(Widget)))==NULL)    {      puts("create_io_ports_window(): \can't allocate memory for 'widgetlist'");      exit(1);    }  n_wid=0;  for(n=0;n<nlines_io;n++) create_io_ports_line(n,widgetlist,&n_wid);  XtManageChildren(widgetlist,n_wid);  free(widgetlist);  string=XmStringGenerate(_("Close"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  temp=XtVaCreateManagedWidget("Close",xmPushButtonGadgetClass,			       io_window,			       XmNrightAttachment,XmATTACH_POSITION,			       XmNrightPosition,2,XmNlabelString,string,			       XmNleftAttachment,XmATTACH_POSITION,			       XmNleftPosition,1,			       XmNbottomAttachment,XmATTACH_FORM,			       XmNbottomOffset,6,NULL);    XtAddCallback(temp,		XmNactivateCallback,(XtCallbackProc)close_button_io,NULL);  XmStringFree(string);  XtVaSetValues(frame,XmNbottomAttachment,XmATTACH_WIDGET,		XmNbottomWidget,temp,XmNbottomOffset,6,NULL);  XtAddCallback(shell,XmNpopupCallback,(XtCallbackProc)set_size_io_window,		NULL);  XtAddEventHandler(shell,StructureNotifyMask,False,resize_io,NULL);}void create_io_ports_line(int n,Widget *widgetlist,int *num_wid){  int i,n_wid,n_args;  char buf[10];  XmString string;  Arg args[10];    n_args=0;n_wid=*num_wid;  /* create name labels */  string=XmStringGenerate(descr_io_ports[controllers[type_micro].io_registers[n].code].name,			  XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);    XtSetArg(args[n_args],XmNlabelString,string);n_args++;  XtSetArg(args[n_args],XmNtopOffset,2);n_args++;  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_FORM);n_args++;    if(n==0)     { XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_FORM);n_args++;}  else    {      XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_WIDGET);n_args++;      XtSetArg(args[n_args],XmNtopWidget,label_io[n-1]);n_args++;    }    widgetlist[n_wid++]=    label_io[n]=XtCreateWidget("label",xmLabelWidgetClass,			       dataform_io,args,n_args);  XmStringFree(string);  xs_widget_tip(label_io[n],descr_io_ports[controllers[type_micro].io_registers[n+address_io].code].fullname);    /* create address labels */  sprintf(buf,"%Xh",controllers[type_micro].io_registers[n].address);  fill_zero(buf,3);  string=XmStringGenerate(buf,			  XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  n_args=0;  XtSetArg(args[n_args],XmNlabelString,string);n_args++;  XtSetArg(args[n_args],XmNtopOffset,2);n_args++;  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_WIDGET);n_args++;  XtSetArg(args[n_args],XmNleftWidget,label_io[n]);n_args++;  if(n==0)    {      XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_FORM);n_args++;    }  else    {      XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_WIDGET);n_args++;      XtSetArg(args[n_args],XmNtopWidget,label_io_addr[n-1]);n_args++;      /*  if(n==nlines_io) *//*  	{ *//*  	  XtVaSetValues(label_io[n],XmNbottomAttachment,XmATTACH_FORM, *//*  			NULL); *//*  	  XtVaSetValues(label_io_addr[n],XmNbottomAttachment,XmATTACH_FORM, *//*  			NULL); *//*  	} */    }  widgetlist[n_wid++]=    label_io_addr[n]=XtCreateWidget("label",xmLabelGadgetClass,dataform_io,				    args,n_args);  XmStringFree(string);    /* create bit button */  n_args=0;  XtSetArg(args[n_args],XmNtopOffset,0);n_args++;  XtSetArg(args[n_args],XmNhighlightOnEnter,True);n_args++;  XtSetArg(args[n_args],XmNshadowThickness,0);n_args++;  for(i=0;i<8;i++)    {      n_args=4;      if(i==0)	{	  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_WIDGET);n_args++;	  XtSetArg(args[n_args],XmNleftWidget,label_io_addr[n]);n_args++;	  XtSetArg(args[n_args],XmNleftOffset,5);n_args++;	}      else	{	  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_WIDGET);n_args++;	  XtSetArg(args[n_args],XmNleftWidget,bit_button[n][i-1]);n_args++;	}      if(n==0)	{XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_FORM);n_args++;}      else	{	  XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_WIDGET);n_args++;	  XtSetArg(args[n_args],XmNtopWidget,bit_button[n-1][i]);n_args++;	}      widgetlist[n_wid++]=	bit_button[n][i]=XtCreateWidget("0",xmPushButtonGadgetClass,					  dataform_io,args,n_args);            if(!((controllers[type_micro].io_registers[n].read_mask|	    controllers[type_micro].io_registers[n].write_mask)	   &(1<<(7-i))))	XtSetSensitive(bit_button[n][i],False);            XtAddCallback(bit_button[n][i],		    XmNactivateCallback,		    (XtCallbackProc)bit_button_callback,NULL);    }  /* create labels of values */  string=XmStringGenerate("00h",XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  n_args=0;  XtSetArg(args[n_args],XmNlabelString,string);n_args++;  XtSetArg(args[n_args],XmNtopOffset,2);n_args++;  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_WIDGET);n_args++;  XtSetArg(args[n_args],XmNleftWidget,bit_button[n][7]);n_args++;  XtSetArg(args[n_args],XmNleftOffset,10);n_args++;   if(n==0)    {      XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_FORM);n_args++;      XtSetArg(args[n_args],XmNtopOffset,1);n_args++;    }  else    {      XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_WIDGET);n_args++;      XtSetArg(args[n_args],XmNtopWidget,label_io_val[n-1]);n_args++;    }  if(n==nlines_io)    {XtSetArg(args[n_args],XmNbottomAttachment,XmATTACH_FORM);n_args++;}    widgetlist[n_wid++]=    label_io_val[n]=XtCreateWidget("label",xmLabelGadgetClass,dataform_io,				   args,n_args);  XmStringFree(string);    *num_wid=n_wid;}void resize_io(Widget w,char *m,XConfigureEvent *event,	       Boolean *continueDispatch){  int old,num_ports,n,n_wid;  Widget *widgetlist;    if(event->type==ConfigureNotify)    if(event->height!=height_min_io_window+nlines_io*io_window_step)      {	for(n=0;controllers[type_micro].io_registers[n].code!=-1;n++);	num_ports=n;	old=nlines_io;	nlines_io=(event->height-height_min_io_window)/io_window_step;		if(nlines_io>num_ports)	  {	    nlines_io=num_ports;	    if(nlines_io==old) return;	  }		if(nlines_io>old)	  { /* increase io_lines */	    if((widgetlist=malloc(nlines_io*11*sizeof(Widget)))==NULL)	      {		puts("resize_io(): can't allocate memory for 'widgetlist'");

⌨️ 快捷键说明

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