Moin,
für den Fall, das das jemand brauchen kann: ich hab vor geraumer Zeit
mal nen Konverter von ESC/P nach PNG und Co geschrieben. Nutze ich für
mein HP54645D um Screenprints als PNG zu erhalten. Sollte faktisch für
alle Oszis und Gerätschaften geeignet sein, die ESC/P
(=EPSON-kompatibler Nadeldrucker) ausspucken können. Man muss die Datei
halt erstmal aufm PC empfangen und kann sie dann in PNG umwandeln.
Getestet nur unter Linux, sollte aber auch auf anderen Systemen
übersetzbar sein. Braucht die imlib2.
Aktuelle Version ist unter
http://git.al84.de/?p=escp2img.git;a=snapshot;h=HEAD;sf=tgz
Gruß
Andreas Lang
Stimmt,
das git ist nicht mehr online (das wollte ich eigentlich mal behoben
haben...)
Den letzten Stand hab ich mal in einem .zip beigefügt.
Als Build-System kommt inzwischen qmake zum Einsatz (wodurch man einfach
den qtcreator dafür nutzen kann, das Programm zu bauen)
Grüße
Andreas
X. H. schrieb:> Wenn jemand escp2img.zip compiliert kriegen will, bei mir funktioniert> dieses Kommando (Arch Linux):>> `gcc -O3 -Wall -Wextra -Wpedantic -o escp2img main.cpp escp.cpp> $(pkg-config --cflags --libs imlib2)`>> imlib2 Paket muss installiert sein.
Danke fuer den codierten Hinweis. Und wie tippe ich das korrekt ein.
Copy and paste geht nicht, trotz Arch aktuell.
Der Code scheint etwas ... äh, schlunzig zu sein, aber das, was in
Deinem Screenshot (warum nur? Das ist Text!) zu sehen sind, sind
lediglich Warnungen.
Wie willst Du was korrekt eintippen?
Du hast ja was eingetippt, und es offensichtlich geschafft, gcc
aufzurufen.
Die Warnungen liegen halt am ... schlunzigen Code.
Hier jetzt mal die drei aus escp.cpp:
1
#define alloc_blocksize=1024;
Ersetze diesen Unfug durch
1
#define alloc_blocksize 1024
und Du bist schon mal eine Warnung los.
Und das hier
1
fprintf(stderr,"\%02x",cc&0xff);
durch
1
fprintf(stderr,"\t%02x",cc&0xff);
1
if((cc<32)||(cc>127)){
Offenkundig hat Dein char ein Vorzeichen, deswegen ist in der Zeile
davor der Vergleich > 127 sinnlos.
Ersetze den Kram durch "isprint":
Joe schrieb:> Fragt sich nur ich wie die jetzt wegbekomme.
Tja, indem Du Dir jede Fehlermeldung bzw. jede Warnung ansiehst und in
Deinem C++-Lehrbuch nachsiehst, was sie bedeuten.
Und fang' vorne, mit der ersten Fehlermeldung bzw. Warnung an.
Wie bereits an den paar Beispielen zu sehen, ist das schlunzig
hingerotzter Code.
Allerdings: alles, was Du bislang gezeigt hast, waren keine
Fehlermeldungen, sondern Warnungen. Das ist nicht das gleiche. Eine
Warnung bedeutet, daß die entsprechende Stelle potentiell fehlerhaft
ist, aber sich durchaus übersetzen lässt.
Ein Fehler ist etwas, was den Compiler dazu bringt, das Handtuch zu
werfen und kein ausführbares Ergebnis zu produzieren.
Derjenige, der den Code hingerotzt hat, wird wohl Warnungen einfach
ignoriert haben, nach dem Motto "wird schon nicht so schlimm sein".
Gibt denn der Compiler auch eine richtige Fehlermeldung aus, oder
erzeugt er am Ende eine ausführbare Datei?
Joe schrieb:> :-( Gibt ganz neue Fehler. Fragt sich nur ich wie die jetzt wegbekomme.
isprint() braucht ein #include <ctype.h> am Anfang der Datei escp.cpp,
also z.B.
Ganze Arbeit, jetzt sind es jede Menge Fehler. Spielen wir hier
Schnitzeljagd?
gcc -O3 -Wall -Wextra -Wpedantic -o escp2img main.cpp escp.cpp
$(pkg-config --cflags --libs imlib2)
main.cpp: In function ‘int main(int, char**)’:
main.cpp:91:14: warning: variable ‘input_set’ set but not used
[-Wunused-but-set-variable]
91 | bool input_set=false;
| ^~~~~~~~~
escp.cpp: In function ‘int copy_line()’:
escp.cpp:47:23: error: ‘cc’ was not declared in this scope
47 | int copy_line() {if ((cc<32)||(cc>127)) {
| ^~
escp.cpp:63:12: warning: empty parentheses were disambiguated as a
function declaration [-Wvexing-parse]
63 | int newline() {
| ^~
escp.cpp:63:12: note: remove parentheses to default-initialize a
variable
63 | int newline() {
| ^~
| --
escp.cpp:63:12: note: or replace parentheses with braces to
value-initialize a variable
escp.cpp:63:15: error: a function-definition is not allowed here before
‘{’ token
63 | int newline() {
| ^
escp.cpp:75:78: error: a function-definition is not allowed here before
‘{’ token
75 | ite_line_data(int length, unsigned char * data, bool
flip_data=false) {
|
^
escp.cpp:89:34: error: a function-definition is not allowed here before
‘{’ token
89 | void write_char(unsigned char c) {
| ^
escp.cpp:100:34: error: a function-definition is not allowed here before
‘{’ token
100 | void fixme(const char * reason ) {
| ^
escp.cpp:235:2: error: expected ‘}’ at end of input
235 | }
| ^
escp.cpp:47:17: note: to match this ‘{’
47 | int copy_line() {if ((cc<32)||(cc>127)) {
| ^
escp.cpp:235:2: warning: control reaches end of non-void function
[-Wreturn-type]
235 | }
Lasst es ganz einfach, ich versuche es lieber selbst.
Joe schrieb:> Ganze Arbeit, jetzt sind es jede Menge Fehler. Spielen wir hier> Schnitzeljagd?
Keine Ahnung, was du hier spielst.
Joe schrieb:> escp.cpp: In function ‘int copy_line()’:> escp.cpp:47:23: error: ‘cc’ was not declared in this scope
Im weiter oben angehängten zip-File steht da in Zeile 47 was ganz
anders.
Welche Version des Sourcecode versuchts du denn zu compilieren, und wo
hast du die her?
Oliver
Joe schrieb:> escp.cpp: In function ‘int copy_line()’:> escp.cpp:47:23: error: ‘cc’ was not declared in this scope> 47 | int copy_line() {if ((cc<32)||(cc>127)) {> | ^~
Der Vergleich von "cc" erfolgt in einer Funktion nmanes "fixme", die
Variable wird direkt in der Zeile über dem Vergleich definiert und
initialisiert.
Was auch immmer Du da Deinem Compiler vorgesetzt hast, hat nichts mehr
mit dem Quelltext von 2016 zu tun.
Was ist eigentlich Deine Erwartungshaltung?
Anbei der Quelltext + Executable (Linux Amd64). Kompiliert bis auch eine
Warnung. Die Warnung bekommt man raus, wenn man die Variable "input_set"
komplett eliminiert. Sie wird nur 2x zugewiesen, aber nie geprüft.
1
laus@HPi7:~/src/esc2img/escp_git$ ./build.sh
2
main.cpp: In function ‘int main(int, char**)’:
3
main.cpp:91:14: warning: variable ‘input_set’ set but not used [-Wunused-but-set-variable]