int getrgb (char *line, int rgb[], int color_model) { int n, count; count = slash_count (line); if (count == 3) { /* c/m/y/k */ double cmyk[4]; n = sscanf (line, "%lf/%lf/%lf/%lf", &cmyk[0], &cmyk[1], &cmyk[2], &cmyk[3]); if (n != 4 || check_cmyk (cmyk)) return (TRUE); cmyk_to_rgb (rgb, cmyk); return (FALSE); } if (count == 2) { /* r/g/b or h/s/v */ if (color_model == RGB) { /* r/g/b */ n = sscanf (line, "%d/%d/%d", &rgb[0], &rgb[1], &rgb[2]); if (n != 3 || check_rgb (rgb)) return (TRUE); } else { /* h/s/v */ double h, s, v; n = sscanf (line, "%lf/%lf/%lf", &h, &s, &v); if (n != 3 || check_hsv (h, s, v)) return (TRUE); hsv_to_rgb (rgb, h, s, v); } return (FALSE); } if (count == 0) { /* gray */ n = sscanf (line, "%d", &rgb[0]); rgb[1] = rgb[2] = rgb[0]; if (n != 1 || check_rgb (rgb)) return (TRUE); return (FALSE); } /* Get here if there is a problem */ return (TRUE); }
void dir_cnt_up(dir_cnt *d) { dir_cnt_clean(d); int sc = slash_count(d->path, d->plen); if(sc <= 2) { d->plen = 1; strcpy(d->path, "/"); dir_cnt_reload(d); return; } if(d->path[d->plen - 1] == '/') sc--; int tmpsc = 0; for(int n = 0; n < d->plen; n++) { if(d->path[n] == '/') tmpsc++; if(tmpsc == sc) { d->path[n + 1 ] = '\0'; d->plen = n + 1; break; } } dir_cnt_reload(d); }