⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpppoem.c

📁 适用于linux2.4版本内核的pppoe监控程序源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
          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,&timespan,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,&timespan,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,&timespan,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 + -