+ strlcpy(needle, wificard, sizeof(needle));
+ strlcat(needle, ":", sizeof(needle));
+ fgets(buf, bufsize, fp);
+ fgets(buf, bufsize, fp);
+ fgets(buf, bufsize, fp);
+ if ((datastart = strstr(buf, needle)) != NULL) {
+ datastart = strstr(buf, ":");
+ sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &strength);
+ }
+
+ fclose(fp);
+ return smprintf("%d%%", strength);
+}
+
+static char *
+wifi_essid(const char *wificard)
+{
+ char id[IW_ESSID_MAX_SIZE+1];
+ int sockfd;
+ struct iwreq wreq;
+
+ memset(&wreq, 0, sizeof(struct iwreq));
+ wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
+ sprintf(wreq.ifr_name, wificard);
+ if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+ fprintf(stderr, "Cannot open socket for interface: %s\n", wificard);
+ return smprintf(unknowntext);
+ }
+ wreq.u.essid.pointer = id;
+ if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) {
+ fprintf(stderr, "Get ESSID ioctl failed for interface %s\n", wificard);
+ return smprintf(unknowntext);
+ }
+
+ if (strcmp((char *)wreq.u.essid.pointer, "") == 0)
+ return smprintf(unknowntext);
+ else
+ return smprintf("%s", (char *)wreq.u.essid.pointer);
+}
+
+int
+main(void)
+{
+ size_t i;
+ char status_string[1024];
+ char *res, *element;
+ struct arg argument;
+
+ /* get rid of unused functions warning */
+ if (0) { setstatus(""); battery_perc(""); cpu_perc();
+ datetime(""); disk_free(""); disk_perc("");
+ disk_total(""); disk_used(""); entropy();
+ gid(); hostname(); ip(""); load_avg();
+ ram_free(); ram_perc(); ram_used(); ram_total();
+ run_command(""); temp(""); uid(); uptime();
+ username(); vol_perc(""); wifi_perc("");
+ wifi_essid(""); }
+
+ if (!(dpy = XOpenDisplay(0x0))) {
+ fprintf(stderr, "Cannot open display!\n");
+ exit(1);
+ }
+
+ for (;;) {
+ memset(status_string, 0, sizeof(status_string));
+ for (i = 0; i < sizeof(args) / sizeof(args[0]); ++i) {
+ argument = args[i];
+ if (argument.args == NULL)
+ res = argument.func();
+ else
+ res = argument.func(argument.args);
+ element = smprintf(argument.format, res);
+ if (element == NULL) {
+ element = smprintf(unknowntext);
+ fprintf(stderr, "Failed to format output.\n");
+ }
+ strlcat(status_string, element, sizeof(status_string));
+ free(res);
+ free(element);
+ }
+
+ setstatus(status_string);
+ sleep(update_interval -1);
+ }