Beginner's All-purpose Symbolic Instruction Code Local Lua
BLL is a Just-In-Time Compiler for wxWidgets, that build Stand Alone Windows Executable
Release BLL v4.21b Alpha 11
BLL is a minimalist portable Lua programming environment
BLL doesn't get installed, you need to unrar the BLL.rar, it mean all the files is in the â€BLLâ€ directory, no hidden files
Work still in progress, Download Day 356: Download page
12 january, 2017
BLL 7, Install and the first step with BLL
BLL in short:
BLL building Stand Alone Windows Executable that is as simple as writing HTML v4.01 code
the Editor is made for keyboard use only, (mouse is only for apprentices)
.txt .Lua .bll .ini .bat Editor
Text Indexer, with goto function
Project Handling, with goto file function
Interpreted Lua code on demand within the IDE, with Error Handling
Control the Application Window, with extra BLL Commands
Currently 19 BLL Commands for Handling wxWidgets
Play .wav and .ogg Sound
System Event Handlers
BLini: .ini read/write and run extra .blini script command's
BLL Encryption Command, to encrypt sensitive data
What BLL is Not:
Complete, it is still in Alpha
Well spelled, the Author has Dyslexia
Not using wxAui User Interface
Not for game, no plan to implement DirectX or OpenGL soon... I change my mind
but if you want to make real games then I can only recommend you using Monkey X
Special features in a scintilla editor
23 February 2017 BLL v4.21b Alpha 11
Bugfix: When [F12] Save FileAs it only change the directory not the .bll file root.
So when you [Shift-Ctrl-N] Create a new template BLL file, [F12] SaveAs, then when you [F5] run the script,
the .bll file root was still the old path and show you a Error message that "images/heart.png" was not found!
The old root was the application root, the new root is the location of the .bll script file.
10 Februari, 2017 Day 356, v4.20b Alpha 11
a Minor Update: treectrl
New Function: treectrl with new Treectrl.bll sample.
I upload this update even if I am not sure if the treectrl syntax is done right yet.
Because the treectrl behave so differently compare to other ctrl functions.
The first difference is that it doesn't have a index like listctrl
I add so every node can store a "String"/number and I am going to add that functionality to listctrl in a later update!
treectrl don't have a search function but you can
bookmark nodes and step thru the nodes manually.
More treectrl testing is needed...
It's now 6 month since I add autocomplete to the editor,
and I been irritating that the selector don't hide after you are done writing the whole word in the selector.
To explain the situation you needed to press Esc to close the autocomplete selector before you could move the cursor with the arrow keys.
Now when you done writing the autocomplete selector word, it hide the autocomplete popup selector automatically!
The flickering when you created a New File is now fixed!
BLLchat.bll now connect to the chatserver automatically when AUTO_LOGIN is set to 1
New sample: crypto.bll show howto read/write encrypted data to the .ini file
19 January, 2017
Announcing BLL Script Contest 2017
I am proud to include 6 copy of Monkey X Studio
one of the best,
if not the best programming environment for making game and application for
Desktop (Windows, Macos, Linux), Android, iOS (iPhone, iPad, iPod Touch),
Windows Phone 8, Windows 8, Flash, HTML5 and Ouya
If that was not enough the contest also include 6 copy of Cosmigo Pro Motion NG
I can say with confidence that Pro Motion NG is to this date the best Pixel Art program you can get.
Test BLL out and make a functional script that amaze us all,
and have chance to win one of the prizes in BLL Script Contest 2017
the BLL Script Contest 2017 has 20 prizes worth over $2200 + 10 Extra consolation prizes,
so make sure you check it out!
Cosmigo Pro Motion NG
15 January, 2017 Day 350, v4.12b Alpha 11
New backup function
My main TODO list was done, and my main focus was to tried get better prizes to the Script Contest!
But I lean back and start thinking about my work flow for writing EDmap and BLLAnime When I realized,
I make backup at least 3 times a day. What I did was pressing [Shift-Ctrl-D] for open current directory,
Mark my file and [Ctrl-C] then click, click to the backup folder and press [Ctrl-V]
then I Arrow Up/Down to see last file and [F2] to rename the backup file with a new indexing number,
and then finish it with [Enter] and [Alt-F4] to close the explorer window.
So I decided to make a backup function
Default [Ctrl-B] Backup current file and if Backup_directory is not set in data/BLL.ini:
Backup_directory = ""
then system("requestdir") is shown to help you chose a backup folder
then, it copy your file and add a new index to your filename
Example: Blomma.php become Backup_directory/Blomma_??+1.php
If you press [Ctrl-Alt-F11] as default you open your last backup saved file
New Function: system("requestdir")
Back to looking for prizes...
9 January, 2017 Day 350, v4.10b Alpha 11
BLL version 4.1, Introduce: Animation Editor and a Animation Player
Make a animation with tile sprites
the Player can be included and play your animation in your own scripts
When you can see and analyze the script,
you can make your own animation file format to import your animation
in any programming environment. You can also add your own animation functionality.
BLL now check if you somehow not load a bitmap
New Function: bitmap("getfile", id) return "filename"
New Function: timer("settime", id, time) return current time
BLL 8, BLL v4.1 2017
BLL is still leaking memory:
Method TableSetInt(_Table:String, _Namn:String, _Data:Int)
I describe in the 4.0 update, that BLL was leaking memory.
If L Then
lua_pushstring(L, _Table) ' put the table in varname
lua_pushstring(L, _Namn) ' push the key
lua_pushinteger(L, _Data) ' 1st argument
lua_settable(L, -3) ' set table["key"] to "value"
lua_pop(L, 1) ' If I don't use this pop the application crash after 2 minutes..
This is the code that is leaking memory, at the moment I need help figure out why this code is leaking memory!
26 December, 2016 Day 349, v4.00a Alpha 10
New BLL version 4.0, with OpenGL and a new Debug window
I asked a friend what he thought about BLL?
He then showed me Electron and ask what I think?
After some researching I concluded both BLL and Electron has its own good and bad sides!
I still consider BLL easier to learn and faster to write code, but that's only my opinion!
I can't really compare David with Goliath
BLHTML specialize only in handling data, and I feel BLL is doing the same thing
I am trying to make a PowerShell Studio competitive product, but the market of that is microscopic!
So I sit down and say to myself, people don't crave for a data handler, what do they want?
So I decide to add OpenGL to BLL.
I been sitting 5 days making a demonstration script, a Map-Tile-Editor and my hopes
is that this is more attractive than a data juggling script!
I wish I could save the map in a standard map format but at the moment BLL can't handle XML data (if you see the irony)...
BLL v4 change the directory root from the application root to the script root
This was a necessary next step!
Now the Application root/images only hold the .ico for building Stand Alone .exe projects
the rest of the image/sound is now located in the script folder.
When introducing OpenGL to BLL it changes the script from being passive event calling to very active.
That means handling data internally has increased and at the moment BLL is leaking memory
OpenGL perform much better than I ever expected it would perform, but when its leaking memory it's not that impressive!
EDii.exe was before 3703Kb and after including OpenGL its now 3809Kb, so adding OpenGL it only make the application 106Kb bigger!
The last News for version 4 is a new Property/Debug window
[Ctrl-Alt-F12] to activate the Property/Debug window, Debug_Update_ms set the frequency for update your debug information
It makes easier for you to see what's happen in your Bll script. [F1] for more information about the Property/Debug window
27 November, 2016 Day 338, v3.01a Alpha 9
New BLL version 3.0, with new BLLchat and ftp-client scripts
I prepare to pack and upload BLL when the roof in the kitchen fell down, the termites been eating their own home
until it was no more! (sound like termite and humans have a lot in common?)
Anyhow my wife forced me to fix the roof, and some week later I am back in my chair..
I had to update the BLLchat.bll script before I felt ready to upload it.
Change the userlist listbox to a listctrl function, to show icons who the users is
When I was trying to change to the listctrl I actually forgot how the listctrl was working, so I make a example script: listctrl.bll
to show myself and other how the listctrl is working.
Add sound when user logon and send messages
add information when user timeout or logon to the chat
14 November, 2016 Day 334, v3.01a Alpha 9
It been almost 4 month since the last update, but BLL got some new creamy new functions!
Back in 2007 I have the pleasure to meet Daniel Stenberg at FSCons Scandinavian Free Software Award
where BLHTML was one of the nominee
I been wanted to include cURL to the project, and finally here it is!
I have to admit I didn't know what to expect when started to include the library,
it was more complex than I imagined it would be.
I started to include the http requests and then I include the ftp request, when I was almost done I realize that same cURL function is used in both http and in ftp requests
So I had to rewrite the curl("functionsyntax") to avoid redundant code.
I am sorry to say I didn't include functionality for telnet for now!
But it is still more, listctrl is now also included (listctrl is a very impressive library/function).
listctrl was also a hard function to include, I had to rewrite the listctrl("functionsyntax") so it use same name syntax as listbox.
In a weak moment I was thinking to remove the listbox from BLL, but the minimal extra code listbox has and that it's much more simple to use than listctrl, I decide to keep the listbox!
One other big news is that all the BLL function("subfunction", id, "string") now can get the string with a nil value without stopping/crashing the script.
That is why I include the str function that is a replacement for the built in Lua string table.
Known Bug: the AutoComplete is sometime stop working, I have not localize when and where it stop, but I was thinking it was after running the BLL script,
I reset the script indexing after you stop the BLL script, but it is still stop working sometimes!
So I make a temporary/permanent Bug Fix by pressing [Esc] to restart the AutoComplete again ([Esc] toggle show/hide the AutoComplete and now also reread/reset the script indexing)
I was ready to pack the project to release and decide to build some project to see if it was working?
I ended up 3 day bug testing why the Stand Alone .exe does not automatically resize the main splitter window
It was working "fine" in Debug/Editor Mode
I learn that all the parent wxWindow object is created to snap to their parent as default, but because it don't work you need to set the size in SYS.OnWinUpdate(mode)
On the fourth day I try to pack it up again and then I surprisingly find
output("setsize") didn't return correctly with and height
that [Shift-Ctrl-F10] Still mess upp the Layout when console was set to the bottom
that BLLchat.bll didn't update the tab correcttly when run Stand Alone .exe
That I need to update data/New.bll with the new UpdateWindow() function
Add the 1600*900 resolution to data/BLLayout.ini
12 November, 2016 Day 334, v3.01a Alpha 9
My computer get the blue screen of death and refuse to start after that
So I had to buy a new CPU cooler and reinstall the computer again, that make me find some more [F7] Build BLL Release bugs
When I reinstall the BLIde again I change tab space from 2 to 4 and that mess the code up totally
I probably going to tab clean the code for month, when I am done cleaning I am going to release BLL as Open Source.
I finally learn HOWTO find the bug that generate this error message:
New MyApp.run() has a Windows exception: EXCEPTION_ACCESS_VIOLATION
This mean that I am trying to do something on something that is currently Null somewhere in the code!
The tricks was to DebugStop just before I get the error message and then (Step in/Step over/Step Out) until I get the error message.
Normally this error use to take days before I could track where in the code the error was
So I am happy I finally learn howto fix that kind of bug!
I update the BC.bll and BLLchat.bll so they include a address book where the user can add/delete change the address information from/to the .ini file
I been writing the whole day on the BC.bll script and realize that my mousemat and the mouse was under the screen, I have not use the mouse the whole day
That make me happy that I manage to make the editor work excellent without a mouse!
8 October, 2016 Day 319, v2.90a Alpha 9
I continue explore the possibilities curl get.
I update BC.bll to v2.0 to also become a simple ftp client.
When I get the ftp directory table in pure text I realize I need to create the listctrl function.
The listctrl function is the most complex wxWindow I include so far
When I was done include all the listctrl("subfunctions") I realize the name syntax is difference from listbox and other BLL functions.
So I spend some extra days standardize the listctrl("subfunctions") names.
I had these function in BLL\include\basic.bll:
I can somehow not now recreate the strings that returned as number
if _str == nil then _str = "" end
if _num == nil then return 0 end
at the time I was sitting 3 days trying to figure out why it didn't behave as it should before I give up and create the function str
I know Lua string table has all of them but the BLL str always works
I know Lua can handle stream also but that didn't stop me from create BLL function stream
Plus you have cmd("readfile/writefile/filetype/filesize/filetime") to handle files
the extra code for those 2 function is minimal so without further discussion I keep them!
10 Augusti, 2016 Day 264, v2.70a Alpha 9
New Function: curl
I only concentrate on http request
I modified BLHTML index.php so I could login as a BLHTML user
When you get the right of the BLHTML user the possibilities is endlessly
I started to make BLLchat.bll a simple chat client
Back at this time my internet connection was terrible bad so the script get firmly error checking if the messages get sent correctly
If message not get sent correctly, it try again until the message is sent successfully!
20 July, 2016 Day 244, v2.61b Alpha 8:
Auto complete is here to make your life easier!
the Editor getting easier to use:
You had [F1] Function help and now you got Auto Complete
Here you can learn more about Auto Complete on YouTube:
BLL 6, the Auto complete, do more with your editor
Fun fact: It took 20 days to make Auto Complete
and 1793 times to build!
That is in general 89.65 build every day!
30 July, 2016 Day 227, v2.40k Alpha 8, Auto Complete v1.0:
I suppose to add wxTreeCtrl or wxPropertyGrid
But I was not motivated to do that.
I been insecure how to make a Auto Complete Function and I wasn't sure if I could make one?
But rather doing what I supposed to do, I make a attempt to do the Auto Complete Function.
05 July, 2016 Day 232, v2.50c Alpha 8, Auto Complete v1.5:
Update Auto Complete to suggest the subattributes for the current function
19 July, 2016 Day 243, v2.60h Alpha 8, Auto Complete v2.0:
I lose focus and break down, I use one class/Type for the functions
Then I copy the Type and use that for the subattributes
Then I change Auto_Complete[i].words to Auto_Complete[i].subwords
and That make my life little more easy
I even mix i with Auto_Complete_ext_n and realize Auto_Complete_ext don't work like that
I was thinking to erase all and rewrite the setup process for the [subattributes]
but 3 days where I forbid myself to do anything else I manage to make Auto Complete v2.0:
the same function can now have difference subattributes for example php, bmx and bll
You can also have always words and functions (words is stand alone Auto Complete words, function can have subattributes)
This mean you can setup your own Auto Complete for your own project!
20 July, 2016 Day 244, v2.61b Alpha 8:
Make the Editor 100% mouse free!
[Ctrl-Alt-Left/Right] Slide the Vertically slider Left/Right
[Ctrl-Alt-Up/Down] Slide the Horizontally slider Up/Down
Now you can throw away your mouse, or maybe not?
I need to confess, I still use my mouse, I don't think you can throw away your mouse this century,
but I am sure someday in a near future you can!
Cheers, you can now enjoy Auto Complete v2.0
5 July, 2016
BLL v2.31m Alpha 7 New sample script: calc.bll
New sample file: BLL\samples\calc.bll
YouTube: BLL 5, Show the calc.bll script in detail
calc.bll is one of the sample file from BLL's samples files but you can download a stand alone calc.bll here
I create calc.bll because Windows 10 calculator can't edit the history that I am use to do in Windows 8
Still calc.bll is much simpler than the built in Windows calc.exe, it's just that calc.bll can edit the history.
Bug Fix: You can now press [X] Close Button in Debug mode to close the script and return to the editor.
21 June, 2016 Day 233:
BLL v2.30d Alpha 7, New Version
menu("setcolor", id, ink, paper)
menu("ink", id, ink)
menu("paper", id, paper)
You can now set menu ink, pager to the menu
16 June 2016 Day 230, v2.21a Alpha 7:
New Function: system("menuexecute", menuid)
This execute the built in menu command even,
if you don't have any menu for your application.
12 June 2016 Day 226, v2.20a Alpha 7:
New ERROR handling system:
It show Warning/ERROR if a object is not set!
button("new", 3, "", -1, "button3", 4, 44)
This is going to print out this Errors:
button("new", 3, "", -1, "button3", 4, 44)
listbox("new", 3, "", -1, "line1|line2", 1, 4, 74)
button("new", 3) :: id: 3 is already registered for button()
listbox("new", 3) :: id: 3 is already registered for button()
the button is recreated but the listbox is aborted!
10 June 2016 Day 224, v2.00a Alpha 7:
Remove all wxWindow subfunction: free, show, enable, focus, setpos, setsize, ink, paper, settooltip, gettooltip,
setfont, getfont, getfontsize, settext, gettext, update, refresh and isset
For all the wxWindow functions:
bitmapbutton, button, checkbox, combobox, gauge, input, label, link, listbox, panel, plopp, radiobox, radiobutton, scintilla,
sizer, slider, splitter and tab
9 June 2016 Day 223, v1.77a Alpha 7:
objectctrl, one function to rule them all
I decide to go for the name "objectctrl" for the new super function!
Update all function("new", id, "name", parent)
if name == "" then BLL is auto generate the name: label("new", 500, "", -1) get name = "label_500"
I chose "label_500" over "label.500" because you can select the whole name as a word!
to change the labeltext you now use:
objectctrl("settext", 500, "NewText") or objectctrl("settext", "label_500", "NewText")
I add name so you could have a clue what it's manipulating,
objectctrl("settext", 500, "NewText") don't really say what it is your doing!
objectctrl("settext", "label_500", "NewText") is a slightly compromise to the old: label("settext", 500, "NewText")
8 June 2016 Day 222, v1.77a Alpha 7:
I learn about wxWindow.FindWindowByName and I decided to make one super function for all wxWindow subfunctions
Some sample name I got for the new function: control, manage, manipulate, use, operate, direct, object
Function name: object has been in my mind and I even reserve the word "object" in the Lua code.
7 June 2016 Day 221, v1.77a Alpha 7:
New Function: bitmapbutton, that is the third button in BLL now.
This function don't relay have any new functions, it's just a button without text
the problem was the picture for: "default|hover|focus|selected"
You can do a tabbed toolbar with the bitmapbutton
5 June 2016 Day 219, v1.76e Alpha 6:
New debug function: system("list", "function") print out all wxWidget function that been created
Alpha 6, Major Update
4 June, 2016 Day 218, v1.76d Alpha 6:
Because the user can now destroy the subwindow by clicking the close [X] Button in the frame
I needed to make the wxWidget deletable!
So now when the user create a new wxWidget it put it in a list,
it store the id and the function name and where the wxWidget is stored!
When the subwindow is closed the wxApp is Destroying the object, but the Type/Class
(the shell of the object) is still there, all empty, no id no data just nothingness!
So when I reCreate the subwindow it create a new instance of all the object in memory, as result I get a lot of empty shell object
So when I created the function list I could reCreate the deleted function in the old empty shell object again
Now I don't create a new storage for the reCreated wxWidget
This don't fix the memory leaking, when you destroy/free the wxWidget it's not freeing the memory correctly!
So when you reCreate the wxWidget it only alloc more memory!
This only reuse the old Type/Class and put wxWidget in the same declared memory!
All wxWidget object is now deletable!
This is such a big mind changing for BLL so I almost set BLL to become v2.00
16 June, 2016 Day 217, v1.46a
I sit 2 hour and looking for an Error in the engine code before I realized the Error I made was:
I create a new splitter and create 2 new panels, one of the panel had the same id as another panel that was already created,
so my object on the panel didn't work, because I put them on the original panel that was on a hidden subwindow!
To avoid doing this ever again!
I create a Error message that only shows in debug mode and when still in SYS.OnCreate():
It show the Error message if you trying to create a new function with and already registered id!
New Function: filectrl
02 June, 2016 Day 216, v1.16a Alpha 5:
New Functions: gauge, radiobox and radiobutton
slidertimer("do", 1, 1, 500) it now change the timer interval immediately
[Shift-Ctrl-S] When save project show projectname without filepath
[Shift-Ctrl-F3] Replace All, sometime get stuck in a endless loop
Clean the code for: button and the slider
Change event Function name: SYS.OnUpdateWindow(mode) to SYS.OnWinUpdate(mode)
The reason to change the name was: it was to long, I test OnUpdWin but I didn't like it to be shorten like that!
Make New Editor Bookmark: 1: [OnUpdate], 9: [OnClose] and make 0: [OnCreate] have the same syntax!
The real BLL v1.00a
24 May, 2016 Day 212, v1.12e Alpha 4:
New event function: SYS.OnUpdateWindow(mode)
when SYS.OnUpdateWindow is called SYS.subwindow = subwindow id or -2 main window
New mode -9 close subwindow SYS.subwindow = subwindow that is closing
Update subwindow with: center, minsize, maxsize, maximize, minimize, closebutton, hasflag, setstyle, setflag, createstatusbar and setstatustext.
Bugfig: Change subwindow("setpos") SetPosition with the move function, SetPosition make the subwindow flickering!
Rem out all the scrollwindow functions, if you want to make the subwindow scrollable use a panel
20 May, 2016 Day 211:
When you load text files it save the time when the file was last modified
When saved it checked if a newer file was saved on disk, if so then don't save/run script!
If you still want to save the file then you can [F12] Save file As..
Because you know what you are doing!
Now the editor don't save the file if it's not modified!
You can only guess why I added this functionality?
14 May, 2016 v1.11a Alpha 4
Standardize, merge and remove function SYS.OnSplitter() and SYS.OnResize() to:
-- SYS.subwindow = subwindow id
-- mode -1 main window is moved
-- mode -2 main window is resized
-- mode -3 editor vertical splitter is changed
-- mode -9 close subwindow
12 May, 2016 Day 209, v1.10a Alpha 4:
New update: BLL v1.10a Alpha 4
The biggest news are that, you can toggle the console window: horizontal/vertical
You can now have the console on the bottom of the application.
Introduce layout profiles to save the editor layout for different resolution or position when there are many monitors
Introduce lexer profiles for console windows and file extensions
New dynamic created right click dropdown menu
New jump functionality where you can jump to a file that is in the code
You can also set a main file, what file you currently working on now
Update the Search/Replace code so it's the same code as the scintilla Search and Replace
Introduce subwindow, make you have one or more subwindows
New crypto function, is to cryptate binary file or hex string
New link function, is to create tabbed www links
the BASS Library for now, is not included
Standardize the name syntax:
Remove Functions: getpos and setpos
Add Functions: console, output
Update timer attributes
Move many sub command from system to window
For more development information: BLL Development Blog
02 January, 2016 Day 120:
BLL v0.98a Alpha 4, screenshot
17 November, 2015 Day 101:
The 4:th release: BLL v0.91 Alpha 2
I Make BC.bll a demo to show the new cmd command
14 November, 2015 Third release First Alpha v0.90
03 December, 2014 Second Demo release, enjoy!
19 November, 2014
BASIC Local Lua is a Work in progress..
It's a simple
framework for handling
I guess when it's done BLL become a .exe version of
BLL is using:I been away from BLHTML since 2009 but width today's computer
BLHTML is almost .exe fast so it almost make BLL redundant!
I still get surprised how easily BLHTML, is to use, so I try to make BLL as easy!
For the moment I use BLL to demonstrate what Windows/
wxWidgets Application can do for you!
a Application have some advantages/disadvantages over a web solution.