📄 u.c
字号:
for (i = 0; i < n_files; i++){ f[i].text = files[i].text; t_lines += files[i].n_lines; /* printf ("file %d lines %d total %d\n",i,files[i].n_lines, t_lines); */ } if (t_lines == 0) { fprintf (stderr,"Could not find source code, no lines found\n"); exit(1); } BuildSliceSrc (slicewin,n_files,f,t_lines); make_line_map(); slice_pass_hook = continue_events; MultiSliceSetHook(slicewin,active_hook); XtAppMainLoop(ac);}strech (goal,w) Widget goal,w;{ Dimension width,bw; Position x; int dist; XtUnmanageChild(w); XtVaGetValues (goal, XtNdefaultDistance, &dist, XtNwidth,&width,NULL); XtVaGetValues (w, XtNborderWidth,&bw, XtNx,&x, NULL); XtVaSetValues (w, XtNwidth, (XtArgVal) (width-2*bw - dist - x), NULL); XtManageChild(w);}Widget create_widgets (top,file_name) Widget top; char *file_name;{ static Widget frame,quit,file_button,file_menu; static Widget load,line,content; static Widget select_button,select_menu; static Widget proc,var,primary,secondary; static Widget op_button,op_menu; static Widget dicesp,dice,bb,merge; static Widget proc_state,selection_state; static Widget proc_popup,proc_port,proc_list; static Widget head_popup,head_port,head_list; static Widget var_popup,var_port,var_list; static Widget select_popup,select_port,select_list; static Widget help; static Widget interrupt,show_tree,show_proc; static Widget display_label; static Widget slicewin,clear,clear_slice,sliceframe; static proc_state_rec ps; Dimension www,ww,w,bw; Position cx,hx,x,y; int at,dist; char buff[1000]; static char *plist[] = {"start","fetch","redactor", "look_up_value_in_long_name_list", "alpha","beta","OMEGA", NULL}; static char pbuff[500] = "<none>",sbuff[500] = "<none>"; static XtResource res[] = { {XtNrunningFG,XtCBackground, XtRPixel, sizeof(Pixel), XtOffsetOf(proc_state_rec,active_fg),XtRString,"red"}, {XtNrunningBG,XtCForeground, XtRPixel, sizeof(Pixel), XtOffsetOf(proc_state_rec,active_bg),XtRString,"yellow"}}; XtGetApplicationResources (top,&ps,res,XtNumber(res),NULL,0); ps.proc = NULL; ps.var = NULL; ps.state_label = &selection_state; ps.root_file = file_name; ps.ptext = pbuff; ps.stext = sbuff; /* file_menu = XtVaCreatePopupShell ("fileMenu",simpleMenuWidgetClass, top, NULL); */ select_menu = XtVaCreatePopupShell ("selectMenu", simpleMenuWidgetClass, top, NULL); /* set_button_help (file_menu,"Quit to exit unravel"); */ set_button_help (select_menu, "Menu for selecting criteria variables or previous slices"); op_menu = XtVaCreatePopupShell ("opMenu", simpleMenuWidgetClass, top, NULL); set_button_help (op_menu, "Menu for combining primary and secondary slices"); select_popup = XtVaCreatePopupShell ("selectpop", transientShellWidgetClass,top, NULL); select_port = XtVaCreateManagedWidget ("selectport", viewportWidgetClass,select_popup, XtNforceBars, (XtArgVal) True, XtNallowVert, (XtArgVal) True, NULL); select_list = XtVaCreateManagedWidget ("selectlist", listWidgetClass,select_port, XtNdefaultColumns, (XtArgVal) 1, NULL); set_button_help (select_list,"list of already computed slices"); ps.history_list = select_list; head_popup = XtVaCreatePopupShell ("headpop", transientShellWidgetClass,top, NULL); head_port = XtVaCreateManagedWidget ("headport", viewportWidgetClass,head_popup, XtNforceBars, (XtArgVal) True, XtNallowVert, (XtArgVal) True, NULL); proc_popup = XtVaCreatePopupShell ("procpop", transientShellWidgetClass,top, NULL); proc_port = XtVaCreateManagedWidget ("procport", viewportWidgetClass,proc_popup, XtNforceBars, (XtArgVal) True, XtNallowVert, (XtArgVal) True, NULL); var_popup = XtVaCreatePopupShell ("varpop", transientShellWidgetClass,top, NULL); ps.var_popup = var_popup; var_port = XtVaCreateManagedWidget ("varport", viewportWidgetClass,var_popup, XtNforceBars, (XtArgVal) True, XtNallowVert, (XtArgVal) True, NULL); current_proc = n_procs; make_proc_list(); make_head_list(); head_list = XtVaCreateManagedWidget ("headlist", listWidgetClass,head_port, XtNlist, (XtArgVal) file_name_list, XtNdefaultColumns, (XtArgVal) 1, NULL); adjust_popup_list (head_list); set_button_help (head_list,"File containing global variable"); proc_list = XtVaCreateManagedWidget ("proclist", listWidgetClass,proc_port, XtNlist, (XtArgVal) proc_name_list, XtNdefaultColumns, (XtArgVal) 1, NULL); adjust_popup_list (proc_list); set_button_help (proc_list,"Select a proc to see list of local variables"); var_list = XtVaCreateManagedWidget ("varlist", listWidgetClass,var_port, /* XtNlist, (XtArgVal) global_names, */ XtNdefaultColumns, (XtArgVal) 1, NULL); set_button_help (var_list,"Select a variable for a slicing criterion"); ps.var_list = var_list; XtAddCallback (head_list,XtNcallback,head_select,&ps); XtAddCallback (proc_list,XtNcallback,proc_select,&ps); XtAddCallback (var_list,XtNcallback,var_select,&ps); XtAddCallback (select_list,XtNcallback,slice_select,&ps); frame = XtVaCreateManagedWidget ("frame",formWidgetClass,top, NULL); set_button_help (frame,". . ."); /* file_button = XtVaCreateManagedWidget ("File", menuButtonWidgetClass,frame, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, XtNborderWidth, (XtArgVal) 2, XtNmenuName, (XtArgVal) "fileMenu", XtNright, (XtArgVal) XtChainLeft, XtNleft, (XtArgVal) XtChainLeft, NULL); set_button_help (file_button,"Quit button is in this menu"); load = XtVaCreateManagedWidget ("load",smeBSBObjectClass,file_menu, XtNlabel, (XtArgVal) "load", XtNsensitive, (XtArgVal) False, NULL); line = XtVaCreateManagedWidget ("line",smeLineObjectClass,file_menu, XtNlineWidth, (XtArgVal) 4, NULL); quit = XtVaCreateManagedWidget ("quit",smeBSBObjectClass,file_menu, XtNlabel, (XtArgVal) "Exit", NULL); */ quit = XtVaCreateManagedWidget ("quit",commandWidgetClass,frame, XtNlabel, (XtArgVal) "Exit", XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, XtNright, (XtArgVal) XtChainLeft, XtNleft, (XtArgVal) XtChainLeft, NULL); XtAddCallback (quit,XtNcallback,quitB,NULL); set_button_help (quit,"Click quit to exit slicer"); select_button = XtVaCreateManagedWidget ("Select", menuButtonWidgetClass,frame, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, XtNborderWidth, (XtArgVal) 2, XtNmenuName, (XtArgVal) "selectMenu", XtNfromHoriz, (XtArgVal) quit, XtNright, (XtArgVal) XtChainLeft, XtNleft, (XtArgVal) XtChainLeft, NULL); set_button_help (select_button, "Menu for selecting criteria variables or previous slices"); proc = XtVaCreateManagedWidget ("Procedure", smeBSBObjectClass,select_menu, XtNlabel, (XtArgVal) "Local Variable", NULL); XtAddCallback (proc,XtNcallback,proc_pop,proc_popup); var = XtVaCreateManagedWidget ("Variable", smeBSBObjectClass,select_menu, XtNlabel, (XtArgVal) "Global Variable", NULL); XtAddCallback (var,XtNcallback,proc_pop,head_popup); show_proc = XtVaCreateManagedWidget ("Markproc", smeBSBObjectClass,select_menu, XtNlabel, "Mark proc", NULL); show_tree = XtVaCreateManagedWidget ("ShowCallTree", smeBSBObjectClass,select_menu, XtNlabel, "Show call tree", NULL); primary = XtVaCreateManagedWidget ("Primary", smeBSBObjectClass,select_menu, NULL); secondary = XtVaCreateManagedWidget ("Secondary", smeBSBObjectClass,select_menu, NULL); ps.proc_popup = proc_popup; XtAddCallback (primary,XtNcallback,popup_selection,&ps); XtAddCallback (secondary,XtNcallback,popup_selection,&ps); XtAddCallback (show_proc,XtNcallback,show_pop,&ps); XtAddCallback (show_tree,XtNcallback,tree_pop,&ps); op_button = XtVaCreateManagedWidget ("Operation", menuButtonWidgetClass,frame, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, XtNborderWidth, (XtArgVal) 2, XtNmenuName, (XtArgVal) "opMenu", XtNfromHoriz, (XtArgVal) select_button, XtNright, (XtArgVal) XtChainLeft, XtNleft, (XtArgVal) XtChainLeft, NULL); set_button_help (op_button,"Popup menu of operations on slices"); dice = XtVaCreateManagedWidget ("Dice", smeBSBObjectClass,op_menu, NULL); dicesp = XtVaCreateManagedWidget ("Dicesp", smeBSBObjectClass,op_menu, XtNlabel, (XtArgVal) "Dice S-P", NULL); bb = XtVaCreateManagedWidget ("Backbone", smeBSBObjectClass,op_menu, XtNlabel, (XtArgVal) "Intersection", NULL); merge = XtVaCreateManagedWidget ("Union", smeBSBObjectClass,op_menu, NULL); clear = XtCreateManagedWidget("Clear", smeBSBObjectClass, op_menu, NULL, 0); clear_slice = XtVaCreateManagedWidget("ClearSlice", smeBSBObjectClass, op_menu, XtNlabel, (XtArgVal) "Clear Slice History", NULL); XtVaGetValues (op_button, XtNwidth,&w, XtNborderWidth,&bw, XtNx,&x, NULL); interrupt = XtVaCreateManagedWidget ("interrupt", commandWidgetClass,frame, XtNlabel, (XtArgVal) "Interrupt", XtNfromHoriz, (XtArgVal) op_button, XtNright, (XtArgVal) XtChainLeft, XtNleft, (XtArgVal) XtChainLeft, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, NULL); set_button_help (interrupt, "Abandon computing slice, show partial result"); XtAddCallback (interrupt,XtNcallback,stop_slicing,NULL); progress = XtVaCreateManagedWidget ("progress", labelWidgetClass,frame, XtNlabel, (XtArgVal) " nodes", XtNfromHoriz, (XtArgVal) interrupt, XtNright, (XtArgVal) XtChainLeft, XtNleft, (XtArgVal) XtChainLeft, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, NULL); set_button_help (progress,"Give feedback on progress by display of \ # of statements in slice"); at = WIDTH; help = XtVaCreateManagedWidget ("Help",commandWidgetClass,frame, /* XtNhorizDistance, (XtArgVal) at, */ XtNfromHoriz, (XtArgVal) progress, XtNright, (XtArgVal) XtChainRight, XtNleft, (XtArgVal) XtChainRight, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, NULL); set_button_help (help,"Pop up display of general help"); XtAddCallback (help,XtNcallback,helpB,NULL); sprintf (buff,"%s %s", "File: <none> Proc: <none>","Var: <none>"); XtVaGetValues (frame, XtNwidth,&w, NULL); selection_state = XtVaCreateWidget ("state", labelWidgetClass,frame, XtNfromVert, (XtArgVal) help, XtNleft, (XtArgVal) XtChainLeft, XtNright, (XtArgVal) XtChainRight, XtNlabel, (XtArgVal) buff, XtNwidth, (XtArgVal) w, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, XtNjustify, (XtArgVal) XtJustifyLeft, NULL); set_button_help (selection_state,"Show variable selected for slicing criterion"); XtManageChild(selection_state); sprintf (buff,"%s %s", "Primary: <none>","Secondary: <none>"); proc_state = XtVaCreateManagedWidget ("pstate", labelWidgetClass,frame, XtNfromVert, (XtArgVal) selection_state, XtNleft, (XtArgVal) XtChainLeft, XtNright, (XtArgVal) XtChainRight, XtNlabel, (XtArgVal) buff, XtNwidth, (XtArgVal) w, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, XtNjustify, (XtArgVal) XtJustifyLeft, NULL); set_button_help (proc_state, "Show the criteria of the primary and secondary slices"); ps.slice_label = proc_state; sprintf (buff,"Source text for: %sc",ps.root_file); display_label = XtVaCreateManagedWidget ("criterion", labelWidgetClass,frame, XtNfromVert, (XtArgVal) proc_state, XtNleft, (XtArgVal) XtChainLeft, XtNright, (XtArgVal) XtChainRight, XtNlabel, (XtArgVal) buff, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainTop, NULL); ps.display_label = display_label; set_button_help (display_label,"Describe current display"); QQQ = slicewin = CreateSliceBox("slicebox",frame); sprintf (buff,"Describe object under mouse pointer"); content = XtVaCreateManagedWidget ("info", labelWidgetClass,frame, XtNfromVert, (XtArgVal) XtParent(slicewin), XtNright, (XtArgVal) XtChainRight, XtNleft, (XtArgVal) XtChainLeft, XtNtop, (XtArgVal) XtChainBottom, XtNbottom, (XtArgVal) XtChainBottom, XtNjustify, (XtArgVal) XtJustifyCenter, XtNlabel, (XtArgVal) buff, NULL); help_label = content; XtAddEventHandler (content,EnterWindowMask,False,button_help, "Describe object under mouse pointer"); ps.slicewin = slicewin; set_button_help (slicewin,"Select slice location via mouse"); XtAddCallback (clear,XtNcallback,clearB,&ps); XtAddCallback (clear_slice,XtNcallback,clear_sliceB,&ps); XtAddCallback (slicewin,XtNcallback,slicecall,&ps); XtAddCallback (bb,XtNcallback,bbcall,&ps); XtAddCallback (merge,XtNcallback,unioncall,&ps); XtAddCallback (dice,XtNcallback,dicecall,&ps); XtAddCallback (dicesp,XtNcallback,dicecallsp,&ps); sliceframe = XtParent(slicewin); set_button_help (XtNameToWidget(sliceframe,"bar"), "Scroll bar to navigate through source text"); set_button_help (XtNameToWidget(sliceframe,"up"), "Click left mouse button to back up source text by one line"); set_button_help (XtNameToWidget(sliceframe,"dn"), "Click left mouse button to advance source text by one line"); XtUnmanageChild(sliceframe); XtVaSetValues(sliceframe, XtNfromVert, (XtArgVal) display_label, XtNtop, (XtArgVal) XtChainTop, XtNbottom, (XtArgVal) XtChainBottom, NULL); XtManageChild(sliceframe); XtInstallAccelerators (frame,help); XtInstallAccelerators (frame,quit); XtRealizeWidget (top); XtVaGetValues (frame, XtNwidth,&w, XtNdefaultDistance, &dist, NULL); XtVaGetValues (help, XtNwidth,&www, XtNborderWidth,&bw, XtNx,&hx, NULL); XtVaGetValues (progress, XtNwidth,&ww, XtNx,&cx, NULL); ww = w - (cx + ww + 4*bw + dist + www); XtVaGetValues (selection_state, XtNborderWidth,&bw, NULL); XtUnmanageChild(help); XtUnmanageChild(selection_state); XtUnmanageChild(proc_state); XtVaSetValues (selection_state, XtNwidth, (XtArgVal) (w-2*(dist + bw)), NULL); XtVaSetValues (proc_state, XtNwidth, (XtArgVal) (w-2*(dist + bw)), NULL); XtVaSetValues (help, XtNhorizDistance, ww, NULL); XtManageChild(selection_state); XtManageChild(proc_state); XtManageChild(help); strech (frame,content); strech (frame,display_label); XtTranslateCoords(top, (Position) 30, (Position) 60, &x,&y); /* XtVaSetValues (proc_popup, XtNx, (XtArgVal) x, XtNy, (XtArgVal) y, NULL); */ ps.slicewin = slicewin; ps.is_primary = 1; return slicewin;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -