diff ce35d395ee8cbe7a6340429a93a16322f0feab93 uncommitted --- a/sys/src/cmd/paint.c +++ b/sys/src/cmd/paint.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -462,7 +463,50 @@ update(nil); } +Biobuf* +palopen(int mode) +{ + char *home, path[128]; + + if((home = getenv("home")) == nil) + return nil; + snprint(path, sizeof(path), "%s/lib/paintpal", home); + free(home); + return Bopen(path, mode); +} + void +savepal(void) +{ + Biobuf *bfd; + int i; + + if((bfd = palopen(OWRITE)) == nil) + return; + for(i = 0; i < nelem(c64); i++) + Bprint(bfd, "%#06x\n", c64[i]); + Bterm(bfd); +} + +void +loadpal(void) +{ + Biobuf *bfd; + char *ln; + int i; + + if((bfd = palopen(OREAD)) == nil) + return; + for(i = 0; i < nelem(c64); i++){ + if((ln = Brdstr(bfd, '\n', 1)) == nil) + break; + c64[i] = strtol(ln, nil, 0); + free(ln); + } + Bterm(bfd); +} + +void drawpal(void) { Rectangle r, rr; @@ -549,6 +593,7 @@ c64[i] = c; freeimage(pal[i]); pal[i] = allocimage(display, Rect(0, 0, 1, 1), RGB24, 1, c<<8|0xff); + savepal(); drawpal(); } } @@ -636,6 +681,7 @@ } /* palette initialization */ + loadpal(); for(i=0; i