📄 avr_simulator.c
字号:
if((file=fopen(filename,"r"))==NULL) { sprintf(error_message,"open file: %s",strerror(errno)); return 1; } drawarea.current_line_deb=pc=-1; free(list_commands); if((list_commands= malloc(controllers[type_micro].size_flash*sizeof(ListCommand)))==NULL) { puts("load_flash(): can't allocate memory for 'list_commands'"); exit(1); } free(drawarea.display_lines); if((drawarea.display_lines= malloc(controllers[type_micro].size_flash*sizeof(int)))==NULL) { puts("load_flash(): \can't allocate memory for 'drawarea.display_lines'"); exit(1); } if(create_listing(file)) { drawarea.current_line_deb=-1; drawarea.num_commands=0; XtVaSetValues(drawarea.v_scrb,XmNsliderSize,1, XmNmaximum,drawarea.num_commands+1, XmNvalue,0,NULL); draw(); /* clean screen */ XtSetSensitive(menu[DEBUG_MENU].button,False); return 1; } /* set size of slider in drawarea */ if(drawarea.height/drawarea.font_height<=drawarea.num_commands) XtVaSetValues(drawarea.v_scrb,XmNsliderSize, drawarea.height/drawarea.font_height, XmNmaximum,drawarea.num_commands, XmNvalue,0,NULL); else XtVaSetValues(drawarea.v_scrb,XmNvalue,0,XmNsliderSize,1,XmNmaximum,1, NULL); draw(); clean_memory(); XtSetSensitive(buttons[RELOAD].widget,True); XtSetSensitive(buttons[TRACE_INTO].widget,True); XtSetSensitive(buttons[STEP_OVER].widget,True); XtSetSensitive(buttons[STEP_OUT].widget,True); XtSetSensitive(buttons[MULTI_STEP].widget,True); XtSetSensitive(buttons[AUTO_STEP].widget,True); XtSetSensitive(buttons[RUN].widget,True); XtSetSensitive(buttons[STOP].widget,False); XtSetSensitive(buttons[RESET_].widget,True); XtSetSensitive(menu[DEBUG_MENU].button,True); XtSetSensitive(menu[DEBUG_MENU].sub_menu[STOP_BUTTON].button,False); return 0;}int load_eeprom(char *name){ static char *filename; static FILE *file; int address,data,error; if(name!=NULL) { /* new file */ free(filename); if((filename=malloc(strlen(name)+1))==NULL) { puts("load_eeprom(): can't allocate memory for 'filename'"); exit(1); } strcpy(filename,name); } if(filename==NULL) return 0; if(file!=NULL) fclose(file); if((file=fopen(filename,"r"))==NULL) { sprintf(error_message,"open file: %s",strerror(errno)); return 1; } while((error=read_word(&data,&address,file))==2) { if(address>=controllers[type_micro].size_eeprom) { sprintf(error_message, _("Size of file is bigger then size of eeprom")); full_update_eeprom_window(); return 1; } eeprom_pointer[address]=data; } if(error==1) return 1; full_update_eeprom_window(); return 0;}void scroll_bar_callback (Widget w,XtPointer client_data, XtPointer call_data){ draw(); return;}void drawarea_input_callback(Widget w,XtPointer client_data, XtPointer call_data){ XmDrawingAreaCallbackStruct *data; int num_line,address,cur_line; if(list_commands==NULL) return; data=(XmDrawingAreaCallbackStruct *)call_data; if(data->reason==XmCR_INPUT) if(data->event->type==ButtonPress) { if(data->event->xbutton.x>drawarea.font_width*8&& data->event->xbutton.x<drawarea.font_width*12&& data->event->xbutton.button==Button1) { XtVaGetValues(drawarea.v_scrb,XmNvalue,&num_line,NULL); if((cur_line=num_line+data->event->xbutton.y/ drawarea.font_height)>=drawarea.num_commands) return; address=drawarea.display_lines[cur_line]; if(list_commands[address].flags&BREAKPOINT) list_commands[address].flags= list_commands[address].flags&(~BREAKPOINT); else list_commands[address].flags= list_commands[address].flags|BREAKPOINT; draw(); } } }void draw(void){ int value,num_line,n; char line[30],buf[10]; XFreePixmap(display,pixmap); pixmap=CreatePixmap(window,drawarea.width,drawarea.height, WhitePixel(display,scr_num)); /* Get number of first displaying line */ XtVaGetValues(drawarea.v_scrb,XmNvalue,&value,NULL); /* if current debug line not displaying then to change first */ /* displaying line */ if(debug==TRUE&&drawarea.current_line_deb!=-1) { if(drawarea.current_line_deb<value|| drawarea.current_line_deb>value+drawarea.height/drawarea.font_height) { if(drawarea.current_line_deb+drawarea.height/drawarea.font_height> drawarea.num_commands-1) value=drawarea.num_commands-drawarea.height/drawarea.font_height; else value=drawarea.current_line_deb; } if(drawarea.current_line_deb> value+drawarea.height/drawarea.font_height-5&& drawarea.current_line_deb<=value+drawarea.height/drawarea.font_height) { if(drawarea.num_commands< drawarea.current_line_deb+drawarea.height/drawarea.font_height/2) { if(drawarea.num_commands-drawarea.height/drawarea.font_height-1> value) value=drawarea.num_commands- drawarea.height/drawarea.font_height-1; } else value=drawarea.current_line_deb- drawarea.height/drawarea.font_height/2; } } XtVaSetValues(drawarea.v_scrb,XmNvalue,value,NULL); /* print debuging lines */ for(n=value,num_line=0;num_line<drawarea.height/drawarea.font_height;n++) { if(n>=drawarea.num_commands) break; sprintf(buf,"%X",drawarea.display_lines[n]); fill_zero(buf,5); sprintf(line,"%s %s",buf, list_commands[drawarea.display_lines[n]].mnemocode); XDrawString(display,pixmap,drawarea.gc,6, num_line*drawarea.font_height+10, line,strlen(line)); /* display stop_pixmap */ if(list_commands[drawarea.display_lines[n]].flags&BREAKPOINT) XCopyArea(display,stop_pixmap,pixmap,drawarea.gc,0,0, 15,15,drawarea.font_width*8+4, (num_line-1)*drawarea.font_height+13); num_line++; } /* displaying current_pixmap */ if(pc!=-1&&drawarea.current_line_deb>=value&& drawarea.current_line_deb<=drawarea.height/drawarea.font_height+value&& drawarea.current_line_deb!=-1) { XCopyArea(display,current_pixmap,pixmap,drawarea.gc,0,0, 15,15,drawarea.font_width*6, (drawarea.current_line_deb-value)*drawarea.font_height); } XCopyArea(display,pixmap,window,drawarea.gc,0,0,drawarea.width, drawarea.height,0,0);}Pixmap CreatePixmap(Window window,unsigned int width,unsigned int height, Pixel pixel){ Pixmap pixmap; char *data; if((data=malloc(width*height))==NULL) { puts("CreatePixmap(): can't allocate memory for 'data'"); exit(1); } memset(data,0,width*height); pixmap=XCreatePixmapFromBitmapData(display,window,data,width, height,WhitePixel(display,scr_num), pixel,DefaultDepth(display,scr_num)); free(data); return pixmap;}void create_main(void){ char buf[10]; XmString string; Widget label,frame1,frame1_form,menu_timeselection,option_menu,button; frame1=XtVaCreateManagedWidget("frame",xmFrameWidgetClass,form, XmNtopAttachment,XmATTACH_WIDGET, XmNtopWidget,separator, XmNtopOffset,5, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,frame, XmNleftOffset,5, XmNrightAttachment,XmATTACH_FORM, XmNrightOffset,5, XmNmarginWidth,6,XmNmarginHeight,4,NULL); frame1_form=XtVaCreateManagedWidget("form",xmFormWidgetClass,frame1,NULL); string=XmStringGenerate("PC:",XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label=XtVaCreateManagedWidget("label pc",xmLabelGadgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNtopOffset,2, XmNbottomAttachment,XmATTACH_FORM, XmNbottomOffset,2, XmNlabelString,string, NULL); XmStringFree(string); sprintf(buf,"%X",pc); fill_zero(buf,8); edit_pc=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,label, XmNleftOffset,0, XmNcolumns,6,XmNmaxLength,6, XmNvalue,buf,XmNeditable,False, XmNcursorPositionVisible,False,NULL); string=XmStringGenerate("X:",XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label=XtVaCreateManagedWidget("label X",xmLabelGadgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,edit_pc, XmNtopOffset,2,XmNleftOffset,10, XmNlabelString,string, NULL); XmStringFree(string); edit_X=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,label, XmNleftOffset,0, XmNcolumns,4,XmNmaxLength,4, XmNvalue,"0000", XmNcursorPositionVisible,False,NULL); string=XmStringGenerate("Y:",XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label=XtVaCreateManagedWidget("label Y",xmLabelGadgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,edit_X, XmNtopOffset,2,XmNleftOffset,10, XmNlabelString,string, NULL); XmStringFree(string); edit_Y=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,label, XmNleftOffset,0, XmNcolumns,4,XmNmaxLength,4, XmNvalue,"0000", XmNcursorPositionVisible,False,NULL); string=XmStringGenerate("Z:",XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label=XtVaCreateManagedWidget("label Z",xmLabelGadgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,edit_Y, XmNtopOffset,2,XmNleftOffset,10, XmNlabelString,string, NULL); XmStringFree(string); edit_Z=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,frame1_form, XmNtopAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,label, XmNleftOffset,0, XmNrightAttachment,XmATTACH_FORM, XmNcolumns,4,XmNmaxLength,4, XmNvalue,"0000", XmNcursorPositionVisible,False,NULL); frame1=XtVaCreateManagedWidget("frame",xmFrameWidgetClass,form, XmNtopAttachment,XmATTACH_WIDGET, XmNtopWidget,frame1, XmNtopOffset,5, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,frame, XmNleftOffset,5, XmNrightAttachment,XmATTACH_FORM, XmNrightOffset,5, XmNmarginWidth,3,XmNmarginHeight,2,NULL); string=XmStringGenerate(_("Status Register"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); XtVaCreateManagedWidget("label",xmLabelGadgetClass,frame1, XmNlabelString,string, XmNframeChildType,XmFRAME_TITLE_CHILD, XmNchildHorizontalAlignment,XmALIGNMENT_BEGINNING, XmNchildVerticalAlignment,XmALIGNMENT_CENTER, NULL); XmStringFree(string); string=XmStringGenerate("I:0 T:0 H:0 S:0 V:0 N:0 Z:0 C:0", XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label_sreg=XtVaCreateManagedWidget("label sreg",xmLabelGadgetClass,frame1, XmNlabelString,string,NULL); XmStringFree(string); frame1=XtVaCreateManagedWidget("frame",xmFrameWidgetClass,form, XmNtopAttachment,XmATTACH_WIDGET, XmNtopWidget,frame1, XmNtopOffset,5, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,frame, XmNleftOffset,5, XmNrightAttachment,XmATTACH_FORM, XmNrightOffset,5, XmNmarginWidth,6,XmNmarginHeight,0,NULL); frame1_form=XtVaCreateManagedWidget("form",xmFormWidgetClass,frame1,NULL); string=XmStringGenerate(_("Elapsed time:"),XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE); label=XtVaCreateManagedWidget("label sreg",xmLabelGadgetClass, frame1_form, XmNtopAttachment,XmATTACH_FORM,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -