readcolmap.c 718 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "lib9.h"
  2. #include "draw.h"
  3. #include "bio.h"
  4. static ulong
  5. getval(char **p)
  6. {
  7. ulong v;
  8. char *q;
  9. v = strtoul(*p, &q, 0);
  10. v |= v<<8;
  11. v |= v<<16;
  12. *p = q;
  13. return v;
  14. }
  15. void
  16. readcolmap(Display *d, RGB *colmap)
  17. {
  18. int i;
  19. char *p, *q;
  20. Biobuf *b;
  21. char buf[128];
  22. sprint(buf, "/dev/draw/%d/colormap", d->dirno);
  23. b = Bopen(buf, OREAD);
  24. if(b == 0)
  25. drawerror(d, "rdcolmap: can't open colormap device");
  26. for(;;) {
  27. p = Brdline(b, '\n');
  28. if(p == 0)
  29. break;
  30. i = strtoul(p, &q, 0);
  31. if(i < 0 || i > 255) {
  32. _drawprint(2, "rdcolmap: bad index\n");
  33. exits("bad");
  34. }
  35. p = q;
  36. colmap[255-i].red = getval(&p);
  37. colmap[255-i].green = getval(&p);
  38. colmap[255-i].blue = getval(&p);
  39. }
  40. Bterm(b);
  41. }