status-temp/temp.c
author Stiletto <blasux@blasux.ru>
Wed, 10 Dec 2014 20:30:53 +0400
changeset 12 ae09261c22e3
permissions -rw-r--r--
Temperature applet
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     1
#include <stdio.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     2
#include <stdlib.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     3
#include <math.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     4
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     5
#include <sys/types.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     6
#include <sys/stat.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     7
#include <fcntl.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     8
#include <assert.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     9
#include <string.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    10
#include <limits.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    11
#include <unistd.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    12
#include <errno.h>
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    13
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    14
#include "config.h"
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    15
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    16
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    17
int catint(char *name) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    18
    FILE* f = fopen(name, "r");
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    19
    int i = 0;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    20
    if (fscanf(f, "%d", &i) != 1)
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    21
        i = -1;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    22
    fclose(f);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    23
    return i;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    24
}
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    25
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    26
char *color_stop;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    27
char *color_red;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    28
char *color_orange;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    29
char *color_green;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    30
char *color_none;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    31
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    32
char *color(int low,int mid,int rev,int value) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    33
    if (value>mid) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    34
        return rev ? color_red : color_green;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    35
    } else if (value>low) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    36
        return color_orange;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    37
    }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    38
    return rev ? color_green : color_red;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    39
}
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    40
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    41
int main(int argc, char *argv[]) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    42
    if (argc<=2) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    43
        fprintf(stderr, "Usage: %s <term|pango> <sensor1> [sensor2] ...\n", argv[0]);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    44
        fflush(stderr);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    45
        return 1;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    46
    }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    47
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    48
    char *color;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    49
    if (!strcmp(argv[1],"term")) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    50
        color_stop = "\x1b[0m";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    51
        color_red = "\x1b[1;31m";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    52
        color_green = "\x1b[1;32m";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    53
        color_orange = "\x1b[1;33m";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    54
        color_none = color_stop;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    55
    } else if (!strcmp(argv[1],"pango")) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    56
        color_stop = "</span>";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    57
        color_red = "<span color='#f33'>";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    58
        color_green = "<span color='#0f0'>";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    59
        color_orange = "<span color='#fa0'>";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    60
        color_none = "<span>";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    61
    } else {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    62
        color_stop = color_red = color_green = color_orange = color_none = "";
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    63
    }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    64
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    65
    int sleeptime = UPDATE_PERIOD;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    66
    int alertflash = 1;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    67
    while (1) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    68
        int i;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    69
        int maxtemp = 0;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    70
        for (i=2;i<argc;i++) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    71
            int temp = catint(argv[i]);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    72
            if (temp > maxtemp)
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    73
                maxtemp = temp;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    74
        }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    75
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    76
        float ctemp = maxtemp/1000;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    77
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    78
        if (ctemp <= GREEN_VALUE)
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    79
            color = color_green;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    80
        else if (ctemp >= RED_VALUE)
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    81
            color = color_red;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    82
        else if (ctemp >= ORANGE_VALUE)
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    83
            color = color_orange;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    84
        else
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    85
            color = color_none;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    86
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    87
#ifdef FLASH_AFTER
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    88
        if (ctemp >= FLASH_AFTER) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    89
            sleeptime = 1;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    90
            alertflash = !alertflash;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    91
        } else {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    92
            sleeptime = UPDATE_PERIOD;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    93
            alertflash = 1;
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    94
        }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    95
#endif
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    96
        if (alertflash) {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    97
            printf("%s%2.1f%s\n",color, ctemp, color_stop);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    98
        } else {
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    99
            int len = snprintf(NULL, 0, "%2.1f", ctemp);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   100
            for (i=0; i<len; i++)
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   101
                printf(" ");
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   102
            printf("\n");
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   103
        }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   104
        fflush(stdout);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   105
        sleep(sleeptime);
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   106
    }
ae09261c22e3 Temperature applet
Stiletto <blasux@blasux.ru>
parents:
diff changeset
   107
}