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