📄 menu_memory.c
字号:
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 + -