FreeCalypso > hg > freecalypso-sw
annotate lcdemu/ximage.c @ 1012:93f4fc26b204
fc-shell: arbitrary send command implemented in one-shot mode
| author | Mychaela Falconia <falcon@ivan.Harhan.ORG> | 
|---|---|
| date | Sun, 20 Mar 2016 22:06:11 +0000 | 
| parents | 7a189b7bbd67 | 
| children | 
| rev | line source | 
|---|---|
| 906 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 1 /* | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 2 * LCDemu based on HECterm by the same author | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 3 * XImage conversion muck | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 4 */ | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 5 | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 6 #include <stdio.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 7 #include <stdint.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 8 #include <stdlib.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 9 #include <string.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 10 #include <strings.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 11 #include <X11/Xlib.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 12 #include <X11/Xresource.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 13 #include <X11/Xutil.h> | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 14 #include "globals.h" | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 15 | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 16 XImage * | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 17 convert_image_depth24(input, npix) | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 18 uint16_t *input; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 19 int npix; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 20 { | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 21 uint32_t *imgbuf; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 22 int i, in, r, g, b; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 23 XImage *img; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 24 | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 25 imgbuf = malloc(npix * 4); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 26 if (!imgbuf) { | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 27 perror("malloc"); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 28 exit(1); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 29 } | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 30 for (i = 0; i < npix; i++) { | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 31 in = input[i]; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 32 r = (in & 0xF800) << 8; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 33 g = (in & 0x07E0) << 5; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 34 b = (in & 0x001F) << 3; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 35 imgbuf[i] = r | g | b; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 36 } | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 37 img = XCreateImage(mydisplay, CopyFromParent, display_depth, ZPixmap, | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 38 0, (char *) imgbuf, npix, 1, 32, 0); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 39 if (!img) { | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 40 perror("XCreateImage"); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 41 exit(1); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 42 } | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 43 return(img); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 44 } | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 45 | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 46 init_image_conversion() | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 47 { | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 48 display_depth = DefaultDepth(mydisplay, DefaultScreen(mydisplay)); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 49 switch (display_depth) { | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 50 case 24: | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 51 convert_function = convert_image_depth24; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 52 break; | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 53 default: | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 54 fprintf(stderr, | 
| 907 
7a189b7bbd67
lcdemu: input processing implemented, compiles
 Space Falcon <falcon@ivan.Harhan.ORG> parents: 
906diff
changeset | 55 "error: fc-lcdemu has not been adapted for X11 depth != 24, yours is %d\n", | 
| 906 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 56 display_depth); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 57 exit(1); | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 58 } | 
| 
69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
 Space Falcon <falcon@ivan.Harhan.ORG> parents: diff
changeset | 59 } | 
