Servus, ich hab da mal ein wenig gebastelt und mal ein Konzept für einfache graphische Terminals entwickelt. Wir haben ja heutzutage LCD und ePaper sowie Mikrocontroller mit WLAN. Die Idee ist, dass man nicht mehr aufwändige Software auf dem abgesetzten Gerät ausführen muss, sondern das einfach, zentral auf einem Server macht. Die erste angedachte Anwendung ist die Badge vom SHA2017. Hier ist das Protokoll mal grob definiert: https://pad.sha2017.org/p/badge-terminal Der Demonstrator enthält einen Beispielclient. Die Anzeige erfolgt über ncurses und kann natürlich auf andere Bildschirme angepasst werden. Der Server läuft auch auf trashcan.clarke-3.de 1234 und zeigt da eine Landkarte an, bei der man über die Cursortasten scrollen kann und mit der Leertaste in ein Menü wechseln kann. In dem Menü kann man einen Ort auswählen und ihn auf der Karte anzeigen... ist nur ein kleines Demo. Optimierungsziel war eine möglichst einfache Implementierbarkeit.
Könntest Du ein Bild des Ergebnisses posten? Ich finde, wenn man über Graphik spricht, sollte man auch Graphik zeigen.
Christian B. schrieb: > ich hab da mal ein wenig gebastelt und mal ein Konzept für einfache > graphische Terminals entwickelt. Hmm. Ganz nett. > Der Demonstrator enthält einen Beispielclient. Die Anzeige erfolgt über > ncurses und kann natürlich auf andere Bildschirme angepasst werden. Bei mir segfaulted das Ding gleich zu Beginn in dem Aufruf von free() in set_resolution(). Kein Wunder, du initialisierst img.img ja nicht. Auch sonst habe ich noch ein paar Klopse im Quellcode gefunden: - lokale Header sollten mit #include "..." eingebunden werden, dann braucht man auch kein -I. für den Preprocessor - make hat Rezepte um C zu compilieren und zu linken. Libraries gehören in $(LDLIBS) und nicht in $(CFLAGS) - die BDG_IMAGE struct wurde in main() nicht ausreichend intitialisiert Ich hänge das korrigierte Paket mal an. Und einen Screenshot. Für Neugierige hier noch meine Änderungen:
1 | diff -urb demonstrator2.orig/Makefile demonstrator2/Makefile
|
2 | --- demonstrator2.orig/Makefile 2017-01-19 15:10:24.000000000 +0100
|
3 | +++ demonstrator2/Makefile 2017-01-24 10:08:23.000000000 +0100
|
4 | @@ -1,10 +1,9 @@
|
5 | CC=gcc |
6 | -CFLAGS=-I. -Wall -lncursesw
|
7 | -DEPS = decoder.h font.h
|
8 | +CFLAGS=-g -O0 -Wall -Wextra
|
9 | +LDLIBS=-lncursesw
|
10 | OBJ = demonstrator.o decoder.o font.o |
11 | |
12 | -%.o: %.c $(DEPS)
|
13 | - $(CC) -c -o $@ $< $(CFLAGS)
|
14 | -
|
15 | demonstrator: $(OBJ) |
16 | - gcc -o $@ $^ $(CFLAGS)
|
17 | +
|
18 | +clean:
|
19 | + -rm $(OBJ) demonstrator
|
20 | diff -urb demonstrator2.orig/decoder.c demonstrator2/decoder.c
|
21 | --- demonstrator2.orig/decoder.c 2017-01-20 18:11:17.000000000 +0100
|
22 | +++ demonstrator2/decoder.c 2017-01-24 10:18:57.000000000 +0100
|
23 | @@ -3,9 +3,9 @@
|
24 | #include <string.h> |
25 | #include <strings.h> |
26 | #include <stdlib.h> |
27 | -#include <decoder.h>
|
28 | #include <errno.h> |
29 | |
30 | +#include "decoder.h"
|
31 | #include "font.h" |
32 | |
33 | |
34 | diff -urb demonstrator2.orig/demonstrator.c demonstrator2/demonstrator.c
|
35 | --- demonstrator2.orig/demonstrator.c 2017-01-20 16:25:10.000000000 +0100
|
36 | +++ demonstrator2/demonstrator.c 2017-01-24 10:20:02.000000000 +0100
|
37 | @@ -1,5 +1,4 @@
|
38 | -#include "decoder.h"
|
39 | -#include "ncurses.h"
|
40 | +#include <ncurses.h>
|
41 | #include <locale.h> |
42 | #include <stdlib.h> |
43 | #include <unistd.h> |
44 | @@ -11,6 +10,8 @@
|
45 | #include <poll.h> |
46 | #include <errno.h> |
47 | |
48 | +#include "decoder.h"
|
49 | +
|
50 | const int blockchars[16]={ |
51 | ' ', // 0000 |
52 | 0x2597, //▗ 0001 |
53 | @@ -146,6 +147,7 @@
|
54 | BDG_IMAGE img; |
55 | img.gc=ngetchar; |
56 | img.pc=nputchar; |
57 | + img.img=NULL;
|
58 | initscr(); /* Start curses mode */ |
59 | set_resolution(&img,COLS/8*2,LINES*2); |
60 | clear(); |
:
Bearbeitet durch User
Danke! Falls Du nichts dagegen hast, baue ich Deinen Patch dann mit rein. Meine Ausrede: Das soll ja nur zum reimplementieren einladen. :)
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.