FreeCalypso > hg > freecalypso-sw
changeset 906:69623c4cbf6c
lcdemu: image conversion implemented for X11 depth 24
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 07 Sep 2015 10:18:39 +0000 |
parents | 841982f31be3 |
children | 7a189b7bbd67 |
files | lcdemu/Makefile lcdemu/globals.c lcdemu/globals.h lcdemu/main.c lcdemu/ximage.c |
diffstat | 5 files changed, 67 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lcdemu/Makefile Mon Sep 07 08:51:02 2015 +0000 +++ b/lcdemu/Makefile Mon Sep 07 10:18:39 2015 +0000 @@ -1,7 +1,7 @@ CC= gcc CFLAGS= -O2 PROG= fc-lcdemu -OBJS= globals.o main.o process.o window.o xrm.o +OBJS= globals.o main.o process.o window.o ximage.o xrm.o INSTBIN=/usr/local/bin all: ${PROG}
--- a/lcdemu/globals.c Mon Sep 07 08:51:02 2015 +0000 +++ b/lcdemu/globals.c Mon Sep 07 10:18:39 2015 +0000 @@ -12,6 +12,9 @@ Display *mydisplay; Window mainwindow; GC mainwingc; +int display_depth; XrmDatabase xrmdb_defaults, xrmdb_displayres, xrmdb_cmdline; XrmQuark xrmquark_topclass, xrmquark_topinstance; + +XImage *(*convert_function)();
--- a/lcdemu/globals.h Mon Sep 07 08:51:02 2015 +0000 +++ b/lcdemu/globals.h Mon Sep 07 10:18:39 2015 +0000 @@ -8,6 +8,9 @@ extern Display *mydisplay; extern Window mainwindow; extern GC mainwingc; +extern int display_depth; extern XrmDatabase xrmdb_defaults, xrmdb_displayres, xrmdb_cmdline; extern XrmQuark xrmquark_topclass, xrmquark_topinstance; + +extern XImage *(*convert_function)();
--- a/lcdemu/main.c Mon Sep 07 08:51:02 2015 +0000 +++ b/lcdemu/main.c Mon Sep 07 10:18:39 2015 +0000 @@ -19,6 +19,7 @@ XrmInitialize(); process_cmdline(argc, argv); open_display(); + init_image_conversion(); load_resources(); create_our_window(); set_initial_window_title();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lcdemu/ximage.c Mon Sep 07 10:18:39 2015 +0000 @@ -0,0 +1,59 @@ +/* + * LCDemu based on HECterm by the same author + * XImage conversion muck + */ + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <X11/Xlib.h> +#include <X11/Xresource.h> +#include <X11/Xutil.h> +#include "globals.h" + +XImage * +convert_image_depth24(input, npix) + uint16_t *input; + int npix; +{ + uint32_t *imgbuf; + int i, in, r, g, b; + XImage *img; + + imgbuf = malloc(npix * 4); + if (!imgbuf) { + perror("malloc"); + exit(1); + } + for (i = 0; i < npix; i++) { + in = input[i]; + r = (in & 0xF800) << 8; + g = (in & 0x07E0) << 5; + b = (in & 0x001F) << 3; + imgbuf[i] = r | g | b; + } + img = XCreateImage(mydisplay, CopyFromParent, display_depth, ZPixmap, + 0, (char *) imgbuf, npix, 1, 32, 0); + if (!img) { + perror("XCreateImage"); + exit(1); + } + return(img); +} + +init_image_conversion() +{ + display_depth = DefaultDepth(mydisplay, DefaultScreen(mydisplay)); + switch (display_depth) { + case 24: + convert_function = convert_image_depth24; + break; + default: + fprintf(stderr, +"error: fc-ledemu has not been adapted for X11 depth != 24, yours is %d\n", + display_depth); + exit(1); + } +}