583 * LIST |
583 * LIST |
584 * LIST LOG |
584 * LIST LOG |
585 */ |
585 */ |
586 int cmd_list(char *buf) |
586 int cmd_list(char *buf) |
587 { |
587 { |
588 char *opt, *param, *filename, q[2], buffer[256], *copy = NULL; |
588 char *opt, *param, *filename, q[5], buffer[256], *copy = NULL; |
589 char *mode_o = NULL, *mode_n, *target_o = NULL, *target_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n; |
589 char *mode_o = NULL, *mode_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n; |
590 units_list *unit; |
590 units_list *unit; |
591 FILE *fp; |
591 FILE *fp; |
592 |
592 |
593 opt = strtok(buf, " \0"); |
593 opt = strtok(buf, " \0"); |
594 opt = strtok(NULL, " \0"); |
594 opt = strtok(NULL, " \0"); |
631 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
631 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
632 buffer[strlen(buffer) -1] = '\0'; |
632 buffer[strlen(buffer) -1] = '\0'; |
633 copy = xstrcpy(buffer); |
633 copy = xstrcpy(buffer); |
634 mode_n = strtok(buffer, ",\0"); |
634 mode_n = strtok(buffer, ",\0"); |
635 mode_n = strtok(NULL, ",\0"); |
635 mode_n = strtok(NULL, ",\0"); |
636 target_n = strtok(NULL, ",\0"); /* skip air_temp */ |
636 heater_n = strtok(NULL, ",\0"); /* skip air_temp */ |
637 target_n = strtok(NULL, ",\0"); /* skip beer temp */ |
637 heater_n = strtok(NULL, ",\0"); /* skip beer temp */ |
638 target_n = strtok(NULL, ",\0"); |
638 heater_n = strtok(NULL, ",\0"); /* skip target temp */ |
639 heater_n = strtok(NULL, ",\0"); |
639 heater_n = strtok(NULL, ",\0"); |
640 cooler_n = strtok(NULL, ",\0"); |
640 cooler_n = strtok(NULL, ",\0"); |
641 |
641 |
642 if (strncmp(mode_n, (char *)"Mode", 4)) { |
642 if (strncmp(mode_n, (char *)"Mode", 4)) { |
643 if ((q[0] != buffer[11]) || (q[1] != buffer[12])) { |
643 /* |
|
644 * Output a line each 10 minutes or if something changes. |
|
645 */ |
|
646 if ((q[0] != buffer[11]) || (q[1] != buffer[12]) || (q[3] != buffer[14])) { |
644 q[0] = buffer[11]; |
647 q[0] = buffer[11]; |
645 q[1] = buffer[12]; |
648 q[1] = buffer[12]; |
|
649 q[2] = buffer[13]; |
|
650 q[3] = buffer[14]; |
646 srv_send(copy); |
651 srv_send(copy); |
647 } else if ((mode_o && strcmp(mode_o, mode_n)) || (target_o && strcmp(target_o, target_n)) || |
652 } else if ((mode_o && strcmp(mode_o, mode_n)) || |
648 (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) { |
653 (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) { |
649 srv_send(copy); |
654 srv_send(copy); |
650 } |
655 } |
651 } |
656 } |
652 |
|
653 free(copy); |
657 free(copy); |
654 copy = NULL; |
658 copy = NULL; |
655 if (mode_o) |
659 if (mode_o) |
656 free(mode_o); |
660 free(mode_o); |
657 mode_o = xstrcpy(mode_n); |
661 mode_o = xstrcpy(mode_n); |
658 if (target_o) |
|
659 free(target_o); |
|
660 target_o = xstrcpy(target_n); |
|
661 if (heater_o) |
662 if (heater_o) |
662 free(heater_o); |
663 free(heater_o); |
663 heater_o = xstrcpy(heater_n); |
664 heater_o = xstrcpy(heater_n); |
664 if (cooler_o) |
665 if (cooler_o) |
665 free(cooler_o); |
666 free(cooler_o); |
666 cooler_o = xstrcpy(cooler_n); |
667 cooler_o = xstrcpy(cooler_n); |
667 } |
668 } |
668 } |
669 } |
|
670 if (mode_o) |
|
671 free(mode_o); |
|
672 mode_o = NULL; |
|
673 if (heater_o) |
|
674 free(heater_o); |
|
675 heater_o = NULL; |
|
676 if (cooler_o) |
|
677 free(cooler_o); |
|
678 cooler_o = NULL; |
669 free(filename); |
679 free(filename); |
670 filename = NULL; |
680 filename = NULL; |
671 srv_send((char *)"."); |
681 srv_send((char *)"."); |
672 return 1; |
682 return 1; |
673 } |
683 } |