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

📄 menu_memory.c

📁 linux上实现的多种型号的AVR模拟器
💻 C
📖 第 1 页 / 共 5 页
字号:
		exit(1);	      }	    n_wid=0;	    for(n=old;n<nlines_io;n++)	      {				if(label_io[n]==NULL)		  create_io_ports_line(n,widgetlist,&n_wid);	      }	    if(n_wid) XtManageChildren(widgetlist,n_wid);	    free(widgetlist);	  }		XtVaSetValues(vscr_io_bar,XmNmaximum,num_ports,XmNsliderSize,		      nlines_io,NULL);		if(address_io+nlines_io>num_ports)	  {	    address_io_old=address_io;	    address_io=num_ports-nlines_io;	    XtVaSetValues(vscr_io_bar,XmNvalue,num_ports-nlines_io,NULL);	  }		full_update_io_window();      }}void update_io_window(void){  int i,n,address;  XmString string;  char buf[10];  unsigned char value;      XtVaGetValues(menu[MEMORY_MENU].sub_menu[IO_BUTTON].button,		XmNset,&value,NULL);  if(value!=XmSET) return;    for(n=0;n<nlines_io;n++)    {      address=controllers[type_micro].io_registers[address_io+n].address;         if(mem_file_changed[(controllers[type_micro].size_gpr+address)/8]&	 (1<<(controllers[type_micro].size_gpr+address)%8))	mem_file_changed[(controllers[type_micro].size_gpr+address)/8]&=	  ~(1<<(controllers[type_micro].size_gpr+address)%8);      else	{	  if(address!=0x3F)	    continue;	}            for(i=0;i<8;i++)	{	  if(io_pointer[address]&(1<<(7-i)))	    string=XmStringGenerate("1",XmFONTLIST_DEFAULT_TAG,				    XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);	  else	    string=XmStringGenerate("0",XmFONTLIST_DEFAULT_TAG,				    XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);	  XtVaSetValues(bit_button[n][i],XmNlabelString,string,NULL);	  XmStringFree(string);	}            sprintf(buf,"%X",io_pointer[address]);      fill_zero(buf,2);      buf[2]='h';buf[3]=0;      string=XmStringGenerate(buf,XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(label_io_val[n],XmNlabelString,string,NULL);      XmStringFree(string);    }}void full_update_io_window(void){  int i,n;  XmString string;  char buf[10];  unsigned char value;      XtVaGetValues(menu[MEMORY_MENU].sub_menu[IO_BUTTON].button,		XmNset,&value,NULL);  if(value!=XmSET) return;    /* all update */  memset(&mem_file_changed[controllers[type_micro].size_gpr/8],0,	 controllers[type_micro].size_io_reg/8);  for(n=0;n<nlines_io;n++)    {      string=XmStringGenerate(descr_io_ports[controllers[type_micro].io_registers[n+address_io].code].name,			      XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(label_io[n],XmNlabelString,string,NULL);      XmStringFree(string);            delete_tip(label_io[n],descr_io_ports[controllers[type_micro_old].io_registers[n+address_io_old].code].fullname);      xs_widget_tip(label_io[n],descr_io_ports[controllers[type_micro].io_registers[n+address_io].code].fullname);      sprintf(buf,"%Xh",	      controllers[type_micro].io_registers[n+address_io].address);      fill_zero(buf,3);      string=XmStringGenerate(buf,XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(label_io_addr[n],XmNlabelString,string,NULL);      XmStringFree(string);      for(i=0;i<8;i++)	{	  if((controllers[type_micro].io_registers[address_io+n].read_mask|		controllers[type_micro].io_registers[address_io+n].write_mask)	       &(1<<(7-i)))	    XtSetSensitive(bit_button[n][i],True);	  else 	    XtSetSensitive(bit_button[n][i],False);	  	  if(io_pointer[controllers[type_micro].io_registers[address_io+n].address]&(1<<(7-i)))	    string=XmStringGenerate("1",XmFONTLIST_DEFAULT_TAG,				    XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);	  else	    string=XmStringGenerate("0",XmFONTLIST_DEFAULT_TAG,				    XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);	  XtVaSetValues(bit_button[n][i],XmNlabelString,string,NULL);	  XmStringFree(string);	}            sprintf(buf,"%X",io_pointer[controllers[type_micro].io_registers[address_io+n].address]);      fill_zero(buf,2);      buf[2]='h';buf[3]=0;      string=XmStringGenerate(buf,XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(label_io_val[n],XmNlabelString,string,NULL);      XmStringFree(string);    }  address_io_old=address_io;  type_micro_old=type_micro;}void scroll_bar_io_callback(Widget w,XtPointer client_data,			    XtPointer call_data){  address_io=((XmScrollBarCallbackStruct *)call_data)->value;  full_update_io_window();}void bit_button_callback(Widget w,XtPointer client_data,XtPointer call_data){  int n,m;  char buf[5];  XmString string;  n=m=0;  while(w!=bit_button[n][m])    if(++m==8) {m=0;n++;}  if(io_pointer[controllers[type_micro].io_registers[address_io+n].address]     &(1<<(7-m)))    {      io_pointer[controllers[type_micro].io_registers[address_io+n].address]=	io_pointer[controllers[type_micro].io_registers[address_io+n].address]	&~(1<<(7-m));      string=XmStringGenerate("0",XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(bit_button[n][m],XmNlabelString,string,NULL);      XmStringFree(string);    }  else    {      io_pointer[controllers[type_micro].io_registers[address_io+n].address]=	io_pointer[controllers[type_micro].io_registers[address_io+n].address]	|(1<<(7-m));      string=XmStringGenerate("1",XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);      XtVaSetValues(bit_button[n][m],XmNlabelString,string,NULL);      XmStringFree(string);    }  sprintf(buf,"%X",io_pointer[controllers[type_micro].io_registers[address_io+n].address]);  fill_zero(buf,2);  buf[2]='h';buf[3]=0;  string=XmStringGenerate(buf,XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(label_io_val[n],XmNlabelString,string,NULL);  XmStringFree(string);  if(controllers[type_micro].io_registers[address_io+n].code==SREG)     update_main();}void set_size_io_window(Widget w,XtPointer client_data,XtPointer call_data){  Dimension width,height,height_label;  XtRemoveCallback(w,XmNpopupCallback,(XtCallbackProc)set_size_io_window,		   NULL);  XtVaGetValues(label_io[0],XmNheight,&height_label,NULL);  io_window_step=height_label+2;    XtVaGetValues(w,XmNwidth,&width,XmNheight,&height,NULL);  height_min_io_window=height-nlines_io*io_window_step;  XtVaSetValues(w,XmNmaxWidth,width,XmNminWidth,width,XmNminHeight,		height+(4-nlines_io)*io_window_step,		XmNheightInc,io_window_step,XmNwidth,width,		XmNmaxHeight,		height_min_io_window+MAX_IO_PORT_LINES*io_window_step,NULL);}void close_button_io(Widget w,XtPointer client_data,XtPointer call_data){  XtVaSetValues(menu[MEMORY_MENU].sub_menu[IO_BUTTON].button,XmNset,		XmUNSET,NULL);  XtUnmanageChild(io_window);  return;}/* EEPROM window */void create_eeprom_window(void){  Widget scroll,temp,shell,eeprom_form,frame,*widgetlist;  XmString string;  char buf[6];  int n,address,n_wid,n_args,t;  Arg args[20];  if((field_eeprom=malloc(16*MAX_EEPROM_LINES*sizeof(Widget)))==NULL)    {      puts("create_eeprom_window(): \can't allocate memory for 'field_eeprom'");      exit(1);    }  if((label_eeprom=malloc(MAX_EEPROM_LINES*sizeof(Widget)))==NULL)    {      puts("create_eeprom_window(): \can't allocate memory for 'label_eeprom'");      exit(1);    }  if((eeprom_tip_str=malloc(MAX_EEPROM_LINES*16*sizeof(char *)))==NULL)    {      puts("create_eeprom_window(): \can't allocate memory for 'eeprom_tip_str'");      exit(1);    }    for(n=0;n<MAX_EEPROM_LINES*16;n++)    {      if((eeprom_tip_str[n]=malloc(10*sizeof(char)))==NULL)	{	  printf("create_eeprom_window(): \can't allocate memory for 'eeprom_tip_str[%d]'",n);	  exit(1);	}      eeprom_tip_str[n][0]=0;    }  memset(label_eeprom,0,MAX_EEPROM_LINES*sizeof(Widget));    shell=XtVaCreateWidget("Shell",xmDialogShellWidgetClass,toplevel,			 XmNtitle,"EEPROM",NULL);  eeprom_window=XtVaCreateWidget("form",xmFormWidgetClass,shell,				 XmNautoUnmanage,False,				 XmNdialogStyle,XmDIALOG_MODELESS,				 XmNfractionBase,5,NULL);    frame=XtVaCreateManagedWidget("frame",xmFrameWidgetClass,eeprom_window,				XmNtopAttachment,XmATTACH_FORM,				XmNtopOffset,5,				XmNleftAttachment,XmATTACH_FORM,				XmNleftOffset,5,				XmNrightAttachment,XmATTACH_FORM,				XmNrightOffset,5,NULL);  eeprom_form=XtVaCreateManagedWidget("form",xmFormWidgetClass,frame,NULL);/* create firs row, labels */  n_args=0;  XtSetArg(args[n_args],XmNcursorPositionVisible,False);n_args++;  XtSetArg(args[n_args],XmNeditable,False);n_args++;  XtSetArg(args[n_args],XmNtopOffset,8);n_args++;  XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_FORM);n_args++;  t=n_args;  XtSetArg(args[n_args],XmNleftOffset,3);n_args++;  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_FORM);n_args++;  XtSetArg(args[n_args],XmNvalue,"");n_args++;  XtSetArg(args[n_args],XmNcolumns,4);n_args++;  XtSetArg(args[n_args],XmNmaxLength,4);n_args++;  temp=XtCreateManagedWidget("memory_label",xmTextFieldWidgetClass,			     eeprom_form,args,n_args);  n_args=t;  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_WIDGET);n_args++;  XtSetArg(args[n_args],XmNcolumns,3);n_args++;  XtSetArg(args[n_args],XmNmaxLength,3);n_args++;  XtSetArg(args[n_args],XmNleftOffset,2);n_args++;  t=n_args;  for(n=0;n<16;n++)    {      n_args=t;      sprintf(buf,"%X",n);      fill_zero(buf,2);      XtSetArg(args[n_args],XmNvalue,buf);n_args++;      XtSetArg(args[n_args],XmNleftWidget,temp);n_args++;      temp=XtCreateManagedWidget("r",xmTextFieldWidgetClass,eeprom_form,args,				 n_args);    }  /* create scroll window */  scroll=XtVaCreateManagedWidget("Scroll",xmScrolledWindowWidgetClass,				 eeprom_form,				 XmNscrollingPolicy,XmAPPLICATION_DEFINED,				 XmNscrollBarDisplayPolicy,XmSTATIC,				 XmNleftAttachment,XmATTACH_FORM,				 XmNleftOffset,3,				 XmNrightAttachment,XmATTACH_FORM,				 XmNrightOffset,2,				 XmNtopAttachment,XmATTACH_WIDGET,				 XmNtopWidget,temp,				 XmNbottomAttachment,XmATTACH_FORM,				 XmNbottomOffset,3,				 NULL);    dataform_eeprom=    XtVaCreateManagedWidget("form area",xmFormWidgetClass,scroll,NULL);    vscr_eeprom_bar=XtVaCreateManagedWidget("scr_bar",xmScrollBarWidgetClass,					  scroll,XmNorientation,XmVERTICAL,					  XmNincrement,1,XmNminimum,0,					  XmNvalue,0,NULL);  XtAddCallback(vscr_eeprom_bar,XmNvalueChangedCallback,		(XtCallbackProc)scroll_bar_eeprom_callback,NULL);  XtAddCallback(vscr_eeprom_bar,XmNdragCallback,		(XtCallbackProc)scroll_bar_eeprom_callback,NULL);  XmScrolledWindowSetAreas(scroll,NULL,vscr_eeprom_bar,dataform_eeprom);    /* size of 'vscr_eeprom_bar' must be equal size of end space */  XtVaGetValues(vscr_eeprom_bar,XmNwidth,(Dimension *)&n,NULL);  XtVaSetValues(temp,XmNrightAttachment,XmATTACH_FORM,		XmNrightOffset,n,NULL);    /* create input fields */  if((widgetlist=malloc(nlines_eeprom*17*sizeof(Widget)))==NULL)    {      puts("create_eeprom_window(): \can't allocate memory for 'widgetlist'");      exit(1);    }  n_wid=0;  for(n=0,address=address_eeprom;n<nlines_eeprom;n++,address+=16)    create_eeprom_line(n,address,widgetlist,&n_wid);  XtManageChildren(widgetlist,n_wid);  free(widgetlist);    string=XmStringGenerate(_("Decimal"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);    temp=XtVaCreateManagedWidget("Dec",xmPushButtonGadgetClass,			       eeprom_window,			       XmNleftAttachment,XmATTACH_POSITION,			       XmNleftPosition,1,XmNlabelString,string,			       XmNrightAttachment,XmATTACH_POSITION,			       XmNrightPosition,2,			       XmNbottomAttachment,XmATTACH_FORM,			       XmNbottomOffset,6,NULL);    XtAddCallback(temp,		XmNactivateCallback,(XtCallbackProc)switch_button_eeprom,NULL);  XmStringFree(string);    string=XmStringGenerate(_("Close"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  temp=XtVaCreateManagedWidget("Close",xmPushButtonGadgetClass,			       eeprom_window,			       XmNleftAttachment,XmATTACH_POSITION,			       XmNleftPosition,3,			       XmNrightAttachment,XmATTACH_POSITION,			       XmNrightPosition,4,XmNlabelString,string,			       XmNbottomAttachment,XmATTACH_FORM,			       XmNbottomOffset,6,NULL);    XtAddCallback(temp,		XmNactivateCallback,(XtCallbackProc)close_button_eeprom,NULL);  XmStringFree(string);  XtVaSetValues(frame,XmNbottomOffset,6,XmNbottomAttachment,XmATTACH_WIDGET,		XmNbottomWidget,temp,NULL);  XtAddCallback(shell,XmNpopupCallback,(XtCallbackProc)set_size_eeprom_window,		NULL);  XtAddEventHandler(shell,StructureNotifyMask,False,resize_eeprom,NULL);}void create_eeprom_line(int n,int address,Widget *widgetlist,int *n_wid){  int i,n_args,num_wid,t;  char buf[6];  Arg args[20];  num_wid=*n_wid;  n_args=0;  sprintf(buf,"%X",address);  fill_zero(buf,4);  /* main resource */  XtSetArg(args[n_args],XmNcursorPositionVisible,False);n_args++;  XtSetArg(args[n_args],XmNshadowThickness,1);n_args++;  t=n_args;  XtSetArg(args[n_args],XmNcolumns,4);n_args++;  XtSetArg(args[n_args],XmNmaxLength,4);n_args++;  XtSetArg(args[n_args],XmNleftAttachment,XmATTACH_FORM);n_args++;  XtSetArg(args[n_args],XmNvalue,buf);n_args++;  XtSetArg(args[n_args],XmNeditable,False);n_args++;  if(n==0)    {      XtSetArg(args[n_args],XmNtopAttachment,XmATTACH_FORM);n_args++;      XtSetArg(args[n_args],XmNtopOffset,1);n_args++;    }

⌨️ 快捷键说明

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