[geklärt] Lua Parameter nur ein Zeichen lang

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

Lua Parameter nur ein Zeichen lang

Beitragvon Tiefflieger » 28.07.2009, 17:47

Hallo,

ich habe gerade festgestellt, daß die Namen der Parameter in einem Lua Skript (Laut Handbuch auch in uBasic) nur ein einziges Zeichen lang sein dürfen :-/

Bei mehreren 100 Zeilen Code finde ich es extrem unübersichtlich ("Wofür stand nochmal das x? Und das i?..."), solche kurzen Variablennamen zu verwenden, sowas verwendet man eigentlich allenfalls als Zähler, zB. in for-Schleifen.

Gibts einen Grund dafür, oder könnte man das nicht irgendwie ändern? Falls es helfen würde, könnte ich auch meine eigene Hilfe dabei anbieten, Grundwissen im Compiler/ Parser Bereich (yacc / lex) sind vorhanden ;-)

Im Voraus vielen Dank für Eure Hilfe :-)

Tiefflieger

[edit] Mir ist gerade ein Workaround eingefallen: Einfach direkt nach dem Parameter-Block Variablen mit bezeichnenderen Namen einführen und diesen den jeweils entsprechenden Parameterwert zuweisen. Etwas häßlich, aber besser, als mit x'en und y'en herumzujonglieren ;-) [/edit]
Ixux 65
Tiefflieger
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 13
Registriert: 29.04.2009, 23:46

Beitragvon CHDKLover » 28.07.2009, 19:34

Hallo Tiefflieger,
du hast recht, zurzeit werden nur Parameternamen mit einer Länge von einem Zeichen vom CHDK unterstützt. Das liegt daran, dass somit eine einfache Zuordnung des Parameternames zum Variablenwert möglich ist.

Genauere Erläuterung des IST Systems:
Es existieren 2 Arrays:
  • Ein zweidimensionale Array, welches zu jeder Variable den Namen speichert (deklariert in include/script.h)
  • und ein eindimensionales Array, welches den aktuellen Wert (integer) einer Variable speichert (deklariert in include/conf.h)

Wenn ein neues Script geladen wird, wird der Scriptheader nach Parametern geparst und wie folg ausgewertet (ptr[0] zeigt auf das aktuelle Zeichen in der Scriptdatei, Auszug aus core/script.c):
Syntax: [ Download ] [ Verstecken ]
Benutze C Syntax Highlighting
if (ptr[0] && (ptr[0]>='a' && ptr[0]<='a'+SCRIPT_NUM_PARAMS) && (ptr[1]==' ' || ptr[1]=='\t')) {
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9

Das ist einer der Codezeilen, die das Verwenden längerer Parameternamen verbietet. Als einfache Teillösung des Problems, könnte man nur das erste Zeichen zur Indexierung verwenden (wie gehabt) und den Rest des Wortes ignorieren. Das bürgt aber die Gefahr, dass man Parameternamen mit dem gleichen Anfangsbuchstaben verwendet, was zwangsläufig zu einem Fehler laufen wird (schlechter Ansatz, da wahrscheinlich keine Fehlermeldung kommt, aber das Programm dennoch unerwartetes Verhalten aufweißt).
Um dem CHDK längere Parameternamen ohne Einschränkungen spendieren zu können müsste man etwas mehr arbeit investieren. Ein Ansatz währe alle Betroffenen Array um eine Dimension zu erweitern und nicht nur über ein Zeichen zu Indexieren sondern über eine Zeichnkette, was das Ausführen von Scripten verlangsamen würde. Außerdem würde sich der Speicheraufwand erhöhen.

Das sind nur meine Gedanken dazu, wenn du Lust hast kannst du ja mal eine Variante umsetzen.

PS. Zur Not kann der Editor ein wenig helfen, zum Beispiel hebt Notepad++ alle Variablen hervor, die den glichen Namen haben wie die aktuell markierte Variable. Oder man Arbeitet mit der Ersetzen Funktion.

CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 19:25
Wohnort: Dresden
Kamera(s): a610 100e


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron