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):
if (ptr
[0] && (ptr
[0]>='a' && ptr
[0]<='a'+SCRIPT_NUM_PARAMS
) && (ptr
[1]==' ' || ptr
[1]=='\t')) {Erstellt in 0.006 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