Репозитории ALT
S: | 3.4.2-alt1 |
5.1: | 1.2.38pre1-alt1 |
4.1: | 1.2.35-alt2.1 |
4.0: | 1.2.32-alt2.1 |
3.0: | 1.2.23-alt1 |
+backports: | 1.2.30-alt1.M30.1 |
Группа :: Графические оболочки/Icewm
Пакет: icewm
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: icewm-alt-applets.patch
Скачать
Скачать
icewm/src/acpustatus.cc | 72 +++++++++++++++++++++++++++++++++++++++++-----
icewm/src/acpustatus.h | 2 +
2 files changed, 66 insertions(+), 8 deletions(-)
diff --git a/icewm/src/acpustatus.cc b/icewm/src/acpustatus.cc
index 33b1070..2444f83 100644
--- a/icewm/src/acpustatus.cc
+++ b/icewm/src/acpustatus.cc
@@ -205,17 +205,29 @@ bool CPUStatus::handleTimer(YTimer *t) {
void CPUStatus::updateToolTip() {
#ifdef linux
- char load[31];
+ char load[31], ram[31], swap[31], temp[31], freq[31];
struct sysinfo sys;
- double l1, l5, l15;
+ float l1, l5, l15, tr, fr, ts, fs;
sysinfo(&sys);
- l1 = sys.loads[0] / 65536.0;
- l5 = sys.loads[1] / 65536.0;
- l15 = sys.loads[2] / 65536.0;
- sprintf(load, "%3.2f %3.2f %3.2f, %d",
- l1, l5, l15, sys.procs);
- char *loadmsg = strJoin(_("CPU Load: "), load, _(" processes."), NULL);
+ l1 = (float)sys.loads[0] / 65536.0;
+ l5 = (float)sys.loads[1] / 65536.0;
+ l15 = (float)sys.loads[2] / 65536.0;
+ sprintf(load, "%3.2f %3.2f %3.2f, %d", l1, l5, l15, sys.procs);
+ tr =(float)sys.totalram * (float)sys.mem_unit / 1048576.0;
+ fr =(float)sys.freeram * (float)sys.mem_unit / 1048576.0;;
+ sprintf(ram, "%5.2f/%.2fM", tr, fr);
+ ts =(float)sys.totalswap * (float)sys.mem_unit / 1048576.0;
+ fs =(float)sys.freeswap * (float)sys.mem_unit / 1048576.0;
+ sprintf(swap, "%.2f/%.2fM", ts, fs);
+ getTemp(temp, sizeof(temp)/sizeof(char));
+ sprintf(freq, "%.3fGHz", getFreq(0) / 1e6);
+ char *loadmsg = strJoin(_("CPU Load: "), load,
+ "\n", _("Ram: "), ram,
+ "\n", _("Swap: "), swap,
+ "\n", _("Temp: "), temp,
+ "\n", _("Freq: "), freq,
+ NULL);
setToolTip(loadmsg);
delete [] loadmsg;
#elif defined HAVE_GETLOADAVG2
@@ -253,6 +265,50 @@ void CPUStatus::updateStatus() {
repaint();
}
+int CPUStatus::getTemp(char* tempbuf, int buflen) {
+ int retbuflen = 0;
+ char namebuf[64];
+ char buf[64];
+
+ memset(tempbuf, 0, buflen);
+ for (int thr = 0 ; thr < 64; thr++) {
+ int fd, seglen;
+ sprintf(namebuf,"/proc/acpi/thermal_zone/THR%d/temperature", thr);
+ fd = open(namebuf, O_RDONLY);
+ if(fd != -1){
+ int len = read(fd, buf, sizeof(buf) - 1);
+ buf[len-1] = '\0';
+ seglen =strlen(buf + len - 7);
+ if (retbuflen + seglen >= buflen) {
+ retbuflen =-retbuflen;
+ close(fd);
+ break;
+ }
+ retbuflen += seglen;
+ strncat(tempbuf, buf + len - 7, seglen);
+ close(fd);
+ }
+ }
+ return(retbuflen);
+}
+
+float CPUStatus::getFreq(unsigned int cpu) {
+ char buf[16], namebuf[64];
+ int fd;
+ float freq = 1e6;
+
+ sprintf(namebuf,"/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq", cpu);
+ fd = open(namebuf, O_RDONLY);
+ if (fd != -1) {
+ int len = read(fd, buf, sizeof(buf) - 1);
+ buf[len-1] = '\0';
+ sscanf(buf,"%f",&freq);
+ close(fd);
+ }
+ return(freq);
+}
+
+
void CPUStatus::getStatus() {
#ifdef linux
char *p, buf[4096];
diff --git a/icewm/src/acpustatus.h b/icewm/src/acpustatus.h
index 4bfab85..f2c71c9 100644
--- a/icewm/src/acpustatus.h
+++ b/icewm/src/acpustatus.h
@@ -28,6 +28,8 @@ public:
void updateStatus();
void getStatus();
+ int getTemp(char* tempbuf, int buflen);
+ float getFreq(unsigned int cpu);
void updateToolTip();
private: