Escape Sequenzen

nostral

Mitglied
Hi,

Ich suche nache einer Lösung in c++ Escape Sequenzen an einen Drucker zusenden. Ansprechen lässt sich der Drucker über /dev/usb/lp0. Auch Text kann ich ausdrucken aber nur unformatiert. Die Befehle sollen an einen Bondrucker unter Linux gesendet werden.
Kann mir jemand helfen?

Vielen Dank

Nostral
 
Hi.

Also das Escape Zeichen im ASCII Code ist das Zeichen 27 dezimal bzw. 0x1B hexadez. bzw. 033 octal.
Code:
char escape = '\033';
ifstream usb_lp0 ("/dev/usb/lp_0");
usb_lp0 << escape;
Oder hab ich jetzt dein Problem nicht richtig verstanden?
 
Danke für die schnelle Antwort. Ich möchte die Steuerzeichen senden für Fettdruck etc.
Ich habe auch die Steuerzeichen da aber ich weiss nicht wie oder wo ich die in dem Quelltext aufrufen muss.

MfG

Nostral
 
Also normalerweise funktioniert das so, das du bevor du z.B. fetten Text druckst, dem Drucker die Escape Sequenz für Fettschrift sendest, dann deinen Text hinterher schickst und dann wieder auf Normaldrucken zurückschaltest indem du wieder eine Escape Sequenz zum Abschalten des Fettdrucks an den Drucker schickst.

Code:
echo -e '\e[1mhallo\e[0m'
druckt beispielsweise das Wort "hallo" in Fettschrift auf ein Terminal (xterm etc.).
 
So richtig raffe ich das nicht! Ich habe die Steuerzeichen für den Fettdruck "1B,45". Wo schreibe ich die hin? Ich spreche den Drucker unter c++ so an:

ofstream Drucker;

Drucker.open("dev/usb/lp0");

Drucker<<"Das ist ein Test"; // Ausgabe auf den Drucker
etc....
So weit klappt auch alles.

Aber wo kommen die Steuerzeichen hin?

MfG

Nostral
 
Zuletzt bearbeitet:
Na auch direkt auf den Drucker. Höchstwahrscheinlich mit einem führenden ESC:
Code:
Drucker << "\033\x1B\x45";
(ich nehme an, deine Steuerzeichen sind im Hexadezimalsystem angegeben; ob nun mit oder ohne Komma weiß ich nicht, da mußt du in deiner Dokumentation nachschauen.)
 
Also deepthroat,

ich glaube Du bist der einzige der mir helfen kann:

Im Manual zum Drucker steht zum Beispiel folgendes:

Fettdruck:

ESC Hexcode

1B 45

egal wie ich den Drucker anspreche und die Steuerzeichen übergebe der macht alles,
nur nicht Fett drucken. Ich habe fogende Varianten probiert:

Drucker<<"\1B\45"; // Es passiert NICHTS

Drucker<<"\1B45"; // Wie oben

Auch ohne vorangestellten " \" das gleiche Ergebnis. Lasse ich die Anführungszeichen weg kommt eine Fehlermeldung. Auch in " ' " gesetzt das selbe Ergebnis. Ich weiss
nicht mehr was ich noch machen soll.

MfG

Nostral
 
nostral hat gesagt.:
Also deepthroat,

ich glaube Du bist der einzige der mir helfen kann:

Im Manual zum Drucker steht zum Beispiel folgendes:

Fettdruck:

ESC Hexcode

1B 45

egal wie ich den Drucker anspreche und die Steuerzeichen übergebe der macht alles,
nur nicht Fett drucken. Ich habe fogende Varianten probiert:

Drucker<<"\1B\45"; // Es passiert NICHTS

Drucker<<"\1B45"; // Wie oben

Auch ohne vorangestellten " \" das gleiche Ergebnis. Lasse ich die Anführungszeichen weg kommt eine Fehlermeldung. Auch in " ' " gesetzt das selbe Ergebnis. Ich weiss
nicht mehr was ich noch machen soll.

MfG

Nostral
Wenn du hexadezimale Zeichencodes ausgeben willst, mußt du hinter dem Backslash noch ein x schreiben, bei dir gibt er das Zeichen \001 dann ein B, dann jeweils das Zeichen \045 (octal! == 37 dezimal == 25 hex.) bzw. "45" aus. Versuch mal folgendes
Code:
Drucker << "\x1B\x45";
C Coder hat gesagt.:
Schon das hier versucht:
Code:
Drucker << 0x1B45;
?
Das kann so nicht funktionieren, da 0x1B45 ein Integer ist und dieser ist normalerweise 4 Byte groß. Es dürfen aber nur 2 Zeichen (Byte) auf den Drucker ausgegeben werden, nämlich ein ESC und das Steuerzeichen.
 
Also ich bin fast soweit: Ich könnte ins Wasser gehen!

Es klappt immer noch nicht. Kann es manchmal sein das ich den Drucker erst durch eine Anweisung " anstossen " muss das der die Steuerzeichen versteht bzw. entgegen nimmt?
Ich kann auch mal das Manual per E - Mail schicken - ist ein pdf File.

Mfg

Nostral
 
Zurück