Thanks a lot mate! I really appreciate it.
Anyway, gcc returns me an error, maybe you can help me one more time.
I installed libXNVCtrl with AUR (I'm on Archlinux).
I sent you related files.

Regards

2013/1/2 Carlos Torres <vlaadbr...@gmail.com>

> you will need libXNVCtrl installed somewhere and the dev headers.
>
> http://sprunge.us/dhQI
>
> boldly ripped/based on conky source.
>
> Enjoy!
>
#define _BSD_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <strings.h>
#include <sys/time.h>
#include <time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/utsname.h>

#include <X11/Xlib.h>

#include <NVCtrl/NVCtrlLib.h>

#define CPUTEMP "/sys/class/hwmon/hwmon0/temp1_input"
#define KERCOL "\03%s\x01"
#define TEMPCOL "\02%02.0f°C\x01"
#define TIMECOL "\x03%^a %d %^b\x04 / \x03%H:%M\x01 "

char *tzpar = "Europe/Paris";

static Display *dpy;

char *
smprintf(char *fmt, ...)
{
	va_list fmtargs;
	char *ret;
	int len;

	va_start(fmtargs, fmt);
	len = vsnprintf(NULL, 0, fmt, fmtargs);
	va_end(fmtargs);

	ret = malloc(++len);
	if (ret == NULL) {
		perror("malloc");
		exit(1);
	}

	va_start(fmtargs, fmt);
	vsnprintf(ret, len, fmt, fmtargs);
	va_end(fmtargs);

	return ret;
}

void
settz(char *tzname)
{
	setenv("TZ", tzname, 1);
}

char *
mktimes(char *fmt, char *tzname)
{
	char buf[129];
	time_t tim;
	struct tm *timtm;

	memset(buf, 0, sizeof(buf));
	tim = time(NULL);
	timtm = localtime(&tim);
	if (timtm == NULL) {
		perror("localtime");
		exit(1);
	}

	if (!strftime(buf, sizeof(buf)-1, fmt, timtm)) {
		fprintf(stderr, "strftime == 0\n");
		exit(1);
	}

	return smprintf("%s", buf);
}

void
setstatus(char *str)
{
	XStoreName(dpy, DefaultRootWindow(dpy), str);
	XSync(dpy, False);
}

char*
readfile(const char *file)
{
	char line[513];
	FILE *fd;

	memset(line, 0, sizeof(line));

	fd = fopen(file, "r");
	if (fd == NULL)
		return NULL;

	if (fgets(line, sizeof(line)-1, fd) == NULL)
		return NULL;
	fclose(fd);

	return smprintf("%s", line);
}

char*
kernel(void)
{
	struct utsname unake;
	uname(&unake);
	return smprintf(KERCOL, unake.release);
}

int
getnvctrltempcelsius(void)
{
	int temp;

	if (!XNVCTRLQueryAttribute(dpy, 0, 0, NV_CTRL_GPU_CORE_TEMPERATURE, &temp)) {
		return -1;
	}

	return temp;
}

char*
gettemperature()
{
	char *co;
	co = readfile(CPUTEMP);
	if (co == NULL)
		return NULL;
	return smprintf(TEMPCOL, atof(co) / 1000);
}

int
main(void)
{
	char *status;
	char *kerv;
	char *temp;
	char *tmdat;

	if (!(dpy = XOpenDisplay(NULL))) {
		fprintf(stderr, "dwmstatusbar: cannot open display.\n");
		return 1;
	}

	for (;;sleep(30)) {
		kerv = kernel();
		int nv_temp = getnvctrltempcelsius();
		temp = gettemperature();
		tmdat = mktimes(TIMECOL, tzpar);

		status = smprintf("K:%s G:%d TCPU:%s %s", kerv, nv_temp, temp, tmdat);
		setstatus(status);
		free(kerv);
		free(temp);
		free(tmdat);
		free(status);
	}

	XCloseDisplay(dpy);

	return 0;
}

Attachment: errors.log
Description: Binary data

Reply via email to