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

📄 bar.cpp

📁 cmdiag-0.2.tar.gz ( Diagnostic source )
💻 CPP
字号:
/*# Docsis cable modem diagnostics (cmdiag) ## Copyright (C) 2006-2007 Emil Penchev## This program is free software, distributed under the terms of# the GNU General Public License 2.0#*/#include <curses.h>#include <string.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include "bar.h"#include "globals.h"/* sets on or off the desired color */void Bar::set_color(int fg_color, int n_color, int on){	if (on)	{		init_pair(n_color, fg_color, fg_color);		attron(COLOR_PAIR(n_color)); 	}	else attroff(COLOR_PAIR(n_color));}/* Draws color part of the bar */void Bar::draw_part(int y, int start_pos, int end_pos){	int i = 0; 	for (i = start_pos; i < end_pos; i++)		mvwaddch(stdscr, y, i, ACS_CKBOARD);  	refresh();}string Bar::itos(int number){	stringstream ss;	string str;	ss << number;	ss >> str;		return str;} /* Helper function, draws border around the bar */void Bar::draw_border(){	int end_pos = xpos + bar_lenght;		init_pair(10, COLOR_CYAN, COLOR_BLACK);	attron(COLOR_PAIR(10)); 	for (int i = xpos; i <= end_pos; i++)		mvwaddch(stdscr, ypos+1, i, ACS_HLINE); 	for (int i = xpos; i <= end_pos; i++)		mvwaddch(stdscr, ypos-1, i, ACS_HLINE); 	mvwaddch(stdscr, ypos-1, xpos-1, ACS_ULCORNER);	mvwaddch(stdscr, ypos+1, xpos-1, ACS_LLCORNER); 	mvwaddch(stdscr, ypos-1, xpos+bar_lenght+1, ACS_URCORNER);	mvwaddch(stdscr, ypos+1, xpos+bar_lenght+1, ACS_LRCORNER); 	mvwaddch(stdscr, ypos, xpos-1, ACS_VLINE);	mvwaddch(stdscr, ypos, xpos+bar_lenght+1, ACS_VLINE);  	attroff(COLOR_PAIR(10));}/* Constructor for the bar */Bar::Bar(int x, int y, string tp, string s_meas, string e_meas, int s_mark, int e_mark, int len){	xpos = x;	ypos = y;		type = new string(tp);	st_mark_measure = new string(s_meas);	end_mark_measure =  new string(e_meas);		bar_lenght = len;	st_mark = s_mark;	end_mark = e_mark; 	level = 0;}void Bar::Draw(){		mvwaddstr(stdscr, ypos-2, xpos, type->c_str()); 	//Print Start mark	string tmp_mark(itos(st_mark));	tmp_mark = tmp_mark + *st_mark_measure;	mvwaddstr(stdscr, ypos+2, xpos, tmp_mark.c_str());		//Print End Mark	tmp_mark = itos(end_mark);	tmp_mark = tmp_mark + *end_mark_measure; 	mvwaddstr(stdscr, ypos+2, xpos+bar_lenght - 5, tmp_mark.c_str()); 	// Draw empty bar	attron(A_BOLD);	set_color(BLACK, 12, 1);	draw_part(ypos, xpos, xpos + bar_lenght);	set_color(BLACK, 12, 0); 	attroff(A_BOLD);		refresh();}void Bar::DataUpdate(int lev){	int draw_lenght = 0;	//how much we must draw	int min_cell_div = 0;	// this is in bits	int bits_s = 0;			//performance in bit rate	int nres = 0;	string str_lev;			//stores data to be printted on the screen	string measure_unit;	//bps kbs Mpbs	string emptystr = "               ";			if (lev > level) 	{		if (level == 0) 			level = lev;		// erase bar contents		attron(A_BOLD);		set_color(BLACK, 12, 1);		draw_part(ypos, xpos, xpos + bar_lenght);		set_color(BLACK, 12, 0);		min_cell_div = 12500;		nres = ((lev-level) * 8) / min_cell_div;		bits_s = (lev - level) * 8;		bits_s /= 1000; 		measure_unit = "kbps"; 		if (nres < 1) 			nres = 1;		if (nres > DAT_BAR_LENGHT )			nres = DAT_BAR_LENGHT;		draw_lenght = xpos + nres;		level = lev;		// draw update		set_color(GREEN, 3, 1); //On		draw_part(ypos, xpos, draw_lenght);		set_color(GREEN, 3, 0); //Off		attroff(A_BOLD);		str_lev = itos(bits_s);		str_lev = str_lev + " ";		str_lev = str_lev + measure_unit;		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, emptystr.c_str());		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, str_lev.c_str());	}	else if ((lev < level) || (lev == 0)) 	{		// erase bar contents		attron(A_BOLD);		set_color(BLACK, 12, 1);		draw_part(ypos, xpos, xpos + bar_lenght);		set_color(BLACK, 12, 0);		attroff(A_BOLD);		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, emptystr.c_str());		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, "0 kbps");	}	refresh();}void Bar::RxUpdate(int lev){	int draw_lenght = 0;	//how much we must draw	string str_lev;		    //stores data to be printted on the screen	string emptystr = "               ";	string measure_unit = "dBmV";	int rxpower = lev;		if (lev != level) 	{		if (level == 0) 			level = lev;		// erase bar contents		attron(A_BOLD);		set_color(BLACK, 12, 1);		draw_part(ypos, xpos, xpos + bar_lenght);		set_color(BLACK, 12, 0);		if (lev > DAT_BAR_LENGHT ) 			rxpower = DAT_BAR_LENGHT;		draw_lenght = xpos + rxpower;		level = lev;		// draw update		set_color(GREEN, 3, 1); //On		draw_part(ypos, xpos, draw_lenght);		set_color(GREEN, 3, 0); //Off		attroff(A_BOLD);		str_lev = itos(rxpower);		str_lev = str_lev + " ";		str_lev = str_lev + measure_unit;		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, emptystr.c_str());		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, str_lev.c_str());	}	/*else if ((lev < level) || (lev == 0)) {		// erase bar contents		attron(A_BOLD);		set_color(BLACK, 12, 1);		draw_part(ypos, xpos, xpos + bar_lenght);		set_color(BLACK, 12, 0);		attroff(A_BOLD);		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, emptystr.c_str());	}*/		refresh();}// Unused method for the FEC counters/*void Bar::CodeWordsUpdate(int ncwords){	int draw_lenght = 0;	//how much we must draw	string str_cwords;      //stores data to be printted on the screen	string emptystr = "               ";	string measure_unit = "Code Words";	int code_words = ncwords;		if (level != ncwords)	{		if (level == 0)			level = ncwords;		// erase bar contents		attron(A_BOLD);		set_color(BLACK, 12, 1);		draw_part(ypos, xpos, xpos + bar_lenght);		set_color(BLACK, 12, 0);		if (ncwords > DAT_BAR_LENGHT ) 			code_words = DAT_BAR_LENGHT;		draw_lenght = xpos + code_words;		level = ncwords;		// draw update		set_color(GREEN, 3, 1); //On		draw_part(ypos, xpos, draw_lenght);		set_color(GREEN, 3, 0); //Off		attroff(A_BOLD);		str_cwords = itos(code_words);		str_cwords = str_cwords + " ";		str_cwords = str_cwords + measure_unit;		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, emptystr.c_str());		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, str_cwords.c_str());	}	else if ((code_words < level) || (code_words == 0)) 	{		// erase bar contents		attron(A_BOLD);		set_color(BLACK, 12, 1);		draw_part(ypos, xpos, xpos + bar_lenght);		set_color(BLACK, 12, 0);		attroff(A_BOLD);		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, emptystr.c_str());		mvwaddstr(stdscr, ypos, xpos + bar_lenght + 1, "0 Code Words");	}	refresh();}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -