From 301018f1fd9284782158c8813381c8e8b05c9a49 Mon Sep 17 00:00:00 2001 From: "Samuel D. Crow" Date: Thu, 11 Mar 2021 21:53:10 -0600 Subject: [PATCH] More junk cleaned up that shouldn't have been committed --- yab-IDE/BuildFactory/AutoFooter.mak | 23 - yab-IDE/BuildFactory/AutoHeader.mak | 40 - yab-IDE/BuildFactory/BuildFactory.yab | 522 - yab-IDE/BuildFactory/README | 64 - yab-IDE/BuildFactory/flex-bison.yab | 152 - yab-IDE/BuildFactory/parts/YAB-IDE.bf.rdef | 38 - yab-IDE/BuildFactory/parts/YAB.bf.rdef | 23 - yab-IDE/BuildFactory/parts/YabMain.cpp.appsig | 3 - yab-IDE/BuildFactory/parts/YabMain.cpp.end | 43 - yab-IDE/BuildFactory/parts/YabMain.cpp.start | 8 - yab-IDE/BuildFactory/srcfiles | 12 - yab-IDE/BuildFactory/yab-compress.c | 50 - yab-IDE/Language/de.catalog | 215 - yab-IDE/Language/en.catalog | 214 - yab-IDE/Language/nl.catalog | 214 - yab-IDE/Programs/Examples/3D-Curve.yab | 61 - yab-IDE/Programs/Examples/AllInOne.yab | 207 - .../Programs/Examples/BlockReadWriteDemo.yab | 62 - yab-IDE/Programs/Examples/BoxWorld.yab | 64 - yab-IDE/Programs/Examples/ButtonWorld.yab | 64 - yab-IDE/Programs/Examples/Calc.yab | 202 - yab-IDE/Programs/Examples/Checkbox.yab | 43 - yab-IDE/Programs/Examples/Clock.yab | 34 - yab-IDE/Programs/Examples/ColorDemo.yab | 26 - yab-IDE/Programs/Examples/DrawWorld.yab | 197 - yab-IDE/Programs/Examples/DropWorld.yab | 33 - .../Programs/Examples/EvenMoreControls.yab | 18 - .../Programs/Examples/FakeTransparency.yab | 58 - yab-IDE/Programs/Examples/FileboxDemo.yab | 53 - yab-IDE/Programs/Examples/GUI-World.yab | 444 - yab-IDE/Programs/Examples/IconWorld.yab | 30 - yab-IDE/Programs/Examples/ImageWorld.yab | 33 - yab-IDE/Programs/Examples/JDemo.yab | 69 - yab-IDE/Programs/Examples/Keyboard.yab | 115 - yab-IDE/Programs/Examples/Loop-World.yab | 401 - yab-IDE/Programs/Examples/MessageWorld.yab | 283 - yab-IDE/Programs/Examples/MouseWorld.yab | 83 - yab-IDE/Programs/Examples/Ping.yab | 33 - yab-IDE/Programs/Examples/Pong.yab | 22 - yab-IDE/Programs/Examples/SlideDemo.yab | 36 - yab-IDE/Programs/Examples/SliderWorld.yab | 34 - yab-IDE/Programs/Examples/Sokoban.yab | 311 - yab-IDE/Programs/Examples/Tedit.yab | 174 - yab-IDE/Programs/Examples/Timer.yab | 17 - yab-IDE/Programs/Examples/TreeDemo.yab | 30 - yab-IDE/Programs/Examples/Typewriter.yab | 81 - yab-IDE/Programs/Examples/Walk.yab | 31 - yab-IDE/Programs/Examples/WindowWorld.yab | 52 - yab-IDE/Programs/Examples/img/bulb.png | Bin 400 -> 0 bytes .../Programs/Examples/img/button_disabled.png | Bin 719 -> 0 bytes yab-IDE/Programs/Examples/img/button_norm.png | Bin 332 -> 0 bytes .../Programs/Examples/img/button_pressed.png | Bin 333 -> 0 bytes .../Examples/img/checkbutton_disabledOff.png | Bin 399 -> 0 bytes .../Examples/img/checkbutton_disabledOn.png | Bin 407 -> 0 bytes .../Examples/img/checkbutton_enabledOff.png | Bin 398 -> 0 bytes .../Examples/img/checkbutton_enabledOn.png | Bin 412 -> 0 bytes yab-IDE/Programs/Examples/img/final.png | Bin 522 -> 0 bytes yab-IDE/Programs/Examples/img/front.png | Bin 796 -> 0 bytes yab-IDE/Programs/Examples/img/image.png | Bin 16437 -> 0 bytes yab-IDE/Programs/Examples/img/player.png | Bin 57667 -> 0 bytes yab-IDE/Programs/Examples/img/target.png | Bin 402 -> 0 bytes yab-IDE/Programs/Examples/img/wall.png | Bin 438 -> 0 bytes yab-IDE/Programs/Examples/img/yab.png | Bin 378 -> 0 bytes yab-IDE/Programs/libs/Filebox.yab | 122 - yab-IDE/Programs/libs/Toolbar.yab | 50 - yab-IDE/Programs/libs/fileblock.yab | 259 - yab-IDE/Programs/libs/popup.yab | 108 - yab-IDE/Programs/libs/readme | 9 - yab-IDE/Templates/Basic Template | 49 - yab-IDE/Templates/Command Line Template | 7 - yab-IDE/Templates/Empty | 1 - yab-IDE/Templates/Menu Template | 69 - yab-IDE/Templates/TemplateList | 28 - yab-IDE/Templates/Toolbar Template | 90 - yab-IDE/Templates/img/basictemplate.png | Bin 2234 -> 0 bytes yab-IDE/Templates/img/emptytemplate.png | Bin 2609 -> 0 bytes yab-IDE/Templates/img/menutemplate.png | Bin 3270 -> 0 bytes yab-IDE/Templates/img/terminaltemplate.png | Bin 4808 -> 0 bytes yab-IDE/Templates/img/toolbartemplate.png | Bin 5023 -> 0 bytes yab-IDE/data/GenerateIndex.yab | 20 - yab-IDE/data/Help_En.dat | 9290 ----------------- yab-IDE/data/Help_En_Index.dat | 664 -- yab-IDE/data/autocompletion | 174 - yab-IDE/data/color1 | 153 - yab-IDE/data/color2 | 54 - yab-IDE/data/color3 | 9 - yab-IDE/data/color4 | 4 - yab-IDE/data/color5 | 28 - yab-IDE/data/updating_help | 30 - yab-IDE/img/Loading.png | Bin 2378 -> 0 bytes yab-IDE/img/Running.png | Bin 978 -> 0 bytes yab-IDE/img/Splash.png | Bin 21400 -> 0 bytes yab-IDE/img/arrowdown.png | Bin 124 -> 0 bytes yab-IDE/img/arrowright.png | Bin 127 -> 0 bytes yab-IDE/img/bindd.png | Bin 408 -> 0 bytes yab-IDE/img/bindn.png | Bin 378 -> 0 bytes yab-IDE/img/bindp.png | Bin 403 -> 0 bytes yab-IDE/img/closed.png | Bin 245 -> 0 bytes yab-IDE/img/closen.png | Bin 243 -> 0 bytes yab-IDE/img/closep.png | Bin 239 -> 0 bytes yab-IDE/img/copyd.png | Bin 366 -> 0 bytes yab-IDE/img/copyn.png | Bin 389 -> 0 bytes yab-IDE/img/copyp.png | Bin 415 -> 0 bytes yab-IDE/img/cutd.png | Bin 352 -> 0 bytes yab-IDE/img/cutn.png | Bin 379 -> 0 bytes yab-IDE/img/cutp.png | Bin 377 -> 0 bytes yab-IDE/img/debugd.png | Bin 273 -> 0 bytes yab-IDE/img/debugn.png | Bin 263 -> 0 bytes yab-IDE/img/debugp.png | Bin 280 -> 0 bytes yab-IDE/img/gespeichert.png | Bin 378 -> 0 bytes yab-IDE/img/guid.png | Bin 336 -> 0 bytes yab-IDE/img/guin.png | Bin 345 -> 0 bytes yab-IDE/img/guip.png | Bin 367 -> 0 bytes yab-IDE/img/helpd.png | Bin 396 -> 0 bytes yab-IDE/img/helpn.png | Bin 358 -> 0 bytes yab-IDE/img/helpp.png | Bin 404 -> 0 bytes yab-IDE/img/idea.png | Bin 1078 -> 0 bytes yab-IDE/img/info.png | Bin 481 -> 0 bytes yab-IDE/img/logo.png | Bin 11504 -> 0 bytes yab-IDE/img/newd.png | Bin 279 -> 0 bytes yab-IDE/img/newn.png | Bin 304 -> 0 bytes yab-IDE/img/newp.png | Bin 300 -> 0 bytes yab-IDE/img/nicht-gespeichert.png | Bin 376 -> 0 bytes yab-IDE/img/nichtgespeichert grau.png | Bin 329 -> 0 bytes .../img/nichtgespeichert halbtransparent.png | Bin 450 -> 0 bytes yab-IDE/img/nichtgespeichert.png | Bin 360 -> 0 bytes yab-IDE/img/opend.png | Bin 308 -> 0 bytes yab-IDE/img/openn.png | Bin 263 -> 0 bytes yab-IDE/img/openp.png | Bin 282 -> 0 bytes yab-IDE/img/optionsd.png | Bin 341 -> 0 bytes yab-IDE/img/optionsn.png | Bin 335 -> 0 bytes yab-IDE/img/optionsp.png | Bin 327 -> 0 bytes yab-IDE/img/pasted.png | Bin 335 -> 0 bytes yab-IDE/img/pasten.png | Bin 372 -> 0 bytes yab-IDE/img/pastep.png | Bin 371 -> 0 bytes yab-IDE/img/patternd.png | Bin 271 -> 0 bytes yab-IDE/img/patternn.png | Bin 252 -> 0 bytes yab-IDE/img/patternp.png | Bin 258 -> 0 bytes yab-IDE/img/redod.png | Bin 162 -> 0 bytes yab-IDE/img/redon.png | Bin 165 -> 0 bytes yab-IDE/img/redop.png | Bin 163 -> 0 bytes yab-IDE/img/rund.png | Bin 411 -> 0 bytes yab-IDE/img/runn.png | Bin 391 -> 0 bytes yab-IDE/img/runp.png | Bin 389 -> 0 bytes yab-IDE/img/runtermd.png | Bin 443 -> 0 bytes yab-IDE/img/runtermn.png | Bin 438 -> 0 bytes yab-IDE/img/runtermp.png | Bin 436 -> 0 bytes yab-IDE/img/saved.png | Bin 291 -> 0 bytes yab-IDE/img/saven.png | Bin 270 -> 0 bytes yab-IDE/img/savep.png | Bin 249 -> 0 bytes yab-IDE/img/searchd.png | Bin 240 -> 0 bytes yab-IDE/img/searchn.png | Bin 219 -> 0 bytes yab-IDE/img/searchp.png | Bin 204 -> 0 bytes yab-IDE/img/stop.png | Bin 1014 -> 0 bytes yab-IDE/img/undod.png | Bin 170 -> 0 bytes yab-IDE/img/undon.png | Bin 175 -> 0 bytes yab-IDE/img/undop.png | Bin 168 -> 0 bytes yab-IDE/img/warning.png | Bin 991 -> 0 bytes yab-IDE/img/yablogo.png | Bin 11468 -> 0 bytes yab-IDE/src/yab-IDE.yab | 3977 ------- 160 files changed, 20217 deletions(-) delete mode 100644 yab-IDE/BuildFactory/AutoFooter.mak delete mode 100644 yab-IDE/BuildFactory/AutoHeader.mak delete mode 100755 yab-IDE/BuildFactory/BuildFactory.yab delete mode 100644 yab-IDE/BuildFactory/README delete mode 100644 yab-IDE/BuildFactory/flex-bison.yab delete mode 100644 yab-IDE/BuildFactory/parts/YAB-IDE.bf.rdef delete mode 100644 yab-IDE/BuildFactory/parts/YAB.bf.rdef delete mode 100644 yab-IDE/BuildFactory/parts/YabMain.cpp.appsig delete mode 100644 yab-IDE/BuildFactory/parts/YabMain.cpp.end delete mode 100644 yab-IDE/BuildFactory/parts/YabMain.cpp.start delete mode 100644 yab-IDE/BuildFactory/srcfiles delete mode 100644 yab-IDE/BuildFactory/yab-compress.c delete mode 100644 yab-IDE/Language/de.catalog delete mode 100644 yab-IDE/Language/en.catalog delete mode 100644 yab-IDE/Language/nl.catalog delete mode 100755 yab-IDE/Programs/Examples/3D-Curve.yab delete mode 100755 yab-IDE/Programs/Examples/AllInOne.yab delete mode 100644 yab-IDE/Programs/Examples/BlockReadWriteDemo.yab delete mode 100755 yab-IDE/Programs/Examples/BoxWorld.yab delete mode 100755 yab-IDE/Programs/Examples/ButtonWorld.yab delete mode 100755 yab-IDE/Programs/Examples/Calc.yab delete mode 100755 yab-IDE/Programs/Examples/Checkbox.yab delete mode 100755 yab-IDE/Programs/Examples/Clock.yab delete mode 100755 yab-IDE/Programs/Examples/ColorDemo.yab delete mode 100755 yab-IDE/Programs/Examples/DrawWorld.yab delete mode 100755 yab-IDE/Programs/Examples/DropWorld.yab delete mode 100755 yab-IDE/Programs/Examples/EvenMoreControls.yab delete mode 100755 yab-IDE/Programs/Examples/FakeTransparency.yab delete mode 100755 yab-IDE/Programs/Examples/FileboxDemo.yab delete mode 100755 yab-IDE/Programs/Examples/GUI-World.yab delete mode 100755 yab-IDE/Programs/Examples/IconWorld.yab delete mode 100755 yab-IDE/Programs/Examples/ImageWorld.yab delete mode 100755 yab-IDE/Programs/Examples/JDemo.yab delete mode 100755 yab-IDE/Programs/Examples/Keyboard.yab delete mode 100755 yab-IDE/Programs/Examples/Loop-World.yab delete mode 100755 yab-IDE/Programs/Examples/MessageWorld.yab delete mode 100755 yab-IDE/Programs/Examples/MouseWorld.yab delete mode 100755 yab-IDE/Programs/Examples/Ping.yab delete mode 100755 yab-IDE/Programs/Examples/Pong.yab delete mode 100755 yab-IDE/Programs/Examples/SlideDemo.yab delete mode 100755 yab-IDE/Programs/Examples/SliderWorld.yab delete mode 100755 yab-IDE/Programs/Examples/Sokoban.yab delete mode 100755 yab-IDE/Programs/Examples/Tedit.yab delete mode 100755 yab-IDE/Programs/Examples/Timer.yab delete mode 100755 yab-IDE/Programs/Examples/TreeDemo.yab delete mode 100755 yab-IDE/Programs/Examples/Typewriter.yab delete mode 100755 yab-IDE/Programs/Examples/Walk.yab delete mode 100755 yab-IDE/Programs/Examples/WindowWorld.yab delete mode 100644 yab-IDE/Programs/Examples/img/bulb.png delete mode 100644 yab-IDE/Programs/Examples/img/button_disabled.png delete mode 100644 yab-IDE/Programs/Examples/img/button_norm.png delete mode 100644 yab-IDE/Programs/Examples/img/button_pressed.png delete mode 100644 yab-IDE/Programs/Examples/img/checkbutton_disabledOff.png delete mode 100644 yab-IDE/Programs/Examples/img/checkbutton_disabledOn.png delete mode 100644 yab-IDE/Programs/Examples/img/checkbutton_enabledOff.png delete mode 100644 yab-IDE/Programs/Examples/img/checkbutton_enabledOn.png delete mode 100644 yab-IDE/Programs/Examples/img/final.png delete mode 100644 yab-IDE/Programs/Examples/img/front.png delete mode 100644 yab-IDE/Programs/Examples/img/image.png delete mode 100644 yab-IDE/Programs/Examples/img/player.png delete mode 100644 yab-IDE/Programs/Examples/img/target.png delete mode 100644 yab-IDE/Programs/Examples/img/wall.png delete mode 100644 yab-IDE/Programs/Examples/img/yab.png delete mode 100644 yab-IDE/Programs/libs/Filebox.yab delete mode 100644 yab-IDE/Programs/libs/Toolbar.yab delete mode 100644 yab-IDE/Programs/libs/fileblock.yab delete mode 100644 yab-IDE/Programs/libs/popup.yab delete mode 100644 yab-IDE/Programs/libs/readme delete mode 100644 yab-IDE/Templates/Basic Template delete mode 100644 yab-IDE/Templates/Command Line Template delete mode 100644 yab-IDE/Templates/Empty delete mode 100644 yab-IDE/Templates/Menu Template delete mode 100644 yab-IDE/Templates/TemplateList delete mode 100644 yab-IDE/Templates/Toolbar Template delete mode 100644 yab-IDE/Templates/img/basictemplate.png delete mode 100644 yab-IDE/Templates/img/emptytemplate.png delete mode 100644 yab-IDE/Templates/img/menutemplate.png delete mode 100644 yab-IDE/Templates/img/terminaltemplate.png delete mode 100644 yab-IDE/Templates/img/toolbartemplate.png delete mode 100755 yab-IDE/data/GenerateIndex.yab delete mode 100644 yab-IDE/data/Help_En.dat delete mode 100644 yab-IDE/data/Help_En_Index.dat delete mode 100644 yab-IDE/data/autocompletion delete mode 100644 yab-IDE/data/color1 delete mode 100644 yab-IDE/data/color2 delete mode 100644 yab-IDE/data/color3 delete mode 100644 yab-IDE/data/color4 delete mode 100644 yab-IDE/data/color5 delete mode 100644 yab-IDE/data/updating_help delete mode 100644 yab-IDE/img/Loading.png delete mode 100644 yab-IDE/img/Running.png delete mode 100644 yab-IDE/img/Splash.png delete mode 100644 yab-IDE/img/arrowdown.png delete mode 100644 yab-IDE/img/arrowright.png delete mode 100644 yab-IDE/img/bindd.png delete mode 100644 yab-IDE/img/bindn.png delete mode 100644 yab-IDE/img/bindp.png delete mode 100644 yab-IDE/img/closed.png delete mode 100644 yab-IDE/img/closen.png delete mode 100644 yab-IDE/img/closep.png delete mode 100644 yab-IDE/img/copyd.png delete mode 100644 yab-IDE/img/copyn.png delete mode 100644 yab-IDE/img/copyp.png delete mode 100644 yab-IDE/img/cutd.png delete mode 100644 yab-IDE/img/cutn.png delete mode 100644 yab-IDE/img/cutp.png delete mode 100644 yab-IDE/img/debugd.png delete mode 100644 yab-IDE/img/debugn.png delete mode 100644 yab-IDE/img/debugp.png delete mode 100644 yab-IDE/img/gespeichert.png delete mode 100644 yab-IDE/img/guid.png delete mode 100644 yab-IDE/img/guin.png delete mode 100644 yab-IDE/img/guip.png delete mode 100644 yab-IDE/img/helpd.png delete mode 100644 yab-IDE/img/helpn.png delete mode 100644 yab-IDE/img/helpp.png delete mode 100644 yab-IDE/img/idea.png delete mode 100644 yab-IDE/img/info.png delete mode 100644 yab-IDE/img/logo.png delete mode 100644 yab-IDE/img/newd.png delete mode 100644 yab-IDE/img/newn.png delete mode 100644 yab-IDE/img/newp.png delete mode 100644 yab-IDE/img/nicht-gespeichert.png delete mode 100644 yab-IDE/img/nichtgespeichert grau.png delete mode 100644 yab-IDE/img/nichtgespeichert halbtransparent.png delete mode 100644 yab-IDE/img/nichtgespeichert.png delete mode 100644 yab-IDE/img/opend.png delete mode 100644 yab-IDE/img/openn.png delete mode 100644 yab-IDE/img/openp.png delete mode 100644 yab-IDE/img/optionsd.png delete mode 100644 yab-IDE/img/optionsn.png delete mode 100644 yab-IDE/img/optionsp.png delete mode 100644 yab-IDE/img/pasted.png delete mode 100644 yab-IDE/img/pasten.png delete mode 100644 yab-IDE/img/pastep.png delete mode 100644 yab-IDE/img/patternd.png delete mode 100644 yab-IDE/img/patternn.png delete mode 100644 yab-IDE/img/patternp.png delete mode 100644 yab-IDE/img/redod.png delete mode 100644 yab-IDE/img/redon.png delete mode 100644 yab-IDE/img/redop.png delete mode 100644 yab-IDE/img/rund.png delete mode 100644 yab-IDE/img/runn.png delete mode 100644 yab-IDE/img/runp.png delete mode 100644 yab-IDE/img/runtermd.png delete mode 100644 yab-IDE/img/runtermn.png delete mode 100644 yab-IDE/img/runtermp.png delete mode 100644 yab-IDE/img/saved.png delete mode 100644 yab-IDE/img/saven.png delete mode 100644 yab-IDE/img/savep.png delete mode 100644 yab-IDE/img/searchd.png delete mode 100644 yab-IDE/img/searchn.png delete mode 100644 yab-IDE/img/searchp.png delete mode 100644 yab-IDE/img/stop.png delete mode 100644 yab-IDE/img/undod.png delete mode 100644 yab-IDE/img/undon.png delete mode 100644 yab-IDE/img/undop.png delete mode 100644 yab-IDE/img/warning.png delete mode 100644 yab-IDE/img/yablogo.png delete mode 100644 yab-IDE/src/yab-IDE.yab diff --git a/yab-IDE/BuildFactory/AutoFooter.mak b/yab-IDE/BuildFactory/AutoFooter.mak deleted file mode 100644 index fcb0b65..0000000 --- a/yab-IDE/BuildFactory/AutoFooter.mak +++ /dev/null @@ -1,23 +0,0 @@ -## -## GCC Options -## - -SH=$(shell finddir B_SYSTEM_HEADERS_DIRECTORY) -UH= $(shell finddir B_USER_HEADERS_DIRECTORY) -GCC = gcc -GCC_OPT = $(DBG) $(OPT) -I. $(addprefix -I,$(SH)) $(addprefix -I,$(UH)) -DHAVE_CONFIG -DUNIX $(HAIKUOPT) -I/boot/system/non-packaged/develop/headers/yab -GPP = g++ -GPP_OPT = $(DBG) $(OPT) -I. -DHAVE_CONFIG -DUNIX $(HAIKUOPT) -I/boot/system/non-packaged/develop/headers/yab - -yab: YabMain.o main.o flex.o - $(GPP) $(GPP_OPT) -o $(TARGET) YabMain.o main.o flex.o $(LIBPATH) $(LIB) - -YabMain.o: YabMain.cpp - $(GPP) $(GPP_OPT) -c YabMain.cpp -o YabMain.o -flex.o: flex.c - $(GCC) $(GCC_OPT) -c flex.c -o flex.o -main.o: main.c - $(GCC) $(GCC_OPT) -c main.c -o main.o - -clean: - rm -f core *.o yabasic.output diff --git a/yab-IDE/BuildFactory/AutoHeader.mak b/yab-IDE/BuildFactory/AutoHeader.mak deleted file mode 100644 index 007ac53..0000000 --- a/yab-IDE/BuildFactory/AutoHeader.mak +++ /dev/null @@ -1,40 +0,0 @@ -## -## yab Haiku BuildFactory Makefile -## -## (c) Jan Bungeroth 2009 - 2011 -## Artistic License. -## - -## -## Haiku stuff -## -HAIKUTAB = YabTabView.o -HAIKUOPT = -DHAIKU - -## -## Use our own column list view -## -COLUMN = column/ColumnListView.o - -## -## enable debug -## -# DBG = -g -# - -## -## enable optimization -## -OPT = -O -# - -## -## Libraries -## -##LIBPATH = -L/boot/home/config/lib -##LIBPATH = -L/boot/system/lib -LIBPATHS = $(shell findpaths B_FIND_PATH_DEVELOP_LIB_DIRECTORY) -LIBPATH=$(addprefix -L,$(LIBPATHS)) - -LIB = -lyab1 -lbe -lroot -ltranslation -ltracker -lmedia -lz - diff --git a/yab-IDE/BuildFactory/BuildFactory.yab b/yab-IDE/BuildFactory/BuildFactory.yab deleted file mode 100755 index ac1e6db..0000000 --- a/yab-IDE/BuildFactory/BuildFactory.yab +++ /dev/null @@ -1,522 +0,0 @@ -#!yab - -////////////////////////////////////// -// BuildFactory v 2.4 -////////////////////////////////////// - -// find out in which directory we are -if (peek("isbound")) then - This_dir$ = peek$("directory")+"/" -else - This_dir$ = trim$(system$("pwd"))+"/" -fi - -if (system("test -e \""+This_dir$+"yab\"")) then - YAB$ = "yab" -else - YAB$ = This_dir$+"yab" -fi - -///////////////////////////////////////////////////////////// -// if yab gives us its version, we know that it exists. -// Otherwise we tell the user to make sure that there is one -///////////////////////////////////////////////////////////// -if (system(YAB$+" -version")) then - print "Please make sure you have a yab binary in" - print "\t"+left$(This_dir$, len(This_dir$)-1) - print "or" - print "\t/home/config/bin" - print "or" - print "\t/system/bin\n" - exit 1 -fi - -// set some global variables here -AppName$ = "BuildFactory" -VERSION$ = " 2.4.1" -TMP_folder$ = "/boot/var/tmp/BUILD_FACTORY_TMP/" -Lib_path$ = "/boot/home/config/settings/yab/" - -dim Library$(1) -dim Is_in_lib_path(1) -dim Found_sub$(1) - -///////////////////////////////////////////////////////////// -// Program starts here -// - -if (not open(1,"flex.c")) then -system("yab flex-bison.yab") // make flex.c and modify it for BuildFactory -else -close #1 -endif - -if (peek("argument") < 2) then - UsageAdvise(1) -fi - -// in- and outputfiles -Output_file$ = peek$("argument") -Input_file$ = peek$("argument") -appsig$ = peek$("argument") -run_from_ide$ = peek$("argument") -if appsig$="" appsig$=getappsig$(Input_file$) -if appsig$="" appsig$="application/x-vnd.yab-app" -SetAppSig(appsig$) - -Input_dir$ = left$(Input_file$, rinstr(Input_file$, "/")) -Library$(0) = right$(Input_file$, len(Input_file$)-rinstr(Input_file$, "/")) - -if (trim$(Input_dir$) = "") Input_dir$ = This_dir$ - -// create the temp folder -if (system("test -d \""+TMP_folder$+"\"")) then - if (system("mkdir -p \""+TMP_folder$+"\"")) then - print "-- Error while creating temp folder!" - UsageAdvise(1) - fi -fi - -// We clean up all the files including the libs, if existing -for NL = 0 to num_lib - if (Is_in_lib_path(NL)) then - lib$ = Lib_path$+Library$(NL) - else - lib$ = Input_dir$+Library$(NL) - fi - num_lib = CleanUpCode(lib$) -next NL - -// writing all the libs into the mainfile -// because the BuildFactory can not handle libs -err = JoinFiles(Output_file$+"_bf.yab") - -// here it comes - the BuildFactory -BuildFactory(Output_file$+"_bf.yab") - -// cleaning up -RmErr = RemoveTemp() -system ("RdefApply parts/YAB.bf.rdef "+Output_file$) -system ("addattr -t mime BEOS:APP_SIG "+appsig$+" "+Output_file$) -system ("addattr -t mime BEOS:TYPE application/x-vnd.be-elfexecutable "+Output_file$) -system ("chmod a+x "+Output_file$) - -// check if the BuildFactory was envoked by the yab-ide. -// if so, copy the output file to the inmputfile's directory and open the directory. -// the IDE will delete the output file from the BuildFactory directory. - - -if run_from_ide$ = "yab-ide" then - system ("cp "+Output_file$+" "+Input_dir$) - system ("open "+Input_dir$) -endif - -print "--------" -print "-- Info:" -print "\tNumber of libs:\t\t", num_lib -print "\tNumber of subs:\t\t", num_sub -print "\tNumber of lines:\t", num_line - -exit - -// -// programm ends here -///////////////////////////////////////////////////////////// - -/////////////////////////////////////////// -// joining all files to one -/////////////////////////////////////////// -sub JoinFiles(the_file$) - local in_file, out_file - - out_file = OpenWriteFile(the_file$) - for NL = 0 to num_lib - // contents of each file is written to our joined temp file - in_file = OpenReadFile(TMP_folder$+Library$(NL)) - while (not eof(in_file)) - print #out_file LineInput$(in_file) - num_line = num_line + 1 - wend - close in_file - next NL - close out_file - - return -end sub - -/////////////////////////////////////////// -// here we are cleaning up the files -/////////////////////////////////////////// -sub CleanUpCode(the_file$) - local the_filename$, out_file$ - local in_file, out_file - local Current_line$ - - the_filename$ = right$(the_file$, len(the_file$)-rinstr(the_file$, "/")) - out_file$ = TMP_folder$+the_filename$ - - out_file = OpenWriteFile(out_file$) - in_file = OpenReadFile(the_file$) - - if (min(out_file, in_file) = 0) return -1 - - print "\t-- removing not needed stuff ..." - while (not eof(in_file)) - Current_line$ = LineInput$(in_file) - - if (double_sub) then - if (upper$(left$(Current_line$, 7)) = "END SUB") double_sub = false - continue - fi - - // remove empty lines and commented lines and stuff - if (Current_line$ = "") continue - if (left$(Current_line$, 2) = "//") continue - if (left$(Current_line$, 1) = "#") continue - if (upper$(left$(Current_line$, 11)) = "EXPORT SUB ") then - Current_line$ = trim$(right$(Current_line$, len(Current_line$)-6)) - fi - Current_line$ = CheckOnLineComments$(Current_line$) - if (upper$(left$(Current_line$, 4)) = "SUB ") then - curr_sub$ = right$(Current_line$, len(Current_line$)-4) - curr_sub$ = left$(curr_sub$, instr(curr_sub$, "(")) - for NS = 0 to num_sub - if (Found_sub$(NS) = curr_sub$) then - double_sub = true - break - fi - next NS - - if (double_sub) then - continue - else - num_sub = num_sub + 1 - dim Found_sub$(num_sub+1) - Found_sub$(num_sub) = curr_sub$ - fi - fi - if (upper$(left$(Current_line$, 6)) = "IMPORT") then - found_lib = FindLibraries(Current_line$) - continue - fi - if (upper$(Current_line$) = "ENDIF") Current_line$ = "fi" - - print #out_file Current_line$ - wend - - close in_file - close out_file - - return found_lib -end sub - -//////////////////////////////////////////// -// search for comments behind a needed line -// if found, remove it. Exept there is a " -//////////////////////////////////////////// -sub CheckOnLineComments$(the_line$) - D = instr(the_line$, "//") - - if (D) then - local is_comment - local A : local B - local C : local E - - for B = 1 to len(the_line$) - A = asc(mid$(the_line$, B, 1)) - if (B > D) then - if (A = 34 and is_comment) then - C = true - break - fi - else - E = asc(mid$(the_line$, B+1, 1)) - if (E = 34 and not A = 92) then - if (is_comment) then - is_comment = false - else - is_comment = true - fi - fi - fi - next B - - if (not C) the_line$ = left$(the_line$, D-1) - fi - - return trim$(the_line$) -end sub - -///////////////////////////////////////////////// -// search for libraries, to prepare them as well -///////////////////////////////////////////////// -sub FindLibraries(the_line$) - local Library$ - - Library$ = right$(the_line$, len(the_line$)-7) - - if (upper$(right$(Library$, 4)) <> ".YAB") then - Library$ = Library$+".yab" - fi - - num_lib = num_lib + 1 - dim Library$(num_lib+1) - dim Is_in_lib_path(num_lib+1) - - if (system("test -e \""+Input_dir$+Library$+"\"")) then - if (system("test -e \""+Lib_path$+Library$+"\"")) then - print "-- Could not find lib\n\t"+Library$ - num_lib = num_lib - 1 - return num_lib - else - Is_in_lib_path(num_lib) = true - fi - fi - - Library$(num_lib) = Library$ - - print "-- Found lib: "+Library$ - return num_lib -end sub - -///////////////////////////////////////////////////////////// -// open the inputfile for reading -///////////////////////////////////////////////////////////// -sub OpenReadFile(the_file$) - local READ_FILE - READ_FILE = 22 - - if (not open(#READ_FILE,the_file$,"r")) then - print "-- Could not open "+the_file$ - print "-- for reading!" - exit - fi - - return READ_FILE -end sub - -///////////////////////////////////////////////////////////// -// open the outputfile for writing -///////////////////////////////////////////////////////////// -sub OpenWriteFile(the_file$) - local WRITE_FILE - WRITE_FILE = 23 - - if (not open(#WRITE_FILE,the_file$,"w")) then - print "-- Could not open "+the_file$ - print "-- for writing!" - exit - fi - - return WRITE_FILE -end sub - -///////////////////////////////////////// -// read in one line from the given file -///////////////////////////////////////// -sub LineInput$(n) - - local tmp : local tmp$ - -// while (tmp <> 10) -// tmp = peek(n) -// if (tmp < 0) continue -// tmp$ = tmp$ + chr$(tmp) -// wend - -// line input allows for final lines without a newline "\n" - -line input #n tmp$ - return trim$(tmp$) -end sub - -///////////////////////////////////////////////////////////// -// Remove our tempfolder -///////////////////////////////////////////////////////////// -sub RemoveTemp() - if (not system("test -d \""+TMP_folder$+"\"")) then - RmErr = system("rm -rf \""+TMP_folder$+"\"") - fi - - return RmErr -end sub - -///////////////////////////////////////////////////////////// -// tell the user how to use this app -///////////////////////////////////////////////////////////// -sub UsageAdvise(n) - print "\n"+AppName$+VERSION$ - print "Usage:" - print "\t"+AppName$+" outputfile inputfile < applicationsignature >\n" - print "\tFilenames may have no spaces!\n" - print "\tapplicationsignature default is: application/x-vnd.yab-app\n" - RemoveTemp() - - exit n -end sub - -///////////////////////////////////////////////////////////// -// set the application signature in YabMain.cpp -///////////////////////////////////////////////////////////// -sub SetAppSig(sig$) - app_sig$="\n\tBString tmp(\""+sig$+"\");\n" - open #1, This_dir$+"parts/YabMain.cpp.appsig","w" - print #1 app_sig$ - close #1 - cmd$="cat "+This_dir$+"parts/YabMain.cpp.start "+This_dir$+"parts/YabMain.cpp.appsig "+This_dir$+"parts/YabMain.cpp.end > "+This_dir$+"YabMain.cpp" - system(cmd$) - -end sub - -///////////////////////////////////////////////////////////// -// set the application signature to match the mimetype declared in the file. -///////////////////////////////////////////////////////////// - - -sub getappsig$(infil$) -local x,a$,i,ii -open #22,infil$,"r" -for i=1 to 2 -line input #22 a$ -a$=lower$(a$) -ii = instr(a$,"mimetype") -if ii<>0 then -a$=right$(a$,len(a$) - (ii+8)) -a$=trim$(a$) -a$=right$(a$,len(a$)-1) -a$=left$(a$,len(a$)-1) -close #22 -return a$ -endif -next -close #22 -return "" - - -end sub - - -//////////////////////////////////////// -//////////////////////////////////////// -// the BuildFactory starts here -//////////////////////////////////////// -//////////////////////////////////////// -sub BuildFactory(f$) - handle = open(f$, "r") - if(not handle) then - print "Error: Could not open file "+f$ - exit(1) - endif - - print "Reading file "+f$+"..." - print - - while(not eof(handle)) - numRead = numRead + 1 - dim line$(numRead) - line$(numRead) = GetLine$(handle) - wend - close(handle) - - print "Dumping file..." - print - DumpProg(f$) - - // times have changed :) - hasZeta = false - - print "This yab version was compiled on "+peek$("os")+"." - realOS$ = upper$(system$("uname -o")) - realOS$ = left$(realOS$, len(realOS$)-1) - print "This system is running "+realOS$ - - print "Writing Automakefile and global.h..." - print - - system("cp AutoHeader.mak Automakefile") - - handle = open("Automakefile", "a") - if(not handle) then - print "Error: Could not write file Automakefile" - exit(1) - endif - - print #handle "TARGET = "+left$(f$, len(f$)-7) - - close(handle) - - system("cat AutoFooter.mak >> Automakefile") - - print "Starting make (ignore warnings)..." - print - system("make -f Automakefile clean") - system("make -f Automakefile") - system("make -f Automakefile clean") - system("rm -f program.h Automakefile "+f$) - print - print "Finished" - print - - return -end sub - -sub GetFirstCommand$(line$) - local t$: local ret$ - local i - - t$ = ltrim$(line$) - for i=1 to len(t$) - if(mid$(t$,i,1) = " " or mid$(t$,i,1) = "\t" or mid$(t$,i,1) = "\n" or mid$(t$,i,1) = "(") break - ret$ = ret$ + mid$(t$,i,1) - next i - return ret$ -end sub - -sub DumpProg(fileName$) - local handle - local t$ - local i - - if(val(system$("wc -c "+fileName$)) < 100) then - print "WARNING: File too small, filling up program with comments" - handle = open(fileName$, "a") - if(handle) then - print #handle "rem ~~ This comment was added by the ~~" - print #handle "rem ~~ BuildFactory because your program ~~" - print #handle "rem ~~ was too small. ~~" - close(handle) - else - print "ERROR: Could not add comments, is "+fileName$+" write-protected?" - exit(1) - endif - endif - - system("yab-compress "+fileName$) - handle = open("program.h", "a") - if(handle) then - print #handle "#define PROGLEN "; - t$ = system$("wc -c "+fileName$) - i = 1 - while(mid$(t$,i,1) = " ") - i = i + 1 - wend - if(i>1) t$ = right$(t$,len(t$)-i+1) - t$ = left$(t$, instr(t$, " ")-1) - print #handle t$ - close(handle) - endif - return -end sub - -sub GetLine$(handle) - local tmp$ - local retString$ - - while(tmp$<>chr$(10) and tmp$<>chr$(13) and not eof(handle)) - tmp$ = chr$(peek(handle)) - retString$ = retString$ + tmp$ - wend - - return retString$ -end sub - diff --git a/yab-IDE/BuildFactory/README b/yab-IDE/BuildFactory/README deleted file mode 100644 index a4b7978..0000000 --- a/yab-IDE/BuildFactory/README +++ /dev/null @@ -1,64 +0,0 @@ --- English -- Englisch -- -- German below -- Deutsch unten -- - -Some rules you have to know: - -Names of sub functions are only to be used once. This is for all affected files. -If there are subs with the same name, only the first one will be taken over while -the second will simply be ignored! - - -In libraries only subs and export subs are to be entered. Additional code not within -a sub or export sub are senseless later on, because libraries are simply added at the -end of the main file, so that one big file is generated. -So such additional lines are between the subs and are never read. - -All libraries that are imported with import are recognized. Also libraries that were -imported from within libraries. - -Libraries have to be placed either in the folder of the main file or in the yab lib -folder "/boot/home/config/settings/yab"! - -The BuildFactory is to be used as follows: - -yab BuildFactory Outputfile Inputfile.yab < applicationsig > - -from within the folder of the BuildFactory. The Outputfile is also placed there at the end. -The Inputfile has to have its relative or complete path included of course. - -The file which contains the total of the code is also stored in the folder of the BuildFactory, -for the case the created binary gives out error messages with line number. Those are of course -regarded to this certain file. - - --- German -- Deutsch -- - -Ein paar Regeln, die man befolgen muss: - -Namen für sub-Funktionen dürfen nur einmal vergeben werden. Das gilt für -den Umfang aller Dateien. Sollten zwei subs mit gleichem Namen vorkommen, -wird nur das erste eingebaut, während das zweite einfach ignoriert wird! - -In libraries dürfen nur subs und export subs vorkommen. Zusätzliche -Funktionen, die nicht in einer Sub-Funktion stehen machen später keinen -Sinn, dadurch dass die libs einfach hinten an die Hauptdatei angefügt -werden, so dass eine einzige Datei entsteht. -Also sind zusätzliche Funktionen zwischen den subs und werden nie gelesen. - -Alle libraries, die mit import importiert werden, werden beachtet. Auch -Libraries, die aus Libraries heraus importiert werden. - -Libraries haben entweder in dem Verzeichnis der Hauptdatei oder in dem -yab-lib-Ordner "/boot/home/config/settings/yab/" zu liegen! - -Aufgerufen muss die BuildFactory wie folgt: - -yab BuildFactory.yab OutputFile InputFile.yab < applicationsig > - -aus dem Verzeichnis der BuildFactory heraus. Dort landet auch das -OutputFile. Zu dem InputFile.yab muss natürlich ein relativer oder -vollständiger Pfad angegeben werden. - -Die Datei, in dem der gesamte Source zusammengefasst ist, wird ebenfalls in -dem Verzeichnis der BuildFactory abgelegt, für den Fall, dass das erzeugte -Binary Fehler mit Zeilenangabe ausgibt. Diese beziehen sich dann natürlich -auf jene Datei. diff --git a/yab-IDE/BuildFactory/flex-bison.yab b/yab-IDE/BuildFactory/flex-bison.yab deleted file mode 100644 index e51d0da..0000000 --- a/yab-IDE/BuildFactory/flex-bison.yab +++ /dev/null @@ -1,152 +0,0 @@ -#!yab - -doc This program modifies flex.c and main.c for the Buildfactory -doc It accomplishes the seteps documented in HowToMakeABuildFactory.txt. -doc The BuildFactory calls this program if flex.c is missing. -doc Note that bison.h comes with the yab devel package, so we -doc don't need to generate it ourselves anymore. -doc -doc by Jim Saxton, 2015, Artistic license - -system("flex -i -I -L -s -t yabasic.flex >flex.c") -system("perl -i -n -e 'if (!/^\#include\s+\s+$$/) {print if $$i;$$i++}' flex.c") -system ("mv flex.c tmpflex.c") - -open #1, "tmpflex.c", "r" -open #2, "outflex.c", "w" - - - -while (a$<>"#include ") - line input #1 a$ - print #2 a$ -wend - -print #2 "#include " -print #2 "#include "+chr$(34)+"program.h"+chr$(34) -print #2 "static int isparsed = 0;" -systype$=system$("getarch") -systype$=trim$(systype$) - -if systype$="x86_64" then -while (a$<>"#define YY_BUF_SIZE 32768") - line input #1 a$ - if (a$<>"#define YY_BUF_SIZE 32768") print #2 a$ -wend - -print #2 "#define YY_BUF_SIZE PROGLEN" - - - -endif - -while (a$<>"#define YY_BUF_SIZE 16384") - line input #1 a$ - if (a$<>"#define YY_BUF_SIZE 16384") print #2 a$ -wend - -print #2 "#define YY_BUF_SIZE PROGLEN" - -found=0 - -while (found=0) - line input #1 a$ - if (!instr(a$,"while ( (result = fread")) and (!instr(a$,"while ( (result = (int) fread")) then - print #2 a$ - else - found=1 - endif -wend - -print #2 " while ( (result = zread(buf, 1, max_size, yyin))==0 && ferror(yyin)) "+chr$(92) -found=0 - -while (found=0) - line input #1 a$ - if (!instr(a$,"int ret_val;")) then - print #2 a$ - else - found=1 - endif -wend - -print #2 a$ -print #2 " if(isparsed) return EOB_ACT_END_OF_FILE;" - -while (! eof(#1)) - line input #1 a$ - print #2 a$ -wend - -print #2 "int zread(char* dest, size_t memb_size, size_t num_memb, FILE *file)" -print #2 "{" -print #2 " long destlen = PROGLEN;" -print #2 " if(isparsed==1)" -print #2 " return 0;" -print #2 " isparsed = 1;" -print #2 " uncompress(dest,&destlen,myProg,sizeof(myProg));" -print #2 " return destlen;" -print #2 "}" - -system("mv outflex.c flex.c") -system("rm tmpflex.c") - -close #1 -close #2 - -// fix main.c - -system ("mv main.c tmpmain.c") - -open #1, "tmpmain.c", "r" -open #2, "outmain.c", "w" - -found=0 - -while (found = 0) - line input #1 a$ - if (not instr(a$, "int isbound(void)")) then - print #2 a$ - else - found=1 - print #2 a$ - end if -wend - -print #2 "{" -print #2 " FILE *interpreter;" -print #2 " if (!interpreter_path || !interpreter_path[0]) {" -print #2 " error(FATAL,"+chr$(34)+"interpreter_path is not set !"+chr$(34)+");" -print #2 " return 0;" -print #2 " }" -print #2 " if (!(interpreter=fopen(interpreter_path,"+chr$(34)+"r"+chr$(34)+"))) {" -print #2 " sprintf(string,"+chr$(34)+"Couldn't open '%s' to check, if it is bound: %s"+chr$(34)+",interpreter_path,my_strerror(errno));" -print #2 " error(WARNING,string);" -print #2 " return 0;" -print #2 " }" -print #2 " return 1;" -print #2 "}" -print #2 "" -print #2 "" - -found = 0 - -while (found = 0) - line input #1 a$ - if (not instr(a$, "static int mybind(char *bound)")) then - found = 0 - else - found = 1 - print #2 a$ - end if -wend - -while (not eof(1)) - line input #1 a$ - print #2 a$ -wend - -close #1 -close #2 -system("mv outmain.c main.c") -system("rm tmpmain.c") \ No newline at end of file diff --git a/yab-IDE/BuildFactory/parts/YAB-IDE.bf.rdef b/yab-IDE/BuildFactory/parts/YAB-IDE.bf.rdef deleted file mode 100644 index 21251e3..0000000 --- a/yab-IDE/BuildFactory/parts/YAB-IDE.bf.rdef +++ /dev/null @@ -1,38 +0,0 @@ - -resource vector_icon { - $"6E6369660E0500020006023C43C6B9E5E23A85A83CEE414268F44A445900C6D7" - $"F5FF6B94DD03EC66660200060238C5F1BB105D3DFDC23B9CD045487847B50700" - $"FFFFFFFFC1CCFF020006023B3049396B0ABA90833C646E4A101543299500FFFF" - $"FFFFEBEFFF020006023C71E33A0C78BA15E43C7D2149055549455700E3EDFFFF" - $"9EC2FF03FFACAC0200060239D53438FFCBBBC1973C666F4ADC3246DC6C00C1CC" - $"FFFFFFFFFF03003CB0020006023C0AE63B3927BC611E3D03FF4C25624A1A9600" - $"A3043CFFFF90AF03C93B3B030D296402000602BD498B3E1159BF219BBE7D2F4C" - $"1B8F4A331300BD0F0FFFE98484040174100A08325E385E40564E5E545E605058" - $"4C3E510A062E2C2E3E3E454A3C4A2A3A250A042E2C2E3E3E453E320A042E2C3E" - $"324A2A3A250A043E323E454A3C4A2A0A0338423C4D3C440A0622422254325C3E" - $"513E402E3A0A0422422254325C32490A04224232493E402E3A0A043249325C3E" - $"513E400A063E423E544E5C5A505A3F4A390A04C222C20F4E495A3F523C0A043E" - $"42C222C20F523C4A390A054151C08BC8834E5C4E49C22AC2130A053E423E54C0" - $"8BC8834151C22AC2130A044E494E5C5A505A3F110A0D0100000A0001061815FF" - $"01178400040A00010618001501178600040A010107000A080109000A0B010520" - $"20210A050108000A00010A1001178400040A02010D000A0A010E000A0902040F" - $"000A06010B000A0C010C000A0001011001178400040A030102000A040103000A" - $"07010400" -}; - - -resource app_signature "application/x-vnd.yab-IDE"; - -resource app_version { - major = 2, - middle = 2, - minor = 6, - - variety = B_APPV_FINAL, - internal = 0, - - short_info = "yab IDE", - long_info = "An integrated development environment for yab." -}; - -resource app_flags 1; diff --git a/yab-IDE/BuildFactory/parts/YAB.bf.rdef b/yab-IDE/BuildFactory/parts/YAB.bf.rdef deleted file mode 100644 index a3a57b7..0000000 --- a/yab-IDE/BuildFactory/parts/YAB.bf.rdef +++ /dev/null @@ -1,23 +0,0 @@ - -resource vector_icon { - $"6E6369660E0500020006023C43C6B9E5E23A85A83CEE414268F44A445900C6D7" - $"F5FF6B94DD03EC66660200060238C5F1BB105D3DFDC23B9CD045487847B50700" - $"FFFFFFFFC1CCFF020006023B3049396B0ABA90833C646E4A101543299500FFFF" - $"FFFFEBEFFF020006023C71E33A0C78BA15E43C7D2149055549455700E3EDFFFF" - $"9EC2FF03FFACAC0200060239D53438FFCBBBC1973C666F4ADC3246DC6C00C1CC" - $"FFFFFFFFFF03003CB0020006023C0AE63B3927BC611E3D03FF4C25624A1A9600" - $"A3043CFFFF90AF03C93B3B030D296402000602BD498B3E1159BF219BBE7D2F4C" - $"1B8F4A331300BD0F0FFFE98484040174100A08325E385E40564E5E545E605058" - $"4C3E510A062E2C2E3E3E454A3C4A2A3A250A042E2C2E3E3E453E320A042E2C3E" - $"324A2A3A250A043E323E454A3C4A2A0A0338423C4D3C440A0622422254325C3E" - $"513E402E3A0A0422422254325C32490A04224232493E402E3A0A043249325C3E" - $"513E400A063E423E544E5C5A505A3F4A390A04C222C20F4E495A3F523C0A043E" - $"42C222C20F523C4A390A054151C08BC8834E5C4E49C22AC2130A053E423E54C0" - $"8BC8834151C22AC2130A044E494E5C5A505A3F110A0D0100000A0001061815FF" - $"01178400040A00010618001501178600040A010107000A080109000A0B010520" - $"20210A050108000A00010A1001178400040A02010D000A0A010E000A0902040F" - $"000A06010B000A0C010C000A0001011001178400040A030102000A040103000A" - $"07010400" -}; - - diff --git a/yab-IDE/BuildFactory/parts/YabMain.cpp.appsig b/yab-IDE/BuildFactory/parts/YabMain.cpp.appsig deleted file mode 100644 index 306eb8b..0000000 --- a/yab-IDE/BuildFactory/parts/YabMain.cpp.appsig +++ /dev/null @@ -1,3 +0,0 @@ - - BString tmp("application/x-vnd.yab-app"); - diff --git a/yab-IDE/BuildFactory/parts/YabMain.cpp.end b/yab-IDE/BuildFactory/parts/YabMain.cpp.end deleted file mode 100644 index 2142aa8..0000000 --- a/yab-IDE/BuildFactory/parts/YabMain.cpp.end +++ /dev/null @@ -1,43 +0,0 @@ - for(int i=1; iRun(); - ret = yabInterface->GetErrorCode(); - delete yabInterface; - return ret; -} diff --git a/yab-IDE/BuildFactory/parts/YabMain.cpp.start b/yab-IDE/BuildFactory/parts/YabMain.cpp.start deleted file mode 100644 index 4757ed3..0000000 --- a/yab-IDE/BuildFactory/parts/YabMain.cpp.start +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include -#include "YabInterface.h" - -char t[1024]; -const char* readSignature(int argc, char** argv) -{ \ No newline at end of file diff --git a/yab-IDE/BuildFactory/srcfiles b/yab-IDE/BuildFactory/srcfiles deleted file mode 100644 index a8299b0..0000000 --- a/yab-IDE/BuildFactory/srcfiles +++ /dev/null @@ -1,12 +0,0 @@ -config.h -bison.h -function.c -global.h -main.c -RdefApply -yabasic.bison -yabasic.flex -yabasic.h -YabInterface.h -YabList.h -YabMain.cpp diff --git a/yab-IDE/BuildFactory/yab-compress.c b/yab-IDE/BuildFactory/yab-compress.c deleted file mode 100644 index 7f5dced..0000000 --- a/yab-IDE/BuildFactory/yab-compress.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include - -unsigned long file_size(char *filename) -{ - unsigned long size; - FILE *pFile = fopen(filename, "rb"); - fseek (pFile, 0, SEEK_END); - size = ftell(pFile); - fclose (pFile); - return size; -} - -int main(int argc, char *argv[]) -{ - unsigned long filesize; - char *buffer; - FILE *fi, *fo; - char *dest; - unsigned long destlen; - unsigned long i; - - if(argc != 2) { - printf("Usage: yab-compress \n\n"); - return 1; - } - - filesize = file_size(argv[1]); - buffer = (char*)malloc(filesize); - dest = (char*)malloc(filesize); - - // read source file into buffer - fi = fopen(argv[1], "r"); - fread(buffer, sizeof(char), filesize, fi); - fclose(fi); - - // compress buffer - compress(dest, &destlen, buffer, filesize); - - // write compressed buffer to output - fo = fopen("program.h", "w"); - fprintf(fo, "const char myProg[] = {"); - for(i=0; i < destlen; i++) - fprintf(fo, "%i,", dest[i]); - fprintf(fo, "' ' };\n"); - fclose(fo); - - return 0; -} diff --git a/yab-IDE/Language/de.catalog b/yab-IDE/Language/de.catalog deleted file mode 100644 index a43289e..0000000 --- a/yab-IDE/Language/de.catalog +++ /dev/null @@ -1,215 +0,0 @@ -1 de x-vnd.yab-IDE 2612525067 -File Datei -New... Neu... -Open... Öffnen... -Close Schließen -Save Speichern -Save As... Speichern als... -Save As Template... Als Vorlage speichern... -Page Setup... Seiteneinrichtung... -Print... Drucken... -Quit Beenden -Edit Bearbeiten -Undo Rückgängig -Cut Ausschneiden -Copy Kopieren -Paste Einfügen -Select All Alles auswählen -Find Suchen -Find Again Weitersuchen -Find and Replace Suchen und ersetzen -Program Programm -Run Ausführen -Run in Terminal Im Terminal ausführen -Set Run Parameters... Parameter setzen... -Build Factory... Build-Factory... -Tools Werkzeuge -Pattern Editor... Muster erstellen... -Color Selection... Farbe auswählen... -ASCII Table... ASCII Tabelle... -View Ansicht -Next File Nächste Datei -Previous File Vorherige Datei -Full Screen Vollbild -Maximize Editor Editor maximieren -Auto Indent Automatisch einrücken -Auto Completion Automatisch ergänzen -Refresh Colors Farben wiederherstellen -Reformat Sourcecode Quelltext formatieren -Undo Reformat Formatierung zurücksetzen -Options... Einstellungen... -Introduction to the IDE... Einführung zur IDE... -yab Help... yab Hilfe... -Yabasic Manual... Yabasic Handbuch... -Online Resources Webseiten online -yab Homepage... yab Homepage... -yab Forums... yab Foren... -Yabasic Homepage... Yabasic Homepage... -Team Maui... Team Maui... -About... Über yab-IDE... -New Neu -Open Öffnen -Build Factory Build Factory -Pattern Editor Muster erstellen -Options Einstellungen -yab Help yab Hilfe -Go to Line: Gehe zu Zeile: - Files Dateien - Help Hilfe -Filename Dateiname -Command Befehl -yab Output yab Ausgabe -Immediate Sofort ausführen -Execute Ausführen -Find: Suche: -Replace: Ersetze: -Case Sensitive Groß-/Kleinschreibung beachten -Replace All Alles ersetzen -Suspecting user input, therefore starting in a terminal. Eine Benutzereingabe wird erwartet, Programm startet deshalb im Terminal. -Ok Ok -File: Datei: - (not saved) (nicht gespeichert) -Line Zeile -Please wait... Bitte warten... -Loading Program Lade Programm -Running Ausführung -Running Program Ausführung -Error! Program could not be killed. Fehler! Programm konnte nicht beendet werden. -Oops Oops -Close terminal to break program Terminal schließen um Programm zu beenden -yab-IDE Set Run Parameters yab-IDE Parameter setzen -Set Run Parameters Parameter setzen -yab Parameters: yab Parameter: -Program Parameters: Programm Parameter: -yab-IDE New Program yab-IDE Neues Programm -New yab Program Neues yab Programm -Please select one of the available templates for your program: Bitte eine der verfügbaren Vorlagen auswählen: -Name: Name: -Browse... Wählen... -Advanced Options Weitere Optionen -Remove Template Vorlage löschen -Project Directory Projektverzeichnis -Could not open template: Vorlage konnte nicht geladen werden: -Opening an empty file instead. Öffne eine leere Datei stattdessen. -Really delete template Vorlage wirklich löschen -Yes Ja -Cancel Abbrechen -This standard template can not be deleted! Diese Standardvorlage kann nicht gelöscht werden! -Template successfully removed. Vorlage erfolgreich gelöscht. -Error while deleting template! Fehler beim Löschen der Vorlage! -Empty Leere Datei -Basic Template Einfache Vorlage -Editor Template Vorlage für einen Editor -Command Line Template Kommandozeilenvorlage - -Create an empty file. Erstelle eine leere Datei. -Create a new program with a bare Erstelle ein neues Programm -window. mit einem leeren Fenster. -Create a new program with menus Erstelle ein neues Programm mit -and an editor. Menüs und einem Editor. - Erstelle ein neues -Create a new command line program. Kommandozeilenprogramm. -yab-IDE Save As Template yab-IDE Als Vorlage speichern -Save As Template Als Vorlage speichern -Save your code as a template for other programs: Quellcode als Vorlage speichern -Template Name Vorlagenname -Description (not more than 30 characters per line) Beschreibung (nicht mehr als 30 Zeichen pro Zeile) -Drop image here Bilddatei hierher ziehen -Could not load image! Bilddatei konnte nicht geladen werden -Error while saving template! Fehler beim Speichern der Vorlage! -File could not be saved! Datei konnte nicht gespeichert werden! -Sorry, you can not open more than Achtung, es können nicht mehr als - files at once!\n\nPlease close one or more other files first. Dateien auf einmal geöffnet werden!\n\nBitte zunächst eine oder mehrere andere Dateien schließen. -File is already open. Datei ist bereits geöffnet. -Error while loading file:\n\n Fehler beim Laden der Datei:\n\n -File \" Datei \" -\" not saved!\n\nSave the file now? \" ist nicht gespeichert\n\nDatei jetzt speichern? -Error while printing! Fehler beim Drucken! -Some files are not saved!\n\nDo you really want to quit? Es gibt nicht gesicherte Dateien!\n\nSoll yab-IDE dennoch beendet werden? -Program is not saved.\n\nSave it now? Programm ist nicht gesichert.\n\nJetzt speichern? -Save Always Immer speichern -Save Now Jetzt speichern -Reformating did not close all open loops and conditions.\nReformating currently does not support loops and conditions opened and closed by a colon (:).\nE.g. while(loop):wend\n\nYou can undo the reformating before doing any further changes. Das Formatieren hat nicht alle Schleifen und Konditionen schließen können.\nDas Formatieren unterstützt momentan keine Verschachtelungen mit Doppelpunkten (:).\nZ.B.. while(loop):wend\n\nDas Formatieren kann rückgängig gemacht werden, solange der Text nicht geändert wird. -Do not show this warning again Diese Warnung nicht mehr zeigen -Changes made since reformating will be lost! Änderungen seit dem letzten Formatieren gehen verloren! -The operation \"Replace All\" can not be reverted!\n\nDo you want to continue? \"Alles ersetzen\" kann nicht rückgängig gemacht werden\n\nDennoch fortfahren? -yab-IDE Build Factory yab-IDE Build-Factory -Target file name: Zieldatei: -Use the Haiku tab view instead of the ZETA native tab view Verwende Haiku-Tabviews anstatt ZETA-eigenen Tabviews -Create Binary Kompiliere Zieldatei -The compiler GCC was not found!\n\nPlease install the development tools from your ZETA CD. Der GCC-Compiler wurde nicht gefunden!\n\nBitte die Entwicklungsprogramme von der ZETA CD nachinstallieren. -The compiler GCC was not found!\n\nPlease install the development tools. Der GCC-Compiler wurde nicht gefunden!\n\nBitte die Entwicklungsprogramme nachinstallieren. -Visit Download Site GCC jetzt herunterladen -Warning: Although you are using the BeOS yab, the resulting binary will be ZETA only! Achtung: Obwohl gerade BeOS yab verwendet wird, wird die Zieldatei nur auf ZETA laufen! -Build Factory Output\n\n Build-Factory Ausgabe\n\n -Please wait, processing... (this may take a while)\n\n Bitte warten... (die Bearbeitung kann einige Zeit dauern)\n\n -Build was successful Die Erstellung war erfolgreich -Build failed! Die Erstellung ist fehlgeschlagen! -yab-IDE Pattern Editor yab-IDE Muster erstellen -Insert Pattern Muster einfügen -yab-IDE Color Selection yab-IDE Farbauswahl -Color Selection Farbauswahl -Default Colors: Standardfarben: -Black Schwarz -Darken 4 Dunkler 4 -Darken 3 Dunkler 3 -Darken 2 Dunkler 2 -Darken 1 Dunkler 1 -Default Background Standardhintergrund -Lighten 1 Heller 1 -Lighten 2 Heller 2 -White Weiß -Red Rot -Brown Braun -Yellow Gelb -Green Grün -Cyan Türkis -Light Blue Hellblau -Blue Blau -Magenta Violett -Light Magenta Hellviolett -Insert Color Farbe einfügen -yab-IDE ASCII Table yab-IDE ASCII Tabelle -ASCII Table ASCII Tabelle -yab-IDE Options yab-IDE Einstellungen -Editor Editor -General Allgemein -Environment Arbeitsumgebung -Directories Verzeichnisse -Language Sprachen -Number of spaces per tab: Anzahl Leerzeichen pro Tab: -Ask about saving before running a program Frage nach Speicherung vor der Programmausführung -Show warning when reformating sourcecode did not close all loops and conditions Zeige Warnung wenn die Formatierung nicht alle Schleifen und Konditionen schließen konnte -Show warning before undo reformating Zeige Warnung vor dem Zurücksetzem der Formatierung -Show warning before applying Replace All Zeige Warnung vor der Anwendung von Alles ersetzen -Select font for editor: Schriftart für den Editor wählen: -Font Family Schriftart -Font Style Schriftstil -Font Size Schriftgröße -My hovercraft is full of eels. Mein Luftkissenfahrzeug ist voller Aale. -Factory Settings Standardeinstellungen -Enable auto completion Automatisches Ergänzen -Number of characters for starting completion: Anzahl Startzeichen für die Ergänzung: -New Entry: Neuer Eintrag: -Add New Entry Neuen Eintrag hinzufügen -Remove Entry Eintrag löschen -Note: You have to restart the IDE to update the Achtung: Die IDE muß neugestartet werden -autocompletion when removing entries. damit gelöschte Einträge nicht mehr erscheinen. -Note: Only change the directories, when you know what you are doing! Achtung: Verzeichnisse nur ändern, wenn man weiß was man tut! -Default yab Binary Standard yab-Interpreter -Default yab Directory Standard yab-Verzeichnis -Use the automatic localization Die automatische Lokalisierung verwenden -Supported Languages Unterstützte Sprachen -Entry already exists. Eintrag existiert bereits -Restart yab-IDE to change localization yab-IDE neustarten um die Lokalisierung zu ändern -Could not find yab 1.0 directory!\n\nPlease do a proper installation. Das Verzeichnis von yab 1.0 konnte nicht gefunden werden!\n\nBitte yab sauber installieren. -Could not find yab binary!\n\nPlease do a proper installation. Der Interpreter von yab 1.0 konnte nicht gefunden werden!\n\nBitte yab sauber installieren. -New yab directory set to:\n\n Neues yab-Verzeichnis gesetzt zu:\n\n -\n\nRestart the IDE using the new directory. \n\nyab-IDE neustarten um die Lokalisierung zu ändern. -Invalid directory:\n\n Ungültiges Verzeichnis:\n\n -yab binary set to:\n\n yab-Interpreter gesetzt zu:\n\n -Invalid file:\n\n Ungültige Datei:\n\n -Export As HTML... Exportieren als HTML... -Open Project Folder... Öffne Projektordner... -Help Hilfe -Short Command Help... Kurzanleitung... diff --git a/yab-IDE/Language/en.catalog b/yab-IDE/Language/en.catalog deleted file mode 100644 index d749526..0000000 --- a/yab-IDE/Language/en.catalog +++ /dev/null @@ -1,214 +0,0 @@ -1 english x-vnd.yab-IDE 1378724574 -File File -New... New... -Open... Open... -Close Close -Save Save -Save As... Save As... -Save As Template... Save As Template... -Page Setup... Page Setup... -Print... Print... -Quit Quit -Edit Edit -Undo Undo -Cut Cut -Copy Copy -Paste Paste -Select All Select All -Find Find -Find Again Find Again -Find and Replace Find and Replace -Program Program -Run Run -Run in Terminal Run in Terminal -Set Run Parameters... Set Run Parameters... -Build Factory... Build Factory... -Tools Tools -Pattern Editor... Pattern Editor... -Color Selection... Color Selection... -ASCII Table... ASCII Table... -View View -Next File Next File -Previous File Previous File -Full Screen Full Screen -Maximize Editor Maximize Editor -Auto Indent Auto Indent -Auto Completion Auto Completion -Refresh Colors Refresh Colors -Reformat Sourcecode Reformat Sourcecode -Undo Reformat Undo Reformat -Options... Options... -Introduction to the IDE... Introduction to the IDE... -yab Help... yab Help... -Yabasic Manual... Yabasic Manual... -Online Resources Online Resources -yab Homepage... yab Homepage... -yab Forums... yab Forums... -Yabasic Homepage... Yabasic Homepage... -Team Maui... Team Maui... -About... About... -New New -Open Open -Build Factory Build Factory -Pattern Editor Pattern Editor -Options Options -yab Help yab Help -Go to Line: Go to Line: -Go to Line Go to Line - Files Files - Help Help -Filename Filename -Command Command -yab Output yab Output -Immediate Immediate -Execute Execute -Find: Find: -Replace: Replace: -Case Sensitive Case Sensitive -Replace All Replace All -Suspecting user input, therefore starting in a terminal. Suspecting user input, therefore starting in a terminal. -Ok Ok -File: File: - (not saved) (not saved) -Line Line -Please wait... Please wait... -Loading Program Loading Program -Running Running -Running Program Running Program -Error! Program could not be killed. Error! Program could not be killed. -Oops Oops -Close terminal to break program Close terminal to break program -yab-IDE Set Run Parameters yab-IDE Set Run Parameters -Set Run Parameters Set Run Parameters -yab Parameters: yab Parameters: -Program Parameters: Program Parameters: -yab-IDE New Program yab-IDE New Program -New yab Program New yab Program -Please select one of the available templates for your program: Please select one of the available templates for your program: -Name: Name: -Browse... Browse... -Advanced Options Advanced Options -Remove Template Remove Template -Project Directory Project Directory -Could not open template: Could not open template: -Opening an empty file instead. Opening an empty file instead. -Really delete template Really delete template -Yes Yes -Cancel Cancel -This standard template can not be deleted! This standard template can not be deleted! -Template successfully removed. Template successfully removed. -Error while deleting template! Error while deleting template! -Empty Empty -Basic Template Basic Template -Editor Template Editor Template -Command Line Template Command Line Template - -Create an empty file. Create an empty file. -Create a new program with a bare Create a new program with a bare -window. window. -Create a new program with menus Create a new program with menus -and an editor. and an editor. - -Create a new command line program. Create a new command line program. -yab-IDE Save As Template yab-IDE Save As Template -Save As Template Save As Template -Save your code as a template for other programs: Save your code as a template for other programs: -Template Name Template Name -Description (not more than 30 characters per line) Description (not more than 30 characters per line) -Drop image here Drop image here -Could not load image! Could not load image! -Error while saving template! Error while saving template! -File could not be saved! File could not be saved! -Sorry, you can not open more than Sorry, you can not open more than - files at once!\n\nPlease close one or more other files first. files at once!\n\nPlease close one or more other files first. -File is already open. File is already open. -Error while loading file:\n\n Error while loading file:\n\n -File \" File \" -\" not saved!\n\nSave the file now? \" not saved!\n\nSave the file now? -Error while printing! Error while printing! -Some files are not saved!\n\nDo you really want to quit? Some files are not saved!\n\nDo you really want to quit? -Program is not saved.\n\nSave it now? Program is not saved.\n\nSave it now? -Save Always Save Always -Save Now Save Now -Reformating did not close all open loops and conditions.\nReformating currently does not support loops and conditions opened and closed by a colon (:).\nE.g. while(loop):wend\n\nYou can undo the reformating before doing any further changes. Reformating did not close all open loops and conditions.\nReformating currently does not support loops and conditions opened and closed by a colon (:).\nE.g. while(loop):wend\n\nYou can undo the reformating before doing any further changes. -Do not show this warning again Do not show this warning again -Changes made since reformating will be lost! Changes made since reformating will be lost! -The operation \"Replace All\" can not be reverted!\n\nDo you want to continue? The operation \"Replace All\" can not be reverted!\n\nDo you want to continue? -yab-IDE Build Factory yab-IDE Build Factory -Target file name: Target file name: -Use the Haiku tab view instead of the ZETA native tab view Use the Haiku tab view instead of the ZETA native tab view -Create Binary Create Binary -The compiler GCC was not found!\n\nPlease install the development tools from your ZETA CD. The compiler GCC was not found!\n\nPlease install the development tools from your ZETA CD. -The compiler GCC was not found!\n\nPlease install the development tools. The compiler GCC was not found!\n\nPlease install the development tools. -Visit Download Site Visit Download Site -Warning: Although you are using the BeOS yab, the resulting binary will be ZETA only! Warning: Although you are using the BeOS yab, the resulting binary will be ZETA only! -Build Factory Output\n\n Build Factory Output\n\n -Please wait, processing... (this may take a while)\n\n Please wait, processing... (this may take a while)\n\n -Build was successful Build was successful -Build failed! Build failed! -yab-IDE Pattern Editor yab-IDE Pattern Editor -Insert Pattern Insert Pattern -yab-IDE Color Selection yab-IDE Color Selection -Color Selection Color Selection -Default Colors: Default Colors: -Black Black -Darken 4 Darken 4 -Darken 3 Darken 3 -Darken 2 Darken 2 -Darken 1 Darken 1 -Default Background Default Background -Lighten 1 Lighten 1 -Lighten 2 Lighten 2 -White White -Red Red -Brown Brown -Yellow Yellow -Green Green -Cyan Cyan -Light Blue Light Blue -Blue Blue -Magenta Magenta -Light Magenta Light Magenta -Insert Color Insert Color -yab-IDE ASCII Table yab-IDE ASCII Table -ASCII Table ASCII Table -yab-IDE Options yab-IDE Options -Editor Editor -General General -Environment Environment -Directories Directories -Language Language -Number of spaces per tab: Number of spaces per tab: -Ask about saving before running a program Ask about saving before running a program -Show warning when reformating sourcecode did not close all loops and conditions Show warning when reformating sourcecode did not close all loops and conditions -Show warning before undo reformating Show warning before undo reformating -Show warning before applying Replace All Show warning before applying Replace All -Select font for editor: Select font for editor: -Font Family Font Family -Font Style Font Style -Font Size Font Size -My hovercraft is full of eels. My hovercraft is full of eels. -Factory Settings Factory Settings -Enable auto completion Enable auto completion -Number of characters for starting completion: Number of characters for starting completion: -New Entry: New Entry: -Add New Entry Add New Entry -Remove Entry Remove Entry -Note: You have to restart the IDE to update the Note: You have to restart the IDE to update the -autocompletion when removing entries. autocompletion when removing entries. -Note: Only change the directories, when you know what you are doing! Note: Only change the directories, when you know what you are doing! -Default yab Binary Default yab Binary -Default yab Directory Default yab Directory -Use the automatic localization Use the automatic localization -Supported Languages Supported Languages -Entry already exists. Entry already exists. -Restart yab-IDE to change localization Restart yab-IDE to change localization -Could not find yab 1.0 directory!\n\nPlease do a proper installation. Could not find yab 1.0 directory!\n\nPlease do a proper installation. -Could not find yab binary!\n\nPlease do a proper installation. Could not find yab binary!\n\nPlease do a proper installation. -New yab directory set to:\n\n New yab directory set to:\n\n -\n\nRestart the IDE using the new directory. \n\nRestart the IDE using the new directory. -Invalid directory:\n\n Invalid directory:\n\n -yab binary set to:\n\n yab binary set to:\n\n -Invalid file:\n\n Invalid file:\n\n -Export As HTML... Export As HTML... -Open Project Folder... Open Project Folder... diff --git a/yab-IDE/Language/nl.catalog b/yab-IDE/Language/nl.catalog deleted file mode 100644 index cb8fc83..0000000 --- a/yab-IDE/Language/nl.catalog +++ /dev/null @@ -1,214 +0,0 @@ -1 nl x-vnd.yab-IDE 1378724574 -File Bestand -New... Nieuw... -Open... Openen... -Close Sluiten -Save Opslaan -Save As... Opslaan als... -Save As Template... Als sjabloon opslaan... -Page Setup... Pagina instellingen... -Print... Afdrukken... -Quit Afsluiten -Edit Bewerken -Undo Ongedaan maken -Cut Knippen -Copy Kopiëren -Paste Plakken -Select All Alles selecteren -Find Zoek -Find Again Verder zoeken -Find and Replace Zoeken en vervangen -Program Toepassing -Run Uitvoeren -Run in Terminal In Terminal uitvoeren -Set Run Parameters... Parameter zetten... -Build Factory... Build-Factory... -Tools Werktuigen -Pattern Editor... Patroon aanmaken... -Color Selection... Kleur kiezen... -ASCII Table... ASCII lijst... -View Venster -Next File Volgend bestand -Previous File Vorig bestand -Full Screen Volledig scherm -Maximize Editor Editor maximaliseren -Auto Indent Automatisch inspringen -Auto Completion Automatisch aanvullen -Refresh Colors Kleuren verversen -Reformat Sourcecode Broncode herformateren -Undo Reformat Formatering ongedaan maken -Options... Instellingen... -Introduction to the IDE... Inleiding tot de IDE... -yab Help... yab help... -Yabasic Manual... Yabasic handboek... -Online Resources Website's online -yab Homepage... yab Homepage... -yab Forums... yab forums... -Yabasic Homepage... Yabasic Homepage... -Team Maui... Team Maui... -About... Over yab-IDE... -New Nieuw -Open Openen -Build Factory Build Factory -Pattern Editor Patroon aanmaken -Options Instellingen -yab Help yab help -Go to Line: Ga naar lijn: -Go to Line Ga naar lijn - Files Bestanden - Help Help -Filename Bestandsnaam -Command Commando -yab Output yab output -Immediate Onmiddelijk uitvoeren -Execute Uitvoeren -Find: Zoek: -Replace: Vervang: -Case Sensitive Hoofdlettergevoelig -Replace All Alles vervangen -Suspecting user input, therefore starting in a terminal. Eem gebruikers ingave wordt verwacht, de toepassing word gestart in een Terminal. -Ok Ok -File: Bestand: - (not saved) (niet opgeslagen) -Line Lijn -Please wait... Even wachten... -Loading Program Toepassing laden -Running Draait -Running Program In uitvoering -Error! Program could not be killed. Fout! Toepassing kan niet gestopt worden. -Oops Oeps -Close terminal to break program Terminal sluiten om toepassing te sluiten -yab-IDE Set Run Parameters yab-IDE parameter zetten -Set Run Parameters Parameter zetten -yab Parameters: yab Parameter: -Program Parameters: Toepassing parameter: -yab-IDE New Program yab-IDE nieuwe toepassing -New yab Program Nieuwe yab toepassing -Please select one of the available templates for your program: Gelieve een van de beschikbare sjablonen te kiezen: -Name: Naam: -Browse... Bladeren... -Advanced Options Geavanceerd -Remove Template Sjabloon wissen -Project Directory Projectmap -Could not open template: Sjabloon kon niet geladen worden: -Opening an empty file instead. Open een leeg bestand in de plaats. -Really delete template Sjabloon wissen -Yes Ja -Cancel Annuleren -This standard template can not be deleted! Dit standaard sjabloon kan niet verwijderd worden! -Template successfully removed. Sjabloon verwijderd. -Error while deleting template! Fout bij het verwijderen sjabloon! -Empty Leeg bestand -Basic Template Eenvoudig sjabloon -Editor Template Sjabloon voor een Editor -Command Line Template Sjabloon voor commandline - -Create an empty file. Leeg bestand aanmaken. -Create a new program with a bare Nieuwe toepassing aanmaken -window. met een leeg venster. -Create a new program with menus Nieuwe toepassing maken met -and an editor. menu's een een editor. - Nieuwe commandline -Create a new command line program. toepassing aanmaken. -yab-IDE Save As Template yab-IDE Opslaan als sjabloon -Save As Template Als sjabloon opslaan -Save your code as a template for other programs: Broncode als sjabloon opslaan -Template Name Sjabloonnaam -Description (not more than 30 characters per line) Beschrijving (niet meer dan 30 karakters per lijn) -Drop image here Afbeelding hier slepen -Could not load image! Afbeelding kon niet geladen worden -Error while saving template! Fout bij het opslaan van sjabloon! -File could not be saved! Bestand kon niet opgeslagen worden! -Sorry, you can not open more than Opgelet je kan niet meer dan - files at once!\n\nPlease close one or more other files first. bestanden openen in een keer!\n\nGelieve eerst een of meerdere bestanden te sluiten. -File is already open. Bestand is al open. -Error while loading file:\n\n Fout bij het laden van het bestand:\n\n -File \" Bestand \" -\" not saved!\n\nSave the file now? \" is niet opgeslagen\n\nBestand nu opslaan? -Error while printing! Fout bij het afdrukken! -Some files are not saved!\n\nDo you really want to quit? Enkele bestanden zijn niet opgeslagen!\n\nWil je werkelijk afsluiten? -Program is not saved.\n\nSave it now? Toepassing is niet opgeslagen.\n\nNu opslaan? -Save Always Altijd opslaan -Save Now Nu opslaan -Reformating did not close all open loops and conditions.\nReformating currently does not support loops and conditions opened and closed by a colon (:).\nE.g. while(loop):wend\n\nYou can undo the reformating before doing any further changes. Herformateren heeft niet alle loops en condities kunnen sluiten.\nHerformateren ondersteun momenteel geen loops en conditie's tussen duppelpunten (:).\nBv. while(loop):wend\n\nJe kan de herformatering ongedaan maken zolang de tekst niet veranderd wordt. -Do not show this warning again Deze waarschuwing niet meer tonen -Changes made since reformating will be lost! Aanpassingen sinds de laatste herformatering zullen verloren gaan! -The operation \"Replace All\" can not be reverted!\n\nDo you want to continue? De operatie \"Alles vervangen\" kan niet teruggedraaid worden!\n\nToch verdergaan? -yab-IDE Build Factory yab-IDE Build-Factory -Target file name: Doelbestand: -Use the Haiku tab view instead of the ZETA native tab view Gebruik de Haiku tabview in plaats van de ZETA eigen tabvies -Create Binary Compileer bin -The compiler GCC was not found!\n\nPlease install the development tools from your ZETA CD. De GCC compiler is niet gevonden!\n\nGelieve de ontwikkel toepassingen van de ZETA CD te installeren. -The compiler GCC was not found!\n\nPlease install the development tools. De GCC compiler is niet gevonden!\n\nGelieve de ontwikkel toepassingen te installeren. -Visit Download Site GCC nu downloaden -Warning: Although you are using the BeOS yab, the resulting binary will be ZETA only! Waarschuwing: Ondanks dat je BeOS yab gebruikt, zal de toepassing enkel op ZETA draaien! -Build Factory Output\n\n Build-Factory Output\n\n -Please wait, processing... (this may take a while)\n\n Even geduld... (de bewerking kan een tijdje duren)\n\n -Build was successful Aanmaken gelukt -Build failed! Aanmaken mislukt! -yab-IDE Pattern Editor yab-IDE patroon aanmaken -Insert Pattern Patroon invoegen -yab-IDE Color Selection yab-IDE kleurkiezer -Color Selection Kleurselectie -Default Colors: Standaardkleuren: -Black Zwart -Darken 4 Donker 4 -Darken 3 Donker 3 -Darken 2 Donker 2 -Darken 1 Donker 1 -Default Background Standaard achtergrond -Lighten 1 Lichter 1 -Lighten 2 Lichter 2 -White Wit -Red Rood -Brown Bruin -Yellow Geel -Green Groen -Cyan Cyaan -Light Blue Licht blauw -Blue Blauw -Magenta Magenta -Light Magenta Licht Magenta -Insert Color Kleur invoegen -yab-IDE ASCII Table yab-IDE ASCII tabel -ASCII Table ASCII tabel -yab-IDE Options yab-IDE Instellingen -Editor Editor -General Algemeen -Environment Omgeving -Directories Mappen -Language Talen -Number of spaces per tab: Aantal spaties per tab: -Ask about saving before running a program Vraag naar opslaan voor het draaien van de toepassing -Show warning when reformating sourcecode did not close all loops and conditions Toon waarschuwing als herformatering niet alle loops en condities sluiten kon -Show warning before undo reformating Toon waarschuwing voor het ongedaan maken van de herformatering -Show warning before applying Replace All Toon waarschuwing voor het toepassen \"Alles vervangen\" -Select font for editor: Selecteer een font voor de editor: -Font Family Font -Font Style Stijl -Font Size Grootte -My hovercraft is full of eels. Mijn hoovercraft zit vol met vissen. -Factory Settings Standaardinstellingen -Enable auto completion Auto-aanvullen inschakelen -Number of characters for starting completion: Aantal karakters voor het starten van het aanvullen: -New Entry: Nieuwe ingang: -Add New Entry Nieuwe ingang toevoegen -Remove Entry Ingang wissen -Note: You have to restart the IDE to update the Aandacht: de IDE moet herstart worden -autocompletion when removing entries. zodat gewiste ingangen niet meer verscheinen. -Note: Only change the directories, when you know what you are doing! Aandacht: Verander enkel de mappen als je weet wat je doet! -Default yab Binary Standaard yab-Interpreter -Default yab Directory Standaard yab-map -Use the automatic localization Gebruik Haiku's taalsysteem -Supported Languages Ondersteunde talen -Entry already exists. Ingang bestaat reeds -Restart yab-IDE to change localization yab-IDE herstarten om de localisering door te voeren -Could not find yab 1.0 directory!\n\nPlease do a proper installation. Kon de map yab 1.0 niet vinden!\n\nGelieve yab goed te installeren. -Could not find yab binary!\n\nPlease do a proper installation. Kon de interpreter van yab 1.0 niet vinden!\n\nGelieve yab goed te installeren. -New yab directory set to:\n\n Nieuwe yab map gezet naar:\n\n -\n\nRestart the IDE using the new directory. \n\nyab-IDE herstarten om de localisering door te voeren. -Invalid directory:\n\n Ongeldige map:\n\n -yab binary set to:\n\n yab-Interpreter insteld naar:\n\n -Invalid file:\n\n Ongeldig bestand:\n\n -Export As HTML... Als HTML opslaan... -Open Project Folder... Projectmap openen... diff --git a/yab-IDE/Programs/Examples/3D-Curve.yab b/yab-IDE/Programs/Examples/3D-Curve.yab deleted file mode 100755 index 52778dd..0000000 --- a/yab-IDE/Programs/Examples/3D-Curve.yab +++ /dev/null @@ -1,61 +0,0 @@ -#!yab -doc Draw some nice 3D curves -doc Original by Martin Lehmann for QBasic -doc -doc change the function func for different curves -doc try smaller values of i for a lower resolution -doc try z = 1 for less dots -doc -doc Note: this demo shows one thing: yab is slow :) -doc The cleanup of the drawing takes alot of time too, -doc you can simply break the program if you don't want to wait -doc - -window open 100,100 to 739,579, "Win", "3D Curve" - -bitmap 640,480, "DoubleBuffer" -canvas 0,0 to 639,479, "MyCanvas", "Win" - -i = 128 // resolution -z = 0.5 // dot frequency -xk = 40 -yk = 30 - -draw set "highcolor", 0,0,0, "DoubleBuffer" -draw rect 0,0 to 639,479, "DoubleBuffer" -draw bitmap 0,0, "DoubleBuffer", "copy", "MyCanvas" - -for t = -144 to 144 step(288/i) - if(t=0) t=0.1 - r = int(0.5 + sqrt(20736 - t^2)) - for j = -r to r step z - p = func(sqrt(j^2 + t^2) * 0.0327) * 20 - x = int(1.7 * (j + (t/2.25) + 160)) + xk - y = int(1.8 * (199 - (p - t/2.25 + 90))) + yk - draw set "highcolor", 255-r,j+r,255-p, "DoubleBuffer" - draw line x,y to x,y, "DoubleBuffer" - draw set "highcolor", 0,0,0, "DoubleBuffer" - draw line x,y+1 to x,480, "DoubleBuffer" - next j - draw bitmap 0,0, "DoubleBuffer", "copy", "MyCanvas" -next t - -while(not instr(message$, "Quit")) -wend - -window close "Win" - -// Choose one of the functions below, comment out all others -sub func(n) -// return cos(n) + cos(2*n) +cos(5*n) -// return -abs(1/n) -// return -abs(1/(n + j)) -// return sin(n) + sin(2*n) +sin(5*n) -// return cos(sin(n)) - return cos(2*n) + cos((n+j)/16) -// return sqrt(abs(0.5*(16 - n^2))) + 1/(n*4) -// return cos(4*n) + 20/(n^2 + 3) -// return cos(1/n) + cos(2/n) + cos(5/n) - 3 -// return cos(sin(j/n)) -// return 1/sqrt(n) - 3 -end sub diff --git a/yab-IDE/Programs/Examples/AllInOne.yab b/yab-IDE/Programs/Examples/AllInOne.yab deleted file mode 100755 index 17ab906..0000000 --- a/yab-IDE/Programs/Examples/AllInOne.yab +++ /dev/null @@ -1,207 +0,0 @@ -#!yab -dir$ = attribute get$ "", "" -dir$=dir$+"/" - -// This example demonstrates all widgets - -// open the window -window open 100,100 to 640,500, "Win", "yab Demo" -window set "Win", "Flags", "Not-Resizable, Not-Zoomable" - -// set the title -view 10,10 to 530,50, "Title", "Win" -draw set "bgcolor", 50,50,200, "Title" -draw set "lowcolor", 50,50,200, "Title" -draw set "highcolor", 255,255,255, "Title" -if(peek$("os") = "Haiku") then - draw set "DejaVu Sans,Condensed Bold,32", "Title" -else - draw set "Zurich,Bold,32", "Title" -endif -draw text 10,32, "yab Widgets and Views", "Title" - -// make the tabview -tabview 10,60 to 530,390, "Box", "top", "Win" -tabview add "Box", "Widgets" -tabview add "Box", "Views and More" - -// button -button 10,10 to 100,30, "Button", "Button", "Box1" -tooltip "Button", "BUTTON" - -// button image -button image 10,40, "ButtonImage", dir$+"img/button_pressed.png", dir$+"img/button_norm.png", "", "Box1" -tooltip "ButtonImage", "BUTTON IMAGE" - -// checkbox -checkbox 10,70, "Check", "Checkbox", true, "Box1" -tooltip "Check", "CHECKBOX" - -// checkbox image -checkbox image 10,92, "CheckImage", dir$+"img/checkbutton_enabledOn.png", dir$+"img/checkbutton_enabledOff.png", "", "", true, "Box1" -tooltip "CheckImage", "CHECKBOX IMAGE" - -// radiobutton -radiobutton 10,130, "Radio1", "1. Radiobutton", true, "Box1" -tooltip "Radio1", "RADIOBUTTON" -radiobutton 10,150, "Radio2", "2. Radiobutton", false, "Box1" -tooltip "Radio2", "RADIOBUTTON" - -// dropbox -dropbox 10,175 to 120,195, "Drop", "Dropbox", "Box1" -dropbox add "Drop", "Foo" -dropbox add "Drop", "Bar" -tooltip "Drop", "DROPBOX" - -// listbox -listbox 10,210 to 100,290, "List", 1, "Box1" -listbox add "List", "Foo" -listbox add "List", "Bar" -tooltip "List", "LISTBOX" - -// columnbox -columnbox 130,10 to 270,150, "Column", 1, "", "Box1" -columnbox column "Column", " ", 1, 30,30,30, "align-center" -columnbox column "Column", "Column", 2, 90,90,90, "align-center" -columnbox add "Column", 1,1, 20, "__Mime__=application/x-vnd.yab-app" -columnbox add "Column", 1,2, 20, "__Mime__=application/x-vnd.Be-elfexecutable" -columnbox add "Column", 2,1, 20, "Foo" -columnbox add "Column", 2,2, 20, "Bar" -columnbox add "Column", 2,3, 20, "Baz" -tooltip "Column", "COLUMNBOX" - -// treebox -treebox 130,160 to 270,290, "Tree", 1, "Box1" -treebox add "Tree", "Root" -treebox add "Tree", "Root", "Foo", true -treebox add "Tree", "Root", "Bar", true -tooltip "Tree", "TREEBOX" - -// text -text 300,10, "Text", "Text (cannot be flushed)", "Box1" -tooltip "Text", "TEXT" - -// texturl -texturl 300,30, "TextURL", "Team MAUI", "http://www.team-maui.org", "Box1" -tooltip "TextURL", "TEXTURL" - -// textcontrol -textcontrol 300,50 to 500,70, "TextCtrl", "TextControl", "", "Box1" -tooltip "TextCtrl", "TEXTCONTROL" - -// spincontrol -spincontrol 300,80, "Spin", "Spincontrol", 0,100,1, "Box1" -tooltip "Spin", "SPINCONTROL" - -// calendar -calendar 300,120, "Cal", "DDMMYYYY.", "01.01.1970", "Box1" -tooltip "Cal", "CALENDAR" - -// textedit -textedit 300,150 to 500,215, "TextEd", 3, "Box1" -textedit add "TextEd", "Simply edit your text..." -tooltip "TextEd", "TEXTEDIT" - -// slider -slider 300,225 to 500,245, "Slider", "Slider", 1, 23, "Box1" -tooltip "Slider", "SLIDER" - -// statusbar -statusbar 300,265 to 500,290, "Status", "Start", "Finish", "Box1" -statusbar set "Status", "Start", "Finish", 66 -tooltip "Status", "STATUSBAR" - -// view -view 10,10 to 100,100, "View", "Box2" -draw set "bgcolor", "jan-favorite-color", "View" -draw text 20,35, "Plain View", "View" -tooltip "View", "VIEW" - -// canvas -canvas 10,110 to 100,195, "Canvas", "Box2" -draw text 20,35, "Canvas", "Canvas" -tooltip "Canvas", "CANVAS" - -// boxview -boxview 10,205 to 100,290, "Boxview", "Boxview", 2, "Box2" -tooltip "Boxview", "BOXVIEW" - -// tabview -tabview 120,10 to 260,100, "Tab", "top", "Box2" -tabview add "Tab", "First" -tabview add "Tab", "Second" -tooltip "Tab", "TABVIEW" - -// splitview -splitview 120,110 to 260,195, "Split", true, false, "Box2" -draw set "bgcolor", "Panel-Background-Color, Darken-1-Tint", "Split1" -draw set "bgcolor", "Panel-Background-Color, Lighten-1-Tint", "Split2" -tooltip "Split", "SPLITVIEW" - -// colorcontrol -colorcontrol 120,203, "Color", "Box2" -tooltip "Color", "COLORCONTROL" - -// popupmenu (only button, code in messageloop) -button 120,270 to 245,290, "Popup", "Popupmenu", "Box2" -tooltip "Popup", "POPUPMENU" - -// filepanel (only button, code in messageloop) -button 255,270 to 350,290, "File", "Filepanel", "Box2" -tooltip "File", "FILEPANEL" - -// menu -view 280,10 to 500,100, "Menu", "Box2" -menu "Menu", "Foo", "", "Menu" -menu "Menu", "--", "", "Menu" -menu "Menu", "Bar", "", "Menu" -draw set "bgcolor", "Panel-Background-Color, Darken-1-Tint", "Menu" -draw text 20,35, "View with menu", "Menu" -tooltip "Menu", "MENU" - -// scrollbar -view 280,110 to 500-peek("scrollbarwidth"),195-peek("scrollbarwidth"), "ScrollView", "Box2" -scrollbar "Scroll", 3, "ScrollView" -scrollbar set "Scroll", "horizontal-range", 0,100 -scrollbar set "Scroll", "vertical-range", 0,50 -if(peek$("os") = "Haiku") then - draw set "DejaVu Sans,Condensed Bold,32", "ScrollView" -else - draw set "Zurich,Bold,32", "ScrollView" -endif -draw text 130,90, "Foobar", "ScrollView" -tooltip "Scroll", "SCROLLBAR" - -// stackview -stackview 420,205 to 500,260, "StackView", 2, "Box2" -button 360,270 to 425,290, "Stack1", "Stack1", "Box2" -button 435,270 to 500,290, "Stack2", "Stack2", "Box2" -draw set "bgcolor", 200,200,255, "StackView1" -draw text 10,20, "First view", "StackView1" -draw set "bgcolor", 200,255,255, "StackView2" -draw text 10,20, "Second view", "StackView2" -tooltip "StackView", "STACKVIEW" - -// messageloop -while(not quitting) - msg$ = message$ - if(instr(msg$, "Popup")) then - // popupmenu - select$ = popupmenu 120,270, "Foo|--|Bar", "Box2" - elsif(instr(msg$, "File")) then - // filepanel - select$ = filepanel "Load-File", "Example Filepanel", "/boot/home" - elsif(instr(msg$, "Stack1")) then - // set stackview - stackview set "StackView", 1 - elsif(instr(msg$, "Stack2")) then - // set stackview - stackview set "StackView", 2 - elsif(instr(msg$, "Quit")) then - // exit - quitting = true - endif -wend - -window close "Win" - diff --git a/yab-IDE/Programs/Examples/BlockReadWriteDemo.yab b/yab-IDE/Programs/Examples/BlockReadWriteDemo.yab deleted file mode 100644 index 0dc7386..0000000 --- a/yab-IDE/Programs/Examples/BlockReadWriteDemo.yab +++ /dev/null @@ -1,62 +0,0 @@ -import fileblock - -x=openfile("/boot/home/test.file", 150,3) -if x < 1 error "cannot open file" - - -ok=Field(x,1,"name",50) -ok=ok+Field(x,2,"address",50) -ok=ok+Field(x,3,"phonenumber",50) -if (!ok = 3 ) error "bad field" -// werite some blocks -for z=1 to 20 - lset(x,"name", "Some dude") - lset(x,"address", "Some address") - rset(x,"phonenumber","123-456-7890") - y=write_block(-1, x) // -1 appends the data to the file. -next -// over-write a block with new data -lset(x,"name", "Some other dude") -lset(x,"address", "Some kewl address") -rset(x,"phonenumber","098-765-4321") -write_block(6, x) - -// read back the over-written block -read_block(6, x) - -// get the data from the read operation -name$=readfield$(x, "name") -address$=readfield$(x, "address") -phone$=readfield$(x, "phonenumber") -// show the data -print name$ -print address$ -print trim$(phone$) - -// over write the block again -lset(x,"name", "") -lset(x,"address", "") -rset(x,"phonenumber","") -write_block(6, x) - -//read back the over-written block - -recno = read_block(6, x) // returns the read block that will next be read if called with -1 recordnumber -name$=readfield$(x, "name") -address$=readfield$(x, "address") -phone$=readfield$(x, "phonenumber") -print name$ -print address$ -print phone$ -print recno - -//read the next block - -recno = read_block(-1, x) -name$=readfield$(x, "name") -address$=readfield$(x, "address") -phone$=readfield$(x, "phonenumber") -print name$ -print address$ -print phone$ -print recno diff --git a/yab-IDE/Programs/Examples/BoxWorld.yab b/yab-IDE/Programs/Examples/BoxWorld.yab deleted file mode 100755 index b05d229..0000000 --- a/yab-IDE/Programs/Examples/BoxWorld.yab +++ /dev/null @@ -1,64 +0,0 @@ -#!yab - -window open 100,100 to 380,410,"MainView","BoxWorld.yab" - -window set "MainView", "flags", "not-zoomable, not-h-resizable, not-v-resizable" - -layout "none", "MainView" - -view 0,0 to 110,30, "CheckboxView","MainView" -checkbox 10,10, "checkbox1", "Please select", 0, "CheckboxView" - -view 0,31 to 110,120, "RadioView1","MainView" - radiobutton 10,10, "Radio11", "Radio 11", 0, "RadioView1" - radiobutton 10,30, "Radio12", "Radio 12", 0, "RadioView1" - radiobutton 10,50, "Radio13", "Radio 13", 1, "RadioView1" - -view 0,130 to 110,190,"RadioView2","MainView" - radiobutton 10,10, "Radio21", "Radio 21", 1, "RadioView2" - radiobutton 10,30, "Radio22", "Radio 22", 0, "RadioView2" - -view 0,195 to 110,280,"RadioView3","MainView" - radiobutton 10,5, "Radio31", "Radio 31", 0, "RadioView3" - radiobutton 10,25, "Radio32", "Radio 32", 0, "RadioView3" - radiobutton 10,45, "Radio33", "Radio 33", 1, "RadioView3" - radiobutton 10,65, "Radio34", "Radio 34", 0, "RadioView3" - -view 0, 285 to 280, 310, "CommandView","MainView" - -layout "leftright", "MainView" - -listbox 120,10 to 255,110, "List1", 1, "MainView" - -layout "standard", "MainView" - -listbox 120,120 to 255,230, "List2", 3, "MainView" - -listbox add "List1","Hello" -listbox add "List1","World" - -for i=1 to 20 - listbox add "List2","Number "+str$(i) -next i - -dropbox 120,250 to 265,270, "drop1", "MyDrop:", "MainView" -dropbox add "drop1", "Hello World" -dropbox add "drop1", "Foo Bar" -dropbox add "drop1", "--" -dropbox add "drop1", "Acme Ltd" -dropbox add "drop1", "Bobejaan" - -alert "BoxWorld shows how to use Radiobuttons, Checkboxes, Listboxes and Dropboxes.","Ok","idea" - -inloop = true -while(inloop) - a$ = message$ - if(a$<>"") then - print a$ - draw flush "CommandView" - draw text 5,15, left$(a$,len(a$)-1), "CommandView" - endif - if(instr(a$,"_QuitRequested|")) inloop = false -wend - -window close "MainView" diff --git a/yab-IDE/Programs/Examples/ButtonWorld.yab b/yab-IDE/Programs/Examples/ButtonWorld.yab deleted file mode 100755 index 156fab3..0000000 --- a/yab-IDE/Programs/Examples/ButtonWorld.yab +++ /dev/null @@ -1,64 +0,0 @@ -#!yab - -window open 400,400 to 550,500, "MainView1", "ButtonWorld1" -window open 600,400 to 750,500, "MainView2", "ButtonWorld2" - -mainview1 = true - -layout "left, right", "MainView1" -button 30,10 to 120,30, "EmptyAlert_", "Empty Alert", "MainView1" -layout "bottom, right", "MainView1" -button 30,40 to 120,60, "InfoAlert_", "Info Alert", "MainView1" -button 30,70 to 120,90, "IdeaAlert_", "Idea Alert", "MainView1" - -button 30,10 to 120,30, "WarningAlert_", "Warning Alert", "MainView2" -button 30,40 to 120,60, "StopAlert_", "Stop Alert", "MainView2" -button 30,70 to 120,90, "Quit_", "Quit", "MainView2" - -alert "ButtonWorld demonstrates how Buttons and Alerts can be used easily!", "Ok", "idea" - -inloop = true -while(inloop) - msg$ = message$ - switch msg$ - case "EmptyAlert_|": - alert "This is an empty alert!", "Dooh", "none" - break - - case "InfoAlert_|" - alert "This is an info alert!", "Dooh", "info" - break - - case "IdeaAlert_|" - alert "This is an idea alert!", "Dooh", "idea" - break - - case "WarningAlert_|" - alert "This is a warning alert!", "Dooh", "warning" - break - - case "StopAlert_|" - alert "This is a stop alert!", "Dooh", "stop" - break - - case "Quit_|" - inloop = false - if (mainview1) window close "MainView1" - window close "MainView2" - break - - case "MainView1:_QuitRequested|" - window close "MainView1" - mainview1 = false - break - - case "MainView2:_QuitRequested|" - window close "MainView2" - break - - end switch - - if(window count<1) inloop = false - -wend - diff --git a/yab-IDE/Programs/Examples/Calc.yab b/yab-IDE/Programs/Examples/Calc.yab deleted file mode 100755 index 6433372..0000000 --- a/yab-IDE/Programs/Examples/Calc.yab +++ /dev/null @@ -1,202 +0,0 @@ -#!yab -sleep .01 -This_dir$ = getdir$("Calc.yab") - -//localize -window open 100,50 to 320,320, "Calc", "CalcView" - - -draw set "bgcolor", 100, 150, 220, "Calc" -draw set "lowcolor", 100, 190, 100, "Calc" -draw set "highcolor", 255, 255, 255, "Calc" -window set "Calc", "minimumto", 220, 260 -window set "Calc", "maximumto", 220, 260 - -layout "all", "Calc" - -menu "File", "Reset", "R", "Calc" -menu "File", "--", "", "Calc" -menu "File", "Quit", "Q", "Calc" -menu "Help", "Help...", "H", "Calc" -menu "Help", "--", "", "Calc" -menu "Help", "About...", "", "Calc" - -button 20,70 to 55,105,"b7", "7", "Calc" -button 65,70 to 100,105,"b8", "8", "Calc" -button 110,70 to 145,105,"b9", "9", "Calc" -button 155,70 to 190,105,"b/", "/", "Calc" -button 20,115 to 55,150,"b4", "4", "Calc" -button 65,115 to 100,150,"b5", "5", "Calc" -button 110,115 to 145,150,"b6", "6", "Calc" -button 155,115 to 190,150,"b*", "*", "Calc" -button 20,160 to 55,195,"b1", "1", "Calc" -button 65,160 to 100,195,"b2", "2", "Calc" -button 110,160 to 145,195,"b3", "3", "Calc" -button 155,160 to 190,195,"b-", "-", "Calc" -button 20,205 to 55,240,"b0", "0", "Calc" -button 65,205 to 100,240,"b.", ".", "Calc" -button 110,205 to 145,240,"bC", "C", "Calc" -button 155,205 to 190,240,"b+/=", "+=", "Calc" - -draw text 20,50,"0","Calc" - -display$ = "0" -result = 0 -type$ = "+" - -dim msgbuffer$(1) -inloop = true -while(inloop) - msgnumber = split(message$, msgbuffer$(), "|") - for i=0 to msgnumber - switch msgbuffer$(i) - case "b." - case "b0" - case "b1" - case "b2" - case "b3" - case "b4" - case "b5" - case "b6" - case "b7" - case "b8" - case "b9" - if(len(display$)<10) display$ = display$ + right$(msgbuffer$(i),1) - while(left$(display$,1)="0") - display$ = right$(display$,len(display$)-1) - wend - if(display$="") display$="0" - draw rect 20,30 to 170,60, "Calc" - draw flush "Calc" - draw text 20,50, display$,"Calc" - break - case "b-" - result = calculate(result, type$, val(display$)) - type$ = "-" - draw rect 20,30 to 170,60, "Calc" - draw flush "Calc" - draw text 20,50, str$(result),"Calc" - display$="0" - break - case "b+/=" - result = calculate(result, type$, val(display$)) - type$ = "+" - draw rect 20,30 to 170,60, "Calc" - draw flush "Calc" - draw text 20,50, str$(result),"Calc" - display$="0" - break - case "b*" - result = calculate(result, type$, val(display$)) - type$ = "*" - draw rect 20,30 to 170,60, "Calc" - draw flush "Calc" - draw text 20,50, str$(result),"Calc" - display$="0" - break - case "b/" - result = calculate(result, type$, val(display$)) - type$ = "/" - draw rect 20,30 to 170,60, "Calc" - draw flush "Calc" - draw text 20,50, str$(result),"Calc" - display$="0" - break - case "bC" - case "Calc:File:Reset" - result=0 - draw rect 20,30 to 170,60, "Calc" - draw flush "Calc" - draw text 20,50, str$(result),"Calc" - display$="0" - type$ = "+" - break - case "Calc:File:Quit" - case "Calc:_QuitRequested" - window close "Calc" - break - case "Calc:Help:Help..." - alert "Calc demonstrates how to program\n a calculator in yab.\n\n", "Ok", "info" - break - case "Calc:Help:About..." - window open 250,100 to 570,291, "About", "About" - window set "About", "look", "bordered" - window set "About", "feel", "modal-app" - draw set "BGColor", 255,255,255, "About" - window set "About", "minimumto", 320, 191 - window set "About", "maximumto", 320, 191 - - err = draw image 0,0, This_dir$+"img/image.png", "About" - if(err>0) then - alert "Error loading image.png!"+str$(err), "Close", "warning" - window close "About" - else - button 20,163 to 300,183,"b", "Close", "About" - endif - - break - case translate$("b") - case translate$("About:_QuitRequested") - window close "About" - break - default - break - end switch - next i - - if(window count = 0) inloop = false - sleep 0.1 -wend - -sub calculate(a,type$,b) - ret = 0 - switch(type$) - case "+" - ret = a + b - break - case "-" - ret = a - b - break - case "*" - ret = a * b - break - case "/" - ret = a / b - break - end switch - return ret -end sub - -////////////////////////////////////////////////////////////////// -sub getdir$( programname$) -// find out in which directory we are in -//////////////////////////////////////////////////////////////// -local path$ -local catch -catch=0 -if (!peek("isbound")) then - path$=system$("ps") - x=instr(path$,"/"+programname$) - path$=left$(path$,x) - for x=len(path$)-1 to 1 step -1 - if (instr(path$," ",x) and catch=0) catch=x+1 - next - path$=right$(path$,len(path$)-catch) - path$=trim$(path$) - if path$="/" then - path$ = trim$(system$("pwd"))+"/" - else - path$="/"+path$ - endif - -else -path$=trim$(peek$("directory") ) -path$=path$+"/" - -end if - -return path$ -end sub - - - diff --git a/yab-IDE/Programs/Examples/Checkbox.yab b/yab-IDE/Programs/Examples/Checkbox.yab deleted file mode 100755 index b887b6d..0000000 --- a/yab-IDE/Programs/Examples/Checkbox.yab +++ /dev/null @@ -1,43 +0,0 @@ -#!yab - -dim Part$(1) -window open 100, 100, 240, 300, "A", "Checkboxes" -window set "A", "flags", "not-h-resizable, not-v-resizable, not-zoomable" - -// create the checkboxes -// with layout for left top -layout "left, top", "A" -for NP = 1 to 5 - Y = Y+25 - checkbox 10, Y, "CheckMe:"+str$(NP), "OFF", 0, "A" -next NP - -button 10, 170 to 130, 190, "Button_", "Check them", "A" - -while (not instr(msg$, "Quit")) - msg$ = message$ - if (split(msg$, Part$(), ":|") < 3) dim Part$(3) - - // if one of the checkboxes was used - if (msg$ = "CheckMe:"+Part$(2)+":"+Part$(3)+"|") then - option set "CheckMe:"+Part$(2), "label", Part$(3) - fi - - // if the button was pressed - if (msg$ = "Button_|") then - if (check$ = "ON") then - check$ = "OFF" - option set "Button_", "label", "Check them" - else - check$ = "ON" - option set "Button_", "label", "Uncheck them" - fi - for NP = 1 to 5 - checkbox set "CheckMe:"+str$(NP), (check$ = "ON") - option set "CheckMe:"+str$(NP), "label", check$ -// sleep 0.05 - next NP - fi - -wend -exit diff --git a/yab-IDE/Programs/Examples/Clock.yab b/yab-IDE/Programs/Examples/Clock.yab deleted file mode 100755 index bf18699..0000000 --- a/yab-IDE/Programs/Examples/Clock.yab +++ /dev/null @@ -1,34 +0,0 @@ -#!yab - -window open 100,100 to 200,150, "MainView", "Clock" -window set "MainView", "flags", "Not-Zoomable" -window set "MainView", "minimumto", 100,50 -window set "MainView", "maximumto", 100,50 -layout "left, top, right", "MainView" -view 0,0 to 100,50, "clockview", "MainView" - -inloop = true -while(inloop) - msg$ = message$ - if(msg$<>"") print msg$ - if(instr(msg$,"_QuitRequested")) inloop = false - if(instr(msg$,"Quit")) inloop = false - draw_time_and_date() -sleep 0.01 -wend - -window close "MainView" -exit - -sub time_and_date() - zeit$ = left$(time$,2) + ":" + mid$(time$,4,2) + ":" + mid$(time$,7,2) - datum$ = mid$(date$,14,3) + ", " + mid$(date$,6,2) + "." + mid$(date$,3,2) + "." + mid$(date$,11,2) -end sub - -sub draw_time_and_date() - time_and_date() - draw flush "clockview" - draw text 10,20, datum$ ,"clockview" - draw text 10,35, zeit$ + " ","clockview" - wait 0.25 -end sub diff --git a/yab-IDE/Programs/Examples/ColorDemo.yab b/yab-IDE/Programs/Examples/ColorDemo.yab deleted file mode 100755 index c0f08a0..0000000 --- a/yab-IDE/Programs/Examples/ColorDemo.yab +++ /dev/null @@ -1,26 +0,0 @@ -#!yab - -DOCU ColorDemo, Color select and show -DOCU by Stargater - -window open 100,100 to 420,420, "MainView", "ColorDemo" -window set "MainView", "flags", "not-zoomable, not-h-resizable, not-v-resizable" -view 20,20 to 300,220, "ViewColor", "MainView" -r = 140 -g = 140 -b = 240 -draw set "bgcolor", r,g,b, "ViewColor" - -colorcontrol 10,240, "Colorcontrol", "MainView" -colorcontrol set "Colorcontrol", 140,140,240 - - -while(not instr(message$,"_QuitRequested")) - r = colorcontrol get "Colorcontrol", "red" - g = colorcontrol get "Colorcontrol", "green" - b = colorcontrol get "Colorcontrol", "blue" - draw set "bgcolor", r,g,b, "ViewColor" -wend - -window close "MainView" - diff --git a/yab-IDE/Programs/Examples/DrawWorld.yab b/yab-IDE/Programs/Examples/DrawWorld.yab deleted file mode 100755 index 77d9a3a..0000000 --- a/yab-IDE/Programs/Examples/DrawWorld.yab +++ /dev/null @@ -1,197 +0,0 @@ -#!yab - -window open 100,100 to 700,500, "MainView", "DrawWorld" - -// MainView -draw set "highcolor", 0,0,0, "MainView" -draw set "lowcolor", 235,235,235, "MainView" -draw set "bgcolor", 235,235,235, "MainView" - -draw set 0, "HighSolidFill" -if(peek$("os") = "Haiku") then - draw set "DejaVu Sans,Condensed Bold,48", "MainView" -else - draw set "Zurich,Bold,48", "MainView" -endif -draw text 175,50, "DrawWorld", "MainView" - -button 510,370 to 590,390, "NextButton", "Next", "MainView" - -// Our drawing pad -view 100,60 to 500,390, "DrawView", "MainView" -draw set "highcolor", 0,0,0, "DrawView" -draw set "lowcolor", 255,255,255, "DrawView" -draw set "bgcolor", 255,255,255, "DrawView" - -// Dot and line -draw set "Zurich,Bold,18", "DrawView" -draw text 135,20, "Dot and Line", "DrawView" - -xold = 40 -yold = 260 -for a=10 to 720 step 10 - x = 10+a*180/360 - y = 230+60*sin(a*pi/180) - draw line xold,yold to x,y, "DrawView" - xold = x + 30 - yold = y + 30 -next a - -for a = 0 to 720 step 10 - x = 10+a*180/360 - y = 100+60*sin(a*pi/180) - draw dot x,y, "DrawView" -next a - -while(not instr(msg$,"NextButton")) - msg$ = message$ - if(instr(msg$, "Quit")) then - window close "MainView" - end - endif - sleep 0.1 -wend -msg$ = "" - -draw rect 0,0 to 400,330, "DrawView" -draw flush "DrawView" -draw set 1, "HighSolidFill" - -// Circle and ellipse -draw set "Zurich,Bold,18", "DrawView" -draw text 135,20, "Circle and Ellipse", "DrawView" - -// draw set 1, "LowSolidFill" -draw circle 70,70, 36, "DrawView" -draw set "highcolor", 0,0,245, "DrawView" -draw dot 70,70, "DrawView" -draw line 72,70 to 105,70, "DrawView" -draw line 105,70 to 100,65, "DrawView" -draw line 105,70 to 100,75, "DrawView" -draw text 85,68, "r", "DrawView" - -draw set "highcolor", 0,0,0, "DrawView" -draw ellipse 210,70, 72, 36, "DrawView" -draw set "highcolor", 0,0,245, "DrawView" -draw dot 210,70, "DrawView" -draw line 212,70 to 282,70, "DrawView" -draw line 282,70 to 277,65, "DrawView" -draw line 282,70 to 277,75, "DrawView" -draw line 210,68 to 210,34, "DrawView" -draw line 210,34 to 215,39, "DrawView" -draw line 210,34 to 205,39, "DrawView" -draw text 235,68, "rx", "DrawView" -draw text 192,57, "ry", "DrawView" - -for i = 0 to 255 step 5 - draw set "highcolor", i,0,0, "DrawView" - draw ellipse i+90, 230, 72-i/5, 36+i/5, "DrawView" -next i -draw set "highcolor", 0,0,0, "DrawView" - - -while(not instr(msg$,"NextButton")) - msg$ = message$ - if(instr(msg$, "Quit")) then - window close "MainView" - end - endif - sleep 0.1 -wend -msg$ = "" - -draw rect 0,0 to 400,330, "DrawView" -draw flush "DrawView" -draw set "lowcolor", 255,255,255, "DrawView" -draw set 1, "HighSolidFill" - -// Bezier curve -draw set "Zurich,Bold,18", "DrawView" -draw text 135,20, "Bezier Curve", "DrawView" - -draw set "highcolor", 50,50,250, "DrawView" -draw circle 30,100, 3, "DrawView" -draw circle 70,60, 3, "DrawView" -draw circle 100,40, 3, "DrawView" -draw circle 140,90, 3, "DrawView" -draw line 30,100 to 70,60, "DrawView" -draw line 70,60 to 100,40, "DrawView" -draw line 100,40 to 140,90, "DrawView" -draw set "highcolor", 0,0,0, "DrawView" -draw curve 30,100, 70,60, 100,40, 140,90, "DrawView" - -draw set "highcolor", 50,50,250, "DrawView" -draw circle 170,100, 3, "DrawView" -draw circle 190,40, 3, "DrawView" -draw circle 250,40, 3, "DrawView" -draw circle 265,90, 3, "DrawView" -draw line 170,100 to 190,40, "DrawView" -draw line 190,40 to 250,40, "DrawView" -draw line 250,40 to 265,90, "DrawView" -draw set "highcolor", 0,0,0, "DrawView" -draw curve 170,100, 190,40, 250,40, 265,90, "DrawView" - -draw set "highcolor", 50,50,250, "DrawView" -draw circle 350,40, 3, "DrawView" -draw circle 300,10, 3, "DrawView" -draw circle 290,200, 3, "DrawView" -draw circle 350,140, 3, "DrawView" -draw line 350,40 to 300,10, "DrawView" -draw line 300,10 to 290,200, "DrawView" -draw line 290,200 to 350,140, "DrawView" -draw set "highcolor", 0,0,0, "DrawView" -draw set 0, "HighSolidFill" -draw curve 350,40, 300,10, 290,200, 350,140, "DrawView" - -draw set 1, "HighSolidFill" -draw curve 10,300, 120,100, 170,100, 390,300, "DrawView" - -while(not instr(msg$,"NextButton")) - msg$ = message$ - if(instr(msg$, "Quit")) then - window close "MainView" - end - endif - sleep 0.1 -wend -msg$ = "" - -draw rect 0,0 to 400,330, "DrawView" -draw flush "DrawView" - -// Pattern -draw set "Zurich,Bold,18", "DrawView" -draw text 165,20, "Pattern", "DrawView" - -draw text 47,40, "HighSolidFill", "DrawView" -draw text 247,40, "LowSolidFill", "DrawView" -draw text 43,190, "CheckeredFill", "DrawView" -draw text 247,190, "Userdefined", "DrawView" -draw set "highcolor", 50,50,250, "DrawView" -draw set "lowcolor", 250,50,50, "DrawView" -draw set 0, "HighSolidFill" -draw rect 40,50 to 160,130, "DrawView" -draw set 0, "LowSolidFill" -draw rect 240,50 to 360,130, "DrawView" -draw set 0, "CheckeredFill" -draw rect 40,200 to 160,280, "DrawView" -pattern$ = "255239171199001199171239" -draw set 0, pattern$ -draw rect 240,200 to 360,280, "DrawView" -draw set 0, "255255255255255255255255" -draw rect 40,50 to 160,130, "DrawView" - -draw set "highcolor", 0,0,0, "DrawView" -draw set "lowcolor", 255,255,255, "DrawView" - -while(not instr(msg$,"NextButton")) - msg$ = message$ - if(instr(msg$, "Quit")) then - window close "MainView" - end - endif - sleep 0.1 -wend - -window close "MainView" - diff --git a/yab-IDE/Programs/Examples/DropWorld.yab b/yab-IDE/Programs/Examples/DropWorld.yab deleted file mode 100755 index 1181812..0000000 --- a/yab-IDE/Programs/Examples/DropWorld.yab +++ /dev/null @@ -1,33 +0,0 @@ -#!yab - - -window open 100,100 to 300,300, "WView", "DropWorld" - -text 20,5, "Txt1", "Drop any file here:", "WView" -view 20,20 to 180,180, "DropView", "WView" -draw set "highcolor", 0,0,0, "DropView" -draw set "lowcolor", 255,255,0, "DropView" -pattern$ = "240225195135015030060120" -draw set 0, pattern$ -draw rect 0,0 to 160,160, "DropView" -draw set 0, "lowsolid" -view dropzone "DropView" - -dim msg$(1) -inloop = true -while(inloop) - n = split(message$, msg$(), "|:") - for i = 0 to n - if(msg$(i) = "_Dropped") then - draw rect 20,181 to 290,200, "WView" - draw flush "WView" - draw text 20,195, msg$(i+1), "WView" - endif - if(msg$(i) = "_QuitRequested") inloop = false - next i - - if(msg$<>"") print msg$ - sleep 0.1 -wend - -window close "WView" diff --git a/yab-IDE/Programs/Examples/EvenMoreControls.yab b/yab-IDE/Programs/Examples/EvenMoreControls.yab deleted file mode 100755 index dad2df7..0000000 --- a/yab-IDE/Programs/Examples/EvenMoreControls.yab +++ /dev/null @@ -1,18 +0,0 @@ -#!yab -sleep .01 -window open 100,100 to 400, 200, "WView", "EvenMoreControls" -layout "none", "WView" -colorcontrol 10,10, "CC", "WView" -colorcontrol set "CC", 213,123,43 - -textcontrol 10,70 to 150,90, "TC", "Enter Password:","","WView" -textcontrol set "TC",1 - -inloop = true -while(inloop) - msg$ = message$ - if(msg$<>"") print msg$ - if(instr(msg$,"Quit")) inloop = false -wend - -window close "WView" diff --git a/yab-IDE/Programs/Examples/FakeTransparency.yab b/yab-IDE/Programs/Examples/FakeTransparency.yab deleted file mode 100755 index 654d77d..0000000 --- a/yab-IDE/Programs/Examples/FakeTransparency.yab +++ /dev/null @@ -1,58 +0,0 @@ -#!yab - -SCREEN_W = peek("desktopwidth") -SCREEN_H = peek("desktopheight") - -W = 400 -H = 200 - -X = (SCREEN_W/2) - (W/2) -Y = (SCREEN_H/2) - (H/2) - -THE_TEXT$ = "HELLO" - -screenshot 0, 0 to SCREEN_W-1, SCREEN_H-1, "BMP_screen_" - -window open -10-W, 0 to -10, H, "Main_", "PAPA" - window set "Main_", "look", "modal" - window set "Main_", "flags", "not-h-resizable, not-v-resizable, not-zoomable" - -canvas 0, 0 to W, H, "CV_main_", "Main_" -if(peek$("os") = "Haiku") then - draw set "DejaVu Sans,Condensed Bold,122", "CV_main_" -else - draw set "Swis721 BT, Bold, 122", "CV_main_" -endif - -th = draw get "max-text-height", "CV_main_" -tw = draw get "text-width", THE_TEXT$, "CV_main_" - -tx = (W/2)-(tw/2) -ty = (H/3)*2 - -draw bitmap -X, -Y, "BMP_screen_", "copy", "CV_main_" -draw text tx, ty, THE_TEXT$, "CV_main_" - -window set "Main_", "moveto", X, Y - -dim m$(1) -while (not instr(msg$, "Quit")) - msg$ = message$ - - if (X <> window get "Main_", "position-x") then - X = window get "Main_", "position-x" - Moved = true - fi - if (Y <> window get "Main_", "position-y") then - Y = window get "Main_", "position-y" - Moved = true - fi - - if (Moved) then - draw bitmap -X, -Y, "BMP_screen_", "copy", "CV_main_" - draw text tx, ty, THE_TEXT$, "CV_main_" - Moved = false - fi - -wend -exit diff --git a/yab-IDE/Programs/Examples/FileboxDemo.yab b/yab-IDE/Programs/Examples/FileboxDemo.yab deleted file mode 100755 index e1a4c2a..0000000 --- a/yab-IDE/Programs/Examples/FileboxDemo.yab +++ /dev/null @@ -1,53 +0,0 @@ -#!yab - - -import Filebox - - -dir$ = "/boot/home/" - -window open 100,100 to 500,500, "Demo",dir$ -Filebox(10,10,350,390,"Filebox", 1, "Demo") -FileboxDirectory("Filebox", dir$, false) -button 360,10,390,30, "DirUp", "..", "Demo" - -dim msg$(1) -inloop = true -while(inloop) - n = split(message$, msg$(), "|") - for i=1 to n - print msg$(i) - // Quit - if(msg$(i) = "Demo:_QuitRequested") inloop = false - - // Button pressed and we are not in the root directory - if(msg$(i) = "DirUp" and dir$<>"/") then - t = len(dir$)-1 - while(mid$(dir$,t,1)<>"/") - t = t - 1 - wend - dir$ = left$(dir$,t) - WINDOW SET "Demo", "Title", dir$ - FileboxDirectory("Filebox", dir$, false) - - endif - - // An item is invoked - if(instr(msg$(i),"Filebox:_Invoke:")) then - position = val(right$(msg$(i),len(msg$(i))-16)) - - // if the item is a directory, then update the filebox else print the filename - if(FileboxIsDirectory("Filebox", position,dir$)) then - dir$ = dir$ + FileboxName$("Filebox", position) + "/" - WINDOW SET "Demo", "Title", dir$ - FileboxDirectory("Filebox", dir$, false) - else - print dir$+FileboxName$("Filebox", position) - endif - endif - next i - - sleep 0.01 -wend - -window close "Demo" diff --git a/yab-IDE/Programs/Examples/GUI-World.yab b/yab-IDE/Programs/Examples/GUI-World.yab deleted file mode 100755 index ee0ddbe..0000000 --- a/yab-IDE/Programs/Examples/GUI-World.yab +++ /dev/null @@ -1,444 +0,0 @@ -#!yab - -// Set Backgroundcolors as variables. -bgr = 216 : bgg = 216 : bgb = 226 - -window open 100, 100 to 610, 400, "MainView" ,"GUI - World" - window set "MainView", "flags", "not-h-resizable" - draw set "bgcolor", bgr, bgg, bgb, "MainView" - draw set "lowcolor", bgr, bgg, bgb, "MainView" - draw set "highcolor", 0, 0, 0, "MainView" - draw set "Zurich, Bold, 16", "MainView" - draw text 10, 20, "GUI - World", "MainView" - -listbox 200, 5 to 505, 235, "SourceView", 1, "MainView" - -view 5, 241 to 505, 265, "LineView", "MainView" - draw set "bgcolor", bgr-16, bgg-16, bgb-16, "LineView" - draw set "lowcolor", bgr-16, bgg-16, bgb-16, "LineView" - draw set "highcolor", 155, 0, 0, "LineView" - draw set "Zurich, Bold, 14", "LineView" - -view 0, 270 to 510, 300, "ButtonView", "MainView" - draw set "bgcolor", bgr, bgg, bgb, "ButtonView" - -button 10, 0 to 70, 20, "Quit_", "Quit", "ButtonView" -button 205, 0 to 500, 20, "Step_", "Next step", "ButtonView" - -layout "left, top", "MainView" -view 5, 25 to 190, 240, "StatusView", "MainView" - draw set "bgcolor", bgr, bgg, bgb, "StatusView" - draw set "Zurich, Roman, 10", "StatusView" - -NextStep(0) -option set "Step_", "focus", true - -dim choice$(1) -inloop = true -while (inloop) - msg$ = message$ - if (split(msg$, choice$(), ":|") > 2) btn$ = choice$(3) - if (msg$ <> "") print msg$ - - switch msg$ - - case "Step_|" - stp = stp+1 - NextStep(stp) - L = 0 - option set "Step_", "focus", true - break - - case "SourceView:_Invoke:"+btn$+"|" - if (L = 0) stp = stp-1 - L = 1 - NextStep(val(btn$)) - break - - case "Quit_|": - case "MainView:_QuitRequested|": - inloop = false - break - - end switch - sleep 0.01 -wend -exit - -sub NextStep(n) - draw flush "StatusView" - m = n - if (n = 0) then - draw text 5, 20, "With GUI-World you can", "StatusView" - draw text 5, 35, "create a window with a few", "StatusView" - draw text 5, 50, "contents, as examples.", "StatusView" - draw text 5, 75, "The currently executed line will be", "StatusView" - draw text 5, 90, "shown down above the buttons.", "StatusView" - draw text 5, 115, "The complete source will be", "StatusView" - draw text 5, 130, "collected in the right list.", "StatusView" - draw text 5, 200, "Click on 'Next step' to start ...", "StatusView" - ShowLine("Welcome to GUI-World!") - fi - - if (n = 1) then - draw text 5, 20, "At first, we need to create the window.", "StatusView" - draw text 5, 35, "We will create a window", "StatusView" - draw text 5, 60, "with a size of 400, 300 (x, y)", "StatusView" - draw text 5, 75, "at the position 200x200", "StatusView" - draw text 5, 90, "of your monitor.", "StatusView" - draw text 5, 110, "The name of the window is ''New App''.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("window open 200, 200 to 600, 500, ''View1'', ''New App''") - fi - - if (n = 2) then - if (L = 0) window open 200, 450 to 600, 750, "View1", "New App" - if (L = 0) listbox add "SourceView", "window open 200, 200 to 600, 500, ''View1'', ''New App''" - - draw text 5, 20, "The window should be opened now.", "StatusView" - draw text 5, 45, "It has no function yet,", "StatusView" - draw text 5, 60, "so we'll change that.", "StatusView" - draw text 5, 85, "But first let us define the", "StatusView" - draw text 5, 100, "background color of the window.", "StatusView" - draw text 5, 125, "We'll choose white for background.", "StatusView" - draw text 5, 140, "Red 255 + Green 255 + Green 255", "StatusView" - draw text 5, 155, " = white.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw set ''bgcolor'', 255, 255, 255, ''View1''") - fi - - if (n = 3) then - if (L = 0) draw set "bgcolor", 255, 255, 255, "View1" - if (L = 0) listbox add "SourceView", "draw set ''bgcolor'', 255, 255, 255, ''View1''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Ok, white. But still no function!!", "StatusView" - draw text 5, 45, "We can now drop in some widgets,", "StatusView" - draw text 5, 60, "such as buttons, checkboxes, etc.", "StatusView" - draw text 5, 85, "Let's start with a simple button.", "StatusView" - draw text 5, 100, "The button will be named 'Quit'", "StatusView" - draw text 5, 115, "and will appear down-right.", "StatusView" - draw text 5, 140, "Its ID is 'Button1' so it would return", "StatusView" - draw text 5, 155, "'Button1' if is pressed.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("button 330, 270 to 390, 270, ''Button1'', ''Quit'', ''View1''") - fi - - if (n = 4) then - if (L = 0) button 330, 270 to 390, 270, "Button1", "Quit", "View1" - if (L = 0) listbox add "SourceView", "button 330, 270 to 390, 270, ''Button1'', ''Quit'', ''View1''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Creating views.", "StatusView" - draw text 5, 45, "For further widgets, we should create", "StatusView" - draw text 5, 60, "extra views inside the View1", "StatusView" - draw text 5, 85, "The name of the view is 'View2'", "StatusView" - draw text 5, 100, "and we want it in the upper-left corner", "StatusView" - draw text 5, 115, "inside the Window (View1).", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("view 5, 5 to 150, 60, ''View2'', ''View1''") - fi - - if (n = 5) then - if (L = 0) view 5, 5 to 150, 60, "View2", "View1" - if (L = 0) listbox add "SourceView", "view 5, 5 to 150, 60, ''View2'', ''View1''" - - draw text 5, 60, "We'd like to change the background", "StatusView" - draw text 5, 75, "color of that new view...", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw set ''bgcolor'', 216, 230, 250, ''View2''") - fi - - if (n = 6) then - if (L = 0) draw set "bgcolor", 216, 230, 250, "View2" - if (L = 0) listbox add "SourceView", " draw set ''bgcolor'', 216, 230, 250, ''View2''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Radiobuttons.", "StatusView" - draw text 5, 45, "Now we drop a radiobutton", "StatusView" - draw text 5, 60, "in the new view.", "StatusView" - draw text 5, 85, "Note that we have to use the", "StatusView" - draw text 5, 100, "coordinates of 'View2' for everything", "StatusView" - draw text 5, 115, "we want to put into it!", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("radiobutton 5, 10, ''rb1'', ''Radiobutton 1'', 0, ''View2''") - fi - - if (n = 7) then - draw text 5, 20, "Our radiobutton should", "StatusView" - draw text 15, 45, "appear at 5, 10 on 'View2',", "StatusView" - draw text 15, 60, "be named 'RadioButton 1'", "StatusView" - draw text 15, 75, "have the ID 'rb1'", "StatusView" - draw text 15, 90, "not be activated (activated = 0)", "StatusView" - draw text 5, 115, "It will return the ID and if", "StatusView" - draw text 5, 130, "not activated = 0", "StatusView" - draw text 5, 145, "activated = 1", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - fi - - if (n = 8) then - if (L = 0) radiobutton 5, 10, "rb1", "Radiobutton 1", 0, "View2" - if (L = 0) listbox add "SourceView", "radiobutton 5, 10, ''rb1'', ''Radiobutton 1'', 0, ''View2''" - - draw text 5, 20, "What about another one?", "StatusView" - draw text 5, 45, "This time activated.", "StatusView" - draw text 5, 60, "Because they are on the same view,", "StatusView" - draw text 5, 85, "you can switch between them.", "StatusView" - draw text 5, 100, "Just try it out...", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on...", "StatusView" - ShowLine("radiobutton 5, 30, ''rb2'', ''Radiobutton 2'', 1, ''View2''") - fi - - if (n = 9) then - if (L = 0) radiobutton 5, 30, "rb2", "Radiobutton 2", 1, "View2" - if (L = 0) listbox add "SourceView", "radiobutton 5, 30, ''rb2'', ''Radiobutton 2'', 1, ''View2''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Checkbuttons.", "StatusView" - draw text 5, 45, "Let's make checkbuttons!", "StatusView" - draw text 5, 60, "This time placed on 'View1' again.", "StatusView" - draw text 5, 85, "It is named 'Checkbox 1',", "StatusView" - draw text 5, 100, "has the ID 'cb1' and is", "StatusView" - draw text 5, 115, "not activated.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("checkbox 10, 70, ''cb1'', ''Checkbox 1'', 0, ''View1''") - fi - - if (n = 10) then - if (L = 0) checkbox 10, 70, "cb1", "Checkbox 1", 0, "View1" - if (L = 0) listbox add "SourceView", "checkbox 10, 60, ''cb1'', ''Checkbox 1'', 0, ''View1''" - - draw text 5, 20, "And another one for switching...", "StatusView" - draw text 5, 45, "This time activated.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("checkbox 10, 90, ''cb2'', ''Checkbox 2'', 1, ''View1''") - fi - - if (n = 11) then - if (L = 0) checkbox 10, 90, "cb2", "Checkbox 2", 1, "View1" - if (L = 0) listbox add "SourceView", "checkbox 10, 60, ''cb2'', ''Checkbox 2'', 1, ''View1''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Textcontrol - Input from the user.", "StatusView" - draw text 5, 45, "This shows a text inputfield with a", "StatusView" - draw text 5, 60, "short text before it.", "StatusView" - draw text 5, 85, "It has the ID 'tc1' and returns it, if", "StatusView" - draw text 5, 100, "a user pressed enter after typing", "StatusView" - draw text 5, 115, "in the textfield.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("textcontrol 10, 120 to 180, 130, ''tc1'', ''Tell me:'', ''Text...'', ''View1''") - fi - - if (n = 12) then - if (L = 0) textcontrol 10, 120 to 180, 130, "tc1", "Tell me:", "Text...", "View1" - if (L = 0) listbox add "SourceView", "textcontrol 10, 120 to 180, 130, ''tc1'', ''Tell me:'', ''Text...'', ''View1''" - - draw text 5, 20, "And now a listbox.", "StatusView" - draw text 5, 45, "It's a list, where dropboxs can be added to.", "StatusView" - draw text 5, 60, "It has the ID 'list1' and returns it,", "StatusView" - draw text 5, 85, "followed by the chosen dropbox.", "StatusView" - draw text 5, 100, "The '1' in here affects the scrollbars", "StatusView" - draw text 15, 115, "0 = no scrollbar", "StatusView" - draw text 15, 130, "1 = vertikal scrollbar", "StatusView" - draw text 15, 145, "2 = horizontal scrollbar", "StatusView" - draw text 15, 160, "3 = both scrollbars", "StatusView" - draw text 5, 185, "We'll take just the vertikal one.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("listbox 200, 10 to 380, 260, ''list1'', 1, ''View1''") - fi - - if (n = 13) then - if (L = 0) listbox 200,10 to 380,260,"list1",1, "View1" - if (L = 0) listbox add "SourceView", "listbox 200, 10 to 380, 260, ''list1'', 1, ''View1''" - - draw text 5, 20, "Add items to the list.", "StatusView" - draw text 5, 45, "Now let's put some items into it.", "StatusView" - draw text 5, 60, "We will add 3 entries in the list.", "StatusView" - draw text 5, 85, "Look on the line and then watch out", "StatusView" - draw text 5, 100, "what happens.", "StatusView" - draw text 5, 125, "At first we enter 'Hello World'.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("listbox add ''list1'', ''Hello world!'''") - fi - - if (n = 14) then - if (L = 0) listbox add "list1", "Hello world!" - if (L = 0) listbox add "SourceView", "listbox add ''list1'', ''Hello world!''" - - draw text 5, 20, "Just another entry.", "StatusView" - draw text 5, 60, "Now we enter 'How are you?'.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("listbox add ''list1'', ''How are you?''") - fi - - if (n = 15) then - if (L = 0) listbox add "list1", "How are you?" - if (L = 0) listbox add "SourceView", "listbox add ''list1'', ''How are you?''" - - draw text 5, 20, "The third and last entry.", "StatusView" - draw text 5, 45, "Last but not least, we enter", "StatusView" - draw text 5, 60, "'I am fine' to the listbox.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - if (L = 0) ShowLine("listbox add ''list1'', ''I am fine!''") - fi - - if (n = 16) then - if (L = 0) listbox add "list1", "I am fine!" - if (L = 0) listbox add "SourceView", "''dropbox add ''list1'', ''I am fine!''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Selfexplaining...", "StatusView" - draw text 5, 45, "You see everything what differs them", "StatusView" - draw text 5, 60, "is the text for the entry.", "StatusView" - draw text 5, 85, "So it is important, where you place", "StatusView" - draw text 5, 100, "the entries in the sourcecode.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("...") - fi - - if (n = 17) then - if (L = 0) draw set "highcolor", 0, 0, 0, "View1" - if (L = 0) listbox add "SourceView", "draw set ''highcolor'', 0, 0, 0, ''View1''" - - draw text 5, 20, "Change highcolor.", "StatusView" - draw text 5, 45, "If you'd like to draw something", "StatusView" - draw text 5, 60, "e.g. a rectangle, you should control", "StatusView" - draw text 5, 75, "the background color of the view", "StatusView" - draw text 5, 90, "which shall appear in.", "StatusView" - draw text 5, 115, "We chose black (0, 0, 0).", "StatusView" - draw text 5, 130, "(see sourcecode)", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw set ''highcolor'', 0, 0, 0, ''View1''") - fi - - if (n = 18) then - draw text 5, 20, "Now we set the color, we can draw.", "StatusView" - draw text 5, 45, "A rectangle will now be drawn", "StatusView" - draw text 5, 60, " with the previously chosen color", "StatusView" - draw text 5, 75, "in the window.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw rect 10, 150 to 180, 190, ''View1''") - fi - - if (n = 19) then - if (L = 0) draw rect 10, 150 to 180, 190, "View1" - if (L = 0) listbox add "SourceView", "draw rect 10, 150 to 180, 190, ''View1''" - if (L = 0) listbox add "SourceView", "" - - draw text 5, 20, "Draw text on the rectangle.", "StatusView" - draw text 5, 45, "Now we'll do some writing but", "StatusView" - draw text 5, 60, "first we should control the color.", "StatusView" - draw text 5, 85, "The highcolor is the color the", "StatusView" - draw text 5, 100, "text will be in.", "StatusView" - draw text 5, 125, "We chose red here.", "StatusView" - draw text 5, 205, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw set ''highcolor'', 255, 0, 0, ''View1''") - fi - - if (n = 20) then - if (L = 0) draw set "highcolor", 255, 0, 0, "View1" - if (L = 0) draw set "lowcolor", 0, 0, 0, "View1" - if (L = 0) listbox add "SourceView", "draw set ''highcolor'', 255, 0, 0, ''View1''" - - draw text 5, 20, "Font -type and -size.", "StatusView" - draw text 5, 45, "Next we have to define the", "StatusView" - draw text 5, 60, "fonttype and its size.", "StatusView" - draw text 5, 85, "You can see the font-idents best", "StatusView" - draw text 5, 100, "in GoBe productive or something", "StatusView" - draw text 5, 115, "like that.", "StatusView" - draw text 5, 200, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw set ''Zurich, Bold, 24'', ''View1''") - fi - - if (n = 21) then - if (L = 0) draw set "Zurich, Bold, 24", "View1" - if (L = 0) listbox add "SourceView", "draw set ''Zurich, Bold, 24'', ''View1''" - - draw text 5, 20, "Let's go writing.", "StatusView" - draw text 5, 45, "The text shall appear in red", "StatusView" - draw text 5, 60, "right on the rectangle.", "StatusView" - draw text 5, 85, "We will write the word", "StatusView" - draw text 5, 100, "'easy", "StatusView" - draw text 5, 115, "", "StatusView" - draw text 5, 200, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("draw text 40, 180, ''easy'', ''View1''") - fi - - if (n = 22) then - if (L = 0) draw text 40, 180, "easy", "View1" - if (L = 0) listbox add "SourceView", "draw text 40, 180, ''easy'', ''View1''" - - draw text 5, 20, "Dropboxes.", "StatusView" - draw text 5, 45, "If you want to provide the user a selection", "StatusView" - draw text 5, 60, "on a small room, take a dropbox!", "StatusView" - draw text 5, 85, "This dropbox has the ID ''db1'' and returns", "StatusView" - draw text 5, 100, "it, if there are entries in it, together with", "StatusView" - draw text 5, 115, "that entry.", "StatusView" - draw text 5, 200, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("dropbox 10, 200 to 180, 220, ''db1'', ''Choose'', ''View1''") - fi - - if (n = 23) then - if (L = 0) dropbox 10, 200 to 180, 220, "db1", "Choose", "View1" - if (L = 0) listbox add "SourceView", "dropbox 10, 200 to 180, 220, ''db1'', ''Choose'', ''View1''" - - draw text 5, 20, "Add items to the dropbox.", "StatusView" - draw text 5, 45, "Adding items to a dropbox is the same", "StatusView" - draw text 5, 60, "procedure as for listboxes.", "StatusView" - draw text 5, 85, "We give the ID of the dropbox", "StatusView" - draw text 5, 100, "which is 'db1' and the name, the", "StatusView" - draw text 5, 115, "dropbox should have, followed by the", "StatusView" - draw text 5, 130, "view the dropbox is on.", "StatusView" - draw text 5, 155, "We'll make three entries again and", "StatusView" - draw text 5, 170, "start with that line below. ", "StatusView" - draw text 5, 200, "Click on 'Next step' to go on ...", "StatusView" - ShowLine("dropbox add ''db1'', ''yab interpreter''") - fi - - if (n = 24) then - if (L = 0) dropbox add "db1", "yab interpreter" - if (L = 0) listbox add "SourceView", "dropbox add ''db1'', ''yab interpreter''" - ShowLine("dropbox add ''db1'', ''yet another''") - sleep 0.5 - if (L = 0) dropbox add "db1", "yet another" - if (L = 0) listbox add "SourceView", "dropbox add ''db1'', ''yet another''" - ShowLine("dropbox add ''db1'', ''basic''") - sleep 0.5 - if (L = 0) dropbox add "db1", "basic" - if (L = 0) listbox add "SourceView", "dropbox add ''db1'', ''basic''" - - draw text 5, 20, "That's it for today, man!", "StatusView" - draw text 5, 45, "More help do you get from the file", "StatusView" - draw text 5, 60, "DONE_AND_TODO", "StatusView" - draw text 5, 85, "", "StatusView" - draw text 5, 100, "To be continued...", "StatusView" - draw text 5, 115, "", "StatusView" - draw text 5, 200, "Click on 'Next step' to go insane...", "StatusView" - ShowLine("Nothing more to tell ...") - fi - - if (n = 25) then - - - draw text 5, 20, "That's it for today, man!", "StatusView" - draw text 5, 45, "More help do you get from the file", "StatusView" - draw text 5, 60, "DONE_AND_TODO", "StatusView" - draw text 5, 85, "", "StatusView" - draw text 5, 100, "To be continued...", "StatusView" - draw text 5, 115, "", "StatusView" - draw text 5, 200, "Click on 'Next step' to go insane...", "StatusView" - ShowLine("Nothing more to tell ...") - - stp = stp-1 - fi - - return -end sub - -sub ShowLine(CurrLine$) - - draw flush "LineView" - draw text 10, 17, CurrLine$, "LineView" - - return -end sub diff --git a/yab-IDE/Programs/Examples/IconWorld.yab b/yab-IDE/Programs/Examples/IconWorld.yab deleted file mode 100755 index 3cb733c..0000000 --- a/yab-IDE/Programs/Examples/IconWorld.yab +++ /dev/null @@ -1,30 +0,0 @@ -#!yab - -window open 100,100 to 600,600, "Main", "IconWorld" - -systempath$ = "/boot/system/apps/Mail" - -draw text 70,30, "bitmap get \"BMP_icon\", \"path\", \"" + systempath$ +"\"", "Main" -bitmap get "BMP_icon", "path", systempath$ -draw bitmap 10, 10, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -draw text 70,70, "bitmap get \"BMP_icon\", \"mime16\", \"application/x-vnd.Be-MAIL\"", "Main" -bitmap get "BMP_icon", "mime16", "application/x-vnd.Be-MAIL" -draw bitmap 10, 60, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -draw text 70,110, "bitmap get \"BMP_icon\", \"mime32\", \"application/x-vnd.Be-MAIL\"", "Main" -bitmap get "BMP_icon", "mime32", "application/x-vnd.Be-MAIL" -draw bitmap 10, 90, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -draw text 70,150, "bitmap get 62, \"BMP_icon\", \"" + systempath$ + "\"", "Main" -bitmap get 62, "BMP_icon", systempath$ -draw bitmap 10, 130, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -while(not instr(message$, "Quit")) -wend - -window close "Main" diff --git a/yab-IDE/Programs/Examples/ImageWorld.yab b/yab-IDE/Programs/Examples/ImageWorld.yab deleted file mode 100755 index f5b7f6f..0000000 --- a/yab-IDE/Programs/Examples/ImageWorld.yab +++ /dev/null @@ -1,33 +0,0 @@ -#!yab -dir$=attribute get$ "", "" -dir$=dir$+"/" -window open 200,200 to 520,391, "MainView", "ImageWorld" -button 50,163 to 270,183, "Ok_", "Ok", "MainView" - -err = draw image 0,0, dir$+"img/image.png", "MainView" - -if(err = 1) then - alert "Problem while loading image.png!", "Quit", "stop" - window close "MainView" - exit 1 -endif - -alert "This shows how to show Images in your windows.", "Ok", "idea" - -inloop = true -while(inloop) - msg$ = message$ - - switch msg$ - case "Ok_|": - case "MainView:_QuitRequested|": - inloop = false - break - - end switch - -wend - -exit - - diff --git a/yab-IDE/Programs/Examples/JDemo.yab b/yab-IDE/Programs/Examples/JDemo.yab deleted file mode 100755 index 2eaa848..0000000 --- a/yab-IDE/Programs/Examples/JDemo.yab +++ /dev/null @@ -1,69 +0,0 @@ -#!yab - -// JDemo - just a smiley -// by DasJott - -window open 300,100 to 800,500,"mainview","Smiley - DEMO" -window set "mainview", "flags","not-zoomable, not-h-resizable, not-v-resizable" -draw set "bgcolor", 0,0,0,"mainview" -draw set "highcolor",255,255,0,"mainview" -draw circle 250,200,180,"mainview" - -// Eyes -draw set "highcolor",0,0,0,"mainview" -draw circle 170,110,20,"mainview" -view 310,90 to 350,130,"twinkleview","mainview" -draw set "bgcolor",255,255,0,"twinkleview" -draw set "highcolor",0,0,0,"twinkleview" -draw circle 20,20,20,"twinkleview" - -// Smiling mouth -view 140,220 to 360,320,"mouthview","mainview" -draw set "bgcolor",255,255,0,"mouthview" -draw set "highcolor",0,0,0,"mouthview" -draw set 1, "HighSolidFill" -draw circle 110,-11, 110,"mouthview" -draw set 0, "HighSolidFill" - -button 450,370 to 490,390,"Exit","Quit","mainview" - - - -inloop = true -while (inloop = true) - msg$ = message$ - - if (t < 20) then - draw flush "twinkleview" - draw ellipse 20,20, 20, 20-t,"twinkleview" - fi - - if (t > 20 and t < 41) then - draw flush "twinkleview" - draw ellipse 20,20, 20, t-20,"twinkleview" - fi - - if (t = 100) t = 0 - - t = t+1 - n = n+1 - - if(n = 200) then - draw flush "mouthview" - draw circle 110,-11, 110,"mouthview" - n = 0 - sleep 1 - fi - - if(n = 0) then - draw flush "mouthview" - draw set 1, "HighSolidFill" - draw circle 110,-11, 110,"mouthview" - draw set 0, "HighSolidFill" - fi - - if (msg$ = "Exit|") inloop = false - if (msg$ = "mainview:_QuitRequested|") inloop = false -wend - -window close "mainview" diff --git a/yab-IDE/Programs/Examples/Keyboard.yab b/yab-IDE/Programs/Examples/Keyboard.yab deleted file mode 100755 index 687e726..0000000 --- a/yab-IDE/Programs/Examples/Keyboard.yab +++ /dev/null @@ -1,115 +0,0 @@ -#!yab - -window open 200, 200 to 710, 600, "MainView" ,"YAB-Keyboard" -window set "MainView", "flags", "not-h-resizable, not-v-resizable" - -view 10,10 to 500, 180, "TextView", "MainView" - draw set "bgcolor", 0, 50, 0, "TextView" - draw set "lowcolor", 0, 50, 0, "TextView" - draw set "highcolor", 245, 245, 245, "TextView" - draw set "Zurich, Bold, 20", "TextView" - -button 10, 200 to 50, 240, "Button:Q", "Q", "MainView" -button 60, 200 to 100, 240, "Button:W", "W", "MainView" -button 110, 200 to 150, 240, "Button:E", "E", "MainView" -button 160, 200 to 200, 240, "Button:R", "R", "MainView" -button 210, 200 to 250, 240, "Button:T", "T", "MainView" -button 260, 200 to 300, 240, "Button:Z", "Z", "MainView" -button 310, 200 to 350, 240, "Button:U", "U", "MainView" -button 360, 200 to 400, 240, "Button:I", "I", "MainView" -button 410, 200 to 450, 240, "Button:O", "O", "MainView" -button 460, 200 to 500, 240, "Button:P", "P", "MainView" - -button 20, 250 to 60, 290, "Button:A", "A", "MainView" -button 70, 250 to 110, 290, "Button:S", "S", "MainView" -button 120, 250 to 160, 290, "Button:D", "D", "MainView" -button 170, 250 to 210, 290, "Button:F", "F", "MainView" -button 220, 250 to 260, 290, "Button:G", "G", "MainView" -button 270, 250 to 310, 290, "Button:H", "H", "MainView" -button 320, 250 to 360, 290, "Button:J", "J", "MainView" -button 370, 250 to 410, 290, "Button:K", "K", "MainView" -button 420, 250 to 460, 290, "Button:L", "L", "MainView" -button 465, 250 to 500, 340, "Enter_", "Enter", "MainView" - -button 30, 300 to 70, 340, "Button:Y", "Y", "MainView" -button 80, 300 to 120, 340, "Button:X", "X", "MainView" -button 130, 300 to 170, 340, "Button:C", "C", "MainView" -button 180, 300 to 220, 340, "Button:V", "V", "MainView" -button 230, 300 to 270, 340, "Button:B", "B", "MainView" -button 280, 300 to 320, 340, "Button:N", "N", "MainView" -button 330, 300 to 370, 340, "Button:M", "M", "MainView" -button 380, 300 to 415, 340, "Button:,", ",", "MainView" -button 425, 300 to 460, 340, "Button:.", ".", "MainView" - -button 10, 350 to 60, 390, "About_", "About", "MainView" -button 70, 350 to 430, 390, "Spacebar_", "", "MainView" -button 440, 350 to 500, 390, "Clear_", "Clear all", "MainView" - -a = 10 : b = 25 -dim choice$(1) -inloop = true -while (inloop) - msg$ = message$ - if (split(msg$, choice$(), ":|") >= 2) btn$ = choice$(2) - if (msg$ <> "") print msg$ - - switch msg$ - - case "MainView:_QuitRequested|" - inloop = false - break - - case "Button:"+btn$+"|" - draw text a, b, btn$, "TextView" - if (btn$ = "J" ) then - a = a+10 - elsif (btn$ = "I" or btn$ = "," or btn$ = ".") then - a = a+6 - elsif (btn$ = "W") then - a = a+20 - elsif (btn$ = "F" or btn$ = "T") then - a = a+12 - elsif (btn$ = "M") then - a = a+18 - elsif (btn$ = "N" or btn$ = "G" or btn$ = "Q" or btn$ = "O") then - a=a+15 - else - a = a+14 - fi - break - - case "Enter_|" - a = 10 : b = b+25 - break - - case "Spacebar_|" - a = a+12 - break - - case "Clear_|" - draw flush "TextView" - a = 10 : b = 25 - break - - case "About_|" - ShowAbout() - break - - end switch - sleep 0.01 -wend -exit - -sub ShowAbout() - for i = 0 to 215 - msg$ = message$ - draw flush "TextView" - draw text 200, 190-i, "This is:", "TextView" - draw text 160, 215-i, "YAB - Keyboard", "TextView" - if (msg$ = "About_|") break - sleep 0.01 - next i - a = 10 : b = 25 - draw flush "TextView" - return -end sub diff --git a/yab-IDE/Programs/Examples/Loop-World.yab b/yab-IDE/Programs/Examples/Loop-World.yab deleted file mode 100755 index 87c00f3..0000000 --- a/yab-IDE/Programs/Examples/Loop-World.yab +++ /dev/null @@ -1,401 +0,0 @@ -#!yab - -// Main background colors: -r = 206 : g = 226 : b = 236 - -// Open main window: -window open 100, 250 to 600, 650, "MainView", "Loop-World" - window set "MainView", "flags","not-zoomable" - window set "MainView", "minimumto",500,400 - window set "MainView", "maximumto",500,400 - draw set "bgcolor", r, g, b, "MainView" - draw set "lowcolor", r-75, g-75, b-75, "MainView" - draw line 10, 365 to 490, 365, "MainView" - draw set "lowcolor", r+40, g+40, b+40, "MainView" - draw line 10, 366 to 490, 366, "MainView" - draw set "lowcolor", r, g, b, "MainView" - draw set "Swis721 BT, Bold, 14", "MainView" - draw text 10, 20, "Loop-World", "MainView" - draw text 200, 20, "Sourcecode:", "MainView" - - - -// make views inside the main window: -view 0, 30 to 190, 360, "ExplainView", "MainView" - draw set "bgcolor", r, g, b, "ExplainView" - draw set "Swis721 BT, Roman, 10", "ExplainView" - -view 200, 30 to 490, 360, "SourceView", "MainView" - draw set "bgcolor", r+39, g+39, b+39, "SourceView" - draw set "Swis721 BT, Roman, 10", "SourceView" - -//draw text 10, 265, "Choose a kind of loop:", "MainView" -button 10, 370 to 60, 390, "For_Loop_", "for/next", "MainView" -button 65, 370 to 115, 390, "While_Loop_", "while", "MainView" -button 120, 370 to 170, 390, "Do_Loop_", "do/loop", "MainView" -button 175, 370 to 225, 390, "Sub_Loop_", "sub m(n)", "MainView" -button 230, 370 to 280, 390, "Other_Loop_", "Other", "MainView" -//button 285, 370 to 335, 390, "None_", "None", "MainView" -button 345, 370 to 395, 390, "None_", "Back", "MainView" -button 405, 370 to 490, 390, "Exec_", "Execute", "MainView" - -dim SourceLine$(20) -ShowSource("none") - -// mainloop of the program: -dim cmd$(1) -inloop = true -while (inloop) - msg$ = message$ - if (split(msg$, cmd$(), ":|") > 2) item$ = cmd$(2) - - if (msg$ <> "") print msg$ - - switch msg$ - - case "For_Loop_|" - if (CurrentSource$ = "For_Loop") break - ShowSource("For_Loop") - break - - case "While_Loop_|" - if (CurrentSource$ = "While_Loop") break - ShowSource("While_Loop") - break - - case "Do_Loop_|" - if (CurrentSource$ = "Do_Loop") break - ShowSource("Do_Loop") - break - - case "Sub_Loop_|" - if (CurrentSource$ = "Sub_Loop") break - ShowSource("Sub_Loop") - break - - case "Other_Loop_|" - if (CurrentSource$ = "Other_Loop") break - ShowSource("Other_Loop") - break - - case "None_|" - if (CurrentSource$ = "none") break - ShowSource("none") - break - - case "Exec_|" - if (DemoWin = true) break - if (CurrentSource$ = "none") break - ExecSource(CurrentSource$) - break - - case "Quit_|" - case "MainView:_QuitRequested|" - inloop = false - break - - end switch - sleep 0.01 -wend -exit - -sub ShowSource(CurrSource$) - CurrentSource$ = CurrSource$ - draw flush "SourceView" - draw flush "ExplainView" - - draw text 5, 10, "#!yab", "SourceView" - draw text 5, 35, "window open 100, 100 to 200, 200, ''MainView'', ''Loop''", "SourceView" - draw text 5, 50, "window set ''MainView'', ''minimumto'',100,100", "SourceView" - draw text 5, 65, "window set ''MainView'', ''maximumto'',100,100", "SourceView" - - if (CurrSource$ = "none") then - draw text 5, 10, "Welcome to LoopWorld!", "ExplainView" - draw text 5, 35, "This program will show you the different", "ExplainView" - draw text 5, 50, "kinds of loops in yab.", "ExplainView" - draw text 5, 75, "On the left you see the sourcecode", "ExplainView" - draw text 5, 90, "that is used in the examples.", "ExplainView" - draw text 5, 105, "Please see GUI-World(2), if you want to", "ExplainView" - draw text 5, 120, "know more about that code, as I won't", "ExplainView" - draw text 5, 135, "explain that here in Loop-World.", "ExplainView" - draw text 5, 160, "Each loop will run about 10 seconds", "ExplainView" - draw text 5, 175, "and show its loop number and its", "ExplainView" - draw text 5, 190, "name in the window.", "ExplainView" - draw text 5, 205, "Therefore I will simply execute the", "ExplainView" - draw text 5, 220, "whole sourcecode shown right.", "ExplainView" - draw text 5, 245, "Select the loop you want to know more", "ExplainView" - draw text 5, 260, "about with the buttons down right.", "ExplainView" - draw text 5, 285, "Note: While each loop is running", "ExplainView" - draw text 5, 300, "this main window will be blocked !", "ExplainView" - - z = 1 - SourceLine$(1) = "// the loop will appear here." - fi - - if (CurrSource$ = "For_Loop") then - draw text 5, 10, "The 'for next' loop.", "ExplainView" - - draw text 5, 35, "The 'for next' loop works in a defined", "ExplainView" - draw text 5, 50, "range that must be set.", "ExplainView" - - draw text 5, 75, "This loop is counting the range from", "ExplainView" - draw text 5, 90, "the first to the last number.", "ExplainView" - draw text 5, 105, "For each count it puts the number into", "ExplainView" - draw text 5, 120, "the given variable and executes the lines", "ExplainView" - draw text 5, 135, "down to 'next'.", "ExplainView" - - draw text 5, 160, "", "ExplainView" - draw text 5, 175, "", "ExplainView" - draw text 5, 190, "", "ExplainView" - draw text 5, 205, "", "ExplainView" - draw text 5, 220, "", "ExplainView" - draw text 5, 245, "", "ExplainView" - draw text 5, 260, "", "ExplainView" - - draw text 5, 285, "", "ExplainView" - draw text 5, 300, "", "ExplainView" - - z = 7 - SourceLine$(0) = "" - SourceLine$(1) = "for n = 1 to 10" - SourceLine$(2) = " draw flush ''MainView''" - SourceLine$(3) = " draw text 50, 50, str$(n), ''MainView''" - SourceLine$(4) = " draw text 10, 90, ''For_Loop'', ''MainView''" - SourceLine$(5) = " sleep 1" - SourceLine$(6) = "next n" - SourceLine$(7) = "exit" - fi - - if (CurrSource$ = "While_Loop") then - draw text 5, 10, "The 'while wend' loop.", "ExplainView" - - draw text 5, 35, "", "ExplainView" - draw text 5, 50, "", "ExplainView" - - draw text 5, 75, "", "ExplainView" - draw text 5, 90, "", "ExplainView" - draw text 5, 105, "", "ExplainView" - draw text 5, 120, "", "ExplainView" - draw text 5, 135, "", "ExplainView" - - draw text 5, 160, "", "ExplainView" - draw text 5, 175, "", "ExplainView" - draw text 5, 190, "", "ExplainView" - draw text 5, 205, "", "ExplainView" - draw text 5, 220, "", "ExplainView" - draw text 5, 245, "", "ExplainView" - draw text 5, 260, "", "ExplainView" - - draw text 5, 285, "", "ExplainView" - draw text 5, 300, "", "ExplainView" - - z = 9 - SourceLine$(0) = "" - SourceLine$(1) = "n = 1" - SourceLine$(2) = "while (n < 11)" - SourceLine$(3) = " draw flush ''MainView''" - SourceLine$(4) = " draw text 50, 50, str$(n), ''MainView''" - SourceLine$(5) = " draw text 10, 90, ''While_Loop'', ''MainView''" - SourceLine$(6) = " n = n+1" - SourceLine$(7) = " sleep 1" - SourceLine$(8) = "wend" - SourceLine$(9) = "exit" - fi - - if (CurrSource$ = "Do_Loop") then - draw text 5, 10, "The 'do loop' loop", "ExplainView" - - draw text 5, 35, "", "ExplainView" - draw text 5, 50, "", "ExplainView" - - draw text 5, 75, "", "ExplainView" - draw text 5, 90, "", "ExplainView" - draw text 5, 105, "", "ExplainView" - draw text 5, 120, "", "ExplainView" - draw text 5, 135, "", "ExplainView" - - draw text 5, 160, "", "ExplainView" - draw text 5, 175, "", "ExplainView" - draw text 5, 190, "", "ExplainView" - draw text 5, 205, "", "ExplainView" - draw text 5, 220, "", "ExplainView" - draw text 5, 245, "", "ExplainView" - draw text 5, 260, "", "ExplainView" - - draw text 5, 285, "", "ExplainView" - draw text 5, 300, "", "ExplainView" - - z = 8 - SourceLine$(0) = "" - SourceLine$(1) = "do" - SourceLine$(2) = " n = n+1" - SourceLine$(3) = " draw flush ''MainView''" - SourceLine$(4) = " draw text 50, 50, str$(n), ''MainView''" - SourceLine$(5) = " draw text 10, 90, ''Do_Loop'', ''MainView''" - SourceLine$(6) = " sleep 1" - SourceLine$(7) = "loop" - SourceLine$(8) = "exit" - fi - - if (CurrSource$ = "Sub_Loop") then - draw text 5, 10, "The 'sub' loop.", "ExplainView" - - draw text 5, 35, "", "ExplainView" - draw text 5, 50, "", "ExplainView" - - draw text 5, 75, "", "ExplainView" - draw text 5, 90, "", "ExplainView" - draw text 5, 105, "", "ExplainView" - draw text 5, 120, "", "ExplainView" - draw text 5, 135, "", "ExplainView" - - draw text 5, 160, "", "ExplainView" - draw text 5, 175, "", "ExplainView" - draw text 5, 190, "", "ExplainView" - draw text 5, 205, "", "ExplainView" - draw text 5, 220, "", "ExplainView" - draw text 5, 245, "", "ExplainView" - draw text 5, 260, "", "ExplainView" - - draw text 5, 285, "", "ExplainView" - draw text 5, 300, "", "ExplainView" - - z = 13 - SourceLine$(0) = "" - SourceLine$(1) = "Counter(n)" - SourceLine$(2) = "" - SourceLine$(3) = "sub Counter(n)" - SourceLine$(4) = " if (n < 11) then" - SourceLine$(5) = " draw flush ''MainView''" - SourceLine$(6) = " draw text 50, 50, str$(n), ''MainView''" - SourceLine$(7) = " draw text 10, 90, ''Sub_Loop'', ''MainView''" - SourceLine$(8) = " sleep 1" - SourceLine$(9) = " Counter(n+1)" - SourceLine$(10) = " fi" - SourceLine$(11) = " return" - SourceLine$(12) = "end sub" - SourceLine$(13) = "exit" - fi - - if (CurrSource$ = "Other_Loop") then - draw text 5, 10, "Other loops!", "ExplainView" - - draw text 5, 35, "There are no other loops known", "ExplainView" - draw text 5, 50, "or known to be described.", "ExplainView" - - draw text 5, 75, "If there is one it could be entered", "ExplainView" - draw text 5, 90, "very easily.", "ExplainView" - draw text 5, 105, "Just see the source, yabman! ;-)", "ExplainView" - - z = 2 - SourceLine$(0) = "" - SourceLine$(1) = "// there is no other loop, my friend." - SourceLine$(2) = "exit" - fi - - for s = 0 to z - draw text 5, 80+s*15, SourceLine$(s), "SourceView" - next s - - return -end sub - -sub ExecSource(ExecLoop$) - DemoWin = true - window open 100, 100 to 200, 200, "DemoView", "Loop" - window set "DemoView", "minimumto", 100, 100 - window set "DemoView", "maximumto", 100, 100 - - if (ExecLoop$ = "For_Loop") then - for n = 1 to 10 - draw flush "DemoView" - draw text 50, 50, str$(n), "DemoView" - draw text 10, 90, ExecLoop$, "DemoView" - sleep 1 - next n - window close "DemoView" - fi - - if (ExecLoop$ = "While_Loop") then - n = 1 - while (n < 11) - draw flush "DemoView" - draw text 50, 50, str$(n), "DemoView" - draw text 10, 90, ExecLoop$, "DemoView" - sleep 1 - n = n+1 - wend - window close "DemoView" - fi - - if (ExecLoop$ = "Do_Loop") then - n = 0 - do - msg$ = message$ - if (msg$ = "QuitDemo_|") break - n = n+1 - draw flush "DemoView" - draw text 50, 50, str$(n), "DemoView" - draw text 10, 90, ExecLoop$, "DemoView" - - if (n = 11) then - draw text 5, 100, "You see that this loop won't be ended", "ExplainView" - draw text 5, 115, "by itself.", "ExplainView" - fi - - if (n = 13) draw text 5, 130, "For this, we need a Quit-button!", "ExplainView" - - if (n = 15) then - draw flush "SourceView" - draw text 5, 10, "#!yab", "SourceView" - draw text 5, 35, "window open 100, 100 to 200, 200, ''MainView'', ''Loop''", "SourceView" - draw text 5, 50, "window set ''MainView'', ''minimumto'',100,100", "SourceView" - draw text 5, 65, "window set ''MainView'', ''maximumto'',100,100''", "SourceView" - SourceLine$(0) = "button 30, 70 to 90, 90, ''Quit_'', ''Quit'', ''MainView''" - SourceLine$(1) = "" - SourceLine$(2) = "do" - SourceLine$(3) = " msg$ = message$" - SourceLine$(4) = " if (msg$ = ''Quit_'') break" - SourceLine$(5) = " n = n+1" - SourceLine$(6) = " draw flush ''MainView''" - SourceLine$(7) = " draw text 50, 50, str$(n), ''MainView''" - SourceLine$(8) = " draw text 10, 90, ''Do_Loop'', ''MainView''" - SourceLine$(9) = " sleep 1" - SourceLine$(10) = "loop" - SourceLine$(11) = "exit" - for s = 0 to 11 - draw text 5, 80+s*15, SourceLine$(s), "SourceView" - next s - button 10, 10 to 90, 30, "QuitDemo_", "Quit", "DemoView" - draw text 5, 145, "Press the Quit button to exit that loop.", "ExplainView" - fi - sleep 1 - loop - window close "DemoView" - fi - - if (ExecLoop$ = "Sub_Loop") then - Counter(1) - window close "DemoView" - fi - - if (ExecLoop$ = "Other_Loop") then - sleep 0.1 - window close "DemoView" - fi - - msg$ = "" - DemoWin = false - return -end sub - -sub Counter(n) - if (n < 11) then - draw flush "DemoView" - draw text 50, 50, str$(n), "DemoView" - draw text 10, 90, "Sub_Loop", "DemoView" - sleep 1 - Counter(n+1) - fi - return -end sub diff --git a/yab-IDE/Programs/Examples/MessageWorld.yab b/yab-IDE/Programs/Examples/MessageWorld.yab deleted file mode 100755 index d6c0d1f..0000000 --- a/yab-IDE/Programs/Examples/MessageWorld.yab +++ /dev/null @@ -1,283 +0,0 @@ -#!yab - -// MessageWorld - shows the messages the widgets return -// by DasJott - -// Main background colors -r = 206 : g = 226 : b = 246 - -// open main window -window open 100, 200 to 600, 450, "MainView", "MessageWorld - Select a widget to be explained" - window set "MainView", "maximumto", 500, 250 - window set "MainView", "minimumto", 500, 250 - draw set "bgcolor", r, g, b, "MainView" - -// open view inside the main window -view 0, 0 to 500, 180, "ContentView", "MainView" // for the contents; widgets and text. - draw set "bgcolor", r+20, g+20, b+20, "ContentView" - draw text 210, 60, "MessageWorld", "ContentView" - draw text 150, 75, "Shows the messages the widgets return.", "ContentView" - draw text 149, 100, "Please select the widget to be explained.", "ContentView" - draw text 125, 125, "Please use each widget to get the message shown.", "ContentView" - draw text 135, 140, "The sourcecode is also shown for each widget.", "ContentView" - -view 0, 181 to 500, 199, "MessageView", "MainView" // for the message display - draw set "bgcolor", r+20, g+20, b+20, "MessageView" - draw set "lowcolor", r+10, g+10, b+10, "MessageView" - draw set "highcolor", 255, 0, 0, "MessageView" - draw set "Swis721 BT, Roman, 12", "MessageView" - -view 0, 200 to 500, 250, "SwitchView", "MainView" // for the buttons - draw set "bgcolor", r, g, b, "SwitchView" - - //color the buttons - for cc = 0 to 25 - draw set "highcolor", r+30-(2*cc), g+30-(2*cc), b+30-(2*cc), "SwitchView" - draw line 0, cc to 500, cc, "SwitchView" - next cc - for cc = 0 to 25 - draw set "highcolor", r+30-(2*cc), g+30-(2*cc), b+30-(2*cc), "SwitchView" - draw line 0, 25+cc to 500, 25+cc, "SwitchView" - next cc - - // draw lines between the buttons - draw set "highcolor", r-70, g-70, b-70, "SwitchView" - draw line 0, 0 to 500, 0, "SwitchView" - draw line 0, 25 to 500, 25, "SwitchView" - draw line 99, 0 to 99, 50, "SwitchView" - draw line 199, 0 to 199, 50, "SwitchView" - draw line 299, 0 to 299, 50, "SwitchView" - draw line 399, 0 to 399, 50, "SwitchView" - draw set "highcolor", r+35, g+35, b+35, "SwitchView" - draw line 0, 1 to 500, 1, "SwitchView" - draw line 0, 26 to 500, 26, "SwitchView" - draw line 100, 1 to 100, 50, "SwitchView" - draw line 200, 1 to 200, 50, "SwitchView" - draw line 300, 1 to 300, 50, "SwitchView" - draw line 400, 1 to 400, 50, "SwitchView" - draw set "highcolor", 0, 0, 0, "SwitchView" - draw text 10, 15, "Button", "SwitchView" - draw text 110, 15, "Menu", "SwitchView" - draw text 210, 15, "Listbox", "SwitchView" - draw text 310, 15, "Textcontrol", "SwitchView" - draw text 410, 15, "Checkbox", "SwitchView" - draw text 10, 40, "Radiobutton", "SwitchView" - draw text 110, 40, "Dropbox", "SwitchView" - draw text 210, 40, "Dropzone", "SwitchView" - draw text 310, 40, "Slider", "SwitchView" - draw text 410, 40, "Colorcontrol", "SwitchView" - -// main program loop -Xmouse = 1000 -dim cmd$(1) -dim mouse$(10) - -// NEU! -if(ismousein("SwitchView")) then - outsideButton = false -else - outsideButton = true -fi - -inloop = true -while (inloop) - msg$ = message$ - if (split(msg$, cmd$(), ":|") > 2) item$ = cmd$(2) - mmsg$ = mouse message$("SwitchView") - n = split(mmsg$, mouse$(), ":") - - if (msg$ <> "") then - draw flush "MessageView" - draw Text 10, 10, "Message: "+msg$, "MessageView" - fi - - if (ismousein("SwitchView")) then - // NEU! - if(outsideButton) then - while(ismousein("SwitchView") and mouse$(3) = "1") - mmsg$ = mousemessage$("SwitchView") - n = split(mmsg$, mouse$(), ":") - sleep 0.1 - wend - fi - if(ismousein("SwitchView")) then - outsideButton = false - Xmouse = val(mouse$(1)) - Ymouse = val(mouse$(2)) - BLmouse = val(mouse$(3)) - else - outsideButton = true - fi - else - outsideButton = true - fi - - if (BLmouse = 0) Fbl = 0 - - if (Ymouse < 25 and BLmouse = 1 and Ymouse > 0 and Fbl = 0) then - if (Xmouse < 100) then - VButton(0) - fi - - if (Xmouse > 100 and Xmouse < 200) then - VButton(1) - fi - - if (Xmouse > 200 and Xmouse < 300) then - VButton(2) - fi - - if (Xmouse > 300 and Xmouse < 400) then - VButton(3) - fi - - if (Xmouse > 400 and Xmouse < 500) then - VButton(4) - fi - Fbl = 1 - fi - - if (Ymouse > 25 and BLmouse = 1 and Fbl = 0) then - if (Xmouse < 100) then - VButton(5) - fi - - if (Xmouse > 100 and Xmouse < 200) then - VButton(6) - fi - - if (Xmouse > 200 and Xmouse < 300) then - VButton(7) - fi - - if (Xmouse > 300 and Xmouse < 400) then - VButton(8) - fi - - if (Xmouse > 400 and Xmouse < 500) then - VButton(9) - fi - Fbl = 1 - fi - - switch msg$ - - case "MainView:_QuitRequested|" - inloop = false - break - - end switch - sleep 0.01 -wend -exit - -sub VButton(n) - draw flush "MessageView" - if(ck) then - view remove "CBView" - ck = false - endif - view remove "ContentView" - view 0, 0 to 500, 200, "ContentView", "MainView" - draw set "bgcolor", r+20, g+20, b+20, "ContentView" - draw set "lowcolor", r, g, b, "ContentView" - draw set "Swis721 BT, Bold, 16", "ContentView" - - if (n = 0) then // Button - draw text 10, 25, "BUTTON x1,y1 TO x2,y2, ID$, Label$, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - button 100, 50 to 400, 70, "Button_", "Testbutton", "ContentView" - draw text 60, 130, "button 100, 50 to 400, 70, \"Button_\", \"Testbutton\", \"MainView\"", "ContentView" - fi - - if (n = 1) then // Menu - draw text 10, 25, "MENU Head$, Menu$, Shortcut$, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - view 40, 50 to 460, 100, "MenuView", "ContentView" - draw text 60, 130, "view 40, 50 to 460, 100, \"MenuView\", \"MainView\"", "ContentView" - menu "File", "Open file", "", "MenuView" - menu "File", "Quit", "", "MenuView" - draw text 60, 145, "menu \"File\", \"Open file\", \"\", \"MenuView\"", "ContentView" - draw text 60, 160, "menu \"File\", \"Quit\", \"\", \"MenuView\"", "ContentView" - fi - - if (n = 2) then // Listbox - draw text 10, 25, "LISTBOX x1,y1 TO x2,y2, ID$, ScrollbarType, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - listbox 40, 50 to 460, 100, "ListBox_", 1, "ContentView" - draw text 60, 130, "listbox 40, 50 to 460, 100, \"ListBox_\", 1, \"MainView\"", "ContentView" - listbox add "ListBox_", "First entry" - listbox add "ListBox_", "Second entry" - draw text 60, 145, "listbox add \"ListBox_\", \"First entry\"", "ContentView" - draw text 60, 160, "listbox add \"ListBox_\", \"Second entry\"", "ContentView" - fi - - if (n = 3) then // Textcontrol - draw text 10, 25, "TEXTCONTROL x1,y1 TO x2,y2, ID$, Label$, Text$, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - textcontrol 100, 50 to 400, 70, "Textcontrol-ID", "Label", "Text", "ContentView" - draw text 60, 130, "textcontrol 100, 50 to 400, 70, \"Textcontrol-ID\", \"Label\", \"Text\", \"MainView\"", "ContentView" - fi - - if (n = 4) then // Checkbox - draw text 10, 25, "CHECKBOX x1,y1, ID$, Label$, IsActivated, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - view 100, 50 to 400, 100, "CBView", "ContentView" - draw text 60, 130, "view 100, 50 to 400, 100, \"CBView\", \"MainView\"", "ContentView" - checkbox 10, 8, "Checkbox1-ID", "Label1", 0, "CBView" - checkbox 10, 28, "Checkbox2-ID", "Label2", 1, "CBView" - draw text 60, 145, "checkbox 10, 8, \"Checkbox1-ID\", \"Label1\", 0, \"CBView\"", "ContentView" - draw text 60, 160, "checkbox 10, 28, \"Checkbox2-ID\", \"Label2\", 1, \"CBView\"", "ContentView" - ck = true - fi - - if (n = 5) then // Radiobutton - draw text 10, 25, "RADIOBUTTON x1,y1, ID$, Label$, IsActivated, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - view 100, 50 to 400, 100, "RBView", "ContentView" - draw text 60, 130, "view 100, 50 to 400, 100, \"RBView\", \"MainView\"", "ContentView" - radiobutton 10, 8, "Radiobutton1-ID", "Label1", 0, "RBView" - radiobutton 10, 28, "Radiobutton2-ID", "Label2", 1, "RBView" - draw text 60, 145, "radiobutton 10, 8, \"Radiobutton1-ID\", \"Label1\", 0, \"RBView\"", "ContentView" - draw text 60, 160, "radiobutton 10, 28, \"Radiobutton2-ID\", \"Label2\", 1, \"RBView\"", "ContentView" - fi - - if (n = 6) then // Dropbox - draw text 10, 25, "DROPBOX x1,y1 TO x2,y2, ID$, Label$, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - dropbox 40, 50 to 460, 100, "DropBox_", "Label", "ContentView" - draw text 60, 130, "dropbox 40, 50 to 460, 100, \"DropBox_\", \"Label\", \"MainView\"", "ContentView" - dropbox add "DropBox_", "First entry" - dropbox add "DropBox_", "Second entry" - draw text 60, 145, "dropbox add \"DropBox_\", \"First entry\"", "ContentView" - draw text 60, 160, "dropbox add \"DropBox_\", \"Second entry\"", "ContentView" - fi - - if (n = 7) then // Dropzone - draw text 10, 25, "VIEW DROPZONE View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - view 100, 50 to 400, 100, "DropView", "ContentView" - draw text 60, 130, "view 100, 50 to 400, 100, \"DropView\", \"MainView\"", "ContentView" - view dropzone "DropView" - draw text 60, 145, "view dropzone \"DropView\"", "ContentView" - fi - - if (n = 8) then // Slider - draw text 10, 25, "SLIDER x1,y1 TO x2,y2, ID$, Label$, Min, Max, Option$, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - slider 100, 50 to 400, 70, "Slider-ID", "Label", 0, 255, "horizontal", "ContentView" - draw text 60, 130, "slider 100, 50 to 400, 70, \"slider-ID\", \"Label\", 0, 255, \"horizontal\", \"MainView\"", "ContentView" - fi - - if (n = 9) then // Colorcontrol - draw text 10, 25, "COLORCONTROL x,y, ID$, View$", "ContentView" - draw set "Swis721 BT, Roman, 12", "ContentView" - colorcontrol 100, 50, "ColCon-ID", "ContentView" - draw text 60, 130, "colorcontrol 100, 50, \"ColCon-ID\", \"MainView\"", "ContentView" - fi - - draw text 10, 130, "Source:", "ContentView" - - BLmouse = 0 - return -end sub diff --git a/yab-IDE/Programs/Examples/MouseWorld.yab b/yab-IDE/Programs/Examples/MouseWorld.yab deleted file mode 100755 index f592bd1..0000000 --- a/yab-IDE/Programs/Examples/MouseWorld.yab +++ /dev/null @@ -1,83 +0,0 @@ -#!yab - -// MouseWorld - shows mousemessages -// by DasJott - -window open 100, 100 to 500, 400, "MainView", "Mouse-World" - window set "MainView", "flags","not-zoomable, not-h-resizable, not-v-resizable" - draw set "Zurich, Bold, 20", "MainView" - -view 0, 20 to 100, 110, "MouseView", "MainView" - draw set "bgcolor", 255, 255, 255, "MouseView" - draw set "lowcolor", 255, 255, 255, "MouseView" - draw set "highcolor", 0, 0, 0, "MouseView" - -draw text 60, 150, "Press the Quit button to Quit!", "MainView" -draw text 330, 290, "Haha!", "MainView" - -dim cmd$(1) -dim mouse$(1) -inloop = true -while (inloop) - msg$ = message$ - mmsg$ = mouse message$("MainView") - - if (not mmsg$ = Fmmsg$) then - Fmmsg$ = mmsg$ - n = split(mmsg$, mouse$(), ":") - Xmouse = val(mouse$(1)) - Ymouse = val(mouse$(2)) - BLmouse = val(mouse$(3)) - BCmouse = val(mouse$(4)) - BRmouse = val(mouse$(5)) - ShowMouseMessage() - fi - - if (Xmouse > 324 and Ymouse > 264) then - HideQbutton() - else - if (Qbutton = false) ShowQbutton() - fi - - switch msg$ - - case "MainView:_QuitRequested|" - inloop = false - break - - end switch - sleep 0.01 -wend -window close "MainView" - -sub ShowMouseMessage() - draw flush "MouseView" - draw text 10, 10, "Mouse X:", "MouseView" - draw text 10, 25, "Mouse Y:", "MouseView" - draw text 10, 40, "Mouse buttons:", "MouseView" - draw text 20, 55, "Button 1:", "MouseView" - draw text 20, 70, "Button 2:", "MouseView" - draw text 20, 85, "Button 3:", "MouseView" - - draw text 60, 10, str$(Xmouse), "MouseView" - draw text 60, 25, str$(Ymouse), "MouseView" - draw text 70, 55, str$(BLmouse), "MouseView" - draw text 70, 70, str$(BRmouse), "MouseView" - draw text 70, 85, str$(BCmouse), "MouseView" - return -end sub - -sub HideQbutton() - if(Qbutton) then - view remove "ButtonView" - endif - Qbutton = false - return -end sub - -sub ShowQbutton() - view 325, 265 to 395, 295, "ButtonView", "MainView" - button 5, 5 to 65, 25, "Quit_", "Quit", "ButtonView" - Qbutton = true - return -end sub diff --git a/yab-IDE/Programs/Examples/Ping.yab b/yab-IDE/Programs/Examples/Ping.yab deleted file mode 100755 index effe745..0000000 --- a/yab-IDE/Programs/Examples/Ping.yab +++ /dev/null @@ -1,33 +0,0 @@ -#!yab - -doc Start Ping.yab first by double clicking it, -doc then start Pong.yab. -doc This demonstrates how yab sends messages to another yab application. -doc Note: don't start Ping.yab in the IDE as the IDE only allows one -doc running yab program at a time. - -window open 100,100 to 300,300, "Ping", "Ping" - -x = 20 -y = 50 -stepx = 5 -stepy = 5 - -while(not instr(message$, "Quit")) - x = x + stepx - y = y + stepy - if(x <= 0 or x >= 400) stepx = -stepx - if(y <= 0 or y >= 200) stepy = -stepy - if(x >= 190) then - ret = message send "application/x-vnd.Pong.yab", str$(x) + ":" + str$(y) - if(ret <> 0) then - stepx = -stepx - if(x > 190) x = 190 - endif - endif - - draw flush "Ping" - draw circle x,y, 8, "Ping" -wend - -window close "Ping" diff --git a/yab-IDE/Programs/Examples/Pong.yab b/yab-IDE/Programs/Examples/Pong.yab deleted file mode 100755 index 6540677..0000000 --- a/yab-IDE/Programs/Examples/Pong.yab +++ /dev/null @@ -1,22 +0,0 @@ -#!yab -# mimetype "application/x-vnd.Pong.yab" - -doc See Ping.yab for more information. - -window open 400,100 to 600,300, "Pong", "Pong" - -dim msg$(1) -while(not finished) - n = token(message$, msg$(), ":|") - for i = 1 to n - if(instr(msg$(i), "Quit")) finished = true - if(instr(msg$(i), "_Scripting") and n>=i+2) then - x = val(msg$(i+1)) - 200 - y = val(msg$(i+2)) - draw flush "Pong" - draw circle x,y, 8, "Pong" - endif - next i -wend - -window close "Pong" diff --git a/yab-IDE/Programs/Examples/SlideDemo.yab b/yab-IDE/Programs/Examples/SlideDemo.yab deleted file mode 100755 index 56b64e2..0000000 --- a/yab-IDE/Programs/Examples/SlideDemo.yab +++ /dev/null @@ -1,36 +0,0 @@ -#!yab - -DOCU SlideDemo, Object scale per Slidebar -DOCU by Stargater - -WINDOW OPEN 100,100 to 500,600, "MainView" ,"SlideDemo" -WINDOW SET "MainView", "MaximumTo", 400,500 - -VIEW 0,0 to 500,400, "CircleView", "MainView" -DRAW SET "bgcolor",000,000,000,"CircleView" -DRAW SET "lowcolor",140,140,240,"CircleView" - -SLIDER 20,430 to 380,430, "Slider", "Scale the Circle", 0, 190, "MainView" -SLIDER LABEL "Slider", "0", "190" -SLIDER COLOR "Slider", "barcolor", 140,140,240 -SLIDER SET "Slider", 20 - -DRAW SET 0, "LowSolidFill" -DRAW CIRCLE 200,200, 20, "CircleView" - -oldr=20 - -while(not instr(message$, "_QuitRequested")) - r = SLIDER GET "Slider" - - if(oldr<>r) then - oldr = r - draw flush "CircleView" - DRAW CIRCLE 200,200, r, "CircleView" - endif - -wend - -window close "MainView" - - diff --git a/yab-IDE/Programs/Examples/SliderWorld.yab b/yab-IDE/Programs/Examples/SliderWorld.yab deleted file mode 100755 index e1e5a4c..0000000 --- a/yab-IDE/Programs/Examples/SliderWorld.yab +++ /dev/null @@ -1,34 +0,0 @@ -#!yab - -window open 100,100 to 560,320, "WView", "SliderWorld" - -layout "left,top","WView" - -slider 20,10 to 350,40, "Slider1", "1. Slider with block thumb from 0.1 to 1", 1, 10, "WView" - -slider 20,50 to 350,80, "Slider2", "2. Slider with triangle thumb from 1 to 100 ", 1.5, 100, "triangle", "WView" -slider label "Slider2", "Foo", "Bar" -slider set "Slider2", 20 - -slider 20,110 to 350,140, "Slider3", "3. Slider from 50 to 75,", 50, 75, "WView" -slider label "Slider3", "Foo", "Bar" -slider set "Slider3", "bottom", 25 -//option set "Slider3", "enabled", false - -slider 20,170 to 350,200, "Slider4", "4. Slider from -20 to 20, with colors", -20, 20, "WView" -slider color "Slider4", "barcolor", 240,140,140 -slider color "Slider4", "fillcolor", 140,140,240 - -slider 360,20 to 440,200, "Slider5", "5. Slider vertical", 1, 100, "vertical", "WView" -slider set "Slider5", "left", 15 -slider color "Slider5", "barcolor", 240,140,140 -slider set "Slider5", 70 - -inloop = true -while(inloop) - msg$ = message$ - if(msg$<>"") print msg$ - if(instr(msg$,"Quit")) inloop = false -wend - -window close "WView" diff --git a/yab-IDE/Programs/Examples/Sokoban.yab b/yab-IDE/Programs/Examples/Sokoban.yab deleted file mode 100755 index 3d1331e..0000000 --- a/yab-IDE/Programs/Examples/Sokoban.yab +++ /dev/null @@ -1,311 +0,0 @@ -#!yab - -dir$=attribute get$ "","" -dir$=dir$+"/" - - -doc Simple game example -doc based on the popular Sokoban -doc graphics taken from Rocks'n'Diamonds - - -// Initialize the window, load the sprites and put up the canvas -window open 100,100 to 484,484, "Win", "Simple Sokoban Example" -window set "Win", "flags", "not-zoomable, not-h-resizable, not-v-resizable" - -bitmap 32,32, "wall" -err = draw image 0,0 to 31,31, dir$+"img/wall.png", "wall" -bitmap 32,32, "front1" -err = err + draw image 0,0 to 31,31, dir$+"img/front.png", "front1" -bitmap 32,32, "bulb" -err = err + draw image 0,0 to 31,31, dir$+"img/bulb.png", "bulb" -bitmap 32,32, "target" -err = err + draw image 0,0 to 31,31, dir$+"img/target.png", "target" -bitmap 32,32, "final" -err = err + draw image 0,0 to 31,31, dir$+"img/final.png", "final" -bitmap 32,32, "background" -draw set "highcolor", 0,0,0, "background" -draw rect 0,0 to 31,31, "background" - -if(err>0) then - alert "Could not load images", "Ok", "stop" - window close "Win" - exit(1) -endif - -option set "Win", "focus", true - -canvas 0,0 to 384,384, "Canvas", "Win" - -draw set "highcolor", 0,0,0, "Canvas" -draw rect 0,0 to 384,384, "Canvas" - -// Read in the demo level and show it -dim levelline$(12) -for i=1 to 12 - read levelline$(i) - for j = 1 to 12 - switch(mid$(levelline$(i), j, 1)) - case " " - draw bitmap x,y, "background", "copy", "Canvas" - break - case "w" - draw bitmap x,y, "wall", "copy", "Canvas" - break - case "b" - draw bitmap x,y, "bulb", "copy", "Canvas" - break - case "t" - draw bitmap x,y, "target", "copy", "Canvas" - break - case "s" - draw bitmap x,y, "front1", "alpha", "Canvas" - mapx = j - mapy = i - mid$(levelline$(i), j, 1) = " " - break - end switch - x = x + 32 - next j - x = 0 - y = y + 32 -next i - -playerx = (mapx-1)*32 -playery = (mapy-1)*32 - -// soundplay "rhythmloop.wav", true - -// handle the movements -while(not quitting) - key$ = keyboard message$("Win") - switch(key$) - case "down" - if(instr(" t", mid$(levelline$(mapy+1), mapx, 1))) then - // soundplay "base.wav", false - WalkDown() - elseif(instr("bf", mid$(levelline$(mapy+1), mapx, 1)) and instr(" t", mid$(levelline$(mapy+2), mapx,1))) then - PushDown() - endif - sleep 0.10 - break - case "up" - if(instr(" t", mid$(levelline$(mapy-1), mapx, 1))) then - // soundplay "base.wav", false - WalkUp() - elseif(instr("bf", mid$(levelline$(mapy-1), mapx, 1)) and instr(" t", mid$(levelline$(mapy-2), mapx,1))) then - PushUp() - endif - sleep 0.10 - break - case "left" - if(instr(" t", mid$(levelline$(mapy), mapx-1, 1))) then - // soundplay "base.wav", false - WalkLeft() - elseif(instr("bf", mid$(levelline$(mapy), mapx-1, 1)) and instr(" t", mid$(levelline$(mapy), mapx-2,1))) then - PushLeft() - endif - sleep 0.10 - break - case "right" - if(instr(" t", mid$(levelline$(mapy), mapx+1, 1))) then - // soundplay "base.wav", false - WalkRight() - elseif(instr("bf", mid$(levelline$(mapy), mapx+1, 1)) and instr(" t", mid$(levelline$(mapy), mapx+2,1))) then - PushRight() - endif - sleep 0.10 - break - case "esc" - quitting = true - break - end switch - m$ = message$ - if(m$ = "Win:_QuitRequested|" or m$ = "_QuitRequested") quitting = true -wend - -window close "Win" - -sub WalkDown() - mapy = mapy + 1 - playery = playery + 32 - draw bitmap playerx, playery, "front1","alpha", "Canvas" - if(mid$(levelline$(mapy-1), mapx,1) = " ") then - draw bitmap playerx, playery-32, "background","copy", "Canvas" - elseif(mid$(levelline$(mapy-1), mapx,1) = "t") then - draw bitmap playerx, playery-32, "target","copy", "Canvas" - elseif(mid$(levelline$(mapy-1), mapx,1) = "f") then - draw bitmap playerx, playery-32, "final","copy", "Canvas" - endif - return -end sub - -sub WalkUp() - mapy = mapy - 1 - playery = playery - 32 - draw bitmap playerx, playery, "front1","alpha", "Canvas" - if(mid$(levelline$(mapy+1), mapx,1) = " ") then - draw bitmap playerx, playery+32, "background","copy", "Canvas" - elseif(mid$(levelline$(mapy+1), mapx,1) = "t") then - draw bitmap playerx, playery+32, "target","copy", "Canvas" - elseif(mid$(levelline$(mapy+1), mapx,1) = "f") then - draw bitmap playerx, playery+32, "final","copy", "Canvas" - endif - return -end sub - -sub WalkLeft() - mapx = mapx - 1 - playerx = playerx - 32 - draw bitmap playerx, playery, "front1","alpha", "Canvas" - if(mid$(levelline$(mapy), mapx+1,1) = " ") then - draw bitmap playerx+32, playery, "background","copy", "Canvas" - elseif(mid$(levelline$(mapy), mapx+1,1) = "t") then - draw bitmap playerx+32, playery, "target","copy", "Canvas" - elseif(mid$(levelline$(mapy), mapx+1,1) = "f") then - draw bitmap playerx+32, playery, "final","copy", "Canvas" - endif - return -end sub - -sub WalkRight() - mapx = mapx + 1 - playerx = playerx + 32 - draw bitmap playerx, playery, "front1","alpha", "Canvas" - if(mid$(levelline$(mapy), mapx-1,1) = " ") then - draw bitmap playerx-32, playery, "background","copy", "Canvas" - elseif(mid$(levelline$(mapy), mapx-1,1) = "t") then - draw bitmap playerx-32, playery, "target","copy", "Canvas" - elseif(mid$(levelline$(mapy), mapx-1,1) = "f") then - draw bitmap playerx-32, playery, "final","copy", "Canvas" - endif - return -end sub - -sub PushDown() - local t$ - - t$ = mid$(levelline$(mapy+1), mapx, 1) - if(t$ = "b") then - mid$(levelline$(mapy+1), mapx, 1) = " " - draw bitmap playerx,playery+32, "background", "copy", "Canvas" - else - mid$(levelline$(mapy+1), mapx, 1) = "t" - draw bitmap playerx,playery+32, "target", "copy", "Canvas" - endif - t$ = mid$(levelline$(mapy+2), mapx, 1) - if(t$ = " ") then - mid$(levelline$(mapy+2), mapx, 1) = "b" - draw bitmap playerx,playery+64, "bulb", "copy", "Canvas" - // soundplay "roehr.wav", false - else - mid$(levelline$(mapy+2), mapx, 1) = "f" - draw bitmap playerx,playery+64, "final", "copy", "Canvas" - // soundplay "pong.wav", false - endif - WalkDown() - CheckFinished() - return -end sub - -sub PushUp() - local t$ - - t$ = mid$(levelline$(mapy-1), mapx, 1) - if(t$ = "b") then - mid$(levelline$(mapy-1), mapx, 1) = " " - draw bitmap playerx,playery-32, "background", "copy", "Canvas" - else - mid$(levelline$(mapy-1), mapx, 1) = "t" - draw bitmap playerx,playery-32, "target", "copy", "Canvas" - endif - t$ = mid$(levelline$(mapy-2), mapx, 1) - if(t$ = " ") then - mid$(levelline$(mapy-2), mapx, 1) = "b" - draw bitmap playerx,playery-64, "bulb", "copy", "Canvas" - // soundplay "roehr.wav", false - else - mid$(levelline$(mapy-2), mapx, 1) = "f" - draw bitmap playerx,playery-64, "final", "copy", "Canvas" - // soundplay "pong.wav", false - endif - WalkUp() - CheckFinished() - return -end sub - -sub PushLeft() - local t$ - - t$ = mid$(levelline$(mapy), mapx-1, 1) - if(t$ = "b") then - mid$(levelline$(mapy), mapx-1, 1) = " " - draw bitmap playerx-32,playery, "background", "copy", "Canvas" - else - mid$(levelline$(mapy), mapx-1, 1) = "t" - draw bitmap playerx-32,playery, "target", "copy", "Canvas" - endif - t$ = mid$(levelline$(mapy), mapx-2, 1) - if(t$ = " ") then - mid$(levelline$(mapy), mapx-2, 1) = "b" - draw bitmap playerx-64,playery, "bulb", "copy", "Canvas" - // soundplay "roehr.wav", false - else - mid$(levelline$(mapy), mapx-2, 1) = "f" - draw bitmap playerx-64,playery, "final", "copy", "Canvas" - // soundplay "pong.wav", false - endif - WalkLeft() - CheckFinished() - return -end sub - -sub PushRight() - local t$ - - t$ = mid$(levelline$(mapy), mapx+1, 1) - if(t$ = "b") then - mid$(levelline$(mapy), mapx+1, 1) = " " - draw bitmap playerx+32,playery, "background", "copy", "Canvas" - else - mid$(levelline$(mapy), mapx+1, 1) = "t" - draw bitmap playerx+32,playery, "target", "copy", "Canvas" - endif - t$ = mid$(levelline$(mapy), mapx+2, 1) - if(t$ = " ") then - mid$(levelline$(mapy), mapx+2, 1) = "b" - draw bitmap playerx+64,playery, "bulb", "copy", "Canvas" - // soundplay "roehr.wav", false - else - mid$(levelline$(mapy), mapx+2, 1) = "f" - draw bitmap playerx+64,playery, "final", "copy", "Canvas" - // soundplay "pong.wav", false - endif - WalkRight() - CheckFinished() - return -end sub - -sub CheckFinished() - local i - for i = 1 to 12 - if(instr(levelline$(i), "b")) return - next i - // soundplay "halloffame.wav", false - alert "Solved! This was too easy ;)", "Ok", "info" - quitting = true - return -end sub - -data " ww " -data "wwwwww www " -data "wtt w wwsww" -data "wtt www w" -data "wtt bb w" -data "wtt w w b w" -data "wttwww w b w" -data "wwww b wb w" -data " w bw b w" -data " w b b w" -data " w ww w" -data " wwwwwwwww" diff --git a/yab-IDE/Programs/Examples/Tedit.yab b/yab-IDE/Programs/Examples/Tedit.yab deleted file mode 100755 index 31bd97b..0000000 --- a/yab-IDE/Programs/Examples/Tedit.yab +++ /dev/null @@ -1,174 +0,0 @@ -#!yab - -############# Prologue ############# - -ProgramName$ = "Teditor" - -AuthorName$ = "Joe Bloggs" - -ProgramVersion$ = "V0.1" - -ProgramBriefDescription$ = "My unbelievable first yab program." - -ProgramLicense$ = "Public Domain" - -ProgramAcknowledgements$ ="With thanks to Michel Clasquin-Johnson for writing Teditor and to  Marc-Oliver Ihm, Jan Bungeroth and Jim Saxton for creating yab!" - - - -//*****Global Variables**** - -## Technically, yab does not require you to declare global variables, it just is a really, really good idea to do it anyway. - -// set DEBUG = 1 to print out all messages on the console - -DEBUG = 1 - -//change this to DEBUG = 0 when you are ready to bind the program for distribution - - - -OpenWindow() - -#######End of Prologue####### - - - -############# Main Message Loop ############# - -dim msg$(1) - -while(not leavingLoop) - nCommands = token(message$, msg$(),"|") - for everyCommand = 1 to nCommands - if(DEBUG and msg$(everyCommand)<>"") print msg$(everyCommand) - switch(msg$(everyCommand)) - case "_QuitRequested": - case "MainWindow:_QuitRequested": - case "MainWindow:File:Quit": - leavingLoop = true - break - case "MainWindow:File:Save": - SaveFile() - break - case "MainWindow:File:New": - NewFile() - break - case "MainWindow:File:Open": - OpenFile() - break - case "MainWindow:Edit:Undo/Redo": - textedit set "EditSpace", "undo" - break - case "MainWindow:Edit:Cut": - textedit set "EditSpace", "cut" - break - case "MainWindow:Edit:Copy": - textedit set "EditSpace", "copy" - break - case "MainWindow:Edit:Paste": - textedit set "EditSpace", "paste" - break - case "MainWindow:Edit:Select All": - textedit set "EditSpace", "select-all" - break - case "MainWindow:Help:About": - Alert ProgramName$ + " " + ProgramVersion$ + "\n" + "by " + AuthorName$ +"\n\n" + ProgramBriefDescription$ + "\n" + ProgramLicense$ + "\n" + ProgramAcknowledgements$, "OK", "none" - default: - break - end switch - next everyCommand -wend - -CloseWindow() -end -#######End of Main Loop####### - -sub CloseWindow() - -//Close down the main window - -NewFile() -window close "MainWindow" -end sub - - -sub MakeMenu() - -//Create menu in MainWindow - -menu "File", "New", "N", "MainWindow" -menu "File", "Open", "O", "MainWindow" -menu "File", "Save", "S", "MainWindow" -menu "File", "Quit", "Q", "MainWindow" -menu "Edit", "Undo/Redo", "Z", "MainWindow" -menu "Edit", "Cut", "X", "MainWindow" -menu "Edit", "Copy", "Z", "MainWindow" -menu "Edit", "Paste", "Z", "MainWindow" -menu "Edit", "Select All", "A", "MainWindow" -menu "Help", "About", "", "MainWindow" -end sub - - - -sub NewFile() - -local sos -if textedit get$ "EditSpace" <> "" then - sos = alert "Save Current Text First?", "Yes", "No", "", "none" - if sos = 1 SaveFile() - textedit clear "EditSpace" -endif - -end sub - - - -sub OpenFile() - -local file2open$, anewline$ - -NewFile() -file2open$ = filepanel "load-file", "Open Which File?", "/boot/home" -if file2open$ <> "" then - open file2open$ for reading as #1 - while(not(eof(1))) - line input #1 anewline$ - textedit add "EditSpace", anewline$ + "\n" - wend - close #1 - textedit set "EditSpace", "gotoline", 1 -endif - -end sub - - - -sub OpenWindow() - -//Setup the main window here - -Window open 100,100 to 600,500, "MainWindow", "Teditor" -textedit 0,20 to 499, 399, "EditSpace", 3, "MainWindow" -textedit set "EditSpace", "wordwrap", 0 -MakeMenu() - -end sub - - - -sub SaveFile() - -local file2save$,filename$ - -file2save$ = textedit get$ "EditSpace" -if file2save$ <> "" then - filename$ = filepanel "save-file", "Save File As ...", "/boot/home" - if filename$= "" return - open filename$ for writing as #1 - print #1 file2save$ - close #1 -endif - -end sub - diff --git a/yab-IDE/Programs/Examples/Timer.yab b/yab-IDE/Programs/Examples/Timer.yab deleted file mode 100755 index 7b01867..0000000 --- a/yab-IDE/Programs/Examples/Timer.yab +++ /dev/null @@ -1,17 +0,0 @@ -#!yab - -doc Place a description of your -doc program here. -doc -doc Author, date, license - - - -print date$ - -print time$ -print mid$(date$,3,10)+" "+time$ - -dim fields$(6) -a=split(date$,fields$(),"-") -print fields$(2),"-",fields$(3),"-",fields$(4) diff --git a/yab-IDE/Programs/Examples/TreeDemo.yab b/yab-IDE/Programs/Examples/TreeDemo.yab deleted file mode 100755 index 6dd6d92..0000000 --- a/yab-IDE/Programs/Examples/TreeDemo.yab +++ /dev/null @@ -1,30 +0,0 @@ -#!yab - -window open 100,100 to 500,300, "A", "TreeDemo" -window set "A", "flags", "not-h-resizable, not-v-resizable" - -treebox 10,10 to 380,190, "Tree1", 1, "A" - -treebox add "Tree1", "Hello1" -treebox add "Tree1", "Hello1", "Test1", 1 -treebox add "Tree1", "Test1", "foo", 0 -treebox add "Tree1", "Test1", "bar", 0 -treebox add "Tree1", "Hello2" -treebox add "Tree1", "Hello3" -treebox add "Tree1", "Hello3", "Test3",0 -treebox add "Tree1", "Test3", "gugst",0 -treebox add "Tree1", "gugst", "du",0 -treebox add "Tree1", "Hello4" - -print treebox get$ "Tree1", 1 - -inloop = true - -while(inloop) - m$ = message$ - if(m$<>"") print m$ - if(instr(m$, "Quit")) inloop = false -wend - -window close "A" -exit diff --git a/yab-IDE/Programs/Examples/Typewriter.yab b/yab-IDE/Programs/Examples/Typewriter.yab deleted file mode 100755 index 98bcca7..0000000 --- a/yab-IDE/Programs/Examples/Typewriter.yab +++ /dev/null @@ -1,81 +0,0 @@ -#!yab - - -window open 100,100 to 600,400, "Main", "Typewriter" -window set "Main", "minimumto",100,100 - -layout "all", "Main" -view 10,10 to 490,280, "Type", "Main" -option set "Type", "Focus", true - -oldx = 100 -oldy = 100 -oldw = 500 -oldh = 300 - -offsetx = 5 -offsety = 15 - -draw set "highcolor", 255,255,255, "Type" -draw set "lowcolor", 0,100,0, "Type" -draw set "bgcolor", 0,100,0, "Type" - -draw text 10,295, str$(oldx)+" "+str$(oldy)+" "+str$(oldw)+" "+str$(oldh), "Main" - -while(not instr(message$, "_QuitRequested|")) - x = window get "Main", "position-x" - if(oldx<>x) then - oldx = x - Update() - endif - y = window get "Main", "position-y" - if(oldy<>y) then - oldy = y - Update() - endif - w = window get "Main", "width" - if(oldw<>w) then - oldw = w - Update() - endif - h = window get "Main", "height" - if(oldh<>h) then - oldh = h - Update() - endif - - // option set "Type", "focus", true - TypeKey("Type") -wend -exit - -sub TypeKey(view$) - local k$ - local old$ - - k$ = keyboard message$(view$) - if(k$ = "") then - // sleep 0.001 - else - if(k$ = "enter") then - offsety = offsety + 12 - offsetx = 5 - else - if(len(k$)=1) then - draw text offsetx,offsety, k$, "Type" - offsetx = offsetx + 10 - endif - endif - old$ = k$ - while(old$ = k$) - k$ = keyboard message$(view$) - wend - endif - return -end sub - -sub Update() - draw flush "Main" - draw text 10,h-5, str$(x)+" "+str$(y)+" "+str$(w)+" "+str$(h), "Main" - return -end sub diff --git a/yab-IDE/Programs/Examples/Walk.yab b/yab-IDE/Programs/Examples/Walk.yab deleted file mode 100755 index c1b0192..0000000 --- a/yab-IDE/Programs/Examples/Walk.yab +++ /dev/null @@ -1,31 +0,0 @@ -#!yab -dir$=attribute get$ "" , "" -dir$=dir$+"/" -window open 100,100 to 500,160, "Win", "Walk" -window set "Win", "flags", "not-zoomable, not-h-resizable, not-v-resizable" - -bitmap 1152,256, "player" -err = draw image 0,0 to 1152,256, dir$+"img/player.png", "player" -for i=15 to 405 step 65 - bitmap get i,196 to i+30,252, str$((i+50)/65), "player" -next i - -canvas 0,0 to 400,400, "MyCanvas", "Win" - -while(not quitting) - - for a = 0 to 400 step (30/7) - DRAW SET "highcolor",255,255,255,"MyCanvas" - draw rect 0,0 to a+29,55, "MyCanvas" - draw bitmap a,0, str$(mod(a/(30/7),6) +1),"copy", "MyCanvas" - sleep 00.2 - - m$ = message$ - if(m$ = "Win:_QuitRequested|" or m$ = "_QuitRequested|") then - quitting = true - break - endif - next a - -wend -window close "Win" diff --git a/yab-IDE/Programs/Examples/WindowWorld.yab b/yab-IDE/Programs/Examples/WindowWorld.yab deleted file mode 100755 index db4c61f..0000000 --- a/yab-IDE/Programs/Examples/WindowWorld.yab +++ /dev/null @@ -1,52 +0,0 @@ -#!yab - -window open 100,100 to 230,200, "win0", "Window0" - -layout "V-Center, H-Center", "win0" - -button 10,10 to 120,30, "NewWin_", "New Window", "win0" -button 10,40 to 120,60, "NumWin_", "Show Number...", "win0" -button 10,70 to 120,90, "Quit_", "Close All", "win0" - -alert "WindowWorld demonstrates how Windows are created and closed!", "Ok", "idea" - -dim msgpart$(1) -maxcount = 1 - -inloop = true -while(inloop = true) - msg$= message$ - if (split(msg$, msgpart$(),":") = 2) item$ = msgpart$(1) - if (msg$ <> "") print msg$ - - switch msg$ - case "NumWin_|" - alert "The number of open windows is "+str$(window count), "Ok", "info" - break - - case "NewWin_|" - number$ = str$(maxcount) - i = maxcount * 10 - window open 100+i,100+i to 230+i,200+i, "win"+number$, "Window"+number$ - layout "v-center, h-center", "win"+number$ - button 10,10 to 120,30, "NewWin_","New Window", "win"+number$ - button 10,40 to 120,60, "NumWin_","Show Number...", "win"+number$ - button 10,70 to 120,90, "Quit_","Close All", "win"+number$ - maxcount = maxcount + 1 - break - - case "Quit_|" - inloop = false - break - - case item$+":_QuitRequested|" - window close item$ - break - - end switch - - if (window count < 1) inloop = false - -wend - -exit diff --git a/yab-IDE/Programs/Examples/img/bulb.png b/yab-IDE/Programs/Examples/img/bulb.png deleted file mode 100644 index 1cb4c69cda173f028e07a40d3fa26b99aaea2f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLH@YFot`&IEGZrc{}s8V6%dNgXb|L zn~0{?fG*X7EiB#}75K#x7-foXbPA`q*m;+g-6&VtapoPf>Vhc>Th4Nu&oO+q@x0CX z4&{A<$rBqA9&CSQc-8lIrik?fFJ9$xq>*VnFIf%e>>ju;_y9(i(i(`{mW3zJc+?HV{%0H+$;65;Zq8a zHhBBQ2FJDvGRH6Y7I4>^|6%;+jKd6b?j3l>@;&CPda1}aHWkJ!p?gkS!=2(%zOfl` z{!hLX6>qn_&bwxd!5iL`y3UQ)oGXD2VhGroIqTfC)JVDclcc5CpG13Y*qA%JsC@1R zE~(>zCv~5)nlKw|{=F~Ui}!HBw&vd2`{$=Uwg|bC)!De0(X&Ac3C+^l9eCsI4~N}z qdaV?s8EW`Vv-mfdD{!p+%;;@6iL+Yqcmpt`89ZJ6T-G@yGywqTC89b2 diff --git a/yab-IDE/Programs/Examples/img/button_disabled.png b/yab-IDE/Programs/Examples/img/button_disabled.png deleted file mode 100644 index b525850ce11289e1fdfc1f6069925e492883aca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0xY~ZD&;1=ySqC$ zIB@b!!K-P*FfJ}G001G>Znp=6!4k17%bc60xsJaN;nj3J9H|heNi8!C-L70-SpYaYJF_f{nUH0f1$TFMMNwSv=k$#b`ouI(jzl6nm`bI_t?=m)urfk37RLIImW#k|Z&1Syru91AwcmD;^w;MqE74MN!P< zasZIe=fmMJ{H~naq;9?b%gaju=yto#K1%6)PNUK2^?IF7N0Ow&!$a-~W8Cle2_cly zy}dmEkR(ah^?tvG?;J-$6Y{O&KjI-KzG*d&D9+}zl<{atRv<@h*fLT>kO|YYLoj+uycrGvfQBjyDcA;~VNDC&tPyj)DLH002ovPDHLkV1iW7 BTl)Y2 diff --git a/yab-IDE/Programs/Examples/img/button_norm.png b/yab-IDE/Programs/Examples/img/button_norm.png deleted file mode 100644 index ab52e239f2f92ec6aff94b5f3c6e261c36effa96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmV-S0ki&zP)rGyE=5Y|dA5c+QcB+YMhEArDa3mZ02gywxJ4gDspu}l7!yKRPyQJH7fpF;j8TGl zp8LMn;qm;nJ>E^#r=YRq7-OVX`7CCZob>`K6;A7i5pl)l7-QFUnvloCFc6V*j+u=y z&bfS6c>yb&jxVgWxmD#bGZ6s*5#^@J%eHL`*V)n@h*((1o!BBegn)<=>klyV*NH?V zY0RuEY@kB4?yYH>v>l~Yew}O9THSnkJdUI6IcClqx|WCB^6tCG?%bk}qJh`V`fMc? eJTIph0Db^;t&!idl9>Pi00003%-r|ACgkxrj))jzBqHy9 zj4_{8Ucd^c`AG;Nx2hZ>LPP*S#N1SQ*>zpvI(yo~T3cAhFR@2-O37L)vHk!Ny`6}N zl14)u+HMcYwY<=43uLeR~Z$I~>)o+F~Xp=)X6mUrJhzRoTBC|Y>ltj|_b fLBq_~QVak;MF)OEX76Ex00000NkvXXu0mjfJMfQH diff --git a/yab-IDE/Programs/Examples/img/checkbutton_disabledOff.png b/yab-IDE/Programs/Examples/img/checkbutton_disabledOff.png deleted file mode 100644 index 1ab64759e676c4c693cc02bd655c2e4994d36586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmV;A0dW3_P)1YE7cv0=pyW4DY>gKhLus_W67`%sHoG7SSq}uUa=?YM`}V z{wRQtEYrmX(Q9RQ7gHz@*MAOr2NM865>ZwGcttVB5CUOV(LEO;=bUrCb661ZNtMWY z+cw^Q90vfTln_zocm*Id&oBZ2V1d6AH&iGBG#FH_nH&}XSBt@S%QT?FC>ESlBQ5Iu zKS;H^F$8q?)t!+Y&}WR==?p|HAAR+cIZYit=MSS;&j(>9cq;%H%Vl@xg@QWAb4&qn z{W2)ZTcQxab4+ZoTB1rt$~liQmWO@cN8MHF_p1=X5QYFLC8+LKl0hWGG+<)wqC_1A tRDs%3m)~b_(jBZ=H{4B(8pdUu`vvny^*9lT>8Ahy002ovPDHLkV1j)dq;3EJ diff --git a/yab-IDE/Programs/Examples/img/checkbutton_disabledOn.png b/yab-IDE/Programs/Examples/img/checkbutton_disabledOn.png deleted file mode 100644 index 5c5d892f8ae6cbef7c5057a2f19a3fa3cad6ea3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmV;I0cie-P)F2KqB0A~+OdtZzDN zf1K9)z8j-9Y-$Zty=qdwRm)~7%Au`8v3;|00F*wRw zD)&KoX2>~%w$C_KZ?w>w=k(|;Qr#lf*Y`lg5JCu{Th;?p|+D1j0v!IIuCTT8Hnw_qld6Cwokt~~tQj~hW*5D^UW-q(%B zxj#nh>$>V*=bQz0%P8)uHHmr)?2e=}y!XQWJkNUAwrw2doKrE2Xcfy>ts5{k&{{8l z6u?K8>0*QEwX(a5DHMq7KL@>o34kDpD60UxqLfmMkua<1o(mB|2qD}#EQt7|N@V@{ ze0ckD8~~7WMnsw86@bt@!w3L?1^!OlP@xFWU{JYca##RdEe78$(|``6Sa4E}w5ap{ zAl2^15YXLMcSd$VpD}8uGZ3+S^wm%1G5_K3* s1!_xOexJcfcd%mJa5ph(7?*MG7kw@IND6Z5TmS$707*qoM6N<$g5GqizyJUM diff --git a/yab-IDE/Programs/Examples/img/checkbutton_enabledOn.png b/yab-IDE/Programs/Examples/img/checkbutton_enabledOn.png deleted file mode 100644 index 327bc182b4914c6bd91ae522419078b0e9c48691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)63#)bO3Tq(*yt^1a=+;;3}n*_{$!}SYL?O`}ul5>3ZLHF*+dP znJ%&Q&;60#&pRe_Tmlg4XE*@>F!nWy0X5OA(9HMb$N|j|VD~EjTDk!Z23h2!W{Xrc z_77I+?hFCV@2Y0x2ecVS?Q{kr(xR^}ncdXG|M|%%-v5I!9lQ|$obB?vi!DUvIFBJf zu0IAxxk~vyD9;QjCD8U6r^<~MYX3PsdWclEi1jreh!{c$AvDWs04lf6S1fKCOU)!+ zqI9igP)0005eNkl_-9p3nTO4y=(xK2lH8V0)V5c zJ-wXI=iBkV6maAJtn2Wa`p_Vp8nP9r-^ks|R@s=>2{@_ZLfdv{2HrQ$0vhV5{G+Wqs|MKi9P8Ru7UCSRZR`a=&)hyaA&Z z>q(gm1$_SX?`VosCCE@9bnjnUaIb{q703a^CI=9k96)TW#sRJ%m_`HM?lT&g8$gdX z$WVZD5-|KM0)*=}v@M}B)}fom_-Gc_H35;?8hw03QRekJ^;M_ zeBFNGe)@F>y2f>vwj1QEYdp(YP*sIo z*2@Y^(dU@@yM>R)J=u!_oUiLS^G8>M$6@W0^cCO}Q(Es%>m;whFYV~E9_(1!5dZ)H M07*qoM6N<$f)`2auK)l5 diff --git a/yab-IDE/Programs/Examples/img/front.png b/yab-IDE/Programs/Examples/img/front.png deleted file mode 100644 index cedd73f078730898d6f1caa8b5477446aae8e245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 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 C*@yK2 diff --git a/yab-IDE/Programs/Examples/img/player.png b/yab-IDE/Programs/Examples/img/player.png deleted file mode 100644 index 8449c1247ffc9d3dd9acf9b97bdc341589de3fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57667 zcmcG$2Uk;Fv;}&S(0d2zO#!JE1f(P=2sWCaNCyi@kt!V$n)IS5AkqXC1f@uq5;`c- zlnxR)D7^;~lDGNpy>Glf@WvSoAS0Zdy;s?5%{3>{26{S-bi8yB1TkLM)iQ!03Je6n zAQ~$0O1CiMY4DB8?xv0wL_WE48uF9DE3|I9_dOwqp8ezt2Bl~4fETH~uHV+C9!5}d zp5pf3d3h0ngrVzNn#R84s|`UGuSVWz1jmQS(6V$%3QM+VJvh%qhi6M=<9v{dv$1sQ&Z1(3zy;-&8DH`CExc8+BH%);6(fsiW!nR+=LBi|4Od;1cElWRm04G*DkW5dvt` z=;NU)O%)a={Ni5Ha3lpRV@sEAlnh=v5G#p zu(|Nuh%+Ji_~de$BGJx6Ob=lW?$+|@h@7#lY?LrTf@HR+zk};{A=`#&YsiRFe00yt zNu)E8Bf*6GnU4w#(mLX=m}=3~v2wi-Km{2WEJ=tL=;SA%^(p2?9RKgu>Btb9`?dbC zyTw+R>+TN}q@FT}wqC(A2P9gGykg;1zXocl~(; zgo#4BK);Df91~~*ikzq6SI7o*zh0^zu5EAM%lT9(@WNKa^lQ^ju;!ScvOEXyJeG8fgXiey#{=e&q1U`S`X0YIs+WQ6c&_DRYWYH$v&F&r}Wm?h8 zsMXG~DcXtJZnr9*vr{9;SD{bC>3o$nkPl(*k z#Cxll?slO=F@nXsm~d{Usm{(>ib47nvi3hhCAbS+^Ui}UvHVWB}A*{fzx zx!Bly3ch@ygg)`Rp+a|Qa;mDhqN5+bUwHhk*^Fx7B1%>jWu1Q<4Wg+M+=ImdraOmC zZ}w?=Gu^5sWWAxeDJIOo%l@Ceocs~WXF2qA-g-^`9{89>cAMiO59mbvA}U4kyb`mK zSV`advhbKE9+swH3l|j?eJ>yn(deSIv?$KpN}Kj(`iXa#&|40FhT(e95>9)by6cBP z&bM!J!rTs}>)b!^SUmzeu(u<6R-W#n1=Sm2b7*mKar@xb);YJ!bo>6>QI;zCJ3 z5idVZB`g3NSZ8JVGJyn9FYlsPJp0UwM5jUi-r4ohb4^W3t&*JCX`=-#aBwO%JG{E9 z!ph2;cK%V!?)7;JsOgo|9r1h!Gr)t%%{^1a!_@)1acdO^JI{+qN^|J={_XLLRr3A> z8C9;kR`TpW%cNJKeMAS5t(nXZKx#52KfX-1-GG(WV36JH`D|L|kfS{OXeEv;>H-;2 zr0pl5(iyL%j@fvR(tJ(kIxgl}(Khhnwtegz zoTYo-x^j&GVT972H;zxj1;~^W5XCZ0R0@ScdGqpkqb(I3 zll{!t(nrm?{p_nmDM<9(K%CN)F9Ph4?_9hR$Bwn5qqxx>u@|r3MAZ{HFOnJU2+Vic zmNO=MObW*LgC0J7EG%{bQE=Gso-{(t!rlW<-Sx-f^s6nWKQOzxvFb4r%Oh^0(-t!g z%k%#dH5^{?Gdosg`+OJ3c76J~Nwc0W@az?9P(PKhHs;B7=)tUh+wOf}W`#4WXDXb@ zW*g*-r0YA@BQF?~yQ}7?KiZDg+9lYLx_u9IeAgo`wuy^h6=Kuc!3kH91-Qp2nJ|== zmJnueQ1{lQgti(AcI;xt(DUSHJ)dV_IbZs%4suXTIh4@X^XxCuE?Xa=vW_P$dCLnO zu=CL2A*}l8LO~FV%_RMgeQ4yYp~*H(Z&>kQoRl0d_QHWgY0*668~p1QWU!}>zeW^# zOYik8+7_`+LfQ~~^!al~$ys+gb5?3X3tO!BaisD^SZn^*h|;4qq;S*MrMa;5`9A*8 z;BMgylQone?j2m7bf(-U7&w%$OR-s$EAYh?fBvZ@E=Lx#CO&pnmyv}SV>vg@u^PXx zvY(rFi6g7PU7#9Z4iH=fPF5QoAD6k2pH}t!va+&j%xyXoi+KeF*J=1{s;m#D1GPCU z)<`l^bUEEIv^$aoXykav)k&Y!H?8IZxKatO8!}4>q z3HAr`RYajJypuOEIT7Y@@<7>S8ysbR9wRVXFtgSha@rcR31Q@qduyr+RC6~v6HBrz z8L_WFa&1yTzThIKb3s4B>67Ek%%TD-?k#%B=yl)Fq{8~e(xb2L?+4Gp*~F9MF18H$ zarWt_fBF~F1fFI;<1&?HKTXY3i?DV7ZU`TSlZWA*%%G%dWcvF|9BCZK$=_R|e>2#M zhk&&tiH>3|pc`*gum8i54*WD$B@bR*rNXSsW8|b`n6pG-x-u}`9VRGX3P+XWaH($u z!~K5Cb$@jXL_XbA7cshme$qG=Jx;X7&nN41wa4PJ~J_3%nk3(P~cF_#8fFH}Oy)fh;- zyQ+5~JtKM|iW|FjE?+V^B6i5u*xi{qsuO0|VK&&iqT9InTa=7_4T)YMpojiY{;|IN z;S%%iO2hHOKI_HMO0v(8Dd#`eF6%wf=_94zhwjvJ_%3N&7tT`$_Qm|QK0L`LmK-7j z!Dy-p-@VbEO7}z*6~B(GXwS)Gna$#%--S?zGy2fzQ}$cCy{NRk3#-J1A6D4p7jHzi zvXiB6?T+j-USK)5Vh;{=8r|ho?C*i+r~jI3vtN-h6x-KHn# zufo&xNmoA|AFm4^Iz#=G@k#ucX}88Mv_h~gGd1*uI;4oRKWN5B$PU|yj*O9jb^jQm zuSxrTzX8!~Scb|GVhi5oVhh^B-j$+-{#f#GUA(e(Aj|{-Hx$4y>8OX!rrr?c@jUt$ ztCpK;PApJ=C82T?Mk^^f5mqt3Bny2tnIPdXn2erwG z>9`%8{j35N1yI0!aGW@JQA12LDyH{iVraGFsVlVMkfEmAs8fCKrB|Mv&=zz5=}gHd zuHtDoXwx~6hb!z$YW{5|gzzX+{nu(p>MDwc_iM0mjC{ zR>7wkKmNrn+VOn*Oyo6xhRE`(7c`|$jp9Sbk;$rF1tW*9gy*MnxBABF`kubI;K^}K zn^JT|=%dZpxDf|`FYoy^v_vv0fFE-+qQ6owT-sRi!g$m_o0V0cAl%f7dfqI}SflZ8yt2NxLXjA=%Fwth7gayD7%8OdyV3EcAy zk1U>}yF4x*5>3IQ!C4u(UHa6dQ6bFAR4dAOeAj8)`c;`h&u%SrY1K&NGnVk?;f~Di zZE+ACx;j~*t+mQstL=Z# z#^$Uyo?@$ekiwcTIPS0Yo1JGYUCK6>AV$*6`i@Y zod`kt#9iyM$NIG3_>@Y}`xLzcf}=F3m7z^sH?%J#R7}~#)9{8bsq1%ERQ0sDu<~_( zq~EDs!*{-RFZ@S>f}(7>P%)VCT0e=xnEkxGV>a@qv*U@GZ+(93;O-BO?jO_GRGU+v zXh;$Jmo48l=pBr`kvFK{I4~0TN`2iI@bfS%h@0H|;7+RvjvD0IZrO*hk+UCEj?F&k zlWyVdq5}JcAS11F!8$v)>+!_AETu^eVI=JXQ-(W%48>G!F_$P8SO3`SkkEd20%ef#fuv`%rJvp-*Q@m_z z8$J@~!`!%tq|^&Zs!a}s+F*MrE=1&?|xeZy&xes;w27rpq|^ z_j{hd&)EGduuQ1V2p{)eM+CH-w^&Eeul<&fQX%6fra_6n!TdOE%TG}->_Jkh=Hsqz z>yVGb-dfKiY`(+$2$YWkrt1xE{fia`$K!LI`ar7&^O)fEMs^NbAXXf!e#g0l1i;O3XslGoeCl9at)1=O6cVGoUAgV|o|w2vpJQP2V;v&9dy-4|m+ANqIsy&JXM8=xEg z;KieZRHK-_o+cbEtS{rwG~qpJ+;>mT-%IIk>o9L@*M6@c@vYg!huSGwxMI*$Plo+a z811a<*QG%Z{Z_<8GxKm&Z8`7Cj910hq^T-t zO+e=OQ1rzi_ghGhh-*$a^3zF&c?r zfI!;zUGnKHUCu{d8R520xbt_`Iwm+eh^YVyfjoVA~6?lwKAM$=UHRr<;YNgf|@22TUyqgJ?}SUa&V>Pum6$WAJ~jzKxJOeGzb@%HV+gTRN6UX*`*f4=MI6Y+w887w#& zXp3N3~9b8=T&lY7;uXDpl`-ESZXrvv%IH@cQzL9VS-|)77#6cw0j(hGl;$ zwhtK-ll-f8Q6mvU(VWTZl_6F;a{4jb5J@F#u72l+rA=p%S!uCqb>y-)oU^|!S`D`I3k&3s?%P5GRH0@^+`jbdvOWI$YM z)jgC8_rO3+?qAqz&bZHyO^duHu`_TTY&Dd$lQVGwt+_%y#-0Reiqcu6kYEx7=|=Z= zB-CPFonqcw))B?*xi_yNdndB6a%k3VNYS)ADdlZMo7M$KC+?Gu@udPw5)|}G^>VKz zjJg&T^!nSHrgz}gE=M_p_K(TylWzjZ_}btlvQR!5X4K;L_fF+CI520(mnm8ZKdp=K zfj8D$Ai_`I>?FdVy_(U&)&Ml#8X`y1PdO%Hre|?irHH`_HGx`~vWHz$ELt=HCnsSa zUZ*o}y7asd!_&!sCJ=iBmO(u=@zTZpJL%bee0jOqQyBWkh2(RV8dQ>_$AkxyFb(_4 z8PMoV7np)rX65JX#vvw`Y#+s<3wC8bf9HV>ZbXzXJih`hCt~?WTsH5`sE4=FE z-G|ja&7SIxXHS~;>*KSchbx9G$k%#*_nRR42`zuMn_;#uEIXE!z9&CD*+7{zwTg4^ zNhY_Ac_0dK(tBc+Es@9jBcz{t#!TJ7sPn{y2S=#G3lpp&%>AHy7C)2D`6%gds~1C| zrKM#9Y^U&FXMJtx&0`Z)ETzzf4oIH2-ts>_2il+4?D?IJMzHfTDQBl4<$$UOs2y@t zvHv>7Ct0?feye=*sw$2ue~DXV{`kM0yEPx1&7ME?^+o&DUYqq_eDCN-2t7CN2`bkc zCtsugGEKqzF&|1gah6&E#2 z&ECEzqFI_E*k1A7R_z~clBk{5q=M~E%h$>eUAW^@Cjip4+sV=SZUJi@TDdEk@Mqe*)-!>rDPiZ}TSl}0!Dy`wmad@SOga*@aQbsz-s9E{!?k|Qk)=zDB+ zDv|A$g>L+9CKKEJZ`IGYZ4UT{Tdo+asc(K*tR8%IJN>}#v&7TnMsX;{oudnMmUKT}{Z3J% zc2K(V!J&qJLsa=J7l={2LnDc6UPEG{a`y`!*Z?frZk4J^A}(CR@ou6@@c6s}@E_f% zl&NI4mXyMj4PaejS6|-T6+`#0oc6tyB2w=fsnIGvtnET)qFg6zuQoR-LTZKzPLqcE z!@u%a_*H(NiM)SSuWDbJ>kDNXW5?=~r3@!Cil3kWtzThT%rZb zKX7~Yt$v+|mP}P`lTMqX85|Q;G;jnLRw1lwcvd1LQ|p<^K*f+fbA|srs-a?7SXxqH}w92jq~Ij zeKRW+=xkWIdK2h;MPY5B1@#R@Ic5Bkt}bdAu(1iRmF?dOuAT$%X0X=h*@x2Lc&vR; zaFmB?zHUK0>~SS?FMYlgZ7#2ak=Cnfxx3N!;sAG5%i?@BtzlERz$GRCiWag^jPiVQ zc99yig1Ib~@8Hj1l*j;fC=(Bo{&<_|jvF^4Xpu7O1V&(+6_vJSS16)*{jkgMq!nO& zVuVjqYe4~O7R^1a#Di|*5JG?^cU^!}BBG{B+NTYAVy~6HTNHSC$ni3Kz+V+E^w}8vcQq6gKjjVVq=7Bd)JDz~+^r=Mk1zIppUUz&%f82D z2M7t1<^L?qw(30J#}}JXmcF$nE;x;mQAfWGbXLYZQGpDg`#XV(hrj$-;>{3Hn%REfcgcRiXZeSSQjS+^uwoOtr4n>x@-x){*)Rs^lsuW{ z6gDm91mJia=H7J;{)X||NI?$uW^CmaU1!9a1FUKL!^*V(H$ z^jk6_i+O3v&^?NQe&)O88$>3se%s(-sfm&>+ppejfW0KW47_Rhj21?#5MM{h*OV7R z^*bRA!myt}21WMvC;oFiw zs{}5I)DSS1Wgp$0m*!fhg1k+iwX(=nL2N;@!w&NceRGD^4D8towrEQP%PH}?n{8+X zg;hN=>^qEROSx%)HjwQV@<^w1PCiu+0WsB^)8^;(1Zh*It@zz?*#3iE{x9 zI-q3f9ib)cQ6gpjv=h`#G!D{B5>=Fk>kr=tmwh zbEAXHv4B_w+K>!JM@?*_^v>82ct+m5dkh@xL#6bqpT7-}%~Te&bQ3 z1oe19!3$q!M>yLVy{562Jp5RC{)<#>D19EoIoj_E>Lm4LA-{BNYC3N;K+->jPR5%@ zF(eOjg46kA0Q&=dNtt#N%S^L-^`R*ZfVFCiC^c4IdVshs3Z%YI6ZNwWRC5zmto^m(dK!6*)~XM+MzMJGx?)CQq!1(;b2soQZwJ$N$q!2%eu%I`apLZ zTh5AF=SP(y>-TmHAm2AZ7mr-r&K>(6VHq=A+LNWpW2eX1x$W zjr8pF`Q^Tu+nE{y!Ybr~8BOK8Qw+73oW!q%Yl54U@fv42WaEFWY%PxAO-?HuZ$D|H zu+Xvl7bs(uab}IFwi{JW*>G={ z9ET>vLy5;LVkVv0(XYSdu;L5r=)X<7E&q#6dhrH!Z`1<(gs&_fHC{GjhL4<`iMbt7 zR7c+$dTkTusg#Eyc^%&YIb(NfI*UDTksCuAevY~NYT!^YKJcsIxNuo!-DiGj0&l_}R_-t< ziuXO=pSj=^!c>)(dY{?V`&|+uyj+Z1mfr~b&~H_3^`3LncgI;xaWE@t4Om+HUAAXA6?3HPdB?@jlH{{r^P zOGv#(bBYoGri6!#;*sdF@jUeo?dSHLZ?pV1KCcBC9`S;>|ML|gy?J1aEncJox9~63Hct1Z{e!4sFeLYP%gpYJz z=R&U_!Q$KIYuVt;uUf}v4!Y{S+I_?Kq+kMj zuyeSRwLC&Pg+^tnG|eYCgHd)Hj7Vh5?d^IzgPT z)-=twcYJQ|UgV3DlS01O{kEV*dlJ;$PMM>A%PfV7f0}%_bPjl{gr)|cC|grPeq>&}YMV#gO@%GCmMQN==Z$c|*QlKAdDMCP^Zm>YLX(BL zQ%wE9+Tyn|Fe3-!o8#LLWz4t4WUN26?v1ktx_H&s!yz|f9^Fg=>hpJt#T#kLFrh4} zD%buUU4trmxw&kFseLoRh3Ref44uuQAWNzy4Y`mEa7 zhqVWdrQ(Xu1a@F4jWwpMoZVSM@+D2y$ImIFf0DoEoyyC-=Fz*o1VxdBcd!rO{YuZE z%f;w-HFKMQU?r;4mAz=w0&({&B*8-qk)>9 zzHy^~?9Ic5#z#C)Duv0b@a9&+(X9NvFzp&vGZT#5(o;XJoOiR3ZB_RK?3H}8X{htzs01$$*}9>DzM$es0=lJ* z7H{%M*6OWbOt^}^X8vzm0Kc3x^K(7rwtfrM5N7kEp5abT&bu;p!`2Uuu2ZZ{id8#N zt)@~Q#Qtlx%GljCO0p!nVYj`#DK@rjb?kJ^3YS?5{S)#O5$7x4C*gA@G%5;19VV1q z@@&*Bswa|wOp0muA~5qwoky#4$8JE>dgn`u-dmprQ6paqel8HohJ$jp(lkSXsA!>Ddm?#vk6)O1f?ZI zV`Ie}+=Z#n3_klqOUMSna2nlcyVUot?cl9$<%Tgw-$o0={yGZT!&d8{R=ed#2kBz{ z4WHd5h6G+R<#1~hSI|iZvY?~Uu5jTM>01!HF0pLlUuM*@WamUcF9dD-pr5}Ff1$?B zq`C;sV7`-10gP4^+W!UgWWT?Lr<^1RRKa9$hv>Nmwf3XLXehUto2)d|y;4Tve2s)C z68JT;w<@!WO(-ZVyf2D@oNn7L-;rH;VN2*TapM&8E4^$_jt;5Dr z8Y!T|xvg!waD=)yc4(2}8yV-^R8IJgM_W8G;X$sjfQYhHw~U=z;4EYcOZ7Zh?BlBQ zAQ6ztEk57BoauVUJLNF zbnZs=Rh$6nPwKIJkb9XV@q?P%Q_U-d&rK5mW1{N^MWNh?jm4D)!Y>1_3Tybd{ML_q z&Qo(H9Ce?=(#bLRibEw5--4E$Ek9D!-SFj-gNaUU?l!l#Z-Oc~C=sl`lehj=iD_g8 z)gB|Vh#Cn_nfUs-o4Vig zrF~`_O>%=4=5V0+OZR{(yR5_DX$XiVBU~|nYv)1Mlf<4*-|}C3Ht^A^43}*`EgBIS zUoX7OhGJsLUSfe>>F{B9^RUwJ?@Bcml*ay{4|+)EtdCzEJNaERIe`Xc-3bGuAV)!B zLoI~QGg-kGIy&h{TjY(tf@TZE~@Y*yz)=*ePefXvex|luU^o62s?6#ehj$b+r0%2 zm-=rm+|{m!cG+wA&NuJHgjOXPgkL8n`g(m8C&ej9=K2EKhuAsJ(gp%AB!v~0&bKUe zjn~%;djqBO3(s!EVh@O&Tx3!D6WqvJB2#EfNWYXcVVD5Q*#*z6gLEEDp%S*S_b4?w zM3g?K4ZGyuRrimbkFZ|5XOiDFIYx!t65=HuQ*}=-FqIxWt#)8)TH8Lj#6)wM_D3f2 z5G9EdU}ybY9fI2uhzBjr(^rO)h=n{4=FD1Kug$&04Aw*Wcp5P zZ~iCy6$aQnrpHpv9)adE(*|EKkQJA`Z&R(B>=a4{!m|DnZ&%c&a_;R6AdZF_o zv^i%dV-~fwokbWu(@A1ZknAAvPWb(dONW~`u&?4zO()R(le`y&)YiTYVZL`9*Z3G) z;5eHu|M)QHsr2+67*2eVUHfcIv{b!zgDJ=RFhD1`{5EQUvUI!kUP$Hiaauf|M*xdD zeAW4#@!s{u??b5|CA5e81WRlI!s_&&*WBw#sRyqqL>4E@953zP)T_9JGm;7PeJwrQ0g7CwIoQuYN4gS>c%S<*!+G#3NUW^l*&`MEUF0b0+L4%TtK3Ni1r`uioK;4}%;Wt>LVVaGzg zmoCqDqAG+jl^K$npy_c?F>L9i-pIp=>R@ia<$tc&{Xwj3iWsO8(q^reA*&XnzRt+> zBy7Qf87W!+DH+dB){MZ}9E-S8>w4w;*W$`*SAh+Jtx2Zlf=zCo}|2^DU<#t4%Ef8-;tir&QB%BAO0i(R)SMjBP@E+TK9z< zGOAVor}^M5C7mB5<)@@@nFuH`BEg6HzeO{w$&*HzbTBf#H2asx7W=Q zd+O7ga-vby0r6K@jAnh2SU{xtX4=NWj!tX!1uz1>W}6N`c<>*2{VKn&uWxbdr;?mMBU&l61=Lr!3STOj3(%vxB=F3j%Rl&b}z(|T?r<%G> zIjB?^vOX)~B;7J}a;?Qv~k=}+ABvbiq@C7P&VC0k&k+ypv56?^(bv-yNFztEe? z)HO;lj0)zX?b6oZJWra$EzaRhV1<)(BP*t%IPUXa+rYmRO`v$;>W5MXjH8z z^9vo29!mFYD?~VM-qWD}z3YmA3hB@w+ZOX~A8s~&C*K3xED}`Ybo}=3^3%^9;GD0a z%r>fZNM2hJd<#%-&_Bik8Va6cVg0e7IyiKC$o>ytQ zuQd~S*;laVpE7}4icYzd-z-E44XuYVo^B({HMuH~N1dJ+qEUyg{h2sG(>->>Wk>ho z#s(RVM|~kCg#i0~Y=8e5l^=Tn?N7-&L#T&+9;2eP!q$=4dURAcIGv1)f5)3Ew0GM4 z{b67B)I`I3;;Q@p=n@32Or3{}=DUBr?rY%?5_|oec{jNcTT5rw1nR+R+2MlI*VR-o zzqOKuBYgcW?45fz<%S=*YYxZ7#n3fI-s=~TSAvVaxcY-aJQwC+?7 zIfxEm_mAOMNtLrK9YhaDZyJiZlYZW}Jv@-cQ0VMvf7P{FJH@gMnaL}?%gc+G#YAwS z=7|EgWqp?iA`Qu7losE-K1h&{8X!TA1VUf%HkIlq*l?ygAw(XK6Cjw@cK0{NsGG_9xD71;Z?hH zIUSHfx=d%~F9NG_f-xRGUja<%!59k^FRNDqEVtsrvL(+_EvoT}IWzIx{nKwg&o^Mg zY#)$s0d=Hvfz$`3-0FdU3=cs*mTpe9H!BiID>Uicth=cV4l`JE7g8-_BMz|3V z2Gw6nG7jNTzke+)=TJ7iD$RLn{a(N~eH@AW7wxNJ;$zuW3{<>j&l(r3r@go2&@ee4i`E01WfX4llgF0OI9c2()BxBzhRxO&VOj|#&;QD> z$60TWJPoM!O+-%}YpvmXQVxlS=B^EK1a@{%&lgEjxs46Pb$&bpLF@XrjH9%-H`u#i zqNIP?H*cR>P0fHx_2!5waz0k6-c3k#VKp+qc9kbo$5^}gU13eYrRwTd7_`CTo68q-R6eNr!vlKIP^-cj_95Z<>t8o~BJ|ijfv@V6~_+aYLFv^)yLPGm{<#Nh)Ww;~p@vTnbS^rG%fF-PXSyuLTHsP!7P_vVzZY zaZ1$QrtirXu{)9hBo^Dl#IrNBp+666wqx2kinuSs_5q2A4gzStGANpUIWQyYEb*#;lRANm;?N{u{ zUu?xu-s^3?x|Wik6$oLNsFBXpUUrd4>#x;^!SY5ip&s;_DxKZZGKmtmTTdEsrDyxP zN2@CbEL|`oF|_>pl^y#78v@n!KX#%?+!vd1H=*Pbm(!#>V_T(X-rl$s zNd0IB<>h&+K&{<&n-XF}X6s@3dL)%cZr6()0@AvixLIcugvXH&)1%@w8MmZ?>gmQ8isjuGsr#l9FgMvztEvnzzU+1hSJpc?SY+01 z(Rb}s8 zy97wi9XRjxuOAP~>r>m%n}^IX&~8&0DP^-P>xRBl>aDgP)_3=#Jfa72i9l3fQ|=}B zT$W>y$(1y~eE9C~k03gdS$wGNfacTuG^_-h&KVD{%rf}06x0~dcsKv`{=Np)-pTE( ziJpPkL1E4oG_1NK_BaP8>haIHbQp@Y5PlTn4k$pRKmqa&I4Za1)RgDP&e2X$5&(Y( z#)YPcLGj0NSlbH0ywImKt+<|d`ho`(Q}*}k9*Uv`NXtRX%H#-2Zx-}9Jomi}=i4C! zU93-V(MHE@?=P0;UyMK?Y|*7B>+(9@c`9=*afw|M@NbBF9o*{tSD%AL{r MvEn+ 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

N|vk@ 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 diff --git a/yab-IDE/Programs/Examples/img/yab.png b/yab-IDE/Programs/Examples/img/yab.png deleted file mode 100644 index ac5fa68ff8485155be93b27fb69fe9e1f6895be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378 zcmV-=0fqjFP)IKAQk_@j4I+ue2S~Y%qM~n*&Mr9J zSeRTcUT!azI-d~>x!#ZJD&#;I4J6{U>W!2?Tfa6B95-Y1vol}f4g=&2Vmx1csPTc{3i=q{p zCFMaCk!&%WeR6tsz7@K-yv9WlCxZcF&w-jGsv@EyqRxHKR~5XyJnD2ZQb1i4sfg$p zbnIz*O%lz9h^V!Z!c~TD!)||oWv|R|c(9z!F~-nuG_t+tcDwYN-aZ7dw#n+-T5AjY zN52Kva1jHT!$ync!61$U;<)&G8)ImtDXlauU^hUw+g&3i1#P@quh#>h)9C~idw(Fl Y0P

X9P2@+ju1S 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"&" or left$(a$,10)="&exverbatim") - line input #f1 a$ - print a$ - wend -wend - -close(f2) -close(f1) diff --git a/yab-IDE/data/Help_En.dat b/yab-IDE/data/Help_En.dat deleted file mode 100644 index c67381d..0000000 --- a/yab-IDE/data/Help_En.dat +++ /dev/null @@ -1,9290 +0,0 @@ -& This is the data file for the help syntax of the yab-IDE 2.0 -& DO NOT CHANGE ANYTHING IN THIS FILE (unless you do a reindexing!) -& -& Comments start at the beginning of the line with a & -& -& Here the top level starts with the keyword: -& toplevel -Arithmetic -Conditions and Loops -Data Processing -Input and Output -Graphical User Interface -&Localization -Sound -String Handling -Subroutines -System -& Here the sub levels start (they are added as TREEBOX ADD adds). -& sublevel -Arithmetic:** or ^ -Arithmetic:xor() -Arithmetic:tan() -Arithmetic:sqrt() -Arithmetic:sqr() -Arithmetic:sin() -Arithmetic:sig() -Arithmetic:ran() -Arithmetic:pi -Arithmetic:or() -Arithmetic:mod() -Arithmetic:min() -Arithmetic:max() -Arithmetic:log() -Arithmetic:int() -Arithmetic:frac() -Arithmetic:exp() -Arithmetic:euler -Arithmetic:eor() -Arithmetic:dec() -Arithmetic:cos() -Arithmetic:bin$() -Arithmetic:atan() -Arithmetic:asin() -Arithmetic:and() -Arithmetic:acos() -Arithmetic:abs() -Conditions and Loops:while -Conditions and Loops:wend -Conditions and Loops:until -Conditions and Loops:true -Conditions and Loops:then -Conditions and Loops:switch -Conditions and Loops:step -Conditions and Loops:return -Conditions and Loops:repeat -Conditions and Loops:logical or -Conditions and Loops:on interrupt -Conditions and Loops:on goto -Conditions and Loops:on gosub -Conditions and Loops:not -Conditions and Loops:next -Conditions and Loops:loop -Conditions and Loops:label -Conditions and Loops:if -Conditions and Loops:goto -Conditions and Loops:gosub -Conditions and Loops:for -Conditions and Loops:fi -Conditions and Loops:false -Conditions and Loops:endif -Conditions and Loops:end -Conditions and Loops:elsif -Conditions and Loops:else -Conditions and Loops:do -Conditions and Loops:default -Conditions and Loops:continue -Conditions and Loops:case -Conditions and Loops:break -Conditions and Loops:and -Data Processing:restore -Data Processing:redim -Data Processing:read -Data Processing:dim -Data Processing:data -Data Processing:arraysize() -Data Processing:arraydim() -Input and Output:; -Input and Output:using -Input and Output:tell -Input and Output:seek() -Input and Output:screen -Input and Output:reverse -Input and Output:putscreen -Input and Output:print -Input and Output:open -Input and Output:line input -Input and Output:input -Input and Output:inkey$ -Input and Output:getscreen$() -Input and Output:eof -Input and Output:colour -Input and Output:color -Input and Output:close -Input and Output:clear screen -Input and Output:at() -Graphical User Interface:Window -Window :window set -Window :window open -Window :window get -Window :window count -Window :window close -Window :filepanel -Window :alert -Graphical User Interface:Widgets -Widgets:Treebox -Treebox:treebox sort -Treebox:treebox select -Treebox:treebox remove -Treebox:treebox get$ -Treebox:treebox expand -Treebox:treebox count -Treebox:treebox collapse -Treebox:treebox clear -Treebox:treebox add -Treebox:treebox -Widgets:Tooltip -Tooltip:tooltip color -Tooltip:tooltip -Widgets:TextURL -TextURL:texturl color -TextURL:texturl -Widgets:Textedit -Textedit:textedit set -Textedit:textedit get$ -Textedit:textedit get -Textedit:textedit color -Textedit:textedit clear -Textedit:textedit add -Textedit:textedit -Widgets:Textcontrol -Textcontrol:textcontrol set -Textcontrol:textcontrol get$ -Textcontrol:textcontrol clear -Textcontrol:textcontrol -Widgets:Text -Text:text set -Text:text -Widgets:Statusbar -Statusbar:statusbar set -Statusbar:statusbar -Widgets:Spincontrol -Spincontrol:spincontrol set -Spincontrol:spincontrol get -Spincontrol:spincontrol -Widgets:Slider -Slider:slider set -Slider:slider label -Slider:slider get -Slider:slider color -Slider:slider -Widgets:Radiobutton -Radiobutton:radiobutton set -Radiobutton:radiobutton -Widgets:Options -Options:option set -Options:option color -Widgets:Listbox -Listbox:listbox sort -Listbox:listbox select -Listbox:listbox remove -Listbox:listbox get$ -Listbox:listbox get -Listbox:listbox count -Listbox:listbox clear -Listbox:listbox add -Listbox:listbox -Widgets:Dropbox -Dropbox:dropbox select -Dropbox:dropbox remove -Dropbox:dropbox get$ -Dropbox:dropbox count -Dropbox:dropbox clear -Dropbox:dropbox add -Dropbox:dropbox -Widgets:Columnbox -Columnbox:columnbox select -Columnbox:columnbox remove -Columnbox:columnbox get$ -Columnbox:columnbox get -Columnbox:columnbox count -Columnbox:columnbox column -Columnbox:columnbox color -Columnbox:columnbox clear -Columnbox:columnbox add -Columnbox:columnbox -Widgets:Colorcontrol -Colorcontrol:colorcontrol set -Colorcontrol:colorcontrol get -Colorcontrol:colorcontrol -Widgets:Checkbox -Checkbox:checkbox set -Checkbox:checkbox image -Checkbox:checkbox -Widgets:Calendar -Calendar:calendar set -Calendar:calendar get$ -Calendar:calendar -Widgets:Button -Button:button image -Button:button -Graphical User Interface:Views -Views:View -View :view remove -View :view get -View :view dropzone -View :view -Views:Tabview -Tabview:tabview set -Tabview:tabview get -Tabview:tabview add -Tabview:tabview -Views:Stackview -Stackview:stackview set -Stackview:stackview get -Stackview:stackview -Views:Splitview -Splitview:splitview set -Splitview:splitview get -Splitview:splitview -Views:Scrollbar -Scrollbar:scrollbar set -Scrollbar:scrollbar get -Scrollbar:scrollbar -Views:layout -Views:canvas -Views:Boxview -Boxview:boxview set -Boxview:boxview -Graphical User Interface:Printing -Printing:printer setup -Printing:printer -Graphical User Interface:Menus -Menus:submenu set -Menus:submenu -Menus:popupmenu -Menus:menu set -Menus:menu -Graphical User Interface:Input and Messages -Input and Messages:shortcut -Input and Messages:mouse set -Input and Messages:mouse message$ -Input and Messages:mouse message$() -Input and Messages:message send -Input and Messages:message$ -Input and Messages:keyboard message$() -Input and Messages:ismousein() -Graphical User Interface:Drawing -Drawing:draw text -Drawing:draw set -Drawing:draw rect -Drawing:draw line -Drawing:draw image -Drawing:draw get$ -Drawing:draw get -Drawing:draw flush -Drawing:draw ellipse -Drawing:draw dot -Drawing:draw curve -Drawing:draw circle -Drawing:draw bitmap -Graphical User Interface:Bitmaps -Bitmaps:screenshot -Bitmaps:bitmap save -Bitmaps:bitmap remove -Bitmaps:bitmap image -Bitmaps:bitmap get -Bitmaps:bitmap color -Bitmaps:bitmap -&Localization:translate$() -&Localization:localize -Sound:sound wait -Sound:sound stop -Sound:sound play -Sound:bell -Sound:beep -String Handling:val() -String Handling:upper$() -String Handling:trim$() -String Handling:token() -String Handling:str$() -String Handling:split() -String Handling:rtrim$() -String Handling:right$() -String Handling:mid$() -String Handling:ltrim$() -String Handling:lower$() -String Handling:len() -String Handling:left$() -String Handling:instr() -String Handling:hex$() -String Handling:glob() -String Handling:chr$() -String Handling:asc() -Subroutines:sub -Subroutines:static -Subroutines:return -Subroutines:numparams -Subroutines:local -Subroutines:import -Subroutines:export -Subroutines:end sub -System:: -System:# -System:// -System:wait -System:to -System:time$ -System:thread remove -System:thread get -System:system() -System:system$() -System:sleep -System:rem -System:poke -System:peek$ -System:peek -System:pause -System:iscomputeron -System:exit -System:execute() -System:execute$() -System:error -System:docu$ -System:doc -System:date$ -System:compile -System:clipboard copy -System:clipboard paste$ -System:bind() -System:Attributes -Attributes:attribute clear -Attributes:attribute get -Attributes:attribute get$ -Attributes:attribute set -& -& Information texts (info texts for short) are separated by -& comment lines. The file must end with a comment line! -& -& The info texts start here: -& infotext -&Arithmetic -& -abs() - -Name: -abs() -- returns the absolute value of its numeric argument - -Synopsis: -y=abs(x) - -Description: -If the argument of the abs-function is positive (e.g. 2) it is returned unchanged, if the argument is negative (e.g. -1) it is returned as a positive value (e.g. 1). - -Example: -print abs(-2),abs(2) -Explanation: - - This example will print 2 2 - - -Related: sig - -& -acos() - -Name: -acos() -- returns the arcus cosine of its numeric argument - -Synopsis: -x=acos(angle) - -Description: -The acos is the arcus cosine-function, i.e. the inverse of the cos-function. Or, more elaborate: It Returns the angle (in radian, not degree!), which, fed to the cosine-function will produce the argument passed to the acos-function. - -Example: -print acos(0.5),acos(cos(pi)) -Explanation: - - This example will print 1.0472 3.14159 which are pi/3 and pi respectively. - - -Related: cos, asin - -& -and() - -Name: -and() -- the bitwise arithmetic and - -Synopsis: - x=and(a,b) - -Description: -Used to compute the bitwise and of both its argument. Both arguments are treated as binary numbers (i.e. a series of 0 and 1); a bit of the resultingvalue will then be 1, if both arguments have a 1 at this position in their binary representation. -Note, that both arguments are silently converted to integer values and that negative numbers have their own binary representation and may leadto unexpected results when passed to and. - -Example: -print and(6,3) -Explanation: - - This will print 2. This result is clear, if you note, that the binary representation of 6 and 3 are 110 and 011 respectively; this will yield 010 in binary representaion or 2 as decimal. - - -Related: or, eor, xor, not - -& -asin() - -Name: -asin() -- returns the arcus sine of its numeric argument - -Synopsis: -angle=asin(x) - -Description: -The acos is the arcus sine-function, i.e. the inverse of the sin-function. Or, more elaborate: It Returns the angle (in radian, not degree!), which,fed to the sine -function will produce the argument passed to the asin-function. - -Example: -print asin(0.5),asin(sin(pi)) -Explanation: - - This will print 0.523599 -2.06823e-13 which is pi/6 and almost 0 respectively. - - -Related: sin, acos - -& -atan() - -Name: -atan() -- returns the arcus tangens of its numeric argument - -Synopsis: -angle=atan(a,b) -angle=atan(a) - -Description: -The atan is the arcus-tangens-function, i.e. the inverse of the tan-function. Or, more elaborate: It Returns the angle (in radian, not degree!), which, fed to the tan-function will produce the argument passed to the atan-function. -The atan-function has a second form, which accepts two arguments: atan(a,b) which is (mostly) equivilantly to atan(a/b) except for the fact, that the two-argument-form returns an angle in the range -pi to pi, whereas the one-argument-form returns an angle in the range -pi/2 to pi/2. To understand this you have to be good at math. - -Example: -print atan(1),atan(tan(pi)),atan(-0,-1),atan(-0,1) -Explanation: - - This will print 0.785398 2.06823e-13 -3.14159 3.14159 which is pi/4, almost 0, -pi and pi respectively. - - -Related: tan, sin - -& -bin$() - -Name: -bin$() -- converts a number into a sequence of binary digits - -Synopsis: -hexadecimal$=bin$(decimal) - -Description: -The bin$-function takes a single numeric argument an converts it into a stringof binary digits (i.e. zeroes and ones). If you pass a negative number to bin$, the resulting string will be preceeded by a '-'. -If you want to convert the other way around (i.e. from binary to decimal) you may use the dec-function. - -Example: -for a=1 to 100 - print bin$(a) -next a -Explanation: - - This example prints the binary representation of all digits between 1 and 100. - - -Related: hex$, dec - -& -cos() - -Name: -cos() -- return the cosine of its single argument - -Synopsis: -x=cos(angle) - -Description: -The cos-function expects an angle (in radian) and returns its cosine. - -Example: -print cos(pi) -Explanation: - - This example will print -1. - - -Related: acos, sin - -& -dec() - -Name: -dec() -- convert a base 2 or base 16 number into decimal form - -Synopsis: -a=dec(number$) -a=dec(number$,base) - -Description: -The dec-function takes the string-representation of a base-2 or base-16 (which is the default) number and converts it into a decimal number. The optional second argument (base) might be used to specify a base other than 16. However, currently only base 2 or base 16 are supported. - -Example: -input "Please enter a binary number: " a$ -print a$," is ",dec(a$) -Related: bin$, hex$ - -& -eor() - -Name: -eor() -- compute the bitwise exclusive or of its two arguments - -Synopsis: -print eor(a,b) - -Description: -The eor-function takes two arguments and computes their bitwise exclusive or. See your favorite introductory text on informatics for an explanation of this function. -The xor-function is the same as the eor function; both are synonymous; however they have each their own description, so you may check out the entry of xor for a slightly different view. - -Example: -for a=0 to 3 - for b=0 to 3 - print fill$(bin$(a))," eor ",fill$(bin$(b))," = ",fill$(bin$(eor(a,b))) - next b -next a - -sub fill$(a$) - return right$("0"+a$,2) -end sub -Explanation: - - This example prints a table, from which you may figure, how the eor-function is computed. - -Related: and, or - -& -euler - -Name: -euler -- another name for the constant 2.71828182864 - -Synopsis: -foo=euler - -Description: -euler is the well known constant named after Leonard Euler; its value is 2.71828182864. euler is not a function, so parens are not allowed (i.e. euler() will produce an error). Finally, you may not assign to euler; it wouldn't sense anyway, because it is a constant. - -Example: -print euler -Related: pi - -& -exp() - -Name: -exp() -- compute the exponential function of its single argument - -Synopsis: - foo=exp(bar) - -Description: -This function computes e to the power of its argument, where e is the well known euler constant 2.71828182864. The exp-function is the inverse of the log-function. - -Example: -window open 100,100 to 300,300, "Example", "Example" -for x=-100 to 100 - draw dot x,100-100*exp(x/100)/euler, "Example" -next x -sleep 5 -window close "Example" -Explanation: - -This program plots part of the exp-function, however the range is rather small, so that you may not recognize the function from this plot. - -Related: log - -& -frac() - -Name: -frac() -- return the fractional part of its numeric argument - -Synopsis: -x=frac(y) - -Description: -The frac-function takes its argument, removes all the digits to the left of the comma and just returns the digits right of the comma, i.e. the fractional part. Refer to the example to learn how to rewrite frac by employing the int-function. - -Example: -for a=1 to 10 - print frac(sqr(a)) - print sqr(a)-int(sqr(a)) -next a -Explanation: - - The example prints the fractional part of the square root of the numbers between 1 and 10. - Each result is computed (and printed) twice: Once by employing the frac-function and once by employing the int-function. - - -Related: int - -& -int() - -Name: -int() -- return the integer part of its single numeric argument - -Synopsis: - print int(a) - -Description: -The int-function returns only the digits before the comma; int(2.5) returns 2 and int(-2.3) returns -2. - -Example: -input "Please enter a whole number between 1 and 10: " a -if (a=int(a) and a>=1 and a<=10) then - print "Thanx!" -else - print "Never mind ..." -endif -Related: frac - -& -log() - -Name: -log() -- compute the natural logarithm - -Synopsis: -a=log(x) -a=log(x,base) - -Description: -The log-function computes the logarithm of its first argument. The optional second argument gives the base for the logarithm; if this second argument is omitted, the euler-constant 2.71828... will be taken as the base. - -Example: -window open 200,200 to 400,400, "Example", "Example" -draw set 0, "highsolidfill" -for x=10 to 190 step 10 - for y=10 to 190 step 10 - r=3*log(1+x,1+y) - if (r>10) r=10 - if (r<1) r=1 - draw circle x,y,r, "Example" - next y -next x -sleep 5 -window close "Example" -Explanation: - - This draws another nice plot. - - -Related: exp - -& -max() - -Name: -max() -- return the larger of its two arguments - -Synopsis: -print max(a,b) - -Description: -Return the maximum of its two arguments. - -Example: -dim m(10) -for a=1 to 1000 - m=0 - for b=1 to 10 - m=max(m,ran(10)) - next b - m(m)=m(m)+1 -next a - -for a=1 to 9 - print a,": ",m(a) -next a -Explanation: - - Within the inner for-loop (the one with the loop-variable b), the example computes the maximum of 10 random numbers. The outer loop (with the loop variable a) now repeats this process 1000 times and counts, how often each maximum appears. The last loop finally reports the result. - Now, the interesting question would be, which will be approached, when we increase the number of iterations from thousend to infinity. Well, maybe someone could just tell me :-) - -Related: min - -& -min() - -Name: -min() -- return the smaller of its two arguments - -Synopsis: -print min(a,b) - -Description: -Return the minimum of its two argument. - -Example: -dim m(10) -for a=1 to 1000 - m=min(ran(10),ran(10)) - m(m)=m(m)+1 -next a - -for a=1 to 9 - print a,": ",m(a) -next a -Explanation: - - For each iteration of the loop, the lower of two random number is recorded. The result is printed at the end. - - -Related: max - -& -mod() - -Name: -mod() -- compute the remainder of a division - -Synopsis: -print mod(a,b) - -Description: -The mod-function divides its two arguments and computes the remainder. Note, that a/b-int(a/b) and mod(a,b) are always equal. - -Example: -//*** requires ncurses support compiled in *** -//See Documentation/Advanced for info. - -clear screen -print at(10,10) "Please wait " -p$="-\|/" -for a=1 to 100 - rem ... do something lengthy here, or simply sleep :-) - pause(1) - print at(22,10) mid$(p$,1+mod(a,4)) -next a -Explanation: - - This example executes some time consuming action within a loop (in fact, it simply sleeps) and gives the user some indication of progress by displaying a turning bar (thats where the mod()-function comes into play). -Start this program in a terminal. - - -Related: int, frac - -& -or() - -Name: -or() -- arithmetic or, used for bit-operations - -Synopsis: -x=or(a,b) - -Description: -Used to compute the bitwise or of both its argument. Both arguments are treated as binary numbers (i.e. a series of 0 and 1); a bit of the resulting value will then be 1, if any of its arguments has 1 at this position in theirbinary representation. -Note, that both arguments are silently converted to integer values and that negative numbers have their own binary representation and may lead to unexpected results when passed to or. - -Example: -print or(14,3) -Explanation: - - This will print 15. This result is clear, if you note, that the binary representation of 14 and 3 are 1110 and 0011 respectively; this will yield 1111 in binary representaion or 15 as decimal. - -Related: and, eor, xor, not - -& -pi - -Name: -pi -- a constant with the value 3.14159 - -Synopsis: -print pi - -Description: -pi is 3.14159265359 (well at least for yab); do not try to assign to pi (e.g. pi=22/7)this would not only be mathematically dubious, but would also result in a syntax error. - -Example: -for a=0 to 180 - print "The sine of ",a," degrees is ",sin(a*pi/180) -next a -Explanation: - - This program uses pi to transform an angle from degrees into radians. - - -Related: euler - -& -ran() - -Name: -ran() -- return a random number - -Synopsis: -print ran() -x=ran(y) - -Description: -The ran-function returns a random number. If no argument is given, the number returned is in the range from 0 to 1; where only 0 is a possible value; 1 will never be returned. If an argument is supplied, the number returned will be in the range from 0 up to this argument, whereas this argument itself is not a possible return value. - -Example: -//*** requires ncurses support compiled in *** -//See Documentation/Advanced for info. - -clear screen -c=peek("screenwidth")-1 -l=peek("screenheight") - -dim col$(8) -for a=0 to 7 - read col$(a) -next a - -do - x=ran(c) - y=l-ran(l*exp(-32*((x/c-1/2)**2))) - i=i+1 - print color(col$(mod(i,8))) at(x,y) "*" -loop - -data "black","white","red","blue","green","yellow","cyan","magenta" -Explanation: - - This example will print a cloured bell-curve. Start this program in a terminal. - - -Related: int - -& -sig() - -Name: -sig() -- return the sign of its argument - -Synopsis: -a=sig(b) - -Description: -Return +1, -1 or 0, if the single argument is positive, negative or zero. - -Example: -//*** requires ncurses support compiled in *** -//See Documentation/Advanced for info. -clear screen -dim c$(3):c$(1)="red":c$(2)="white":c$(3)="green" -do - num=ran(100)-50 - print color(c$(2+sig(num))) num -loop -Explanation: - - This program prints an infinite sequence of random number; positive numbers are printed in green, negative numbers are printed red (an exact zero would be printed white). (With a little extra work, this program could be easily extended into a brogerage system). - - Start this program in a terminal. - - -Related: abs, int, frac - -& -sin() - -Name: -sin() -- return the sine of its single argument - -Synopsis: -y=sin(angle) - -Description: -The sin-function expects an angle (in radian, not degree) and returns its sine. - -Example: -window open 200,200 to 400,400, "Example", "Example" -for phi=0 to 2*pi step 0.1 - draw line 100+90*sin(phi-0.1),100+90*cos(phi-0.1) to 100+90*sin(phi),100+90*cos(phi), "Example" -next phi -sleep 5 -window close "Example" -Explanation: - - This program draws a circle (ignoring the existence of the circle-command). - - -Related: asin, cos - -& -sqr() - -Name: -sqr() -- compute the square of its argument - -Synopsis: -a=sqr(b) - -Description: -The sqr-function computes the square of its numerical argument (i.e. it multiplies its argument with itself). - -Example: -for a=1 to 10 - print a,sqr(a),a**2 -next a -Explanation: - - As you may see from the output, sqr can be written as **2 (or ^2) too. - - -Related: sqrt, **, ^ - -& -sqrt() - -Name: -sqrt() -- compute the square root of its argument - -Synopsis: -to be written - -Description: -The sqrt-function computes the square root of its numerical argument. - -Example: -for a=1 to 5 - print a,sqrt(a),a**(1/2) -next a -Explanation: - - As you may see from the output, sqrt can be written as **(1/2) (or ^(1/2)) too. - - -Related: sqr, **, ^ - -& -tan() - -Name: -tan() -- return the tangens of its argument - -Synopsis: -foo=tan(bar) - -Description: -The tan-function computes the tangens of its arguments (which should be specified in radian). - -Example: -for a=0 to 45 - print tan(a*pi/180) -next a -Explanation: - - This example simply prints the tangens of all angles between 0 and 45 degree. - - -Related: atan, sin - -& -xor() - -Name: -xor() -- compute the exclusive or - -Synopsis: -x=xor(a,b) - -Description: -The xor computes the bitwise exclusive or of its two numeric arguments. To understand the result, both arguments should be viewed as binary numbers(i.e. a series of 0 and 1); a bit of the result will then be 1, if exactly one argument has a 1 and the other has a 0 at this position in their binary representation. -Note, that both arguments are silently converted to integer values and that negative numbers have their own binary representation and may lead tounexpected results when passed to and. - -Example: -print xor(7,4) -Explanation: - - This will print 3. This result is obvious, if you note, that the binary representation of 7 and 4 are 111 and 100 respectively; this will yield 011 in binary representaion or 2 as decimal. The eor-function is the same as the xor function; both are synonymous; however they have each their own description, so you may check out the entry of eor for a slightly different view. - - -Related: and, or, eor, not - -& -** or ^ - -Name: -** or ^ -- raise its first argument to the power of its second - -Synopsis: -print 2**b -print 3^4 - -Description: -** (or ^, which is an exact synonym), is the arithmetic operator of exponentiation; it requires one number to its left and a second one to its right; ** then raises thefirst argument to the power of the second and returns the result. The result will only be computed if it yields a real number (as opposed to a complex number); this means, that the power can not be computed, if the first argument is negative and the second one is fractional. On the other hand, the second argument can be fractional, if the first one ist positive; this means, that ** may be used to compute arbitrary roots: e.g. x**0.5 computes the square root of x. - -Example: -print 2**0.5 -Related: sqrt - -&Conditions and Loops -& -and - -Name: -and -- logical and, used in conditions - -Synopsis: -if (a and b) -while (a and b) - -Description: -Used in conditions (e.g within if, while or until) to join two expressions. Returns true, if and only if its left and right argument are both true and false otherwise. -Note, that logical shortcuts may take place. - -Example: -input "Please enter a number" a -if (a>=1 and a<=9) print "your input is between 1 and 9" -Related: or, not, xor, eor - -& -break - -Name: -break -- breaks out of a switch statement or a loop - -Synopsis: -break - -Description: -break transfers control immediately outside the enclosing loop or switch statement. This is the preferred way of leaving a such a statement (rather than goto, which is still possible in most cases). - -Example: -for a=1 to 10 - break - print "Hi" -next a - -while(1) - break - print "Hi" -wend - -repeat - break - print "Hi" -until(0) - -switch 1 - case 1:break - case 2:case 3:print "Hi" -end switch -Explanation: - - This example prints nothing at all, because each of the loops (and the switch-statement) does an immediate break (before it could print any "Hi"). - - -Related: for, while, repeat, switch - -& -case - -Name: -case -- mark the different cases within a switch-statement - -Synopsis: -switch a - case 1 - case 2 - ... -end switch - -... - -switch a$ - case "a" - case "b" - ... -end switch - -Description: -Please see the switch-statement. - -Example: -input a -switch(a) - case 1:print "one":break - case 2:print "two":break - default:print "more" -end switch -Explanation: - - Depending on your input (a number is expected) this code will print one or two or otherwise more. - - -Related: switch - -& -continue - -Name: -continue -- start the next iteration of a for-, do-, repeat- or while-loop - -Synopsis: -continue - -Description: -You may use continue within any loop to start the next iteration immediately. Depending on the type of the loop, the loop-condition will or will not be checked. Especially: for- and while-loops will evaluate their respective conditions, do- and repeat-loops will not. -Remark: Another way to change the flow of execution within a loop, is the break-command. - -Example: -for a=1 to 100 - if mod(a,2)=0 continue - print a -next a -Explanation: - - This example will print all odd numbers between 1 and 100. - - -Related: for, do, repeat, while, break - -& -default - -Name: -default -- mark the default-branch within a switch-statement - -Synopsis: -switch a+3 -case 1 - ... -case 2 - ... -default - ... -end switch - -Description: -The default-clause is an optional part of the switch-statement (see there for more information). It introduces a series of statements, that should be executed, if none of the casese matches, that have been specified before (each with its own case-clause). So default specifies a default to be executed, if none of the explicitly named cases matches; hence its name. - -Example: -print "Please enter a number between 0 and 6," -print "specifying a day in the week." -input d -switch d - case 0:print "Monday":break - case 1:print "Tuesday":break - case 2:print "Wednesday":break - case 3:print "Thursday":break - case 4:print "Friday":break - case 5:print "Saturday":break - case 6:print "Sunday":break - default:print "Hey you entered something invalid!" -end switch -Explanation: - - This program translates a number between 0 and 6 into the name of a weekday; the default -case is used to detect (and complain about) invalid input. - - -Related: sub, case - -& -do - -Name: -do -- start a (conditionless) do-loop - -Synopsis: -do -... -loop - -Description: -Starts a loop, which is terminated by loop; everything between do and loop willbe repeated forever. This loop has no condition, so it is an infinite loop; note however, that a break- or goto-statement might be used to leave this loop anytime. - -Example: -do - a=a+1 - print a - if (a>100) break -loop -Explanation: - - This example prints the numbers between 1 and 101. The break-statement is used to leave the loop. - - -Related: loop, repeat, while, break - -& -else - -Name: -else -- mark an alternative within an if-statement - -Synopsis: -if (...) then - ... -else - ... -endif - -Description: -The else-statement introduces the alternate branch of an if-statement. I.e. it starts the sequence of statements, which is executed, if the condition of the if-statement is not true. - -Example: -input "Please enter a number: " a -if (mod(a,2)=1) then - print a," is odd." -else - print a," is even." -endif -Explanation: - - This program detects, if the number you have entered is even or odd. - - -Related: if - -& -elsif - -Name: -elsif -- starts an alternate condition within an if-statement - -Synopsis: -if (...) then - ... -elseif (...) - ... -elsif (...) then - ... -else - ... -endif - -Description: -The elsif-statement is used to select a single alternative among a seriesof choices. With each elsif-statement you may specify a condition, which is tested, if the main condition (specified with the if-statement) has failed. Note that elsif might be just as well written as elseif. -Within the example below, two variables a and b are tested against a rangeof values. The variable a is tested with the elsif-statement. The very same tests are performed for the variable b too; but here an involved series of if-else-statements is employed, making the tests much more obscure. - -Example: - -input "Please enter a number: " a -if (a<0) then - print "less than 0" -elseif (a<=10) then - print "between 0 and 10" -elsif (a<=20) - print "between 11 and 20" -else - print "over 20" -endif - -input "Please enter another number: " b -if (b<0) then - print "less than 0" -else - if (b<=10) then - print "between 0 and 10" - else - if (b<=20) then - print "between 11 and 20" - else - print "over 20" - endif - endif -endif -Explanation: - - Note, that the very same tests are performed for the variables a and b, but can be stated much more clearly with the elsif-statement. - Note, that elsif might be written as elseif too, and that the keyword then is optional. - - -Related: if, else - -& -end - -Name: -end -- terminate your program - -Synopsis: -end - -Description: -Terminate your program. Much (but not exactly) like the exit command. -Note, that end may not end your program immediately; if you have opened a window or called clear screen, yab assumes, that your user wants to study the output of your program after it has ended; therfore it issuesthe line ---Program done, press RETURN--- and waits for a key to be pressed. If you do not like this behaviour, consider using exit. - -Example: - - print "Do you want to continue ?" - input "Please answer y(es) or n(o): " a$ - if (lower$(left$(a$,1))="n") then - print "bye" - end - fi - - -Related: exit - -& -endif - -Name: -endif -- ends an if-statement - -Synopsis: -if (...) then - ... -endif - -Description: -The endif-statement closes (or ends) an if-statement. -Note, that endif may be written in a variety of other ways: end if, end-if or even fi. The endif-statement must be omitted, if the if-statement does not contain the keyword then (see the example below). Such an if-statement without endif extends only over a single line. - -Example: -input "A number please: " a -if (a<10) then - print "Your number is less than 10." -endif - -rem and now without endif - -input "A number please: " a -if (a<10) print "Your number is less than 10." -Related: if - -& -false - -Name: -false -- a constant with the value of 0 - -Synopsis: -okay=false - -Description: -The constant false can be assigned to variables which later appear in conditions (e.g. within an if-statement. -false may also be written as FALSE or even FaLsE. - -Example: -input "Please enter a number between 1 and 10: " a -if (check_input(a)) print "Okay" - -sub check_input(x) - if (x>10 or x<1) return false - return true -end sub -Explanation: - - The subroutine check_input checks its argument and returns true or false according to the outcome of the check. - - -Related: true - -& -fi - -Name: -fi -- another name for endif - -Synopsis: -if (...) -... -fi - -Description: -fi marks the end of an if-statement and is exactly equivilent to endif, please see there for further information. - -Example: -input "A number please: " a -if (a<10) then - print "Your number is less than 10." -fi -Related: endif - -& -for - -Name: -for -- starts a for-loop - -Synopsis: -for a=1 to 100 step 2 - ... -next a - -Description: -The for-loop lets its numerical variable (a in the synopsis) assume all valueswithin the given range. The optional step-clause may specify a value (default: 1) by which the variable will be incremented (or decremented, if step is negative). - -Any for-statement can be replaced by a set of ifs and gotos; as you may infer from the example below this is normally not feasable. However if you want to know in detail how the for-statement works, you should study this example, which presents a for-statement and an exactly equivilant series of ifs and gotos. - -Example: -for a=1 to 10 step 2 - print a -next a - -a=1 -label check -if (a>10) goto done -print a -a=a+2 -goto check -label done -Explanation: - -This example simply prints the numbers 1, 3, 5, 7 and 9. It does this twice: -First with a simple for-statment and then with ifs and gotos. - - -Related: step, next - -& -gosub - -Name: -gosub -- continue execution at another point within your program -(and return later) - -Synopsis: -gosub foo - -... - -label foo -... -return - -Description: -gosub remembers the current position within your program and then passes the flow of execution to another point (which is normally marked with a label). Later, when a return- statement is encountered, the execution is resumed at the previous location. -gosub is the traditional command for calling code, which needs to be executed from various places within your program. However, with subroutines yab offers a much more flexible way to achieve this (and more). Therefore gosub must to be considered obsolete. - -Example: -print "Do you want to exit ? " -gosub ask -if (r$="y") exit - -label ask -input "Please answer yes or no, by typing 'y' or 'n': ",r$ -return -Related: return, goto, sub, label, on gosub - -& -goto - -Name: -goto -- continue execution at another point within your program (and never come back) - -Synopsis: -goto foo - -... - -label foo - -Description: -The goto-statement passes the flow of execution to another point within your program (which is normally marked with a label). -goto is normally considered obsolete and harmful, however in yab it may be put to the good use of leaving loops (e.g. while or for) prematurely. Note however, that subroutines may not be left with the goto-statement. - -Example: -//*** requires ncurses support compiled in *** -//See Documentation/Advanced for info. -clear screen -print "Please press any key to continue." -print "(program will continue by itself within 10 seconds)" -for a=1 to 10 - if (inkey$(1)<>"") goto done -next a -label done -print "Hello World!" -Explanation: - -Here the goto-statment is used to leave the for-loop prematurely. Start this program in a terminal. - - -Related: gosub, on goto - -& -if - -Name: -if -- evaluate a condition and execute statements or not, depending on the result - -Synopsis: -if (...) then - ... -endif - -if (...) ... - -if (...) then - ... -else - ... -endif - -if (...) then - ... -elsif (...) - ... -elsif (...) then - ... -else - ... -endif - -Description: -The if-statement is used to evaluate a conditions and take actions accordingly. (As an aside, please note that there is no real difference between conditions and expressions.)There are two major forms of the if-statement:The one-line-form without the keyword then: if (...) ... -This form evaluates the condition and if the result is true executes all commands (seperated by colons) upt to the end of the line. There is neither an endif keyword nor an else-branch. -The multi-line-form with the keyword then: if (...) then ... elsif (...) ... else ... endif(where elsif and else are optional, whereas endif is not. -According to the requirements of your program, you may specify:elsif(...), which specifies a condition, that will be evaluated only if the condition(s) whithin if or any preceeding elsif did not match. -else, which introduces a sequence of commands, that will be executed, if none of the conditions above did match. endif is required and ends the if-statement. - -Example: -input "Please enter a number between 1 and 4: " a -if (a<=1 or a>=4) error "Wrong, wrong!" -if (a=1) then - print "one" -elsif (a=2) - print "two" -elsif (a=3) - print "three" -else - print "four" -endif -Explanation: - -The input-number between 1 and 4 is simply echoed as text (one, two, ...). The example demonstrates both forms (short and long) of the if-statement (Note however, that the same thing can be done, probably somewhat more elegant, with the switch-statement). - -Related: else, elsif, endif - -& -label - -Name: -label -- mark a specific location within your program for goto, gosub or restore - -Synopsis: -label foo - -... - -goto foo - -Description: -The label-command can be used to give a name to a specific location within your program. Such a position might be referred from one of three commands: goto, gosub and restore. -You may use labels safely within libraries, because a label (e.g. foo) does not collide with a label with the same name within the main program or within another library; yab will not mix them up. -As an aside, please note, that line numbers are a special (however deprecated) case of labels; see the second example below. - -Example: -for a=1 to 100 - if (rand(10)>5) goto done -next a -label done - -10 for a=1 to 100 -20 if (rand(10)>5) goto 40 -30 next a -40 -Explanation: - -Within this example, the for-loop will probably be left prematurely with a goto-statement. This task is done twice: First with labels and then again with line numbers. - -Related: gosub, goto - -& -loop - -Name: -loop -- marks the end of an infinite loop - -Synopsis: -do - ... -loop - -Description: -The loop-command marks the ends of a loop (which is started by do), wherein all statements within the loop are repeated forever. In this respect the do loop-loop is infinite, however, you may leave it anytime via break or goto. - -Example: -print "Hello, I will throw dice, until I get a 2 ..." -do - r=int(rand(6))+1 - print r - if (r=2) break -loop -Related: do, for, repeat, while, break - -& -next - -Name: -next -- mark the end of a for loop - -Synopsis: -for a=1 to 10 -next a - -Description: -The next-keyword marks the end of a for-loop. All statements up to the next-keyword will be repeated as specified with the for-clause. Note, that the name of the variable is optional; so instead of next a you may write next. - -Example: -for a=1 to 300000 - for b=1 to 21+20*sin(pi*a/20) - print "*" - next b - print - sleep 0.1 -next a -Explanation: - -This example simply plots a sine-curve until you fall asleep. Start this program in a terminal. - - -Related: for - -& -not - -Name: -not -- negate an expression; can be written as! - -Synopsis: -if (not a9 or a<1) print "a is not between 1 and 9" -Related: and, not, xor, eor - -& -pause - -Name: -pause -- pause, sleep, wait for the specified number of seconds - -Synopsis: -pause 5 - -Description: -The pause-command has many different names: You may write pause, sleep or wait interchangable; whatever you write, yab will always do exactly the same. The pause-command will simply wait for the specified number of seconds. This may be a fractional number, so you may well wait less than a second. However, if you try to pause for a smaller and smaller interval (e.g. 0.1 seconds, 0.01 seconds, 0.001 seconds and so on) you will find that at some point yab will not wait at all. The pause-command cannot be interrupted. However, sometimes you may want the wait to be interuptible by simply pressing a key on the keyboard. In such cases you should consider using the inkey$-function, with a number of seconds as an argument). - -Example: -deg=0 -do - maxx=44+40*sin(deg) - for x=1 to maxx - print "*" - next x - pause 0.1+(maxx*maxx/(4*84*84)) - print - deg=deg+0.1 -loop -Explanation: - -This example draws a sine-curve; due to the pause-statement the speed of drawing varies in the same way as the speed of a ball might vary, if it would roll along this curve under the influence of gravity. - -Related: sleep, wait - -& -repeat - -Name: -repeat -- start a repeat-loop - -Synopsis: -repeat - ... -until (...) - -Description: -The repeat-loop executes all the statements up to the final until-keyword over and over. The loop is executed as long as the condition, which is specified with the until-clause, becomes true. By construction, the statements within the loop are executed at least once. - -Example: -//*** requires ncurses support compiled in *** -//See Documentation/Advanced for info. -x=0 -clear screen -print "This program will print the numbers from 1 to 10" -repeat - x=x+1 - print x - print "Press any key for the next number, or 'q' to quit" - if (inkey$="q") break -until(x=10) -Explanation: - -This program is pretty much useless, but self-explanatory. - - -Related: until, break, while, do - -& -return - -Name: -return -- return from a subroutine or a gosub - -Synopsis: -gosub foo -... -label foo -... -return - -sub bar(baz) - ... - return quertz -end sub - -Description: -The return-statement serves two different (albeit somewhat related) purposes. The probably more important use of return is to return control from within a subroutine to the place in your program, where the subroutine has been called. If the subroutine is declared to return a value, the return-statement might be accompanied by a string or number, which constitutes the return value of the subroutine. -However, even if the subroutine should return a value, the return-statement need not carry a value; in that case the subroutine will return 0 or the empty string (depending on the type of the subroutine). Moreover, feel free to place multiple return-statements within your subroutine; it's a nice way of controlling the flow of execution. -The second (but historcially first) use of return is to return to the position, where a prior gosub has left off. In that case return may not carry a value. - -Example: -do - read a$ - if (a$="") then - print - end - endif - print mark$(a$)," " -loop - -data "The","quick","brown","fox","jumped" -data "over","the","lazy","dog","" - -sub mark$(a$) - if (instr(lower$(a$),"q")) return upper$(a$) - return a$ -end sub -Explanation: - -This example features a subroutine mark$, that returns its argument in upper case, if it contains the letter "q", or unchanged otherwise. In the test-text the word quick will end up beeing marked as QUICK. -The example above demonstrates return within subroutines; please see gosub for an example of how to use return in this context. - - -Related: sub, gosub - -& -sleep - -Name: -sleep -- pause, sleep, wait for the specified number of seconds - -Synopsis: -sleep 4 - -Description: -The sleep-command has many different names: You may write pause, sleep or wait interchangable; whatever you write, yab will always do exactly the same. -Therefore you should refer to the entry for the pause-function for further information. - -Related: pause, wait -& -step - -Name: -step -- specifies the increment step in a for-loop - -Synopsis: -for a=1 to 10 step 3 - ... -next a - -Description: -Specify, by which amount the loop-variable of a for-loop will be incremented at each step. -The step (as well as the lower and upper bound) are computed anew in each step; this is not common, but possible, as the example below demonstrates. - -Example: -for x=1 to 1000 step y - y=x+y - print x," ",y," " -next x -print -Explanation: - -This program computes the fibonacci numbers between 1 and 1000. - - -Related: for - -& -switch - -Name: -switch -- select one of many alternatives depending on a value - -Synopsis: -switch a - case 1 - case 2 - ... -end switch - -... - -switch a$ - case "a" - case "b" -end switch - -Description: -The switch-statment selects one of many codepaths depending on a numerical or string expression. I.e. it takes an expression (either numeric or string) and compares it with a series of values, each wrapped within a case-clause. If the expression equals the value given in a case-clause, the subsequent statements are executed. -The default-clause allows to specify commands, which should be executed, if none of case-clauses matches. -Note, that many case-clauses might be clustered (e.g. case "a":case "b":case "c"). Or put another way: You need a break-statement at the end of a case-branch, if you do not want to run into the next case. - -Example: -input "Please enter a single digit: " n -switch n - case 0:print "zero":break - case 1:print "one":break - case 2:print "two":break - case 3:print "three":break - case 4:print "four":break - case 5:case 6: case 7:case 8:case 9 - print "Much!":break - default:print "Hey! That was more than a single digit!" -end switch -Explanation: - -This example translates a single digit into a string; note, how the cases 5 to 7 are clustered. - - -Related: switch, case, break - -& -then - -Name: -then -- tell the long from the short form of the if-statement - -Synopsis: -if (a2 or arraydim(m2())<>2 or arraydim(r())<>2) then - error "Need two dimensional arrays as input" - endif - - y=arraysize(m1(),1):x=arraysize(m1(),2) - if (arraysize(m2(),1)<>y or arraysize(m2(),2)<>x) then - error "The two matrices cannot be added elementwise" - endif - - if (arraysize(r(),1)<>y or arraysize(r(),2)<>x) then - error "The result cannot be stored in the third argument" - endif - - local xx:local yy - for xx=1 to x - for yy=1 to y - r(yy,xx)=m1(yy,xx)+m2(yy,xx) - next yy - next xx -end sub -Related: arraydim, dim - -& -data - -Name: -data -- introduces a list of data-items - -Synopsis: -data 9,"world" -... -read b,a$ - -Description: -The data-keyword introduces a list of comma-seperated list of strings or numbers, which may be retrieved with the read-command. -The data-command itself does nothing; it just stores data. A single data-command may precede an arbitrarily long list of values, in which strings or numbers may be mixed at will. - -yab internally uses a data-pointer to keep track of the current location within the data-list; this pointer may be reset with the restore-command. - -Example: -do - restore - for a=1 to 4 - read num$,num - print num$,"=",num - next a -loop -data "eleven",11,"twelve",12,"thirteen",13,"fourteen",14 -Explanation: - -This example just prints a series of lines eleven=11 up to fourteen=14 and so on without end. -The restore-command ensures that the list of data-items is read from the start with every iteration. - - -Related: read, restore - -& -dim - -Name: -dim -- create an array prior to its first use - -Synopsis: -dim array(x,y) -dim array$(x,y) - -Description: -The dim-command prepares one or more arrays (of either strings or numbers) for later use. This command can also be used to enlarges an existing array. - -When an array is created with the dim-statement, memory is allocated and all elements are initialized with either 0 (for numerical arrays) or "" (for string arrays). -If the array already existed, and the dim-statement specifies a larger size than the current size, the array is enlarged and any old content is preserved. - -Note, that dim cannot be used to shrink an array: If you specify a size, that is smaller than the current size, the dim-command does nothing. - -Finally: To create an array, that is only known within a single subroutine, you should use the command local, which creates local variables as well as local arrays. - -Example: -dim a(5,5) -for x=1 to 5 - for y=1 to 5 - a(x,y)=int(ran(100)) - y -next x -printmatrix(a()) -dim a(7,7) -printmatrix(a()) - -sub printmatrix(ar()) - local x,y,p,q - x=arraysize(ar(),1) - y=arraysize(ar(),2) - for q=1 to y - for p=1 to y - print ar(p,q),"\t" - next p - print - next q -end sub -Explanation: - -This example creates a 2-dimenional array (i.e. a matrix) with the dim-statement and fills it with random numbers. The second dim-statement enlarges the array, all new elements are filled with 0. - -The subroutine printmatrix just does, what its name says. - - -Related: arraysize, arraydim, local - -& -read - -Name: -read -- read data from data-statements - -Synopsis: -read a$,a -... -data "Hello!",7 - -Description: -The read-statement retrieves literal data, which is stored within data-statements elsewhere in your program. - -Example: -//*** requires ncurses support compiled in *** -//See Documentation/Advanced for info. -read num -dim col$(num) -for a=1 to num:read col$(a):next a -clear screen -print "These are the colours known to yab:\n" -for a=1 to num - print colour(col$(a)) col$(a) -next a - -data 8,"black","white","red","blue" -data "green","yellow","cyan","magenta" -Explanation: - -This program prints the names of the colors known to yab in those very colors. - -Start this program in a terminal. - - -Related: data, restore - -& -redim - -Name: -redim -- create an array prior to its first use. A synonym for dim - -Synopsis: -See the dim-command. - -Description: -The redim-command does exactly the same as the dim-command; it is just a synonym. redim has been around in older versions of basic (not even yab) for many years; therefore it is supported in yab for compatibility reasons. -Please refer to the entry for the dim-command for further information. - -Related: dim -& -restore - -Name: -restore -- reposition the data-pointer - -Synopsis: -read a,b,c,d,e,f -restore -read g,h,i -restore foo -data 1,2,3 -label foo -data 4,5,6 - -Description: -The restore-command may be used to reset the reading of data-statements, so that the next read-statement will read data from the first data-statement. -You may specify a label with the restore-command; in that case, the next read-statement will read data starting at the given label. If the label is omitted, reading data will begin with the first data-statement within your program. - -Example: -input "Which language (German/English) ? " l$ -if (instr("German",l$)>0) then - restore German -else - restore English -endif - -for a=1 to 3 - read x,x$ - print x,"=",x$ -next a - -label English -data 1,"one",2,"two",3,"three" -label German -data 1,"eins",2,"zwei",3,"drei" -Explanation: - -This program asks to select one of those languages known to me (i.e. English or German) and then prints the numbers 1,2 and 3 and their textual equivalents in the chosen language. - - -Related: read, data, label - -&String Handling -& -asc() - -Name: -asc() -- accepts a string and returns the position of its first character -within the ascii charset - -Synopsis: -a=asc(char$) - -Description: -The asc-function accepts a string, takes its first character and looks it up within the ascii-charset; this position will be returned. The asc-function is the opposite of the chr$-function. There are valid uses for asc, however, comparing strings (i.e. to bring them into alphabetical sequence) is not among them; in such many cases you might consider to compare strings directly with <, = and > (rather than converting a string to a number and comparing this number). - -Example: -input "Please enter a letter between 'a' and 'y': " a$ -if (a$<"a" or a$>"y") print a$," is not in the proper range":end -print "The letter after ",a$," is ",chr$(asc(a$)+1) -Related: chr$ - -& -chr$() - -Name: -chr$() -- accepts a number and returns the character at this position within the ascii charset - -Synopsis: -character$=chr$(ascii) - -Description: -The chr$-function is the opposite of the asc-function. It looks up and returns the character at the given position within the ascii-charset. It's typical use is to construct nonprintable characters which do not occur on your keyboard. -Nevertheless you won't use chr$ as often as you might think, because the most important nonprintable characters can be constructed using escape-sequences using the \-character (e.g. you might use \n instead of chr$(10) wherever you want to use the newline-character). - -Example: -print "a",chr$(10),"b" -Explanation: - -This will print the letters 'a' and 'b' in different lines because of the intervening newline-character, which is returned by chr$(10). - - -Related: asc - -& -glob() - -Name: -glob() -- check if a string matches a simple pattern - -Synopsis: -if (glob(string$,pattern$)) ... - -Description: -The glob-function takes two arguments, a string and a (glob-) pattern, and checks if the string matches the pattern. However glob does not employ the powerful rules of regular expressions; rather it has only two special characters: * (which matches any number (even zero) of characters) and ? (which matches exactly a single character). - -Example: -for a=1 to 10 - read string$,pattern$ - if (glob(string$,pattern$)) then - print string$," matches ",pattern$ - else - print string$," does not match ",pattern$ - endif -next a - -data "abc","a*" -data "abc","a?" -data "abc","a??" -data "abc","*b*" -data "abc","*" -data "abc","???" -data "abc","?" -data "abc","*c" -data "abc","A*" -data "abc","????" -Explanation: - -This program checks the string abc against various patterns and prints the result. The output is: - - -abc matches a* -abc does not match a? -abc matches a?? -abc matches *b* -abc matches * -abc matches ??? -abc does not match ? -abc matches *c -abc does not match A* -abc does not match ???? - - -& -hex$() - -Name: -hex$() -- convert a number into hexadecimal - -Synopsis: -print hex$(foo) - -Description: -The hex$-function converts a number into a string with its hexadecimal representation. hex$ is the inverse of the dec-function. - -Example: -open 1,"foo" -while(!eof(1)) - print right$("0"+hex$(peek(1)),2)," " - i=i+1 - if (mod(i,10)=0) print -end while -print -Explanation: - -This program reads the file foo and prints its output as a hex-dump using the hex-function. - - -Related: dec, bin$ - -& -instr() - -Name: -instr() -- searches its second argument within the first; returns its position if found - -Synopsis: -print instr(a$,b$) -if (instr(a$,b$)) ... -pos=instr(a$,b$,x) - -Description: -The instr-functions requires two string arguments and searches the second argument within the first. If the second argument can be found within the first, the position is returned (counting from one). If it can not be found, the instr-function returns 0; this makes this function usable within the condition of an if-statement (see the example below). - -If you supply a third, numeric argument to the instr-function, it will be used as a starting point for the search. Therefore instr("abcdeabcdeabcde","e",8) will return 10, because the search for an "e" starts at position 8 and finds the "e" at position 10 (and not the one at position 5). - -Example: -input "Please enter a text containing the string 'bumf': " a$ -if (instr(a$,"bumf")) then - print "Well done!" -else - print "not so well ..." -endif -Related: rinstr - -& -left$() - -Name: -left$() -- return (or change) left end of a string - -Synopsis: -print left$(a$,2) -left$(b$,3)="foobar" - -Description: -The left$-function accepts two arguments (a string and a number) and returns the part from the left end of the string, whose length is specified by its second argument. Loosely spoken, it simply returns the requested number of chars from the left end of the given string. - -Note, that the left$-function can be assigned to, i.e. it may appear on the left hand side of an assignment. In this way it is possible to change a part of the variable used within the left$-function. Note, that that way the length of the string cannot be changed, i.e. characters might be overwritten, but not added. For an example see below. - -Example: -input "Please answer yes or no: " a$ -l=len(a$):a$=lower$(a$):print "Your answer is " -if (left$("yes",l)=a$ and l>=1) then - print "yes" -elsif (left$("no",l)=a$ and l>=1) then - print "no" -else - print "?" -endif - -a$="Heiho World!" -print a$ -left$(a$,5)="Hello" -print a$ -Explanation: - -This example asks a simple yes/no question and goes some way to accept even incomplete input, while still beeing able to reject invalid input. This second example demonstrates the capability to assign to the left$-function. - - -Related: right$, mid$ - -& -len() - -Name: -len() -- return the length of a string - -Synopsis: -x=len(a$) - -Description: -The len-function returns the length of its single string argument. - -Example: -input "Please enter a password: " a$ -if (len(a$)<6) error "Password too short!" -Explanation: - -This example checks the length of the password, that the user has entered. - -Related: left$, right$, mid$ - -& -lower$() - -Name: -lower$() -- convert a string to lower case - -Synopsis: -l$=lower$(a$) - -Description: -The lower$-function accepts a single string-argument and converts it to all lower case. - -Example: -input "Please enter a password: " a$ -if (a$=lower$(a$)) error "Your password is NOT mixed case!" -Explanation: - -This example prompts for a password and checks, if it is really lower case. - - -Related: upper$ - -& -ltrim$() - -Name: -ltrim$() -- trim spaces at the left end of a string - -Synopsis: -a$=ltrim$(b$) - -Description: -The ltrim$-function removes all whitespace from the left end of a string and returns the result. - -Example: -input "Please answer 'yes' or 'no' : " a$ -a$=lower$(ltrim$(rtrim$(a$))) -if (len(a$)>0 and a$=left$("yes",len(a$))) then - print "Yes ..." -else - print "No ..." -endif -Explanation: - -This example prompts for an answer and removes any spaces, which might precede the input; therefore it is even prepared for the (albeit somewhat patological case), that the user first hits space before entering his answer. - - -Related: rtrim$, trim$ - -& -rtrim$() - -Name: -rtrim$() -- trim spaces at the right end of a string - -Synopsis: -a$=rtrim$(b$) - -Description: -The rtrim$-function removes all whitespace from the right end of a string and returns the result. - -Example: -input "Please answer 'yes' or 'no' : " a$ -a$=lower$(ltrim$(rtrim$(a$))) -if (len(a$)>0 and a$=left$("yes",len(a$))) then - "Yes ..." -else - print "No ..." -endif -Explanation: - -This example prompts for an answer and removes any spaces, which might precede the input; therefore it is even prepared for the (albeit somewhat patological case), that the user first hits space before entering his answer. - - -Related: ltrim$, trim$ - -& -mid$() - -Name: -mid$() -- return (or change) characters from within a string - -Synopsis: -print mid$(a$,2,1) -print mid$(a$,2) -mid$(a$,5,3)="foo" -mid$(a$,5)="foo" - -Description: -The mid$-function requires three arguments: a string and two numbers, where the first number specifies a position within the string and the second one gives the number of characters to be returned; if you omit the second argument, the mid$-function returns all characters up to the end of the string. -Note, that you may assign to the mid$-function, i.e. mid$ may appear on the left hand side of an assignment. In this way it is possible to change a part of the variable used within the mid$-function. Note, that that way the length of the string cannot be changed, i.e. characters might be overwritten, but not added. For an example see below. - -Example: -input "Please enter a string: " a$ -for a=1 to len(a$) - if (instr("aeiou",lower$(mid$(a$,a,1)))) mid$(a$,a,1)="e" -next a -print "When you turn everything to lower case and" -print "replace every vowel with 'e', your input reads:" -print -print a$ -Explanation: - -This example transforms the input string a bit, using the mid$-function to retrieve a character from within the string as well as to change it. - - -Related: left$, right$ - -& -right$() - -Name: -right$() -- return (or change) the right end of a string - -Synopsis: -print right$(a$,2) -right$(b$,2)="baz" - -Description: -The right$-function requires two arguments (a string and a number) and returns the part from the right end of the string, whose length is specified by its second argument. So, right$ simply returns the requested number of chars from the right end of the given string. -Note, that the right$-function can be assigned to, i.e. it may appear on the left hand side of an assignment. In this way it is possible to change a part of the variable used within the right$-function. Note, that that way the length of the string cannot be changed, i.e. characters might be overwritten, but not added. For an example see below. - -Example: -print "Please enter a length either in inch or centimeter" -print "please add 'in' or 'cm' to mark the unit." -input "Length: " a$ -if (right$(a$,2)="in") then - length=val(a$)*2.56 -elsif (right$(a$,2)="cm") then - length=val(a$) -else - error "Invalid input: "+a$ -endif - -a$="Heiho World!" -print a$ -right$(a$,7)="dwarfs." -print a$ -Explanation: - -This program allows the user to enter a length qulified with a unit (either inch or centimeter). -The second example demonstrates the capability to assign to the right$-function. - - -Related: right$, mid$ - -& -split() - -Name: -split() -- split a string into many strings - -Synopsis: -dim w$(10) -... -num=split(a$,w$()) -num=split(a$,w$(),s$) - -Description: -The split-function requires a string (containing the text to be split), a reference to a string-array (which will receive the resulting strings, i.e. the tokens) and an optional string (with a set of characters, at which to split, i.e. the delimiters). - -The split-function regards its first argument (a string) as a list of tokens separated by delimiters and it will store the list of tokens within the array-reference you have supplied. Note, that the array, which is passed as a reference (w$() in the synopsis), will be resized accordingly, so that you don't have to figure out the number of tokens in advance. The element at position zero (i.e. w$(0)) will not be used. - -Normally (i.e. if you omit the third, which is the delimiter-argument) the function will regard space or tab as delimiters for tokens; however by supplying a third argument, you may split at any single of the characters within this string. E.g. if you supply ":;" as the third argument, then colon (:) or semicolon (;) will delimit tokens. -Note, that a sequence of separator-characters will produce a sequence of empty tokens; that way, the number of tokens returned will always be one plus the number of separator characters contained within the string. Refer to the closely related token-function, if you do not like this behaviour. In some way, the split-function focuses on the separators (other than the token-function, which focuses on the tokens), hence its name. - -The second argument is a reference on a string-array, where the tokens will be stored; this array will be expanded (or shrinked) to have room for all tokens, if necessary. -The first argument finally contains the text, that will be split into tokens. The split-function returns the number of tokens that have been found. - -Please see the examples below for some hints on the exact behaviour of the split-function and how it differs from the token-function: - -Example: -print "This program will help you to understand, how the" -print "split()-function exactly works and how it behaves" -print "in certain special cases." -print -print "Please enter a line containing tokens separated" -print "by either '=' or '-'" -dim t$(10) -do - print - input "Please enter a line: " l$ - num=split(l$,t$(),"=-") - print num," Tokens: " - for a=1 to num - if (t$(a)="") then - print "(EMPTY)" - else - print t$(a); - endif - if (a0 and a$=left$("no",len(a$)) exit -loop -Explanation: - -This example asks for an answer (yes or no) and removes spaces with trim$ to make the comparison with the string "no" more bulletproof. - - -Related: ltrim$, rtrim$ - -& -upper$() - -Name: -upper$() -- convert a string to upper case - -Synopsis: -u$=upper$(a$) - -Description: -The upper$-function accepts a single string argument and converts it to all upper case. - -Example: -line input "Please enter a sentence without the letter 'e': " l$ -p=instr(upper$(l$),"E") -if (p) then - l$=lower$(l$) - mid$(l$,p,1)="E" - print "Hey, you are wrong, see here!" - print l$ -else - print "Thanks." -endif -Explanation: - -This program asks for a sentence and marks the first (if any) occurence of the letter 'e' by coverting it to upper case (in contrast to the rest of the sentence, which is converted to lower case). - - -Related: lower$ - -& -val() - -Name: -val() -- converts a string to a number - -Synopsis: -x=val(x$) - -Description: -The val-function checks, if the start of its string argument forms a floating point number and then returns this number. The string therefore has to start with digits (only whitespace infront is allowed), otherwise the val-function returns zero. - -Example: -input "Please enter a length, either in inches (in) or centimeters (cm) " l$ -if (right$(l$,2)="in") then - l=val(l$)*2.51 -else - l=val(l$) -endif -print "You have entered ",l,"cm." -Explanation: - -This example queries for a length and checks, if it has been specified in inches or centimeters. The length is then converted to centimeters. - - -Related: str$ - -&Input and Output -& -at() - -Name: -at() -- can be used in the print-command to place the output at a specified position - -Synopsis: -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. -clear screen -... -print at(a,b) -print @(a,b) - -Description: -The at-clause takes two numeric arguments (e.g. at(2,3)) and can be inserted after the print-keyword. at() can be used only if clear screen has been executed at least once within the program (otherwise you will get an error). - -The two numeric arguments of the at-function may range from 0 to the width of your terminal minus 1, and from 0 to the height of your terminal minus 1; if any argument exceeds these values, it will be truncated accordingly. However, yab has no influence on the size of your terminal (80x25 is a common, but not mandatory), the size of your terminal and the maximum values acceptable within the at-clause may vary. To get the size of your terminal you may use the peek-function: peek("screenwidth") returns the width of your terminal and peek("screenheight") its height. - -Example: -clear screen -maxx=peek("screenwidth")-1:maxy=peek("screenheight")-1 -for x=0 to maxx - print at(x,maxy*(0.5+sin(2*pi*x/maxx)/2)) "*" -next x -Explanation: - -This example plots a full period of the sine-function across the screen. Start this program in a terminal. - - -Related: print, clear screen, color - -& -clear screen - -Name: -clear screen -- erases the text window - -Synopsis: -clear screen -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -Description: -clear screen erases the text window (the window where the output of print appears). -It must be issued at least once, before some advanced screen-commands (e.g. print at or inkey$) may be called; this requirement is due to some limititations of the curses-library, which is used by yab for some commands. - -Example: -clear screen -print "Please press a key : " -a$=inkey$ -print a$ -Explanation: - -The clear screen command is essential here; if it would be omitted, yab would issue an error ("need to call 'clear screen' first") while trying to execute the inkey$-function. - -Start this program in a terminal. - - -Related: inkey$ - -& -close - -Name: -close -- close a file, which has been opened before - -Synopsis: -close filenum -close # filenum -close -2 -close #-2 - -Description: - -The close-command closes an open file. You should issue this command as soon as you are done with reading from or writing to a file. - -close -2 closes all open files. -Example: - -all = -2 -open "my.data" for reading as 1 -input #1 a -print a -close all - -Explanation: - -This program opens the file "my.data", reads a number from it, prints this number and then closes all files. - - - -Related: open - -& -color - -Name: -color -- print with color - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -print color(fore$) text$ -print color(fore$,back$) text$ - -Description: -Not a seperate command, but part of the print-command; may be included just after print and can only be issued after clear screen has been executed. - -color() takes one or two string-arguments, specifying the color of the text and (optionally) the background. -The one or two strings passed to color() can be one of these: "black", "white", "red", "blue", "green", "yellow", "cyan" and "magenta" (which can be abbreviated as "bla", "whi", "red", "blu", "gre", "yel", "cya" and "mag" respectively). color() can only be used, if clear scren has been issued at least once. - -Note, that color() can be written as colour() too. - -Example: -clear screen -dim col$(7):for a=0 to 7:read col$(a):next a -do - print color(col$(ran(7)),col$(ran(7))) " Hallo " - pause 0.01 -loop -data "black","white","red","blue" -data "green","yellow","cyan","magenta" -Explanation: - -This prints the word " Hallo " in all colors accross your screen. -Start this program in a terminal. - -Related: print, clear screen, at - -& -colour - -Name: -colour -- see color - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -print colour(fore$) text$ -print colour(fore$,back$) text$ - -Description: -See color. - -Related: color - -& -eof - -Name: -eof -- check, if an open file contains data - -Synopsis: -open 1,"foo.bar" -if (eof(1)) then - ... -end if - -Description: -The eof-function checks, if there is still data left within an open file. As an argument it expects the file-number as returned by (or used within) the open-function (or statement). - -Example: -a=open("foo.bar") -while(not eof(a)) - input #a,a$ - print a$ -end while -Explanation: - -This example will print the contents of the file "foo.bar". The eof-function will terminate the loop, if there is no more data left within the file. - - -Related: open - -& -getscreen$() - -Name: -getscreen$() -- returns a string representing a rectangular section of the text terminal - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -a$=getscreen$(2,2,20,20) - -Description: -The getscreen$ function returns a string representing the area of the screen as specified by its four arguments (which specify two corners). I.e. everything you have printed within this rectangle will be encoded in the string returned (including any colour-information). -Like most other commands dealing with advanced text output, getscreen$ requires, that you have called clear screen before. - -Example: -clear screen - -for a=1 to 1000: - print color("red") "1" - print color("green") "2" - print color("blue") "3" -next a -screen$=getscreen$(10,10,40,10) -print at(10,10) " Please Press 'y' or 'n'! " -a$=inkey$ -putscreen screen$,10,10 -Explanation: - -This program fills the screen with coloured digits and afterwards asks the user for a choice ( Please press 'y' or 'n'! ). Afterwards the area of the screen, which has been overwritten by the question will be restored with its previous contents, whhch had been saved via getscreen$. - -Start this program in a terminal. - -Related: putscreen$ - -& -inkey$ - -Name: -inkey$ -- wait, until a key is pressed - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -clear screen -foo$=inkey$ -inkey$ -foo$=inkey$(bar) -inkey$(bar) - -Description: -The inkeys$-function waits, until the user presses a key on the keyboard or a button of his mouse, and returns this very key. An optional argument specifies the number of seconds to wait; if omitted, inkey$ will wait indefinitely. inkey$ may only be used, if clear screen has been called at least once. - -For normal keys, yab simply returns the key, e.g. a, 1 or !. For function keys you will get f1, f2 and so on. Other special keys will return these strings respectively: enter, backspace, del, esc, scrnup (for screen up), scrndown and tab. Modifier keys (e.g. ctrl, alt or shift) by themself can not be detected (however, if you press shift and e.g. a simultaniously, inkey$ will return the letter A instead of a of course). - -Example: -clear screen -print "Press any key or press 'q' to stop." -repeat - a$=inkey$ - print a$ -until(a$="q") -Explanation: - -This program simply returns the key pressed. You may use it, to learn, which strings are returned for the special keys on your keyboard (e.g. function-keys). - -Start this program in a terminal. - -Related: clear screen - -& -input - -Name: -input -- read input from the user (or from a file) and assign it to a variable - -Synopsis: -input a -input a,b,c -input a$ -input "Hello" a -input #1 a$ - -Description: -input reads the new contents of one or many (numeric- or string-) variables, either from the keyboard (i.e. from you) or from a file. An optional first string-argument specifies a prompt, which will be issued before reading any contents. - -If you want to read from an open file, you need to specify a hash ('#'), followed by the number, under which the file has been opened. - -Note, that the input is split at spaces, i.e. if you enter a whole line consisting of many space-seperated word, the first input-statement will only return the first word; the other words will only be returned on subsequent calls to input; the same applies, if a single input reads multiple variables: The first variable gets only the first word, the second one the second word, and so on. If you don't like this behaviour, you may use line input, which returns a whole line (including embedded spaces) at once. - -Example: -input "Please enter the name of a file to read: " a$ -open 1,a$ -while(!eof(1)) - input #1 b$ - print b$ -wend -Explanation: - -If this program is stored within a file test.yab and you enter this name when prompted for a file to read, you will see this output: - - -Please enter the name of a file to read: test.yab -input -"Please -enter -the -name -of -a -file -to -read: -" -a$ -open -1,a$ -while(!eof(1)) -input -#1 -b$ -print -b$ -wend - - - -Related: line input - -& -line input - -Name: -line input -- read in a whole line of text and assign it to a variable - -Synopsis: -line input a -line input a$ -line input "Hello" a -line input #1 a$ - -Description: -In most respects line input is like the input-command: It reads the new contents of a variable, either from keyboard or from a file. However, line input always reads a complete line and assigns it to its variable. line input does not stop reading at spaces and is therefore the best way to read in a string which might contain whitespace. Note, that the final newline is stripped of. - -Example: -line input "Please enter your name (e.g. Frodo Beutelin): " a$ -print "Hello ",a$ -Explanation: - -Note that the usage of line input is essential in this example; a simple input-statement would only return the string up to the first space, e.g. Frodo. - - -Related: input - -& -open - -Name: -open -- open a file - -Synopsis: -open a,"file","r" -open a, "File", "r+" -open #a,"file","w" -open "file" for reading as a -open "file" for writing as #a -a=open("file") -a=open("file","r") -if (open(a,"file")) ... -if (open(a,"file","w")) ... - -Description: -The open-command opens a file for reading or writing for printing text. open comes in a wide variety of ways; it requires these arguments:filenumber In the synopsis this is a or #a. In yab each file is associated with a number between 1 and a maximum value, which depends on the operating system. - -For historical reasons the filenumber can be preceded by a hash ('#'). Note, that specifying a filenumber is optional; if it is omitted, the open-function will return a filenumber, which should then be stored in a variable for later reference. This filenumber can be a simple number or an arbitrary complex arithmetic expression, in which case braces might be necessary to save yab from getting confused. - -filename -- In the synopsis above this is "file". This string specifies the name of the file to open (note the important caveat on specifying these filenames). -accessmode -- In the synopsis this is "r", "w", for reading or for writing. This string or clause specifies the mode in which the file is opened; it may be one of: "r" Open the file for reading (may also be written as for reading). If the file does not exist, the command will fail. This mode is the default, i.e. if no mode is specified with the open-command, the file will be opened with this mode. - -"r" -- Open the file for reading (may also be written as for reading). If the file does not exist, the command will fail. - -"r+" -- Open the file for reading and writing. If the file does not exist, it will be created. Writing is limited to poke, print #a will not work in this mode. - -"w" -- Open the file for writing (may also be written as for writing). If the file does not exist, it will be created. - -"a" -- Open the file for appending, i.e. what you write to the file will be appended after its initial contents. If the file does not exist, it will be created. - -"b" -- This letter may not appear alone, but may be combined with the other letters (e.g. "rb") to open a file in binary mode (as opposed to text mode). - -As you may see from the synopsis, the open-command may either be called as a command (without braces) or as a function (with braces). If called as a function, it will return the filenumber or zero if the operation fails. Therefore the open-function may be used within the condition of an if-statement. - -If the open-command fails, you may use peek("error") to retrieve the exact nature of the error. -Finally you may read the description for peek("error") to learn which errors may have happened during an open-call. - -Example: -open "foo.bar" for writing as #1 -print #1 "Hallo!" -close #1 -if (not open(1,"foo.bar")) error "Could not open 'foo.bar' for reading" -while(not eof(1)) - line input #1 a$ - print a$ -wend -Explanation: - -This example simply opens the file foo.bar, writes a single line, reopens it and reads its contents again. - - -Related: close, print, peek - -& -print - -Name: -print -- Write to terminal or file - -Synopsis: -print "foo",a$,b -print "foo","a$,b; -print #a "foo",a$ -print #a "foo",a$; -print foo using "##.###" -print reverse "foo" -print at(10,10) a$,b -print @(10,10) a$,b -print color("red","blue") a$,b -print color("magenta") a$,b -print color("green","yellow") at(5,5) a$,b - -Description: -The print-statement outputs strings or characters, either to your terminal (also known as console) or to an open file. - -To understand all those uses of the print-statement, let's go throught the various lines in the synopsis above:print "foo",a$,bPrint the string foo as well as the contents of the variables a$ and b onto the screen, silently adding a newline. - -print "foo",a$,b; -(Note the trailing semicolon!) This statement does the same as the one above; only the implicit newline is skipped, which means that the next print-statement will append seamlessly. - -print #a "foo",a$ -This is the way to write to files. The file with the number a must be open already, an implicit newline is added. Note the file-number #a, which starts with a hash ('#') amd is separated from the rest of the statement by a space only. The file-number (contained in the variable a) must have been returned by a previous open-statement (e.g. a=open("bar")). - -print #a "foo",a$; -The same as above, but without the implicit newline. - -print foo using "##.###" -Print the number foo with as many digits before and after the decimal dot as given by the number of '#'-signs. See the entries for using and str$ for a detailed description of this format. - -print reverse "foo" - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -As all the print-variants to follow, this form of the print-statement can only be issued after clear screen has been called. The strings and numbers after the reverse-clause are simply printed inverse (compared to the normal print-statement). - -print at(10,10) a$,b - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -Print at the specified (x,y)-position. This is only allowed after clear screen has been called. You may want to query peek$("screenwidth") or peek$("screenheight") to learn the actual size of your screen. You may add a semicolon to suppress the implicit newline. - -print @(10,10) a$,b -This is exactly the same as above, however, at may be written as @. - -print color("red","blue") at(5,5) a$,b -Print with the specified fore- ("red") and background ("blue") color (or colour). The possible values are "black", "white", "red", "blue", "green", "yellow", "cyan" or "magenta". Again, you need to call clear screen first and add a semicolon if you want to suppress the implicit newline. - -print color("magenta") a$,b -You may specify the foreground color only. - -print color("green","yellow") a$,b -A color and a position (in this sequence, not the other way around) may be specified at once. - -Example: -clear screen -columns=peek("screenwidth") -lines=peek("screenheight") -dim col$(7) -for a=0 to 7:read col$(a):next a -data "black","white","red","blue","green","yellow","cyan","magenta" - -for a=0 to 2*pi step 0.1 - print colour(col$(mod(i,8))) at(columns*(0.8*sin(a)+0.9)/2,lines*(0.8*cos(a)+0.9)/2) "*" - i=i+1 -next a -Explanation: - -This example draws a cloured ellipse within the text window. -Start this program in a terminal. - -Related: at, color, input, clear screen, using, ; - -& -putscreen - -Name: -putscreen -- draw a rectangle of characters into the text terminal - -Synopsis - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -clear screen -... -a$=getscreen$(5,5,10,10) -... -putscreen a$,7,7 - -Description: -The putscreen-command is the counterpart of the getscreen$-function. putscreen requires a string as returned by the getscreen-function. Such a string contains a rectangular detail from the terminal; the putscreen-function puts such a region back into the terminal-window. -Note, that clear screen must have been called before. - -Example: -clear screen -for a=1 to 200 - print color("red") "Hallo!" - print color("blue") "Welt!" -next a -r$=getscreen$(0,0,20,20) -for x=0 to 60 - putscreen r$,x,0 - sleep 0.1 -next x -Explanation: - -This example prints the string "Hallo!Welt!" all over the screen and then moves a rectangle from one side to the other. -Start this program in a terminal. - -Related: getscreen$, clear screen - -& -reverse - -Name: -reverse -- print reverse (background and foreground colors exchanged) - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -clear screen -... -print reverse "foo" - -Description: -reverse may be used to print text in reverse. reverse is not a seperate command, but part of the print-command; it may be included just after the print and can only be issued once that clear screen has been issued. - -Example: -clear screen - -print "1 " -c=3 -do - prim=true - for a=2 to sqrt(c) - if (frac(c/a)=0) then - prim=false - break - endif - next a - if (prim) then - print - print reverse c; - else - print c; - endif - print " " - c=c+1 -loop -Explanation: - -This program prints numbers from 1 on and marks each prime number in reverse. -Start this program in a terminal. - -Related: at, color, print, clear screen - -& -screen - -Name: -screen -- as clear screen clears the text window - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -clear screen - - -Description: -The keyword screen appears only within the sequence clear screen; please see there for a description. - -Related: clear screen - -& -seek() - -Name: -seek() -- change the position within an open file - -Synopsis: -open 1,"foo" -seek #1,q -seek #1,x,"begin" -seek #1,y,"end" -seek #1,z,"here" - -Description: -The seek-command changes the position, where the next input (or peek) statement will read from an open file. Usually files are read from the beginning to the end sequentially; however sometimes you may want to depart from this simple scheme. This can be done with the seek-command, allowing you to change the position, where the next piece of data will be read from the file. - -seek accepts two or three arguments: The first one is the number of an already open file. The second one is the position where the next read from the file will start. The third argument is optional and specifies the the point from where the position (the second argument) will count. It can be one of: - -begin -- Count from the beginning of the file. - -end -- Count from the end of the file. - -here -- Count from the current position within the file. - - -Example: -open #1,"count.dat","w" -for a=1 to 10 - print #1,"00000000" - if (a<10) print #1,"" -next a - -dim count(10) -do - x=int(ran(10)) - i=i+1 - if (mod(i,1000)=0) print "." - count(x)=count(x)+1 - curr$=right$("00000000"+str$(count(x)),8) - seek #1,9*x,"begin" - print #1,curr$; -loop -Explanation: - -This example increments randomly one of ten counters (in the array count()); however, the result is always kept and updated within the file count.dat, so even in case of an unexpected interrupt, the result will not be lost. - - -Related: tell, open, print, peek - -& -tell - -Name: -tell -- get the current position within an open file - -Synopsis: -open #1,"foo" - ... -position=tell(#1) - -Description: -The tell-function requires the number of an open file as an argument. It returns the position (counted in bytes, starting from the beginning of the file) where the next read will start. - -Example: -open #1,"foo","w" -print #1 "Hello World!" -close #1 - -open #1,"foo" -seek #1,0,"end" -print tell(#1) -close 1 -Explanation: - -This example (mis)uses tell to get the size of the file. The seek positions the file pointer at the end of the file, therefor the call to tell returns the total length of the file. - - -Related: tell, open - -& -using - -Name: -using -- Specify the format for printing a number - -Synopsis: -print a using "##.###" -print a using("##.###",",.") - -Description: -The using-keyword may appear as part of the print-statement and specifies the format (e.g. the number of digits before and after the decimal dot), which should be used to print the number. - -The possible values for the format argument ("##.###" in the synopsis above) are described within the entry for the str$-function; especially the second line in the synopsis (print a using("##.###",",.")) will become clear after referring to str$. In fact the using clause is closely related to the str$-function; the former can always be rewritten using the latter; i.e. print foo using bar$ is always equivalent to print str$(foo,bar$). Therefore you should check out str$ to learn more. - -Example: -for a=1 to 10 - print sqrt(ran(10000*a)) using "#########.#####" -next a -Explanation: - -This example prints a column of square roots of random number, nicely aligned at the decimal dot. - - -Related: print, str$ - -& -# - -Name: -# -- either a comment or a marker for a file-number - -Synopsis: -# This is a comment, but the line below not! -open #1,"foo" - -Description: -The hash ('#') has two totally unrelated uses:A hash might appear in commands related with file-io. yab uses simple numbers to refer to open files (within input, print, peek or eof). In those commands the hash may precede the number, which species the file. Please see those commands for further information and examples; the rest of this entry is about the second use (as a comment). - -As the very first character within a line, a hash introduces comments (similar to rem). -'#' as a comment is common in most scripting languages and has a special use under BeOS: If the very first line of any BeOS-program begins with the character sequence '#!' ("she-bang", no spaces allowed), the rest of the line is taken as the program that should be used to execute the script. I.e. if your yab-program starts with '#!/boot/home/config/bin/yab', the program /boot/home/config/bin/yab will be invoked to execute the rest of the program. - -Example: -# This line is a valid comment -print "Hello " : # But this is a syntax error, because -print "World!" : # the hash is not the first character! -Explanation: - -Note, that this example will produce a syntax error and is not a valid program! - - -Related: input, print, peek, eof, //, rem - -& -at() - -Name: -at() -- can be used in the print-command to place the output at a specified position - -Synopsis: - -*** requires ncurses support compiled in *** -See Documentation/Advanced for info. - -clear screen -... -print at(a,b) -print @(a,b) - -Description: -The at-clause takes two numeric arguments (e.g. at(2,3)) and can be inserted after the print-keyword. at() can be used only if clear screen has been executed at least once within the program (otherwise you will get an error). - -The two numeric arguments of the at-function may range from 0 to the width of your terminal minus 1, and from 0 to the height of your terminal minus 1; if any argument exceeds these values, it will be truncated accordingly. However, yab has no influence on the size of your terminal (80x25 is a common, but not mandatory), the size of your terminal and the maximum values acceptable within the at-clause may vary. To get the size of your terminal you may use the peek-function: peek("screenwidth") returns the width of your terminal and peek("screenheight") its height. - -Example: -clear screen -maxx=peek("screenwidth")-1:maxy=peek("screenheight")-1 -for x=0 to maxx - print at(x,maxy*(0.5+sin(2*pi*x/maxx)/2)) "*" -next x -Explanation: - -This example plots a full period of the sine-function across the screen. -Start this program in a terminal. - -Related: print, clear screen, color - -& -; - -Name: -; -- suppress the implicit newline after a print-statement - -Synopsis: -print "foo",bar; - -Description: -The semicolon (';') may only appear at the last position within a print-statement. It supresses the implicit newline, which yab normally adds after each print-statement. - -Put another way: Normally the output of each print-statement appears on a line by itself. If you rather want the output of many print-statements to appear on a single line, you should end the print-statement with a semicolon. - -Example: -print "Hello ":print "World!" -Explanation: - -This example prints Hello World! in a single line. - - -Related: print - -&Subroutines -& -end sub - -Name: -end sub -- ends a subroutine definition - -Synopsis: -sub foo(...) - ... -end sub - -Description: -Marks the end of a subroutine-definition (which starts with the sub-keyword). The whole concept of subroutines is explained within the entry for sub. -Example: -print foo(3) - -sub foo(a) - return a*2 -end sub -Explanation: - -This program prints out 6. The subroutine foo simply returns twice its argument. - - -Related: sub - -& -export - -Name: -export -- mark a function as globally visible - -Synopsis: -export sub foo(bar) -... -end sub - -Description: -The export-statement is used within libraries to mark a user defined subroutine as visible outside the library wherein it is defined. Subroutines, which are not exported, must be qualified with the name of the library, e.g. foo.baz (where foo is the name of the library and baz the name of the subroutine); exported subroutines may be used without specifying the name of the library, e.g. bar. - -Therefore export may only be useful within libraries. - -Example: -export sub bar() - print "Hello" -end sub - -sub baz() - print "World" -end sub -Explanation: - -The library foo.bar (which is listed above) defines two functions bar and baz, however only the function bar is exported and therefore visible even outside the library; baz is not exported and may only be used within the library foo.yab. - -Now within your main program cux.yab (which imports the library foo.yab); note that this program produces an error: - -import foo - -print "Calling subroutine foo.bar (okay) ..." -foo.bar() -print "done." - -print "Calling subroutine bar (okay) ..." -bar() -print "done." - -print "Calling subroutine foo.baz (okay) ..." -foo.baz() -print "done." - -print "Calling subroutine baz (NOT okay) ..." -baz() -print "done." - - -The output when executing yab foo.yab is this: - - -Calling subroutine foo.bar (okay) ... -Hello -done. -Calling subroutine bar (okay) ... -Hello -done. -Calling subroutine foo.baz (okay) ... -World -done. -Calling subroutine baz (NOT okay) ... ----Error in main.yab, line 16: can't find subroutine 'baz' ----Dump: sub baz() called in main.yab,16 ----Error: Program stopped due to an error - - -As the error message above shows, the subroutine baz must be qualified with the name of the library, if used outside the library, wherein it is defined (e.g. foo.baz. I.e. outside the library foo.yab you need to write foo.baz. baz alone would be an error. - -The subroutine bar (without adding the name of the library) however may (and probably should) be used in any program, which imports the library foo.yab. -Note: In some sense the set of exported subroutines constitutes the interface of a library. - - -Related: sub, import - -& -import - -Name: -import -- import a library - -Synopsis: -import foo - -Description: -The import-statment imports a library. It expects a single argument, which must be the name of a library (without the trailing .yab). This library will then be read and parsed and its subroutines (and variables) will be made available within the main program. - -Libraries will first be searched within the current directory (i.e. the directory within which you have invoked yab), then within the special directory /boot/home/config/settings/yab. The location of this second directory may be changed with the option -library. - -Example: -import lib - -rem This works ... -lib.x(0) - -rem This works too .. -x(1) - -rem And this. -lib.y(2) - -rem But this not! -y(3) -Explanation: - -Lets say you have a yab-program foo.yab, which imports a library lib.yab. - -Now the library lib.yab reads: - - -rem Make the subroutine x easily available outside this library -export sub x(a) - print a - return -end sub - -rem sub y must be referenced by its full name -rem outside this library -sub y(a) - print a - return -end sub - - -This program produces an error: - - -0 -1 -2 ----Error in foo.yab, line 13: can't find subroutine 'y' ----Dump: sub y() called in foo.yab,13 ----Error: Program stopped due to an error - - -As you may see from the error message, yab is unable to find the subroutine y without specifying the name of the library (i.e. lib.y). The reason for this is, that y, other than x, is not exported from the library lib.yab (using the export-statement). - - -Related: export, sub - -& -local - -Name: -local -- mark a variable as local to a subroutine - -Synopsis: -sub foo() - - local a,b,c$,d(10),e$(5,5) - - ... - -end sub - -Description: -The local-command can (and should be) used to mark a variable (or array) as local to the containing subroutine. This means, that a local variable in your subroutine is totally different from a variable with the same name within your main program. Variables which are known everywhere within your program are called global in contrast. -Declaring variables within the subroutine as local helps to avoid hard to find bugs; therefore local variables should be used whenever possible. - -Note, that the parameters of your subroutines are always local. - -As you may see from the example, local arrays may be created without using the keyword dim (which is required only for global arrays). - -Example: -a=1 -b=1 -print a,b -foo() -print a,b - -sub foo() - local a - a=2 - b=2 -end sub -Explanation: - -This example demonstrates the difference between local and global variables; it produces this output: -1 1 -1 2 -As you may see, the content of the global variable a is unchanged after the subroutine foo; this is because the assignment a=2 within the subroutine affects the local variable a only and not the global one. However, the variable b is never declared local and therefore the subroutine changes the global variable, which is reflected in the output of the second print-statement. - - -Related: sub, static, dim - -& -numparams - -Name: -numparams -- return the number of parameters, that have been passed to a subroutine - -Synopsis: -sub foo(a,b,c) - if (numparams=1) ... - ... -end sub - -Description: -Within a subroutine the local variable numparam or numparams contains the number of parameters, that have been passed to the subroutine. This information can be useful, because the subroutine may have been called with fewer parameters than actually declared. The number of values that actually have been passed while calling the subroutine, can be found in numparams. - -Note, that arguments which are used in the definition of a subroutine but are left out during a call to it (thereby reducing the value of numparams) receive a value of 0 or "" (empty string) respectively. - -Example: -a$="123456789" -print part$(a$,4) -print part$(a$,3,7) - -sub part$(a$,f,t) - if (numparams=2) then - return mid$(a$,f) - else - return mid$(a$,f,t-f+1) - end if -end sub -Explanation: - -When you run this example, it will print 456789 and 34567. Take a look at the subroutine part$, which returns part of the string which has been passed as an argument. If (besides the string) two numbers are passed, they define the starting and end position of the substring, that will be returned. However, if only one number is passed, the rest of the string, starting from this position will be returned. Each of these cases is recognized with the help of the numparams variable. - - -Related: sub - -& -return - -Name: -return -- return from a subroutine or a gosub - -Synopsis: -gosub foo -... -label foo -... -return - -sub bar(baz) - ... - return quertz -end sub - -Description: -The return-statement serves two different (albeit somewhat related) purposes. The probably more important use of return is to return control from within a subroutine to the place in your program, where the subroutine has been called. If the subroutine is declared to return a value, the return-statement might be accompanied by a string or number, which constitutes the return value of the subroutine. - -However, even if the subroutine should return a value, the return-statement need not carry a value; in that case the subroutine will return 0 or the empty string (depending on the type of the subroutine). Moreover, feel free to place multiple return-statements within your subroutine; it's a nice way of controlling the flow of execution. -The second (but historcially first) use of return is to return to the position, where a prior gosub has left off. In that case return may not carry a value. - -Example: -do - read a$ - if (a$="") then - print - end - endif - print mark$(a$)," " -loop - -data "The","quick","brown","fox","jumped" -data "over","the","lazy","dog","" - -sub mark$(a$) - if (instr(lower$(a$),"q")) return upper$(a$) - return a$ -end sub -Explanation: - -This example features a subroutine mark$, that returns its argument in upper case, if it contains the letter "q", or unchanged otherwise. In the test-text the word quick will end up beeing marked as QUICK. -The example above demonstrates return within subroutines; please see gosub for an example of how to use return in this context. - - -Related: sub, gosub - -& -static - -Name: -static -- preserves the value of a variable between calls to a subroutine - -Synopsis: -sub foo() - - static a - - ... - -end sub - -Description: -The static keyword can be used within subroutines to mark variables as static. This has two effects: First, the variable is local to the subroutine, i.e. its value is not know outside the subroutine (this is the effect of the local keyword). Second, the static-keyword arranges things, so that the variable keeps its value between invocations of the subroutine (this is different from the local-keyword). - -Example: -foo() -foo() -foo() - -sub foo() - static a - local b - a=a+1 - b=b+1 - print a,b -end sub -Explanation: - -This program shows the difference between static and local variables within a subroutine; it produces this output: - - -1 1 -2 1 -3 1 - - -The output shows, that the static variable a keeps its value between subroutine calls, whereas b is initialized with the value 0 at every call to the subroutine foo. - - -Related: sub, local - -& -sub - -Name: -sub -- declare a user defined subroutine - -Synopsis: -foo(2,"hello") - -... - -sub foo(bar,baz$) - ... - return qux - ... -end sub - -Description: -The sub-keyword starts the definition of a user defined subroutine. With user defined subroutines you are able to somewhat extend yab with your own commands or functions. A subroutine accepts arguments (numbers or strings) and returns a number or a string (however, you are not required to assign the value returned to a variable). The name of the subroutine follows after the keyword sub. If the name (in the synopsis: foo) ends on a '$', the subroutine should return a string (with the return-statement), otherwise a number. - -After the name of the subroutine yab requires a pair of braces; within those braces you may specify a list of parameters, for which values can (but need not) be included when calling the subroutine. If you omit one of those parameters when calling such a subroutine, it assumes the value zero (for numeric parameters) or the empty string (for string parameters). However with peek("argument") you may find out, how many arguments have really been passed while calling the subroutine. - -Parameters of a subroutine are always local variables (see the keyword local for more explanation). -From within the subroutine you may return any time with the keyword return; along with the return-keyword you may specify the return value. Note that more than one return is allowed within a single subroutine. - -Finally, the keyword end sub ends the subroutine definition. Note, that the definition of a subroutine need not appear within the program before the first call to this sub. - -Note: As braces have two uses in yab (i.e. for supplying arguments to a subroutine as well as to list the indices of an array). yab can not tell apart an array from a subroutine with the same name. Therefore you cannot define a subroutine with the same name as an array! - -Example: -p=2 -do - if (is_prime(p)) print p - p=p+1 -loop - -sub is_prime(a) - local b - for b=2 to sqrt(a) - if (frac(a/b)=0) return false - next b - return true -end sub -Explanation: - -This example is not the recommended way to compute prime numbers. However it gives a nice demonstration of using a subroutine. - - -Related: local, static, peek - -&System -&Attributes -& -attribute clear - -Name: -attribute clear -- Deletes an attrinbute from a file. - -Synopsis: -attribute clear Name$, Filename$ - -Description: - -Delete the attribute Name$ from file Filename$. - -Related: attribute set, attribute get, attribute get$ -& -attribute get - -Name: -attribute get -- Get the number value of the attribute. - -Synopsis: - -Value = ATTRIBUTE GET Name$, Filename$ - -Description: - -Value = ATTRIBUTE GET Name$, Filename$ - Get the number value of the attribute Name$ for file Filename$. - For "Bool" type attributes: - Value = 1|0 - -Example: - -attribute set "bool","Saved", "false", "foobar" - -if (attribute get "Saved","foobar") then -print "foobar is saved" -else -print "foobar is not saved" -end if - -Explanation: - -This example saves a false (0) attribute named Saved on the file "foobar" then checks to see if the Saved attribute is true(1) or false(0) and prints the result. in this case "foobar is not saved." - -Related: attribute clear, attribute set, attribute get$ -& -attribute get$ - -Name: - -attribute get$ -- Get the string value of an attribute. - -Synopsis: - -Value$ = ATTRIBUTE GET$ Name$, Filename$ - Get the string value of the attribute Name$ for file Filename$. - For "Bool" type attributes: - Value$ ="true|false" - To get a list of attribute names and their types separated by " | ": - Name$ = "" - To get the current program directory: - Name$ = "" and Filename$= "" - -Description: - -Gets the string value of an attribute, or the list of attributes attatched to a file, or the directory that the program was executed from. - -If the attribute is a bool type, the string returned is "true" or "false" - -If the attribute name is "" a list of attributes attatched to the file is returned. - -if both the attribute name and filename are "", the current program directory is returned. - -Example: - -dir$ = attribute get$ "","" -dir$=dir$+"/" - -attribute set "string","attribute1", "This is the first attribute,", dir$+"foobar" -attribute set "int","attribute2", "127", dir$+"foobar" -attribute set "bool", "attribute3", "false", dir$+"foobar" -a$=attribute get$ "", dir$+"foobar" -print a$ -a$=attribute get$ "attribute1", dir$+"foobar" -print "attribute1 \""+a$+"\"" - - -Output: - -attribute1 | String | attribute2 | Int | attribute3 | Bool | -attribute1 "This is the first attribute." - - -Explanation: - -This program uses attrribute get$ to find the program directory, then saves three attributes to the file foobar located in the program directory. Next it gets and prints a list of the attribute names and types associated with the file, then it prints the contents of attribute1. - -Related: attribute clear, attribute set, attribute get -& -attribute set - -Name: - -attribute set -- sets ( adds or overwrites ) an attribute of a file. - - -Synopsis: - -ATTRIBUTE SET Type$, Name$, Value$, Filename$ - Set the attribute Name$ of type Type$ for the file Filename$ with the string Value$. - These are valid types: - Type$ = "String|Int|Long|Double|Float|Mime|Bool" - For Bool type attributes: - Value$ = "true|false" - -Description: - -Attribute set sets, adds or overwrites, file attributes. The attributes can be strings, integer, long.double, or float numbers, or boolian true/false. - - -Related: attribute clear, attribute get, attribute get$ -& -bind() - -Name: -bind() -- Binds a yab-program and the yab-interpreter together into a standalone program. - -Synopsis: -bind("foo.exe") - -Description: -The bind-command combines your own yab-program (plus all the libraries it does import) and the interpreter by copying them into a new file, whose name is passed as an argument. This new program may then be executed on any computer, even if it does not have yab installed. - -Note: With the current version of yab, bind should not be used anymore, use the Build Factory instead. - -Example: -if (!peek("isbound")) then - bind "foo" - print "Successfully created the standalone executable 'foo'!" - exit -endif - -print "Hello World!" -Explanation: - -This example creates a standalone program foo from itself. - - -Related: peek -& -clipboard copy - -Name: -clipboard copy -- copy a string to the clipboard - -Synopsis: -CLIPBOARD COPY Text$ - -Description: -Clipboard copy simply copies the string Text$ to the system clipboard. Note: This will overwrite all text currently stored in the clipboard. - -Example: -print "This is the content of the clipboard: "+clipboard paste$ -print "Now we copy \"Foo Bar\" to the clipboard" -clipboard copy "Foo Bar" -print "This is the content of the clipboard: "+clipboard paste$ -Explanation: - -The example will first display whatever is written in the clipboard (might be empty too), and then copies the string "Foo Bar" to the clipboard. Another output shows, it actually worked. - -Related: clipboard paste$ -& -clipboard paste$ - -Name: -clipboard paste$ -- read out the clipboard - -Synopsis: -Text$ = CLIPBOARD PASTE$ - -Description: -This command will read out ("paste") the content of the system clipboard. - -Example: -print "This is the content of the clipboard: "+clipboard paste$ -print "Now we copy \"Foo Bar\" to the clipboard" -clipboard copy "Foo Bar" -print "This is the content of the clipboard: "+clipboard paste$ -Explanation: - -The example will first display whatever is written in the clipboard (might be empty too), and then copies the string "Foo Bar" to the clipboard. Another output shows, it actually worked. - -Related: clipboard copy -& -compile - -Name: -compile -- compile a string with yab-code on the fly - -Synopsis: -compile(code$) - -Description: -This is an advanced command (closely related with the execute-command). It allows you to compile a string of yab-code (which is the only argument). Afterwards the compiled code is a normal part of your program. -Note, that there is no way to remove the compiled code. - -Example: -compile("sub mysub(a):print a:end sub") -mysub(2) -Explanation: - -This example creates a function named mysub, which simply prints its single argument. - - -Related: execute - -& -date$ - -Name: -date$ -- returns a string with various components of the current date - -Synopsis: -a$=date$ - -Description: -The date$-function (which must be called without parantheses; i.e. date$() would be an error) returns a string containing various components of a date; an example would be 4-05-27-2004-Thu-May. This string consists of various fields seperated by hyphens ("-"):The day within the week as a number in the range 0 (=sunday) to 6 (=saturday) (in the example above: 4, i.e. thursday). - -The month as a number in the range 1 (=january) to 12 (=december) (in the example: 5 which stands for may). -The day within the month as a number in the range 1 to 31 (in the example: 27). -The full, 4-digit year (in the example: 2004, which reminds me that I should adjust the clock within my computer ...). -The abbreviated name of the day within the week (Mon to Sun). -The abbreviated name of the month (Jan to Dec). - -Therefore the whole example above (4-05-27-2004-Thu-May) would read: day 4 in the week (counting from 0), May 27 in the year 2004, which is a thursday in May. -Note, that all fields within the string returned by date$ have a fixed with (numbers are padded with zeroes); therefore it is easy to extract the various fields of a date format with mid$. - -Example: -rem Two ways to print the same ... - -print mid$(date$,3,10) - -dim fields$(6) -a=split(date$,fields$(),"-") -print fields$(2),"-",fields$(3),"-",fields$(4) -Explanation: - -This example shows two different techniques to extract components from the value returned by date$. The mid$-function is the preferred way, but you could just as well split the return-value of date$ at every "-" and store the result within an array of strings. - - -Related: time$ - -& -doc - -Name: -doc -- special comment, which might be retrieved by the program itself - -Synopsis: -doc This is a comment -docu This is another comment - -Description: -Introduces a comment, which spans up to the end of the line. But other than the rem-comment, any docu-comment is collected within the special docu$-array and might be retrieved later on. Moreover you might invoke yab -docu foo.yab on the commandline to retrieve the embedded documentation within the program foo.yab. -Instead of doc you may just as well write docu or even documentation. - -Example: -rem Hi, this has been written by me -rem -doc This program asks for a number and -doc prints this number multiplied with 2 -rem -rem Print out rhe above message -for a=1 to arraysize(docu$()):print docu$(a):next a - -rem Read and print the number -input "Please input a number: " x -print x*2 -Explanation: - -This program uses the comments within its code to print out a help message for the user. -The contents of the doc-lines are retrieved from the docu$-array; if you do not want a comment to be collected within this array, use the rem-statement instead. - - -Related: docu$, rem - -& -docu$ - -Name: -docu$ -- special array, containing the contents of all docu-statement within the program - -Synopsis: -a$=docu$(1) - -Description: -Before your program is executed, yab collects the content of all the doc-statements within your program within this 1-dimensional array (well only those within the main-program, libraries are skipped). -You may use the arraysize function to find out, how many lines it contains. - -Example: -docu -docu This program reads two numbers -docu and adds them. -docu - -rem retrieve and print the embedded documentation -for a=1 to arraysize(docu$(),1) - print docu$(a) -next a - -input "First number: " b -input "Second number: " c - -print "The sum of ",b," and ",c," is ",b+c -Explanation: - -This program uses the embedded documentation to issue a usage-message. - - -Related: arraydim, rem - -& -error - -Name: -error -- raise an error and terminate your program - -Synopsis: -error "Wrong, wrong, wrong!!" - -Description: -Produces the same kind or error messages, that yab itself produces (e.g. in case of a syntax-error). The single argument is issued along with the current line-number. - -Example: -input "Please enter a number between 1 and 10: " a -if (a<1 or a>10) error "Oh no ..." -Explanation: - -This program is very harsh in checking the users input; instead of just asking again, the program terminates with an error, if the user enters something wrong. -The error message would look like this: - - ----Error in t.yab, line 2: Oh no ... ----Error: Program stopped due to an error - - - -& -execute$() - -Name: -execute$() -- execute a user defined subroutine, which must return a string - -Synopsis: -print execute$("foo$","arg1","arg2") - -Description: -execute$ can be used to execute a user defined subroutine, whose name may be specified as a string expression. -This feature is the only way to execute a subroutine, whose name is not known by the time you write your program. This might happen, if you want to execute a subroutine, which is compiled (using the compile command) during the course of execution of your program. -Note however, that the execute$-function is not the preferred method to execute a user defined subroutine; almost all cases you should just execute a subroutine by writing down its name within your yab program (see the example). - -Example: -print execute$("foo$","Hello","world!") -sub foo$(a$,b$) - return a$+" "+b$ -end sub -Explanation: - -The example simply prints Hello world!, which is the return value of the user defined subroutine foo$. The same could be achieved by executing: - - -print foo$(a$,b$) - - - -Related: compile, execute - -& -execute() - -Name: -execute() -- execute a user defined subroutine, which must return a number - -Synopsis: -print execute("bar","arg1","arg2") - -Description: -The execute-function is the counterpart of the execute$-function (please see there for some caveats). execute executes subroutines, which returns a number. - -Example: -print execute("bar",2,3) -sub bar(a,b) - return a+b -end sub -Related: compile, execute$ - -& -exit - -Name: -exit -- terminate your program - -Synopsis: -exit -exit 1 - -Description: -Terminate your program and return any given value to the operating system. exit is similar to end, but it will terminate your program immediately, no matter what. - -Example: -print "Do you want to continue ?" -input "Please answer y(es) or n(o): " a$ -if (lower$(left$(a$,1))="n") exit 1 -Related: end - -& -iscomputeron - -Name: -iscomputeron -- tells you whether the computer is on - -Synopsis: -IsItTurnedOn = ISCOMPUTERON - -Description: -Returns 1 if the computer is on. If the computer isn't on, the value returned by this function is undefined. - -Example: -print "This program will run until the computer is shut down :)" -while(iscomputeron) -wend -Explanation: - -Iscomputeron looks nice for endless loops. - -& -pause - -Name: -pause -- pause, sleep, wait for the specified number of seconds - -Synopsis: -pause 5 - -Description: -The pause-command has many different names: You may write pause, sleep or wait interchangable; whatever you write, yab will always do exactly the same. - -The pause-command will simply wait for the specified number of seconds. This may be a fractional number, so you may well wait less than a second. However, if you try to pause for a smaller and smaller interval (e.g. 0.1 seconds, 0.01 seconds, 0.001 seconds and so on) you will find that at some point yab will not wait at all. -The pause-command cannot be interrupted. However, sometimes you may want the wait to be interuptible by simply pressing a key on the keyboard. In such cases you should consider using the inkey$-function, with a number of seconds as an argument). - -Example: -deg=0 -do - maxx=44+40*sin(deg) - for x=1 to maxx - print "*" - next x - pause 0.1+(maxx*maxx/(4*84*84)) - print - deg=deg+0.1 -loop -Explanation: - -This example draws a sine-curve; due to the pause-statement the speed of drawing varies in the same way as the speed of a ball might vary, if it would roll along this curve under the influence of gravity. - - -Related: sleep, wait - -& -peek - -Name: -peek -- retrieve internal information - -Synopsis: -print peek("foo") -a=peek(#1) - -Description: -The peek-function has many different and mostly unrelated uses. It is a kind of grabbag for retrieving all kinds of numerical information, internal to yab. The meaning of the numbers returned be the peek-function depends on the string or number passed as an argument. - -peek always returns a number, however the closely related peek$-function exists, which may be used to retrieve string information from among the internals of yab. Finally note, that some of the values which are retrieved with peek may even be changed, using the poke-function. - -There are two variants of the peek-function: One expects an integer, positive number and is described within the first entry of the list below. The other variant expects one of a well defined set of strings as described in the second and all the following entries of the list below. - -peek(a), peek(#a) -Read a single character from the file a (which must be open of course). - -peek("screenheight") -Return the height in characters of the window, wherein yab runs. This will return 25. With ncurses support compiled in, if you have not called clear screen yet, this peek will return 0, regardless of the size of your terminal. - -peek("screenwidth") -Return the width in characters of the window, wherein yab runs. This will return 80. With ncurses support compiled in, if you have not called clear screen yet, this peekwill return 0, regardless of the size of your terminal. - -peek("desktopheight") -Return the height in pixels of the curent Desktop. - -peek("desktopwidth") -Return the width in pixels of the curent Desktop. - -peek("menuheight") -Return the height in pixels based on the font for a menu. - -peek("scrollbarwidth") -Return the width in pixels for a virtical scrollbar. - -peek("tabheight") -Return the height in pixels based on the font for a tabview tab. - -peek("argument") -Return the number of arguments, that have been passed to yab at invocation time. E.g. if yab has been called like this: - yab foo.yab bar baz -then peek("argument") will return 2. This is because foo.yab is treated as the name of the program to run, whereas bar and baz are considered arguments to the program, which are passed on the commandline. The function peek("argument") can be written as peek("arguments") too. -You will want to check out the corresponding function peek$("argument") to actually retrieve the arguments. Note, that each call to peek$("argument") reduces the number returned by peek("argument"). - -peek("isbound") -Return true, if the executing yab-program is part of a standalone program; see the section about creating a standalone-program for details. - -peek("version") -Return the version number of yab (e.g. 1). - -peek("error") -Return a number specifying the nature of the last error in an open- or seek-statement. Normally an error within an open-statement immediately terminates your program with an appropriate error-message, so there is no chance and no need to learn more about the nature of the error. However, if you use open as a condition (e.g. if (open(#1,"foo")) ...) the outcome (success or failure) of the open-operation will determine, if the condition evaluates to true or false. If now such an operation fails, your program will not be terminated and you might want to learn the reason for failure. This reason will be returned by peek("error") (as a number) or by peek$("error") (as a string)The table below shows the various error codes; the value returned by peek$("error") explains the nature of the error. Note, that the codes 10,11 and 12 refer to the seek-command. - -Error codes - -peek("error")| peek$("error") | Explanation -2 Stream already in use Do not try to open one and the same - filenumber twice; rather close it first. - -3 'x' is not a valid filemode The optional filemode argument, which may - be passed to the open-function, has an - invalid value - -4 could not open 'foo' The open-call did not work, no further - explanation is available. - -5 reached maximum number - of open files You have opened more files than your - operating system permits. - -9 invalid stream number An attempt to use an invalid - (e.g. negative) stream number; - example: open(-1,"foo") - -10 could not position stream x - to byte y seek did not work. - -11 stream x not open You have tried to seek within a stream, - that has not been opened yet. - -12 seek mode 'x' is none of - begin,end,here The argument, which has been passed to - seek is invalid. - -Example: -open "foo" for reading as #1 -open "bar" for writing as #2 -while(not eof(#1)) - poke #2,chr$(peek(#1)); -wend -Explanation: - -This program will copy the file foo byte by byte to bar. -Note, that each peek does something entirely different, and only one has been demonstratedabove. Therefore you need to make up examples yourself for all the other peeks. - - -Related: peek$, poke, open - -& -peek$ - -Name: -peek$ -- retrieve internal string-information - -Synopsis: -print peek$("foo") - -Description: -The peek$-function has many different and unrelated uses. It is a kind of grabbag for retrieving all kinds of string information, internal to yab; the exact nature of the strings returned be the peek$-function depends on the string passed as an argument. - -peek$ always returns a string, however the closely related peek-function exists, which may be used to retrieve numerical information from among the internals of yab. Finally note, that some of the values which are retrieved with peek$ may even be changed, using the poke-function. - -The following list shows all possible arguments to peek$:peek$("infolevel")Returns either "debug", "note", "warning", "error" or "fatal", depending on the current infolevel. This value can be specified with an option on the commandline or changed during the execution of the program with the corresponding poke; however, normally only the author of yab would want to change this from its default value "warning". - -peek$("error") -Return a string describing the nature of the last error in an open- or seek-statement. See the corresponding peek("error") for a detailed description. - -peek$("library") -Return the name of the library, this statement is contained in. See the import-command for a detailed description or for more about libraries. - -peek$("os") -This peek returns the name of the operating system, on wich your yab version was compiled. This version of yab can only return "Haiku" as it can only run on Haiku. If there are future variants of Haiku, This should identify the variant. - -peek$("env","NAME") -Return the environment variable specified by NAME (which may be any string expression). Which kind of environment variables are available on your system depends, as well as their meaning, on your system; however typing env on the commandline will produce a list. Note, that peek$("env",...) can be written as peek$("environment",...) too. - -peek$("refsreceived") -Returns TrackerItem which you used 'open with...' your application on, or the path and name of the file that was double-clicked. The double-clicked file must have an attribute "BEOS:PREF_APP" set to the yab applications signature and the this application signature must be registered in the FileTypes prefflet. - -Save a data file and then use : -ATTRIBUTE SET "Mime:, "BEOS:PREF_APP", "application/x-vnd.yourcool-app", Filename$ - -Where "application/x-vnd.yourcool-app" is the apoplication signature and Filename$ is the name of the data file. Double-clicking the data file will open the yab application. peek$("refsreceived") will return this data file pathame. - -peek$("argument") -Return one of the arguments, that have been passed to yab at invocation time (the next call will return the the second argument, and so on). E.g. if yab has been called like this: yab foo.yab bar baz, then the first call to peek$("argument") will return bar. This is because foo.yab is treated as the name of the program to run, whereas bar and baz are considered arguments to this program, which are passed on the commandline. The second call to peek$("argument") will return baz. Note, that peek$("argument") can be written as peek$("arguments"). -Finally you will want to check out the corresponding function peek("argument"). - -Example: -print "You have supplied these arguments: " -while(peek("argument")) - print peek("argument"),peek$("argument") -wend - -Explanation: - -If you save this program in a file foo.yab and execute it via yab t.yab a b c, your will get this output: - -3a -2b -1c - -Related: peek, poke, open - -& -poke - -Name: -poke -- change selected internals of yab - -Synopsis: -poke "foo","bar" -poke "foo",baz -poke #a,"bar" -poke #a,baz - -Description: -The poke-command may be used to change details of yabs behaviour. Like the related function peek, poke does many different things, depending on the arguments supplied. - -Here are the different things you can do with poke:poke "infolevel","debug"Change the amount of internal information, that yab outputs during execution. -The second argument can be either "debug", "note", "warning", "error" or "fatal". However, normally you will not want to change this from its default value "warning". See also the related peek$("infolevel"). - -poke #1,a -Write the given byte (a in the example above) to the specified stream (#a in the example). - -See also the related function peek(#1). - -Example: -print "Hello, now you will see, how much work" -print "a simple for-loop involves ..." -input "Please press return " a$ -poke "infolevel","debug" -for a=1 to 10:next a -Explanation: - -This example only demonstrates one of the many pokes, which are described above: The program switches the infolevel to debug, which makes yab produce a lot of debug-messages during the subsequent for-loop. - - -Related: peek, peek$ - -& -rem - -Name: -rem -- start a comment - -Synopsis: -rem Hey, this is a comment - # this is a comment too -// even this -print "Not a comment" # This is an error!! -print "Not a comment":// But this is again a valid comment -print "Not a comment" // even this. -print "Not a comment" rem and this! - -Description: -rem introduces a comment (like # or //), that extends up to the end of the line. -Those comments do not even need a colon (':' infront of them); they (rem, # and //) all behave alike except for #, which may only appear at the very beginning of a line; therefore the fourth example in the synopsis above (print "Not a comment" # This is an error!!) is indeed an error. -Note, that rem is an abbreviation for remark. remark however is not a valid command in yab. -Finally note, that a comment intoduced with '#' may have a special meaning under BeOS; see the entry for # for details. - -Example: -# -rem comments on data structures -# are more useful than -// comments on algorithms. -rem -Explanation: - -This program does nothing, but in a splendid and well commented way. - - -Related: #, // - -& -sleep - -Name: -sleep -- pause, sleep, wait for the specified number of seconds - -Synopsis: -sleep 4 - -Description: -The sleep-command has many different names: You may write pause, sleep or wait interchangable; whatever you write, yab will always do exactly the same. -Therefore you should refer to the entry for the pause-function for further information. - -& -system$() - -Name: -system$() -- hand a statement over to your operating system and return its output - -Synopsis: -print system$("dir") - -Description: -The system$-command accepts a single string argument, specifying a command, that can be found and executed by your operating system. It returns the output of this command as one big string. - -Example: -input "Please enter the name of a directory: " d$ -print -print "This is the contents of the '"+d$+"':" -print system$("ls -l "+d$) -Explanation: - -This example lists the contents of a directory, employing the ls-command. - - -Related: system - -& -system() - -Name: -system() -- hand a statement over to your operating system and return its exitcode - -Synopsis: -ret=system("foo") -system("bar") - -Description: -The system-command accepts a single string argument, which specifies a command to be executed. The function will return the exitcode of the command; its output (if any) will be lost. - -Example: -print "Please enter the name of the file, that should be deleted." -input f$ -if (system("rm "+f$+" >/dev/null 2>&1")) then - print "Error!" -else - print "okay." -endif -Explanation: - -This program uses the commandline command rm to remove a file. - -Related: system$ - -& -thread get - -Name: -thread get -- get the thread identification for a team or program - -Synopsis: -Id = THREAD GET Option$, Program$ - -Description: -For more advanced control of the running threads, this command provides you with ID a given program named Program$. Option$ can be set as follows: - -Option$ = "TeamID" -- returns the team ID for the program named Program$. Specify the whole path with parameters (only the first 64 characters are important) for the team, the ID of the first team with this path and parameters will be returned. - -Option$ = "ThreadID" -- returns the thread ID for the program named Program$. Specify the program name, the ID of the first thread with this name will be returned. - -Thread get will return -1 when the program was not found. This helps you to find out whether a program e.g. started with the system command is still running or not. - -Note: Using thread get is much better than trying to parse "ps" from the command line. - -Example: -print thread get "teamid", "/boot/home/config/bin/yab" -print thread get "threadid", "yab" -Explanation: - -The first statement prints the team ID number of the first yab program running. The second statement prints the first thread ID of the first yab program running. Note: The team ID takes the whole path while the thread ID only takes the program name. - -Related: thread remove -& -thread remove - -Name: -thread remove -- kill a running thread or team - -Synopsis: -Success = THREAD REMOVE Option$, ID - -Description: -For a given ID this command kills either the team or the thread. Thus Option$ is either "TeamID" or "ThreadID". If the team or thread was killed successfully Success is set to true, otherwise it is set to false. - -Note: You can crash your system with this command! If you do not know what this command is meant for, then do not use it! - -Example: -id = thread get "teamid", "/boot/home/config/bin/yab kamikaze.yab" -print "Commiting suicide..." -success = thread remove "teamid", id -print "This line is never reached." -Explanation: - -Save this example in the file kamikaze.yab and start it from the command line (not from the IDE). It first gets the ID from itself and then kills its own team. Thus the last print command is not executed anymore. This is a very unelegant way to exit. - -Related: thread get -& -time$ - -Name: -time$ -- return a string containing the current time - -Synopsis: -print time$ -print time$() - -Description: -The time$ function returns the current time in four fields separated by hyphens '-'. The fields are:The current hour in the range from 0 to 23, padded with zeroes (e.g. 00 or 04) to a length of two characters. - -The number of minutes, padded with zeroes. -The number of seconds, padded with zeroes. -The number of seconds, that have elapsed since the program has been started. This value encreases as long as your program runs and is therefore unbound and not padded with zeroes. - -At the time of writing this documentation, time$ returns 22-58-53-0. Note, that the first three of the four fields returned by time$ have a fixed width; therefore it is easy to extract some fields with the usual string-functions mid$ (and others). - -Example: -print "Hello it is ",time$ -print "An empty for-loop with ten million iterations takes " -s=val(mid$(time$,10)) -for a=1 to 10000000:next a -e=val(mid$(time$,10)) -print e-s," seconds" -Explanation: - -This program benchmarks the for-loop and uses the fourth field of the string returned by time$. - - -Related: date$ - -& -to - -Name: -to -- this keyword appears as part of other statements - -Synopsis -for a=1 to 100 step 2 - ... -next a -draw line x,y to a,b, View$ - -Description: -The to-keyword serves two purposes (which are not related at all):within for-statements, to specify the upper bound of the loop. -Within any graphical command (e.g. line), that requires two points (i.e. four numbers) as arguments, a comma ',' might be replaced with the keyword to. I.e. instead of 100,100,200,200 you may write 100,100 to 200,200 in such commands. - -Related: for, draw line, view - -& -// - -Name: -// -- starts a comment - -Synopsis: -// This is a comment! - -Description: -The double-slash ('//') is (besides REM and '#') the third way to start a comment. '//' is the latest and greatest in the field of commenting and allows yab to catch up with such cool languages like C++ and Java. - -Example: -// Another comment. -print "Hello world!" // Another comment -Explanation: - -Unlike the example given for '#' this example is syntactically correct and will not produce an error. - - -Related: #, rem - -& -: - -Name: -: -- separate commands from each other - -Synopsis: -print "Hello ":print "World" - -Description: -The colon (':') separates multiple commands on a single line. -The colon and the newline-character have mostly the same effect, only that the latter, well, starts a new line too. The only other difference is their effect within the (so-called) short if, which is an if-statement without the keyword then. Please see the entry for if for more details. - -Example: -if (a<10) print "Hello ":print "World!" -Explanation: - -This example demonstrates the difference between colon and newline as described above. - - -Related: if - -&GUI -&Bitmaps -& -bitmap - -Name: -bitmap -- creates a bitmap in memory - -Synopsis: -BITMAP Width, Height, ID$ - -Description: -Bitmap creates a new bitmap in memory. A bitmap can be drawn on like a view or canvas. A bitmap is always initialized with a white transparent background - -Related: bitmap color, bitmap get, bitmap image, bitmap remove, bitmap save, draw bitmap - -& -bitmap color - -Name: -bitmap color -- Gets the color of a pixel on a bitmap - -Synopsis: -color = BITMAP COLOR x, y, ID$, ColorPart$ - ColorPart$ = "red|green|blue" - -Description: -Returns the red, green, or blue color value of the pixel at position (x,y) of the bitmap ID$ - -Related: bitmap, bitmap get, bitmap image, bitmap remove, bitmap save, draw bitmap -& -bitmap get - -Name: -bitmap get -- get heitht/width information or insert an icon or portion of a bitmap or canvas view to bitmap - -Synopsis: -BITMAP GET x1, y1 TO x2, y2, Target_bitmap$, Source_bitmap$ -BITMAP GET IconSize, Bitmap$, File$ -BITMAP GET ID$, Option$, Path$ -BITMAP GET ID$, Option$ - -Description: -Get a portion of an image: - -BITMAP GET x1, y1 TO x2, y2, Target_bitmap$, Source_bitmap$ - -x1,y1 and x2, y2 describe the bounding rectangle for the data in Source_bitmap$ to be copied to Target_bitmap$. Source_bitmap$ must be a bitmap or canvas. the Target_bitmap$ is created. - -get an icon and copy it to a bitmap: - -BITMAP GET IconSize, Bitmap$, File$ - -Copies the icon, shown in Tracker, of File$ in the specified IconSize onto Bitmap$. -The icon will be resized to IconSize, and properly scaled if it is an hvicon. - -Bitmap$ is created. - -Note: icons are square, IconSize 40 gives an image 40 * 40. - -BITMAP GET ID$, Option$, Path$ - -Copies an icon to bitmap ID$. - -Option$ = "Path|Mime|Mime16|Mime32" - -If Option$ = "Path", Path$ must be the path to a file. The icon returned is 32 * 32 -If Option$ = "Mime" or "Mime16", Path$ must be the mimetype of the file which icon is to be swown. The resulting bitmap is 16 to 16. -If Option$ = "Mime32", Path$ must be the mimetype of the file which icon is to be swown.The resulting bitmap is 32 to 32. - -the bitmap ID$, is created. - -x=BITMAP GET ID$, Option$ -Option$ = "Height|Width" -Delivers height or width of bitmap ID$ - -Example: - -#!yab - -window open 100,100 to 600,600, "MainWindow", "IconWorld" -canvas 0,0 to 500,500, "Main","MainWindow" -systempath$ = "/boot/system/apps/Mail" - -draw text 70,30, "bitmap get \"BMP_icon\", \"path\", \"" + systempath$ +"\"", "Main" -bitmap get "BMP_icon", "path", systempath$ -draw bitmap 10, 10, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -draw text 70,70, "bitmap get \"BMP_icon\", \"mime16\", \"application/x-vnd.Be-MAIL\"", "Main" -bitmap get "BMP_icon", "mime16", "application/x-vnd.Be-MAIL" -draw bitmap 10, 60, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -draw text 70,110, "bitmap get \"BMP_icon\", \"mime32\", \"application/x-vnd.Be-MAIL\"", "Main" -bitmap get "BMP_icon", "mime32", "application/x-vnd.Be-MAIL" -draw bitmap 10, 90, "BMP_icon", "alpha", "Main" -bitmap remove "BMP_icon" - -draw text 70,150, "bitmap get 62, \"BMP_icon\", \"" + systempath$ + "\"", "Main" -bitmap get 62, "BMP_icon", systempath$ -draw bitmap 10, 130, "BMP_icon", "alpha", "Main" - -x=bitmap get "BMP_icon","width" -draw text 70,190, "x=bitmap get 62, \"BMP_icon\", \"width\" :"+str$(x), "Main" -bitmap remove "BMP_icon" - -BITMAP GET 0, 130 TO 60, 150,"BMP_icon","Main" -draw bitmap 0, 200, "BMP_icon", "alpha", "Main" -draw text 70,220, "bitmap get 0,130 TO 60, 150, \"BMP_icon\", \"Main\"","Main" - -x=bitmap get "BMP_icon","width" -draw text 70,240, "x=bitmap get, \"BMP_icon\", \"width\" :"+str$(x), "Main" - -while(not instr(message$, "Quit")) -wend - -window close "Main" - - -Explanation: - -This program uses all forms of bitmap get and displays the output in a Window. - -Related: bitmap, bitmap color, bitmap image, bitmap remove, bitmap save, draw bitmap -& -bitmap image - -Name: -bitmap image -- copies an image file to a bitmap. - -Synopsis: -ErrCode = BITMAP IMAGE ImageFile$, Bitmap$ - -Explanation: - -Load image file ImageFIle$ into a new Bitmap called Bitmap$ - -Related: bitmap, bitmap color, bitmap get, bitmap remove, bitmap save, draw bitmap - -& -bitmap remove - -Name: -bitmap remove -- removes a bitmap from memory - -Synopsis: -BITMAP REMOVE Bitmap$ - -Explanation: -Removes Bitmap$ from memory - -Related: bitmap, bitmap color, bitmap get, bitmap image, bitmap save, draw bitmap - -& -bitmap save - -Name: -bitmap save -- saves a bitmap to an image file. - -Synopsis: -ErrCode = BITMAP IMAGE ImageFile$, Bitmap$ - -Description: -Saves a bitmap as FileName$ (overwrites existing ones!) in Format$ -Format$ = "png|tiff|ppm|bmp|jpeg|tga" -ErrCode = 0|1 , everything worked fine | file could not be saved - - -Related: bitmap, bitmap color, bitmap get, bitmap image, bitmap remove, draw bitmap - -& -screenshot - -Name: -screenshot -- copies the specified region of the desktop onto a bitmap - -Synopsis: -SCREENSHOT x1, y1 to x2, y2, Bitmap$ - -Description: -Takes a screenshot and copies the specified region of the desktop onto Bitmap$, which will be created! -& - -&Drawing - -& -draw bitmap - -Name: -draw bitmap -- Draw a bitmap on a view, another bitmap or a canvas. - -Synopsis: -DRAW BITMAP x,y, Bitmap$, Mode$, View$ -DRAW BITMAP x1,y1 TO x2,y2, Bitmap$, Mode$, View$ - -Description: - -DRAW BITMAP x,y, Bitmap$, Mode$, View$ -Draw a bitmap on a view, another bitmap or a canvas. - -Possible Mode$: - -"Copy" -- copy the bitmap to the target ignoring transparency -"Alpha" -- copy the bitmap to the target supporting transparency - -DRAW BITMAP x1,y1 TO x2,y2, Bitmap$, Mode$, View$ -Draws and scales the bitmap Bitmap$. -If x2 is set to -1, the width is scaled according to the height; -if y2 is set to -1, the height is scaled according to the width; -if x2 and y2 are set to -1, the image is not scaled at all. - -Possible Mode$: - -"Copy" -- copy the bitmap to the target ignoring transparency -"Alpha" -- copy the bitmap to the target supporting transparency - -& -draw circle - -Name: -draw circle -- draw a circle - -Synopsis: -DRAW CIRCLE x,y, Radius, Target$ - -Description: -This command will draw a circle on Target$. Target$ has to be either a valid view, bitmap or canvas. The center of the circle is (x,y) and the circle has a radius of Radius. - -At default it will draw a filled circle in the current highcolor. With the draw set command you can change the filling settings. - -Example: -window open 100,100 to 400,400, "Example", "Example" -draw set true, "HighSolidFill" -draw circle 150,150, 75, "Example" -sleep 7 -window close "Example" -Related: draw curve, draw dot, draw ellipse, draw flush, draw line, draw rect, draw set -& -draw curve - -Name: -draw curve -- draw a Bezier curve with four reference points - -Synopsis: -DRAW CURVE x1,y1, x2,y2, x3,y3, x4,y4, Target$ - -Description: -Bezier curves are defined by a number of points. They will always start in the first point and end in the last one. The curve will always be within the four sides if you connect the points directly. For our command, the curve is defined by four points (x1,y1) ... (x4,y4) and it is drawn on Target$. Target$ has to be either a valid view, bitmap or canvas. - -At default it will draw a filled curve in the current highcolor. With the draw set command you can change the filling settings. Note: A filled curve might have refresh problems due to a bug in the app-server. - -Example: -window open 100,100 to 400,400, "Example", "Example" -draw set true, "HighSolidFill" -draw curve 10,150, 75,60, 150,20, 250,140, "Example" -sleep 7 -window close "Example" -Related: draw circle, draw dot, draw ellipse, draw flush, draw line, draw rect, draw set -& -draw dot - -Name: -draw dot -- draw a single dot - -Synopsis: -DRAW DOT x,y, View$ - -Description: -Draw a single dot at (x,y) on Target$. Target$ has to be either a valid view, bitmap or canvas. - -At default the dot is drawn in the current highcolor. - -Example: -window open 100,100 to 400,400, "Example", "Example" -for i = 0 to 300 step 0.5 - draw dot i, sin(i*50)*50+150, "Example" -next i -sleep 7 -window close "Example" -Explanation: - -This program draws a sinus curve with single dots. - -Related: draw circle, draw curve, draw ellipse, draw flush, draw line, draw rect, draw set -& -draw ellipse - -Name: -draw ellipse -- draw an ellipse - -Synopsis: -DRAW ELLIPSE x,y, RadiusX, RadiusY, View$ - -Description: -This command will draw an ellipse on Target$. Target$ has to be either a valid view, bitmap or canvas. The center of the ellipse is (x,y) and the ellipse has a horizontal radius of RadiusX and a vertical radius of RadiusY. - -At default it will draw a filled ellipse in the current highcolor. With the draw set command you can change the filling settings. - -Example: -window open 100,100 to 400,400, "Example", "Example" -draw set true, "HighSolidFill" -draw ellipse 150,150, 75, 30, "Example" -sleep 7 -window close "Example" -Explanation: - -Related: draw circle, draw curve, draw dot, draw flush, draw line, draw rect, draw set -& -draw flush - -Name: -draw flush -- clear all prior draw commands - -Synopsis: -DRAW FLUSH View$ - -Description: -Draw flush clears the view named View$ from all drawings. - -In yab, all draw commands are stored in a list for every view. If the window is updated, e.g. when resized, all prior drawing is repeated. If you do a lot of drawing in a view, you might notice the redrawing due to flickering. if you want to clear your view, it is much better to clear it with draw flush than e.g. drawing a big rectangle over the other drawings. For flickerfree drawing consider to draw on a canvas instead of a view. - -Note: This does not work for canvas and bitmaps. - -Note: Widgets are not affected by draw flush. - -Example: -window open 100,100 to 400,400, "Example", "Example" -draw line 0,0 to 300,300, "Example" -draw circle 100,50, 20, "Example" -draw rect 10,200 to 200,250, "Example" -sleep 1 -draw flush "Example" -sleep 3 -window close "Example" -Explanation: - -In this example, some things are drawn on the window and then cleared by the draw flush command. - -Related: draw circle, draw curve, draw dot, draw ellipse, draw line, draw rect, draw set -& -draw get - -Name: -draw get -- retrieve font properties - -Synopsis: -Width = DRAW GET FontProperty$, Text$, Target$ -Height = DRAW GET FontProperty$, Target$ - -Description: -The draw get command provides you with some information about the width or height of a string with the current font settings that are used for the draw text command. - -If FontProperty$ is set to "Text-Width", you have to provide a string Text$ too. The resulting Width is the width of Text$ in the current font setting. The width of a string e.g. helps you to align text. Note: Text$ will not be localized automatically, you have to translate it yourself with translate$(Text$). Target$ has to be either a valid view, bitmap or canvas. - -If FontProperty$ is set to "Max-Text-Height" you get the maximum height of the font as return value. The normal font size is the size starting at the baseline. The maximum height gives you the size plus how far the characters can descend below the baseline. - -Example: -window open 100,100 to 400,400, "Example", "Example" -// set font -draw set "Zurich, Roman, 25", "Example" -draw text 50,150, "yab Example", "Example" -// the string length -width = draw get "text-width", "yab Example", "Example" -// baseline -draw set "highcolor", 0,0,255, "Example" -draw line 40,150 to width+60,150, "Example" -// font size -draw set "highcolor", 255,0,255, "Example" -draw line 40,150-25 to width+60,150-25, "Example" -// descend below baseline -maxheight = draw get "max-text-height", "Example" -draw set "highcolor", 255,0,0, "Example" -draw line 40,150-25+maxheight to width+60,150-25+maxheight, "Example" -sleep 7 -window close "Example" -Explanation: - -The example shows the baseline (blue line), the font size (pink line) and the lower boundary (red line) for the given string. The lower boundary is calculated by: baseline - font size + maximum text height. If you respect these distances, you can align text pretty well. - -Related: draw get$, draw set, draw text -& -draw get$ - -Name: -draw get$ -- retrieve information about the installed fonts - -Synopsis: -FontFamilies$ = DRAW GET$ "FontFamily" -FontStyles$ = DRAW GET$ FontFamily$ - -Description: -The draw get$ command reads out the information about all installed fonts and their styles. - -Use the parameter "FontFamily" first to get all font families. For a given font family, get the possible styles with the family name as parameter. - -Use draw set or textedit set to set the font for a draw text or textedit. - -Example: -dim fonts$(1) -dim styles$(1) -window open 100,100 to 400,400, "Example", "Example" -menu "File", "Quit", "Q", "Example" -fontfamilies$ = draw get$ "fontfamily" -numFonts = token(fontfamilies$, fonts$(), "|") -for i = 1 to numFonts - menu "Fonts", fonts$(i), "", "Example" - fontstyles$ = draw get$ fonts$(i) - numStyles = token(fontstyles$, styles$(), "|") - for j = 1 to numStyles - submenu "Fonts", fonts$(i), styles$(j), "", "Example" - next j - submenu set "Fonts", fonts$(i), true, "Example" -next i -while(not instr(message$, "Quit")) -wend -window close "Example" -Explanation: - -This example sets up a whole menu with all fonts installed and their styles. Note: It is up to you to deselect old submenu items in this example whenever a new item is selected. In other words, this simple example allows several font selections, which is probably not what you want. - -Related: draw get, draw set, draw text, textedit set -& -draw image - -Name: -draw image -- load and display an image file - -Synopsis: -LoadError = DRAW IMAGE x,y, ImageFile$, Target$ -LoadError = DRAW IMAGE x1,y1 TO x2,y2, ImageFile$, Target$ - -Description: -The image with the filename ImageFile$ is loaded and put on Target$. Target$ has to be either a valid view, bitmap or canvas. Any image files that are understood by the system can be used. Transparent images are supported, however they might cause problems when printed with the printer command. - -If only one coordinate pair is given, the image will be displayed in its full size where (x,y) is the upper left corner. If the second coordinates are given too, the image will be resized from (x1,y1) to (x2,y2). -If x2 is set to -1, the width is scaled according to the height; -if y2 is set to -1, the height is scaled according to the width; -if x2 and y2 are set to -1, the image is not scaled at all. - -Draw image returns information about the success of the loading procedure: -LoadError = 0, image successfully loaded -LoadError = 1, the file was not found -LoadError = 2, the translator roster was not found, i.e. the system does not understand the image type -LoadError = 3, translation failed, maybe the file is corrupted? -LoadError = 4, detaching the bitmap failed, maybe out of memory? - -Example: -window open 100,100 to 400,400, "Example", "Example" -err = draw image 10,10, "mypicture.png", "Example" -switch(err) - case 1: alert "File not found!", "Ok", "stop" - exit(1) - case 2: alert "Translator not found!", "Ok", "stop" - exit(1) - case 3: alert "Translation failed!", "Ok", "stop" - exit(1) - case 4: alert "Detaching failed!", "Ok", "stop" - exit(1) - default: - break -end switch -sleep 7 -window close "Example" -Explanation: - -The example program will try to load and display the file "mypicture.png" from the current directory. If the load process failed, an error message is produced. - -Related: draw flush -& -draw line - -Name: -draw line -- draw a line - -Synopsis: -DRAW LINE x1,y1 TO x2,y2, Target$ - -Description: -This command draws a line from (x1,y1) to (x2,y2) on Target$ in the current highcolor. Target$ has to be either a valid view, bitmap or canvas. - -Example: -window open 100,100 to 400,400, "Example", "Example" -for i = 0 to 300 step 10 - draw line 0,i to i,300, "Example" - draw line 300,i to i,0, "Example" -next i -sleep 7 -window close "Example" -Explanation: - -Draws some nice lines. - -Related: draw circle, draw curve, draw dot, draw ellipse, draw flush, draw rect, draw set -& -draw rect - -Name: -draw rect -- draw a rectangle - -Synopsis: -DRAW RECT x1,y1 TO x2,y2, Target$ - -Description: -This command will draw a rectangle from (x1,y1) to (x2,y2) on Target$. Target$ has to be either a valid view, bitmap or canvas. - -At default it will draw a filled rectangle in the current highcolor. With the draw set command you can change the filling settings. - -Example: -window open 100,100 to 400,400, "Example", "Example" -draw set true, "HighSolidFill" -draw rect 10,10, 290, 290, "Example" -sleep 7 -window close "Example" -Explanation: - -Display a rectangle. - -Related: draw circle, draw curve, draw dot, draw ellipse, draw flush, draw line, draw set -& -draw set - -Name: -draw set -- set various drawing parameters - -Synopsis: -DRAW SET Color$, r,g,b, Target$ -DRAW SET "Alpha", Alpha-Value -DRAW SET IsStroke, Pattern$ -DRAW SET Font$, Target$ - -Description: -Draw set allows you to set various parameters for the other draw commands. - -Draw set with a Color$ allows you to set three different colors: the background color of Target$, the so-called lowcolor and the highcolor. At default, everything is drawn with the current highcolor, the lowcolor is useful for patterns which can have two colors. The background color can only be set for views, otherwise Target$ has to be either a valid view, bitmap or canvas. -If Color$ = "BGColor", the background color of the view Target$ is set, default is grey (216,216,216), -if Color$ = "LowColor", the lowcolor of Target$ is set, default is grey (216,216,216), -if Color$ = "HighColor", the highcolor of Target$ is set, default is black (0,0,0). - -A short note about colors: On BeOS and ZETA, colors are notated with their three component colors red (r), green (g) and blue (b). These component colors are values between 0 (dark) and 255 (light) and mixed together (additive mixture) they represent a 32bit color space. Have a look at the colorcontrol widget to learn more about colors. - -Draw set with "Alpha" as option sets the alpha channel value. At default it is set to 255 which is completly opaque. The smaller the alpha value gets, the more translucent following drawings will become. Note: This only affects the graphic primitives as dot, line, rect, text etc. but not draw image. -Note: When Alpha-Value is below 255, use only HighSolidFill to draw, patterns are ignored! -Note: Transparent drawing (that is Alpha-Value below 255) is not printed (see printer) correctly! - -Draw set can also set the stroke or fill parameter and a pattern. If IsStroke is true, only the outline of circle, ellipse, rectangle and curve are drawn, otherwise they are filled up (which is the default setting). The Pattern$ specifies a pattern that is used for drawing and filling. The following patterns are predefined: -If Pattern$ = "HighSolidFill" solid fill is used with the current high color (default), -if Pattern$ = "LowSolidFill" solid fill is used with the current low color, -if Pattern$ = "CheckeredFill" checkered fill is used as a combination of low- and highcolor, -otherwise Pattern$ is a 8x8 1bit map where one line is one character which is written out as its ASCII code. -Use the pattern editor to draw and calculate patterns for your convenience. - -Draw set with a parameter Font$ sets the font for Target$. The Font$ consists of the font family, the font style and the font size separated with commas. E.g. the following is a valid font string: -Font$ = "Zurich, Roman, 25" -Note: Use the correct spelling of the font families and styles keeping existing spaces; they are case sensitive too. -Three special Font$ are available, namely the system fonts: -If Font$ = "system-plain", the plain system font is used (default), -if Font$ = "system-fixed", the fixed-sized system font is used, -if Font$ = "system-bold", the bold system font is used. -See the command draw get$ for more information about font families and styles. - -Example: -"127191223239215187109214" -Explanation: - -Related: draw circle, draw curve, draw dot, draw ellipse, draw get, draw get$, draw line, draw rect, draw text, view -& -draw text - -Name: -draw text -- draw a text string in the current font - -Synopsis: -DRAW TEXT x,y, Text$, Target$ - -Description: -Draw the string Text$ in the current font and highcolor on Target$. Target$ has to be either a valid view, bitmap or canvas. The left baseline (!) starts at (x,y). Please refer to the example of the command draw get to learn more about the font height and its baseline. - -Note: The text will be anti-aliased (smoothed) with the current lowcolor. If your text looks strange and blocky, you probably should set the lowcolor to the background color. - -Example: -window open 100,100 to 400,400, "Example", "Example" -// set the colors, ajust lowcolor to background color -draw set "bgcolor", 0,0,125, "Example" -draw set "lowcolor", 0,0,125, "Example" -draw set "highcolor", 255,255,0, "Example" -// set the font -draw set "Zurich, Roman, 25", "Example" -// draw the text -draw text 80,150, "yab Example", "Example" -sleep 7 -window close "Example" -Explanation: - -This program sets the colors to a blue background and a yellow textcolor. It sets the font and then displays the string "yab Example". - -Related: draw flush, draw get, draw get$, draw set - -&Input and Messages -& -ismousein() - -Name: -ismousein() -- reports whether the mouse is currently in a view - -Synopsis: -State = ISMOUSEIN(View$) - -Description: -Ismousein reports true whenever it is called and the mouse pointer is currently over the view named View$. This is independend of whether the window containing the view is active or not. - -Example: -window open 100,100 to 300,300, "Example", "Example" -while(not instr(message$, "Quit")) - if(ismousein("Example")) print "Mouse is in window" -wend -window close "Example" -Explanation: -After opening the window named "Example", this program checks if the mouse is currently over the window. Then a message is printed on the console. - - -Related: mouse message$(), mouse message$, mouse set - -& -keyboard message$() - -Name: -keyboard message$() -- check the keyboard for pressed buttons - -Synopsis: -Msg$ = KEYBOARD MESSAGE$(View$) - -Description: -With keyboard message$(), you can receive key strokes. These key strokes are always sent to the view that currently has focus, so you should make sure, that you set the focus for the view named View$. This avoids trouble with textedit or textcontrol widgets that rely on user input too. - -For normal keys, yab simply returns the key, e.g. a, 1 or !. For function keys you will get f1, f2 and so on. Other special keys will return these strings respectively: enter, backspace, del, esc, pageup, pagedown and tab. Modifier keys (e.g. ctrl, alt or shift) by themself can not be detected (however, if you press shift and e.g. a simultaniously, keyboard message$ will return the letter A instead of a of course). - -If you are interested in getting the key strokes in a terminal, have a look at the inkey$ command. Note, other than inkey$, keyboard message$() does not wait for a key to be pressed. It will simply return an empty string ("") when no key is pressed. - -Design: -It is quite hard to use keyboard message$() for a input method that behaves like e.g. a textcontrol because you have to control the key repeat rate yourself. So rather use a textcontrol, spincontrol or a textedit widget for more complex editing. - -Example: -window open 100,100 to 300,300, "Example", "Example" -option set "Example", "Focus", true -while(not instr(message$, "Quit")) - k$ = keyboard message$("Example") - if(k$<>"" and k$<>old_k$) then - print "You pressed "+k$ - old_k$ = k$ - endif -wend -window close "Example" -Explanation: -This simple example first sets the focus on the view that should get the keyboard messages. Whenever a key is pressed, and it is not similar to the pressed key before, we show a text message. - -Related: inkey$, mouse message$(), option set, shortcut -& -message$ - -Name: -message$ -- receive a system message - -Synopsis: -msg$ = MESSAGE$ - -Description: -Message$ is one of the most important commands for graphical user interfaces. It checks the message queue for new messages that might have arrived from open windows or graphical widgets. - -Most of the time the message queue is empty and message$ will return an empty string "". However, when some window or widget is selected or clicked on you probably will receive a message. - -Note, once message$ is called, the queue is emptied. So you receive a message only once! It is therefore a good idea to store the message in a string (e.g. msg$) or in an array (see example below) so you can evaluate it further. - -Messages are separated by the pipe symbol "|". Normally, you only receive one message. However, when there is some time passing between two message calls (e.g. because of a long calculation or a sleep command), several messages might have been coming in. Therefore you should always split the whole message into its message parts with the token() command (split() will do too). Use a loop to go through all messages then. - -The kind of message is related to the window or widget sending the messgae. Check the different widget entries for more information on the type of message they send. - -Currently, there is one general system message that you always should process: -"_QuitRequested" -- this means that your program was asked to quit by another program (e.g. by ProcessController or the system shutdown) - -Example: -// set DEBUG to true to have the messages printed on the console -// set it to false to disable this feature -DEBUG = true - -window open 100,100 to 300,300, "Example", "Example" - -dim msg$(1) -while(not quitting) - // get all messages and split them immediatly - numMessages = token(message$, msg$(), "|") - - // go through all messages - for i = 1 to numMessages - // if DEBUG is set, print the current message - if(DEBUG) print msg$(i) - switch(msg$(i)) - case "_QuitRequested" - case "Example:_QuitRequested" - quitting = true - break - end switch - next i -wend -window close "Example" -Explanation: -This example shows a message loop as it is recommended for most programs. The message$ is split into parts by the token command. Using a switch(), the different messages can be examined. - -Related: message send -& -message send - -Name: -message send -- send a system message - -Synopsis: -Arrived = MESSAGE SEND Application$, Message$ - -Description: -This is an rather advanced command for sending messages to other yab programs. - -The target program should have the signature Application$. The default signature is: "application/x-vnd.yab-app". - -You can change the signature for yab scripts when you add a comment in the first or second line of your program like this: -// mimetype "application/x-vnd.myapp" - -The command returns one of the following error codes: - 0: Message was delivered - 1: The destination program was not found - 2: The target's message queue is full - 3: Time out, the message never made it to the target - 4: An other error occurred - -Message: -The destination yab application will produce a message$ stating: - - -_Scripting:...| - - -(The ... is the Message$.) - -See the files Ping.yab and Pong.yab for a nice example of message send. As you have to start both, use the tracker or the terminal to run them, but not the IDE. - -Related: message$ -& -mouse message$() - -Name: -mouse message$() -- check the mouse for its position and the state of the buttons - -Synopsis: -Mouse$ = MOUSE MESSAGE$(View$) - -Description: -Mouse message$() returns a string containing information of the mouse coordinates (relative to View$) and the state of the mouse buttons. - -The mouse string has the format "X:Y:LMB:MMB:RMB" where MB is the corresponding left, middle, right mousebutton and X and Y are the coordinates relative to the view named View$. Use the token() command to split the string into an array and use val() to get the actual numerical values (see the example below). - -Design: -Using the mouse message$() is not recommended for beginners. Also the advanced programmer should use it not too intensivly, but rather rely on the existing widgets. However, controlling the mouse gives you some means to create some own sort of widgets or some cool mouse-over effects. - -Example: -window open 100,100 to 500,500, "Example", "Example" -x = 100 -y = 100 -draw rect x,y to x+50,y+50, "Example" -text 10,10, "mytext", "Drag the square with the mouse", "Example" -dim mouse$(1) -while(not instr(message$, "Quit")) - GetMouse() - - // the button is pressed and the mouse is over the rectangle, start drag - if(mlmb and mx>=x and mx<=x+50 and my>=y and my<=y+50) then - while(mlmb) - GetMouse() - x = mx-25 - y = my-25 - draw flush "Example" - draw rect x,y to x+50,y+50, "Example" - wend - endif -wend -window close "Example" - -sub GetMouse() - n = token(mouse message$("Example"), mouse$(), ":") - mx = val(mouse$(1)) - my = val(mouse$(2)) - mlmb = val(mouse$(3)) -end sub -Explanation: -This example lets you drag a rectangle with the mouse. It gets the current position and button state in the sub GetMouse(). Now when the left mouse button is pressed and the mouse is over the rectangle, the rectangle will be moved as long as the button is pressed. The redrawing of the rectangle can be improved by checking whether the mouse actually moved. - - -Related: ismousein(), keyboard message$(), mouse message$, mouse set -& -mouse message$ - -Name: -mouse message$ -- Returns the state of the mouse related to the application. - - -Synopsis: -Mouse$ = MOUSE MESSAGE$ - -Description: -This command is somewhat a duplicate to mouse message$(). However, it does not require a view to be given, but reports the name of the view back as part of the message Mouse$. - -The mouse string has the format VIEW:X:Y:LMB:MMB:RMB where VIEW is the View$ the mouse is over, MB is the corresponding left, middle, right mousebutton. X and Y are relative to the VIEW returned. - -Related: ismousein(), mouse message$(), mouse set -& -mouse set - -Name: -mouse set -- show or hide the mouse cursor - -Synopsis: -MOUSE SET Option$ - -Description: -Sometimes (e.g. games) the mouse cursor is just in the way. To get rid of it for your application windows, this command allows you to hide it (or later show it again). Use Option$ as described: - -Option$ = "Hide" -- hide the mouse cursor -Option$ = "Show" -- show the mouse cursor -Option$ = "Obscure" -- hide the mouse cursor until the mouse is moved - -Related: ismousein(), mouse message$(), mouse message$ -& -shortcut - -Name: -shortcut -- sends a message when a specified shortcut key is pressed - -Synopsis: - -SHORTCUT View$, Shortcut$, MyMessage$ - -Description: -For adding keyboard shortcuts to your program that are not related to menu entries, use the shortcut command. It sends the message MyMessage$ whenever the key combination Shortcut$ is pressed and the view named View$ has focus. - -The first letter of Shortcut$ specifys the shortcut key for this menu item. It is always combined with the command key which is ALT normally (or CTRL when CTRL and ALT are switched in the preferences). E.g. consider a Shortcut$ of "O" then ALT-O will send MyMessage$ to the message queue. Additionaly to the command key you can specify further modifiers which are set before the shortcut letter: - - -"S" for the shift key -"C" for the control key (CTRL, or ALT if CTRL and ALT are switched) -"O" for the option key (on most keyboards probably the Windows button) - - -These modifiers can be combined, but the following combinations do not work: "SO", "SC" and "SCO" - -Some Shortcut examples: - - -"O" for ALT-O -"SO" for Shift-ALT-O -"COO" for Control-Option-ALT-O - - -Message: -Shortcut sends MyMessage$. - -Design: -To use shortcuts is good but to use shortcuts in menus is much better. In menus the user can see the shortcut and does not have to memorize it. Furthermore he can select the according action by mouse too. - -Use the default shortcuts as described for the menu command. Note: Other than with menu, the following shortcuts are reserved and cannot be overwritten: - - -ALT-X -ALT-C -ALT-V -ALT-A -ALT-W -ALT-Q - - -Example: -window open 100,100 to 300,200, "Example", "Example" - -draw text 10,20, "Press Alt-B for an about window", "Example" -draw text 10,40, "Press Alt-Shift-Q to quit", "Example" - -shortcut "Example", "B", "About" -shortcut "Example", "SQ", "MyQuit" - -option set "Example", "focus", true - -while(not quitting) - m$ = message$ - if(instr(m$, "About")) alert "An easy shortcut example", "Dooh", "info" - if(instr(m$, "MyQuit")) then - quitting = true - elsif(instr(m$,"Quit")) then - alert "Use the shortcut to quit!", "Ok", "info" - endif -wend - -window close "Example" -Explanation: - -Here two shortcuts are setup, ALT-B (or CTRL-B if ALT and CTRL are switched in your preferences) sends the message "About" and Shift-ALT-Q to send the message "MyQuit". Additionally other quit messages are rejected telling the user to only use the shortcut. - -Related: keyboard message$, menu, message$ -& -&Printing -& -printer - -Name: -printer -- send a view to the printer - -Synopsis: -PrintingError = PRINTER JobName$, SetupFile$, View$ - -Description: -Printer is a powerful but yet simple command to print a view named View$. The view is send to the currently active printer and put into the spooling queue. There, it is visible under the name JobName$. - -SetupFile$ gives a files as saved by the printer setup command. If the setup file is not valid or empty (""), the printing setup is called first automatically. Otherwise the saved setup is used for the printing. - -Printer returns one of the following numbers: -0 = No Problems -1 = Page setup failed (probably communication problems with the print server) -2 = The configuration file was loaded but page setup failed -3 = The view View$ was not found -4 = The number of pages is 0 or less -5 = The printing was canceled or something went wrong with printing - -Note: PrintingError = 4 can happen because of a bug in the PDF printing driver; although a page size is shown, none is selected. If this happens, you may want to call a PRINTER SETUP for the user and try to print again. - -Note: When an error with code 1,2,3 or 4 occurs, you can be shure that nothing was sent to the printer yet. - -Note: Alpha transparency is not printed correctly! - -Note: Due to a bug in BeOS and ZETA, there are probably problems printing CHECKBOX IMAGE and BUTTON IMAGE images, use DRAW IMAGE instead! - -Example: -window open 100,100 to 300,300, "Example", "Example" - -view 10,10 to 190,160, "PrintMe", "Example" -draw set "bgcolor", 255,255,255, "PrintMe" -draw text 50,50, "Print Me!", "PrintMe" - -button 50,170 to 150,190, "PrintButton", "Print...", "Example" - -while(not quitting) - m$ = message$ - if(instr(m$, "PrintButton")) then - errcode = printer "Example Printjob", "", "PrintMe" - if(errcode>1) alert "Printing Problem: "+str$(errcode), "Ok", "Warning" - endif - if(instr(m$, "Quit")) quitting = true -wend - -window close "Example" -Explanation: - -First a window is opened and then a white view named "PrintMe" is put upon it. Of course it makes perfect sence to have a white background for your view that is to be printed. When the "Print..." button is pressed, the PrintMe view is send to the printer with the job name "Example Printjob". In case of an error, the user is informed. - -Related: printer setup -& -printer setup - -Name: -printer setup -- setup the current printer - -Synopsis: -PRINTER SETUP SetupFile$ - -Description: -Printer setup call the setup window of the currently active printer. Here, the user can specify printing parameters like paper size or a border width. The setup is saved in the file called SetupFile$. No file is created when the user cancels the setup. - -Note: At least one window has to be open before printer setup can be called. - -Example: -window open 100,100 to 300,300, "Example", "Example" -menu "File", "Printer Setup...", "", "Example" -menu "File", "--", "", "Example" -menu "File", "Quit", "Q", "Example" - -while(not quitting) - m$ = message$ - if(instr(m$, "Printer Setup...")) printer setup "ExamplePrinterConfig" - if(instr(m$, "Quit")) quitting = true -wend - -window close "Example" -Explanation: -The example shows a window with a menu. When printer setup is selected from this menu, the setup is called. If the user saves the config, it will be stored in the file named "ExamplePrinterConfig". - -Related: printer -&Menus -& -menu - -Name: -menu -- create a menu item for the menubar - -Synopsis: -MENU Head$, Menu$, Shortcut$, View$ - -Description: -To add a menubar with menus to a window or a view named View$ is very easy. Simply call menu with the menu entry Head$ and a menu item called Menu$. If there is no menubar yet, a new one will be created. If the entry Head$ already exists, the item Menu$ will be added to the existing items at the end. - -If Menu$ is set as follows: - -Menu$ = "--" - -then the menu item will be a separator line. - -The first letter of Shortcut$ specifys the shortcut key for this menu item. It is always combined with the command key which is ALT normally (or CTRL when CTRL and ALT are switched in the preferences). E.g. consider a Shortcut$ of "O" then ALT-O will appear in the menu and the user has to press ALT-O to activate this menu item. Additionaly to the command key you can specify further modifiers which are set before the shortcut letter: - - -"S" for the shift key -"C" for the control key (CTRL, or ALT if CTRL and ALT are switched) -"O" for the option key (on most keyboards probably the Windows button) - -These modifiers can be combined, but the following combinations do not work: "SO", "SC" and "SCO" - -Some Shortcut examples: - -"O" for ALT-O -"SO" for Shift-ALT-O -"COO" for Control-Option-ALT-O - - -The height of the menubar (which depends on the size of the system menu font) can be checked with the peek command. - -Message: -The menu when selected or called by the shortcut key will return a message of the format: - -View$+":"+Head$+":"+Menu$ - -Note, when you have switched on localization, you get the translated message. Have a look at the example below, how to handle such translations. - -Design: -Although views can have a menubar too, you should only give windows a menu. Use capitalized words for English menu entries (like for headings). A menu item should have three dots (...) always when the user can expect a further dialog and not an immediate action. Use the default menu head entries: File, Edit, View, Help - -Use the following default shortcuts: - -For the menu Head$ "File": -"N" -- New -"O" -- Open -"S" -- Save -"W" -- Close -"Q" -- Quit - -For the menu Head$ "Edit": -"Z" -- Undo -"X" -- Cut -"C" -- Copy -"V" -- Paste -"A" -- Select All - -Further default shortcuts: -"F" -- Find -"G" -- Find Again -"H" -- Help -"P" -- Print - - -Example: -localize -window open 100,100 to 400,300, "Example", "Example" -menu "File", "About...", "", "Example" -menu "File", "--", "", "Example" -menu "File", "Quit", "Q", "Example" - -menu "Action", "My Action Menu", "COA", "Example" - -dim msg$(1) -while(not quitting) - n = token(message$, msg$(), "|") - for i = 1 to n - switch(msg$(i)) - case "_QuitRequested" - case "Example:_QuitRequested" - case translate$("Example:File:Quit") - quitting = true - break - case translate$("Example:File:About...") - alert "Menu example", "Ok", "info" - break - case translate$("Example:Action:My Action Menu") - press = press + 1 - draw flush "Example" - draw text 50,100, translate$("Menu call: ")+str$(press), "Example" - break - end switch - next i -wend - -window close "Example" -Explanation: -We open a window and allow localization. This should explain the usage of translating the messages in the loop. After initializing the menus, we check the messages. When a message arrives, we compare it to the translated (!) counterpart. - -Related: menu set, peek, submenu, submenu set -& -menu set - -Name: -menu set -- set options for the menu - -Synopsis: -MENU SET MenuHead$, SetRadioMode, View$ -MENU SET MenuHead$, MenuItem$, Option$, View$ - -Description: -This lets you set some options for the first level menu. - -Given a MenuHead$ you can put the entire menu in radio mode, i.e. only one item can be selected at a time. Set SetRadioMode to true to allow radio mode, set it to false to return to a normal behavior again. Note, you have to select the first item yourself after switching to radio mode. Use the following option to do so. - -Given a MenuHead$ and a MeniItem$ you can disable or enable the item or you can select it by putting a mark to it or remove the mark again. Thus the following options are valid: - - -Option$ = "Disable" -- grey out the item so it cannot be selected anymore -Option$ = "Enable" -- enable a formerly disabled item again -Option$ = "Mark" -- mark this item -Option$ = "Plain" -- remove a mark again - - -Example: -window open 100,100 to 400,300, "Example", "Example" -menu "Test", "Foo", "", "Example" -menu "Test", "Bar", "", "Example" -menu set "Test", "Foo", "mark", "Example" -menu set "Test", "Bar", "disable", "Example" -fooMarked = true - -menu "Radio", "1", "", "Example" -menu "Radio", "2", "", "Example" -menu "Radio", "3", "", "Example" -menu set "Radio", true, "Example" -menu set "Radio", "2", "mark", "Example" - -while(not quitting) - m$ = message$ - if(instr(m$, "Quit")) quitting = true - if(instr(m$, "Foo")) then - fooMarked = not fooMarked - if(fooMarked) then - menu set "Test", "Foo", "mark", "Example" - else - menu set "Test", "Foo", "plain", "Example" - endif - endif -wend -window close "Example" -Explanation: -The first menu has two items, the first item is selectable. As you see in the message loop you are responsable yourself to apply or remove the mark from this item. The second item is disabled. - -The second menu is in radio mode, so only one item can be selected. The user will do that for you, however you have to select an item for the first time. - -Related: menu, submenu, submenu set -& -popupmenu - -Name: -popupmenu -- open a popup menu - -Synopsis: -Selected$ = POPUPMENU x,y, MenuItems$, View$ - -Description: -This function pops up a menu at the position (x,y) as upper left corner on View$. The menu contains several menu items which are given as MenuItems$. The items are separated by a pipe "|". If a menu item is a double minus, it will be used as a separator. - -Your program will wait until an item is selected from the menu or the user clicks somewhere else. The command will then return either the selected item name or an empty string "" when nothing was selected. - -Note, you cannot add submenus, have a radio mode or select items which is possible for menus in a menubar. - -Similar to the menu, the Selected$ will contain the translation of the selected item when localization is used. Use translate$ where necessary, as explained for the menu command. - -Design: -Remember to give the user a hint so he can expect a popup menu. E.g. add a small down-arrow to a button image, if this button opens a popup menu. - -Example: -window open 100,100 to 300,300, "Example", "Example" -button 10,10 to 100,30, "MyButton", "Popup", "Example" -while(not quitting) - m$ = message$ - if(instr(m$, "Quit")) quitting = true - if(instr(m$, "MyButton")) then - selected$ = popupmenu 10,31, "About...|--|Quit", "Example" - if(selected$ = "About...") alert "Popupmenu example.", "Ok", "Info" - if(selected$ = "Quit") quitting = true - endif -wend -window close "Example" -Explanation: -The example opens a window with a button. Whenever the button is clicked on, a popup menu appears. The selection of the popup menu is then processed immediately. - -Related: dropbox -& -submenu - -Name: -submenu -- create a submenu item for an existing menu - -Synopsis: -SUBMENU MenuHead$, MenuItem$, SubMenuItem$, Shortcut$, View$ - -Description: -To have a submenu to an existing menu, you have to specify the menu title MenuHead$, the menu item that will contain the submenu MenuItem$ and the new name for the submenu entry SubMenuItem$. If MenuHead$ or MenuItem$ do not exist, they are created. Similar to the menu command the submenu item can be called by a shortcut key Shortcut$. This again explained below in detail. - -If SubMenuItem$ is set as follows: - -Menu$ = "--" - -then the submenu item will be a separator line. - -The first letter of Shortcut$ specifys the shortcut key for this submenu item. It is always combined with the command key which is ALT normally (or CTRL when CTRL and ALT are switched in the preferences). E.g. consider a Shortcut$ of "O" then ALT-O will appear in the menu and the user has to press ALT-O to activate this menu item. Additionaly to the command key you can specify further modifiers which are set before the shortcut letter: - - -"S" for the shift key -"C" for the control key (CTRL, or ALT if CTRL and ALT are switched) -"O" for the option key (on most keyboards probably the Windows button) - -These modifiers can be combined, but the following combinations do not work: "SO", "SC" and "SCO" - -Some Shortcut examples: - -"O" for ALT-O -"SO" for Shift-ALT-O -"COO" for Control-Option-ALT-O - - -Message: -The submenu when selected or called by the shortcut key will return a message of the format: - -View$+":"+Head$+":"+MenuItem$+":"+SubMenuItem$ - -Note, when you have switched on localization, you get the translated message. Have a look at the example below, how to handle such translations. - -Design: -Use submenus sparsely. Even a complex program like the yab IDE contains only one submenu (for the online resources). Most often submenus should only be used for a list of similar items. Use capitalized words for English menu entries (like for headings). A menu item should have three dots (...) always when the user can expect a further dialog and not an immediate action. - -Example: -localize -window open 100,100 to 400,300, "Example", "Example" - -submenu "File", "Alert Types", "Empty Alert...", "", "Example" -submenu "File", "Alert Types", "Info Alert...", "", "Example" -submenu "File", "Alert Types", "Idea Alert...", "", "Example" -submenu "File", "Alert Types", "Warning Alert...", "", "Example" -submenu "File", "Alert Types", "Stop Alert...", "", "Example" - -menu "File", "--", "", "Example" -menu "File", "Quit", "Q", "Example" - -dim msg$(1) -while(not quitting) - n = token(message$, msg$(), "|") - for i = 1 to n - switch(msg$(i)) - case "_QuitRequested" - case "Example:_QuitRequested" - case translate$("Example:File:Quit") - quitting = true - break - case translate$("Example:File:Alert Types:Empty Alert...") - alert "Empty alert.", "Ok", "empty" - break - case translate$("Example:File:Alert Types:Info Alert...") - alert "Info alert.", "Ok", "info" - break - case translate$("Example:File:Alert Types:Idea Alert...") - alert "Idea alert.", "Ok", "idea" - break - case translate$("Example:File:Alert Types:Warning Alert...") - alert "Warning alert.", "Ok", "warning" - break - case translate$("Example:File:Alert Types:Stop Alert...") - alert "Stop alert.", "Ok", "stop" - break - end switch - next i -wend - -window close "Example" -Explanation: -Here the important part is the declaration of the submenu. With the first submenu command the menubar, the menu head named "File" and the menu item named "Alert Types" are created. Because of localization we have to check the submenu message with the translate$() otherwise we would miss them. - -Related: menu, menu set, submenu set -& -submenu set - -Name: -submenu set -- set options for the submenu - -Synopsis: -SUBMENU SET MenuHead$, MenuItem$, SetRadioMode, View$ -SUBMENU SET MenuHead$, MenuItem$, SubMenuItem$, Option$, View$ - -Description: -This lets you set some options for the second level menu. - -Given a MenuHead$ and a MenuItem$ you can put the entire submenu in radio mode, i.e. only one item can be selected at a time. Set SetRadioMode to true to allow radio mode, set it to false to return to a normal behavior again. Note, you have to select the first item yourself after switching to radio mode. Use the following option to do so. - -Given a MenuHead$, a MeniItem$ and a SubMenuItem$ you can disable or enable the item or you can select it by putting a mark to it or remove the mark again. Thus the following options are valid: - - -Option$ = "Disable" -- grey out the item so it cannot be selected anymore -Option$ = "Enable" -- enable a formerly disabled item again -Option$ = "Mark" -- mark this item -Option$ = "Plain" -- remove a mark again - - -Example: -window open 100,100 to 400,300, "Example", "Example" - -submenu "Test", "My Favorite OS", "BeOS", "", "Example" -submenu "Test", "My Favorite OS", "Haiku", "", "Example" -submenu "Test", "My Favorite OS", "ZETA", "", "Example" - -submenu set "Test", "My Favorite OS", true, "Example" -submenu set "Test", "My Favorite OS", "BeOS", "mark", "Example" -submenu set "Test", "My Favorite OS", "ZETA", "disable", "Example" - -while(not instr(message$, "Quit")) -wend - -window close "Example" -Explanation: -The submenu is in radio mode, so only one item can be selected. The user will do that for you, however you have to select an item for the first time. The last item cannot be selected because it is disabled. - -Related: menu, menu set, submenu -&Views -&Boxview -& -boxview - -Name: -boxview -- a boxview is view with a labeled border - -Synopsis: -BOXVIEW x1,y1 TO x2,y2, ID$, Label$, LineType, View$ - -Description: -This command sets up a view named ID$ with a border and a label. While the boxview is constructed at the coordinates (x1,y1) to (x2,y2) on the view named View$, the own coordinates of a boxview start at (x1+3,y1+12) to (x2-3,y2-3) so that the border can not be overwritten. This is independent of the line type. - -If Label$ is not "", it will be displayed on the upper left corner of the boxview. Otherwise no label is shown. - -There are three possible line types for the border style: - For LineType = 0 the boxview has no border. - For LineType = 1 the boxview has a simple line border. - For LineType = 2 the boxview has a fancy line border. - -Other than commands like stackview, tabview or splitview, you can simply remove a boxview just as a normal view with the view remove command. - -Layout: -The boxview will follow all sides as in standard layout. - -Design: -Use boxviews to group similar entries. Do not use too much boxviews in a window, as this looks too cluttered. - -Example: -window open 100,100 to 300,300, "Example", "Example" -boxview 10,10 to 190,190, "MyBox", "Hello Box", 2, "Example" -sleep 7 -window close "Example" -Explanation: - -The example opens a window and sets up a boxview with the label "Hello Box" and a fancy border style (2). - -Related: view, view remove -& -boxview set - -Name: -boxview set -- set the label and boarder for a boxview - -Synopsis: -BOXVIEW SET ID$, Option$, Value$ - -Description: -Option$ = "Label", Value$ = new label -Option$ = "Line", Value$ = "0|1|2" no |simple | fancy border -& -canvas - -Name: -canvas -- creates a special flicker-free drawing view. - -Synopsis: -CANVAS x1, y1 TO x2, y2, ID$, View$ - -Description: - -CANVAS x1, y1 TO x2, y2, ID$, View$ -A canvas is a special view for flicker-free drawing. It always shows a bitmap -and thus cannot be resized. However, it does not have a drawing queue, so you -do not need DRAW FLUSH -A canvas is always initialized with a white background. - -related: draw bitmap, bitmap get -& -layout - -Name: -layout -- Set the layout for all views on a window. - -Synopsis: -LAYOUT Layout$, WindowOfView$ - -Description: - -Set the layout for all views on the window of View$. The layout will affect all following new widgets, but not the already created. Draw commands are not affected by the layout. -Layout$ (not case sensitive): -"Standard" = default layout, all widgets follow bottom and right side of the window - except for listboxes and textedit which follow all sides. -"All" = follow all sides (widgets resize) -"None" = follow the top and the left side (equals "top, left") - - -OR- Layout$ is a combination of horizontal , vertical (e.g. "Right, Top" etc.). - -NOTE: - -In combination, horizontal is first and virtical is second. "Right,Top" is ok, "Top, Right" is not. - -Horizontal: -"Left" = follow left side (default, when no other horizontal layout is given) -"Right" = follow the right side -"Left, Right" = follow the left and the right side (resize) -"H-Center" = follow the horizontal center - Vertical: -"Top" = follow the top side (default, when no other vertical layout is given) -"Bottom" = follow the bottom side -"Top, Bottom" = follow the top and bottom side (resize) -"V-Center" = follow the vertical center - -&Scrollbar -& -scrollbar - -Name: -scrollbar -- make a view scrollable - -Synopsis: -SCROLLBAR ID$, ScrollbarType, View$ - -Description: -SCROLLBAR ID$, ScrollbarType, View$ - Make View$ scrollable. - -Related: scrollbar get, scrollbar set -& -scrollbar get - -Name: -scrollbar get -- Get the current position of the scrollbar. - -Description: -Position = SCROLLBAR GET Scrollbar$, "Horizontal" -Position = SCROLLBAR GET Scrollbar$, "Vertical" - Get the current position of the scrollbars. - -Related: scrollbar, scrollbar set - -& -scrollbar set - -Name: scrollbar set -- set various settings for the scrollbars. - -Synopsis: -SCROLLBAR SET Scrollbar$, Borderoption$ -SCROLLBAR SET Scrollbar$, "Vertical Position", Position -SCROLLBAR SET Scrollbar$, "Horizontal Position", Position -SCROLLBAR SET Scrollbar$, "Vertical Range", Min, Max -SCROLLBAR SET Scrollbar$, "Horizontal Range", Min, Max -SCROLLBAR SET Scrollbar$, "Vertical Steps", SmallSteps, BigSteps -SCROLLBAR SET Scrollbar$, "Horizontal Steps", SmallSteps, BigSteps - -Description: -SCROLLBAR SET Scrollbar$, Borderoption$ -Borderoption$ = "no-border" or "plain-border" or "fancy-border" (default) - -SCROLLBAR SET Scrollbar$, "Vertical Position", Position - -SCROLLBAR SET Scrollbar$, "Horizontal Position", Position -Set the scrollbar to the position Position. Default is (0,0). - -SCROLLBAR SET Scrollbar$, "Vertical Range", Min, Max - -SCROLLBAR SET Scrollbar$, "Horizontal Range", Min, Max -Set the scrollbars to a maximum range, default is (1000,1000). -Note: the Max value will be added to the view's actual width/height. - -SCROLLBAR SET Scrollbar$, "Vertical Steps", SmallSteps, BigSteps - -SCROLLBAR SET Scrollbar$, "Horizontal Steps", SmallSteps, BigSteps -Set the scrollbar steps. -SmallSteps are the scrolling steps when the user clicks on the arrow buttons (default is 1.0). -BigSteps are the scrolling steps when the user clicks on the empty part of the scrollbar (default is 10.0). - -Related: scrollbar, scrollbar get - - -&Splitview -& -splitview - -Name: -splitview -- Set up the new view and split it into two new views. - -Synopsis: -SPLITVIEW x1,y1 TO x2,y2, ID$, IsVerticalSplit, NormalStyle, View$ - -Description: -Set up the new view ID$ and split it into two new views ID$+"1" and ID$+"2". -If IsVerticalSplit = true, a vertical splitter is set -if IsVerticalSplit = false, a horizontal splitter is set -If NormalStyle = true, the splitter is 10 pixels thick -If NormalStyle = false, the splitter is 4 pixels thick - -Example: - -splitview 120,110 to 260,195, "Split", true, false, "Box2" -draw set "bgcolor", "Panel-Background-Color, Darken-1-Tint", "Split1" -draw set "bgcolor", "Panel-Background-Color, Lighten-1-Tint", "Split2" -tooltip "Split", "SPLITVIEW" - -Explanation: - -This snippet from then AllInOne.yab example program opens a splitview and changes the background colors of each pannel so it is easy to see the two suib-views. - -related: splitview set, stackview, tabview -& -splitview get - -Name: splitview get -- Get the current position of the divider - -Synopsis: -Position = SPLITVIEW GET SplitView$, "Divider" - -Description: -Get the current position of the divider. - -Related: splitview, splitview set - -& -splitview set - -Name: -splitview set -- Set the position of the divider, or the minimum sizes of the view - -Synopsis: -SPLITVIEW SET SplitView$ "Divider", Position -SPLITVIEW SET SplitView$ "MinimumSizes", LeftOrTop, RightOrBottom - -Description: - -SPLITVIEW SET SplitView$ "Divider", Position -Set the position of the divider, default is the half of the total split view. - -SPLITVIEW SET SplitView$ "MinimumSizes", LeftOrTop, RightOrBottom -Set the minimum sizes of the left (or top) view and the right (or bottom) view. - -Related: slpitview - -&Stackview -& -stackview - -Name: -stackview -- create views above each other - -Synopsis: -STACKVIEW x1,y1 TO x2,y2, ID$, NumberOfViews, View$ - -Description: -Stackview creates several views on top of each other. All views have the same coordinates (x1,y1)-(x2,y2) on the view named View$. NumberOfViews specifies how many views should be created. Obviously it should be greater or equal to 2 to be useful. - -All stacked views get a own ID which is ID$ and the number of the view. E.g. if ID$ = "MyStack" and NumberOfViews = 3, then the stacked views have the IDs "MyStack1", MyStack2" and "MyStack3". Use the command stackview set to switch between these views. - -Layout: -The stackview and all views it contains will follow all sides as in standard layout. - -Design: -You can think of a stackview as a tabview without tabs. Therefore it is up to the programmer to provide a method to switch between the stacked views. - -Stackviews are useful in typical BeOS style option windows (e.g. in the yab IDE). Have a look at the code below for an example. - -Example: -window open 100,100 to 400,300, "Example", "Option Example" - -listbox 10,10 to 100,190, "List", 1, "Example" -listbox add "List", "First Option" -listbox add "List", "Second Option" -listbox add "List", "Third Option" - -stackview 110,10 to 290,190, "Stack", 3, "Example" -draw set "bgcolor", 255,200,200, "Stack1" -draw text 10,10, "This is view \"Stack1\"", "Stack1" -draw set "bgcolor", 200,255,200, "Stack2" -draw text 10,10, "This is view \"Stack2\"", "Stack2" -draw set "bgcolor", 200,200,255, "Stack3" -draw text 10,10, "This is view \"Stack3\"", "Stack3" - -while(not quitting) - msg$ = message$ - if(instr(msg$, "List")) then - n = listbox get "List" - stackview set "Stack", n - elsif(instr(msg$, "Quit")) then - quitting = true - endif -wend - -window close "Example" -Explanation: - -This window has a listbox on the left-hand side and a stackview with three views on the right. Each view has a own background color and text. When an item is selected in the list, we get its number and then switch the stackview to the corresponding view. - -Related: stackview get, stackview set, tabview -& -stackview get - -Name: -stackview get -- get the number of the shown view in a stackview - -Synopsis: -ViewNumber = STACKVIEW GET StackView$ - -Description: -Stackview get will return you the number of the currently shown view. Remember: Numbering starts with 1. - -Related: stackview, stackview set -& -stackview set - -Name: -stackview set -- set the shown view in a stackview - -Synopsis: -STACKVIEW SET StackView$, ViewNumber - -Description: -To switch the views of a stackview, yoy have to use this command. Simply provide it with the ID of the stackview (here: StackView$) and the number of the view you want it to show. Remember: The first view on the stack has the number 1. If you provide an invalid number, nothing will happen. - -Related: stackview, stackview get -&Tabview -& -tabview - -Name: -tabview -- Open a tabview and chose top/bottom/left/right for the tabs - -Synopsys: -TABVIEW x1,y1 TO x2,y2, ID$, Option$, View$ - -Description: -Open a tabview and chose top/bottom for the tabs: -Option$ = "top, bottom,left,right" where to place the tabs. - -Related: splitview, stackview -& -tabview add - -Name: -tabview add -- Adds a new view and new tab to a tabview. - -Synopsys: -TABVIEW ADD TabView$, TabName$ - -Description: -For each tab, a new view is created; you can add widgets or draw on these views as ususal. -The ids for the views ist TabView$+"1" for the first, TabView$+"2" for the second view, etc. - -example: - -// make the tabview -tabview 10,60 to 530,390, "Box", "top", "Win" -tabview add "Box", "Widgets" -tabview add "Box", "Views and More" - -// button -button 10,10 to 100,30, "Button", "Button", "Box1" -tooltip "Button", "BUTTON" - -Explanation: - -This snippet from the AllInOne.yab example program sets up a tabview called Box on the main Window view "Win" with the tabs at the top, then adds two tabs. "Widgets" is the first tab, "Box1", and "Views and More" is the second tab, "Box2". the button is added to the tab labeled "Widgets." - -Related: tabview tabview get, tabview set -& -tabview get - -Name: -tabview get -- get the curent open tab number - -Synopsis: -TabNumber = TABVIEW GET TABVIEW$ - -Description: -Get the current opened tab. - -Related: tabview, tabview add tasbview set - -& -tabview set - -Name: -tabview set -- Chose the current tab - -Synopsys: -TABVIEW SET TabView$, TabNumber - -Description: -Open the tab number TabNumber. - -Related: tabview tabview add, tabview get - -&View -& -view - -Name: -view -- add a view - -Synopsis: -VIEW x1,y1 TO x2,y2, ID$, View$ - -Description: - Adds a view - -Related: view get, view remove -& -view dropzone - -Name: -view dropzone -- Definea view as a drop zone that accepts dropped files. - -synopsis: -VIEW DROPZONE View$ - -Description: -Define View$ as a drop zone that accepts dropped files. -DROPZONE accepts multiple files (and sends them in inversed order as message) -Related: view -& -view get - -Name: -view get -- gets information about a view - -Synopsis: -Result = VIEW GET View$, Option$ - -Description: -Option$ = "Position-X/Position-Y/Width/Height/Exists/Focused" -Returns the requested property or if used with Exists/Focused returns 1 if so and 0 if not. -& -view remove - -Name: -view remove -- remove a view - -Synopsis: -VIEW REMOVE View$ - -Description: -Remove View$. The window view cannot be removed. Should be much more stable now. -Warning: Currently clears all internal information about menues and drop boxes. It is only safe to use it, when you don't have any menues or drop boxes on views that will not be removed. - -Warning: - -Never remove menus with shortcuts, otherwise yab will crash when the shortcut key is pressed! - -Related: view, view get - -&Widgets -& -button - -Name: -button -- create a new button - -Synopsis: -BUTTON x1,y1 TO x2,y2, ID$, Label$, View$ - -Description: -The button command creates a button from the coordinates (x1,y1) to (x2,y2) on the window or view named View$. It has a text label Label$ and the identifier ID$. - -With the option set command you can modify the button, as setting the background color, the focus, enabling or diabling it or resizing it to its preferred size. - -Message: -The button when pressed will send a message string with ID$. - -Layout: -In standard layout, the button will follow the lower, right corner of the view or window. - -Design: -Always use meaningful labels for buttons. If you care for localization (on ZETA you should!), remember that labels can be much longer in other languages. So either provide enough space or use the option set command to auto-resize the button. - -Example: -window open 100,100 to 300,200, "Example", "Example" -button 20,40 to 180,60, "MyButton", "Hello World", "Example" -while(not quitting) - m$ = message$ - if(m$ = "MyButton|") alert "You pressed the button", "Ok", "info" - if(instr(m$, "_QuitRequested")) quitting = true -wend -window close "Example" -Explanation: - -In this example, a button is set on the window. If the button is pressed, an alert window pops up. - -Related: button image, option set -& -button image - -Name: -button image -- create a new button with images - -Synopsis: -BUTTON IMAGE x,y, ID$, EnabledPressed$, EnabledNormal$, Disabled$, View$ - -Description: -This command lets you create a button with images named ID$ on the view View$. The position (x,y) is the upper left corner of the images and the size of the first image (EnabledPressed$) is taken. - -You have to provide at least two image files: -EnabledPressed$ -- the image file name of the pressed button -EnabledNormal$ -- the image file name of the released button -The images can be of any format that BeOS or ZETA can translate. - -If you want to disable the button, you should provide the additional image file: -Disabled$ -- the image file name of the disabled button -You can put in an empty string "" if you don't need a disabled button. - -Just be aware that image files with relative path might be not found when you start your program as a script from tracker. - -Message: -The button when pressed will send a message string with ID$. - -Layout: -In standard layout, the button will follow the lower, right corner of the view or window. - -Design: -Be creative but do not use offensive images. For icons, try to use BeOS-like icons always. Ask in the community if you need assistence in creating new icons. - -Example: -window open 100,100 to 300,200, "Example", "Example" -button image 10,10, "MyIconButton", "icon_pressed.png", "icon_released", "icon_disabled", "Example" -while(not quitting) - m$ = message$ - if(m$ = "MyIconButton|") alert "You pressed the button", "Ok", "info" - if(instr(m$, "_QuitRequested")) quitting = true -wend -window close "Example" -Explanation: - -The button is only shown correctly, when the images "icon_pressed.png" and "icon_released" exist. - -Related: button -& -calendar - -Name: -calendar -- create a new calendar - -Synopsis: -CALENDAR x,y, ID$, Format$, SetDate$, View$ - -Description: -Calendar is a nifty widget that gives you a date textcontrol with a dropdown calendar window. It is created at (x,y) as upper left corner on the view View$. With the default font size, it always has a width of 80 pixels and a height of 20 pixels. - -You have to provide a date format Format$ which must be either "DDMMYYYY" for day, month, year or "MMDDYYYY" for month, day, year. Futhermore, you have to add a divider to the Format$ which can be either ".", "/" or "-". Thus, the default Format$ looks like this: "DDMMYYYY." - -The SetDate$ should give the starting date in the format you have chosen. Default is the current day, when SetDate$ = "". Note: this SetDate$ has a different format than the yab command date$. However, it is not too difficult to convert these formats. - -The calendar can be disabled or enabled with the option set command. - -Layout: -In standard layout, the calendar will follow the lower, right corner of the view or window. - -Example: -window open 100,100 to 300,200, "Example", "Example" -calendar 10,10, "MyCalendar", "MMDDYYYY/", "04.06.1975", "Example" -while(not quitting) - if(instr(message$, "_QuitRequested")) then - alert "You selected: "+calendar get$ "MyCalendar", "Duh", "info" - quitting = true - endif -wend -window close "Example" -Explanation: - -In this example, a calendar is set on the window with an American date format, month, day, year and the / as separator. When the window is closed, an alert window shows the selected date with calendar get$. - -Related: calendar get$, calendar set, date$, option set -& -calendar get$ - -Name: -calendar get$ -- returns the selected date of a calendar - -Synopsis: -GetDate$ = CALENDAR GET$ Calendar$ - -Description: -The command will return the currently selected date of the calendar widget named Calendar$. Note: the calendar does not send any messages, so use this command to read out a calendar. - -Note: This GetDate$ has a different format than the yab command date$. However, it is not too difficult to convert these formats. - -Related: calendar, calendar set, date$ -& -calendar set - -Name: -calendar set -- sets the date for a calendar - -Synopsis: -CALENDAR SET Calendar$, SetDate$ - -Description: -This lets you set the date of the calendar named Calendar$. Note: SetDate$ has to use the format, that is defined for the calendar. - -Note: this SetDate$ has a different format than the yab command date$. However, it is not too difficult to convert these formats. - -Related: calendar, calendar get$, date$ -& -checkbox - -Name: -checkbox -- create a new checkbox - -Synopsis: -CHECKBOX x,y, ID$, Label$, IsSelected, View$ - -Description: -Set up a checkbox named ID$ at the position (x,y). It will display the label Label$ next to the box. If IsSelected is set to true, the checkbox will be selected. - -You can use option set to disable the checkbox or to change the label. - -Message: -The checkbox when selected will send a message string with ID$+":ON", and when deselected with the message string ID$+":OFF". - -Layout: -In standard layout, the checkbox will follow the lower, right corner of the view or window. - -Design: -Try to align checkboxes below each other. Also put them in groups (e.g. in a boxview) when you have many checkboxes. - -Example: -window open 100,100 to 400,200, "Example", "Example" -checkbox 10,10, "MyCheckBox", "Select this checkbox", false, "Example" -while(not quitting) - m$ = message$ - if(m$ = "MyCheckBox:OFF|") alert "The checkbox is deselected", "Ok", "info" - if(m$ = "MyCheckBox:ON|") alert "The checkbox is selected", "Ok", "info" - if(instr(m$, "Quit")) quitting = true -wend -window close "Example" -Explanation: - -Whenever the checkbox is selected or deselected, an alert window will tell you. - -Related: checkbox image, checkbox set, option set -& -checkbox image - -Name: -checkbox image -- create a new checkbox with images - -Synopsis: -CHECKBOX IMAGE x,y, ID$, EnabledOn$, EnabledOff$, DisabledOn$, DisabledOff$, IsSelected, View$ - -Description: -This command lets you create a checkbox with images named ID$ on the view View$. The position (x,y) is the upper left corner of the images and the size of the first image (EnabledOn$) is taken. If IsSelected is set to true, the checkbox will be selected. - -You have to provide at least two image files: -EnabledOn$ -- the image file name of the selected checkbox -EnabledOff$ -- the image file name of the deselected checkbox -The images can be of any format that BeOS or ZETA can translate. - -If you want to disable the checkbox, you should provide the additional image files: -DisabledOn$ -- the image file name of the disabled selected checkbox -DisabledOff$ -- the image file name of the disabled deselected checkbox -You can put in an empty string "" if you don't need a disabled checkbox. - -Just be aware that image files with relative path might be not found when you start your program as a script from tracker. - -You can use option set to disable the checkbox. - -Message: -The checkbox when selected will send a message string with ID$+":ON", and when deselected with the message string ID$+":OFF". - -Layout: -In standard layout, the checkbox will follow the lower, right corner of the view or window. - -Design: -Be creative but do not use offensive images. For icons, try to use BeOS-like icons always. Ask in the community if you need assistence in creating new icons. - -Example: -window open 100,100 to 400,200, "Example", "Example" -checkbox 10,10, "MyCheckBox", "enabled_icon_on.png", "enabled_icon_off.png", - "disabled_icon_on.png", "disabled_icon_off.png", false, "Example" -while(not quitting) - m$ = message$ - if(m$ = "MyCheckBox:OFF|") alert "The checkbox is deselected", "Ok", "info" - if(m$ = "MyCheckBox:ON|") alert "The checkbox is selected", "Ok", "info" - if(instr(m$, "Quit")) quitting = true -wend -window close "Example" -Explanation: - -Whenever the checkbox is selected or deselected, an alert window will tell you. The checknox is only shown correctly, when the images exist. - -Related: checkbox, checkbox set, option set -& -checkbox set - -Name: -checkbox set -- (de-)select the checkbox - -Synopsis: -CHECKBOX SET CheckBox$, IsSelected - -Description: -If IsSelected is set to true, the checkbox named CheckBox$ will be selected. If IsSelected is set to false, the checkbox will be deselected. - -Related: checkbox, checkbox image -& -colorcontrol - -Name: -colorcontrol -- create a new control for choosing a color - -Synopsis: -COLORCONTROL x,y, ID$, View$ - -Description: -Colorcontrol gives you a basic color selection tool in only one command. The colorcontrol named ID$ has its upper left corner at the position (x,y) of the view View$. It always has a width of 276 pixels and a height of 54 pixels. - -Note: The colorcontrol will look differently on 8 bit displays than on displays with 16 or more bit. However, this should not concern you, the system will take care of that. On BeOS, the colorcontrol will have an additional deactivated selection for alpha channel selection. This is not functional, so again, do not care. - -The colorcontrol does not send any message, you have to check with colorcontrol get what the user selected. - -You can use option set to disable the colorcontrol. Use colorcontrol set, to set a color. - -Layout: -In standard layout, the colorcontrol will follow the lower, right corner of the view or window. - -Design: -Always give feedback to the user, how the color looks like, he is currently selecting. The example below shows how to do that. - -Example: -window open 100,100 to 426,176, "Example", "Example" -view 10,10 to 40,66, "Color", "Example" -colorcontrol 50,10, "MyColorControl", "Example" - -// set color to white -colorcontrol set "MyColorControl", 255,255,255 - -while(not quitting) - if(instr(message$, "Quit")) quitting = true - r = colorcontrol get "MyColorControl", "red" - g = colorcontrol get "MyColorControl", "green" - b = colorcontrol get "MyColorControl", "blue" - - // check if the color was changed - if(r<>old_r or g<>old_g or b<>old_b) then - old_r = r: old_g = g: old_b = b - draw set "bgcolor", r,g,b, "Color" - endif -wend -window close "Example" -Explanation: - -The example shows a colorcontrol and view. The view always takes the color that is selected by the user. Note: The color is only set, when the selection changed. This avoids flickering on slow machines. - -Related: colorcontrol get, colorcontrol set, option set -& -colorcontrol get - -Name: -colorcontrol get -- return a color component of the currently selected color in a colorcontrol - -Synopsis: -Value = COLORCONTROL GET ColorControl$, ColorComponent$ - -Description: -Returns the current selected color component of the colorcontrol ColorControl$. Value is always between 0 and 255, where lower values represent darker colors and higher values represent lighter colors. - -ColorComponent$ has to be one of the following: -"Red" -- the value of the red color -"Green" -- the value of the green color -"Blue" -- the value of the blue color - -Related: colorcontrol, colorcontrol set -& -colorcontrol set - -Name: -colorcontrol set -- set the color in a colorcontrol - -Synopsis: -COLORCONTROL SET ColorControl$, r,g,b - -Description: -Sets the color in the colorcontrol ColorControl$ to its RGB values r, g and b. Read the part on the draw set command to learn more about RGB color space in yab. - -Related: colorcontrol, colorcontrol get -& -columnbox - -Name: -columnbox -- create a list widget with columns - -Synopsis: -COLUMNBOX x1,y1 TO x2,y2, ID$, HasHScrollbar, Option$, View$ - -Description: -The columnbox ist created at (x1,y1) to (x2,y2) on the target view named View$. It gets an own ID i.e. ID$. If it should have a horizontal scrollbar, set HasHScrollbar to true otherwise set it to false. Note: a columnbox always has a vertical scrollbar. - -There are several options regarding the behaviour of the columns. These options affect all columns: -"movable" -- the columns can be dragged -"resizable" -- the columns can be resized -"popup" -- clicking on the columns with the right mouse button brings up a popup menu with all column names -"removable" -- the columns can be removed - -An addtional options is "no-border" which draws the columnbox without a borderline. - -Several options can be combined, e.g. "movable, resizable, no-border". Note: If "removable" is allowed, you should allow "popup" too, so that removed columns can be brought back again. - -After setting up a columnbox you have to add columns with the columnbox column command before adding items. - -Note: A columnbox cannot be sorted. - -Message: -The columnbox provides two messages. The first kicks in when a row is selected by clicking once on it or by the up and down keys. This then has the format ID$+":_Select:"+SelectedRow$ where SelectedRow$ contains the number of the row selected. The second message is send, when a row is invoked, i.e. by double-clicking at a row or pressing the Enter key. It has the format ID$+":_Invoke:"+SelectedRow$. - -Layout: -The columbox will follow all sides as in standard layout. - -Design: -To use a columnbox is almost always a good idea. It helps to present a lot of data in an organized way. Additionally it allows bitmaps and icons as list entries and it is the most customizable list widget in yab. - -Example: -window open 100,100 to 400,500, "Example", "Example" - -columnbox 10,10 to 290,390, "MyColumnbox", true, "movable, resizable, popup, removable", "Example" - -columnbox column "MyColumnbox", " ", 1, 20, 20, 20, "align-center" -columnbox column "MyColumnbox", "Name", 2, 140, 60, 80, "align-right" -columnbox column "MyColumnbox", "Address", 3, 250, 60, 180, "align-left" -columnbox column "MyColumnbox", "Age", 4, 250, 60, 50, "align-center" - -columnbox add "MyColumnbox", 1, 1, 18, "__Mime__=application/x-person" -columnbox add "MyColumnbox", 2, 1, 18, "John" -columnbox add "MyColumnbox", 3, 1, 18, "Cape Town" -columnbox add "MyColumnbox", 4, 1, 18, "30" - -columnbox add "MyColumnbox", 1, 2, 18, "__Mime__=application/x-person" -columnbox add "MyColumnbox", 2, 2, 18, "Mary" -columnbox add "MyColumnbox", 3, 2, 18, "Omaruru" -columnbox add "MyColumnbox", 4, 2, 18, "27" - -columnbox color "MyColumnbox", "text", 0,0,200 -columnbox color "MyColumnbox", "selection", 200,200,255 -columnbox color "MyColumnbox", "row-divider", 255,255,255 - -columnbox select "MyColumnbox", 2 - -while(not quitting) - m$ = message$ - if(instr(m$, "_Select")) then - currentRow = columnbox get "MyColumnbox" - print columnbox get$ "MyColumnbox", 2, currentRow - endif - if(instr(m$, "_Invoke")) then - currentRow = columnbox get "MyColumnbox" - currentItem$ = columnbox get$ "MyColumnbox", 2, currentRow - alert "You selected "+currentItem$, "Ok", "info" - endif - if(instr(m$, "Quit")) quitting = true -wend - -window close "Example" -Explanation: - -In this example, first a columnbox is created. It has a horizontal scrollbar. Due to the options, the columns can be moved by clicking and dragging on the column title, they can be removed by dragging a title out of the columnbox, the columns can be resized by dragging the mouse at the border of the column titles and by right clicking on the column title a popup window appears. - -Next the column are defined with columnbox column. All four columns have a title and a column number. Ideally this number starts at one and it increases with every column. Furthermore we specify the width of the column and its maximum and minimum width. This is important when the columnbox allows the "resizable" option. - -Several items are inserted into the columnbox with the columnbox add command. Here the column number has to be given and the row number too. The row height is set by the first columnbox add command for a row and here it is set to 18 because we use icons with a 16 pixel height. We obtain the icon from the mimetype of the type "application/x-person" which is given by the system. - -Several colors are set to personalize our columnbox a bit and the second row is selected with the columnbox select command. - -In the message loop we check for the "_Select" and the "_Invoke" messages of the columnbox. When a row is selected, e.g. by clicking on it once, we first obtain the row where the click happened with columnbox get (this can also be obtain from the message itself using the right$ and val commands). Then the item string itself is retrieved with the columnbox get$ command. - -Related: columnbox add, columnbox clear, columnbox column, columnbox count, columnbox get, columnbox get$, columnbox remove, columnbox select -& -columnbox add - -Name: -columnbox add -- add an item to a columnbox - -Synopsis: -COLUMNBOX ADD ColumnBox$, Column, Row, Height, Item$ - -Description: -To add an item named Item$ to a columnbox named ColumnBox$, you have to specify the column and the row where the item should be located in the columnbox table. An existing item will be overwritten. If Row is larger than the number of rows in the columnbox, a new row is created. Furthermore, you have to specify the height of the row in pixels, a normal value should be Height = 14 or Height = 16 for text items. - -To have images or icons as items, you have to specify that with special identifiers in Item$: -If Item$ = "__Icon__="+FileName$ then the image file FileName$ will be shown, -if Item$ = "__Path__="+FileName$ then the large Trackericon of the file FileName$ will be shown -if Item$ = "__Mime__="+Signature$ then the small icon of the mime type Signature$ will be shown. - -Note: These identifiers are case sensitive! - -Have a look at the columnbox command for an example. - -Related: columnbox, columnbox clear, columnbox color, columnbox column, columnbox count, columnbox get, columnbox get$, columnbox remove, columnbox select -& -columnbox clear - -Name: -columnbox clear -- deletes everything in a columnbox - -Synopsis: -COLUMNBOX CLEAR ColumnBox$ - -Description: -Use columnbox clear to remove all rows and items in the columnbox named ColumnBox$. - -Related: columnbox, columnbox add, columnbox color, columnbox column, columnbox count, columnbox get, columnbox get$, columnbox remove, columnbox select -& -columnbox color - -Name: -columnbox color -- change the colors of a columnbox - -Synopsis: -COLUMNBOX COLOR ColumnBox$, Option$, r,g,b - -Description: -The colors in a columnbox can be changed easily. This distinguishes the columnbox from other list widgets like listbox, dropbox or treebox. Given an option string Option$ the colors can be set to the RGB value (r,g,b). Read the part on the draw set command to learn more about RGB color space in yab. - -The following values for Option$ are valid: -"selection-text" -- set the color of the text in the selected row -"non-focus-selection" -- set the color of the selection when the columnbox is not focussed -"selection" -- set the color for the selected row -"text" -- set the general text color -"row-divider" -- set the color of the line between the rows -"background" -- set the background color - -Have a look at the columnbox command for an example. - -Related: columnbox, columnbox add, columnbox clear, columnbox column, columnbox count, columnbox get, columnbox get$, columnbox remove, columnbox select -& -columnbox column - -Name: -columnbox column -- add a new column to a columnbox - -Synopsis: -COLUMNBOX COLUMN ColumnBox$, Name$, ColumnNumber, MaxWidth, MinWidth, Width, Option$ - -Description: -This command takes quite a number of parameters. Here ColumnBox$ is the columnbox where the column should be added. Name$ is the string that shows up in the title of the column. - -ColumnNumber gives the position relative to the other columns. Ideally ColumnNumber starts at 1 for the first column and with every new column it is incremented by 1. The column gets the width Width (thus the next column will start at Position+Width). MaxWidth and MinWidth declare the boundaries for the column when resizing was specified in the construction of the columnbox. - -Finally the alignment of all items in the column has to be defined in Option$. Possible values are "align-left" for left alignment, "align-center" for center alignment and "align-right" for right alignment. - -Have a look at the columnbox command for an example. - -Related: columnbox, columnbox add, columnbox clear, columnbox color, columnbox count, columnbox get, columnbox get$, columnbox remove, columnbox select -& -columnbox count - -Name: -columnbox count -- returns the number of rows in a columnbox - -Synopsis: -NumberOfRows = COLUMNBOX COUNT ColumnBox$ - -Description: -For a existing columnbox named ColumnBox$, this command simply returns the number of rows it contains and stores it in NumberOfRows. - -Related: columnbox, columnbox add, columnbox clear, columnbox color, columnbox column, columnbox get, columnbox get$, columnbox remove, columnbox select -& -columnbox get - -Name: -columnbox get -- returns the number of the currently selected row in a columnbox - -Synopsis: -ItemNumber = COLUMNBOX GET ColumnBox$ - -Description: -To obtain the row that is currently selected in the columnbox named ColumnBox$, simply use this command. If no row is selected, ItemNumber will be set to 0. - -Have a look at the columnbox command for an example. - -Related: columnbox, columnbox add, columnbox clear, columnbox color, columnbox column, columnbox count, columnbox get$, columnbox remove, columnbox select -& -columnbox get$ - -Name: -columnbox get$ -- get a specific item in a columnbox - -Synopsis: -Item$ = COLUMNBOX GET$ ColumnBox$, Column, Row - -Description: -In the given columnbox named ColumnBox$, the item text at the position (Column, Row) will be stored in Item$. For icons and images, this will return the identifier and the file path. - -Have a look at the columnbox command for an example. - -Related: columnbox, columnbox add, columnbox clear, columnbox color, columnbox column, columnbox count, columnbox get, columnbox remove, columnbox select -& -columnbox remove - -Name: -columnbox remove -- delete a line in a columnbox - -Synopsis: -COLUMNBOX REMOVE ColumnBox$, Row - -Description: -In the given columnbox named ColumnBox$, the specified row is deleted. - -Related: columnbox, columnbox add, columnbox clear, columnbox color, columnbox column, columnbox count, columnbox get, columnbox get$, columnbox select -& -columnbox select - -Name: -columnbox select -- select a row in a columnbox - -Synopsis: -COLUMNBOX SELECT ColumnBox$, Row - -Description: -In the given columnbox named ColumnBox$, the specified row is selected. If Row is set to 0, any former selection is revoked. - -Have a look at the columnbox command for an example. - -Related: columnbox, columnbox add, columnbox clear, columnbox color, columnbox column, columnbox count, columnbox get, columnbox get$, columnbox remove -&Dropbox -& -dropbox - -Name: -dropbox -- Adds an empty dropbox. - -Synopsis: -DROPBOX x1,y1 TO x2,y2, ID$, Label$, View$ - -Description: -Adds an empty dropbox (BMenuField) at (x1,y1) to (x2,y2) known as ID$ and with a label on View$. - -Example: - -snippet - -DROPBOX 290,60 TO 480,80, "category", "Category:", "Mainview1" - DROPBOX ADD "category", "Audio" - DROPBOX ADD "category", "Business" - DROPBOX ADD "category", "Development" - DROPBOX ADD "category", "Education" - DROPBOX ADD "category", "Games" - DROPBOX ADD "category", "Graphics" - DROPBOX ADD "category", "Internet and Network" - DROPBOX ADD "category", "Productivity" - DROPBOX ADD "category", "Science and Matyhematics" - DROPBOX ADD "category", "System and Utilities" - DROPBOX ADD "category", "Video" - DROPBOX SELECT "category", 8 - -end snippet - -Explanation: - -The dropbox "category" is created with a label of "Categorty" in "MainView1." Next the categories to select from are added, and "Productivity" is set as the default category. When a different category is selectedm the dropbox returns a message: - -category:Science and Matyhematics - -if selection 9 is made. - - -Related: dropbox add, dropbox clear, dropbox count, dropbox get$, dropbox remove, dropbox select -& -dropbox add - -Name: -dropbox add -- adds an item to a dropbox. - -Synopsis: -DROPBOX ADD DropBox$, Item$ - -Description: -Add Item$ to the dropbox. Use Item$ = "--" for a separator. - -Related: dropbox , dropbox clear, dropbox count, dropbox get$, dropbox remove, dropbox select -& -dropbox clear - -Name: -dropbox clear -- Clear all items from a dropbox. - -Synopsis: -DROPBOX CLEAR DropBox$ - -Description: -Clear dropbox DropBox$ of all items. - -Related: dropbox , dropbox add, dropbox count, dropbox get$, dropbox remove, dropbox select -& -dropbox count - -Name: -dropbox count -- count the number of items in a dropbox. - -Synopsis: -n = DROPBOX COUNT DropBox$ - -Description -Count the number of items. - -Related: dropbox , dropbox add, dropbox clear, dropbox get$, dropbox remove, dropbox select -& -dropbox get$ - -Name: -dropbox get$ -- Get the string of the item at a position. - -Synopsis: -Item$ = DROPBOX GET$ DropBox$, Position - -Description: -Get the item$ at Position fior the dropbox Dropbox$. - -Related: dropbox , dropbox add, dropbox clear, dropbox count, dropbox remove, dropbox select -& -dropbox remove - -Name: -dropbox remove -- removes an item from a dropbox. - -Synopsis: -DROPBOX REMOVE DropBox$, Position - -Description: -Removes item number Position. -Note: If the removed item was marked, the item before it will be marked instead. You will NOT get -a message that the marked item has changed. If the first item will be deleted, the next item in -the drop box will be marked. - -Note: - -Each time an item was removed, the drop box count will change as well! - -Related: dropbox , dropbox add, dropbox clear, dropbox count, dropbox get$, dropbox select -& -dropbox select - -Name: -dropbox select -- Select a dropbox item. - -Synopsis: -DROPBOX SELECT DropBox$, Position - -Description: -Select the item at position Position. - -Note: - -Counting starts at 0. - -Related: dropbox , dropbox add, dropbox clear, dropbox count, dropbox get$, dropbox remove - -& -listbox - -Name: -listbox -- create a list widget - -Synopsis: -LISTBOX x1,y1 TO x2,y2, ID$, ScrollbarType, View$ - -Description: -The listbox provides a list widget that can be filled with text items. It is set up at the position (x1,y1) to (x2,y2) on the view named View$. It gets an own identifier ID$. Additionally you have to specify whether the listbox should get scrollbars. This is given by ScrollbarType as follows: - -ScrollbarType = 0 -- no scrollbar -ScrollbarType = 1 -- the listbox has a vertical scrollbar -ScrollbarType = 2 -- the listbox has a horizontal scrollbar -ScrollbarType = 3 -- the listbox has a vertical and a horizontal scrollbar - -Message: -The listbox provides two messages. The first kicks in when an item is selected by clicking once on it or by the up and down keys. This then has the format ID$+":_Select:"+SelectedItem$ where SelectedItem$ contains the number of the item selected. The second message is send, when a item is invoked, i.e. by double-clicking at a item or pressing the Enter key. It has the format ID$+":_Invoke:"+SelectedItem$. - -Layout: -The listbox will follow all sides as in standard layout. - -Design: -The listbox is an easy method to present a lot of data well-structured in a list. Use it instead of a dropbox when you have enough space or the list of data gets too long. For having icons or images in a list, use the columnbox instead. - -Example: -window open 100,100 to 400,400, "Example", "Example" - -listbox 10,10 to 290,260, "MyList", 1, "Example" -button 10,270 to 290,290, "MyButton", "Sort List", "Example" - -listbox add "MyList", "Apple" -listbox add "MyList", "8088" -listbox add "MyList", "80286" -listbox add "MyList", "ZX81" -listbox add "MyList", 1, "BeOS" - -listbox select "MyList", 2 - -while(not quitting) - m$ = message$ - if(instr(m$, "MyButton")) then - listbox sort "MyList" - endif - if(instr(m$, "_Select")) then - currentItem = listbox get "MyList" - print listbox get$ "MyList", currentItem - endif - if(instr(m$, "_Invoke")) then - currentItem = listbox get "MyList" - item$ = listbox get$ "MyList", currentItem - alert "You selected "+item$, "Ok", "info" - endif - if(instr(m$, "Quit")) quitting = true -wend - -window close "Example" -Explanation: - -This program opens a window with a listbox named "MyList" and a button named "MyButton". Several items are added, note the order of the items. The last item is put into the first position of the list. Then the second item is selected, this will generate a message which will be processed immendiatly. You can see the name of the selected item on the console output. When the sort button is pressed, the list is sorted. When double clicking on an item, an alert window pops up showing the selected item. - -Related: listbox add, listbox clear, listbox count, listbox get, listbox get$, listbox remove, listbox select, listbox sort -& -listbox add - -Name: -listbox add -- add an item to a listbox - -Synopsis: -LISTBOX ADD ListBox$, Item$ -LISTBOX ADD ListBox$, Position, Item$ - -Description: -This command adds a string here named Item$ to the listbox with the ID ListBox$. If Position is given too, the item will be inserted at that position. - -Have a look at the listbox command for an example. - -Related: listbox, listbox clear, listbox count, listbox get, listbox get$, listbox remove, listbox select, listbox sort -& -listbox clear - -Name: -listbox clear -- remove all items of a listbox - -Synopsis: -LISTBOX CLEAR ListBox$ - -Description: -Listbox clear deletes and removes all items in a listbox. - -Related: listbox, listbox add, listbox count, listbox get, listbox get$, listbox remove, listbox select, listbox sort -& -listbox count - -Name: -listbox count -- returns the number of items in a listbox - -Synopsis: -NumberOfItems = LISTBOX COUNT ListBox$ - -Description: -For an existing listbox named ListBox$, this command simply returns the number of items it contains and stores it in NumberOfItems. - -Related: listbox, listbox add, listbox clear, listbox get, listbox get$, listbox remove, listbox select, listbox sort -& -listbox get - -Name: -listbox get -- returns the number of the currently selected item in a listbox - -Synopsis: -ItemNumber = LISTBOX GET ListBox$ - -Description: -To obtain the item that is currently selected in the listbox named ListBox$, simply use this command. If no item is selected, ItemNumber will be set to 0. - -Have a look at the listbox command for an example. - -Related: listbox, listbox add, listbox clear, listbox count, listbox get$, listbox remove, listbox select, listbox sort -& -listbox get$ - -Name: -listbox get$ -- get a specific item string in a listbox - -Synopsis: -Item$ = LISTBOX GET$ ListBox$, Position - -Description: -In the given listbox named ListBox$, the item text at the position Position will be stored in Item$. - -Have a look at the listbox command for an example. - -Related: listbox, listbox add, listbox clear, listbox count, listbox get, listbox remove, listbox select, listbox sort -& -listbox remove - -Name: -listbox remove -- delete a line in a listbox - -Synopsis: -LISTBOX REMOVE ListBox$, Position - -Description: -In the given listbox named ListBox$, the specified item at the position Position is deleted. - -Related: listbox, listbox add, listbox clear, listbox count, listbox get, listbox get$, listbox select, listbox sort -& -listbox select - -Name: -listbox select -- select an item in a listbox - -Synopsis: -LISTBOX SELECT ListBox$, Position - -Description: -In the given listbox named ListBox$, the specified item at the position Position is selected. If Position is set to 0, any former selection is revoked. - -Have a look at the listbox command for an example. - -Message: -Using the listbox select command will generate a selection message. This then has the format ID$+":_Select:"+SelectedItem$ where SelectedItem$ contains the number of the item selected. - -Related: listbox, listbox add, listbox clear, listbox count, listbox get, listbox get$, listbox remove, listbox sort -& -listbox sort - -Name: -listbox sort -- sort all items in a listbox - -Synopsis: -LISTBOX SORT ListBox$ - -Description: -This command sorts the given listbox named ListBox$ alphabetically. Items starting with a number will be set before items starting with a letter. However, please note that items containing numbers will NOT be sorted as numbers. E.g. The items "1", "2", "10" will be sorted according to the ASCII codes and the length of the strings, thus they are sorted to: "1", "10", "2" - -Note: After sorting, any former selection is removed. - -Have a look at the listbox command for an example. - -Related: listbox, listbox add, listbox clear, listbox count, listbox get, listbox get$, listbox remove, listbox select -&Options -& -option color - -Name: -option color -- Set the background color of a view. - -Synopsis: -OPTION COLOR View$, "BGColor", r,g,b - -Description: -Set the background color of any view (note: this is different to DRAW SET!) -& -option set - -Name: -option set -- set various options for views and controls. - -Synopsis: -OPTION SET View$, "Auto-Resize" -OPTION SET View$, "Focus", HasFocus -OPTION SET Control$, "Enabled", IsEnabled -OPTION SET Control$, "Label", NewLabel$ -OPTION SET Control$, "Visible", IsVisible - -Description: -OPTION SET View$, "Auto-Resize" -Automatically resize the view View$ to preferred (when this is supported by the view). - -OPTION SET View$, "Focus", HasFocus -Set/remove the focus of View$ (when this is supported by the view). - -OPTION SET Control$, "Enabled", IsEnabled -Enable/disable the control Control$. - -OPTION SET Control$, "Label", NewLabel$ -Give a Control a new label. - -OPTION SET Control$, "Visible", IsVisible -Set the control Control$ invisible or visible - -Note: - -The following widgets are controls: -CHECKBOX, RADIOBUTTON, SLIDER, TEXTCONTROL, BUTTON, COLORCONTROL, SPINCONTROL, CALENDAR -& -radiobutton - -Name: -radiobutton -- create a new radiobutton - -Synopsis: -RADIOBUTTON x,y, ID$, Label$, IsActivated, View$ - -Description: -Set up a radiobutton named ID$ at the position (x,y). It will display the label Label$ next to the button. If IsActivated is set to true, the radiobutton will be selected. All radiobuttons on one view will act as a group. Thus on a view only one radiobutton will be active. - -Note: On setup it is up to you to preselect a radiobutton. You can even make more than one radiobutton active but this is hardly useful. When the user selects a radiobutton, all others will be deselected automatically. - -You can use option set to disable the radiobutton or to change the label. - -Message: -The radiobutton when selected will send a message string with its ID$. - -Layout: -In standard layout, the radiobutton will follow the lower, right corner of the view or window. - -Design: -Try to align radiobuttons below each other. - -Example: -window open 100,100 to 200,200, "Example", "Music" -radiobutton 10,10, "Radio1", "Classic", true, "Example" -radiobutton 10,30, "Radio2", "Jazz", false, "Example" -radiobutton 10,50, "Radio3", "Pop", false, "Example" - -while(not quitting) - m$ = message$ - if(instr(m$, "_QuitRequested")) then - quitting = true - elsif(instr(m$, "Radio")) then - n$ = mid$(m$,instr(m$, "Radio")+5,1) - alert "You selected the "+n$+". radiobutton", "Ok", "info" - endif -wend - -window close "Example" -Explanation: - -Here we have a window with three radiobuttons. Because they are all on one view (the window view) they act as a group. When selected, the number of the radiobutton ID will be extracted with mid$ and stored in n$. It is then shown in an alert window. - -Related: radiobutton set, option set -& -radiobutton set - -Name: -radiobutton set -- (de-)activate the radiobutton - -Synopsis: -RADIOBUTTON SET RadioButton$, IsActivated - -Description: -If IsActivated is set to true, the radiobutton named RadioButton$ will be selected. If IsActivated is set to false, the radiobutton will be deselected. Note: This allows you to activate more than one radiobutton in a group which is not recommended. - -Related: radiobutton -&Slider -& -slider - -Name: -slider -- Add a slider control - -Synopsis: -SLIDER x1,y1 TO x2,y2, ID$, Label$, Min, Max, View$ -SLIDER x1,y1 TO x2,y2, ID$, Label$, Min, Max, Option$, View$ - -Description: -SLIDER x1,y1 TO x2,y2, ID$, Label$, Min, Max, View$ -Add a slider with a minimum and and a maximum value (Min, Max). - -SLIDER x1,y1 TO x2,y2, ID$, Label$, Min, Max, Option$, View$ -Option$ = "block/triangle, horizontal/vertical" - - -Example: - -see SliderWorld.yab for example usage. - -NOTE: - -The label, Label$ must be shorter than the slider or yab will re-size the slider to fit the label. This can cause the slider to be wider than the view. it is best to use short labels. - -Related: slider color, slider get, slider label, slider set -& -slider color - -Name: -slider color -- set the colors for a slider - -Synopsis: -SLIDER COLOR Silder$, Part$, r,g,b - -Description: -Sets the rgb color for the Part$ of Slider$ -Part$ = "barcolor" -- The color to the left or bottom, representing the slider's value. -Part$ = "fillcolor" -- The color to the right or top, representing the remainder of the posible slider value. - -Related: slider, slider get, slider label, slider set -& -slider get - -Name: -slidet get -- get the curent value of a slider - -Synopsis: -Value = SLIDER GET Slider$ - -Description: -Get the currently selected value of the slider. - -Related: slider, slider color, slider label, slider set - -& -slider label - -Name: -slider label -- Set start and end limit labels - -Synopsis: -SLIDER LABEL Slider$, StartLabel$, EndLabel$ - -Description: -Sets the StartLabel$ and EndLabel$ for the slider Slider$ - -Related: slider, slider color, slider get, slider set -& -slider set - -Name: -slider set -- set the slider value or hashmarks location and numnber - -Synopsis: -SLIDER SET Silder$, Location$, Count -SLIDER SET Silder$, Value - -Description: -SLIDER SET Silder$, Location$, Count - -Set the hashmarks. -Location$ = "none/bottom/top/both" use these valuse for hashmarks for horizontal sliders -Location$ = "none/left/rigth/both" use these valuse for hashmarks for vertical sliders -Count = number of hashmarks - -SLIDER SET Silder$, Value - -Set the slider to Value. Moves the slider indicator block to this location. - -Related: slider, slider color, slider get, slider label -&Spincontrol -spincontrol - -Name: -spincontrol -- Add a spincontrol to a view. - -Synopsis: -SPINCONTROL x,y, ID$, Label$, Min, Max, Step, View$ - -Description: -Add a spin control at x,y, named ID$, labeled Label$ with the range (Min,Max), counting by Step on View$. - -Related: spincontrol get, spincontrol set -& -spincontrol get - -Name: -spincontrol get -- Get the value of a spincontrol. - -Synopsis: -Value = SPINCONTROL GET SpinControl$ - -Description: -Get the current spin control value for SpinControl$. - -Related: spincontrol, spincontrol set -& -spincontrol set - -Name: -spincontrol set -- set the spincontrol to a value - -Synopsis: -SPINCONTROL SET SpinControl$, Value - -Description: -Sets the spin control SpinControl$ to value Value. - -Related: spincontrol, spincontrol get -& -statusbar - -Name: -statusbar -- create a progress or status bar - -Synopsis: -STATUSBAR x1, y1 TO x2, y2, ID$, LeftLabel$, RightLabel$, View$ - -Description: -Use the statusbar to visualize the progress of a long computation process, e.g. installation or search. The statusbar is simply set up with the identifier ID$ at (x1,y1) to (x2,y2) on the view named View$. It takes two labels, LeftLabel$ is shown on the left side above of the statusbar and RightLabel$ is shown on the right side above of the statusbar. - -Layout: -The statusbar will follow the lower right corner of a window in standard layout. - -Design: -The statusbar should give the user an idea how long a specific process takes. This of course is only useful for processes that take some time. Also having a statusbar that stays for one minute at 5% and then immediatly jumps to 100% should be avoided although this sometimes is not in control of the programmer. - -Example: -window open 100,100 to 300,150, "Example", "Example" -statusbar 10,10 to 190,40, "MyStatus", "Start", "End", "Example" - -while(not instr(message$, "Quit") and i<100) - i = i + 2 - statusbar set "MyStatus", "Start", "End", i - sleep 0.05 -wend - -window close "Example" -Explanation: - -The statusbar is put on top of the example window with the two labels "Start" and "End". Using the statusbar set command, the statusbar is updated regularly to the new calculated value i which is between 0 and 100. - -Related: statusbar set -& -statusbar set - -Name: -statusbar -- set the value for a status bar - -Synopsis: -STATUSBAR SET Statusbar$, LeftLabel$, RightLabel$, State - -Description: -Use statusbar set to actually set the bar to a specific value. This value named State here is a number between 0 and 100. Thus, 0 is the empty statusbar while 100 is the full statusbar. During your update, you can change the labels at the left and right (LeftLabel$ and RightLabel$). - -Have a look at the statusbar command for an example. - -Related: statusbar -& -text - -Name: -text -- create a text label - -Synopsis: -TEXT x,y, ID$, Text$, View$ -TEXT x1,y1 TO x2,y2, ID$, Text$, View$ - -Description: -The text command sets up a text label Text$ at the position (x,y) or (x1,y1) of the view named View$. Providing second coordinates (x2,y2) is useful for the alignment of the text, see text set for details. The text label has an ID$ which is needed for text set or for changing the text itself with option set. - -So how does this compare to the draw text command? -A text cannot be flushed and it will never flicker. -A text can be aligned. -The label of a text can change. -On a canvas only draw text can be used. -The font and color can only be changed for draw text. - -Note: (x,y) is the upper left corner, this is different to draw text, where y is the baseline of the text. - -Design: -Text should be used for labels on a view. Use the alignment to make clean interfaces. - -Example: -window open 100,100 to 200,150, "Example", "Example" -text 10,10, "Text", "Hello World", "Example" - -while(not instr(message$, "Quit")) -wend - -window close "Example" -Explanation: - -A simple yab program, just a window and a text label. - -Related: draw text, option set, text set -& -text set - -Name: -text set -- set the alignment of a text widget - -Synopsis: -TEXT SET Text$, Alignment$ - -Description: -For a text label named Text$ you can change the alignment so that it is aligned to the left, center or right. This only works when you have used the text command with the (x2,y2) parameters because the alignment refers to x1 for left alignment und x2 for right alignment. - -The alignment is given as: -Alignment$ = "Align-Left" -- align to the left -Alignment$ = "Align-Center" -- align to the center -Alignment$ = "Align-Right" -- align to the right - -Example: -window open 100,100 to 300,200, "Example", "Example" -text 10,40 to 190,60, "Text", "Hello", "Example" -align = 1 - -while(not instr(message$, "Quit")) - switch align - case 1: - text set "Text", "Align-Left" - break - case 2: - text set "Text", "Align-Center" - break - case 3: - text set "Text", "Align-Right" - break - end switch - if align = 3 dir = -1 - if align = 1 dir = 1 - align = align + dir - sleep 0.5 -wend - -window close "Example" -Explanation: - -This fun program changes the alignment of the text every half second. - -Related: text -&Textcontrol -& -textcontrol - -Name: -textcontrol -- Add a textcontrol to a view. - -Synopsis: -TEXTCONTROL x1,y1 TO x2,y2, ID$, Label$, Text$, View$ - -Description: -Opens a textcontrol from (x1,y1) to (x2,y2) with Label$ and preset it with Text$ on View$ - -The distance from x1 to x2 needs to be long enough for the label Label$ and the textcontrol view. - -Message: -The textcontrol will return a message on invocation, ( by pressing tsb or enter after entering text.) - -id$:text$ - -Related: textcontrol clear, textcontrol get$, textcontrol set -& -textcontrol clear - -Name: -textcontrol clear -- Clears the text data from a textcontrol. - -Synopsis: -TEXTCONTROL CLEAR TextControl$ - -Description: -Delete the text of the text control. - -Related: textcontrol, textcontrol get$, textcontrol set -& -textcontrol get$ - -Name: -textcontrol get$ -- get the text held by a textcontrol. - -Synopsis: -Text$ = TEXTCONTROL GET$ TextControl$ - - -Description: -Get the entry of the text control TextControl$. Even works, when Return was not pressed. - -Related: textcontrol, textcontrol clear, textcontrol set -& -textcontrol set - -Name: -textcontrol set -- Set various options for a textcontrol. - -Synopsis: -TEXTCONTROL SET TextControl$, IsPassword -TEXTCONTROL SET TextControl$, Text$ -TEXTCONTROL SET TextControl$, Option$, Value$ - -Description: - -TEXTCONTROL SET TextControl$, IsPassword -IsPassword = false Normal typing -IsPassword = true Hide typing with * - -TEXTCONTROL SET TextControl$, Text$ -Set the text control's text to Text$. - -TEXTCONTROL SET TextControl$, Option$, Value$ -Option$="align" Value$= "left" / "right" / "center" -Option$="exclude", Value$=characters to disallow. -Option$="include", Value$=characters to allow. -Option$="length", Value$=str$(number) of characters allowed. -Sets the font used to the system fixed font. -Option$="type" -Value$="number" Only allow to characters 0-9 and ".", full stop. -Value$=""alphanumeric" allow all characters. -Option$="focus" Value$ = "true" / "false" Set the focus of TextControl$. -Option$="Cursor", Value$=str$(number) positions the cursor, sets the focus to true. - -Related: textcontrol, textcontrol clear, textcontrol get$ -& -textedit - -Name: -textedit -- create a multiline text editor - -Synopsis: -TEXTEDIT x1,y1 TO x2,y2, ID$, ScrollbarType, View$ - -Description: -Opens an editor at (x1,y1) to (x2,y2) with ID$ (not displayed) on View$. - -ScrollbarType = 0 -- no scrollbar -ScrollbarType = 1 -- the textedit has a vertical scrollbar -ScrollbarType = 2 -- the textedit has a horizontal scrollbar -ScrollbarType = 3 -- the textedit has a vertical and a horizontal scrollbar - -TEXTEDIT follows all sides in standard layout. - -Example: -See Tedit.yab or AllInOne.yab example programs. - -Related: textcontrol, textedit add, textedit clear, textedit color, textedit get, textedit get$, textedit set -& -textedit add - -Name: -textedit add -- add text to a textedit - -Synopsis: -TEXTEDIT ADD TextEdit$, Text$ - -Description: -Adds ( appends ) Text$ to textedit TextEdit$. -This command works when the textedit is not editable by the user. - -Related: textedit, textedit clear, textedit color, textedit get, textedit get$, textedit set -& -textedit clear - -Name: -textedit clear -- delete all text of a textedit - -Synopsis: -TEXTEDIT CLEAR TextEdit$ - -Description: -This command removes all text within a textedit named TextEdit$. This also works when the textedit is not editable by the user. - -Related: textedit, textedit add, textedit color, textedit get, textedit get$, textedit set -& -textedit color - -Name: -textedit color -- set the colors of a textedit or provide syntax highlighting - -Synopsis: -TEXTEDIT COLOR TextEdit$, Option$, Command$ -TEXTEDIT COLOR TextEdit$, Option$, r,g,b - -Description: - -TEXTEDIT COLOR TextEdit$, Option$, Command$ -Option$ = "color1, color2, color3, color4, char-color", Command$ - -Add the command Command$ to the list of words that are checked for syntax highlighting -The char-color behaves differently and highlights only the first character of Command$ -(this happens after the highlighting of the other colors). - - -TEXTEDIT COLOR TextEdit$, Option$, r,g,b -Option$ = "bgcolor, textcolor, color1, color2, color3, color4, char-color", r,g,b - -Default colors are: -bgcolor = 255,255,255 (white) -textcolor = 0,0,0 (black) -color1 = 0,0,255 (blue) -color2 = 255,0,0 (red) -color3 = 0,250,0 (green) -color4 = 185,185,185 (gray) -char-color = 200,0,255 (magenta) - -Related: textedit, textedit add, textedit clear, textedit get, textedit get$, textedit set -& -textedit get - -Name: -textedit get -- retrieve various information from a textedit - -Synopsis: -Width = TEXTEDIT GET TextEdit$, "Line-Width", LineNumber -Height = TEXTEDIT GET TextEdit$, "Line-Height", LineNumber -return = TEXTEDIT GET TextEdit$, Option$ -LineNumber = TEXTEDIT GET TextEdit$, Option$, Search$ -Result = TEXTEDIT GET TextEdit$, Option$, LineNumber - -Description: - -return = TEXTEDIT GET TextEdit$, Option$ -Option$ = "hasChanged" -- returns IsChanged 0 not changed, 1 changed - -This is a hook function that is set once the user changes the text, reset it to false by using: - "textedit set TextEdit$, "changed", false - -Then use this hook to see if the user has changed the text. - - -Option$ = "countlines" -- returns the number of lines ending in /n -Options = "countphysicallines" -- returns the number of displayed lines -Option$ = "currentline" -- returns the curent lLineNumber -Option$ = "vertical-scrollbar" -- returns the virtical ofset of the scrollbar -Option$ = "horizontal-scrollbar" -- returns the horizontal ofset of the scrollbar -Option$ = "cursor-position" -- returns the cursor position -Option$ = "textlength" -- returns the length of the text. - - -Width = TEXTEDIT GET TextEdit$, "Line-Width", LineNumber -Get the width in pixels of the line. - -Height = TEXTEDIT GET TextEdit$, "Line-Height", LineNumber -Get the height in pixels of the line. - -LineNumber = TEXTEDIT GET TextEdit$, Option$, Search$ -Option$ = "Find", Search$ -Option$ = "Case-Sensitive-Find", Search$ - -Specifys the type of search and returns the linenumber that the search string is found in. returns 0 if not found. - - -Related: textedit, textedit add, textedit clear, textedit color, textedit get$, textedit set -& -textedit get$ - -Name: -textedit get$ -- retrieve text from a textedit - -Synopsis: -EnteredText$ = TEXTEDIT GET$ TextEdit$ -TextLine$ = TEXTEDIT GET$ TextEdit$, LineNumber - -Description: -EnteredText$ = TEXTEDIT GET$ TextEdit$ -Get the entire contents of a textedit. - -TextLine$ = TEXTEDIT GET$ TextEdit$, LineNumber -Get the contents of a line of text. - - - -Related: textedit, textedit add, textedit clear, textedit color, textedit get, textedit set -& -textedit set - -Name: -textedit set -- set various options for a textedit - -Synopsis: -TEXTEDIT SET TextEdit$, Option$ -TEXTEDIT SET TextEdit$, Option$, Value -TEXTEDIT SET TextEdit$, Option$, Value$ - -Description: -Textedit set allows you to apply standard editing operations, cut, copy, paste, clear, select-all, undo. It allows you set various options for the textedit, e.g. wordwrap, editable, autoindent. And it handles the autocompletion. Let us have a look in detail: - -Given only two parameters, the following options are valid for the textedit named TextEdit$: -Option$ = "cut" -- cut out the selected text and put it into the clipboard -Option$ = "clear" -- cut out the selected text but do not put it into the clipboard -Option$ = "copy" -- copy the selected text to the clipboard -Option$ = "paste" -- paste the content of the clipboard at the cursors position -Option$ = "select-all" -- select the whole text -Option$ = "undo" -- undo the last operation, note: undo remembers only one operation - -Given three parameters, the following options are valid for the textedit named TextEdit$ when the third parameter Value is either true or false: -Option$ = "autoindent" -- turn auto indent on or off, default is off (false) -Option$ = "changed" -- mark the textedit as changed or unchanged, default is false -Option$ = "color-case-sensitive" -- should the syntax highlighting be case-sensitive? default is false -Option$ = "editable" -- allow the user to edit the textedit, default is true -Option$ = "has-autocompletion" -- turn auto-completion on or off, default is on (true) -Option$ = "wordwrap" -- turn on/off word wrap at the end of a line, default is on (true) -Option$= "focus", -- use this to make the textedit have focus (true) - -Some remarks: -Making a textedit not editable is useful when you want to show long text (or scrollable text). -The textedit will notice when text was changed since the last time the option "changed" was set to false. So when you saved the content of the textedit, remember to set back the "changed" option to false again. Then you know when the text should be saved again. - -Given three parameters, the following options are valid for the textedit named TextEdit$ when the third parameter Value is a number: -Option$ = "autocomplete-start" -- set the number of characters when auto-completion should kick in (default is 4) -Option$ = "Cursor" -- place the cursor at the ofset of Value characters from the start. -Option$ = "gotoline" -- put the cursor to the line with number Value -Option$ = "select" -- select the line with number Value -Option$ = "tabwidth" -- set the tab width to Value (in pixel!), default is 28 -Option$ = "textwidth" -- set the maximum width of the text in pixel - -Given three parameters, the following options are valid for the textedit named TextEdit$ when the third parameter Value$ is a string: -Option$ = "font" -- set the font to Value$ (see draw set for details), default is "system-plain" -Option$ = "autocomplete" -- add the word Value$ to the auto-completion list -Option$ = "align" and value$ = "left|center|right" -- set the alignment for text in the textedit view. -Option$ = "plain" value$ = str$(point) sets the font to system plain font of point size (number from 7 and up -Option$ = "fixed" value$ = str$(point) sets the font to system fixed font of point size (number from 7 and up -Option$ = "bold" value$ = str$(point) sets the font to system bold font of point size (number from 7 and up - -Related: textedit, textedit add, textedit clear, textedit color, textedit get, textedit get$ -&TextURL -& -texturl - -Name: -texturl -- Add a text link to a url. - -Synopsis: -TEXTURL x,y, ID$, Label$, Address$, View$ - -Description: -Set the web/email/ftp address at (x,y) with the label Label$ and the url Address$. -This widget is quite nice, it launches the appropriate application when clicked, it supports -a right-click popup-menu and you can drag the url to create either a person file or a bookmark. -Email can be either of the style: "mailto:foo@bar.com" or just "foo@bar.com" -A web url starts either with "http://". "https://" or with "file://" -And a ftp address starts with "ftp://" - -Related: texturl color -& -texturl color - -Name: -texturl color -- Set the color used for the text of a texturl. - -Synopsis: -TEXTURL COLOR TextURL$, Option$, r,g,b - - -Description: -Set the colors for the URL. Valid options are: -"Label" for the color of the label, -"Click" for the color of the label, when clicked and -"Mouse-over" for the color of the label, when the mouse is moved over the label. - -Related: texturl -& -tooltip - -Name: -tooltip -- add a tooltip to a view or widget - -Synopsis: -TOOLTIP View$, Text$ - -Description: -A tooltip is a small popup that appears when the mouse moves over a widget to give some more information. - -To have a tooltip to any sort of view or widget named View$, simply add the tooltip string Text$. Text$ should be only one line without linebreaks. If Text$ is set to the empty string "", the tooltip is removed again from View$. - -Note: The tooltips look and behave slightly different on BeOS and ZETA. - -Design: -Tooltips can be of great help for the user to understand icons or buttons and the like. However, it does not make sence to add a tooltip "New" to a button that already has the label "New". Rather be more descriptive and provide additional information, e.g. "Open a new image file". For tooltips only the first word should be written with a capital letter. - -And remember, too many tooltips can be annoying too. - -Example: -window open 100,100 to 300,300, "Example", "Example" - -button 10,10 to 190,30, "Button", "We all...", "Example" -listbox 10,40 to 95,190, "List", 1, "Example" -listbox add "List", "...have own..." -slider 120,40 to 190,190, "Slider", "...tooltips.", 1,10, "triangle, vertical", "Example" - -tooltip "Example", "A tooltip for the whole window" -tooltip "Button", "A tooltip for the button" -tooltip "List", "A tooltip for the listbox" -tooltip "Slider", "A tooltip for the slider" - -while(not instr(message$, "Quit")) -wend - -window close "Example" -Explanation: - -The example shows how easily a tooltip can be applied to any kind of widget. Here, to the button, the listbox, the slider and the window view itself too. - -Related: tooltip color -& -tooltip color - -Name: -tooltip color -- set the color for all tooltips - -Synopsis: -TOOLTIP COLOR Option$, r,g,b - -Description: -To change the textcolor or the background color of all your tooltips, use this command. Given the option "bgcolor" or "textcolor" either the background color or the text color of the tooltips will be changed to the RGB color (r,g,b). Read the part on the draw set command to learn more about RGB color space in yab. - -Note: This command only works with the BeOS yab. The colors for the ZETA tooltips are set generally in the ZETA preferences and thus cannot be changed for a single app. So on ZETA with the ZETA yab interpreter this command simply does nothing. - -Example: -window open 100,100 to 300,140, "Example", "Example" - -button 10,10 to 190,30, "Button", "I have a tooltip", "Example" - -tooltip color "bgcolor", 0,0,0 -tooltip color "textcolor", 255,255,255 - -tooltip "Button", "A black and white tooltip for the button on BeOS" - -while(not instr(message$, "Quit")) -wend - -window close "Example" -Explanation: - -Here, the color of the tooltips are changed from the default yellow background and black text color to a black background (RGB color values: 0,0,0) and from the default black text color to a white text (RGB color values: 255,255,255). - -Related: tooltip -&Treebox -& -treebox - -Name: -treebox -- Adds a treebox to a view. - -Sybopsis: -TREEBOX x1,y1 to x2,y2, ID$, ScrollbarType, View$ - -Description: -Adds a tree box. This behaves just like a LISTBOX but is able to show nested trees. - -Related: treebox add, treebox clear, treebox collapse, treebox count, treebox expand, treebox get$, treebox remove, treebox select, treebox sort -& -treebox add - -Name: -treebox add -- Add an item to a treebox. - -Synopsis: -TREEBOX ADD TreeBox$, RootItem$ -TREEBOX ADD TreeBox$, HeadItem$, ListItem$, IsExpanded - -Description: - -TREEBOX ADD TreeBox$, RootItem$ -Add the item RootItem$ to the top level of the tree. - -TREEBOX ADD TreeBox$, HeadItem$, ListItem$, IsExpanded -Add the item ListItem$ under the level of HeadItem$ of the tree. - -Related: treebox, treebox clear, treebox collapse, treebox count, treebox expand, treebox get$, treebox remove, treebox select, treebox sort -& -treebox clear - -Name: -treebox clear -- clear a treebox - -Synopsis: -TREEBOX CLEAR TreeBox$ - -Description: -Clear the tree. - -Related: treebox, treebox add, treebox collapse, treebox count, treebox expand, treebox get$, treebox remove, treebox select, treebox sort -& -treebox collapse - -Name: -treebox collapse -- Collapse a top level category. - -Synopsis: -TREEBOX COLLAPSE TreeBox$, Head$ - -Description: -Collapses Head$ in TreeBox$. - -Related: treebox, treebox add, treebox clear, treebox count, treebox expand, treebox get$, treebox remove, treebox select, treebox sort -& -treebox count - -Name: -treebox count -- count the entries in a treebox. - -Synopsis: -n = TREEBOX COUNT TreeBox$ - -Description: -Returns the number of entries in TreeBox$ - -Related: treebox, treebox add, treebox clear, treebox collapse, treebox expand, treebox get$, treebox remove, treebox select, treebox sort -& -treebox expand - -Name: -treebox expand -- Expand a category. - -Synopsis: -TREEBOX EXPAND TreeBox$, Head$ - -Description: -Expands Head$ in TreeBox$. - -Related: treebox, treebox add, treebox clear, treebox collapse, treebox count, treebox get$, treebox remove, treebox select, treebox sort - - -& -treebox get$ - -Name: -treebox get$ -- Get an item from a treebox. - -Synopsis: -Item$ = TREEBOX GET$ TreeBox$, Position - -Description: -Returns the Item$ at position Position in TreeBox$. - -Related: treebox, treebox add, treebox clear, treebox collapse, treebox count, treebox expand, treebox remove, treebox select, treebox sort -& -treebox remove - -Name: -treebox remove -- Remove an item from a treebox. - -Synopsis: -TREEBOX REMOVE TreeBox$, Position -TREEBOX REMOVE TreeBox$, Head$, ListItem$ - -Description: -TREEBOX REMOVE TreeBox$, Position -Removes the entry at position Position in TreeBox$. - -TREEBOX REMOVE TreeBox$, Head$, ListItem$ -Removes ListItem$ under Head$ in TreeBox$. - -Related: treebox, treebox add, treebox clear, treebox collapse, treebox count, treebox expand, treebox get$, treebox select, treebox sort -& -treebox select - -Name: -treebox select -- Select an item - -Synopsis: -TREEBOX SELECT TreeBox$, Position - -Description: -Selects theitem at position Position in TreeBox$. - -Related: treebox, treebox add, treebox clear, treebox collapse, treebox count, treebox expand, treebox get$, treebox remove, treebox sort -& -treebox sort - -Name: -treebox sort -- Sort the treebox. - -Synopsis: -TREEBOX SORT TreeBox$ - -Description: -Sorts the entries of TreeBox$ alphabetically. - - -Related: treebox, treebox add, treebox clear, treebox collapse, treebox count, treebox expand, treebox get$, treebox remove, treebox select - - -&Localization -& -localize - -Name: -localize -- enable the automatic localization of ZETA - -Synopsis: -LOCALIZE -LOCALIZE Filename$ - -Description: -Not everyone speaks English thus having multiple language support improves the usability of your program. yab provides a very simple language interface with the localize command. Use it once to turn automatic localization on. Now all strings in GUI widgets will be translated automatically if there is a dictionary entry for them. All you have to do, is to make a dictionary for your program. - -Dictionaries for stand-alone programs are normally put into the subdirectory Language/Dictionaries of your program. But if a filename Filename$ is given, the (absolute) path of this filename is used as dictionary directory. Note: As long as the yab program is not compiled with the build factory, you should specify the path. - -In the dictionary directory there should be files named like the programs name or like file name in Filename$. The files have a language code as ending. The language code consists of a two letter code for the language and a capitalized two letter code of the country. For a sample program named foobar.yab, some example dictionaries: foobar.deDE (language German (de) and country Germany (DE)), foorbar.enUS (language English (en) and country United States (US)), foobar.nlBE (language Dutch (nl) and country Belgium (BE)). - -The dictionary contains the English term in paranthesis ("") some spaces as separator and the translated text in the target language in paranthesis too. Example: - -# A comment starts with a # -# English German -"File" "Datei" -"Quit" "Beenden" -"This is a sentence." "Dies ist ein Satz." - - -This all looks complicated, but the reader is encouraged to have a look at the localization of the yab IDE and other tools to understand localization completly. - -Note: Menus and dropboxes return messages that contain a string that might be translated. Use the translate$() function to handle these. - -Note: The strings are case sensitive! - -Note: Currently localization is only supported on ZETA. However, supporting the localization of your program is a good idea for BeOS users too because localization support might be added soon to BeOS yab. - -Design: -It is good design to support localization. - -Example: -// this examples works with the example localization file above -// name it "foobar.deDE" in your home directory -localize "/boot/home/foobar" -window open 100,100 to 200,200, "Win", "Foobar" -menu "File", "Quit", "Q", "Win" -draw text 10,50, "This is a sentence.", "Win" - -while(not quitting) - msg$ = message$ - if(instr(msg$, "Quit") or instr(msg$, translate$("Quit"))) quitting = true -wend - -window close "Win" -Explanation: -This shows automatic translation of the menu strings "File" and "Quit" and the draw text string. Change the language settings to German in your ZETA preferences. Note: The menu strings are also translated when you do not provide the translation file because ZETA comes with some translations for typical strings used in applications. - -Further, we have to check the translation of the message$ too with translate$ because the menu now reports the message string "Datei:Beenden|" when selected in German. - -Related: translate$() -& -translate$() - -Name: -translate$() -- translate a string on ZETA - -Synopsis: -Translation$ = TRANSLATE$(Source$) - -Description: -The counterpart to the localize command is translate$(). It translates the string Source$ according to known dictionaries (see localize for more information about dictionaries) into the language currently set as default in ZETA. - -Note: Currently localization is only supported on ZETA. However, supporting the localization of your program is a good idea for BeOS users too because localization support might be added soon to BeOS yab. - -Example: -print translate$("File") -Explanation: -Using only the system dictionaries, we can obtain the translation of "File" according to the language set in the ZETA preferences. - -Related: localize -& -&Sound -& -beep - -Name: -beep -- ring the bell within your computer; a synonym for bell - -Synopsis: -beep - -Description: -The beep-command rings the bell once. beep is a synonym for bell. - -Example: -beep:print "This is a problem ..." -Related: bell -& -bell - -Name: -bell -- ring the bell within your computer (just as beep) - -Synopsis: -bell - -Description: -The bell-command rings the bell within your computer once. This command is not a sound-interface, so you can neither vary the length or the height of the sound. bell is exactly the same as beep. - -Example: -print "This is a problem ...":bell -Related: beep -& -sound play - -Name: -sound play -- play a sound file - -Synopsis: -Id = SOUND PLAY Filename$ - -Description: -To play a sound file named Filename$ which can be of any supported format (e.g. WAV, MP3, etc.) sound play will return a number Id. Use Id to have basic control with the two other sound commands: sound wait and sound stop. - -If the file could not load, Id will be set to -1. - -Design: -In a GUI context use sound wisely. Remember that not everyone can hear the sound, e.g. because sound is turned off, not supported or the user is deaf or hard-of-hearing. Thus, do not put important information for your application in speech files only. Additionally, remember that bells and whistles on each mouse click can become very annoying. - -Example: -id = sound play "bach.mp3" -while(1) -wend -Explanation: - -This loads the file "bach.mp3" and then waits forever (use Ctrl-C or Break to end the program). - -Related: sound stop, sound wait -& -sound stop - -Name: -sound stop -- stop playing a sound file - -Synopsis: -SOUND STOP Id -SOUND STOP(Id) - -Description: -Stop a sound that is playing with the valid identification number Id. - -Example: -id = sound play "bach.mp3" -sleep 3 -sound stop id -Explanation: - -This first loads the file "bach.mp3", plays it for three seconds and then stops it. - -Related: sound play, sound wait -& -sound wait - -Name: -sound wait -- waits until a sound file is finished playing - -Synopsis: -SOUND WAIT Id -SOUND WAIT(Id) - -Description: -After the a sound file named Id started playing, use this command to wait until the file finished playing. - -Example: -id = sound play "bach.mp3" -sound wait id -Explanation: - -This first loads the file "bach.mp3" and then plays it until it ends. - -Related: sound play, sound stop -& -&Window -& -alert - -Name: -alert -- show an alert window - -Synopsis: -ALERT Text$, ButtonLabel$, Type$ -Selected = ALERT Text$, Button1$, Button2$, Button3$, Type$ - -Description: -By simply calling alert, you can always display an alert window. - -It always has a message Text$ and it can either have one, two or three buttons. - -For the second syntax, the alert window will return the number of pressed button, where Button1$ is the label of the most left button and Button3$ is the label or the most right one. If you specify Button2$ or Button3$ as empty string (""), the according button is not shown. - -Type$ specifies the icon displayed on the left side of the alert window. It has to be one of the following strings: -"None" for no icon -"Info" for the information icon -"Idea" for the light bulb icon -"Warning" for the yellow exclamation mark -"Stop" for the red exclamation mark - -Design: -Use a warning icon to warn the user that something might go wrong (e.g. ask whether to save before quitting) and the stop icon to inform the user that something already went wrong (e.g. saving failed). - -For the dialog box, always use complete sentences, while for the buttons use understandable labels. Capitalize the buttons in English. - -Note: the right button always has the focus in the multi-button alert. Do not put a dangerous action on this button. E.g. for a dialog "Your data will be lost!", do not put the "Proceed" button on the right position, but rather the "Cancel" button. - -Example: -alert "Warning! All your base are belong to us.", "Ok", "warning" -selected = alert "Choose a button", "Left", "Middle", "Right", "info" -print "You selected button number: ", selected -Explanation: - -In the last line, the number of the selected button will be printed on screen. - -Related: window open -& -filepanel - -Name: -filepanel -- open a file or directory selection window - -Synopsis: -Filename$ = FILEPANEL Mode$, Title$, Directory$ -Filename$ = FILEPANEL Mode$, Title$, Directory$, DefaultFile$ - -Description: -In BeOS there is a default window for selecting files or directories to load or save. This so-called filepanel is easily accessable with the filepanel command in yab. The filepanel will open the selection window for you, it lets the user browse, select etc. in the directory tree and returns the selected or newly entered filename. Note: The filepanel just gives you the filename, it does not open, save or process this filename in any way; you have to do that on your own of course. - -First have a look at the parameters. Filename$ will contain the resulting path and name of the selected or newly created directory or filename. If the filepanel is canceled, the Filename$ will be empty (""). - -There are different modes Mode$ for a filepanel. Depending on the mode it will act differently: - -Mode$ = "Load-File" -- the user is able to select any file -Mode$ = "Load-Directory" -- the user is able to select any directory -Mode$ = "Load-File-and-Directory" -- the user is able to select any file or directory -Mode$ = "Save-File" -- the user is able to select either an existing file or enter a name for a new file; when selecting an existing file a popup window will ask whether the file should really be overwritten - -Furthermore, the title for the window tab has to specified in Title$. Ideally this should be something like "Open" or "Save" according to the mode. - -The starting directory for browsing is set with Directory$. If this is an invalid directory, "/boot/home" will be used instead. - -Only for the "Save-File" mode, you additionally can provide a default filename that is put into the textcontrol field of the filepanel in this mode. If you call the filepanel without DefaultFile$, the textcontrol field will be empty. - -Design: -Having filepanels for the file selection is always a good idea. They are much easier to handle than self constructed columnboxes for browsing directories. To use them is just the BeOS way of doing things. - -Example: -window open 100,100 to 300,200, "Example", "Example" -button 10,10 to 190,30, "OpenFile", "Open a file...", "Example" -button 10,40 to 190,60, "OpenDir", "Open a directory...", "Example" -button 10,70 to 190,90, "Save", "Save a file...", "Example" - -while(not quitting) - m$ = message$ - if(instr(m$, "OpenFile")) filename$ = filepanel "load-file", "Open File", "" - if(instr(m$, "OpenDir")) filename$ = filepanel "load-directory", "Open Directory", "" - if(instr(m$, "Save")) filename$ = filepanel "save-file", "Save File", "", "SuggestedFile" - - if(instr(m$, "Quit")) quitting = true - - if(filename$ <> "") then - alert "You haven chosen "+filename$, "Ok", "info" - filename$ = "" - endif -wend - -window close "Example" -Explanation: - -The example above opens a window with three buttons. According to the button the filepanel is started in a different mode. Try to understand the difference in the behaviour of the three modes above. Finally, when a valid file or directory is chosen, an alert popup window opens to display the full path of that selected entry. - -& -window open - -Name: -window open -- open a window - -Synopsis: -WINDOW OPEN x1,y1 TO x2,y2, ID$, Title$ - -Description: -The window open command is a very basic and very important command for most yab programs. As it name says, a window is opened on the current desktop. The coordinates (x1,y1) to (x2,y2) of the window are related to the screen coordinates of the current desktop; thus (0,0) is the upper left corner of the screen. The window gets a title named Title$ which is displayed in the tab of the window. Title$ is allowed to be empty ("") aswell. Additionally, the window gets an own ID named ID$. You can use it like any other view and draw on it or put widgets on it. However, you cannot delete it with the view remove command, use window close instead. - -Message: -A window will send several messages to the message queue: -ID$+":_QuitRequested" -- the close button was pressed or the window received any other message to close itself -ID$+":_Activated" -- the window was activated -ID$+":_Deactivated" -- the window was deactivated - -If your application gets the general message "_QuitRequested" it is asked to close down completly. This is more general than the window "_QuitRequested" above which only should shut down the window itself. - -Design: -Use capitalized words for the title tab in English as in headings (but not in German!). Your window should always act as expected when the close button is pressed. Have a look at the window set command to learn about different look and feel parameters for your window. - -When your window has quite a lot of widgets and drawings on startup to do, it might look quite ugly with lots of flickering. To avoid this, simply construct the window with negative coordinates (e.g. window open -400,-400 to -100,-100, "Example", "Example"). Then move it to its real position on the workspace with the "MoveTo" option of the window set command when the setup is done. - -Example: -window open 100,100 to 300,300, "Example", "Example" -button 10,90 to 190,110, "Button", "My First Window", "Example" - -while(not quitting) - m$ = message$ - if(instr(m$, "Example:_QuitRequested")) then - alert "You pressed the window close button", "Ok", "info" - quitting = true - elsif(instr(m$, "_QuitRequested")) then - alert "The application should now shut down", "Ok", "info" - quitting = true - elsif(instr(m$, "Button")) then - alert "The button was pressed", "Ok", "info" - endif -wend - -window close "Example" -Explanation: -A simple window with a button. Try to close it with the close button and then try to shut it down with the Alt-Q shortcut key. This shows how the different "_QuitRequested" messages should be handled. - -Related: -alert, window close, window count, window get, window set -& -window close - -Name: -window close -- close a window - -Synopsis: -WINDOW CLOSE WindowID$ - -Description: -Window close of course closes the window named WindowID$. All widgets and views in the window will be deleted. Their IDs and the window ID will no longer be valid, if you call them, yab will exit with an error message. - -Design: -It is good style to close all windows before exiting. Always keep track of the windows currently open. - -Related: -window open, window count, window get, window set -& -window count - -Name: -window count -- return the number of open windows - -Synopsis: -n = WINDOW COUNT - -Description: -To get the number n of currently open windows of your application, simply invoke window count. - -Example: -for i=1 to 10 - window open 10+i*10, 10+i*10 to 200+i*10, 200+i*10, "Win"+str$(i), "Win" - sleep 0.5 -next i - -n = window count - -while(n>0) - window close "Win"+str$(n) - n = window count - sleep 0.5 -wend -Explanation: - -This funky program first opens ten windows and then closes them using the window count to obtain the number ID of the last opened window. - -Related: -window open, window close, window get, window set -& -window get - -Name: -window get -- request information about a window - -Synopsis: -Result = WINDOW GET WindowID$, Option$ - -Description: -To obtain some properties of the window with the ID WindowID$, the following options are allowed: - -Option$ = "Position-X" -- Result will contain the horizontal position of the upper left corner of the window relative to the screen -Option$ = "Position-Y" -- Result will contain the vertical position of the upper left corner of the window relative to the screen -Option$ = "Width" -- Result will contain the width of the window -Option$ = "Height" -- Result will contain the height of the window -Option$ = "Minimum-Width" -- Result will contain the minimum width of the window that is allowed when resizing -Option$ = "Minimum-Height" -- Result will contain the minimum height of the window that is allowed when resizing -Option$ = "Maximum-Width" -- Result will contain the maximum width of the window that is allowed when resizing -Option$ = "Maximum-Height" -- Result will contain the maximum height of the window that is allowed when resizing -Option$ = "Exists" -- Result will be true if a window with this WindowID$ exits and false otherwise -Option$ = "Minimized-To-Deskbar" -- Result will be true if the window has been minimized and false if it is not. - -Example: -window open 100,100 to 300,300, "Example", "Example" - -w = 200 -h = 200 - -while(not instr(message$, "Quit")) - if(window get "Example", "Width" <> w) then - w = window get "Example", "Width" - print "New Width: ", w - endif - if(window get "Example", "Height" <> h) then - h = window get "Example", "Height" - print "New Height: ", h - endif -wend - -window close "Example" -Explanation: - -When the window is resized, the new width and the new height are printed on the standard output. - -Related: -window open, window close, window count, window set -& -window set - -Name: -window set -- set the properties of a window - -Synopsis: -WINDOW SET WindowID$, Option$ -WINDOW SET WindowID$, Option$, x,y -WINDOW SET WindowID$, Option$, Value$ - -Description: -This command allows the flexible ajustment of the look and feel of a window. We first inspect the options that require no further parameter other than Option$: - -Option$ = "Activate" -- activate the window, so it is in the foreground. -Option$ = "Deactivate" -- deactivate the window, so it is in the background. -Option$ = "Minimize" -- minimize the window, or restore the window if it is already minimized. -Option$ = "Maximize" -- maximize (zoom) the window. -Option$ = "Enable-Updates" -- updates the window again after a "Disable-Updates". -Option$ = "Disable-Updates" -- disables the automatic window updates. - -To disable updates is normally not needed, this just means that after this command no drawing even from widgets will be shown. - -Given two additional parameters x and y, the following options are valid: - -Option$ = "ResizeTo" -- resize the window to (x,y) relative screen coordinates -Option$ = "MoveTo" -- move the window to (x,y) relative screen coordinates -Option$ = "MinimumTo" -- when resizing, the minimum width and height is given by (x,y) -Option$ = "MaximumTo" -- when resizing, the maximum width and height is given by (x,y) - -Given an additional parameter Value$, the following options are valid: - -Option$ = "Look" -- this changes the appearance of the window accroding to the following values: -Value$ = "Document" -- large title bar, thick border, draggable resize box -Value$ = "Titled" -- same as the document window, but with a less substantial resize corner, default -Value$ = "Floating" -- small title bar, thin border, resize corner -Value$ = "Modal" -- no title bar, thick border, no resize control -Value$ = "Bordered" -- no title bar, line border, no resize control -Value$ = "No-Border" -- a borderless white rectangle - -Option$ = "Feel" -- this sets the behaviour of the window in relation to other windows -Value$ = "Normal" -- behaves like a normal window (non-modal, non-floating), default -Value$ = "Modal-App" -- the window blocks all other windows of this application -Value$ = "Modal-All" -- the window blocks all other windows on the system, the window is visible on all workspaces -Value$ = "Floating-App" -- the window floats on top of all other windows of this application -Value$ = "Floating-All" -- the window floats on top of all other windows on the system, the window is visible on all workspaces - -Option$ = "Flags" -- this sets special properties of a window, flags can be used accumulative, simply write all wanted flags in the Value$ -Value$ = "Not-Closable" -- the window does not have the close button in the tab -Value$ = "Not-Zoomable" -- the window does not have the zoom button in the tab -Value$ = "Not-Minimizable" -- the window cannot be minimized -Value$ = "Not-H-Resizable" -- the window cannot be resized horizontally -Value$ = "Not-V-Resizable" -- the window cannot be resized vertically -Value$ = "Not-Resizable" -- the window cannot be resized -Value$ = "Accept-First-Click" -- when the window is inactive it still accepts the first click -Value$ = "Reset" -- reset all flags back to none - -Option$ = "Workspace" -- sets where the window is shown: -Value$ = "All" -- the window is shown on all workspaces -Value$ = "Current" -- the window is shown on the current workspace, default - -Option$ = "Title" -- set the window title to Value$ - -Design: -Look: -For most application the default "Titled" look will be sufficient. However, heavy apps with big windows, e.g. the IDE, should have the "Document" look. Use "Floating" for toolboxes and other options that stay around, as done e.g. in Refraction. "Modal" is meant to be used for alert windows that block the main application. "Bordered" and "No-Border" are for more creative applications like games and eye candy stuff. - -Feel: -Always try to avoid windows with a "Modal-All" feel because they block the whole system. - -Resizable: -Try to set appropriate minimum and maximum width and height parameters so your application always looks good. - -Example: -window open 100,100 to 300,300, "Example", "Example" -window set "Example", "MinimumTo", 150,150 -window set "Example", "Look", "Floating" -window set "Example", "Feel", "Floating-All" - -while(not instr(message$, "Quit")) -wend - -window close "Example" -Explanation: - -A small demo window is opened with the floating look and feel. It can only be resized to a width and height of (150,150). - -Related: -window open, window close, window count, window get -& diff --git a/yab-IDE/data/Help_En_Index.dat b/yab-IDE/data/Help_En_Index.dat deleted file mode 100644 index 3a0d454..0000000 --- a/yab-IDE/data/Help_En_Index.dat +++ /dev/null @@ -1,664 +0,0 @@ -&Arithmetic -7516 -& -7518 -abs() -7524 -acos() -7891 -and() -8390 -asin() -9180 -atan() -9689 -bin$() -10588 -cos() -11194 -dec() -11459 -eor() -11978 -euler -12755 -exp() -13161 -frac() -13783 -int() -14464 -log() -14864 -max() -15523 -min() -16315 -mod() -16730 -or() -17530 -pi -18323 -ran() -18779 -sig() -19709 -sin() -20439 -sqr() -20964 -sqrt() -21335 -tan() -21687 -xor() -22050 -** or ^ -23083 -& -23900 -and -23904 -break -24354 -case -25049 -continue -25546 -default -26215 -do -27335 -else -27879 -elsif -28418 -end -29888 -endif -30580 -false -31226 -fi -31793 -for -32107 -gosub -33069 -goto -33939 -if -34875 -label -36661 -loop -37650 -next -38137 -not -38696 -on gosub -39348 -on goto -40683 -on interrupt -42107 -logical or -43393 -pause -43796 -repeat -45024 -return -45797 -sleep -47496 -step -47871 -switch -48411 -then -49727 -true -50535 -until -50971 -wait -51578 -wend -51952 -while -52450 -: -53106 -& -53743 -arraydim() -53754 -arraysize() -54644 -data -57217 -dim -58169 -read -59686 -redim -60415 -restore -60854 -& -61923 -asc() -61929 -chr$() -62752 -glob() -63614 -hex$() -64750 -instr() -65240 -left$() -66254 -len() -67555 -lower$() -67929 -ltrim$() -68337 -rtrim$() -68989 -mid$() -69637 -right$() -70905 -split() -72224 -str$() -75359 -token() -80442 -trim$() -83368 -upper$() -83981 -val() -84629 -& -85343 -at() -85348 -clear screen -86721 -close -87519 -color -88057 -colour -89255 -eof -89487 -getscreen$() -90078 -inkey$ -91310 -input -92613 -line input -94157 -open -94999 -print -98126 -putscreen -101531 -reverse -102510 -screen -103373 -seek() -103688 -tell -105250 -using -105911 -# -106952 -at() -108325 -; -109688 -& -110334 -end sub -110342 -export -110774 -import -113025 -local -114585 -numparams -116045 -return -117496 -static -119198 -sub -120196 -&Attributes -122485 -& -122487 -attribute clear -122503 -attribute get -122742 -attribute get$ -123473 -attribute set -125131 -bind() -125717 -clipboard copy -126489 -clipboard paste$ -127191 -compile -127813 -date$ -128369 -doc -130094 -docu$ -131249 -error -132071 -execute$() -132762 -execute() -133828 -exit -134233 -iscomputeron -134627 -pause -135015 -peek -136242 -peek$ -141795 -poke -145412 -rem -146650 -sleep -147764 -system$() -148123 -system() -148712 -thread get -149335 -thread remove -150684 -time$ -151607 -to -152776 -// -153330 -: -153834 -&Bitmaps -154467 -& -154469 -bitmap -154476 -bitmap color -154835 -bitmap get -155187 -bitmap image -158312 -bitmap remove -158599 -bitmap save -158827 -screenshot -159224 - -159470 - -159480 -draw bitmap -159494 -draw circle -160360 -draw curve -161019 -draw dot -162004 -draw ellipse -162585 -draw flush -163324 -draw get -164454 -draw get$ -166400 -draw image -167813 -draw line -169719 -draw rect -170291 -draw set -170947 -draw text -174316 -& -175486 -ismousein() -175498 -keyboard message$() -176224 -message$ -178113 -message send -180446 -mouse message$() -181496 -mouse message$ -183528 -mouse set -184104 -shortcut -184614 -&Printing -187133 -& -187135 -printer -187143 -printer setup -189516 -& -190540 -menu -190545 -menu set -193960 -popupmenu -196001 -submenu -197649 -submenu set -201954 -&Boxview -203711 -& -203713 -boxview -203721 -boxview set -205146 -canvas -205377 -layout -205815 -& -207037 -scrollbar -207047 -scrollbar get -207267 -scrollbar set -207546 -& -208978 -splitview -208988 -splitview get -209926 -splitview set -210156 -& -210689 -stackview -210699 -stackview get -212813 -stackview set -213104 -& -213561 -tabview -213569 -tabview add -213871 -tabview get -214768 -tabview set -214967 -& -215151 -view -215156 -view dropzone -215300 -view get -215585 -view remove -215860 -& -216351 -button -216358 -button image -217673 -calendar -219414 -calendar get$ -221081 -calendar set -221574 -checkbox -221999 -checkbox image -223256 -checkbox set -225483 -colorcontrol -225782 -colorcontrol get -227804 -colorcontrol set -228412 -columnbox -228748 -columnbox add -233958 -columnbox clear -235139 -columnbox color -235507 -columnbox column -236552 -columnbox count -237711 -columnbox get -238149 -columnbox get$ -238684 -columnbox remove -239227 -columnbox select -239584 -& -240040 -dropbox -240048 -dropbox add -241253 -dropbox clear -241527 -dropbox count -241778 -dropbox get$ -242028 -dropbox remove -242322 -dropbox select -242881 -listbox -243160 -listbox add -246125 -listbox clear -246603 -listbox count -246898 -listbox get -247294 -listbox get$ -247781 -listbox remove -248199 -listbox select -248538 -listbox sort -249183 -& -249892 -option color -249905 -option set -250115 -radiobutton -251007 -radiobutton set -252741 -& -253145 -slider -253152 -slider color -253873 -slider get -254296 -slider label -254523 -slider set -254774 -spincontrol -255386 -spincontrol get -255683 -spincontrol set -255913 -statusbar -256133 -statusbar set -257602 -text -258100 -text set -259288 -& -260410 -textcontrol -260422 -textcontrol clear -260947 -textcontrol get$ -261185 -textcontrol set -261477 -textedit -262535 -textedit add -263198 -textedit clear -263523 -textedit color -263865 -textedit get -264846 -textedit get$ -266538 -textedit set -266977 -& -270515 -texturl -270523 -texturl color -271131 -tooltip -271511 -tooltip color -273191 -& -274474 -treebox -274482 -treebox add -274845 -treebox clear -275370 -treebox collapse -275633 -treebox count -275931 -treebox expand -276239 -treebox get$ -276522 -treebox remove -276849 -treebox select -277334 -treebox sort -277637 -& -277931 -localize -277940 -translate$() -281172 -&Sound -281925 -& -281927 -beep -281932 -bell -282166 -sound play -282529 -sound stop -283454 -sound wait -283828 -&Window -284233 -& -284235 -alert -284241 -filepanel -286019 -window open -289309 -window close -292024 -window count -292516 -window get -293143 -window set -294977 diff --git a/yab-IDE/data/autocompletion b/yab-IDE/data/autocompletion deleted file mode 100644 index 5c78b52..0000000 --- a/yab-IDE/data/autocompletion +++ /dev/null @@ -1,174 +0,0 @@ -alert -arraydim -arraysize -boxview -break -button -case -calendar -checkbox -chr$ -circle -clear -clipboard -close -collapse -color -colorcontrol -column -columnbox -compile -continue -copy -count -curve -data -date$ -default -draw -dropbox -dropzone -ellipse -else -elseif -elsif -end -endif -endsub -eof -eor -error -euler -execute -exit -expand -export -false -filepanel -flush -frac -getscreen$ -glob -gosub -goto -hashmarks -hide -image -inkey$ -input -instr -interrupt -ismousein -keyboard -label -layout -left$ -len -let -line -listbox -load$ -local -localize -log -loop -lower$ -ltrim$ -max -menu -message$ -mid$ -min -mod -mouse -new -next -not -open -option -paste$ -pause -peek -peek$ -pi -poke -popupmenu -print -printer -putscreen -radiobutton -ran -read -reading -rect -rect -redim -rem -remove -repeat -resize -restore -return -reverse -right$ -rinstr -rtrim$ -save$ -screen -scrollbar -seek -select -set -setup -show -sig -sin -sleep -slider -sort -soundplay -spincontrol -split -split$ -splitview -sqr -sqrt -stackview -static -step -str$ -sub -submenu -subroutine -svg -switch -system -system$ -tabview -tan -tell -text -text -textcontrol -textedit -texturl -then -time$ -token -token$ -tooltip -translate$ -treebox -trim$ -true -until -upper$ -using -val -view -wait -wend -while -window -writing -xor diff --git a/yab-IDE/data/color1 b/yab-IDE/data/color1 deleted file mode 100644 index e771b1d..0000000 --- a/yab-IDE/data/color1 +++ /dev/null @@ -1,153 +0,0 @@ -EXECUTE -EXECUTE$ -COMPILE -ENDSUB -ENDIF -END-IF -ENDWHILE -END-WHILE -ENDSWITCH -END-SWITCH -ENDSWITCH$ -END-SWITCH$ -EXPORT -ERROR -FOR -BREAK -SWITCH -CASE -DEFAULT -LOOP -DO -TO -AS -READING -WRITING -STEP -NEXT -WHILE -WEND -REPEAT -UNTIL -GOTO -GOSUB -SUB -SUBROUTINE -LOCAL -STATIC -ON -INTERRUPT -CONTINUE -LABEL -IF -THEN -ELSE -ELSIF -ELSEIF -ENDIF -FI -OPEN -CLOSE -SEEK -TELL -PRINT -USING -REVERSE -COLOR -COLOUR -INPUT -RETURN -DIM -REDIM -END -EXIT -READ -DATA -RESTORE -? -WINDOW -PRINTER -SETUP -PUTSCREEN -GETSCREEN$ -NEW -WAIT -PAUSE -SLEEP -BELL -BEEP -LET -ARRAYDIM -ARRAYDIMENSION -ARRAYSIZE -BIND -SET -LOCALIZE -BUTTON -ALERT -MENU -CHECKBOX -RADIOBUTTON -TEXTCONTROL -LISTBOX -DROPBOX -ADD -REMOVE -TEXT -RECT -DRAW -FLUSH -FILEPANEL -LAYOUT -TEXTEDIT -SHOW -HIDE -COUNT -VIEW -BOXVIEW -TABVIEW -ELLIPSE -DOT -LINE -CURVE -CIRCLE -CLEAR -TEXT -RECT -SLIDER -HASHMARKS -OPTION -RESIZE -DROPZONE -COLORCONTROL -TREEBOX -SORT -TOOLTIP -COLUMNBOX -COLUMN -CLIPBOARD -COPY -SUBMENU -KEYBOARD -SELECT -CALENDAR -SCROLLBAR -COLLAPSE -EXPAND -SOUNDPLAY -SPLITVIEW -STACKVIEW -TEXTURL -SPINCONTROL -POPUPMENU -PASTE$ -IMAGE -SVG -GET$ -LOAD$ -SAVE$ -MOUSE -ISMOUSEIN -GET -TRANSLATE$ -MESSAGE$ diff --git a/yab-IDE/data/color2 b/yab-IDE/data/color2 deleted file mode 100644 index 4ce7511..0000000 --- a/yab-IDE/data/color2 +++ /dev/null @@ -1,54 +0,0 @@ -@ -SIN -ASIN -COS -ACOS -TAN -ATAN -EXP -LOG -SQRT -SQR -INT -FRAC -ABS -SIG -MOD -RAN -MIN -MAX -LEFT$ -RIGHT$ -MID$ -LOWER$ -UPPER$ -LTRIM$ -RTRIM$ -TRIM$ -INSTR -RINSTR -LEN -VAL -EOF -STR$ -INKEY$ -CHR$ -ASC -HEX$ -BIN$ -DEC -AT -SCREEN -SYSTEM$ -SYSTEM -DATE$ -TIME$ -PEEK -PEEK$ -POKE -TOKEN -TOKEN$ -SPLIT -SPLIT$ -GLOB -DOCU$ diff --git a/yab-IDE/data/color3 b/yab-IDE/data/color3 deleted file mode 100644 index 426a100..0000000 --- a/yab-IDE/data/color3 +++ /dev/null @@ -1,9 +0,0 @@ -PI -EULER -TRUE -FALSE -AND -OR -NOT -EOR -XOR diff --git a/yab-IDE/data/color4 b/yab-IDE/data/color4 deleted file mode 100644 index 2af2c3e..0000000 --- a/yab-IDE/data/color4 +++ /dev/null @@ -1,4 +0,0 @@ -REM -DOC -// -DOCU diff --git a/yab-IDE/data/color5 b/yab-IDE/data/color5 deleted file mode 100644 index 99b8586..0000000 --- a/yab-IDE/data/color5 +++ /dev/null @@ -1,28 +0,0 @@ -^ -* -< -> -= -! -- -+ -* -/ -: -( -) -, -. -; -# -" -1 -2 -3 -4 -5 -6 -7 -8 -9 -0 diff --git a/yab-IDE/data/updating_help b/yab-IDE/data/updating_help deleted file mode 100644 index 9209647..0000000 --- a/yab-IDE/data/updating_help +++ /dev/null @@ -1,30 +0,0 @@ -To update help: - -edit Help_En.dat - -Be sure that the data for the command is in the treebox adds section. - -the command data sections needs: - -& -command - -Name: -command -- what is does: - -Synopsis: -the command - -Description: -what is does - -Example: -example use - -Related: related commands -& - -Note: the & before and after the command information. - -run GenerateIndex.yab from the data directory to make a new Help_En_Index.dat - diff --git a/yab-IDE/img/Loading.png b/yab-IDE/img/Loading.png deleted file mode 100644 index 768e643c9e3737fe32405ec10f90d327a8baa295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2378 zcmcgu`9Bkm8($LTER{P-jvSkb95qMB(xMeBM~T9m<7>`gg%opSDD*L!a!kco6EP++ z_k9f`<(TA{W6>P>?DhKo0pH)gKRnO#%lq}bp4anwKkxUGa0_lJE+Q`i006{c*RI&| z>lQz59Tehcu&>uA0N~IO*p-X7F*!>Uz9_`ziTKqy<4~!V8?d8ZAPZ21rfR4F5QtI@ zp~8Kj`ba{N_sKz@v7)yUH|`a}GAdzylc-ql?2)7!V`FtcwXSODL1QjSeJ!-mEPAQ> zQ~+3Ik*6srFjD=!!^Bh9*7l^u9oL`>llWsMfq{!I&JdomGOMLo;XkzxgW`)zOY0_1 z6!RPU>pfHOz&=qN2EO-<+K>KMo9+-fL;k(B}P+q<5rj zenSSWUvDp(StTK@KD8%}3p8UU2m1#G8fV&GpsVRS#3LfljL}nqzD)9gFO_~{V`H)h ziKo+WYYyK}T~7>5xYE7e{r+4nZ+LHHb6(HK$EWz+yN7e#xfPX_wsv+`Lqg8oxpPOy zq5J_h>K!ij`33G0tBUF~q~+u5dq^mDW_Fh1*`s8(_49P4AIp%v*(lRZiL}Q}x8M=Z z=MyZ#_sMxnFGZTMyQ&Bn68dP29Ak%9)f4o+7k&4eFDZo8GII6&(9qCrdwYb9O~b%V zbJN!ps3LOw4beR6wY_urvn-d#|5R2QqF5ed72b*vOe&d7UhwzKRwphl6j1YXOT;k2 z&9RVI(+|N?>e>SU{W!no^3pSQkoNf8c(2i#tmD3+2!s)l=@Rt_;+ACG{#mklc4p?5 zgTpnj>`e9C>*?LiNz#W8qO8j3rVx$_5cs_PeM@mkL^2&gq-a-UY;M63HtAj5sS@qV zz-lq}?W~n6dC|dD4a571_%PHFOPH^h7sjvFsGrHSG*)C6W;v_Kimf$GP}f%m=2Zl%#C7OP)%|Gxvd);j z#)UG>DF8>N&It0t&JLC^-CuQvZTG1_ClavV$FV2e=O*?h| zd=J$x$Q<7ZUa?1}zW&P)!7IcH0*b^nwuD|m!UI3@SN61^^e2zU!$9VrUV5YbMCoX? zNoYpB`GC4{V+Wp%F^L*y_r5{AN>H+<#(Px=%h-I4wSniPfJ1)WejV}ao%?g()Ir#z zQraYkgxoEn(3aRE$9Km*U~}YnhI3n>l;y9I;+w9A)y~SgaY!UhZEY)dt4d1hVDJ7I zK&e6{7TKG{8FqPeA8wZuv^(!$CpZAH0uT$uHd0wj11ez9&!5Q93>W{*At1s+Y8kMQtNM&0Xs9k9aAI07_9&+syY`iSgmt+(7R+_Y>n@%JWJJa}Eo#$9e3JR1=avPq9 z^_B53rg{+yW|BFkZeWAMr==*ADfP4lV?HYcV;kJ@I)Ob_5kDW-6MqxJTnUr~P9?#u zjOIk{fx4d*WyLudh&P^{=j}WRWkLOI`!DN)Kpw`~c|jbKkwaZsP3?6u6RL_;22hHH zvmW--_w-MoWvXE?$qBHSmbSKIJ(6i}7UfT1nmxL`{KzmiZF?V%(H}t5F^rS&h4PV_ zCZ0Ky9M7e=+*b({8pobI!!(;?2$pqyv5*F2dZ#X`H#Rk?iL z&HYvKFx~e3%Oe`b#m6@*2v4n24Al$K7A^5#im8VuXis97=5|tOG(u*kbY}f;8R;Q=ihF}%qNv7rz_xJh zVYwAomLY9pBbDe9!sxjVlJO5~ZJ(##9ae^3SrlZ0wq(pBKP8Z3 zNo3j$e>?d!oFrP}k2l5&U@sg#2b_xfGi@tH zw=CXcXwmmRWT5_*M|N`9JTaluqq3g^s`XcS*e|W|muKeY7EYj4TpImGH-Gc6gG}an zr+!blTZ@GB9{t(Qp_LA3koTWqF^Ip6Pv{w4^@^!qDm2^`DwYCzM>zu#tavcm@Ur&h|o~+&30S zbsRs=7{b*8H)(D}qK}tXuNEj>HLQtD!xd!meH`$=jQ;-(*ik;_;87q8h{@vrNB|fV LeuaGL!IOUhDKf8% diff --git a/yab-IDE/img/Running.png b/yab-IDE/img/Running.png deleted file mode 100644 index e86148f9f590ac4fd4cf9ed298836739f54a1b6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmeAS@N?(olHy`uVBq!ia0vp^zkoP^gAGU;WM^z;U|^o<>EaktG3V`_{du)tXltdL*G%qC!!z<@#R>AX;T zKfjv8Vfo(tYKDF9wfp8@eO)_6#n#4Vi;dEP>L^~@-k3|z<~?Bi9>r}dT`6{u`Q28b zUuK^og4TbqWZ~a&`A6Cvy@~3R^sgTMxVi4%k97|VZXEg0;Fo3cW%}u_^DfQkR{hUX zclZ8vTb%`;qb&A(ORV*NntcDC&yxn}-g>wCsu+(+cD4UD)jf%SCwb;cL-yLYyTV!h zpEN}G>fBv@uBN&wX3b*%Xw15;Qu05mF6?>x=3L`v4c9H_Up%d3ZyD)jW&6VR zy#6|~#^ui@cRFpH!(R5#OUOLsq4{T{fb zR;M#2N=Gbet>0C773&Z6|NpG3Szq(y-mkOy%?{e0>hIckOJ;pu`nzP-9h-dVS}o~4 zCV}-IwwAQrxBYb3j*ns5m2I!%ME{&UyZub^^;i7o;#lhI3YS{&m={iW-8V@^_w_H~ zhI1?aw#@vpxWvk`-_7ya_LI-cJh^Q1g{xmwc3sP^*XL37+`jjfa2~^y>^CvrO@5># zzl#c5@+U{;Sz3W-SCa!n-{n`K348y{+V{ke;drI+^lCpr%YgoC&gb)Y$Ub`a?%dS^ zV9eNjc_I+~<<;j?b2RSePG|CbShbnY!SeY+_Jei19|ul(bE&t?=CZEso-$=6_OhoX z*K5sYdrqpc@3iGvz5j-g>*cfADw$jMIk;ZbTp#Je_h$LD!`Zu8=J(tD-nHpLxK`Y{ z__(-T5@r`7x5~NebMMnA@|5a7K51LLt?&Ms)7bo<97vS1OjMJv34G%E>7cM>!3?+c zOuMrmRK~74q1bS0i_<;zqlY{bE0EqBrvZsc)I$ztaD0e0ssP$ BxF`Ss diff --git a/yab-IDE/img/Splash.png b/yab-IDE/img/Splash.png deleted file mode 100644 index 8d5e0f05ba6969533537107970d57fdc919ba2f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21400 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 diff --git a/yab-IDE/img/arrowdown.png b/yab-IDE/img/arrowdown.png deleted file mode 100644 index 3c12b8e4b1f79197811920513f6fcffd1757fc23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1SIo6Pjm-T&YmugAr*7x_8;VAP~bTdRlf7- zlE)pVQzh+#Tm=sPxmBS1ydhS@{Nn*e&$ZiYrA-@>(j2Z>9Qiff>gb-CoSwg5%$H^B XsZ*Le^GgFC&^QK9S3j3^P61SIo6Pjm-TZk{fVAr*6y_tgG2V`gq%wMwg{ zk!QvOozT$GIYq(Cd>tpJIXzq8x%k9F&&8*oraV0$d$h&7sj;z9@EtoF8=FbK!k5Hf a{0uH}G6{lPUhM*!$l&Sf=d#Wzp$Pz7Rx0oS diff --git a/yab-IDE/img/bindd.png b/yab-IDE/img/bindd.png deleted file mode 100644 index 3d1e36235d2bb37b476b056bd855837a649600dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmV;J0cZY+P)1D~iI9&7_%(JGa*bSLw>F!D$fbxJYKrU@X0N$o zB^T7(RBzwTyqR5IE&7b`48bzcg}?C2{dyJK^E?2SWd+Nitf}AebTOGsgb)B$tJQM{ zO&t!00Hl2{XPKO zw%6-5W2~V42>@hSHX4m|ErdwZln`Q?CZ+UVP&`pX2Oxwz{`gHmDb4fz@mj;OtS6Dm z-8+X$c}l4`j<45i7>2Xi ztkr4(s1@5<-VUYIe!tiK`Fw8McE{=HW36hvtMChnZKIF*MKE#z00001t-E_wkWwoppM9w1}x;3giUsRt0;xe|JWCfO8Mx)W6J44uwwq@}bp8=)0E z#JEUo)0n)Q`QiQJ;}h9BqYmDMmtQJ`lP0!R5_sO+dKX?i{4_F2a<|S3fgD>Tzoix|6#xJL07*qoM6N<$f;=6cUH||9 diff --git a/yab-IDE/img/bindp.png b/yab-IDE/img/bindp.png deleted file mode 100644 index 4bb0bc94f4d8711d454558983bce9793a5d5075e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)u6$;(^12T56L+O$|phG4FDFv4bP7Ym)g9t%` zAc1Ni4$TsD(7JSSNNvMI3*PC$JKs6?zISusIOIRIzT!^kB0XeH{{)0C+_nZhO&dZN z3q}SOuAL57o?@Dw<2c!bd{!!S(SQc*!r9C|DwN;<-&28x@v9LP}Cra_iPJz zg9A8$V%s$owb1L{dfweQoF`~a7YLGAv#l2x!aMk|13B9Yl6cnaB=QUqxt^7}mfLPc zQSXyjv#o8ov8{-Gd4{xnC^lUpcqTfXjMyr}8U-+9APOc~@_OJA14YSk31~*;GkX(D zO7)kPHh&Sw2J#H66P#mb{z}o{2t`#S!IGK5CE)vho^-dq5?&uSN~H%mVLF5vfM2WC xs@3W|A>Eer%N6hZr`r+m0j*X`2vI+*1K)1ucX5;`TE_qY002ovPDHLkV1j5@srvu` diff --git a/yab-IDE/img/closed.png b/yab-IDE/img/closed.png deleted file mode 100644 index c4f0771a63a5231667ca07e44900060903f2bc97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmVpI{&R4HYC?VLk%(j3FTR06{&+d7O7Tf%RFzyA`I00000NkvXXu0mjfjxJ;a diff --git a/yab-IDE/img/closen.png b/yab-IDE/img/closen.png deleted file mode 100644 index e2a9d07eec80c3e12872a567d4b29ebf8ffc83b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmV_G-$0Hj>#9B~gRX)vLvKE=s@{)rv(tH(c4soc~i zPtWBlB^7J)W2%k9s-%w6*EHoo+@#th=5QsYF7ABn#M+HntQ8RvnSr#}nCD&TSI@d$ z-vfAx0B}SNvog?mVv6bl@aQ@WLo``JxB-&d5nVA9A069T=n1fd&}O6fI=FE>*SmDU tKI!>*+yXdGn$&N({Yx6SjY6k?#~c6VZxop<-pT*~002ovPDHLkV1g>dXORE^ diff --git a/yab-IDE/img/closep.png b/yab-IDE/img/closep.png deleted file mode 100644 index e0d9f3f2c2206a6757c7685d52c765b1044ed02f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmV;@%kcDlXtZsgL0Nx(?{yq6q)MhlXpTJ5rc>!0%ZeWJG1pw zO5Wl50`Q0dfK`iX34^j04P}o7LL0pIY!d$p3frn>s9~kR<=@mZ0_)j|#=&|=GyHVG pS-7obtN^M`Gdiu;vosJ~uP;*tSN5;LSw8>(002ovPDHLkV1i+|UTy#Y diff --git a/yab-IDE/img/copyd.png b/yab-IDE/img/copyd.png deleted file mode 100644 index 3616add71dfc138abf2daf0168d45b6a671d8c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP)zJjUZ@cKw;-yv7CQaM4W1N znBUHOGiv#}#5>`=)eYd|u~hz)07OJYY+{TVeUF|3K@h}od|R2#W{Yw${2E??T<4Eu zmSq4)0vHSimQmJpuJh@1dfRQES(cHU&*zuAYnmiUtA0ElYps=1Ns{z>y);cl#08X6 zm%Jzn09xxX45KLWeV^o=>D_K8A|%`G_GB^va6BH1qG&W401k(P3pATetIA3u>H9u_ z&1O?oRTM>V*1Fwpc@rYi?REk5`+WfW{oVySosMJad_DtMuh&&owOXyG6RZ=G_KSMG zUaQrNF(UF}!s&DZuv)FGW6$&M04o6h*9BmV0g!&Cm!2!&T>4r30TMyBuDEdbRR910 M07*qoM6N<$f<*tH$^ZZW diff --git a/yab-IDE/img/copyn.png b/yab-IDE/img/copyn.png deleted file mode 100644 index f8f62d21efce10b12d04939aaac872426486f888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 zcmV;00eb$4P)2FHSbRz{(tkU{9|B2Gf%;!+ZEiG$fR%aOZw zc#xQLX#0l8{rY}C_wJpNex>+NXwrQBu?A3ihm^Gzx-%s%jKXene=sTEsb@&q9dGs1_WLN6tCt+;v^ryI!xBWwqOF0H@Q5 zjA}u*+ob|H=X5v2FaYd!yFAYw$C3LG$8m+GJRA-Ic%BC!NfMdR@AsvbEs6rbcDv2< zyw~f=gu~%bc~c$?1^_I}GEI{)CKvroxZQ35Hk(bFra}l!(;9;N{a$s0GGh$DbTY-H jcF`U?@RyK3->>ll$5hzqn-E*600000NkvXXu0mjfo7=BZ diff --git a/yab-IDE/img/copyp.png b/yab-IDE/img/copyp.png deleted file mode 100644 index 1d3e1918e205762f3f798a26156241f80623c102..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)WO;Dyx5HV|b z@7_BbhIMro5pQ_maDJS3?ls(~uOU7K`rAH3E11E$;jNt=lk+fMMoNr*qZA zrA35@lu`gTn~iPTkw~OmF6VN&R;xus;SQ#01{i>JIt{?K?bT{UM9eHAcffo;*IH|> ztJSL38o+kDO{G$qOa{Pmx%7Si4k(pMA|fJ6so-zXXcWM3IP^TPP$-1gI+;wEnVGfL z%uGbJS`9$6*#xjyEW!!(dOcL>bUFbT3xDXNFA+M0;z`Q^j1HO=Og>Z$1u%$&HO+wD3u}F#~ zCgci5#3aZ0SHsSJJO9oM3H$)Bh&GSBjpuE=7XSdZZFe#4z+f>9*Ld_JGkG^Lcz-exxdfa5rfF#u&*x~>}p!G6EDEGrDdJkJk@gK3)E zukGBJ_W-OuSL^kfbFL@~r8kqyumu2e*bhj0U-Cm-HlBq6J6JR-)D@~buFbF z4u^GJ$8l_an4~%B=qEZJk3xv?c&w^wS(X5v|L~|h&xH^GMx#*_MaH}F+@)qur_-sX yX_w2TnQgHIVE4T%ilVBjg}L|_@P|5Aqf5U(R)jSObSlOG00000fhdEP)9Y7S7AdWn*JwW@cevU{JXG^h84PtKIwG ze0-jH{3!zigP@i++x3G`4G=wWhfPRMwdPs{PXAR*s(17+=KN7DsN;}-mS_x+y0N}|@tKboO%{uj7#J81=fv_ny!)1i!)5tCqBP(EIFkl0 Z004&Vdi7Z8kOKe!002ovPDHLkV1gT*v#bCB diff --git a/yab-IDE/img/cutp.png b/yab-IDE/img/cutp.png deleted file mode 100644 index 79237b7d21992a8c1a76eb714ed1beff8cac382b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmV-<0fzpGP)cOeO(b17K8yFZE^!4>IEy1bb@#Du#jEtD# zED#FQq)V4BK^W(n>n~rqbnf0=Mpott$Idg{yL}H56?g93`Tzg_|Ns9#e*DP5zz`Y| z#K6F?Dk(WtM#@f3l7WGtP*u%dkQ-{lz1#PcRFw4f^;ub2Sy)&Y7#M`#d@QlBJay>E z)2|;7z5mL}SDL&A`C$@Y$n-Z@(}wFxcuC z9K3X9>B-CJp@gpC=l2vbQGFxR-|yc3W@AN`!tNvn28MJO>%Sj9d}Co=cH$CI8gKys X>J4}U-!bqQ00000NkvXXu0mjfbOpLj diff --git a/yab-IDE/img/debugd.png b/yab-IDE/img/debugd.png deleted file mode 100644 index cdcb7032aa739f4868d9ac1e5372b93074eefdff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)B>Nu>kG_lkfZ9(zb0y1QAu$o8DTS=h@_Q&H$jQrH?mlw5DmQs#@2TnGw+( zzct-;T}mmXWT~o}_V#6O9m-Th6k~)}VYG)mxP48h$!*P#WViw{&L_gN-gCu&jjwS9 X`@U|-SnOR(00000NkvXXu0mjfB_MdY diff --git a/yab-IDE/img/debugn.png b/yab-IDE/img/debugn.png deleted file mode 100644 index 33f6b11fe0d37828d86d416479d00d73f23f8e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmV+i0r>ujP)9hqcA~^{VOp0|4LSYj6=T(T&QAqR8`n7zV^46*rU2>eGX?A%qaZ z{PewgSWkAY5WDKs@wcO-S*w%(vZdW_S~}M8IYvk|zXaQS+lbk_-fwE_T8u_IvIGDC N002ovPDHLkV1lPIKAQk_@j4I+ue2S~Y%qM~n*&Mr9J zSeRTcUT!azI-d~>x!#ZJD&#;I4J6{U>W!2?Tfa6B95-Y1vol}f4g=&2Vmx1csPTc{3i=q{p zCFMaCk!&%WeR6tsz7@K-yv9WlCxZcF&w-jGsv@EyqRxHKR~5XyJnD2ZQb1i4sfg$p zbnIz*O%lz9h^V!Z!c~TD!)||oWv|R|c(9z!F~-nuG_t+tcDwYN-aZ7dw#n+-T5AjY zN52Kva1jHT!$ync!61$U;<)&G8)ImtDXlauU^hUw+g&3i1#P@quh#>h)9C~idw(Fl Y0P))`DzS`(&4U&66gD}>g0*$P3*-Xk9w`JZwFo{~yCCQxUJ-D`KkV*T zC7Jonmzj{;^X~~CNR+}Y@<$E;sBY@3)cfy!Wf)^wmRV~>De^~-0Dw|@WU8uim?%XM z1aTZIrP4G-2mt^BfO(#eSdt`lQ){g`=WW|sYl9$=Qo1Mt0N?jdFDa$uoMVhBrG4Ks z#$LU-4A1j+j8cj*hA|$7fe=CnsjA8`0Pu4)4=2aCR#)cbcC?D3sO!3AS*B?+#%!54 zZebYqeQ%68hECj+QsX$f>?BFtVcpd0GoE8Rz-h~zV?|MHx7J!I9C6bA6m6$4YpY*~=V9;?~O=8jKYoVAgFD@3eKJM;np$*fEj-rA|XKm-Sf#E_}# zCFo$4Q2wa&n=tSFEO?e#b*eBSj_a5Q({HI%jkRv?w~difW?6Ni)Bzv3dL?MC=2<%qSzGT+9G$ zHj>`HI_C0`gUP&W7AAwG0Y*ex7fhc4M7zkmRH41fJrAn$w5XQaR_gEMh7-HjNaVcHAa4}quoSfXlhY!zGRVk?|L2WB5=fc$E z@4p+aM?^$qZFIDhl+>n#1O^5M#(TH##m2|_D4oUBw&k8N0|Ud+V@Ee-xhJhUo2seF zz`)Rc_%On6a&B`mwPi6dM8`#M%5s-XG|Cp;IdS6UOkG`s-yk3=HVRFfl$4a5oSbB$ z(UvXk#;@HMMKSnI+X)GICR~AmaO#$J5^XJRW`hDs7 z^XJGhOu)7&KAMjnJ$nB9Ihr_j+oYtVodcx{aLZr_6^ZTtW^0svyjZtL8`zc&B? N002ovPDHLkV1m#JrF8%R diff --git a/yab-IDE/img/helpd.png b/yab-IDE/img/helpd.png deleted file mode 100644 index d2f78e191f385c35d8d5d3a837476c888f8cc11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxL|P)Unj8jVJ;*PBcxwrx*;rYW}b)!~xYip0ToyWJoN q{y*mV_GcT(Sd*IEd_v?1-s1tBbf8fN-5rep0000j9KklMzyv)Ktwz}s{HPUh zX8TR#hfz0WPYsBBu~8r&K-yP_E#$sY#J$)zBuN6m8o=xeEdZ#)%wZjaMG8~yR*?q% z2tZyAT?5+fHUJ8q9qI+%9d-dR&$I|F4`7GeQ;zotCTJ}pf4QQl?VqmaGia%3J`G+kmKg%C9*@US6#X$lc*m!dl2Q)NFR!mg{eIt5 zcTc*)OI950a5&8K+!!-2!!Ya|cKiv2r*c0PU-}Qe0iXqUn`O_D*#H0l07*qoM6N<$ Ef-iKDS^xk5 diff --git a/yab-IDE/img/helpp.png b/yab-IDE/img/helpp.png deleted file mode 100644 index 0af34fb737cc619532608b3d3859a88ddc914763..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmV;F0c-w=P)0)+zLKgEnjRKp)%9r%W@e=j zu8@$HMd15-h7D+Xpc+ifP3qGaqKaoqNqIm-K76<=EUc#KWLD2`%Ea8{%*itlaV7}$ z?%g{E1_m}ZJ_ZJcKR>@Tq%$%wF!1v${r~?DE{mc80^Yv8^6lG`mJr^Cng8!@S;4@- z@b~W@G*2_ZTr9-E!0_zZnHMh(z~x@QzVzkGJGd+aFv2|q@wA@1ovf_o)}~I42$N4= zUq3thuyGbj;4&g}AbKExQ+fi)(fx4m_Pxeg3=Gd07#JA7U&NvsT>~7*E2&`> z$F4yod~ss=&E4QqKX#$!hhV%312_!t-%va_>~A3ttw<8bWg!Km0MG+9PW yZ^09+t*!0v-@oDF?Ck9G=gh~V0ip+2J^=vSPL4BGUj)wp0000Zv3CY@c%T!|NlT_{QrO2|Nk@o|3Cd7$R7oxAu#Mhpp2HITcjuCR2kATcw_suzBn`-)Vb#Nqb;T%$%Hc z?Iu_EG?-|9Uox*+L_;jov$o#i*0!sMCjU>zXdv_HouNL!hf|KBt1 zv(0(;xM`=KoQ$3qExT6JzK^-GOsza6p{>yLGt<^Pmd`yC7F`1Rlfl!~&t;ucLK6Uq Cij@HX diff --git a/yab-IDE/img/info.png b/yab-IDE/img/info.png deleted file mode 100644 index b7d7ea8a9c2af31dfb7ef7b94cb3b1718cde0f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmV<70UrK|P)+jT7*{po01nLJ%OIJp0+9 zF~;!sdANZAJeGV(MEvV{)n^z7tS3imu_o~Y5plp900Ru}!&Q}(9kdQWfwpg-U>{(m ziMD_%WryPM4azgX3#`Klo6nr0X$G$W;7+}F4}3LMEpT~mLc}wXu^4>S8rmr+qR`lJdUx3jo!d2lqT5RhMpQ15)R{(F~-0%JYQ+p_<}BMHg*_AtTY`!)pz)9 zw9Fv=caZTuJ;oNg4UN>qjPIajeLwW6rTcgTlGFKKH)g{7dE+ XYWu(}A_HBC00000NkvXXu0mjfZ5!Q; diff --git a/yab-IDE/img/logo.png b/yab-IDE/img/logo.png deleted file mode 100644 index 3c2e46c6d279ce2bcb3a053a22f40f7482affc34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11504 zcmdT~=RcfJv{x2u5v&@bcUC761YwEZ%j&B{bP3T#7oCU@B_u>&W%W*0i<0O z6bp+PO9lQ^-{;eA*1Q}2WbOV(c+!Wm9DTKT@ej5-bsWD_g4n%~-&GQ|OlbHW2_lj_ zVsmMReI>rVX(6TAu*tqjyUXD=Go#$-Y%S#eGp#XdR{yv*Svi5Cu#!Wnz&fc@;yv4| z0T!N^Hd2Z)%AmdU-=fv$KhBTIx*m!@ND`elp0E97(Y)Q4%mu>2;vL>SCj>YXB!giE zi^!p|u==quI9S}cAR??U#Q�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 MQPhN&%OgYo2U$adcK`qY diff --git a/yab-IDE/img/newd.png b/yab-IDE/img/newd.png deleted file mode 100644 index 01fc29219be0d3186f10c4c9afedef02886815b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmV+y0qFjTP)QjCc4FY#47%D4Mi zP3lLDjoD2fIq$X^=UtxX&bt+v47(}lM_pep*F`e|E3z|7U{)seqgD`OTrmKOqENPf zzMff@#TehKDa#T75uJ{w9T8b;t+lV^c<-4RKnS7hcDvtn0AP$6RT2?quBwWN0Ho)% zy8~rJq_~$Nq6;EQ&*}KCl`(VEG$90IjEMAm4^RI3ro)oD_Y?p)301>yak>Bi diff --git a/yab-IDE/img/newn.png b/yab-IDE/img/newn.png deleted file mode 100644 index 56facb2f203a03d586378df8256adddc7226dec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmV-00nh%4P)b>!3`IW!4PI?eZGsE}d>&n(K#oHANV!ib{6S4?%#w_(*{i zg*o7#I+T_j>^@^kKtzZLz}6E?2>{T2i!>#WwMCjOV27kI2L&Eq4;-vVG}00(C7`nK!a7-Nbt#WlsGYfbAKQ%dRm z_~yL_FpeVtbNRUF;dDM#yJQFJy?4%O5ol1DgPyai=5L;vv-#{>uI9a;rpXRgd!t$O zwlW{RaL(l?RRR3@2e}$EFUwK|p7SZ)eO3PTOML^RCZ%Pz8vjH90000v-(| diff --git a/yab-IDE/img/newp.png b/yab-IDE/img/newp.png deleted file mode 100644 index 2a7532c23e67c9d2738e632ccdbc0be5f75923be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 zcmV+{0n`48P)x5<)EKAJC zjIcF+jNBRFUU1bko92e8R)LvG0#+wq8V7(sS7o&dO03H22Dm2W+QIqz9D)o$GD8>w zv&sCtuIsr^vuVc9(`oz?0FzBY!9XzCBn4rHn#Ttq##s5{`{VmjU`XIbK{lBJPcP3Y zrLOC8&hu=$w_VQJrymZ(;y&Bgt%DdNekV`g&!;dP2G1g6j9&R`3QH;Zi-Q4(VWSY5HIFa=0000b;z6vpvCRV6RxCNLnpB6cK3)?6YBLlz_tEL?(>F&u);Lvj;_r!2e|M&`asgns+p%7+ zF~-m|4fFXtj+y5F!JrfM`4h0Cf+`sWIL#c*|i%a7J>!sxjitap@a$Dq^xXw{pvn%Fk z`9qF(c6t+<)LI!owu+>#zIyrHn>QzH!Vb+3*tPX$?^llF0e@xptvP+@iSL@5zQs>> zdjwzjxT$;HYTrgbj@X5_3J=T(YGM&Na$TyycV|4~jVp><823q^3J|$rv?|fsdftLN z_QoPKN8K#3OewmzR&Pz@dx36K$cmMzZAY({UO#lFIi~s<1oB#mxx&Q!&!2keh zYybfINdN#!DgXc(H*uI3KL7v$I7vi7RCwCFl)q}jFc8MSgwqh{Sk%T(&@tfEg9i`I zBXrH+XYgQ0Uy|kiiJl!QiTjZ2AX!XpoNkouuzh8fmTZ zTN~pKHUvv4rIbUo?lB=m(;S=TD1;C~IAbtOcEgzhPEu=al3MHC^V2EpzVrM3jj;)1 z699}&UUpk&7@dmL@c_>GWgls)Ev1ZONkrxmoT+WNC5H^DdN90KDnc^q+nIRasudY8QnpiZ7)iqP(i|sxrw(APmEH sIkG+jvkjss0uTg&)9HZ!?EgVf&2qEbE zUZJm8-}h$l6&{8GAq1z>N%gMR>)M$490Itmt5WRud#(R^8aBbHmN58wU5Ji8oT*4h4J&`Dq#)qKsIgnhtw!{IFiVi8Km=n0SB1P_8afdBtWxSZ(@ERkV z$7jBLdcWStu%iW_2aUfu<&GV#lo9|DCA0j>>hKvm44XOogW z1^^IaOwVTk#uzpaQUUPZ8)I1BjI_(wbAH|*cOk^GEPdZgDW_=)A=GtUz8yliU2j#s z<-Jd7|78C3W=G4NCYq*UGigM`RjoPP40oC`cRBN-2Tepo6l2V5RZ8)G?yNcaP2vAZ znfvo>*xVx`YTMR1C#CEzT~!LZna;TnIb|lx-K9I^lzamhYm23ue^-3~0000ujP)ef+8Co)?&ZW8*kW5N?AT>FxyS0GSV_1T@@&RD>elwe@ipaUi%K*$zRRy9v znec1E6698?BR0GuH(4`3uSf&@TD6BVvAXjysj}Zd~_3{%%d$-M;UeM{~*S>jPgdcR>$2SC#+( N002ovPDHLkV1mqHZw>$e diff --git a/yab-IDE/img/openp.png b/yab-IDE/img/openp.png deleted file mode 100644 index 665e73d9a9208928fd4bc0a8b9242fc214fbff7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmV+#0pST5Jk@sOVFO=HZ!0!Pyj<9F+dmu20&s6pa@N>Opqp#h}_a-gA`72#28FW@+-^M z^Z)l{Gtmq9Q#*4DIU+|3V!Z07*qoM6N<$f>#K4H2?qr diff --git a/yab-IDE/img/optionsd.png b/yab-IDE/img/optionsd.png deleted file mode 100644 index a6ac7748002ae0ac3b29c5e0ed0724547b2a7317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 341 zcmV-b0jmCqP)Zt~5Jf*RRMZ@RL$H$BlhC-}0B$T%Q?KNPBT%h!kwxifiL}0f8xUe;iWDOu76{2N zEZZ~BGxm7A=l2r;fSbP2q)-J;<*yfISuW!V>2KE7+CRxH1EBAF=iCW-z-X-jD5ZWQ zKlY4LN=m7<4uYWXduwf;=WB-phPjldk}$@`actZ6 znqJ>>%d)KNx?vaq)O8I&2mv69qJ12{PzB{?tu@9hg`-U(&)#4yg4g8Z>%lJ^fJePR nHqQC_Nb=ZN`GtE+|NLJ+PN0#f#^RuS00000NkvXXu0mjfFHM&@ diff --git a/yab-IDE/img/optionsn.png b/yab-IDE/img/optionsn.png deleted file mode 100644 index 28f7d7bdc74a28cf8aac4e3dde726f16895a02e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)Yi03pOWnN9Zo=AV*N20(jnV;5J*1fw?^Kxo1e z`7&oh6UdR?XeCv9Z~e_*zAxj11jE@}mDe%GHOAzo-&-DUu4J*#$Eh5bh+R}ljT8QP zAcS}a-T-o>q>5b(O#qOXZFm7mZHd`TZo&iOCe^v}-UAq%NbBkM_6K+c02JGz*cSD* zuCKL{YR+WjNarS;%CCo#K|O%#TmhJPknoLz9FZgL$sUxSe|`!s%vFzvqm**M?9PsR h@~z!j@$|RM;};whisFzo1V{h?002ovPDHLkV1lQ8k4OLj diff --git a/yab-IDE/img/optionsp.png b/yab-IDE/img/optionsp.png deleted file mode 100644 index 223f6426c33ccb8188e96fbc7f75e968e5114277..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmV-N0l5B&P)(`Nl% z)gJ(W-RllOu`dARdCnMnwJK4lY6IBdle@}J#%2(P!=c0he7(Lnw*3GA002ovPDHLkV1loPlOg~B diff --git a/yab-IDE/img/pasted.png b/yab-IDE/img/pasted.png deleted file mode 100644 index 043ce3270fe7efb0aec84017b6192027b33b7607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)AoKD6i^;J@=10fZO{GXDC8Q9*J1nw(U3$A*3wJs;WeIeY@_2S(as4woSq?6h&U-p6kiNy8R26W0a=pF|6wvfaiK& zg1Gle6h&*zIp>_malGp=&ocl;Q8?!!>AH>(!WirO-m)zDNpB2U)6U;8O_Q|I zwk@TUF*Xc?ZQFl$Fbo4{{3tX{Ln)o6X>#ab!W75&+XQPdmte3Ev|>5(I(gddm7+ h^CCYzw`C{%lTTpde&#uI=5_!8002ovPDHLkV1i5Ajw1j7 diff --git a/yab-IDE/img/pasten.png b/yab-IDE/img/pasten.png deleted file mode 100644 index c6aadbb524f34611c932df8a39fbc0b051e056d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmV-)0gL{LP)M6r|^iDYPG ziX6Lx8v+URlOW_o{h&Eh#q_xnAibp5few}}bPRvj_l z@kInW^L6H@%T!7!gb+eVDbrNIC4i`}a00Qc(>~J_(mQ__%S(afK z-lrtb0ubPKFH9yA0B{^n5g3_78x7HEmK;U)pUw zDB?;-e?Y=hU*7lLckd-fyjKtZL8p~f2dX+yTUQ6=G#(X-45ML4Gav`{JtmV$v-*$H z8xB$lWmy)bG>+paicHh28#4Y;JH{CM^@YXCEB}%JA*88B`Im~5vzC)Jd;yj^a|L&m R6Z8N8002ovPDHLkV1hHkpL75K diff --git a/yab-IDE/img/patternd.png b/yab-IDE/img/patternd.png deleted file mode 100644 index 63bd82e34bc71b326e3d4d6cfad7aa507140d7c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 zcmV+q0r38bP)4cGLYIwSRD8UA8_C!0=^{R1FXebh;W5qDzPx;1r}FCa-PX~$W68E z>}0abctbzHCs@gZ5CD)ra5{DzdW zX&SBB9IC3iwnG?(=W{}cmbV0x%U9a6WDep)6h#Ojf(h)y*FC#+UB7AcG}vkVi5G7t VSCWeQZ6*IQ%Sk$c$eUxeX@BL?m4&}YI=S#HFZ`GO<658}S5opo8NvkgX z|6eQt1l!IZebpoWyZ`WBmaPk~>b9ELt4Iq3gm0dmc=uPSW257fW6al5nAz>_$?<*D x1M+!J2yQQaer)~ye~&IP2cB&(UG|Zgp`X`B?CGNOIzaC*c)I$ztaD0e0sxf^Xx#t+ diff --git a/yab-IDE/img/patternp.png b/yab-IDE/img/patternp.png deleted file mode 100644 index d17dd72a0cdd83f48080b94ebabbdad342c7af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Cp}#pLn`JZ?6L=NkgAZu!iTzcYnXWA4X3#q|pPPXdy50A0uO zFkDSd?bYMA#qYn_x}_|g8mbz<|L>ut>6cnOfv#oXj1CChTFcuC^b~`qtDnm{r-UW| D^$KhY diff --git a/yab-IDE/img/redod.png b/yab-IDE/img/redod.png deleted file mode 100644 index e6e0f54234e73f4203439511d4a572de69390ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|nVv3=Ar*6y_muyZW7cfwRJr;j zBf;^pe$*}wUllzoJ|(`y4GT0)4GjKVm}H8gdj_9(1$&TxBsyU=2`D+$AcWAXC%H&+tW0U4NO|t2Use44$rj JF6*2Ung9i|G~ECI diff --git a/yab-IDE/img/redon.png b/yab-IDE/img/redon.png deleted file mode 100644 index da6366031182db57f454eed9670ff40a036c05e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Ii4<#Ar*6y_muyZW7cfwRJr;j zBf;^pcI&o9op+*Rc?H`IA}&mknsx4=ff8#suh+u0GrSZTl%BbEVCpHU?T-wbSR+M(HCY^v$j@JU?43#n%dD&t=?BN` z?V@=L4fXyfY-HTu+G45@eZs*&?m~$0wFXWBKc`}Cy#pSfuW&K=9#KhuVRZNy&{hUd LS3j3^P65C`zT?g?Tqb`nGhq_a@uM6gI90pG*sKoIf}3jyH@;VR)CLxi+e7DAdpLJAv& zgn*Duf_TM-T>MDxw%VPYA2U0!CCjw%*IIrq)BXHo{#Km5{$2x^PN%2SX}8<)V7UOS zzE-!}Z8REX0f5{(RHKTb2!e1p9I_y{4%O&nGU@mGzVA1i%`_fG(QCuOU@$OE6M${o zqA0f8?I?=Wh5FkY)o5yDS#Gsj95{{>1i|%sH4KA;#88b&lElx9u|}ie`#u26vKV7w z7-j(g62>71aU2sudc7Wi?RLw%XN)}n0A+Qd8ioO&QmJ&i-SonB-5>~_K{5l*Qn1-< zs?{nX4s~*JH2n#c(m}epJ<~GK*0>{Qpj_7^=WDoJ=49H^TE9bt|3B!zf{@V)%E?;vzhNcXB5C?w>uaPJFS)) zk{sY@-+nBW4%0v$LmBPc_Mp*N0WulNXzVy<5D?$Lh+{pUNV%S&jD9%IRuG_812As4 zucfRPixVkTV5atIW>hY3*6RwGdfsc2yjYeSMLJo6JO1HtN!Ki7PyVdGieYUsC zg<|ov*?bFv=T2vJAIj*BuD>`=7FfnmMjc&08w~ose_1NYbCJg+z(o{2HW~mPJZ~SU zsHy;X$Vt{G^|`Jev|0)9JK7fn(R*0F*@l{^Zux zTmV^podvCq712LNmvJmfNxg~I?) jc*x~8vkuB=-q-p80-Bl@V)J#U00000NkvXXu0mjf+^MF~ diff --git a/yab-IDE/img/runtermd.png b/yab-IDE/img/runtermd.png deleted file mode 100644 index 37a719be3d391b8de8609dc5443a081b4e5ea905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)%Q-+3pL@{L?b*k91d%>8Y3^4i|e{!7#fBVBcCwQNUPOiXG&?QRB{{# zfMr>fQqS`eNdTf3c#I5!KorGJrvqTS-LeTOrD-I9H+7*Jh5;a-&$rucUa)Q3b=?dS zfWS74Xkh3lK^yG2T&*!(%Q!Kw5BC57002ovPDHLkV1h<_z#jkr diff --git a/yab-IDE/img/runtermn.png b/yab-IDE/img/runtermn.png deleted file mode 100644 index 3a0676bdcba181c9919a5c1d2fd60b134d9f67c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmV;n0ZIOeP)H>@ zC;;f!YIVl+Xmr5XLb{3oqV<+at?N3ML(_cs{a!4ldEWAOQMfc>F@F6yoo=Voux$W+ z)BNy#CqM#_0B|`OkJloRvuqYX&M-={JoNqNU|4e)TKlvOw)Ml z)G*?}Gk7V5Wk-pJ?jG7pR~APZ!Smgkk0 zq~5*&7{HKaQ5?K2k7iumAu607*qoM6N<$f`Bl|zyJUM diff --git a/yab-IDE/img/runtermp.png b/yab-IDE/img/runtermp.png deleted file mode 100644 index dab6563ef87fd4357c14073ccecfff8601bdc113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmV;l0ZaagP)H$J%nH*W}1iI#9kr)UasktQ3ZD8eMjsjYvYwU&arAnZ0Vu)5LZ z=n?2qQ{p5C;%j(%9@nYWcl!O_?|t~a-}m-7^7GF*CsoC^Z=XE9uxsc`OS}l;A2NQ+VWO={a?HI;!H0qwSg)k=% zZTmi#18}G78$d#m7~tKG=mp&PK$f@4Wllcmy3JT$l1#_(?NxM1Rg!qz8;#agwPP3n zZgu^Wv5z2f47=oDIE;wmWhMh4uW8$Y&|}P=L5^pp7Bw9QKtvSJHaFec3uAOPIej*@ zC{c)>&GK|t)0P0iLtY(C9VwhszhMAc5p8vlJ*n6G0GU`YRU81&M!t~u8&;_RK&!32 zJ4pN>AMI4*y20a906;pG4vonjpbY@k8+--M7o^E2i332j3Tjc;zd2TM3EV24c&`$L ecvE*yuf72b(x;dv)5VDZ0000bQs@D4gVN;F8% z6>2M8*Y#&gRaF5n#u#IWh=>$Q=*#&6;Lu$=9pADnK@M#b`ZJ~RHqP@5plw_4eYSS` p4zZ^3mrjLP%hGw_|JeLne*sJKg9RI!G%eFvh$7*v%U03xz=i%Vo~+TW2Pv$PXmdl8|k zg@~})UwZ(#p~D!=ha6QUnx)kYVGQ#$11L{rN;7oZv>(&w{b}9L(@dtXJ!wR@P0Jbb zxJ0h+^>_iO&XozJ+TEpFZOI(zwyVu2>5ltrKimdOx7u9V_X&`;i{2;vkHgpc27t?) U9f;;Zga7~l07*qoM6N<$f~}Zy-T(jq diff --git a/yab-IDE/img/savep.png b/yab-IDE/img/savep.png deleted file mode 100644 index a2521d29e71553c86588d25ced5db8ec98c48a45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmV)FipZC4dk>eKWN_3ah z{{W`mvc1LR^tL5ndn+QUno?rs8Z#|55n(Ja(^BUsu=smFT2&dl5bJ;5( z_lj?<_C|8?FMjary5{AVH#&Cu|G;W>6ZjD?8y+%ar3|%D@>l$wJl`}8n*d>4I^5ytF6(4_m zd|dqe+(V(pTMcOvdJG#|e*QlHUf_IZXJ=t?v3>nN8!fF@pPrsR(KKn&r1SIb?Tg-Y z^ls%9W=u9@5aT^PP51EPMnhd)-qpn$tJW;q($vamYVzP9dtymR`GQu_lXVG+2?;YS ni`C>rGdA@sSr#^FE(=5Dvh->;+1UR;FEDtz`njxgN@xNAXeeJI diff --git a/yab-IDE/img/searchn.png b/yab-IDE/img/searchn.png deleted file mode 100644 index 50dfc7428c1592cd5a7ddc475251391981827c5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|i#%N%Ln`J>4LZnq*nr2T-6!b; zQ=^~Y3!#O>D`U~X+YDKS<_8yu0&X38`kH>rKrJv{Wdn2ZB zG^DLRmmOB8S|rdC9#GP`L)Y(8YP--y&MgbP0l+XkK%G_7Z diff --git a/yab-IDE/img/searchp.png b/yab-IDE/img/searchp.png deleted file mode 100644 index 4abff4cf32486c29f3fea9d42dbbeb66e0c6efe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lRaG=Ln`JZ?B|mLR^8|1_p*13=EqX7)~=V z+_`h-2?N7_AWBR7{~t(?g3%Bd&LP0$sxuAfKh6S=$YLPv0mg18v+aP4Ii4<#AsXlB zUJMjEtiZu?!BykYU;UUIA?2j>S-*Z>a}?O}_TYS;gu?+>tq&{-ZdjmvV3F;Pn>i~I z^@>>CI=0#$T=>z`crowlpeL90|4w~8rTwzAoT>UU-re<2x3pc0Td-&DJ}&{?+nEXP zTg-#6MTJ@zMP#k6oB#N@)%A0#MjKanrIicD-PpS!S<_qHWobaxhOddAES}H#>3^v5 aSbpVqG1>0(FFpg^$>8bg=d#Wzp$P!p&TPs6 diff --git a/yab-IDE/img/undod.png b/yab-IDE/img/undod.png deleted file mode 100644 index 2f37888b97f0aa8bd5c375e886a495d666f4fe0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|g`O^sAr*7Z203yaP~f?IQT?eo zvwZjm^M4L6qRRy499cWtT30=DvPtOTP;TuT({9AG2svF?lj;A~;cb|_;M%C?j0?&% zTT_bMWnbGK(p2yk`oQOxcb1F6L0)P4F}{>-Us(U}eYUmZh;#kq`1bP0l+XkKsaZP; diff --git a/yab-IDE/img/undon.png b/yab-IDE/img/undon.png deleted file mode 100644 index 2a6ada6959670bbcbda4f99cee839f9bfa035174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Wu7jMAr*6y_muyZW7cfwRJr;j zBOx&%A%H7)@Ah3%ha4uibu7+q&^9%h+pM-$WLDEM-c^jjnwxe6WpKstbIB0y85}Sb4q9e0F)*>3;+NC diff --git a/yab-IDE/img/undop.png b/yab-IDE/img/undop.png deleted file mode 100644 index 3a40cfbbed50666a2645f0fef58b35c2d8f6454b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|`JOJ0Ar*6y_muyZW7cfwRJmGm z@c`4pDPMfv$6E0wE?C*nu{gUyd#Y)k>tzPP_H5^j10h{HeC15s%es!IuQoJIC=}8w z*M2$kl+<=0a?)|ka4?n-PdJ#RBF7u?h*4LDGh5-5=MTnB-z75VMKLN0YTTJ@ZpsL> On!(f6&t;ucLK6V}tTy=o diff --git a/yab-IDE/img/warning.png b/yab-IDE/img/warning.png deleted file mode 100644 index 6b7c4788a6996e923c7206173c42ce42ad649f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 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 diff --git a/yab-IDE/src/yab-IDE.yab b/yab-IDE/src/yab-IDE.yab deleted file mode 100644 index a06e841..0000000 --- a/yab-IDE/src/yab-IDE.yab +++ /dev/null @@ -1,3977 +0,0 @@ -#!yab - -doc Author: Jan Bungeroth -doc Thanks to: Genki, Lelldorin, lorglas, Stargater, DasJott, bbjimmy -doc (c) 2006-2017 in terms of the Artistic License - -doc -doc The yab-IDE provides you with an integrated development suite for yab -doc Enjoy. -path() -versionnumber$="2.2.8" - -settingsRCSOff = true -globalConfigDir$ = trim$(system$("finddir B_USER_SETTINGS_DIRECTORY"))+"/yab-ide/" - -if(LoadSettings() = 1) then - - MAXFILES = 20 - DEBUG = true - - - settingsYabDir$ = path$ //"/boot/apps/yab-1.7/" - globalProjectDir$ = trim$(system$("finddir B_USER_DIRECTORY"))+"/yab_work/Programs/" - yabDir$ = yabpath$() - ideDir$ = path$ //settingsYabDir$ + "yab-IDE/" - - buildDir$ = trim$(system$("finddir B_USER_DIRECTORY"))+"/yab_work/BuildFactory/" - globalHelpDir$ = settingsYabDir$ + "Documentation/" - - settingsLangUse = true - settingsLangPath$ = "x-vnd.yab-IDE" - - settingsAutoIndent = true - settingsAutoCompletion = true - settingsACNumChar = 2 - settingsX = 50 - settingsY = 50 - settingsWidth = peek("desktopwidth")-100 - if(settingsWidth<600) settingsWidth = 600 - settingsHeight = peek("desktopheight")-100 - settingsFullScreen = false - settingsFullEditor = false - settingsVSplitDivider = 180 - settingsV2SplitDivider = 41 - settingsHSplitDivider = settingsHeight-240 - settingsCalcPatternX = 200 - settingsCalcPatternY = 150 - settingsColorSelectX = 100 - settingsColorSelectY = 100 - settingsColorSelectR = 255 - settingsColorSelectG = 255 - settingsColorSelectB = 255 - settingsAskForSaving = true - settingsFindCS = false - settingsOldSearch$ = "" - settingsFindAlert = true - settingsReformatAlert = true - settingsReformatUndoAlert = true - settingsTabSpaces = 4 - settingsFontFamily$ = "DejaVu Sans Mono" - settingsFontStyle$ = "Book" - settingsFontSize = 12 - globalRealFontSize = 15 - settingsYabParam$ = "" - settingsProgParam$ = "" - - dim globalAllNames$(MAXFILES) - dim globalTextFinder(MAXFILES) - - for i=1 to MAXFILES - globalAllNames$(i) = "" - globalTextFinder(i) = 0 - next i - -endif - - -restartSettingsLangUse = settingsLangUse -textcolor_r = 0 -textcolor_g = 0 -textcolor_b = 0 - -// globalNoRCS = system("test -e /boot/beos/bin/ci") or system("test -e /boot/beos/bin/co") or system("test -e /boot/beos/bin/rlog") or settingsRCSOff -globalNoRCS = settingsRCSOff -globalCurrentText = 0 -globalHSplitDivider = settingsHSplitDivider -globalReformatUndo = false -globalSelectErrorLines = true -globalNewNumber = 0 -globalNumOpenFiles = 0 -globalWasChanged = false -globalRealOS$ = upper$(system$("uname -o")) -globalRealOS$ = left$(globalRealOS$, 4) - -oldSpinner = 1 - -if(settingsLangUse) then - localize settingsLangPath$ -endif - - -OpenMainWindow() -ActivateMenus(false) -UpdateStatusbar() - -LoadOpenFiles() - -if(settingsFullScreen) then - menu set "View", "Full screen", "mark", "MainView" - window set "MainView", "moveto", 0,0 - window set "MainView", "resizeto", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MinimumTo", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MaximumTo", peek("desktopwidth")-1, peek("desktopheight")-1 -endif -if(settingsFullEditor) then - oldSplitX = splitview get "VSplit", "Divider" -// oldSplitY = splitview get "HSplit", "Divider" - tmp = window get "MainView", "Height" - splitview set "HSplit", "Divider", tmp-51 - splitview set "VSplit", "Divider", 0 - menu set "View", "Maximize editor", "mark", "MainView" -endif - -dim msg$(1) -dim pattern(8,8) - -inloop = true -while(inloop) - sleep 0.01 - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - switch(msg$(i)) - case "ToolbarNew" - case MyTranslate$("MainView:File:New...") - foundEmpty = 0 - for j=1 to MAXFILES - if(globalAllNames$(j) = "") then - foundEmpty = j - break - endif - next j - if(not foundEmpty) then - alert MyTranslate$("Sorry, you can not open more than ")+str$(MAXFILES)+MyTranslate$(" files at once!\n\nPlease close one or more other files first."), "Ok", "Warning" - else - NewDocument(foundEmpty) - if(globalNumOpenFiles = 1) then - ActivateMenus(true) - splitview set "V2Split", "Divider", settingsV2SplitDivider - endif - endif - break - case "ToolbarOpen" - case MyTranslate$("MainView:File:Open...") - foundEmpty = 0 - for j=1 to MAXFILES - if(globalAllNames$(j) = "") then - foundEmpty = j - break - endif - next j - if(not foundEmpty) then - alert MyTranslate$("Sorry, you can not open more than ")+str$(MAXFILES)+MyTranslate$(" files at once!\n\nPlease close one or more other files first."), "Ok", "Warning" - else - tmp$ = filepanel "Load-File", "Open", globalProjectDir$ - if(tmp$<>"") then - foundProject = false - for j = 1 to MAXFILES - if(globalAllNames$(j) = tmp$) then - alert "File is already open.", "Ok", "info" - ActivateText(j) - foundProject = true - break - endif - next j - if(foundProject) break - - handle = open(tmp$, "r") - if(handle) then - WaitWindow(tmp$) - text$ = "" - while(not eof(handle)) - t$ = GetLine$(handle)+"\n" - if(len(t$)*8>4000) textedit set "Text"+str$(foundEmpty), "textwidth", len(t$)*8+8 - text$ = text$ + t$ - wend - close(handle) - globalCurrentText = foundEmpty - textedit add "Text"+str$(globalCurrentText), text$ - textedit set "Text"+str$(globalCurrentText), "changed", false - textedit set "Text"+str$(globalCurrentText), "gotoline", ReadLineFromAttr(tmp$) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - globalAllNames$(globalCurrentText) = tmp$ - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20,"__Mime__=application/x-vnd.yab-app" - columnbox add "FileBox", 2, t+1,20, GetFileName$(tmp$) // "Filename", t, GetFileName$(tmp$) - columnbox select "FileBox", t+1 - globalTextFinder(globalCurrentText) = t+1 - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - globalNumOpenFiles = globalNumOpenFiles + 1 - if(globalNumOpenFiles = 1) then - ActivateMenus(true) - splitview set "V2Split", "Divider", settingsV2SplitDivider - endif - globalProjectDir$ = GetDirectory$(tmp$) - window close "WaitWindow" - else - alert MyTranslate$("Error while loading file:\n\n")+tmp$, "Ok", "Stop" - endif - endif - endif - break - case "ToolbarClose" - case MyTranslate$("MainView:File:Close") - if(textedit get "Text"+str$(globalCurrentText), "hasChanged") then - tmpSave = alert MyTranslate$("File \"")+GetFileName$(globalAllNames$(globalCurrentText))+MyTranslate$("\" not saved!\n\nSave the file now?"), "Cancel", "Close", "Save", "warning" - if(tmpSave = 1) break - if(tmpSave = 3) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - endif - - textedit clear "Text"+str$(globalCurrentText) - globalAllNames$(globalCurrentText) = "" - - columnbox remove "FileBox", globalTextFinder(globalCurrentText) - closeFinished = 0 - newCurrent = 0 - for tmpClose = 1 to MAXFILES - if(globalTextFinder(tmpClose)>globalTextFinder(globalCurrentText)) then - if(globalTextFinder(tmpClose) = globalTextFinder(globalCurrentText) + 1) then - closeFinished = globalTextFinder(tmpClose) - 1 - newCurrent = tmpClose - endif - globalTextFinder(tmpClose) = globalTextFinder(tmpClose) - 1 - endif - next tmpClose - - if(closeFinished=0) then - closeFinished = globalTextFinder(globalCurrentText) - 1 - if(closeFinished = 0) then - newCurrent = 0 - else - for j = 1 to MAXFILES - if(globalTextFinder(j) = globalTextFinder(globalCurrentText)-1) then - newCurrent = j - break - endif - next j - endif - endif - - globalTextFinder(globalCurrentText) = 0 - globalCurrentText = newCurrent - - if(closeFinished=0) then - stackview set "Stack", MAXFILES+2 - stackview set "Lines", MAXFILES+2 - settingsV2SplitDivider = splitview get "V2Split", "Divider" - splitview set "V2Split", "Divider", 0 - ActivateMenus(false) - else - ActivateText(globalCurrentText) - endif - globalNumOpenFiles = globalNumOpenFiles - 1 - break - case "ToolbarSave" - case MyTranslate$("MainView:File:Save") - tmpNull = SaveCurrentFile() - break - case MyTranslate$("MainView:File:Save as...") - tmpSaveAs$ = filepanel "Save-File", "Save", GetDirectory$(globalAllNames$(globalCurrentText)), GetFileName$(globalAllNames$(globalCurrentText)) - print tmpSaveAs$ - if(tmpSaveAs$<>"") then - handle = open(tmpSaveAs$, "w") - if(handle) then - print #handle textedit get$ "Text"+str$(globalCurrentText); - close(handle) - tmpCurrentLine = textedit get "Text"+str$(globalCurrentText), "currentline" - attribute set "Int", "linenumber", "tmpCurrentLine", tmpSaveAs$ - textedit set "Text"+str$(globalCurrentText), "changed", false - globalAllNames$(globalCurrentText) = tmpSaveAs$ - columnbox clear "FileBox" - for j=1 to MAXFILES - for k=1 to MAXFILES - if(globalTextFinder(j)=k) then - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Mime__=application/x-vnd.yab-app" - columnbox add "FileBox", 2, t+1,20, GetFileName$(globalAllNames$(j)) - break - endif - next k - next j - columnbox select "FileBox", globalTextFinder(globalCurrentText) - else - alert "File could not be saved!", "Ok", "warning" - endif - endif - break - case MyTranslate$("MainView:File:Save as template...") - SaveAsTemplate() - break - case MyTranslate$("MainView:File:Export as HTML...") - ExportAsHTML() - break - case MyTranslate$("MainView:File:Page setup...") - printer setup globalConfigDir$+"printersetup" - break - case MyTranslate$("MainView:File:Print...") - if(globalCurrentText>0) then - err = printer globalAllNames$(globalCurrentText), globalConfigDir$+"printersetup", "Text"+str$(globalCurrentText) - if(err = 4) then - printer setup "/tmp/printersetup" - err = printer globalAllNames$(globalCurrentText), "/tmp/printersetup", "Text"+str$(globalCurrentText) - system("rm -f /tmp/printersetup >/dev/null") - endif - if(err>1 and err<5) then - alert "Error while printing!", "Ok", "warning" - endif - endif - break - case "_QuitRequested" - // TODO make backups and save open files - inloop = false - if(not settingsFullScreen) then - settingsX = window get "MainView", "Position-X" - settingsY = window get "MainView", "Position-Y" - settingsWidth = window get "MainView", "Width" - settingsHeight = window get "MainView", "Height" - endif - if(not settingsFullEditor) then - settingsVSplitDivider = splitview get "VSplit", "Divider" - settingsV2SplitDivider = splitview get "V2Split", "Divider" - settingsHSplitDivider = splitview get "HSplit", "Divider" - endif - break - case "MainView:_QuitRequested" - case MyTranslate$("MainView:File:Quit") - tmpSelect = 1 - if(globalCurrentText>0) then - for j=1 to MAXFILES - if(textedit get "Text"+str$(j), "hasChanged") then - tmpSelect = alert "Some files are not saved!\n\nDo you really want to quit?", "Quit", "Cancel", "", "warning" - break - endif - next j - endif - if(tmpSelect = 1) then - inloop = false - if(not settingsFullScreen) then - settingsX = window get "MainView", "Position-X" - settingsY = window get "MainView", "Position-Y" - settingsWidth = window get "MainView", "Width" - settingsHeight = window get "MainView", "Height" - endif - if(not settingsFullEditor) then - settingsVSplitDivider = splitview get "VSplit", "Divider" - settingsV2SplitDivider = splitview get "V2Split", "Divider" - settingsHSplitDivider = splitview get "HSplit", "Divider" - endif - endif - break - case "ToolbarCut" - case MyTranslate$("MainView:Edit:Cut") - textedit set "Text"+str$(globalCurrentText), "Cut" - break - case "ToolbarCopy" - case MyTranslate$("MainView:Edit:Copy") - if(globalIsHelp) then - textedit set "Text"+str$(MAXFILES+1), "Copy" - else - textedit set "Text"+str$(globalCurrentText), "Copy" - endif - break - case "ToolbarPaste" - case MyTranslate$("MainView:Edit:Paste") - textedit set "Text"+str$(globalCurrentText), "Paste" - break - case "ToolbarUndo" - case MyTranslate$("MainView:Edit:Undo") - textedit set "Text"+str$(globalCurrentText), "Undo" - break - case MyTranslate$("MainView:Edit:Select all") - if(globalIsHelp) then - textedit set "Text"+str$(MAXFILES+1), "Select-All" - else - textedit set "Text"+str$(globalCurrentText), "Select-All" - endif - break - case MyTranslate$("MainView:Edit:Clear") - textedit set "Text"+str$(globalCurrentText), "Clear" - break - case MyTranslate$("MainView:Edit:Find") - option set "ToolbarText", "focus", true - break - case MyTranslate$("MainView:Edit:Find again") - if(settingsOldSearch$<>"") then - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - case MyTranslate$("MainView:Edit:Find and replace") - if(settingsFullEditor) then - splitview set "VSplit", "Divider", oldSplitX - splitview set "HSplit", "Divider", oldSplitY - menu set "View", "Maximize editor", "plain", "MainView" - settingsFullEditor = false - endif - tabview set "HTab", 3 - option set "FindTCFind", "Focus", true - break - case "ToolbarRun" - case MyTranslate$("MainView:Program:Run") - isNotSaved = textedit get "Text"+str$(globalCurrentText), "hasChanged" - askForSaving = 3 - if(settingsAskForSaving and isNotSaved) then - askForSaving = alert "Program is not saved.\n\nSave it now?", "Cancel", "Save Always", "Save Now", "info" - endif - - if(askForSaving>1) then - if(askForSaving = 2) settingsAskForSaving = true - if(isNotSaved) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - RunProgram(globalAllNames$(globalCurrentText)) - endif - break - case "ToolbarRunTerm" - case MyTranslate$("MainView:Program:Run in Terminal") - isNotSaved = textedit get "Text"+str$(globalCurrentText), "hasChanged" - askForSaving = 3 - if(settingsAskForSaving and isNotSaved) then - askForSaving = alert "Program is not saved.\n\nSave it now?", "Cancel", "Save Always", "Save Now", "info" - endif - - if(askForSaving>1) then - if(askForSaving = 2) settingsAskForSaving = true - if(isNotSaved) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - RunInTerminal(globalAllNames$(globalCurrentText)) - endif - break - case MyTranslate$("MainView:Program:Set run parameters...") - SetRunParameters() - break - case "ToolbarBuild" - case MyTranslate$("MainView:Program:Build Factory...") - isNotSaved = textedit get "Text"+str$(globalCurrentText), "hasChanged" - askForSaving = 3 - if(settingsAskForSaving and isNotSaved) then - askForSaving = alert "Program is not saved.\n\nSave it now?", "Cancel", "Save Always", "Save Now", "info" - endif - - if(askForSaving>1) then - if(askForSaving = 2) settingsAskForSaving = true - if(isNotSaved) then - tmpSave = SaveCurrentFile() - if(not tmpSave) break - endif - Building() - endif - break - case MyTranslate$("MainView:Program:Open project folder...") - OpenProjectDir$ = getprojectdir$() - - //system("open " + globalProjectDir$) - system("open " + OpenProjectDir$) - break - case "ToolbarPattern" - case MyTranslate$("MainView:Tools:Pattern editor...") - OpenCalcPattern(settingsCalcPatternX,settingsCalcPatternY) - break - case MyTranslate$("MainView:Tools:Color selection...") - OpenColorSelection(settingsColorSelectX,settingsColorSelectY, settingsColorSelectR, settingsColorSelectG, settingsColorSelectB) - break - case MyTranslate$("MainView:Tools:ASCII table...") - AsciiWindow() - break - case MyTranslate$("MainView:View:Next file") - findNext = false - tmpCounter = globalCurrentText - while(not findNext) - tmpCounter = tmpCounter + 1 - if(tmpCounter>MAXFILES) tmpCounter = 1 - if(tmpCounter = globalCurrentText) then - findNext = true - else - if(globalAllNames$(tmpCounter)<>"") then - globalCurrentText = tmpCounter - ActivateText(globalCurrentText) - findNext = true - endif - endif - wend - break - case MyTranslate$("MainView:View:Previous file") - findNext = false - tmpCounter = globalCurrentText - while(not findNext) - tmpCounter = tmpCounter - 1 - if(tmpCounter=0) tmpCounter = MAXFILES - if(tmpCounter = globalCurrentText) then - findNext = true - else - if(globalAllNames$(tmpCounter)<>"") then - globalCurrentText = tmpCounter - ActivateText(globalCurrentText) - findNext = true - endif - endif - wend - break - case MyTranslate$("MainView:View:Full screen") - if settingsFullScreen then - menu set "View", "Full screen", "plain", "MainView" - currentDivider = peek("desktopheight")-1 - splitview get "HSplit", "Divider" - window set "MainView", "moveto", settingsX,settingsY - window set "MainView", "MinimumTo", 600,300 - window set "MainView", "MaximumTo", 2000, 2000 - window set "MainView", "resizeto", settingsWidth, settingsHeight - splitview set "HSplit", "Divider", settingsHeight-currentDivider - settingsFullScreen = false - else - settingsX = window get "MainView", "Position-X" - settingsY = window get "MainView", "Position-Y" - settingsWidth = window get "MainView", "Width" - settingsHeight = window get "MainView", "Height" - currentDivider = settingsHeight - splitview get "HSplit", "Divider" - menu set "View", "Full screen", "mark", "MainView" - window set "MainView", "moveto", 0,0 - window set "MainView", "resizeto", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MinimumTo", peek("desktopwidth")-1, peek("desktopheight")-1 - window set "MainView", "MaximumTo", peek("desktopwidth")-1, peek("desktopheight")-1 - splitview set "HSplit", "Divider", peek("desktopheight")-1-currentDivider - settingsFullScreen = true - endif - break - case MyTranslate$("MainView:View:Maximize editor") - if(settingsFullEditor) then - splitview set "VSplit", "Divider", oldSplitX - splitview set "HSplit", "Divider", oldSplitY - menu set "View", "Maximize editor", "plain", "MainView" - settingsFullEditor = false - else - oldSplitX = splitview get "VSplit", "Divider" - oldSplitY = splitview get "HSplit", "Divider" - tmp = window get "MainView", "Height" - splitview set "HSplit", "Divider", tmp-51 - splitview set "VSplit", "Divider", 0 - menu set "View", "Maximize editor", "mark", "MainView" - settingsFullEditor = true - endif - break - case MyTranslate$("MainView:View:Auto indent") - if(settingsAutoIndent) then - menu set "View", "Auto indent", "plain", "MainView" - else - menu set "View", "Auto indent", "mark", "MainView" - endif - settingsAutoIndent = not settingsAutoIndent - for tmpAllFiles = 1 to MAXFILES - textedit set "Text"+str$(tmpAllFiles), "autoindent", settingsAutoIndent - next tmpAllFiles - break - case MyTranslate$("MainView:View:Auto completion") - if(settingsAutoCompletion) then - menu set "View", "Auto completion", "plain", "MainView" - else - menu set "View", "Auto completion", "mark", "MainView" - endif - settingsAutoCompletion = not settingsAutoCompletion - for tmpAllFiles = 1 to MAXFILES - textedit set "Text"+str$(tmpAllFiles), "has-autocompletion", settingsAutoCompletion - next tmpAllFiles - break - case MyTranslate$("MainView:View:Reformat sourcecode") - reformatUndo$ = textedit get$ "Text"+str$(globalCurrentText) - globalReformatUndo = true - menu set "View", "Undo reformat", "enable", "MainView" - textedit clear "Text"+str$(globalCurrentText) - //tmp$ = ReformatSource$(reformatUndo$) - textedit add "Text"+str$(globalCurrentText),ReformatSource$(reformatUndo$) - if(ReformatError(false,0)<>0 and settingsReformatAlert) then - tmp = alert "Reformating did not close all open loops and conditions.\nReformating currently does not support loops and conditions opened and closed by a colon (:).\nE.g. while(loop):wend\n\nYou can undo the reformating before doing any further changes.", "Do not show this warning again", "Ok" , "", "warning" - if(tmp = 1) settingsReformatAlert = false - endif - break - case MyTranslate$("MainView:View:Undo reformat") - tmp = alert "Changes made since reformating will be lost!", "Cancel", "Do not show this warning again", "Undo reformating", "warning" - if(tmp > 1) then - if(tmp=2) settingsReformatUndoAlert = false - globalReformatUndo = false - textedit clear "Text"+str$(globalCurrentText) - textedit add "Text"+str$(globalCurrentText), reformatUndo$ - menu set "View", "Undo reformat", "disable", "MainView" - endif - break - case MyTranslate$("MainView:View:Refresh colors") - textedit color "Text"+str$(globalCurrentText), "textcolor", textcolor_r, textcolor_g, textcolor_b - break - case "ToolbarOptions" - case MyTranslate$("MainView:View:Options...") - OptionWindow() - break - case "ToolbarHelp" - case MyTranslate$("MainView:Help:Short command help...") - system("open "+globalHelpDir$+"yab-Commands &") - break - case MyTranslate$("MainView:Help:Yabasic manual...") - system("open "+globalHelpDir$+"yabasic.html &") - break - case MyTranslate$("MainView:Help:Online resources:German BeUsergroup...") - system("open http://www.beusergroup.de &") - break - case MyTranslate$("MainView:Help:Online resources:BeSly database...") - system("open http://www.besly.de &") - break - case MyTranslate$("MainView:Help:Online resources:Yabasic homepage...") - system("open http://www.yabasic.de &") - break - case MyTranslate$("MainView:Help:Online resources:Yab homepage...") - system("open http://yab.orgfree.com &") - break - case MyTranslate$("MainView:Help:Online resources:Yab forum...") - system("open http://yab.orgfree.com/forum/ &") - break - case MyTranslate$("MainView:Help:Online resources:Team Maui...") - system("open http://www.team-maui.org &") - break - case MyTranslate$("MainView:Help:About...") - AboutWindow() - break - - // the find and replace tabview - case "FindCS:ON" - case "FindCS:OFF" - settingsFindCS = not settingsFindCS - break - case "FindFind" - settingsOldSearch$ = textcontrol get$ "FindTCFind" - if(settingsOldSearch$<>"") then - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - case "FindReplace" - settingsOldSearch$ = textcontrol get$ "FindTCFind" - if(settingsOldSearch$<>"") then - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - if(searchLineNum <> -1) then - changestring() - - endif - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - case "FindReplAll" - if(settingsFindAlert) then - tmpAlert = alert "The operation \"Replace All\" can not be reverted!\n\nDo you want to continue?", "Cancel", "Do not show this warning again", "Ok", "warning" - if(tmpAlert = 1) break - if(tmpAlert = 2) settingsFindAlert = false - endif - settingsOldSearch$ = textcontrol get$ "FindTCFind" - if(settingsOldSearch$<>"") then - searchLineNum = 0 - while(searchLineNum<>-1) - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - if(searchLineNum <> -1) then - changestring() - endif - wend - option set "Text"+str$(globalCurrentText), "Focus", true - endif - break - - // the immediate tabview - case "ImmediateExecute" - tmp$ = textcontrol get$ "ImmediateInput" - ImmediateExec(tmp$) - break - - end switch - - // the output listbox, handle error messages - if((left$(msg$(i),22) = "YabOutputList:_Select:") or (left$(msg$(i),22) = "YabOutputList:_Invoke:")) then - tmp$ = listbox get$ "YabOutputList", val(right$(msg$(i),len(msg$(i))-22)) - if(left$(tmp$,8) = "---Error") then - num = instr(tmp$, "line ") - if(num) then - num = num + 5 - number$ = "" - repeat - number$ = number$ + mid$(tmp$,num,1) - num = num + 1 - until (mid$(tmp$,num,1) = ":") - num = val(number$) - - errorFileName$ = globalAllNames$(globalCurrentText) - errorFileFound = false - rightBound = instr(tmp$, ".yab") - if(rightBound) then - errorFileName$ = mid$(tmp$, 13, rightBound-13+4) - endif - if(errorFileName$<>globalAllNames$(globalCurrentText)) then - // check whether library is loaded already... - for tmpCheckName = 1 to MAXFILES - if((left$(errorFileName$,1) = "/" and errorFileName$ = globalAllNames$(tmpCheckName)) or (left$(errorFileName$,1) <> "/" and right$(globalAllNames$(tmpCheckName),len(errorFileName$)) = errorFileName$)) then - ActivateText(tmpCheckName) - errorFileFound = true - break - endif - next tmpCheckName - // otherwise load it now - else - errorFileFound = true - endif - - if(errorFileFound) then - textedit set "Text"+str$(globalCurrentText),"gotoline", num+7 - textedit set "Text"+str$(globalCurrentText),"gotoline", num - textedit set "Text"+str$(globalCurrentText),"select", num - if(globalSelectErrorLines) option set "Text"+str$(globalCurrentText),"focus", true - endif - endif - endif - endif - - - // the search field in the toolbar - if(left$(msg$(i),12) = "ToolbarText:" or msg$(i) = "ToolbarFind") then - if(msg$(i) = "ToolbarFind") then - settingsOldSearch$ = textcontrol get$ "ToolbarText" - else - settingsOldSearch$ = right$(msg$(i), len(msg$(i))-12) - endif - if(settingsFindCS) then - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Case-Sensitive-Find", settingsOldSearch$ - else - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", settingsOldSearch$ - endif - if(DEBUG) print searchLineNum - option set "Text"+str$(globalCurrentText), "Focus", true - endif - - // the find and replace tabview - // if(left$(msg$(i),11) = "FindTCFind:" and ) then - // option set "FindTCReplace", "focus", true - // endif - // if(left$(msg$(i),14) = "FindTCReplace:") then - // option set "FindFind", "focus", true - // endif - - - // the immediate tabview - if(left$(msg$(i),15) = "ImmediateInput:") then - ImmediateExec(right$(msg$(i), len(msg$(i))-15)) - endif - - // the project columnbox - if(left$(msg$(i),15) = "FileBox:_Select") then - tmp$ = right$(msg$(i),len(msg$(i))-16) - for tmpFiles = 1 to MAXFILES // arraysize(globalTextFinder(),1) - if(DEBUG) print val(tmp$), globalTextFinder(tmpFiles) - if(globalTextFinder(tmpFiles)=val(tmp$)) then - ActivateText(tmpFiles) - break - endif - next tmpFiles - endif - - // something dropped on the textedit - if(left$(msg$(i),18) = "V2Split2:_Dropped:" and globalCurrentText<>0) then - tmp$ = right$(msg$(i),len(msg$(i))-18) - handle = open(tmp$, "r") - if(handle) then - WaitWindow(tmp$) - text$ = "" - while(not eof(handle)) - text$ = text$ + GetLine$(handle)+"\n" - wend - close(handle) - tmp = textedit get "Text"+str$(globalCurrentText), "currentline" - textedit add "Text"+str$(globalCurrentText), left$(text$,len(text$)-1) - textedit set "Text"+str$(globalCurrentText), "changed", true - textedit set "Text"+str$(globalCurrentText), "gotoline", tmp - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - window close "WaitWindow" - else - alert MyTranslate$("Error while loading file:\n\n")+tmp$, "Ok", "warning" - endif - endif - - // something dropped on the project columnbox - if(left$(msg$(i),17) = "VSplit1:_Dropped:") then - foundEmpty = 0 - for j=1 to MAXFILES - if(globalAllNames$(j) = "") then - foundEmpty = j - break - endif - next j - if(not foundEmpty) then - alert MyTranslate$("Sorry, you can not open more than ")+str$(MAXFILES)+MyTranslate$(" files at once!\n\nPlease close one or more other files first."), "Ok", "Warning" - else - tmp$ = right$(msg$(i),len(msg$(i))-17) - foundProject = false - for j = 1 to MAXFILES - if(globalAllNames$(j) = tmp$) then - alert "File is already open.", "Ok", "info" - ActivateText(j) - foundProject = true - break - endif - next j - if(not foundProject) then - handle = open(tmp$, "r") - if(handle) then - WaitWindow(tmp$) - text$ = "" - while(not eof(handle)) - text$ = text$ + GetLine$(handle)+"\n" - wend - close(handle) - globalCurrentText = foundEmpty - textedit add "Text"+str$(globalCurrentText), left$(text$,len(text$)-1) - textedit set "Text"+str$(globalCurrentText), "changed", false - textedit set "Text"+str$(globalCurrentText), "gotoline", ReadLineFromAttr(tmp$) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - globalAllNames$(globalCurrentText) = tmp$ - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - window close "WaitWindow" - else - alert MyTranslate$("Error while loading file:\n\n")+tmp$, "Ok", "Stop" - endif - endif - endif - endif - - // help selected - if(left$(msg$(i),9) = "HelpTree:") then - //tmp$ = right$(msg$(i), len(msg$(i))-17) - tmp=treebox get "HelpTree" - treebox select "HelpTree", tmp - tmp$ = treebox get$ "HelpTree", tmp - t$ = SyntaxGetInfoText$(ideDir$+"data/Help_En.dat", ideDir$+"data/Help_En_Index.dat", tmp$) - if(t$<>"") then - textedit clear "Text"+str$(MAXFILES+1) - textedit add "Text"+str$(MAXFILES+1), t$ - endif - endif - - // search help - if(left$(msg$(i),9) = "HelpFind:") then - tmp$ = right$(msg$(i), len(msg$(i))-9) - tmp$ = trim$(tmp$) - tmp$ = lower$(tmp$) - t$ = SyntaxGetInfoText$(ideDir$+"data/Help_En.dat", ideDir$+"data/Help_En_Index.dat", tmp$) - if(t$<>"") then - textedit clear "Text"+str$(MAXFILES+1) - textedit add "Text"+str$(MAXFILES+1), t$ - endif - endif - next i - - if(globalCurrentText>0 and not globalWasChanged and textedit get "Text"+str$(globalCurrentText), "hasChanged") then - globalWasChanged = true - columnbox add "FileBox", 1, globalTextFinder(globalCurrentText), 20, "__Mime__=application/x-vnd.yab-app" - endif - - UpdateStatusbar() - - if(settingsFullEditor) then - tmp = window get "MainView", "Height" - 74 - if(splitview get "VSplit", "Divider" <> 0 or splitview get "HSplit", "Divider" <> tmp) then - settingsFullEditor = false - menu set "View", "Maximize editor", "plain", "MainView" - endif - endif - - if(globalCurrentText > 0) then - // Update the line numbers - // we are cheeting a bit :), we calculate the numbers for a 1200-pixel high view - scroll = textedit get "Text"+str$(globalCurrentText), "vertical-scrollbar" - v2Split = splitview get "V2Split", "divider" - if(scroll<>oldScroll or v2Split<>oldV2Split) then - scrollLine = int(scroll/globalRealFontSize) - scrollPos = mod(scroll,globalRealFontSize) - UpdateLines(scrollPos, 1200, scrollLine, globalRealFontSize) - oldScroll = scroll - oldV2Split = v2Split - // scrollLine = int((scroll+2)/15)+1 - // scrollPos = mod((globalHSplitDivider-1-peek("scrollbarwidth")+scroll),15)+5 - // scrollPos = mod((1000+scroll),15)+5 - // UpdateLines(scrollPos, globalHSplitDivider-1-peek("scrollbarwidth"), scrollLine, 15) - // UpdateLines(scrollPos, 1200, scrollLine, 15) - // oldScroll = scroll - endif - - // Check the spincontrol - spinner = spincontrol get "ToolbarGotoLine" - if(spinner <> oldSpinner) then - textedit set "Text"+str$(globalCurrentText), "gotoline", spinner - textedit set "Text"+str$(globalCurrentText), "select", 0 - textedit set "Text"+str$(globalCurrentText), "select", spinner - option set "Text"+str$(globalCurrentText), "Focus", true - oldSpinner = spinner - endif - endif - - // switch tabs from help to files and vice versa - if(globalIsHelp and tabview get "Tree" = 1) then - globalIsHelp = false - splitview set "V2Split", "divider", helpOldV2Split - if(globalCurrentText>0) then - ActivateHelpMenus(1) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - else - ActivateHelpMenus(0) - stackview set "Stack", MAXFILES+2 - stackview set "Lines", MAXFILES+2 - endif - endif - if(not globalIsHelp and tabview get "Tree" = 2) then - ActivateHelpMenus(-1) - globalIsHelp = true - stackview set "Stack", MAXFILES+1 - stackview set "Lines", MAXFILES+1 - helpOldV2Split = splitview get "V2Split", "divider" - splitview set "V2Split", "divider", 0 - endif -wend - -window close "MainView" -SaveSettings() - -// Open main window with everything -sub OpenMainWindow() - local vsplitheight, hsplitheight, tabwidth, i, handle - local tmp$ - local err, x, y - - x = peek("desktopwidth") - y = peek("desktopheight") - - // open initialize the main window - window open settingsX-3000,settingsY-3000 to settingsX+settingsWidth-3000,settingsY+settingsHeight-3000, "MainView", "yab-IDE" - - window open x/2-250-3000, y/2-200-3000 to x/2+249-3000,y/2+199-3000, "Splash", "" - window set "Splash", "look", "bordered" - err = draw image 0,0, ideDir$+"img/Splash.png", "Splash" - draw set "HighColor", 56,61,127, "Splash" - draw set "DejaVu Sans Mono,Bold,18", "Splash" - draw text 30, 280, "Version "+versionnumber$, "Splash" - window set "Splash", "moveto", x/2-250,y/2-200 - set_up_BuildFactory() - if(err>0) window close "Splash" - - - - window set "MainView", "look", "document" - window set "MainView", "MinimumTo", 600,300 - - // set all menus - menu "File", "New...", "N", "MainView" - menu "File", "Open...", "O", "MainView" - menu "File", "Close", "W", "MainView" - menu "File", "--", "", "MainView" - menu "File", "Save", "S", "MainView" - menu "File", "Save as...", "", "MainView" - menu "File", "Save as template...", "", "MainView" - menu "File", "Export as HTML...", "", "MainView" - - menu "File", "--", "", "MainView" - menu "File", "Page setup...", "", "MainView" - menu "File", "Print...", "P", "MainView" - menu "File", "--", "", "MainView" - menu "File", "Quit", "Q", "MainView" - - menu "Edit", "Undo", "Z", "MainView" - menu "Edit", "--", "", "MainView" - menu "Edit", "Cut", "X", "MainView" - menu "Edit", "Copy", "C", "MainView" - menu "Edit", "Paste", "V", "MainView" - menu "Edit", "--", "", "MainView" - menu "Edit", "Select all", "A", "MainView" - menu "Edit", "--", "", "MainView" - menu "Edit", "Find", "F", "MainView" - menu "Edit", "Find again", "G", "MainView" - menu "Edit", "Find and replace", "E", "MainView" - - menu "Program", "Run", "R", "MainView" - menu "Program", "Run in Terminal", "T", "MainView" - menu "Program", "--", "", "MainView" - menu "Program", "Set run parameters...", "SR", "MainView" - menu "Program", "--", "", "MainView" - menu "Program", "Build Factory...", "B", "MainView" - menu "Program", "--", "", "MainView" - menu "Program", "Open project folder...", "SO", "MainView" - - if(not globalNoRCS) then - menu "RCS", "Check In", "CI", "MainView" - menu "RCS", "Check Out", "CO", "MainView" - menu "RCS", "--", "", "MainView" - menu "RCS", "Version History...", "CV", "MainView" - endif - - menu "Tools", "Pattern editor...", "CP", "MainView" - menu "Tools", "Color selection...", "CC", "MainView" - menu "Tools", "--", "", "MainView" - menu "Tools", "ASCII table...", "CA", "MainView" - - menu "View", "Next file", ".", "MainView" - menu "View", "Previous file", ",", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Full screen", "CF", "MainView" - menu "View", "Maximize editor", "CE", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Auto indent", "", "MainView" - menu "View", "Auto completion", "", "MainView" - menu "View", "Refresh colors", "", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Reformat sourcecode", "CR", "MainView" - menu "View", "Undo reformat", "", "MainView" - menu "View", "--", "", "MainView" - menu "View", "Options...", "", "MainView" - if settingsFullScreen menu set "View", "Full screen", "mark", "MainView" - if settingsFullEditor menu set "View", "Maximize editor", "mark", "MainView" - if settingsAutoIndent menu set "View", "Auto indent", "mark", "MainView" - if settingsAutoCompletion menu set "View", "Auto completion", "mark", "MainView" - menu set "View", "Undo reformat", "disable", "MainView" - - menu "Help", "Short command help...", "H", "MainView" - menu "Help", "Yabasic manual...", "M", "MainView" - menu "Help", "--", "", "MainView" - menu "Help", "Online resources", "", "MainView" - submenu "Help", "Online resources", "BeSly database...", "", "MainView" - submenu "Help", "Online resources", "German BeUsergroup...", "", "MainView" - submenu "Help", "Online resources", "Team Maui...", "", "MainView" - submenu "Help", "Online resources", "Yab homepage...", "", "MainView" - submenu "Help", "Online resources", "Yab forum...", "", "MainView" - submenu "Help", "Online resources", "Yabasic homepage...", "", "MainView" - - - - menu "Help", "--", "", "MainView" - menu "Help", "About...", "", "MainView" - - // set the toolbar - ToolbarCreate(0,peek("menuheight")+1,2000, "Toolbar", ideDir$+"img/", "MainView") - ToolbarAddIcon("ToolbarNew", "New", "newp.png", "newn.png", "newd.png") - ToolbarAddIcon("ToolbarOpen", "Open", "openp.png", "openn.png", "opend.png") - ToolbarAddIcon("ToolbarSave", "Save", "savep.png", "saven.png", "saved.png") - ToolbarAddIcon("ToolbarClose", "Close", "closep.png", "closen.png", "closed.png") - ToolbarAddSeparator() - ToolbarAddIcon("ToolbarCut", "Cut", "cutp.png", "cutn.png", "cutd.png") - ToolbarAddIcon("ToolbarCopy", "Copy", "copyp.png", "copyn.png", "copyd.png") - ToolbarAddIcon("ToolbarPaste", "Paste", "pastep.png", "pasten.png", "pasted.png") - ToolbarAddIcon("ToolbarUndo", "Undo", "undop.png", "undon.png", "undod.png") - // ToolbarAddIcon("ToolbarFind", "Find", "searchp.png", "searchn.png", "searchd.png") - ToolbarAddSeparator() - ToolbarAddIcon("ToolbarRun", "Run", "runp.png", "runn.png", "rund.png") - ToolbarAddIcon("ToolbarRunTerm", "Run in Terminal", "runtermp.png", "runtermn.png", "runtermd.png") - // ToolbarAddIcon("ToolbarDebug", "Debugger", "debugp.png", "debugn.png", "debugd.png") - ToolbarAddIcon("ToolbarBuild", "Build Factory", "bindp.png", "bindn.png", "bindd.png") - // ToolbarAddSeparator() - // ToolbarAddIcon("ToolbarGui", "GUI Designer", "guip.png", "guin.png", "guid.png") - ToolbarAddSeparator() - ToolbarAddIcon("ToolbarPattern", "Pattern editor", "patternp.png", "patternn.png", "patternd.png") - ToolbarAddIcon("ToolbarOptions", "Options", "optionsp.png", "optionsn.png", "optionsd.png") - ToolbarAddIcon("ToolbarHelp", "yab Help", "helpp.png", "helpn.png", "helpd.png") - ToolbarAddSeparator() - - spincontrol 383,2, "ToolbarGotoLine", "Go to Line:", 1, 100000, 1, "Toolbar" - tooltip "ToolbarGotoLine", "Go to Line" - draw set "highcolor", 185,185,185, "Toolbar" - draw line 430,5 to 400,25, "Toolbar" - draw set "highcolor", 239,239,239, "Toolbar" - draw line 431,5 to 401,25, "Toolbar" - - button image 538,7, "ToolbarFind", ideDir$+"img/searchp.png", ideDir$+"img/searchn.png", ideDir$+"img/searchd.png", "Toolbar" - tooltip "ToolbarFind", "Find" - textcontrol 553,5 to 640,25, "ToolbarText", "", settingsOldSearch$, "Toolbar" - draw set "highcolor", 185,185,185, "Toolbar" - draw line 510,5 to 480,25, "Toolbar" - draw set "highcolor", 239,239,239, "Toolbar" - draw line 511,5 to 481,25, "Toolbar" - - // layout "top, left, right", "Toolbar" - draw set "highcolor", 200,200,200, "Toolbar" - draw line 0,29 to 2000,29, "Toolbar" - draw set "highcolor", 184,184,184, "Toolbar" - draw line 0,30 to 2000,30, "Toolbar" - draw set "highcolor", 239,239,239, "Toolbar" - draw line 0,31 to 2000,31, "Toolbar" - - - // vertical splitview - layout "standard", "MainView" - splitview 0,peek("menuheight")+31, settingsWidth,settingsHeight-peek("scrollbarwidth"), "VSplit", true, true, "MainView" - splitview set "VSplit", "Divider", settingsVSplitDivider - splitview set "VSplit", "MinimumSizes", 0,400 - - // horizontal splitview - splitview 0,0, settingsWidth-settingsVSplitDivider,settingsHeight-peek("scrollbarwidth")+1, "HSplit", false, true, "VSplit2" - splitview set "HSplit", "Divider", settingsHSplitDivider - splitview set "HSplit", "MinimumSizes", 100,51 - - splitview 0,0, settingsWidth-settingsVSplitDivider,settingsHSplitDivider-1, "V2Split", true,false, "HSplit1" - splitview set "V2Split", "Divider", 0 - splitview set "V2Split", "MinimumSizes", 0,300 - - - vsplitheight = settingsHeight - peek("menuheight")-peek("scrollbarwidth") - - // tabview and treeboxes in the left vertical splitview - tabview 0,1 to settingsVSplitDivider-1,vsplitheight-32, "Tree", "bottom", "VSplit1" - tabview add "Tree", " Files " - tabview add "Tree", " Help " - columnbox 0,0 to settingsVSplitDivider-10,vsplitheight-42-peek("tabheight"), "FileBox", false, "no-border, resizable", "Tree1" - columnbox column "FileBox", " ", 1, 20, 20, 20, "align-center" - columnbox column "FileBox", "Filename",2, 300, 32, settingsVSplitDivider-32, "align-left" - columnbox color "FileBox", "Selection-Active", 220,220,250 - columnbox color "FileBox", "Row-Divider", 255,255,255 - - treebox 0,0 to settingsVSplitDivider-10, vsplitheight-42-peek("tabheight")-40, "HelpTree", 1, "Tree2" - layout "left,bottom,right", "Tree2" - textcontrol 0,vsplitheight-42-peek("tabheight")-30 to settingsVSplitDivider-14,vsplitheight-42-peek("tabheight")-10, "HelpFind", "Command", "", "Tree2" - layout "standard", "Tree2" - - view dropzone "VSplit1" - view dropzone "V2Split2" - - // a stackview with textedits in the upper right splitview - // implement a dynamic stackview in future! - // stackview 0,0 to settingsWidth-settingsVSplitDivider-11,settingsHSplitDivider-1, "Stack", MAXFILES+2, "HSplit1" - stackview 0,0 to settingsWidth-settingsVSplitDivider-11-4,settingsHSplitDivider-1, "Stack", MAXFILES+2, "V2Split2" - stackview 0,0 to settingsV2SplitDivider,settingsHSplitDivider-1, "Lines", MAXFILES+2, "V2Split1" - for i=1 to MAXFILES - // textedit 37,0 to settingsWidth-settingsVSplitDivider-12,settingsHSplitDivider-1, "Text"+str$(i), 3, "Stack"+str$(i) - textedit 1,1 to settingsWidth-settingsVSplitDivider-12-5,settingsHSplitDivider-2, "Text"+str$(i), 3, "Stack"+str$(i) - textedit set "Text"+str$(i), "wordwrap", false - textedit set "Text"+str$(i), "textwidth", 4000 - textedit set "Text"+str$(i), "tabwidth", settingsTabSpaces*7 - textedit set "Text"+str$(i), "font", settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize) - textedit set "Text"+str$(i), "autoindent", settingsAutoIndent - - // layout "left,top,bottom", "Lines"+str$(i) - // view 0,0 to 36,settingsHSplitDivider-1, "Lines"+str$(i), "LineStack"+str$(i) - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "Lines"+str$(i) - layout "standard", "Stack"+str$(i) - - textedit set "Text"+str$(i), "autocomplete-start", settingsACNumChar - handle = open(ideDir$+"data/autocompletion") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit set "Text"+str$(i), "autocomplete", tmp$ - wend - close(handle) - endif - - handle = open(ideDir$+"data/color1") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color1", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"data/color2") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color2", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"data/color3") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color3", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"data/color4") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "color4", tmp$ - wend - close(handle) - endif - handle = open(ideDir$+"data/color5") - if(handle) then - while(not eof(handle)) - line input #handle tmp$ - textedit color "Text"+str$(i), "char-color", tmp$ - wend - close(handle) - endif - next i - - textedit 1,1 to settingsWidth-settingsVSplitDivider-12-5,settingsHSplitDivider-2, "Text"+str$(MAXFILES+1), 1, "Stack"+str$(MAXFILES+1) - textedit set "Text"+str$(MAXFILES+1), "font", settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize) - textedit set "Text"+str$(MAXFILES+1), "editable", false - textedit color "Text"+str$(MAXFILES+1), "color1", "Name:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Synopsis:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Description:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Example:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Design:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Layout:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Message:" - textedit color "Text"+str$(MAXFILES+1), "color1", "Related:" - SyntaxLoadTree(ideDir$+"data/Help_En.dat", "HelpTree") - - // UpdateLines(0, globalHSplitDivider-1-peek("scrollbarwidth"), 1, 15) - UpdateLines(0, 1200, 1, globalRealFontSize) - - layout "h-center, v-center", "Stack"+str$(MAXFILES+2) - // view (settingsWidth-settingsVSplitDivider-12)/2-150,(settingsHSplitDivider-1)/2-190 to (settingsWidth-settingsVSplitDivider-12)/2+150,(settingsHSplitDivider-1)/2+190, "Logo", "Stack"+str$(MAXFILES+2) - view (settingsWidth-settingsVSplitDivider-12-41-4)/2-150,(settingsHSplitDivider-1)/2-190 to (settingsWidth-settingsVSplitDivider-12-41-4)/2+150,(settingsHSplitDivider-1)/2+190, "Logo", "Stack"+str$(MAXFILES+2) - draw set "bgcolor", 255,255,255, "Stack"+str$(MAXFILES+2) - draw set "bgcolor", 255,255,255, "Logo" - err = draw image 0,0 to 300,-1, ideDir$+"img/logo.png", "Logo" - stackview set "Stack", MAXFILES+2 - stackview set "Lines", MAXFILES+2 - layout "standard", "Stack"+str$(MAXFILES+2) - - hsplitheight = settingsHeight-settingsHSplitDivider-peek("scrollbarwidth")-peek("menuheight")-42 - - // the tabview in the lower right splitview - tabview 0,0 to settingsWidth-settingsVSplitDivider-11,hsplitheight, "HTab", "bottom", "HSplit2" - tabview add "HTab", "yab Output" - tabview add "HTab", "Immediate" - tabview add "HTab", "Find and replace" - if(not globalNoRCS) then - tabview add "HTab", "Version Control" - endif - - hsplitheight = hsplitheight-peek("tabheight")-12 - tabwidth = settingsWidth-settingsVSplitDivider-21 - - // the output box - listbox 0,0 to tabwidth,hsplitheight, "YabOutputList", 1, "HTab1" - - // the immediate stuff - layout "left,right,top", "HTab2" - textcontrol 5,5 to tabwidth-110,25, "ImmediateInput", "Command", "", "HTab2" - layout "right,top", "HTab2" - button tabwidth-100,3 to tabwidth-10,23, "ImmediateExecute", "Execute", "HTab2" - layout "standard", "HTab2" - textedit 10,35 to tabwidth-10,hsplitheight-10, "ImmediateOutput", 1, "HTab2" - textedit set "ImmediateOutput", "editable", false - - // search and replace - layout "left,top", "HTab3" - w = draw get "Text-width", MyTranslate$("Find:"), "HTab3" - draw text 55-w,23, "Find:", "HTab3" - w = draw get "Text-width", MyTranslate$("Replace:"), "HTab3" - draw text 55-w,48, "Replace:", "HTab3" - textcontrol 55,10 to 290,30, "FindTCFind", "", "", "HTab3" - textcontrol 55,35 to 290,55, "FindTCReplace", "", "", "HTab3" - checkbox 55,60, "FindCS", "Case Sensitive", settingsFindCS, "HTab3" - MyLine(300,5,300,90,"HTab3") - button 310,10 to 460,30, "FindFind", "Find", "HTab3" - button 310,35 to 460,55, "FindReplace", "Find and replace", "HTab3" - button 310,60 to 460,80, "FindReplAll", "Replace All", "HTab3" - - // the statusbar - layout "left, bottom", "MainView" - view 0,settingsHeight-peek("scrollbarwidth") to 2000,settingsHeight, "Statusbar", "MainView" - draw set "highcolor", 200,200,200, "Statusbar" - draw line 0,0 to 2000,0, "Statusbar" - draw set "highcolor", 184,184,184, "Statusbar" - draw line 0,1 to 2000,1, "Statusbar" - draw set "highcolor", 239,239,239, "Statusbar" - draw line 0,2 to 2000,2, "Statusbar" - - if(window count>1) window close "Splash" - - window set "MainView", "moveto", settingsX, settingsY - - return -end sub - - -// (De-)activate menus -sub ActivateMenus(toActivate) - local tmp$ - - if(toActivate) then - tmp$ = "Enable" - else - tmp$ = "Disable" - endif - - menu set "File", "Close", tmp$, "MainView" - menu set "File", "Save", tmp$, "MainView" - menu set "File", "Save as...", tmp$, "MainView" - menu set "File", "Save as template...", tmp$, "MainView" - menu set "File", "Export as HTML...", tmp$, "MainView" - menu set "File", "Page setup...", tmp$, "MainView" - menu set "File", "Print...", tmp$, "MainView" - - menu set "Edit", "Undo", tmp$, "MainView" - menu set "Edit", "Cut", tmp$, "MainView" - menu set "Edit", "Copy", tmp$, "MainView" - menu set "Edit", "Paste", tmp$, "MainView" - menu set "Edit", "Select all", tmp$, "MainView" - menu set "Edit", "Find", tmp$, "MainView" - menu set "Edit", "Find again", tmp$, "MainView" - menu set "Edit", "Find and replace", tmp$, "MainView" - - menu set "Program", "Run", tmp$, "MainView" - menu set "Program", "Run in Terminal", tmp$, "MainView" - menu set "Program", "Set run parameters...", tmp$, "MainView" - menu set "Program", "Build Factory...", tmp$, "MainView" - menu set "Program", "Open project folder...", tmp$, "MainView" - - if(not globalNoRCS) then - menu set "RCS", "Check In", tmp$, "MainView" - menu set "RCS", "Check Out", tmp$, "MainView" - menu set "RCS", "Version History...", tmp$, "MainView" - endif - - menu set "Tools", "Pattern editor...", tmp$, "MainView" - menu set "Tools", "Color selection...", tmp$, "MainView" - - menu set "View", "Next file", tmp$, "MainView" - menu set "View", "Previous file", tmp$, "MainView" - menu set "View", "Auto indent", tmp$, "MainView" - menu set "View", "Auto completion", tmp$, "MainView" - menu set "View", "Refresh colors", tmp$, "MainView" - menu set "View", "Reformat sourcecode", tmp$, "MainView" - menu set "View", "Undo reformat", "disable", "MainView" - menu set "View", "Options...", tmp$, "MainView" - - option set "ToolbarSave", "Enabled", toActivate - option set "ToolbarClose", "Enabled", toActivate - option set "ToolbarCut", "Enabled", toActivate - option set "ToolbarCopy", "Enabled", toActivate - option set "ToolbarPaste", "Enabled", toActivate - option set "ToolbarUndo", "Enabled", toActivate - option set "ToolbarFind", "Enabled", toActivate - option set "ToolbarText", "Enabled", toActivate - option set "ToolbarRun", "Enabled", toActivate - option set "ToolbarRunTerm", "Enabled", toActivate - option set "ToolbarPattern", "Enabled", toActivate - option set "ToolbarBuild", "Enabled", toActivate - option set "ToolbarOptions", "Enabled", toActivate - option set "ToolbarGotoLine", "Enabled", toActivate - - option set "FindTCFind", "Enabled", toActivate - option set "FindTCReplace", "Enabled", toActivate - option set "FindCS", "Enabled", toActivate - option set "FindFind", "Enabled", toActivate - option set "FindReplace", "Enabled", toActivate - option set "FindReplAll", "Enabled", toActivate - - return -end sub - -// (De-)activate menus when help is selected -sub ActivateHelpMenus(toActivate) - local tmp$ - - if(toActivate = 1) then - tmp$ = "Enable" - else - tmp$ = "Disable" - endif - - if(toActivate = -1) then - menu set "File", "Open...", tmp$, "MainView" - menu set "File", "New...", tmp$, "MainView" - else - menu set "File", "Open...", "Enable", "MainView" - menu set "File", "New...", "Enable", "MainView" - endif - menu set "File", "Close", tmp$, "MainView" - menu set "File", "Save", tmp$, "MainView" - menu set "File", "Save as...", tmp$, "MainView" - menu set "File", "Save as template...", tmp$, "MainView" - menu set "File", "Export as HTML...", tmp$, "MainView" - - menu set "Edit", "Undo", tmp$, "MainView" - menu set "Edit", "Cut", tmp$, "MainView" - menu set "Edit", "Paste", tmp$, "MainView" - menu set "Edit", "Find and replace", tmp$, "MainView" - - menu set "Program", "Run", tmp$, "MainView" - menu set "Program", "Run in Terminal", tmp$, "MainView" - menu set "Program", "Set run parameters...", tmp$, "MainView" - menu set "Program", "Build Factory...", tmp$, "MainView" - menu set "Program", "Open project folder...", tmp$, "MainView" - - if(not globalNoRCS) then - menu set "RCS", "Check In", tmp$, "MainView" - menu set "RCS", "Check Out", tmp$, "MainView" - menu set "RCS", "Version History...", tmp$, "MainView" - endif - - menu set "Tools", "Pattern editor...", tmp$, "MainView" - menu set "Tools", "Color selection...", tmp$, "MainView" - - menu set "View", "Next file", tmp$, "MainView" - menu set "View", "Previous file", tmp$, "MainView" - menu set "View", "Auto indent", tmp$, "MainView" - menu set "View", "Auto completion", tmp$, "MainView" - menu set "View", "Refresh colors", tmp$, "MainView" - menu set "View", "Reformat sourcecode", tmp$, "MainView" - menu set "View", "Undo reformat", "disable", "MainView" - - if(toActivate = -1) then - option set "ToolbarOpen", "Enabled", false - option set "ToolbarNew", "Enabled", false - toActivate = 0 - else - option set "ToolbarOpen", "Enabled", true - option set "ToolbarNew", "Enabled", true - endif - option set "ToolbarSave", "Enabled", toActivate - option set "ToolbarClose", "Enabled", toActivate - option set "ToolbarCut", "Enabled", toActivate - option set "ToolbarPaste", "Enabled", toActivate - option set "ToolbarUndo", "Enabled", toActivate - option set "ToolbarText", "Enabled", toActivate - option set "ToolbarRun", "Enabled", toActivate - option set "ToolbarRunTerm", "Enabled", toActivate - option set "ToolbarPattern", "Enabled", toActivate - option set "ToolbarBuild", "Enabled", toActivate - option set "ToolbarGotoLine", "Enabled", toActivate - - option set "FindTCReplace", "Enabled", toActivate - option set "FindReplace", "Enabled", toActivate - option set "FindReplAll", "Enabled", toActivate - - return -end sub - -// Update the line numbering -sub UpdateLines(starty, height, topline, fontHeight) - local i, pos - local t$ - - if(globalCurrentText > 0) then - pos = splitview get "V2Split", "Divider" - 3 - draw flush "Lines"+str$(globalCurrentText) - for i=fontHeight-4-starty to height step fontHeight - t$ = str$(int(i/fontHeight)+topline+1) - draw text pos-(draw get "text-width", t$, "Lines"+str$(globalCurrentText)),i, t$, "Lines"+str$(globalCurrentText) - next i - endif - return -end sub - -// Open new file -sub NewDocument(foundEmpty) - local inloop - local browse$ - local i, n, err, nTemplates, isButton - local handle, handle2 - local x, y, winSize, w, t - local t$, txt$ - - x = (peek("desktopwidth")-500)/2 - y = (peek("desktopheight")-390)/2-50 - if(y<50) y=50 - - window open x+200-3000,y+150-3000 to x+700-3000,y+440-3000, "NewWindow", "yab-IDE New Program" - window set "NewWindow", "Feel", "Modal-App" - window set "NewWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("New yab Program", "NewWindow", 500) - - text 10,50, "NewText1", "Please select one of the available templates for your program:", "NewWindow" - listbox 10,70 to 166,200, "NewList", 1, "NewWindow" - - handle = open(ideDir$+"Templates/TemplateList", "r") - if(handle>0) then - nTemplates = 0 - while(not eof(handle)) - nTemplates = nTemplates + 1 - dim tmp$(nTemplates) - tmp$(nTemplates) = GetLine$(handle)+"\n" - tmp$(nTemplates) = left$(tmp$(nTemplates), len(tmp$(nTemplates))-1) - if(left$(tmp$(nTemplates),1) = "#") nTemplates = nTemplates - 1 - wend - close handle - else - dim tmp$(1) - tmp$(1) = "Empty" - nTemplates = 1 - endif - for i = 1 to nTemplates step 4 - listbox add "NewList", tmp$(i) - next i - view 190,70 to 490,200, "NewImage", "NewWindow" - - browse$ = globalProjectDir$+"untitled"+str$(GetNewNumber(globalProjectDir$))+".yab" - - textcontrol 10,220 to 400,240, "NewName", "Name:", browse$, "NewWindow" - button 410,220 to 490,240, "NewBrowse", "Browse...", "NewWindow" - - checkbox image 10,270, "NewAdvanced", ideDir$+"img/arrowdown.png", ideDir$+"img/arrowright.png", "", "", false, "NewWindow" - winSize = false - text 20,270, "NewText2", "Advanced Options", "NewWindow" - button 430,260 to 490,280, "NewOk", "Ok", "NewWindow" - option set "NewOk", "enabled", false - isButton = false - - draw set "highcolor", 185,185,185, "NewWindow" - draw line 0,252 to 500,252, "NewWindow" - draw line 0,292 to 500,292, "NewWindow" - draw set "highcolor", 239,239,239, "NewWindow" - draw line 0,253 to 500,253, "NewWindow" - draw line 0,293 to 500,293, "NewWindow" - - // button 260,300 to 280,310, "NewHelp", "?", "NewWindow" - button 350,295 to 490,325, "NewDel", "Remove Template", "NewWindow" - option set "NewDel", "enabled", false - - if(not globalNoRCS) then - checkbox 10, 300, "NewCheckbox", "Use RCS Version Control", settingsUseRCS, "NewWindow" - // option set "NewCheckbox", "enabled", false - // option set "NewHelp", "enabled", false - endif - - textcontrol 10,330 to 490,350, "NewProject", "Project Directory", globalProjectDir$, "NewWindow" - - window set "NewWindow", "moveto", x,y - - inloop = true - dim msg$(1) - while(inloop) - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - if(left$(msg$(i),16) = "NewList:_Invoke:") then - msg$(i) = "NewOk" - endif - switch(msg$(i)) - case "NewOk" - if(j>0) then - browse$ = textcontrol get$ "NewName" - if(arraysize(tmp$(), 1) = 1) then - txt$ = "" - else - handle = open(ideDir$+"Templates/"+tmp$(j), "r") - if(handle) then - while(not eof(handle)) - txt$ = txt$ + GetLine$(handle)+"\n" - wend - close(handle) - // txt$ = left$(txt$, len(txt$)-1) - else - alert MyTranslate$("Could not open template: ")+tmp$(j)+"\n\n"+MyTranslate$("Opening an empty file instead."), "Ok", "warning" - txt$ = "" - endif - endif - globalCurrentText = foundEmpty - textedit add "Text"+str$(globalCurrentText), txt$ - textedit set "Text"+str$(globalCurrentText), "changed", true - textedit set "Text"+str$(globalCurrentText), "gotoline", 1 - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - globalAllNames$(globalCurrentText) = browse$ - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Mime__=application/x-vnd.yab-app" - columnbox add "FileBox", 2, t+1,20, GetFileName$(browse$) - columnbox select "FileBox", t+1 - - globalTextFinder(globalCurrentText) = t+1 - - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - globalNewNumber = globalNewNumber + 1 - globalNumOpenFiles = globalNumOpenFiles + 1 - inloop = false - endif - break - case "NewAdvanced:ON" - case "NewAdvanced:OFF" - winSize = not winSize - if(winSize) then - window set "NewWindow", "MinimumTo", 500,360 - window set "NewWindow", "MaximumTo", 500,360 - window set "NewWindow", "ResizeTo", 500,360 - else - window set "NewWindow", "MinimumTo", 500,290 - window set "NewWindow", "MaximumTo", 500,290 - window set "NewWindow", "ResizeTo", 500,290 - endif - break - case "NewBrowse" - browse$ = filepanel "Save-File", "New", globalProjectDir$ - if(browse$<>"") textcontrol set "NewName", browse$ - break - case "NewWindow:_QuitRequested" - inloop = false - break - case "_QuitRequested" - //emergency break - exit(1) - break - case "NewDel" - t$ = listbox get$ "NewList", (j-1)/4+1 - t = alert MyTranslate$("Really delete template")+" \""+t$+"\"?", "Yes", "Cancel", "", "warning" - if(t = 1) then - if((j-1)/4+1 < 4) then - alert "This standard template can not be deleted!", "Ok", "warning" - else - handle = open(ideDir$+"Templates/TemplateList", "r") - handle2 = open("/tmp/TemplateList", "w") - if(handle) then - if(handle2) then - while(not eof(handle)) - t$ = GetLine$(handle)+"\n" - if(left$(t$,len(t$)-1)<>tmp$(j)) then - print #handle2 t$; - else - t$ = GetLine$(handle)+"\n" - t$ = GetLine$(handle)+"\n" - t$ = GetLine$(handle)+"\n" - endif - wend - close(handle2) - system("mv /tmp/TemplateList "+ideDir$+"Templates/TemplateList") - system("rm "+ideDir$+tmp$(j+1)) - system("rm "+ideDir$+"Templates/"+tmp$(j)) - listbox remove "NewList", (j-1)/4+1 - listbox select "NewList", (j-5)/4+1 - msg$(i) = "NewList:_Select:"+str$((j-5)/4+1) - alert "Template successfully removed.", "Ok", "info" - else - alert "Error while deleting template!", "Ok", "stop" - endif - close(handle) - else - alert "Error while deleting template!", "Ok", "stop" - endif - endif - endif - - break - end switch - if(left$(msg$(i),16) = "NewList:_Select:") then - draw rect 0,0 to 200,140, "NewImage" - draw flush "NewImage" - j = (val(mid$(msg$(i),17,len(msg$(i))-1))-1)*4+1 - if(arraysize(tmp$(),1)>=j+1) then - err = draw image 50,0 to 250,100, ideDir$+tmp$(j+1), "NewImage" - endif - if(arraysize(tmp$(),1)>=j+2) then - draw text 10,110, tmp$(j+2), "NewImage" - endif - if(arraysize(tmp$(),1)>=j+3) then - draw text 10,125, tmp$(j+3), "NewImage" - endif - if(not isButton) then - isButton = false - option set "NewOk", "enabled", true - option set "NewDel", "enabled", true - endif - endif - next i - wend - - window close "NewWindow" -end sub - -sub GetNewNumber(dir$) - local tmp$ - local num: local i: local ret - local numFound - local t$(1) - - numFound = false - ret = 0 - tmp$ = system$("ls "+dir$+"untitled*.yab") - num = token(tmp$, t$(), "\n") - while(not numFound) - numFound = true - for i=1 to num - tmp$ = left$(t$(i), len(t$(i))-4) - tmp$ = right$(tmp$, len(tmp$)-8-len(dir$)) - if(ret = val(tmp$)) then - ret = ret + 1 - numFound = false - break - endif - next i - if(numFound) then - for i=1 to MAXFILES - tmp$ = dir$+"untitled"+str$(ret)+".yab" - if(globalAllNames$(i) = tmp$) then - ret = ret + 1 - numFound = false - break - endif - next i - endif - wend - return ret -end sub - -sub ImmediateExec(command$) - local result$ - - if(instr(command$, "input")) then - alert "Suspecting user input, therefore starting in a terminal.", "Ok", "info" - result$ = system$("Terminal "+yabDir$+" -enter -execute '"+command$+":exit'") - else - result$ = system$(yabDir$+" -execute '"+command$+":exit' 2>&1") - result$ = left$(result$, len(result$)-1) - - textedit clear "ImmediateOutput" - textedit add "ImmediateOutput", result$ - endif - - return -end sub - -sub GetFileName$(directory$) - local lastSlash - local j - - lastSlash = 0 - for j=1 to len(directory$) - if(mid$(directory$,j,1)="/" and mid$(directory$,j-1,1)<>"/") - lastSlash = j - next j - - return right$(directory$,len(directory$)-lastSlash) -end sub - -sub GetDirectory$(directory$) - local lastSlash - local j - - lastSlash = 0 - for j=1 to len(directory$) - if(mid$(directory$,j,1)="/" and mid$(directory$,j-1,1)<>"/") - lastSlash = j - next j - - return left$(directory$,lastSlash) -end sub - -sub ActivateText(num) - globalCurrentText = num - globalWasChanged = textedit get "Text"+str$(globalCurrentText), "hasChanged" - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - option set "Text"+str$(globalCurrentText), "focus", true - columnbox select "FileBox", globalTextFinder(num) - oldScroll = -1 - return -end sub - -sub ReadLineFromAttr(filename$) - a$=attribute get$ "",filename$ - if instr (a$,"linenumber") then - return attribute get "linenumber", filename$ - else return 0 - endif -end sub - -sub UpdateStatusbar() - static oldText$ - local newText$ - - if(globalCurrentText = 0) then - if(oldText$<>"") then - oldText$ = "" - draw flush "Statusbar" - draw set "highcolor", 200,200,200, "Statusbar" - draw line 0,0 to 2000,0, "Statusbar" - draw set "highcolor", 184,184,184, "Statusbar" - draw line 0,1 to 2000,1, "Statusbar" - draw set "highcolor", 239,239,239, "Statusbar" - draw line 0,2 to 2000,2, "Statusbar" - endif - return - endif - - newText$ = globalAllNames$(globalCurrentText) - if(textedit get "Text"+str$(globalCurrentText), "hasChanged") then - newText$ = newText$ + MyTranslate$(" (not saved) ") - else - newText$ = newText$ + " " - endif - - newText$ = newText$ + MyTranslate$("Line:")+" "+str$(textedit get "Text"+str$(globalCurrentText), "currentline") - newText$ = newText$ + " / "+str$(textedit get "Text"+str$(globalCurrentText), "countlines") - - - if(oldText$<>newText$) then - draw flush "Statusbar" - draw set "highcolor", 200,200,200, "Statusbar" - draw line 0,0 to 2000,0, "Statusbar" - draw set "highcolor", 184,184,184, "Statusbar" - draw line 0,1 to 2000,1, "Statusbar" - draw set "highcolor", 239,239,239, "Statusbar" - draw line 0,2 to 2000,2, "Statusbar" - draw set "highcolor", 0,0,0, "Statusbar" - draw text 5,13, "File: ", "Statusbar" - // draw set "highcolor", 0,200,0, "Statusbar" - draw text (5+draw get "Text-Width", MyTranslate$("File: "), "Statusbar"),13, newText$, "Statusbar" - // draw text (5+draw get "Text-Width", "Status: ", "Statusbar"),11, globalAllNames$(globalCurrentText)+" saved", "Statusbar" - oldText$ = newText$ - endif - - return -end sub - -sub WaitWindow(text$) - local x - local y - local width - local err - - x = peek("desktopwidth")/2 - 125 - y = peek("desktopheight")/2 - 100 - window open x,y to x+249,y+79, "WaitWindow", "" - window set "WaitWindow", "feel", "modal-app" - window set "WaitWindow", "look", "modal" - window set "WaitWindow", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - err = draw image 0,0, ideDir$+"img/Loading.png", "WaitWindow" - - w = draw get "text-width", GetFileName$(text$), "WaitWindow" - text 143-w/2,32, "TWait", GetFileName$(text$), "WaitWindow" - - w = draw get "text-width", MyTranslate$("Please wait..."), "WaitWindow" - text 143-w/2,60, "TRunning2", "Please wait...", "WaitWindow" - - draw set "Bitstream Vera Sans, Bold Oblique, 14", "WaitWindow" - w = draw get "text-width", MyTranslate$("Loading Program"), "WaitWindow" - draw text 143-w/2,20, "Loading Program", "WaitWindow" - - return -end sub - -// Run the program and display its output -sub RunProgram(yabFile$) - local tmp$, unique$ - local num, i, t, teamID, pos - local x, y, err, w - - if(isRunning) return - isRunning = true - - // easy way to make the tmp file sort-of unique - unique$ = date$+time$ - - x = peek("desktopwidth")/2 - 125 - y = peek("desktopheight")/2 - 100 - window open x,y to x+249,y+79, "Running", "" - window set "Running", "feel", "modal-app" - window set "Running", "look", "modal" - window set "Running", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - err = draw image 0,0, ideDir$+"img/Running.png", "Running" - - w = draw get "text-width", GetFileName$(yabFile$), "Running" - text 143-w/2,32, "TRunning", GetFileName$(yabFile$), "Running" - button 150,50 to 240,75, "BRunning", "Break", "Running" - - draw set "Bitstream Vera Sans, Bold Oblique, 14", "Running" - w = draw get "text-width", MyTranslate$("Running Program"), "Running" - draw text 143-w/2,20, "Running Program", "Running" - - // text 5,5, "TRunning", MyTranslate$("Now Running: ")+GetFileName$(yabFile$), "Running" - // button 50,25 to 150,45, "BRunning", "Break", "Running" - listbox clear "YabOutputList" - window set "Running", "deactivate" - - if DEBUG print "cd "+GetDirectory$(yabFile$)+";"+yabDir$+" "+settingsYabParam$+" "+yabFile$+" "+settingsProgParam$+" &>/tmp/yab-log."+unique$+" &" - system("cd "+GetDirectory$(yabFile$)+";"+yabDir$+" "+settingsYabParam$+" "+yabFile$+" "+settingsProgParam$+" &>/tmp/yab-log."+unique$+" &") - sleep 0.1 - while(teamID <> -1) - teamID = thread get "teamid", yabDir$+" "+param$+yabFile$ - - handle = open("/tmp/yab-log."+unique$,"r") - if(handle) then - seek handle,pos - while(not eof(handle)) - tmp$ = GetLine$(handle)+"\n" - listbox add "YabOutputList", left$(tmp$, len(tmp$)-1) - listbox select "YabOutputList", listbox count "YabOutputList" - pos = tell(handle) - wend - close(handle) - endif - - if(instr(message$, "BRunning")) then - t = thread remove "teamid", teamID - if(not t) alert "Error! Program could not be killed.", "Oops", "stop" - break - endif - sleep 0.1 - wend - - window close "Running" - - system("rm -f "+"/tmp/yab-log."+unique$+" >/dev/null") - - isRunning = false - return -end sub - -// Run the program in a terminal -sub RunInTerminal(yabFile$) - local tmp$, param$ - local num, i, t, pos - local x, y, err, w - - if(isRunning) return - isRunning = true - - x = peek("desktopwidth")/2 - 150 - y = peek("desktopheight")/2 - 100 - window open x,y to x+299,y+79, "Running", "" - window set "Running", "feel", "modal-app" - window set "Running", "look", "modal" - window set "Running", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - err = draw image 0,0, ideDir$+"img/Running.png", "Running" - - w = draw get "text-width", GetFileName$(yabFile$), "Running" - text 168-w/2,32, "TRunning", GetFileName$(yabFile$), "Running" - - w = draw get "text-width", MyTranslate$("Close terminal to break program"), "Running" - text 168-w/2,60, "TRunning2", "Close terminal to break program", "Running" - - draw set "Bitstream Vera Sans, Bold Oblique, 14", "Running" - w = draw get "text-width", MyTranslate$("Running Program"), "Running" - draw text 168-w/2,20, "Running Program", "Running" - - window set "Running", "deactivate" - sleep 0.1 - - param$ = settingsYabParam$ + " -enter" - tmp$ = system$("Terminal "+yabDir$+" "+param$+" "+yabFile$+" "+settingsProgParam$+" 2>&1") - window close "Running" - - listbox clear "YabOutputList" - dim result$(1) - num = split(tmp$, result$(), "\n") - for i = 1 to num - listbox add "YabOutputList", result$(i) - next i - - isRunning = false - return -end sub - -sub AboutWindow() - local x - local y - local width - local t - local a$ - - - - x = peek("desktopwidth")/2 - 200 - y = peek("desktopheight")/2 - 200 - window open x-3000,y-3000 to x+400-3000, y+300-3000, "AboutWindow", "" - window set "AboutWindow", "look", "bordered" - window set "AboutWindow", "feel", "modal-app" - window set "AboutWindow", "MaximumTo", 400,300 - window set "AboutWindow", "MinimumTo", 400,300 - window set "AboutWindow", "Flags", "not-closable, not-zoomable, not-h-resizable, not-v-resizable" - - draw set "bgcolor", 255,255,255, "AboutWindow" - draw set "lowcolor", 255,255,255, "AboutWindow" - a$=system$("yab -v >& "+globalConfigDir$+"yabver" ) - t=open(globalConfigDir$+"yabver") - line input #i a$ - close #t - t=instr(a$,chr$(44)) - a$=left$(a$,t-1) - a$="Running "+a$ - //a$=str$(peek(version)) - width=draw get "text-width", a$, "AboutWindow" - draw text 200-width/2, 200,a$,"AboutWindow" - - width = draw get "text-width", "(c) 2006-2017 in terms of the Artistic License", "AboutWindow" - draw text 198-width/2, 260, "(c) 2006-2017 in terms of the Artistic License", "AboutWindow" - width= draw get "text-width", "Ported to Haiku PM by bbjimmy","AboutWindow" - draw text 200-width/2, 240, "Ported to Haiku PM by bbjimmy","AboutWindow" - width = draw get "text-width", "Coded by Jan, graphics by Genki, thanks to BeSly", "AboutWindow" - draw text 200-width/2, 220, "Coded by Jan, graphics by Genki, thanks to BeSly", "AboutWindow" - - if(peek$("os") = "Haiku") then - draw set "DejaVu Sans, Bold, 18", "AboutWindow" - else - draw set "Swis721 BT, Bold, 18", "AboutWindow" - endif - width = draw get "text-width", "yab-IDE", "AboutWindow" - draw text 200-width/2, 25, "yab-IDE", "AboutWindow" - //if(peek$("os") = "Haiku") then - draw set "DejaVu Sans, Bold, 10", "AboutWindow" - //else - // draw set "Swis721 BT, Bold, 10", "AboutWindow" - //endif - width = draw get "text-width", "Version "+versionnumber$, "AboutWindow" - draw text 200-width/2, 40, "Version "+versionnumber$, "AboutWindow" - - t = draw image 120,40 to 280,-1, ideDir$+"img/yablogo.png", "AboutWindow" - - button 100,265 to 300,290, "AboutButton", "Close", "AboutWindow" - option set "AboutButton", "focus", true - - window set "AboutWindow", "moveto", x,y - - while(not instr(message$, "AboutButton")) - wend - - - window close "AboutWindow" - return -end sub - -sub SaveAsTemplate() - local x: local y - local w: local i: local n - local isButton - local handle: local handle2 - local inloop - local msg$(1) - local name$: local description1$: local description2$: local image$ - local t$ - - x = (peek("desktopwidth")-600)/2 - y = (peek("desktopheight")-200)/2-50 - if(y<50) y=50 - - window open x-3000,y-3000 to x+600-3000,y+200-3000, "SaveTempWindow", "yab-IDE Save as Template" - window set "SaveTempWindow", "Feel", "Modal-App" - window set "SaveTempWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Save as Template", "SaveTempWindow", 600) - - text 10,50, "SaveTempText1", "Save your code as a template for other programs:", "SaveTempWindow" - textcontrol 10,70 to 380,90, "SaveTempName", "Template Name", "", "SaveTempWindow" - text 10,98, "SaveTempText2", "Description (not more than 30 characters per line)", "SaveTempWindow" - textcontrol 5,110 to 380,120, "SaveTempDes1", "", "", "SaveTempWindow" - textcontrol 5,130 to 380,150, "SaveTempDes2", "", "", "SaveTempWindow" - - draw set "highcolor", 0,0,0, "SaveTempWindow" - draw set "lowcolor", 255,255,0, "SaveTempWindow" - draw set 0, "240225195135015030060120" - draw rect 390,50 to 590,150, "SaveTempWindow" - draw set 0, "lowsolidfill" - draw set "lowcolor", 216,216,216, "SaveTempWindow" - draw rect 400,60 to 580,140, "SaveTempWindow" - draw set 0, "highsolidfill" - - w = draw get "Text-width", MyTranslate$("Drop image here"), "SaveTempWindow" - draw text 490-w/2,105, "Drop image here", "SaveTempWindow" - view dropzone "SaveTempWindow" - - draw set "highcolor", 185,185,185, "SaveTempWindow" - draw line 0,162 to 600,162, "SaveTempWindow" - draw set "highcolor", 239,239,239, "SaveTempWindow" - draw line 0,163 to 600,163, "SaveTempWindow" - - button 530,170 to 590,190, "SaveTempOk", "Save", "SaveTempWindow" - option set "SaveTempOk", "enabled", false - isButton = false - - option set "SaveTempName", "focus", true - - window set "SaveTempWindow", "moveto", x,y - - inloop = true - while(inloop) - n = split(message$, msg$(), ":|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - // check for emergency exit - if(i > 1) then - if(msg$(i) = "_QuitRequested" and msg$(i-1) <> "SaveTempWindow") then - exit(1) - endif - else - if(msg$(i) = "_QuitRequested") then - exit(1) - endif - endif - switch(msg$(i)) - case "_Dropped" - if(arraysize(msg$(),1)>=i+1) then - w = draw image 390,50 to 590,150, msg$(i+1), "SaveTempWindow" - if(w<>0) then - alert "Could not load image!", "Ok", "warning" - else - image$ = msg$(i+1) - endif - endif - break - case "SaveTempOk" - name$ = left$(textcontrol get$ "SaveTempName", 50) - description1$ = left$(textcontrol get$ "SaveTempDes1", 30) - description2$ = left$(textcontrol get$ "SaveTempDes2", 30) - imageShort$ = GetFileName$(image$) - system("cp "+image$+" "+ideDir$+"Templates/img/"+imageShort$) - handle = open(ideDir$+"Templates/TemplateList", "a") - if(handle) then - print #handle "#" - print #handle name$ - print #handle "Templates/img/"+imageShort$ - print #handle description1$ - print #handle description2$ - close(handle) - handle2 = open(ideDir$+"Templates/"+name$, "w") - if(handle2) then - t$ = textedit get$ "Text"+str$(globalCurrentText) - print #handle t$; - close(handle2) - else - alert "Error while saving template!", "Ok", "warning" - endif - else - alert "Error while saving template!", "Ok", "warning" - endif - inloop = false - break - case "_QuitRequested" - inloop = false - break - end switch - next i - - name$ = textcontrol get$ "SaveTempName" - if(name$<>"" and not isButton) then - option set "SaveTempOk", "enabled", true - isButton = true - endif - if(name$="" and isButton) then - option set "SaveTempOk", "enabled", false - isButton = false - endif - wend - - window close "SaveTempWindow" - return -end sub - -sub SaveCurrentFile() -local savetext$ - handle = open(globalAllNames$(globalCurrentText), "w") - if(handle) then - savetext$=textedit get$ "Text"+str$(globalCurrentText) - if right$(savetext$,1)<>chr$(10) savetext$=savetext$+chr$(10) - print #handle savetext$; - close(handle) - tmpCurrentLine = textedit get "Text"+str$(globalCurrentText), "currentline" - print "ATTR SET "; - print str$(tmpCurrentLine) - attribute set "Int", "linenumber", str$(tmpCurrentLine), globalAllNames$(globalCurrentText) - textedit set "Text"+str$(globalCurrentText), "changed", false - globalWasChanged = false - columnbox add "FileBox", 1, globalTextFinder(globalCurrentText), 20, "__Mime__=application/x-vnd.yab-app" - else - alert "File could not be saved!", "Ok", "warning" - return false - endif - return true -end sub - -sub Header(headerText$, window$, size) - local w - local head$ - - head$ = window$+"Header" - layout "none", window$ - view 0,0 to size,40, head$, window$ - draw set "bgcolor", 230,230,255, head$ - draw set "lowcolor", 230,230,255, head$ - if(peek$("os") = "Haiku") then - draw set "DejaVu Sans, Condensed Bold, 18", head$ - else - draw set "Swis721 BT, Bold, 18", head$ - endif - draw set "highcolor", 0,0,0, head$ - w = draw get "Text-width", MyTranslate$(headerText$), head$ - draw text size-w-10,25, headerText$, head$ - draw set "highcolor", 239,239,239, head$ - draw line 0,40 to size,40, head$ - draw set "highcolor", 185,185,185, head$ - draw line 0,39 to size,39, head$ - return -end sub - -// open the build factory window -sub Building() - local x, y, inloop, isEmpty - local binName$, t$, myTab$, result$ - local msg$(1) - local i, n, tmp - - - x = (peek("desktopwidth")-500)/2 - y = (peek("desktopheight")-400)/2-50 - if(y<50) y=50 - - window open x-3000,y-3000 to x+500-3000,y+400-3000, "BuildWindow", "yab-IDE Build Factory" - window set "BuildWindow", "Feel", "Modal-App" - window set "BuildWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Build Factory", "BuildWindow", 500) - - if(right$(globalAllNames$(globalCurrentText),4) = ".yab") then - binName$ = left$(globalAllNames$(globalCurrentText), len(globalAllNames$(globalCurrentText))-4) - else - binName$= globalAllNames$(globalCurrentText)+".bin" - endif - - while (instr(binName$, "/")) - pos=instr(binName$, "/") - binName$=right$(binName$,len(binName$)-pos) - wend - - - isEmpty = false - - textcontrol 10,50 to 380,70, "BuildPath", "Target file name:", binName$, "BuildWindow" - AppSig$ = getappsig$(globalAllNames$(globalCurrentText)) - - if AppSig$="" AppSig$="application/x-vnd."+binName$ - textcontrol 10,80 to 380,100, "AppSig", "Application Signature:", AppSig$, "BuildWindow" - //button 390,50 to 490,70, "BuildBrowse", "Browse", "BuildWindow" - - button 390,100 to 490,130, "BuildBuild", "Create Binary", "BuildWindow" - - MyLine(0,140,500,140, "BuildWindow") - textedit 10,155 to 490,390, "BuildOutput", 3, "BuildWindow" - textedit set "BuildOutput", "editable", false - textedit set "BuildOutput", "wordwrap", false - textedit set "BuildOutput", "textwidth", 4000 - - window set "BuildWindow", "moveto", x, y - - if(left$(system$("gcc 2>&1"),4) <> "gcc:") then - alert "The compiler GCC was not found!\n\nPlease install a complete Haiku system.", "Ok", "stop" - window close "BuildWindow" - return - endif - - textedit add "BuildOutput", MyTranslate$("Build Factory Output\n\n") - - inloop = true - while(inloop) - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - switch(msg$(i)) - case "BuildBuild" - option set "BuildBuild", "enabled", false - option set "BuildPath", "enabled", false - //option set "BuildBrowse", "enabled", false - option set "AppSig", "enabled", false - AppSig$=textcontrol get$ "AppSig" - if AppSig$="" AppSig$="application/x-vnd.yab-app" - binName$=textcontrol get$ "BuildPath" - textedit add "BuildOutput", MyTranslate$("Please wait, processing... (this may take a long time!)\n\n") - print "cd "+buildDir$+"; "+yabDir$+" BuildFactory.yab "+binName$+" "+globalAllNames$(globalCurrentText)+" "+AppSig$+" 2>&1\n\n" - result$ = system$("cd "+buildDir$+"; yab BuildFactory.yab "+binName$+" "+globalAllNames$(globalCurrentText)+" "+AppSig$+" yab-ide 2>&1") - textedit add "BuildOutput", result$ - - - option set "BuildBuild", "enabled", true - option set "BuildPath", "enabled", true - //option set "BuildBrowse", "enabled", true - option set "AppSig", "enabled", true - - if(IfExists(buildDir$+"/"+binName$)) then - alert "Build was successful", "Ok", "info" - else - alert "Build failed!", "Ok", "warning" - endif - system("rm "+ buildDir$+"/"+binName$) - break - //case "BuildBrowse" - // t$ = filepanel "save-file", "Save", GetDirectory$(binName$) - // if(t$<>"") then - // textcontrol set "BuildPath", t$ - // binName$ = t$ - // endif - // break - case "_QuitRequested" - case "BuildWindow:_QuitRequested" - inloop = false - break - end switch - next i - if(not isEmpty and textcontrol get$ "BuildPath" = "") then - AppSig$=textcontrol get$ "AppSig" - option set "BuildBuild", "enabled", false - isEmpty = true - endif - if(isEmpty and textcontrol get$ "BuildPath" <> "") then - AppSig$=textcontrol get$ "AppSig" - option set "BuildBuild", "enabled", true - isEmpty = false - endif - - - - wend - window close "BuildWindow" - return -end sub - -// open the option window -sub OptionWindow() - local x, y, inloop - local msg$(1), style$(1) - local styleNum, styleCount - local i, n, optCurrent - local tmp$ - local handle, j, hasItem - local family$, style$, size$ - local defaultFamily - - x = (peek("desktopwidth")-650)/2 - y = (peek("desktopheight")-400)/2-50 - if(y<50) y=50 - - window open x+100-3000,y+150-3000 to x+750-3000,y+550-3000, "OptWindow", "yab-IDE Options" - window set "OptWindow", "Feel", "Modal-App" - window set "OptWindow", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Options", "OptWindow", 650) - - draw set "highcolor", 185,185,185, "OptWindow" - draw line 11,51 to 138,51, "OptWindow" - draw line 10,50 to 139,50, "OptWindow" - draw line 11,51 to 11,388, "OptWindow" - draw line 10,50 to 10,389, "OptWindow" - draw set "highcolor", 239,239,239, "OptWindow" - draw line 12,389 to 139,389, "OptWindow" - draw line 11,390 to 139,390, "OptWindow" - draw line 139,52 to 139,389, "OptWindow" - draw line 140,51 to 140,390, "OptWindow" - draw set "highcolor", 0,0,0, "OptWindow" - - treebox 12,52 to 138,388, "OptTree", 0, "OptWindow" - // treebox add "OptTree", "Interpreter" - // treebox add "OptTree", "Interpreter", "Libraries", true - // treebox add "OptTree", "Interpreter", "Execution", true - treebox add "OptTree", "Editor" - treebox add "OptTree", "Editor", "Auto completion", true - // treebox add "OptTree", "Editor", "Syntax Highlighting", true - treebox add "OptTree", "Editor", "General", true - treebox add "OptTree", "Environment" - if(not settingsRCSOff) treebox add "OptTree", "Environment", "Version Control", true - treebox add "OptTree", "Environment", "Language", true - treebox add "OptTree", "Environment", "Directories", true - treebox select "OptTree", 2 - - // button 430,370 to 530,390, "OptDefault", "Default", "OptWindow" - // button 540,370 to 640,390, "OptOk", "Close", "OptWindow" - - // MyLine(0,362,650,362,"OptWindow") - - optCurrent = 1 - stackview 150,50 to 640,390, "OptStack", 4, "OptWindow" - - // General - boxview 0,0 to 490, 340, "OptBox3", "General", 2, "OptStack1" - spincontrol 10,5, "OptGenSpin", "Number of spaces per tab:", 1,20,1, "OptBox3" - spincontrol set "OptGenSpin", settingsTabSpaces - MyLine(10,35,470,35, "OptBox3") - checkbox 10,45, "OptGenSaving", "Ask about saving before running a program", settingsAskForSaving, "OptBox3" - checkbox 10,65, "OptGenReformat", "Show warning when reformating sourcecode did not close all loops and conditions", settingsReformatAlert, "OptBox3" - checkbox 10,85, "OptGenReformatUndo", "Show warning before undo reformating", settingsReformatUndoAlert, "OptBox3" - checkbox 10,105, "OptGenReplaceAll", "Show warning before applying Replace All", settingsFindAlert, "OptBox3" - MyLine(10,135,470,135, "OptBox3") - - text 10,145, "OptGenTxt", "Select font for editor:", "OptBox3" - dropbox 12,165 to 240,185, "OptGenFontFamily", "Font Family", "OptBox3" - dropbox 250,165 to 370,185, "OptGenFontStyle", "Font Style", "OptBox3" - spincontrol 380,160, "OptGenFontSize", "Font Size", 8,50,1, "OptBox3" - - n = token(draw get$ "FontFamily", msg$(), "|") - for i = 1 to n - dropbox add "OptGenFontFamily", msg$(i) - if(msg$(i) = settingsFontFamily$) j = i - if(msg$(i) = "Courier10 BT") defaultFamily = i - next i - if(j>0) then - dropbox select "OptGenFontFamily", j - n = token(draw get$ settingsFontFamily$, msg$(), "|") - for i = 1 to n - dropbox add "OptGenFontStyle", msg$(i) - if(msg$(i) = settingsFontStyle$) j = i - next i - if(j>0) dropbox select "OptGenFontStyle", j - endif - spincontrol set "OptGenFontSize", settingsFontSize - - view 20,205 to 460,255, "OptGenSample", "OptBox3" - draw set "bgcolor", 255,255,255, "OptGenSample" - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "OptGenSample" - n = draw get "text-width", MyTranslate$("My hovercraft is full of eels."), "OptGenSample" - draw text (440-n)/2,(50-settingsFontSize)/2+settingsFontSize, "My hovercraft is full of eels.", "OptGenSample" - MyLine(10,290,470,290,"OptBox3") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox3" - - // Syntax Highlighing - // boxview 0,0 to 490, 340, "OptBox4", "Syntax Highlighting", 2, "OptStack2" - - // Auto completion - boxview 0,0 to 490, 340, "OptBox5", "Auto completion", 2, "OptStack2" - checkbox 10,10, "OptACCheck", "Enable auto completion", settingsAutoCompletion, "OptBox5" - spincontrol 10,30, "OptACNum", "Number of characters for starting completion:", 1,20,1, "OptBox5" - spincontrol set "OptACNum", settingsACNumChar - MyLine(10,60,470,60,"OptBox5") - listbox 10,75 to 180,275, "OptACList", 1, "OptBox5" - textcontrol 190,185 to 470,205, "OptACTC", "New Entry:", "", "OptBox5" - button 320,215 to 470,235, "OptACAdd", "Add New Entry", "OptBox5" - MyLine(190,245,470,245,"OptBox5") - MyLine(190,175,470,175,"OptBox5") - button 370,255 to 470,275, "OptACRemove", "Remove Entry", "OptBox5" - text 190,75, "OptACText1", "Note: You have to restart the IDE to update the", "OptBox5" - text 190,90, "OptACText2", "autocompletion when removing entries.", "OptBox5" - handle = open(ideDir$+"data/autocompletion", "r") - if(handle) then - while(not eof(handle)) - tmp$ = GetLine$(handle)+"\n" - listbox add "OptACList", left$(tmp$, len(tmp$)-1) - wend - close(handle) - endif - MyLine(10,290,470,290,"OptBox5") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox5" - - // Dirs - boxview 0,0 to 490, 340, "OptBox6", "Directories", 2, "OptStack3" - text 10,10, "OptDirTxt", "Note: Only change the directories, when you know what you are doing!", "OptBox6" - MyLine(10,30,470,30, "OptBox6") - textcontrol 10,45 to 470,65, "OptDirBinDir", "Default yab Binary", yabDir$, "OptBox6" - // MyLine(10,45,470,45, "OptBox6") - // textcontrol 10,60 to 360,80, "OptDirProjDir", "Project Directory", globalProjectDir$, "OptBox6" - textcontrol 10,80 to 470,100, "OptDirYabDir", "Default yab Directory", settingsYabDir$, "OptBox6" - MyLine(10,115,470,115, "OptBox6") - MyLine(10,290,470,290,"OptBox6") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox6" - - // Language - boxview 0,0 to 490, 340, "OptBox8", "Language", 2, "OptStack4" - checkbox 10,10, "OptLangCheck", "Use automatic localization", restartSettingsLangUse, "OptBox8" - MyLine(10,40,470,40,"OptBox8") - columnbox 10,55 to 470,275, "OptLangList", false, "", "OptBox8" - columnbox column "OptLangList", "Supported Languages", 1, 460,460,460, "align-left" - MyLine(10,290,470,290,"OptBox8") - button 320,297 to 470,317, "OptDefault", "Factory Settings", "OptBox8" - columnbox color "OptLangList", "Selection-Active", 220,220,250 - columnbox color "OptLangList", "Row-Divider", 255,255,255 - tmp$ = system$("ls /boot/common/data/locale/catalogs/"+settingsLangPath$+"/*.catalog") - n = token(tmp$, msg$(), "\n") - for i = 1 to n - columnbox add "OptLangList", 1,i,18,msg$(i) - next i - - window set "OptWindow", "moveto", x,y - - inloop = true - while(inloop) - n = split(message$, msg$(), "|") - for i = 1 to n - if(DEBUG and msg$(i)<>"") print msg$(i) - switch(msg$(i)) - case "_QuitRequested" - // emergency quit - exit(1) - break - case "OptOk" - case "OptWindow:_QuitRequested" - inloop = false - break - - // General - case "OptGenSaving:ON" - case "OptGenSaving:OFF" - settingsAskForSaving = not settingsAskForSaving - break - case "OptGenReformat:ON" - case "OptGenReformat:OFF" - settingsReformatAlert = not settingsReformatAlert - break - case "OptGenReformatUndo:ON" - case "OptGenReformatUndo:OFF" - settingsReformatUndoAlert = not settingsReformatUndoAlert - break - case "OptGenReplaceAll:ON" - case "OptGenReplaceAll:OFF" - settingsFindAlert = not settingsFindAlert - break - - // Autocompletion - case "OptACCheck" - settingsAutoCompletion = not settingsAutoCompletion - break - case "OptACRemove" - break - case "OptACAdd" - tmp$ = textcontrol get$ "OptACTC" - if(tmp$<>"") then - hasItem = false - for j=1 to listbox count "OptACList" - if(tmp$ = listbox get$ "OptACList", i) then - hasItem = true - break - endif - next j - if(not hasItem) then - listbox add "OptACList", tmp$ - listbox sort "OptACList" - else - alert "Entry already exists.", "Ok", "info" - endif - endif - break - - // Language - case "OptLangCheck:ON" - case "OptLangCheck:OFF" - restartSettingsLangUse = not restartSettingsLangUse - alert "Restart yab-IDE to change localization", "Ok", "info" - break - - // Default - case "OptDefault" - t = stackview get "OptStack" - switch(t) - case 1 - settingsAskForSaving = true - settingsReformatAlert = true - settingsReformatUndoAlert = true - settingsFindAlert = true - settingsTabSpaces = 4 - settingsFontStyle$ = "Roman" - settingsFontSize = 12 - spincontrol set "OptGenSpin", settingsTabSpaces - checkbox set "OptGenSaving", settingsAskForSaving - checkbox set "OptGenReformat", settingsReformatAlert - checkbox set "OptGenReformatUndo", settingsReformatUndoAlert - checkbox set "OptGenReplaceAll", settingsFindAlert - dropbox select "OptGenFontFamily", defaultFamily - if(settingsFontFamily$<> "Courier10 BT") then - settingsFontFamily$ = "Courier10 BT" - dropbox clear "OptGenFontStyle" - styleCount = token(draw get$ settingsFontFamily$, style$(), "|") - for styleNum = 1 to styleCount - dropbox add "OptGenFontStyle", style$(styleNum) - next styleNum - dropbox select "OptGenFontStyle", 1 - OptionUpdateSample() - endif - spincontrol set "OptGenFontSize", settingsFontSize - for j = 1 to MAXFILES - textedit set "Text"+str$(j), "TabWidth", settingsTabSpaces*7 - next j - break - case 2 - settingsAutoCompletion = true - settingsACNumChar = 2 - checkbox set "OptACCheck", settingsAutoCompletion - spincontrol set "OptACNum", settingsACNumChar - break - case 3 - if(system("test -d /boot/apps/Development/yab-1.0/") = 0) then - settingsYabDir$ = "/boot/apps/Development/yab-1.0/" - elsif(system("test -d /boot/apps/yab-1.0/") = 0) then - settingsYabDir$ = "/boot/apps/yab-1.0/" - else - alert "Could not find yab 1.0 directory!\n\nPlease do a proper installation.", "Ok", "warning" - endif - textcontrol set "OptDirYabDir", settingsYabDir$ - - if(system("test -e /boot/home/config/bin/yab") = 0) then - yabDir$ = "/boot/home/config/bin/yab" - else - alert "Could not find yab binary!\n\nPlease do a proper installation.", "Ok", "warning" - endif - textcontrol set "OptDirBinDir", yabDir$ - break - case 4 - if(restartSettingsLangUse = false) then - restartSettingsLangUse = true - checkbox set "OptLangCheck",restartSettingsLangUse - alert "Restart yab-IDE to change localization", "Ok", "info" - endif - break - end switch - break - end switch - - // Font stuff - if(left$(msg$(i), 17) = "OptGenFontFamily:") then - settingsFontFamily$ = right$(msg$(i), len(msg$(i))-17) - dropbox clear "OptGenFontStyle" - styleCount = token(draw get$ settingsFontFamily$, style$(), "|") - for styleNum = 1 to styleCount - dropbox add "OptGenFontStyle", style$(styleNum) - next styleNum - dropbox select "OptGenFontStyle", 1 - settingsFontStyle$ = style$(1) - OptionUpdateSample() - endif - if(left$(msg$(i), 16) = "OptGenFontStyle:") then - settingsFontStyle$ = right$(msg$(i), len(msg$(i))-16) - OptionUpdateSample() - endif - - if(left$(msg$(i), 8) = "OptACTC:") then - option set "OptACAdd", "focus", true - endif - if(left$(msg$(i), 16) = "OptTree:_Select:") then - t = val(right$(msg$(i), len(msg$(i))-16)) - tmp$ = treebox get$ "OptTree", t - switch(tmp$) - case MyTranslate$("General"): t = 1: break - // case MyTranslate$("Syntax Highlighting"): t = 2: break - case MyTranslate$("Auto completion"): t = 2: break - case MyTranslate$("Directories"): t = 3: break - case MyTranslate$("Language"): t = 4: break - // case MyTranslate$("Version Control"): t = 6: break - default: t = 0: break - end switch - if(t>0) then - stackview set "OptStack", t - optCurrent = t - endif - endif - - if(left$(msg$(i), 13) = "OptDirYabDir:") then - tmp$ = right$(msg$(i), len(msg$(i))-13) - if(system("test -d "+tmp$) = 0) then - settingsYabDir$ = tmp$ - alert MyTranslate$("New yab directory set to:\n\n")+tmp$+MyTranslate$("\n\nRestart the IDE using the new directory."), "Ok", "info" - else - alert MyTranslate$("Invalid directory:\n\n")+tmp$, "Ok", "warning" - textcontrol set "OptDirYabDir", settingsYabDir$ - endif - endif - if(left$(msg$(i), 13) = "OptDirBinDir:") then - tmp$ = right$(msg$(i), len(msg$(i))-13) - if(system("test -e "+tmp$) = 0) then - yabDir$ = tmp$ - alert MyTranslate$("yab binary set to:\n\n")+tmp$, "Ok", "info" - else - alert MyTranslate$("Invalid file:\n\n")+tmp$, "Ok", "warning" - textcontrol set "OptDirBinDir", yabDir$ - endif - endif - next i - if(spincontrol get "OptGenFontSize" <> settingsFontSize) then - settingsFontSize = spincontrol get "OptGenFontSize" - OptionUpdateSample() - endif - if(spincontrol get "OptGenSpin" <> settingsTabSpaces) then - settingsTabSpaces = spincontrol get "OptGenSpin" - for j = 1 to MAXFILES - textedit set "Text"+str$(j), "TabWidth", settingsTabSpaces*7 - next j - endif - wend - - window close "OptWindow" - - return -end sub - -// draw the example text (OptionWindow) -sub OptionUpdateSample() - local n - local scroll, scrollLine, scrollPos - - draw flush "OptGenSample" - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "OptGenSample" - n = draw get "text-width", MyTranslate$("My hovercraft is full of eels."), "OptGenSample" - draw text (440-n)/2,50-(50-settingsFontSize)/2, "My hovercraft is full of eels.", "OptGenSample" - for n = 1 to MAXFILES - textedit set "Text"+str$(n), "font", settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize) - draw set settingsFontFamily$+","+settingsFontStyle$+","+str$(settingsFontSize), "Lines"+str$(n) - next n - if(globalCurrentText>0) then - globalRealFontSize = textedit get "Text"+str$(globalCurrentText), "line-height", 1 - scroll = textedit get "Text"+str$(globalCurrentText), "vertical-scrollbar" - scrollLine = int(scroll/globalRealFontSize) - scrollPos = mod(scroll,globalRealFontSize) - UpdateLines(scrollPos, 1200, scrollLine, globalRealFontSize) - endif - return -end sub - -// draw a sort of 3D line -sub MyLine(x1,y1,x2,y2,View$) - draw set "highcolor", 185,185,185, View$ - draw line x1,y1 to x2,y2, View$ - draw set "highcolor", 239,239,239, View$ - if(x1=x2) then - draw line x1+1,y1 to x2+1,y2, View$ - else - draw line x1,y1+1 to x2,y2+1, View$ - endif - draw set "highcolor", 0,0,0, View$ - return -end sub - -// only translates when a translation is wanted -sub MyTranslate$(txt$) - if(settingsLangUse) return menu translate$(txt$) - return txt$ -end sub - -// returns true if filename$ exists -sub IfExists(filename$) - return not system("test -e "+filename$) -end sub - -// Create a new toolbar. -// -// x1,y1 is the upper left starting point -// x2 is the right border of the toolbar -// note: the toolbar is always 30 pixels in height! -// id$ is the toolbar ID -// dir$ is the directory, where the icons can be found -// view$ is the view on which the Toolbar is created -// -// Note: this will change the layout of your view view$. -sub ToolbarCreate(x1,y1,x2, id$, dir$, view$) - layout "left, right", view$ - view x1,y1 to x2,y1+32, id$, view$ - // layout "left,right", id$ - draw set "bgcolor", 222,219,222, id$ - // view 0,30 to x2,32, id$+"line", id$ - // draw set "bgcolor", 185,185,185, id$+"line" - layout "none", id$ - position = 10 - directory$ = dir$ - toolbarview$ = id$ - return -end sub - -// Add an icon to the toolbar. -sub ToolbarAddIcon(id$, tooltip$, pressed$, normal$, disabled$) - button image position,7, id$, directory$+pressed$, directory$+normal$, directory$+disabled$, toolbarview$ - tooltip id$, tooltip$ - position = position + 25 - return -end sub - -// Add a separator to the toolbar. -sub ToolbarAddSeparator() - draw set "highcolor", 185,185,185, toolbarview$ - draw line position-2,5 to position-2,25,toolbarview$ - draw set "highcolor", 239,239,239, toolbarview$ - draw line position-1,5 to position-1,25, toolbarview$ - position = position + 5 - return -end sub - -// Open the pattern calculation window -sub OpenCalcPattern(x,y) - local i, j, w - local msg$(1) - local inloop, n - - window open x,y to x+259,y+400, "CalcPattern", "yab-IDE Pattern editor" - window set "CalcPattern", "Feel", "Modal-App" - window set "CalcPattern", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Pattern editor", "CalcPattern", 260) - - draw set "highcolor", 239,239,239, "CalcPattern" - draw line 0,300 to 259,300, "CalcPattern" - draw set "highcolor", 185,185,185, "CalcPattern" - draw line 0,299 to 259,299, "CalcPattern" - - view 10,50 to 249,289, "VDraw", "CalcPattern" - draw set "bgcolor", 255, 255, 255, "VDraw" - draw set "lowcolor", 0, 0, 0, "VDraw" - - view 10,310 to 90,390, "VPattern", "CalcPattern" - draw set "bgcolor", 255, 255, 255, "VPattern" - draw set "lowcolor", 0, 0, 0, "VPattern" - draw set "highcolor", 255, 255, 255, "VPattern" - - button 100,370 to 249,390, "CalcPatternInsert", "Insert Pattern", "CalcPattern" - - UpdatePattern(pattern()) - draw set 0, "LowSolidFill" - draw set "lowcolor", 0, 0, 0, "VDraw" - for i = 0 to 7 - for j = 0 to 7 - if(pattern(i,j) = 1) then - draw rect i*30,j*30 to i*30+29,j*30+29, "VDraw" - endif - next j - next i - draw set 0, "HighSolidFill" - - inloop = true - while(inloop) - CalcPatternMouse(pattern()) - n = token(message$, msg$(), "|") - for i = 1 to n - switch(msg$(i)) - case "CalcPatternInsert" - textedit add "Text"+str$(globalCurrentText), CalcPatternInsert$(pattern()) - break - case "CalcPattern:_QuitRequested" - settingsCalcPatternX = window get "CalcPattern", "Position-X" - settingsCalcPatternY = window get "CalcPattern", "Position-Y" - window close "CalcPattern" - inloop = false - break - case "_QuitRequested" - //emergency break - exit(1) - break - end switch - next i - wend - return -end sub - -// mouse stuff (PatternEditor) -sub CalcPatternMouse(pattern()) - local help$ - local i, j, refresh - - mousex = 0 - mousey = 0 - mouselmb = 0 - mousemmb = 0 - mousermb = 0 - - - refresh = 0 - - if(ismousein("VDraw")) then - GetMouseData("VDraw",239,239) - endif - - if(mouselmb) then - x = int(mousex/30) - y = int(mousey/30) - if(pattern(x,y) = 0) then - pattern(x,y) = 1 - draw set "lowcolor", 0, 0, 0, "VDraw" - draw set 0, "LowSolidFill" - draw rect x*30,y*30 to x*30+29,y*30+29, "VDraw" - UpdatePattern(pattern()) - refresh = refresh + 1 - endif - endif - - if(mousermb) then - x = int(mousex/30) - y = int(mousey/30) - if(pattern(x,y) = 1) then - pattern(x,y) = 0 - draw set "lowcolor", 255, 255, 255, "VDraw" - draw set 0, "LowSolidFill" - draw rect x*30,y*30 to x*30+29,y*30+29, "VDraw" - draw set "lowcolor", 0, 0, 0, "VDraw" - UpdatePattern(pattern()) - refresh = refresh + 1 - endif - endif - - if(refresh = 15) then - draw flush "VDraw" - draw flush "VPattern" - draw set "lowcolor", 0, 0, 0, "VDraw" - for i = 0 to 7 - for j = 0 to 7 - if(pattern(i,j)) then - draw set 0, "LowSolidFill" - draw rect i*30,j*30 to i*30+29,j*30+29, "VDraw" - draw set 0, "HighSolidFill" - endif - next j - next i - UpdatePattern(pattern()) - refresh = 0 - endif - - return -end sub - -// get pattern string (PatternEditor) -sub CalcPatternInsert$(pattern()) - local i, j - local t$, p$ - - p$ = "\"" - for i = 0 to 7 - t$ = "" - for j = 0 to 7 - t$ = t$ + str$(1-pattern(j,i)) - next j - t = dec(t$,2) - if(t<100) p$ = p$ + "0" - if(t<10) p$ = p$ + "0" - p$ = p$ + str$(t) - next i - p$ = p$ + "\"" - return p$ -end sub - -// get mouse stuff (PatternEditor) -sub GetMouseData(view$,maxx, maxy) - local n - local mouse$(1) - - mousemsg$ = mouse message$(view$) - n = split(mousemsg$, mouse$(), ":") - mousex = val(mouse$(1)) - mousey = val(mouse$(2)) - mouselmb = val(mouse$(3)) - mousemmb = val(mouse$(4)) - mousermb = val(mouse$(5)) - if(mousex<0) mousex = 0 - if(mousey<0) mousey = 0 - if(mousex>maxx) mousex = maxx - if(mousey>maxy) mousey = maxy - - return -end sub - -// update pattern (PatternEditor) -sub UpdatePattern(pattern()) - local i, j - local t$, p$ - - for i = 0 to 7 - t$ = "" - for j = 0 to 7 - t$ = t$ + str$(1-pattern(j,i)) - next j - t = dec(t$,2) - if(t<100) p$ = p$ + "0" - if(t<10) p$ = p$ + "0" - p$ = p$ + str$(t) - next i - draw flush "VPattern" - draw set 0, p$ - draw rect 0,0 to 80,80, "VPattern" - draw set 0, "HighSolidFill" - return -end sub - -// Open the color selection window -sub OpenColorSelection(x,y,r,g,b) - local i, j, w, n, num - local tmp$, msg$(1), col$(1) - local inloop - - window open x,y to x+366,y+270, "ColorSelect", "yab-IDE Color selection" - window set "ColorSelect", "Feel", "Modal-App" - window set "ColorSelect", "Flags", "not-zoomable, not-h-resizable, not-v-resizable" - - Header("Color selection", "ColorSelect", 366) - - draw set "highcolor", 239,239,239, "ColorSelect" - draw line 0,233 to 366,233, "ColorSelect" - draw line 71,55 to 71,116, "ColorSelect" - draw line 10,116 to 71,116, "ColorSelect" - draw set "highcolor", 185,185,185, "ColorSelect" - draw line 0,232 to 366,232, "ColorSelect" - draw line 9,54 to 9,115, "ColorSelect" - draw line 9,54 to 70,54, "ColorSelect" - - view 10,55 to 70,115, "ColorSelectRect", "ColorSelect" - draw set "highcolor", r,g,b, "ColorSelectRect" - draw rect 0,0 to 60,60, "ColorSelectRect" - colorcontrol 80,59, "ColorControl", "ColorSelect" - colorcontrol set "ColorControl", r,g,b - - draw set "highcolor", 0,0,0, "ColorSelect" - draw text 10,140, "Default Colors:", "ColorSelect" - draw set 1, "HighSolidFill" - for i = 45 to 305 step 30 - for j=155 to 186 step 30 - draw set 1, "HighSolidFill" - draw rect i,j to i+30,j+30, "ColorSelect" - draw set 0, "HighSolidFill" - tmp$ = str$((j-125)/30)+str$((i-15)/30) - view i+1,j+1 to i+29,j+29, "Color"+tmp$, "ColorSelect" - switch tmp$ - case "11" - draw set "bgcolor", 0,0,0, "Color11" - tooltip "Color11", "Black" - break - case "12" - draw set "bgcolor", 96,96,96, "Color12" - tooltip "Color12", "Darken 4" - break - case "13" - draw set "bgcolor", 128,128,128, "Color13" - tooltip "Color13", "Darken 3" - break - case "14" - draw set "bgcolor", 152,152,152, "Color14" - tooltip "Color14", "Darken 2" - break - case "15" - draw set "bgcolor", 184,184,184, "Color15" - tooltip "Color15", "Darken 1" - break - case "16" - draw set "bgcolor", 216,216,216, "Color16" - tooltip "Color16", "Default Background" - break - case "17" - draw set "bgcolor", 232,232,232, "Color17" - tooltip "Color17", "Lighten 1" - break - case "18" - draw set "bgcolor", 240,240,240, "Color18" - tooltip "Color18", "Lighten 2" - break - case "19" - draw set "bgcolor", 255,255,255, "Color19" - tooltip "Color19", "White" - break - case "21" - draw set "bgcolor", 255,0,0, "Color21" - tooltip "Color21", "Red" - break - case "22" - draw set "bgcolor", 192,128,0, "Color22" - tooltip "Color22", "Brown" - break - case "23" - draw set "bgcolor", 255,255,0, "Color23" - tooltip "Color23", "Yellow" - break - case "24" - draw set "bgcolor", 0,255,0, "Color24" - tooltip "Color24", "Green" - break - case "25" - draw set "bgcolor", 0,255,255, "Color25" - tooltip "Color25", "Cyan" - break - case "26" - draw set "bgcolor", 128,192,255, "Color26" - tooltip "Color26", "Light Blue" - break - case "27" - draw set "bgcolor", 0,0,255, "Color27" - tooltip "Color27", "Blue" - break - case "28" - draw set "bgcolor", 255,0,255, "Color28" - tooltip "Color28", "Magenta" - break - case "29" - draw set "bgcolor", 192,128,255, "Color29" - tooltip "Color29", "Light Magenta" - break - end switch - next j - next i - - draw set 0, "HighSolidFill" - - button 256,240 to 356,260, "ColorSelectInsert", "Insert Color", "ColorSelect" - - inloop = true - while(inloop) - ColorSelectMouse() - n = token(message$, msg$(), "|") - for i = 1 to n - if(left$(msg$(i),13) = "ColorControl:") then - tmp$ = right$(msg$(i), len(msg$(i))-13) - dim col$(3) - num = token(tmp$, col$(), ":") - if(num = 3) then - draw flush "ColorSelectRect" - draw set "highcolor", val(col$(1)), val(col$(2)), val(col$(3)), "ColorSelectRect" - draw rect 0,0 to 60,60, "ColorSelectRect" - endif - endif - switch(msg$(i)) - case "ColorSelectInsert" - textedit add "Text"+str$(globalCurrentText), ColorSelectInsert$() - break - case "ColorSelect:_QuitRequested" - settingsColorSelectX = window get "ColorSelect", "Position-X" - settingsColorSelectY = window get "ColorSelect", "Position-Y" - settingsColorSelectR = colorcontrol get "ColorControl", "red" - settingsColorSelectG = colorcontrol get "ColorControl", "green" - settingsColorSelectB = colorcontrol get "ColorControl", "blue" - window close "ColorSelect" - inloop = false - break - case "_QuitRequested" - //emergency break - exit(1) - break - end switch - next i - wend - return -end sub - -// get the color string (ColorSelect) -sub ColorSelectInsert$() - local r, g, b - - r = colorcontrol get "ColorControl", "red" - g = colorcontrol get "ColorControl", "green" - b = colorcontrol get "ColorControl", "blue" - - return " "+str$(r)+", "+str$(g)+", "+str$(b) -end sub - -// check mouse in ColorSelect -sub ColorSelectMouse() - local i, j - local tmp$ - - for i = 1 to 9 - for j = 1 to 2 - tmp$ = "Color"+str$(j)+str$(i) - if(ismousein(tmp$) and IsButtonPressed(tmp$)) then - switch tmp$ - case "Color11" - SetColor(0,0,0) - break - case "Color12" - SetColor(96,96,96) - break - case "Color13" - SetColor(128,128,128) - break - case "Color14" - SetColor(152,152,152) - break - case "Color15" - SetColor(184,184,184) - break - case "Color16" - SetColor(216,216,216) - break - case "Color17" - SetColor(232,232,232) - break - case "Color18" - SetColor(240,240,240) - break - case "Color19" - SetColor(255,255,255) - break - case "Color21" - SetColor(255,0,0) - break - case "Color22" - SetColor(192,128,0) - break - case "Color23" - SetColor(255,255,0) - break - case "Color24" - SetColor(0,255,0) - break - case "Color25" - SetColor(0,255,255) - break - case "Color26" - SetColor(128,192,255) - break - case "Color27" - SetColor(0,0,255) - break - case "Color28" - SetColor(255,0,255) - break - case "Color29" - SetColor(192,128,255) - break - end switch - endif - next j - next i -end sub - -// check for pressed mouse button (ColorSelect) -sub IsButtonPressed(view$) - local n, t - local mouselmb - - t = false - dim mouse$(1) - repeat - mousemsg$ = mouse message$(view$) - n = split(mousemsg$, mouse$(), ":") - mouselmb = val(mouse$(3)) - if(mouselmb) t = true - if(not ismousein(view$)) then - t = false - mouselmb = 0 - endif - until (mouselmb = 0) - return t -end sub - -// set a color to RGB (ColorSelect) -sub SetColor(r,g,b) - colorcontrol set "ColorControl", r,g,b - draw flush "ColorSelectRect" - draw set "highcolor", r,g,b, "ColorSelectRect" - draw rect 0,0 to 60,60, "ColorSelectRect" - return -end sub - -// beautify the code by reformating it -sub ReformatSource$(code$) - local tablevel, num, i, j, k - local tmp$, returnSource$ - local hasThen, isInTicks, firstcase - - dim beginCommand$(12) - dim endCommand$(15) - - beginCommand$(1) = "if" - beginCommand$(2) = "switch" - beginCommand$(3) = "for" - beginCommand$(4) = "while" - beginCommand$(5) = "do" - beginCommand$(6) = "repeat" - beginCommand$(7) = "case" - beginCommand$(8) = "default" - beginCommand$(9) = "else" - beginCommand$(10) = "elsif" - beginCommand$(11) = "sub" - beginCommand$(12) = "export" - - endCommand$(1) = "end if" - endCommand$(2) = "end-if" - endCommand$(3) = "endif" - endCommand$(4) = "fi" - endCommand$(5) = "end switch" - endCommand$(6) = "end-switch" - endCommand$(7) = "next" - endCommand$(8) = "wend" - endCommand$(9) = "loop" - endCommand$(10) = "until" - endCommand$(11) = "else" - endCommand$(12) = "elsif" - endCommand$(13) = "end sub" - endCommand$(14) = "case" - endCommand$(15) = "default" - - dim reformat$(1) - tablevel = 0 - firstcase = 0 - num = split(code$, reformat$(), "\n") - - for i=1 to num - tmp$ = ltrim$(lower$(reformat$(i))) - for j=1 to 15 - if(left$(tmp$, len(endCommand$(j))) = endCommand$(j) and (len(tmp$) = len(endCommand$(j)) or instr(" \n\t\f\v\r(:/", mid$(tmp$,len(endCommand$(j))+1,1)))) then - if(not firstcase) then - if(j = 5 or j = 6) tablevel = tablevel - 1 - tablevel = tablevel - 1 - // if(tablevel<0) tablevel = 0 - endif - firstcase = 0 - break - endif - next j - - for j=1 to tablevel - returnSource$ = returnSource$ + "\t" - next j - - for j=1 to 12 - if(left$(tmp$, len(beginCommand$(j))) = beginCommand$(j) and (len(tmp$) = len(beginCommand$(j)) or instr(" \n\t\f\v\r(:/", mid$(tmp$,len(beginCommand$(j))+1,1)))) then - hasThen = true - if(beginCommand$(j) = "switch") then - firstcase = 1 - elsif(beginCommand$(j) = "if") then - isInTicks = false - hasThen = false - for k=1 to len(tmp$)-3 - if(mid$(tmp$,k,1)="\"" and mid$(tmp$,k-1,1)<>"\\") isInTicks = not isInTicks - if(not isInTicks and mid$(tmp$,k,4) = "then") then - hasThen = true - break - endif - next k - endif - if(hasThen) tablevel = tablevel + 1 - break - endif - next j - returnSource$ = returnSource$ + ltrim$(reformat$(i)) - if(i0 and left$(tmp$,10) <> "/bin/grep ") then - ret = val(mid$(tmp$, t+7+len(programName$), len(tmp$)-t-7-len(programName$))) - endif - - return ret -end sub - -// Send the kill signal to all members of the team of programName$ -// Returns true when successful and false otherwise -sub KillTeam(programName$) - local ps$(1) - local found - local i, n - - n = token(system$("ps "+programName$), ps$(), chr$(10)) - found = false - - while(i<=n) - if(instr(ps$(i), programName$)) then - found = true - i = i + 1 - while(val(ps$(i))>0 and i<=n) - system("kill "+str$(val(ps$(i)))) - i = i + 1 - wend - endif - i = i + 1 - wend - - return found -end sub - -// Load the syntax tree into the given tree box from the TreeFile$ file. -sub SyntaxLoadTree(TreeFile$, TreeBoxID$) - local info, level, handle, inloop - local tmp$ - - - // Clear the treebox first - treebox clear TreeBoxID$ - - // count the number of info texts - info = 0 - // three levels: toplevel, sublevel and info text level - level = 0 - // read data from file return the file handle - handle = open (TreeFile$, "r") - if(not handle) return 0 - - // read the file - inloop = true - while(not eof(handle) and inloop) - tmp$ = GetLine$(handle) - // if it is not a comment... - if(not (left$(tmp$,1) = "&")) then - switch level - case 0 // toplevel - treebox add TreeBoxID$, tmp$ - break - case 1 // sublevel - n = instr(tmp$, ":") - treebox add TreeBoxID$, left$(tmp$,n-1), right$(tmp$, len(tmp$)-n), 0 - break - end switch - else - if(instr(tmp$, "toplevel")) level = 0 - if(instr(tmp$, "sublevel")) level = 1 - if(instr(tmp$, "infotext")) inloop = false - endif - wend - close handle - return 1 -end sub - -// Read the info text for Command$ from TreeFile$ with the index file IndexFile$. -sub SyntaxGetInfoText$(TreeFile$, IndexFile$, Command$) - local handle, position, inloop - local infotext$ - - // first read the seek position - inloop = true - handle = open (IndexFile$, "r") - if(not handle) return "" - - while(not eof(handle) and inloop) - tmp$ = GetLine$(handle) - if(tmp$=Command$) then - if (not eof(handle)) then - tmp$ = GetLine$(handle) - position = val(tmp$) - endif - inloop = false - endif - wend - close handle - - // a seek position is found; return the info text. - handle = open (TreeFile$, "r") - if(not handle) return "" - seek handle, position, "begin" - tmp$ = GetLine$(handle) - inloop = true - while(not eof(handle) and inloop) - tmp$ = GetLine$(handle) - if(left$(tmp$,1) = "&") then - inloop = false - else - infotext$ = infotext$ + tmp$ + chr$(10) - endif - wend - close handle - - return infotext$ -end sub - -// Read a line from a file -sub GetLine$(handle) - local tmp$, retString$ - - while(tmp$<>chr$(10) and tmp$<>chr$(13) and not eof(handle)) - tmp$ = chr$(peek(handle)) - if(tmp$<>chr$(10) and tmp$<>chr$(13)) retString$ = retString$ + tmp$ - wend - - return retString$ -end sub - -// Open ASCII table window -sub AsciiWindow() - local n, x, y - - window open 200,100 to 600,515, "AsciiView", "yab-IDE ASCII table" - window set "AsciiView", "flags", "Not-Zoomable, not-h-resizable, not-v-resizable" - - Header("ASCII table", "AsciiView", 400) - - draw set "highcolor", 239,239,239, "AsciiView" - draw line 6,405 to 395,405, "AsciiView" - draw line 395,51 to 395,405, "AsciiView" - draw set "highcolor", 185,185,185, "AsciiView" - draw line 5,50 to 394,50, "AsciiView" - draw line 5,50 to 5,404, "AsciiView" - draw set "highcolor", 255,255,255, "AsciiView" - draw rect 6,51 to 394,404, "AsciiView" - draw set "highcolor", 0,0,0, "AsciiView" - - x = 10 - y = 65 - for n = 32 TO 126 - draw text x,y, str$(n)+chr$(32)+chr$(n), "AsciiView" - x = x+50 - if x >= 365 then - x = 10 - y = y+30 - end if - next n - - while(not instr(message$, "Quit")) - wend - window close "AsciiView" - return -end sub - -// set the run parameters -sub SetRunParameters() - local tmp$ - local inloop - - window open 200,100 to 500,215, "RunParam", "yab-IDE Set run parameters" - window set "RunParam", "flags", "Not-Zoomable, not-h-resizable, not-v-resizable" - - Header("Set run parameters", "RunParam", 300) - - textcontrol 10,50 to 290,70, "RunParamYab", "yab Parameters:", settingsYabParam$, "RunParam" - textcontrol 10,80 to 290,110, "RunParamProg", "Program Parameters:", settingsProgParam$, "RunParam" - - inloop = true - while(inloop) - if(instr(message$, "Quit")) then - settingsYabParam$ = textcontrol get$ "RunParamYab" - settingsProgParam$ = textcontrol get$ "RunParamProg" - inloop = false - endif - wend - - window close "RunParam" - return -end sub - -// load settings on start-up -sub LoadSettings() - local handle, i, j - local tmp$ - - handle = open(globalConfigDir$+"ide-settings", "r") - if(not handle) return 1 - - while(not eof(handle)) - line input #handle tmp$ - if(left$(tmp$, 1)<>"#") then - i = i + 1 - switch(i) - case 1: settingsYabDir$ = tmp$: break - case 2: globalProjectDir$ = tmp$: break - case 3: yabDir$ = tmp$: break - case 4: ideDir$ = tmp$: break - case 5: buildDir$ = tmp$: break - case 6: globalHelpDir$ = tmp$: break - case 7: settingsLangUse = val(tmp$): break - case 8: settingsLangPath$ = tmp$: break - case 9: settingsAutoIndent = val(tmp$): break - case 10: settingsAutoCompletion = val(tmp$): break - case 11: settingsACNumChar = val(tmp$): break - case 12: settingsX = val(tmp$): break - case 13: settingsY = val(tmp$): break - case 14: settingsWidth = val(tmp$): break - case 15: settingsHeight = val(tmp$): break - case 16: settingsFullScreen = val(tmp$): break - case 17: settingsFullEditor = val(tmp$): break - case 18: settingsVSplitDivider = val(tmp$): break - case 19: settingsV2SplitDivider = val(tmp$): break - case 20: settingsHSplitDivider = val(tmp$): break - case 21: settingsCalcPatternX = val(tmp$): break - case 22: settingsCalcPatternY = val(tmp$): break - case 23: settingsColorSelectX = val(tmp$): break - case 24: settingsColorSelectY = val(tmp$): break - case 25: settingsColorSelectR = val(tmp$): break - case 26: settingsColorSelectG = val(tmp$): break - case 27: settingsColorSelectB = val(tmp$): break - case 28: settingsAskForSaving = val(tmp$): break - case 29: settingsFindCS = val(tmp$): break - case 30: settingsOldSearch$ = tmp$: break - case 31: settingsFindAlert = val(tmp$): break - case 32: settingsReformatAlert = val(tmp$): break - case 33: settingsReformatUndoAlert = val(tmp$): break - case 34: settingsTabSpaces = val(tmp$): break - case 35: break - case 36: settingsFontFamily$ = tmp$: break - case 37: settingsFontStyle$ = tmp$: break - case 38: settingsFontSize = val(tmp$): break - case 39: globalRealFontSize = val(tmp$): break - case 40: DEBUG = val(tmp$): break - case 41: MAXFILES = val(tmp$): break - case 42: settingsYabParam$ = tmp$: break - case 43: settingsProgParam$ = tmp$: break - end switch - endif - wend - close(handle) - - dim globalAllNames$(MAXFILES) - dim globalTextFinder(MAXFILES) - - for j=1 to MAXFILES - globalAllNames$(j) = "" - globalTextFinder(j) = 0 - next j - - if(i = 43) return 0 - return 1 -end sub - -// load last opened files on start-up -sub LoadOpenFiles() - local handle, mainhandle, j, t - local text$, t$ - - mainhandle = open(globalConfigDir$+"ide-openfiles", "r") - if(mainhandle) then - j = 1 - while(not eof(mainhandle) and j<=MAXFILES) - globalAllNames$(j) = GetLine$(mainhandle) - handle = open(globalAllNames$(j), "r") - if(handle) then - WaitWindow(globalAllNames$(j)) - text$ = "" - while(not eof(handle)) - t$ = GetLine$(handle)+"\n" - if(len(t$)*8>4000) textedit set "Text"+str$(j), "textwidth", len(t$)*8+8 - text$ = text$ + t$ - wend - close(handle) - globalCurrentText = j - textedit add "Text"+str$(globalCurrentText), text$ - textedit set "Text"+str$(globalCurrentText), "changed", false - textedit set "Text"+str$(globalCurrentText), "gotoline", ReadLineFromAttr(globalAllNames$(j)) - stackview set "Stack", globalCurrentText - stackview set "Lines", globalCurrentText - t = columnbox count "FileBox" - columnbox add "FileBox", 1, t+1,20, "__Mime__=application/x-vnd.yab-app" - columnbox add "FileBox", 2, t+1,20, GetFileName$(globalAllNames$(j)) // "Filename", t, GetFileName$(tmp$) - columnbox select "FileBox", t+1 - globalTextFinder(globalCurrentText) = t+1 - option set "Text"+str$(globalCurrentText), "focus", true - oldScroll = -1 - globalNumOpenFiles = globalNumOpenFiles + 1 - if(globalNumOpenFiles = 1) then - ActivateMenus(true) - splitview set "V2Split", "Divider", settingsV2SplitDivider - endif - window close "WaitWindow" - else - globalAllNames$(j) = "" - endif - j = j + 1 - wend - close(mainhandle) - endif - - return -end sub - -// Export as HTML -sub ExportAsHTML() - local browse$ - - browse$ = filepanel "Save-File", "Export as HTML", globalProjectDir$ - if(browse$<>"") then - - handle = open(browse$, "w") - if(handle) then - print #handle "" - print #handle "" - print #handle " " - print #handle " " + GetFileName$(globalAllNames$(globalCurrentText)) + "" - print #handle " " - print #handle " " - print #handle " " - print #handle " " - print #handle "

"
-        		print #handle textedit get$ "Text"+str$(globalCurrentText);
-			print #handle "    
" - print #handle " " - print #handle "" - close(handle) - else - alert "File could not be saved!", "Ok", "warning" - return false - endif - endif -end sub - -// Save all settings before exiting -sub SaveSettings() - local handle, i - - if(system("test -d "+globalConfigDir$) = 1) then - system("mkdir "+left$(globalConfigDir$, len(globalConfigDir$)-1)) - endif - - handle = open(globalConfigDir$+"ide-settings", "w") - if(handle) then - print #handle "# yab IDE 2.2 config file" - print #handle "# " - print #handle "# Comments start with a # as first character on a line" - print #handle "# Only change this file when you know what you are doing!" - print #handle "# Do not change the order of the lines in this file!" - print #handle "# " - print #handle "# yab directory (ends on /)" - print #handle settingsYabDir$ - print #handle "# Program directory (ends on /)" - print #handle globalProjectDir$ - print #handle "# yab binary location" - print #handle yabDir$ - print #handle "# IDE directory (ends on /)" - print #handle ideDir$ - print #handle "# BuildFactory directory (ends on /)" - print #handle buildDir$ - print #handle "# Help directory (ends on /)" - print #handle globalHelpDir$ - print #handle "# Use localization (0 = false, 1 = true)" - print #handle restartSettingsLangUse - print #handle "# localization mimetype" - print #handle settingsLangPath$ - print #handle "# Auto indent (0 = false, 1 = true)" - print #handle settingsAutoIndent - print #handle "# Auto completion (0 = false, 1 = true)" - print #handle settingsAutoCompletion - print #handle "# Auto completion starts at character count:" - print #handle settingsACNumChar - print #handle "# X-coordinates of main window" - print #handle settingsX - print #handle "# Y-coordinates of main window" - print #handle settingsY - print #handle "# Width of main window" - print #handle settingsWidth - print #handle "# Height of main window" - print #handle settingsHeight - print #handle "# Start in fullscreen (0 = false, 1 = true)" - print #handle settingsFullScreen - print #handle "# Start in maximized editor (0 = false, 1 = true)" - print #handle settingsFullEditor - print #handle "# Position of main vertical divider" - print #handle settingsVSplitDivider - print #handle "# Position of the vertical divider for the line numbers" - print #handle settingsV2SplitDivider - print #handle "# Position of main horizontal divider" - print #handle settingsHSplitDivider - print #handle "# X-coordinate of the pattern editor window" - print #handle settingsCalcPatternX - print #handle "# Y-coordinate of the pattern editor window" - print #handle settingsCalcPatternY - print #handle "# X-coordinate of the color selection window" - print #handle settingsColorSelectX - print #handle "# Y-coordinate of the color selection window" - print #handle settingsColorSelectY - print #handle "# Red value for last selected color in color selection window" - print #handle settingsColorSelectR - print #handle "# Green value for last selected color in color selection window" - print #handle settingsColorSelectG - print #handle "# Blue value for last selected color in color selection window" - print #handle settingsColorSelectB - print #handle "# Ask for saving before running a program (0 = false, 1 = true)" - print #handle settingsAskForSaving - print #handle "# Is \"find\" case sensitive? (0 = false, 1 = true)" - print #handle settingsFindCS - print #handle "# Last search string" - print #handle settingsOldSearch$ - print #handle "# Show warning before applying Replace All (0 = false, 1 = true)" - print #handle settingsFindAlert - print #handle "# Show warning when reformating sourcecode did not close all loops and conditions (0 = false, 1 = true)" - print #handle settingsReformatAlert - print #handle "# Show warning before undo reformating (0 = false, 1 = true)" - print #handle settingsReformatUndoAlert - print #handle "# Number of spaces per tab" - print #handle settingsTabSpaces - print #handle "# Unused field (was: use Haiku tabs on ZETA)." - print #handle 0 - print #handle "# Font family name" - print #handle settingsFontFamily$ - print #handle "# Font style" - print #handle settingsFontStyle$ - print #handle "# Font size" - print #handle settingsFontSize - print #handle "# Real font size" - print #handle globalRealFontSize - print #handle "# Print out IDE debug information (0 = false, 1 = true)" - print #handle DEBUG - print #handle "# Maximum number of files the IDE can handle" - print #handle MAXFILES - print #handle "# yab runtime parameters (default is empty)" - print #handle settingsYabParam$ - print #handle "# Program runtime parameters (default is empty)" - print #handle settingsProgParam$ - - close(handle) - endif - - handle = open(globalConfigDir$+"ide-openfiles", "w") - if(handle) then - for i=1 to MAXFILES - if(globalAllNames$(i)<>"") print #handle globalAllNames$(i) - next i - close(handle) - endif - return -end sub - -sub path() -path$=attribute get$ "" , "" -path$=path$+"/" -end sub - - -sub yabpath$() - -if system("test -e /boot/home/config/non-packaged/bin/yab") = 0 then - return "/boot/home/config/non-packaged/bin/yab" -elseif system("test -e /boot/home/config/bin/yab") = 0 then - return "/boot/home/config/bin/yab" -elseif system("test -e /boot/system/bin/yab") = 0 then - return "/boot/system/bin/yab" - -endif - -local cmd$ -cmd$="test -e "+settingsYabDir$ -if system(cmd$)=0 then - return settingsYabDir$ -endif - -return "error" -end sub - -sub set_up_BuildFactory() -local DataDir$ -local x -local y -local handel -local ddir$ - -DataDir$=trim$(system$("finddir B_USER_DIRECTORY")) -x=system("mkdir "+DataDir$+"/yab_work") -system("mkdir ~/config/settings/yab") -y=system("ls "+DataDir$+"/yab_work/BuildFactory > /dev/null") -y=y+system("ls "+DataDir$+"/yab_work/Programs > /dev/null") -system("cp -ur "+ideDir$+"BuildFactory "+DataDir$+"/yab_work") -handle=open(DataDir$+"/yab_work/BuildFactory/srcfiles","r") - - while(not eof(#handle)) - input #handle a$ - system("cp -u "+ideDir$+"src/"+a$+" "+DataDir$+"/yab_work/BuildFactory/"+a$) - end while - close handle - system("cp -ur "+ideDir$+"src/column "+DataDir$+"/yab_work/BuildFactory") - -if x=0 or y>0 then - - system("cp -ur "+ideDir$+"BuildFactory "+DataDir$+"/yab_work") - system("cp -ur "+ideDir$+"Programs "+DataDir$+"/yab_work") - system ("cp -ur "+ideDir$+"img "+DataDir$+"/yab_work/Programs") - system("cp -ur "+ideDir$+"Programs/libs/* /boot/home/config/settings/yab") - - handle=open(DataDir$+"/yab_work/BuildFactory/srcfiles","r") - - while(not eof(#handle)) - input #handle a$ - system("cp -u "+ideDir$+"src/"+a$+" "+DataDir$+"/yab_work/BuildFactory/"+a$) - end while - close handle - - system("cp -ur "+ideDir$+"src/column "+DataDir$+"/yab_work/BuildFactory") -end if - -x=1 -open #1, ideDir$+"src/YabMain.cpp","r" -open #2, DataDir$+"/yab_work/BuildFactory/parts/YabMain.cpp.end","w" - -while(not eof(#1)) - line input #1 a$ - if x>9 then - print #2 a$ - end if - x=x+1 -wend -close #1 -close #2 - -end sub - - - - -sub changestring() - -TextLine$ = TEXTEDIT GET$"Text"+str$(globalCurrentText), searchLineNum -TextLine$=rtrim$(TextLine$ ) -FindPart$=textcontrol get$ "FindTCFind" -FindPart$=trim$(FindPart$) -if(settingsFindCS) then - x=instr(TextLine$, FindPart$) -else - x=instr(upper$(TextLine$), upper$(FindPart$)) - -endif -if x>0 then - x=x-1 - TextPart$= textcontrol get$ "FindTCReplace" - TextPart$=rtrim$(TextPart$) - TextLine$=left$(TextLine$,x)+TextPart$+right$(TextLine$,len(TextLine$)-(x+(len(FindPart$)))) - TEXTEDIT SET "Text"+str$(globalCurrentText), "select", searchLineNum - TEXTEDIT SET "Text"+str$(globalCurrentText), "cut" - TEXTEDIT SET "Text"+str$(globalCurrentText), "select", searchLineNum - TEXTEDIT ADD "Text"+str$(globalCurrentText), TextLine$ - TEXTEDIT SET "Text"+str$(globalCurrentText), "gotoline", searchLineNum - searchLineNum = textedit get "Text"+str$(globalCurrentText), "Find", TextPart$ - -endif - -end sub - -sub getappsig$(infil$) -local x,a$,i,ii -open #122,infil$,"r" -for i=1 to 2 -line input #122 a$ -a$=lower$(a$) -ii = instr(a$,"mimetype") -if ii<>0 then -a$=right$(a$,len(a$) - (ii+8)) -a$=trim$(a$) -a$=right$(a$,len(a$)-1) -a$=left$(a$,len(a$)-1) -close #122 -return a$ -endif -next -close #122 -return "" - - -end sub - - -sub getprojectdir$() -local CurrentSelection, CurrentSelection$, i,OpenProjectDir$ -CurrentSelection = columnbox get "FileBox" -CurrentSelection$ = columnbox get$ "FileBox", 2, CurrentSelection -for i=1 to COLUMNBOX COUNT "FileBox" -if (GetFileName$(globalAllNames$(i)) = CurrentSelection$) OpenProjectDir$ = GetDirectory$(globalAllNames$(i)):break -next -return OpenProjectDir$ -end sub