FreeCalypso > hg > freecalypso-tools
changeset 393:d3ee0de6b12e
lcdemu removed from this repository, moved to freecalypso-ui-dev
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 15 Mar 2018 00:36:07 +0000 |
parents | 01c97de62dda |
children | a626f0ef542a |
files | .hgignore lcdemu/Makefile lcdemu/globals.c lcdemu/globals.h lcdemu/main.c lcdemu/process.c lcdemu/window.c lcdemu/ximage.c lcdemu/xrm.c |
diffstat | 9 files changed, 0 insertions(+), 642 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Sun Mar 11 23:24:52 2018 +0000 +++ b/.hgignore Thu Mar 15 00:36:07 2018 +0000 @@ -17,8 +17,6 @@ ^ffstools/tiffs-wrappers/mokoffs$ ^ffstools/tiffs-wrappers/pirffs$ -^lcdemu/fc-lcdemu$ - ^loadtools/fc-buzplay$ ^loadtools/fc-compalram$ ^loadtools/fc-iram$
--- a/lcdemu/Makefile Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -CC= gcc -CFLAGS= -O2 -PROG= fc-lcdemu -OBJS= globals.o main.o process.o window.o ximage.o xrm.o -INSTBIN=/usr/local/bin - -all: ${PROG} - -${PROG}: ${OBJS} - ${CC} ${CFLAGS} -o $@ ${OBJS} -lX11 - -install: ${PROG} - mkdir -p ${INSTBIN} - install -c ${PROG} ${INSTBIN} - -clean: - rm -f *.o *.out *errs ${PROG}
--- a/lcdemu/globals.c Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/* - * LCDemu based on HECterm by the same author - * Definitions of global variables - */ - -#include <X11/Xlib.h> -#include <X11/Xresource.h> -#include <X11/Xutil.h> - -char *progbasename, *proginstancename; -char *mydisplayname; -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 Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -/* - * LCDemu based on HECterm by the same author - * External declaratiions for global variables - */ - -extern char *progbasename, *proginstancename; -extern char *mydisplayname; -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 Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* - * LCDemu main module - */ - -#include <sys/types.h> -#include <sys/errno.h> -#include <stdio.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" - -main(argc, argv) - char **argv; -{ - XrmInitialize(); - process_cmdline(argc, argv); - open_display(); - init_image_conversion(); - load_resources(); - create_our_window(); - set_initial_window_title(); - set_initial_icon_name(); - create_mainwin_gc(); - XMapWindow(mydisplay, mainwindow); - XFlush(mydisplay); - - mainloop(); - /* NOTREACHED */ -} - -process_cmdline(argc, argv) - char **argv; -{ - register char **ap, *opt; - char *rhost, *ruser; - int len; - - if (argc < 1) { - fprintf(stderr, "fc-lcdemu: invalid invokation\n"); - exit(1); - } - opt = rindex(argv[0], '/'); - if (opt) - progbasename = opt + 1; - else - progbasename = argv[0]; - proginstancename = progbasename; - for (ap = argv+1; *ap; ) { - if (**ap == '-') - opt = *ap++; - else - break; - if (!strcmp(opt, "-display")) { - if (!*ap) { -argreq: fprintf(stderr, "%s: %s requires an argument\n", - progbasename, opt); - exit(1); - } - mydisplayname = *ap++; - continue; - } - if (!strcmp(opt, "-name")) { - if (!*ap) - goto argreq; - proginstancename = *ap++; - continue; - } - if (!strcmp(opt, "-geometry") || !strcmp(opt, "-geom")) { - if (!*ap) - goto argreq; - XrmPutStringResource(&xrmdb_cmdline, "LCDemu.geometry", - *ap++); - continue; - } - if (!strcmp(opt, "-iconic")) { - XrmPutStringResource(&xrmdb_cmdline, "LCDemu.iconic", - "on"); - continue; - } - if (!strcmp(opt, "-title")) { - if (!*ap) - goto argreq; - XrmPutStringResource(&xrmdb_cmdline, "LCDemu.title", - *ap++); - continue; - } - if (!strcmp(opt, "-borderwidth") || !strcmp(opt, "-bw")) { - if (!*ap) - goto argreq; - XrmPutStringResource(&xrmdb_cmdline, "*borderWidth", - *ap++); - continue; - } - if (!strcmp(opt, "-bordercolor") || !strcmp(opt, "-bd")) { - if (!*ap) - goto argreq; - XrmPutStringResource(&xrmdb_cmdline, "*borderColor", - *ap++); - continue; - } - if (!strcmp(opt, "-xrm")) { - if (!*ap) - goto argreq; - XrmPutLineResource(&xrmdb_cmdline, *ap++); - continue; - } - fprintf(stderr, "%s: %s: unrecognized option\n", progbasename, - opt); - exit(1); - } -} - -open_display() -{ - if (!mydisplayname) - mydisplayname = getenv("DISPLAY"); - if (!mydisplayname) { - fprintf(stderr, "%s: no X display available\n", progbasename); - exit(1); - } - mydisplay = XOpenDisplay(mydisplayname); - if (!mydisplay) { - fprintf(stderr, "%s: unable to open display %s\n", progbasename, - mydisplayname); - exit(1); - } -} - -mainloop() -{ - register int i, cc; - XEvent event; - fd_set readfds; - int maxfd; - char buf[1024]; - - maxfd = ConnectionNumber(mydisplay) + 1; - for (;;) { - cc = XPending(mydisplay); - for (i = 0; i < cc; i++) - XNextEvent(mydisplay, &event); - XFlush(mydisplay); - FD_ZERO(&readfds); - FD_SET(0, &readfds); - FD_SET(ConnectionNumber(mydisplay), &readfds); - i = select(maxfd, &readfds, NULL, NULL, NULL); - if (i < 0) { - if (errno == EINTR) - continue; - perror("select"); - exit(1); - } - if (FD_ISSET(0, &readfds)) { - cc = read(0, buf, sizeof buf); - if (cc > 0) - input_on_stdin(buf, cc); - else - exit(0); - XFlush(mydisplay); - } - } -}
--- a/lcdemu/process.c Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* - * Processing of LCD output (input to us) - */ - -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <ctype.h> -#include <string.h> -#include <strings.h> -#include <X11/Xlib.h> -#include <X11/Xresource.h> -#include <X11/Xutil.h> -#include "globals.h" - -#define MAX_WIDTH 176 - -static unsigned -hexdecode(str) - char *str; -{ - unsigned accum = 0; - int i, c, n; - - for (i = 0; i < 4; i++) { - c = str[i]; - if (isdigit(c)) - n = c - '0'; - else if (isupper(c)) - n = c - 'A' + 10; - else - n = c - 'a' + 10; - accum <<= 4; - accum |= n; - } - return(accum); -} - -process_input_line(line) - char *line; -{ - int blitrow, blitcol, npix; - uint16_t pix16[MAX_WIDTH]; - char *cp; - XImage *xi; - - for (cp = line; isspace(*cp); cp++) - ; - if (!isdigit(*cp)) { -inv: fprintf(stderr, "fc-lcdemu: invalid input line\n"); - exit(1); - } - blitrow = atoi(cp); - while (isdigit(*cp)) - cp++; - if (!isspace(*cp)) - goto inv; - while (isspace(*cp)) - cp++; - if (!isdigit(*cp)) - goto inv; - blitcol = atoi(cp); - while (isdigit(*cp)) - cp++; - if (!isspace(*cp)) - goto inv; - while (isspace(*cp)) - cp++; - if (!isxdigit(*cp)) - goto inv; - for (npix = 0; *cp; ) { - if (!isxdigit(cp[0]) || !isxdigit(cp[1]) || - !isxdigit(cp[2]) || !isxdigit(cp[3])) - goto inv; - if (npix >= MAX_WIDTH) { - fprintf(stderr, - "fc-lcdemu error: input line exceeds MAX_WIDTH of %d pixels\n", - MAX_WIDTH); - exit(1); - } - pix16[npix++] = hexdecode(cp); - cp += 4; - } - xi = convert_function(pix16, npix); - XPutImage(mydisplay, mainwindow, mainwingc, xi, 0, 0, blitcol, blitrow, - npix, 1); - XDestroyImage(xi); -} - -input_on_stdin(inbuf, incount) - char *inbuf; -{ - char *input_end = inbuf + incount; - static char linebuf[1024]; - static int linesz; - char *cp; - - for (cp = inbuf; cp < input_end; cp++) { - if (*cp == '\n') { - linebuf[linesz] = '\0'; - process_input_line(linebuf); - linesz = 0; - continue; - } - if (linesz < sizeof(linebuf) - 1) - linebuf[linesz++] = *cp; - } -}
--- a/lcdemu/window.c Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* - * LCDemu based on HECterm by the same author - * X11 window creation functions - */ - -#include <stdio.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" - -extern char *xrm_lookup(); - -create_our_window() -{ - XrmQuark instquarks[3], classquarks[3]; - register char *cp; - register int i, geomask; - int pixwidth, pixheight, xpos, ypos; - XSetWindowAttributes xswa; - u_long xswamask; - XColor bdcolor; - XClassHint xclasshint; - XWMHints wmhints; - XSizeHints wm_normal_hints; - - /* Determine our geometry */ - instquarks[0] = xrmquark_topinstance; - classquarks[0] = xrmquark_topclass; - classquarks[1] = instquarks[1] = XrmStringToQuark("geometry"); - instquarks[2] = classquarks[2] = NULLQUARK; - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - geomask = XParseGeometry(cp, &xpos, &ypos, &pixwidth, - &pixheight); - free(cp); - } else - geomask = 0; - if (!(geomask & WidthValue)) - pixwidth = 176; - if (!(geomask & HeightValue)) - pixheight = 220; - if (!(geomask & XValue)) - xpos = 0; - else if (geomask & XNegative) - xpos += DisplayWidth(mydisplay, DefaultScreen(mydisplay)) - - pixwidth; - if (!(geomask & YValue)) - ypos = 0; - else if (geomask & YNegative) - ypos += DisplayHeight(mydisplay, DefaultScreen(mydisplay)) - - pixheight; - /* fill out XSetWindowAttributes */ - xswa.event_mask = 0; /* not interested in any events */ - xswamask = CWEventMask; - /* border color */ - classquarks[1] = instquarks[1] = XrmStringToQuark("borderColor"); - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - i = XParseColor(mydisplay, DefaultColormap(mydisplay, - DefaultScreen(mydisplay)), cp, &bdcolor); - free(cp); - if (i) { - i = XAllocColor(mydisplay, DefaultColormap(mydisplay, - DefaultScreen(mydisplay)), &bdcolor); - if (i) { - xswa.border_pixel = bdcolor.pixel; - xswamask |= CWBorderPixel; - } - } - } - /* border width */ - classquarks[1] = instquarks[1] = XrmStringToQuark("borderWidth"); - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - i = atoi(cp); - free(cp); - } else - i = 2; - /* go for it! */ - mainwindow = XCreateWindow(mydisplay, DefaultRootWindow(mydisplay), - xpos, ypos, pixwidth, pixheight, i, CopyFromParent, - InputOutput, CopyFromParent, xswamask, &xswa); - /* set window manager properties */ - xclasshint.res_name = proginstancename; - xclasshint.res_class = "LEDemu"; - XSetClassHint(mydisplay, mainwindow, &xclasshint); - wmhints.flags = InputHint | StateHint; - wmhints.input = False; - classquarks[1] = instquarks[1] = XrmStringToQuark("iconic"); - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - i = parse_boolean_resource(cp); - free(cp); - } else - i = 0; - wmhints.initial_state = i ? IconicState : NormalState; - XSetWMHints(mydisplay, mainwindow, &wmhints); - if (geomask & (WidthValue|HeightValue)) - wm_normal_hints.flags = USSize; - else - wm_normal_hints.flags = PSize; - if (geomask & (XValue|YValue)) - wm_normal_hints.flags |= USPosition; - XSetWMNormalHints(mydisplay, mainwindow, &wm_normal_hints); -} - -set_initial_window_title() -{ - XrmQuark instquarks[3], classquarks[3]; - register char *cp; - char buf[256]; - - instquarks[0] = xrmquark_topinstance; - classquarks[0] = xrmquark_topclass; - instquarks[1] = XrmStringToQuark("title"); - classquarks[1] = XrmStringToQuark("Title"); - instquarks[2] = classquarks[2] = NULLQUARK; - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - XStoreName(mydisplay, mainwindow, cp); - free(cp); - return; - } - XStoreName(mydisplay, mainwindow, "Emulated LCD"); -} - -set_initial_icon_name() -{ - XrmQuark instquarks[3], classquarks[3]; - register char *cp; - - instquarks[0] = xrmquark_topinstance; - classquarks[0] = xrmquark_topclass; - instquarks[1] = XrmStringToQuark("iconName"); - classquarks[1] = XrmStringToQuark("IconName"); - instquarks[2] = classquarks[2] = NULLQUARK; - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - XSetIconName(mydisplay, mainwindow, cp); - free(cp); - return; - } - XSetIconName(mydisplay, mainwindow, proginstancename); -} - -create_mainwin_gc() -{ - XGCValues xgcval; - - xgcval.graphics_exposures = False; - mainwingc = XCreateGC(mydisplay, mainwindow, GCGraphicsExposures, - &xgcval); -}
--- a/lcdemu/ximage.c Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* - * 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-lcdemu has not been adapted for X11 depth != 24, yours is %d\n", - display_depth); - exit(1); - } -}
--- a/lcdemu/xrm.c Sun Mar 11 23:24:52 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/* - * LCDemu based on HECterm by the same author - * Xrm functions - */ - -#include <stdio.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" - -static char appdefaults_pathname[] = - "/usr/local/share/freecalypso/lcdemu-defaults"; - -load_resources() -{ - xrmquark_topclass = XrmStringToQuark("LCDemu"); - xrmquark_topinstance = XrmStringToQuark(proginstancename); - xrmdb_defaults = XrmGetFileDatabase(appdefaults_pathname); - xrmdb_displayres = - XrmGetStringDatabase(XResourceManagerString(mydisplay)); -} - -/* - * The following function looks up a resource in all of our databases - * and returns a pointer (char *) to the value in a malloced buffer that - * can be freed when it is no longer needed. My reading of X11R4 - * documentation indicates that resource values returned from Xrm functions - * are not necessarily NUL-terminated (no claim is made that they are - * and XrmValue structure has a size field), which is why I copy to - * my own buffer and NUL-terminate it there. - * - * Returns NULL pointer if not found in any of the databases. - */ -char * -xrm_lookup(instquarks, classquarks) - XrmQuark *instquarks, *classquarks; -{ - XrmRepresentation reptype; - XrmValue value; - register char *buf; - - if (XrmQGetResource(xrmdb_cmdline, instquarks, classquarks, &reptype, - &value)) - goto found; - if (XrmQGetResource(xrmdb_displayres, instquarks, classquarks, &reptype, - &value)) - goto found; - if (XrmQGetResource(xrmdb_defaults, instquarks, classquarks, &reptype, - &value)) - goto found; - return(NULL); -found: buf = malloc(value.size + 1); - if (!buf) { - perror("malloc"); - exit(1); - } - bcopy(value.addr, buf, value.size); - buf[value.size] = '\0'; - return(buf); -} - -parse_boolean_resource(str) - register char *str; -{ - if (!strcasecmp(str, "on") || !strcasecmp(str, "true") || - !strcasecmp(str, "yes")) - return(1); - if (!strcasecmp(str, "off") || !strcasecmp(str, "false") || - !strcasecmp(str, "no")) - return(0); - return(atoi(str)); -} - -get_boolean_resource(resource, def) - char *resource; - int def; -{ - XrmQuark instquarks[3], classquarks[3]; - register char *cp; - register int i; - - instquarks[0] = xrmquark_topinstance; - classquarks[0] = xrmquark_topclass; - classquarks[1] = instquarks[1] = XrmStringToQuark(resource); - instquarks[2] = classquarks[2] = NULLQUARK; - cp = xrm_lookup(instquarks, classquarks); - if (cp) { - i = parse_boolean_resource(cp); - free(cp); - } else - i = def; - return(i); -}