Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37854914
en ru br
Репозитории 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
www.altlinux.org/Changes

Группа :: Графические оболочки/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:
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin