diff options
| author | Charles Forsyth <charles.forsyth@gmail.com> | 2018-12-21 14:55:06 +0000 |
|---|---|---|
| committer | Charles Forsyth <charles.forsyth@gmail.com> | 2018-12-21 14:55:06 +0000 |
| commit | f2847740e449ea52349968e40fa4e5fb8426bb41 (patch) | |
| tree | 8f66ea2731c38fa20a34980c882929e8f7efe041 /emu/port | |
| parent | 9a6abc0c151869394091363dde0ecc082ad3ca65 (diff) | |
| parent | 811a63300c4a3c25a557a5fdb7ae46256a258f17 (diff) | |
Merged in dboddie/inferno-os (pull request #21)
Fixed compilation of 9load for x86 with modern GCC versions.
Approved-by: Charles Forsyth <charles.forsyth@gmail.com>
Diffstat (limited to 'emu/port')
| -rw-r--r-- | emu/port/win-x11a.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/emu/port/win-x11a.c b/emu/port/win-x11a.c index 4fdd295a..3670b260 100644 --- a/emu/port/win-x11a.c +++ b/emu/port/win-x11a.c @@ -313,6 +313,33 @@ copy32to32(Rectangle r) } static void +copy16to16(Rectangle r) +{ + int dx, width; + u16int *dp, *wp, *edp, *lp; + + width = Dx(r); + dx = Xsize - width; + dp = (u16int*)(gscreendata + ((r.min.y * Xsize) + r.min.x) * 2); + wp = (u16int*)(xscreendata + ((r.min.y * Xsize) + r.min.x) * 2); + edp = (u16int*)(gscreendata + ((r.max.y * Xsize) + r.max.x) * 2); + + /* The pixel format should be the same as the underlying X display (see + the xtruevisual function) unless a different channel format is + explicitly specified on the command line, so just copy the pixel data + without any processing. */ + + while(dp < edp) { + lp = dp + width; + while(dp < lp){ + *wp++ = *dp++; + } + dp += dx; + wp += dx; + } +} + +static void copy8to32(Rectangle r) { int dx, width; @@ -435,6 +462,17 @@ flushmemscreen(Rectangle r) case 32: copy32to32(r); break; + case 16: + switch(xscreendepth){ + case 16: + copy16to16(r); + break; + default: + fprint(2, "emu: bad display depth %d chan %s xscreendepth %d\n", displaydepth, + chantostr(chanbuf, displaychan), xscreendepth); + cleanexit(0); + } + break; case 8: switch(xscreendepth){ case 24: |
