[Lua] print

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

print

Beitragvon naddel » 23.11.2009, 07:46

Hallo,

weiß jemand warum bei LUA die Stringlänge bei der Ausgabe über print auf 127 Zeichen beschränkt ist?
Oder wie man das umgehen kann?
Bitte keine Antwort wie es passen eh nur 125 auf die Konsole.
Jch habe sie derzeit auf 10 Zeilen eingestellt.

an script_console_draw scheints nicht zu liegen.

Gruß naddel
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Beitragvon msl » 23.11.2009, 12:40

Hallo naddel,

ich vermute mal, dass das am definierten Puffer liegt. Wenn man die Funktion zurück verfolgt, gibt es im uBasic-Teil die Print-Funktion und für Dich eher interessant im Lua-Teil die Print-Funktion. Der Puffer ist jeweils mit 128 angegeben.

Das Ganze macht ja bei einer Konsolengröße von 5 x 25 auch irgendwo Sinn. Wenn Du natürlich mit 10 Zeilen und Strings in dieser Größenordnung arbeitest, musst Du wahrscheinlich diesen Puffer erhöhen.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon naddel » 23.11.2009, 13:35

Danke

das ist es.
Dann muß ich mir was anderes Überlegen.

Der Hintergrund ist der, daß mein Editor ganz brauchbar läuft.
Es bleiben bei der normalen Konsole aber nur 3 Zeilen für den Text.
Wenn dann 2 Leerzeilen drin sind verliert man gleich die Orientierung.
Also Konsole größer machen.
Bei der Konsolenausgabe stört mich aber das geflacker durch die refreshs nach jedem print.
Also mit einem print die ganze Konsole vollschreiben.
Falls Du mal viel Zeit hast kannst Du das am Taschenrechner ansehen, den habe ich
dahingehend geändert. Man bekommt ein vollkommen statisches Bild, ein Himmel weiter Unterschied.
Einen Updatevermerk habe ich nicht gemacht, da die Rundung nicht richtig funktioniert.
z.B. Kehrwert von Kehrwert 55 = 50 aber bisher hat es keinen gestört.
Ich dachte wart mal eine Rückmeldung ab.

Wo muß ich denn beim Compiler die geänderte script.c hinterlegen
daß ich sie nicht bei jedem Build wieder ändern muß?

Gruß naddel
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Beitragvon msl » 23.11.2009, 13:55

Das geht nicht so einfach. Du kannst [Source Tools ..] eine Diff-Datei erzeugen. Diese kann dann auch als Patch-Datei in eine neue Version eingepflegt werden. Ich arbeite mit Tortoise-SVN. Da ist die Verwaltung von Arbeitskopien einfacher. Dafür ist aber wiederum zu umfangreich, um nur mal eine Datei auszutauschen. Probier einfach die CHDK-Shell aus.

Zu Deinem Editor-Problem:

CHDKLover hat mal angefangen, eine Lua-Skript-Erweiterung zu schreiben, mit der man die Größe der Konsole variabel verändern kann: http://chdk.kernreaktor.org/mantis/view.php?id=55

Ich weiß jetzt nicht, welche Möglichkeiten Dein Editor bietet, kann mir aber schon vorstellen, dass er sehr sinnvoll und nützlich ist. Da wäre dann sicherlich auch diese Konsolen-Erweiterung sehr hilfreich und sollte vielleicht doch umgesetzt werden.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon naddel » 25.11.2009, 00:07

Hallo msl,

Dieser Ansatz von chdklover ist sehr interessant und geht weit über das hinaus was ich erhofft hätte.

Ziel war
Größe von Konsole über Skript änderbar.
Schriftdatei und womöglich Zeichensatz änderbar.
Schreibposition änderbar.
anscheinend machen die vielen Änderungsmöglichkeiten
Schwierigkeiten bei der Speicherbehandlung.
Aber einzelne Punkte wie die Schreibposition liesen sich leicht ändern indem
die entsprechenden internen Variablen zugänglich gemacht werden.

Da mich hauptsächlich stört, daß man kein stabiles Bild bekommt,
weil die Konsole eben als solche arbeitet. Hatte ich einmal einen anderen
Ansatz ausprobiert der auch funktioniert hat.

Das print schreibt ja in den internen Puffer der Konslole.
Das ändert noch nichts an dem was auf dem Bildschirm erscheint.
Aber nach jedem print wird auch der Puffer mit der Anzeige synchronisiert
was das flackern verursacht.

Durch einen optionalen Parameter an cls hatte ich damals die synchronisation an- und ausgeschaltet.
Bevor man also den Bildschirm voll schreibt macht man
cls(1)
macht seine ganzen Ausgaben wie gewohnt die dann zwar in den Puffer geschrieben aber nicht
angezeigt werden.
Vor dem letzten print schreibt man
dann
cls(0) das die Bildschirmsynchronisation wieder einschaltet
und nach dem letzten print
wird dann der ganze Bildschirm auf einmal auf den aktuellen Stand gebracht.
So ähnlich wie ein flush in einer Datei.
Eine solche Erweiterung von cls dürfte keine Auswirkungen auf die
Funktion alter Skripte haben, kostet kaum Code und möglicherweise auch keine Variable
wenn ein Flag in einer schon vorhandenen Variable genutzt werden kann.
Da sich das Ganze nur auf die Bildschirmanzeige bezieht dürfen auch eventuelle
Umleitungen nicht betroffen sein. Das Skript müsste nur sicher stellen, daß bei einem
Abbruch die normale funktionsweise von cls auf jeden Fall wieder hergestellt wird.

Die Pufferlänge von 127 bei print wäre dann auch ausreichend.
Da die 127 aber offensichtlich auf die ursprüngliche fixe Konsolengröße
5x25 ausgelegt ist sieht es so aus als ob man von Anfang an schon die Möglichkeit
vorgesehen hat die Konsole mit einem Print zu beschreiben.
Mir stellt sich also die Frage hat man die Pufferlänge schlicht übersehen
als man die Möglichkeit geschaffen hat die Konsole zu vergrößern?

Gruß naddel
Zuletzt geändert von naddel am 25.11.2009, 14:16, insgesamt 1-mal geändert.
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Beitragvon msl » 25.11.2009, 00:30

Hallo naddel,

interessanter Ansatz. Ich denke, Du solltest Dich da mal mit CHDKLover in Verbindung setzen.

Bei einer Veränderung von cls() sollte aber auch bedacht werden, dass dieser Befehl zu den Befehlen gehört, die auch in uBasic verwendet werden. Hier sollte möglichst auf gleiche Syntax geachtet werden.

Ãœbrigens wollte ich noch anmerken, dass das neue statische Erscheinungsbild des Taschenrechners sehr gut gelungen ist.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron