1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <stdio.h>
#include "block.h"
#define ICON_MEM " "
#define FG "#222222"
#define BG "#95b18b99"
#define get_mem_val(n)\
for(n = 0; (c = fgetc(meminfo)) != '\n';)\
if (c >= '0' && c <= '9')\
n = 10 * n + (c - '0')
#define jmpl(n) fseek(meminfo,29*(n-1),0)
FILE *meminfo;
int high_mem_p,
mem_delay_val = 30,
mem_delay = 30;
char mem_str[15];
void mem(void)
{
if (mem_delay++ < mem_delay_val) goto show_stat;
else mem_delay = 0;
if (!meminfo) meminfo = fopen("/proc/meminfo","r");
int c, mem, total, free, buffers,
cached, shared, reclaim;
jmpl(1); get_mem_val(total);
jmpl(2); get_mem_val(free);
jmpl(4); get_mem_val(buffers);
jmpl(5); get_mem_val(cached);
jmpl(23); get_mem_val(shared);
jmpl(26); get_mem_val(reclaim);
mem = total + reclaim - (free+buffers+cached+shared);
high_mem_p = (60*total/100);
if (mem > high_mem_p) mem_delay_val = 2;
else mem_delay_val = 30;
mem /= 1024;
snprintf(mem_str,15,ICON_MEM"%5d MiB",mem);
show_stat:
if (mem_delay_val == 2) block(mem_str,FG,BG,BG);
}
|