Forum: Projekte & Code Simples graphisches Terminal für Monochrombildschirme


von Christian B. (casandro)


Angehängte Dateien:

Lesenswert?

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.

von ChrisMicro (Gast)


Lesenswert?

Könntest Du ein Bild des Ergebnisses posten? Ich finde, wenn man über 
Graphik spricht, sollte man auch Graphik zeigen.

von Axel S. (a-za-z0-9)


Angehängte Dateien:

Lesenswert?

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
von Christian B. (casandro)


Lesenswert?

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
Noch kein Account? Hier anmelden.