The next release of OpenInsight sees some updates to Basic+ with the addition of two new statements and the return of an old Arev compiler keyword.
The LocateC statement
A counterpart to the well-known IndexC function, the LocateC statement simply performs a case-insensitive “locate” operation on a string, using the normal Locate statement syntax like so:
LocateC substring In string Using delimiter Setting pos Then/Else
The GSClear statement
This statement clears down the internal GoSub return-stack of the currently executing program, so that a subsequent Return statement will return to the calling program rather than jump back to an originating GoSub statement as normal. This is usually used to handle severe error conditions where an “early return” to the caller is desirable and there is a need to pass a value back to the caller. E.g:
Compile Function Test( Void ) GoSub DoTheThing Return "The Thing Was OK" DoTheThing: GoSub CheckTheStuff Return CheckTheStuff: If TheStuffIsReallyBad Then // Return directly to the caller GSClear Return "The stuff is really bad!!!" End Return
This is basically the same as performing an Abort operation, but allows you to return a value, which Abort does not.
The Expendable statement
Marking a program as “expendable” was a useful feature in Advanced Revelation that instantly removed a program from the cached program array after it had finished executing. This was very useful in networked development scenarios where programs being edited could be loaded by different workstations – they could still get an updated version without having to restart the application or issue a manual GarbageCollect statement to clear the cache. This is a similar scenario to using a current tool like the OpenInsight EngineServer, where individual engines can cache programs during development – it can become tedious to force them to load an updated version after making changes.
To mitigate this the Expendable keyword has been reintroduced and is simply added to the program header declaration like so:
Compile Expendable Function( Param1 ) // Do stuff Return RetVal
or, if you don’t use the optional “Compile” keyword:
Expendable Function( Param1 ) // Do stuff Return RetVal
With this the engine now deletes the program from the cache after all references to it have been removed from the call stack, forcing it to reload from disk the next time it is called.