]> git.lizzy.rs Git - plan9front.git/commitdiff
libmemdraw: change memimageinit() to return integer error (for kernel), minor cleanups
authorcinap_lenrek <cinap_lenrek@felloff.net>
Tue, 12 Nov 2013 20:42:05 +0000 (21:42 +0100)
committercinap_lenrek <cinap_lenrek@felloff.net>
Tue, 12 Nov 2013 20:42:05 +0000 (21:42 +0100)
sys/include/memdraw.h
sys/man/2/memdraw
sys/src/libmemdraw/alloc.c
sys/src/libmemdraw/draw.c
sys/src/libmemdraw/fillpoly.c

index 6e527696ae9f16804cd0cfaea280400d1c40e4c9..997cbbea5ef53015da06368b8c87724ffbebcc0e 100644 (file)
@@ -149,7 +149,7 @@ extern void memarc(Memimage*, Point, int, int, int, Memimage*, Point, int, int,
 extern Rectangle       memlinebbox(Point, Point, int, int, int);
 extern int     memlineendsize(int);
 extern void    _memmkcmap(void);
-extern void    memimageinit(void);
+extern int     memimageinit(void);
 
 /*
  * Subfont management
index ac1b739616488c6b9f419b071387dd97474968c2..df68b699d4a456f54f266cab58b299f453be3a7c 100644 (file)
@@ -94,7 +94,7 @@ int   drawdebug;
 .PP
 .ft L
 .nf
-void   memimageinit(void)
+int    memimageinit(void)
 ulong* wordaddr(Memimage *i, Point p)
 uchar* byteaddr(Memimage *i, Point p)
 void   memimagemove(void *from, void *to)
@@ -213,7 +213,8 @@ as well as the replicated solid color images
 and
 .BR memwhite .
 It should be called before referring to any of these images
-and before calling any of the other library functions.
+and before calling any of the other library functions. It
+returns non-zero on error.
 .PP
 Each 
 .B Memimage
index d2852c3c48191e8721480e581fb849bad173c81e..aa3597f71229a49e6dcf903fd399e90aa11374d1 100644 (file)
@@ -121,7 +121,7 @@ freememimage(Memimage *i)
 {
        if(i == nil)
                return;
-       if(i->data->ref-- == 1 && i->data->allocd){
+       if(--i->data->ref == 0 && i->data->allocd){
                if(i->data->base)
                        poolfree(imagmem, i->data->base);
                free(i->data);
index 5a15e4dae602992f1dc8e5afe780f367315adb91..96cb01e442aa25ba00243c618d87588ac036658b 100644 (file)
@@ -6,7 +6,6 @@
 
 extern Pool* imagmem;
 int drawdebug;
-static int     tablesbuilt;
 
 /* perfect approximation to NTSC = .299r+.587g+.114b when 0 ≤ r,g,b < 256 */
 #define RGB2K(r,g,b)   ((156763*(r)+307758*(g)+59769*(b))>>19)
@@ -54,16 +53,15 @@ Memimage *memopaque;
 
 int    _ifmt(Fmt*);
 
-void
+int
 memimageinit(void)
 {
        static int didinit = 0;
 
        if(didinit)
-               return;
-
-       didinit = 1;
+               return 0;
 
+       if(imagmem != nil)
        if(strcmp(imagmem->name, "Image") == 0 || strcmp(imagmem->name, "image") == 0)
                imagmem->move = memimagemove;
 
@@ -75,22 +73,25 @@ memimageinit(void)
        fmtinstall('b', _ifmt);
 
        memones = allocmemimage(Rect(0,0,1,1), GREY1);
+       memzeros = allocmemimage(Rect(0,0,1,1), GREY1);
+       if(memones == nil || memzeros == nil)
+               return -1;
+
        memones->flags |= Frepl;
        memones->clipr = Rect(-0x3FFFFFF, -0x3FFFFFF, 0x3FFFFFF, 0x3FFFFFF);
        *byteaddr(memones, ZP) = ~0;
 
-       memzeros = allocmemimage(Rect(0,0,1,1), GREY1);
        memzeros->flags |= Frepl;
        memzeros->clipr = Rect(-0x3FFFFFF, -0x3FFFFFF, 0x3FFFFFF, 0x3FFFFFF);
        *byteaddr(memzeros, ZP) = 0;
 
-       if(memones == nil || memzeros == nil)
-               assert(0 /*cannot initialize memimage library */);      /* RSC BUG */
-
        memwhite = memones;
        memblack = memzeros;
        memopaque = memones;
        memtransparent = memzeros;
+
+       didinit = 1;
+       return 0;
 }
 
 static ulong imgtorgba(Memimage*, ulong);
@@ -354,13 +355,6 @@ mktables(void)
 {
        int i, j, mask, sh, small;
                
-       if(tablesbuilt)
-               return;
-
-       fmtinstall('R', Rfmt);
-       fmtinstall('P', Pfmt);
-       tablesbuilt = 1;
-
        /* bit replication up to 8 bits */
        for(i=0; i<256; i++){
                for(j=0; j<=8; j++){    /* j <= 8 [sic] */
index 6d5370a9a135dc0e56c13421740e5c4a4abf2c61..6ecccc0a1e5776e7e3c7b84436b6118daa37558e 100644 (file)
@@ -79,7 +79,7 @@ _memfillpolysc(Memimage *dst, Point *vert, int nvert, int w, Memimage *src, Poin
        Point p0;
        int i;
 
-       if(nvert == 0)
+       if(nvert <= 0)
                return;
 
        seg = malloc((nvert+2)*sizeof(Seg*));