Ach ja, für die Jugend braucht´s einen Trailer.
&& Danke, Rudi, das Wichtigste steht jetzt 2* da.
Der Umschlag soll ja vorerst nur einige Experten ansprechen.
Vielleicht müssen wir warten, bis sie aus dem Urlaub zurück sind.
Dann wäre ich wohl bald nicht mehr der Einzige mit einem todo:FAST? vollständig funkionierendem uBasic 2019 auf der Kamera.
- Code: Alles auswählen
uBASIC by Adam Dunkels
http://www.sics.se/~adam/ubasic/
Pablo d'Angelo improved the parser to support labels and removed the line numbers.
Caefix improved the parser to support
9-stellige Zahlen
IgnoreCase : If Wait_Click ELSEif etc.
Abkürzungen : wai.0, un.x, md_det., get_ori. etc. // >> 1. Treffer in kw->Liste (tokenizer.c) // avoid i.
Allg: on, off, true, false
"?" = "print"
"abs", "odd"
"mod"= '%'
"xor"= '^',
"nor"= weder noch,
"&&" = "and"
"||" = "or"
++ a=a==1 // mancher Gewohnheit wegen... :)
'!'= "not",
"!=" = "<>"
'´' = "beep"
'.'.ein Bremserl, jeweils ein "sleep 50" Kürzel.
"'".ein Bremserl, jeweils ein "sleep 1000" Kürzel.
'~' = ein Separator zur Verbindung von Wünschen auf EINER Zeile.
// Now possible: if abs a!=3 then ..#a=33~#b=3~c=3~?a,b,#c else a=111 ~ b=222~ c=333
swap #a,#b;#c,#d;e,f
Ablauf:
break | cont für do, for, while
reset
++ calculated jump method: goto/gosub 100*i+x |0 = ignore
++ exit, wie goto ... + break all!
++ is_key|is_pressed K "up" 200+x ~...->> K=200+x
loop= x : Reset & Neustart bei Fehler oder eof mit akuten Werten, solange <>0 // ++ loop=#@
++ Get_time 7|8+> Zeitstempel
++ hour,min,sec,msec,lsec : Laufzeit
Mathe wie C:
i++, i+=x, i*=1000, i/=2, i%=10"+5ignored"*10 , i-- , &= , |= , ^=
I?x:y == wenn I!=0, I=x sonst I=y // wenn I, rechne mit x sonst y
++ "\r" | "\\r" == while (abs(r)>9) {r=r/10;}; "\-4210"=-4
++ "=~" etwa-Operator: if X =~ 100;4 then ? "[96..104] == true"
++ # als Variablensignal. // #V wird nicht erst nach Textanalyse als V erkannt.
++ 10 weitere Variablen, #0-#9 + ## // #99=#9 ,immer mod 10
bevorzugt als Vor-/Rückgabewerte zu nutzen mit/ siehe
data [+5,|=5,]0,1,2,3,4,5,6,7,i*8,get_...
oder [ [?+>][data+>]let] Makro hinter
break, cont für do{once}, for{once}, while, goto, gosub, return, exit, restore // auch:
let I=1,i=2,c++,...
// return +5,0,i+x,get_orientation_sensor -> #5,#6,...=0,...
// ...then break ?i,"broken!". #4,#2 let i=1,x=42
clean [m [D]] // setzt Bereich ab m[..D]=0, alle=0 ohne Param.
data 0,1,2,3,4,5,6,7,8,9
?#0,#1,#2,#3,#4,#5,#6,#7,#8,#9
0 1 2 3 4 5 6 7 8 9
data =5,0,1,2,3,4,5,6,7,8,99,10,11
?#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,##
5 6 7 8 99 10 11 7 8 9 99
data +5,0,1,2,3,42,5,6,7,8,=
?#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,##
5 6 7 8 99 0 1 2 3 42 42
*( <--
Comments: Multi~/InLine '{'...'}', man kann aber hineinspringen, wenn '{' nicht Zeilenanfang.
++ -- ignores Lua Commentline //
++ // ignores C Commentline // (ganze Zeile)
++ "printed Commentline" //
++ i%=10"+5ignored"*10
++ ... then exec skiptotodo else {todo...
*) <--
Logging: print : Aus '^' wird '"'.zu ',;' ++ ':'= \n '.'=endof?
Debugging: tron, tronly, troff, beep, bug, debug [0-2]
list prefix: list ~ "Zeile" = print+do
varlist ["comment"]
++ Fehlerzeile
++ Alter exit_alt & enter_alt Fehler im '_statement': erledigt.
++ "shoot ~" : rawproof ??, // wartet bis Dateien geschlossen sind.
++ Glättung interner Abläufe (Schleifen/ Sprünge). , Zeilenende sychronisiert.
++ C Code allgemein leichter lesbar ( && ergänzbar :)
!! Der neue Parser entdeckt ein paar alte Syntaxfehler neu.
!! is_key & is_pressed
do
?Wai. 1000
K=0 @ !! How about that ? Caefix
is_key K "up" 100*"." ~? "up",".",K
is_key K "set" 100*"." ~? "set",".",K
is_pr. K "down" 100*"." ~? "down",".",K
is_key K "left" 100*"." ~? "left",".",K
is_key K "right" 100*"." ~? "right",".",K
is_key K "menu" 100*"." ~? "menu",".",K
is_key K "shoot_half" 100*"." ~? "shoot_half",".",K
#K?#K:42
until K!=42
?K~'goto K*10
?bug,"------ K=0;",x,bug
10*K ~ print "KeyNr.";K. ~.click K/100~''
++
++ >> besonders (lange Skripte) können beschleunigt werden:
-gosub ">init" // >go_fwd!
...
@ jedes until, wend, next x, goto liest ab (jetzt) unter @paramblock einige kb leer.
@ >> Signalzeichen am Zeilenanfang : ? # - @
@ spart uBasic u.U. tausende interne Schritte, Zeit für z.B. md_det. im AutoModus?...
:>init
?"..."
#a=..
#b=..
-do...
-if ...
- set_...
-until...//
-return
{!! Zw. wait_click & if is_key SLEEP(11) oder print. <- Ein paar flag_yield gesetzt & weitergereicht, passt.}
"Sinnvoll für die Gemeinschaft ist auch eine Beschreibung von Einrichtung und Verwendung der CHDK-GCC-Toolchain."
Gewiss, was ist das? Caefix.
:...i....1....;....2....;....3....;....4.. { Npp++ Tip: Einstellungen-> Stile -> Default -> Deep Black | Black Board } :...i....1....;....2....;....3....;....4..
- Code: Alles auswählen
@title execdemo
@chdk_version 1.4
@subtitle :...i....1....;....2....;....3....;....4..
@param x Wert
@default x 3
@param a ab Test
@range a -11 11
@default a 0
@param q Modus nofu
@range q 1 75
@default q 2
@param u Extended Echo/Logging
@default u 1
@range u 0 1
@param l Log:
@default l -23
@param T Tron
@default T 0
@range T 0 1
debug=u
if T tron
pri.l
for i=1 to x>0
if x=1 then q++~? "eins" elseif x=2 then q++~? "zwei" elseif x=3 then q++~? "drei" else q++~? "viele"
next i
goto 10*a
?bug,"-----------",x,bug
data 0,1,2,3,4,5,6,7,8,9
?#0,#1,#2,#3,#4,#5,#6,#7,#8,#9
data +5,0,1,2,3,4,5,6,7,8,9
?#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,##
data =5,0,1,2,3,4,5,6,7,8,9
?#0,#1,#2,#3,#4,#5,#6,#7,#8,#9,##
wait_click 0
pla. 1
?bug,"-----------",x,bug
10 do
if x=1 exec {
?x,x=1,bug ~EXIT 20
} elseif x=2 exec {
?x,x=2,bug ~break
} elseIf x=3 exec {
?x,x=3,bug ~break
} elseif x=4 exec {
?x,x=4,bug ~break
} elseif x=5 exec {
?x,x=5,bug ~break
} elseif x=6 exec {
?x,x=6,bug ~break
} elseif x=7 exec {
?x,x=7,bug
} elseif x=8 exec {
?x,x=8,bug
} elseif x=9 exec {
?x,x=9,bug
} elseif x>9 exec {
?x,"x>9",bug
} elseif x=0 exec {
?x,"x=0",bug ~break
} else ?x,"x<0",bug,"break else!"
until O=O
?bug,"-----------",x,bug
@ } elseif x<0 exec {
@ ?x,"x<0",bug
20
do
if x=1 then
exec {
?x,bug,x=1
} else if x=2 exec {
?x,bug,x=2 ~exit 30
} else if x=3 exec {
?x,bug,x=3 ~break
} else if x=4 exec {
?x,bug,x=4 ~break
} else if x=5 exec {
?x,bug,x=5 ~break
} else if x=6 exec {
?x,bug,x=6
} else if x=7 exec {
?x,bug,x=7
} else if x=8 exec {
?x,bug,x=8
} else if x=9 exec {
?x,bug,x=9
} else if x=0 exec {
?x,bug,x=9
} else if x>9 exec {
?x,bug,"x>9"
} else if x=0 exec {
?x,"x=0",bug
@ } else if x<0 exec {
@ ?x,"x<0",bug
} else ?x,"x<0",bug,"break else !"
until O=O
endif
30
?bug,"-----------",x,bug
do
?Wai. 1000
K=0 @ !! How about that ? Caefix
is_key K "up" 100*"." ~? "up",".",K
is_key K "set" 100*"." ~? "set",".",K
is_pr. K "down" 100*"." ~? "down",".",K
is_key K "left" 100*"." ~? "left",".",K
is_key K "right" 100*"." ~? "right",".",K
is_key K "menu" 100*"." ~? "menu",".",K
is_key K "shoot_half" 100*"." ~? "shoot_half",".",K
#K?#K:42
until K!=42
?K~'goto K*10
?bug,"------ K=0;",x,bug
10*K ~ print "KeyNr.";K. ~.click K/100~''
?bug,"-----------",x,bug
90
end
EsGibtKeinenErdaufgangAufDemMond! SoSimpel...