#define _POSIX_C_SOURCE 200809L #include #include #include #include #include #include "log.h" #include "util.h" int wrap(int i, int max) { return ((i % max) + max) % max; } uint32_t parse_color(const char *color) { if (color[0] == '#') { ++color; } int len = strlen(color); if (len != 6 && len != 8) { sway_log(SWAY_DEBUG, "Invalid color %s, defaulting to color 0xFFFFFFFF", color); return 0xFFFFFFFF; } uint32_t res = (uint32_t)strtoul(color, NULL, 16); if (strlen(color) == 6) { res = (res << 8) | 0xFF; } return res; } bool parse_boolean(const char *boolean, bool current) { if (strcasecmp(boolean, "1") == 0 || strcasecmp(boolean, "yes") == 0 || strcasecmp(boolean, "on") == 0 || strcasecmp(boolean, "true") == 0 || strcasecmp(boolean, "enable") == 0 || strcasecmp(boolean, "enabled") == 0 || strcasecmp(boolean, "active") == 0) { return true; } else if (strcasecmp(boolean, "toggle") == 0) { return !current; } // All other values are false to match i3 return false; } float parse_float(const char *value) { errno = 0; char *end; float flt = strtof(value, &end); if (*end || errno) { sway_log(SWAY_DEBUG, "Invalid float value '%s', defaulting to NAN", value); return NAN; } return flt; }