devdraw.ed - vx32 - Local 9vx git repository for patches.
(HTM) git clone git://r-36.net/vx32
(DIR) Log
(DIR) Files
(DIR) Refs
---
devdraw.ed (2351B)
---
1 /^drawgen/ s/char\*, Dirtab\*, int,/char *_, Dirtab *__, int ___,/
2 ,s/(Memimage\*,/(Memimage *m,/
3 ,s/(next = ds->next)/(&)/
4 ,s/(next = d->next)/(&)/
5 ,s/(next = cs->next)/(&)/
6 /^makescreenimage/+2i
7 void *X;
8 .
9 /attachscreen/ s/);/, \&X);/
10 /allocmemimaged/ s/md)/md, X)/
11 ,s/(r = cl->refresh)/(&)/
12 /^drawwrite/ s/vlong)/vlong _)/
13 g/SET(s,q,p)/d
14 g/USED/d
15 g/^ int s;/d
16 /screen.h"/a
17
18 #define blankscreen(x)
19 #define ishwimage(x) (0)
20 .
21 /^drawlookupscreen/;#
22 / return 0/ s/return 0/for(;;)/
23 g/Edepth/d
24 /l = dimage->image;/d
25 -1i
26 l = dimage->image;
27 dimage->dscreen = nil; /* paranoia */
28 dimage->image = nil;
29 .
30 /^drawattach/;#
31 /initscreenimage/s/(.*)/(!conf.monitor || !initscreenimage())/
32 /freememimage(dimage->image);/ s/dimage->image/l/
33 ,s/dunlock/drawqunlock/g
34 ,s/candlock/drawcanqlock/g
35 ,s/dlock(/drawqlock(/g
36 ,s;MACHP(0)->ticks;msec()/1000;g
37 /^drawqlock/-1 s/static //
38 /^drawqunlock/-1 s/static //
39 /^drawcanqlock/-1 s/static //
40 $a
41
42 /* why is this here? why can't caller use drawqlock himself? */
43 void
44 drawflushr(Rectangle r)
45 {
46 drawqlock();
47 flushmemscreen(r);
48 drawqunlock();
49 }
50
51 void
52 drawreplacescreenimage(Memimage *m)
53 {
54 int i;
55 DImage *di;
56
57 if(screendimage == nil)
58 return;
59
60 /*
61 * Replace the screen image because the screen
62 * was resized. Clients still have references to the
63 * old screen image, so we can't free it just yet.
64 */
65 drawqlock();
66 di = allocdimage(m);
67 if(di == nil){
68 print("no memory to replace screen image\n");
69 freememimage(m);
70 drawqunlock();
71 return;
72 }
73
74 /* Replace old screen image in global name lookup. */
75 for(i=0; i<sdraw.nname; i++){
76 if(sdraw.name[i].dimage == screendimage)
77 if(sdraw.name[i].client == nil){
78 sdraw.name[i].dimage = di;
79 break;
80 }
81 }
82
83 drawfreedimage(screendimage);
84 screendimage = di;
85 screenimage = m;
86
87 /*
88 * Every client, when it starts, gets a copy of the
89 * screen image as image 0. Clients only use it
90 * for drawing if there is no /dev/winname, but
91 * this /dev/draw provides a winname (early ones
92 * didn't; winname originated in rio), so the
93 * image only ends up used to find the screen
94 * resolution and pixel format during initialization.
95 * Silently remove the now-outdated image 0s.
96 */
97 for(i=0; i<sdraw.nclient; i++){
98 if(sdraw.client[i] && !waserror()){
99 drawuninstall(sdraw.client[i], 0);
100 poperror();
101 }
102 }
103
104 drawqunlock();
105 mouseresize();
106 }
107 .