- int perc;
- long total, free, buffers, cached;
- FILE *fp;
-
- /* open meminfo file */
- if (!(fp = fopen("/proc/meminfo", "r"))) {
- fprintf(stderr, "Error opening meminfo file.");
- return smprintf("n/a");
- }
-
- /* read the values */
- fscanf(fp, "MemTotal: %ld kB\n", &total);
- fscanf(fp, "MemFree: %ld kB\n", &free);
- fscanf(fp, "MemAvailable: %ld kB\nBuffers: %ld kB\n", &buffers, &buffers);
- fscanf(fp, "Cached: %ld kB\n", &cached);
-
- /* close meminfo file */
- fclose(fp);
-
- /* calculate percentage */
- perc = 100 * ((total - free) - (buffers + cached)) / total;
-
- /* return perc as string */
- return smprintf("%d%%", perc);
+ int perc;
+ long total, free, buffers, cached;
+ FILE *fp;
+
+ /* open meminfo file */
+ if (!(fp = fopen("/proc/meminfo", "r"))) {
+ fprintf(stderr, "Error opening meminfo file.");
+ return smprintf("n/a");
+ }
+
+ /* read the values */
+ fscanf(fp, "MemTotal: %ld kB\n", &total);
+ fscanf(fp, "MemFree: %ld kB\n", &free);
+ fscanf(fp, "MemAvailable: %ld kB\nBuffers: %ld kB\n", &buffers, &buffers);
+ fscanf(fp, "Cached: %ld kB\n", &cached);
+
+ /* close meminfo file */
+ fclose(fp);
+
+ /* calculate percentage */
+ perc = 100 * ((total - free) - (buffers + cached)) / total;
+
+ /* return perc as string */
+ return smprintf("%d%%", perc);
+}
+
+/* ram total */
+char *
+ram_total(const char *null)
+{
+ long total;
+ FILE *fp;
+
+ /* open meminfo file */
+ if (!(fp = fopen("/proc/meminfo", "r"))) {
+ fprintf(stderr, "Error opening meminfo file.");
+ return smprintf("n/a");
+ }
+
+ /* read the values */
+ fscanf(fp, "MemTotal: %ld kB\n", &total);
+
+ /* close meminfo file */
+ fclose(fp);
+
+ /* return total ram as string */
+ return smprintf("%f", (float)total / 1024 / 1024);
+}
+
+/* ram used */
+char *
+ram_used(const char *null)
+{
+ long free, total, buffers, cached, used;
+ FILE *fp;
+
+ /* open meminfo file */
+ if (!(fp = fopen("/proc/meminfo", "r"))) {
+ fprintf(stderr, "Error opening meminfo file.");
+ return smprintf("n/a");
+ }
+
+ /* read the values */
+ fscanf(fp, "MemTotal: %ld kB\n", &total);
+ fscanf(fp, "MemFree: %ld kB\n", &free);
+ fscanf(fp, "MemAvailable: %ld kB\nBuffers: %ld kB\n", &buffers, &buffers);
+ fscanf(fp, "Cached: %ld kB\n", &cached);
+
+ /* close meminfo file */
+ fclose(fp);
+
+ /* calculate used */
+ used = total - free - buffers - cached;
+
+ /* return used ram as string */
+ return smprintf("%f", (float)used / 1024 / 1024);
+}
+
+/* custom shell command */
+char *
+run_command(const char* command)
+{
+ int good;
+ FILE *fp;
+ char buffer[64];
+
+ /* try to open the command output */
+ if (!(fp = popen(command, "r"))) {
+ fprintf(stderr, "Could not get command output for: %s.\n", command);
+ return smprintf("n/a");
+ }
+
+ /* get command output text, save it to buffer */
+ fgets(buffer, sizeof(buffer) - 1, fp);
+
+ /* close it again */
+ pclose(fp);
+
+ /* add nullchar at the end */
+ for (int i = 0 ; i != sizeof(buffer); i++) {
+ if (buffer[i] == '\0') {
+ good = 1;
+ break;
+ }
+ }
+ if (good) {
+ buffer[strlen(buffer) - 1] = '\0';
+ }
+
+ /* return the output */
+ return smprintf("%s", buffer);