📄 xpppoem.c
字号:
count,flag,heat,last_idx); count++; colorbase= 0; colorscale= 15; mode= flag&15; if(mode==1) { rgb= heat; sprintf(colors[0],"#%-6.6x",rgb); return(1); } else if(mode==2) { sscanf(colors[0]+1,"%X",&rgb); blue_low= rgb&255; green_low= (rgb>>8)&255; red_low= (rgb>>16)&255; rgb= heat; blue_high= rgb&255; green_high= (rgb>>8)&255; red_high= (rgb>>16)&255; for(i=1;i<colorscale;i++) sprintf(colors[i],"#%-2.2x%-2.2x%-2.2x", red_low+(i*(red_high-red_low))/colorscale, green_low+(i*(green_high-green_low))/colorscale, blue_low+(i*(blue_high-blue_low))/colorscale); sprintf(colors[colorscale],"#%-2.2x%-2.2x%-2.2x", red_high,green_high,blue_high); return(1); } if(heat<0.0) heat= 0.0; else if(heat>1.0) heat= 1.0; if(heat==0.0 || heat==1.0) idx= heat*colorscale; else idx= heat*(colorscale-1)+1; if(idx!=last_idx || (flag&16)) { ret= Xpppoem_change_color(w,colors[colorbase+idx],0); if(debug) printf("idx=%ld changing colors ret=%ld\n",idx,ret); } else { if(debug) printf("idx=%ld no color change\n"); } last_idx= idx; return(ret);}int Xpppoem_report_open(w,mon,flag)Widget w;struct PppoeM *mon;int flag;{ struct stat stbuf; int ret; Arg args[1]; if(mon->is_open>0) { /* text terminal stdout */ ret= Pppoem_report(mon,"DSL ON",1|2); if(ret<=0) goto ex; if(! Xpppoem_do_show_heaT) { XtSetArg(args[0], XtNbackground, onlinecolor); XtSetValues(w, args, 1); if(stat("xpppoem_debug_color_change",&stbuf)!=-1) printf("Xpppoem_report_open: changing to ON color\n"); } } else { /* text terminal stdout */ ret= Pppoem_report(mon,"DSL OFF",0); if(ret<=0) goto ex; if(stat("xpppoem_debug_color_change",&stbuf)!=-1) printf("Xpppoem_report_open: changing to OFF color\n"); XtSetArg(args[0], XtNbackground, offlinecolor ); XtSetValues(w, args, 1); } ret= 1;ex:; return(ret);}void Xpppoem_callback( w, closure, call_data )Widget w;XtPointer closure;XtPointer call_data; /* pointer to (double) return value */{ int ret,was_open,is_open,hflag; struct PppoeM *mon; char line[160]; double count,timespan,cps= 0.0; Arg args[1]; mon= PppoemM; was_open= Pppoem_is_open(mon,0); ret= Pppoem_poll(mon,0); if(ret<=0) goto ex; is_open= Pppoem_is_open(mon,0); if(is_open!=was_open) { ret= Xpppoem_report_open(w,mon,0); if(ret<=0) goto ex; } else { /* text terminal stderr status line */ ret= Pppoem_show_stat(mon,0); if(ret<=0) goto ex; } if(Xpppoem_show_labeL) { /* graphics window headline */ ret= Pppoem_format_stat(mon,line,2|((is_open<=0)<<2)|8); if(ret<=0) goto ex; XtSetArg (args[0], XtNlabel, line); XtSetValues (label_wid, args, ONE); } /* graphics window histogram */ ret= Pppoem_get_interval(mon,0,1,&count,×pan,0); if(ret<0) goto ex; if(ret>0 && timespan>0) cps= count/timespan; if(Xpppoem_do_show_heaT && is_open) { /* Dynamic background color of graphics window histogram */ ret= Pppoem_get_interval(mon,0,Xpppoem_busy_sampleS,&count,×pan,0); if(ret<0) goto ex; hflag= (is_open!=was_open)<<4; if(ret>0 && timespan>0) Xpppoem_show_heat(w,count/timespan/Xpppoem_heat_rangE,hflag); else { ret= Pppoem_get_interval(mon,0,0,&count,×pan,1); if(timespan>0) Xpppoem_show_heat(w,count/timespan/Xpppoem_heat_rangE,hflag); else Xpppoem_show_heat(w,0.0,hflag); } } if(is_open!=was_open && is_open>0 && Pppoem_has_headlines_on(mon,0)) Pppoem_show_stat(mon,2); /* new text terminal stderr headline */ Pppoem_forward(mon,0); ret= 1;ex:; if(ret<=0) exit(2); if(Xpppoem_show_grapH && is_open) *((double *)call_data) = cps / Xpppoem_uniT; /* Xpppoem_uniT Bytes/sec */ else *((double *)call_data) = 0.0; return;} int Xpppoem_main(argc, argv) int argc; char **argv;{#define Xpppoem_arg_leN 4096 XtAppContext app_con; Widget toplevel, load, pane, load_parent; Pixmap icon_pixmap = None; XrmValue namein, pixelout; Arg args[1]; char hargv_d[2][Xpppoem_arg_leN],*hargv[2]; int ret,busy_color_enable= 0,i; hargv[0]= hargv_d[0]; hargv[1]= hargv_d[1]; ProgramName = argv[0]; toplevel = XtAppInitialize(&app_con, "XPppoem", options, XtNumber(options), &argc, argv, NULL, NULL, (Cardinal) 0); XtGetApplicationResources( toplevel, (XtPointer) &resources, my_resources, XtNumber(my_resources), NULL, (Cardinal) 0); if (argc > 1) { for(i=1;i<argc;i++) { if(strcmp(argv[i],"-help")==0 || strcmp(argv[i],"-h")==0) break; } if(i<argc) { usage(0); exit(0); } else { usage(1); exit(1); } } Xpppoem_init(argv[1]); /* * This is a hack so that f.delete will do something useful in this * single-window application. */ XtAppAddActions (app_con, xpppoem_actions, XtNumber(xpppoem_actions)); XtOverrideTranslations(toplevel, XtParseTranslationTable ("<Message>WM_PROTOCOLS: quit()")); XtSetArg (args[0], XtNiconPixmap, &icon_pixmap); XtGetValues(toplevel, args, ONE); if (icon_pixmap == None) { XtSetArg(args[0], XtNiconPixmap, XCreateBitmapFromData(XtDisplay(toplevel), XtScreen(toplevel)->root, (char *)xpppload_bits, xpppload_width, xpppload_height)); XtSetValues (toplevel, args, ONE); } if (resources.show_label) { pane = XtCreateManagedWidget ("paned", panedWidgetClass, toplevel, NULL, ZERO); XtSetArg (args[0], XtNlabel, "uninitialized"); label_wid = XtCreateManagedWidget ("label", labelWidgetClass, pane, args, 1); load_parent = pane; Xpppoem_show_labeL= 1; } else { Xpppoem_show_labeL= 0; load_parent = toplevel; } load = XtCreateManagedWidget ("load", stripChartWidgetClass, load_parent, NULL, ZERO); XtSetArg (args[0], XtNbackground, &bgcolor); XtGetValues(toplevel, args, ONE); if (resources.show_graph) { Xpppoem_show_grapH= 1; } else { Xpppoem_show_grapH= 0; } if (resources.online_color) { char *colorname; unsigned rgb= 0xa0a0a0; colorname= resources.online_color; namein.addr = colorname; namein.size = strlen(colorname) + 1; XtConvert(load, XtRString, &namein, XtRPixel, &pixelout); if (!pixelout.addr) { fprintf(stderr, "could not convert online color `%s'.\n",colorname); exit(1); } onlinecolor = *(Pixel*)(pixelout.addr); if(0 && colorname[0]=='#') { sscanf(colorname+1,"%X",&rgb); } else { rgb= Xpppoem_pixel_to_rgb(load,onlinecolor,0); /* would work too : rgb= Xpppoem_colorname_to_rgb(load,colorname,0); */ Xpppoem_show_heat(load,(double) rgb,1); busy_color_enable= 1; } } else onlinecolor = bgcolor; if (resources.busy_color) { char *cpt; unsigned rgb= 0xff0000; cpt= resources.busy_color; if(strcmp(cpt,"off")==0) { Xpppoem_do_show_heaT= 0; } else { rgb= Xpppoem_colorname_to_rgb(load,resources.busy_color,0); Xpppoem_show_heat(load,(double) rgb,2); Xpppoem_do_show_heaT= 1; } } if (resources.offline_color) { namein.addr = resources.offline_color; namein.size = strlen(resources.offline_color) + 1; XtConvert(load, XtRString, &namein, XtRPixel, &pixelout); if (!pixelout.addr) { fprintf(stderr, "could not convert offline color `%s'.\n", resources.offline_color); exit(1); } offlinecolor = *(Pixel*)(pixelout.addr); } else offlinecolor = bgcolor; if (resources.cps_range) { double value= 0.0; sscanf(resources.cps_range,"%lf",&value); if(value>1.0) Xpppoem_heat_rangE= value; } if (resources.show) { strcpy(hargv_d[0],"-show"); strncpy(hargv_d[1],resources.show,Xpppoem_arg_leN-1); hargv_d[1][Xpppoem_arg_leN-1]= 0; ret= Pppoem_arg_interpreter(PppoemM,2,hargv,0); if(ret<=0) exit(1); } if (resources.busy_samples) { double value= 0.0; sscanf(resources.busy_samples,"%lf",&value); if(value>=1.0) Xpppoem_busy_sampleS= value; } if (resources.unit) { double value= 0.0; sscanf(resources.unit,"%lf",&value); if(Xpppoem_uniT>1.0) Xpppoem_uniT= value; } if (resources.dev_name) { strcpy(hargv_d[0],"-dev_name"); strncpy(hargv_d[1],resources.dev_name,Xpppoem_arg_leN-1); hargv_d[1][Xpppoem_arg_leN-1]= 0; ret= Pppoem_arg_interpreter(PppoemM,2,hargv,0); if(ret<=0) exit(1); } if (resources.pretend) { strcpy(hargv_d[0],"-pretend"); strncpy(hargv_d[1],resources.pretend,Xpppoem_arg_leN-1); hargv_d[1][Xpppoem_arg_leN-1]= 0; ret= Pppoem_arg_interpreter(PppoemM,2,hargv,0); if(ret<=0) exit(1); } if (resources.listen_stdin) { strcpy(hargv_d[0],"-listen_stdin"); strncpy(hargv_d[1],resources.listen_stdin,Xpppoem_arg_leN-1); hargv_d[1][Xpppoem_arg_leN-1]= 0; ret= Pppoem_arg_interpreter(PppoemM,2,hargv,0); if(ret<=0) exit(1); } if (resources.report) { strcpy(hargv_d[0],"-report"); strncpy(hargv_d[1],resources.report,Xpppoem_arg_leN-1); hargv_d[1][Xpppoem_arg_leN-1]= 0; ret= Pppoem_arg_interpreter(PppoemM,2,hargv,0); if(ret<=0) exit(1); } Xpppoem_start(PppoemM,0); XtAddCallback(load, XtNgetValue, Xpppoem_callback, NULL); XtRealizeWidget (toplevel); wm_delete_window = XInternAtom (XtDisplay(toplevel), "WM_DELETE_WINDOW", False); (void) XSetWMProtocols (XtDisplay(toplevel), XtWindow(toplevel), &wm_delete_window, 1); XtAppMainLoop(app_con); return 0;}int main(argc, argv) int argc; char **argv;{ Xpppoem_main(argc,argv);}static void quit (w, event, params, num_params) Widget w; XEvent *event; String *params; Cardinal *num_params;{ if (event->type == ClientMessage && event->xclient.data.l[0] != wm_delete_window) { XBell (XtDisplay(w), 0); return; } XtDestroyApplicationContext(XtWidgetToApplicationContext(w)); exit (0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -