These are not the same as 'local variables' and ;local arrays', that you would list inside the run() function. They are still global, but their identifiersare within the local namespace of the script.
Essentially, this script turns an ffc script into a pseudo-namespace in syntax. (It's primarily for the sake of organising identifiers, and preventing global namespace pollution, although it isn't technically a real namespace.)
1. You may access to the stack[] globally as debugshell.stack[].
2. Likewise, all of the local defines, and SP are available as debugshell.DEFINITION and debugshell.SP, respectively.
3. Essentially, jyou access the script-local functions, variables, and arrays in precisely the same manner as the exant script-local functions. Keep in mind that when you do this, that variables and arrays become part of the global memory map, so you should limit this to things that have a purpose at a global scope.
Constants (defines) still use no stack space, and they are resolved during compilation.
4. From within the script that contains the local declarations, you call all of these by their local identifier, so script name resolution is not required. Thus, the namespace script debugshell calls stack[], WINDOW_F_KEY, and execute(); but from another script (or from the global namespace, you would use debugshell.stack[], debugshell.WINDOW_F_KEY, and debugshell.execute(), respectively.
The global script test, does precisely this, when it calls debugshell.process().
5. Note that none of this namespace handling is mandatory to make this script feasible. It simply makes it cleaner (IMO), and ensures that the global namespace of the user isn't polluted by conflicting identifiers. I've started doing this for all of my script sets--putting functions and large arrays inside of class scripts, namespace scripts, and struct scripts.
All of these are still ffc scripts--they can be any type, but I arbitrarily use ffc--but they don't often have anything inside the body of run(), living their lives as fancy containers.
Those of you worried abour running out of ffc script slots, should also note, that you do not need to assign a script to a slot to use its namespace. You need only assign scripts to slots if you need to execute the run() function of that script.
I think that covers the syntax in use here, and I hope that all--or at least some--of you, find it interesting and useful.