Hello Dave,
I did not examine in depth some open-source parser. Programming is a hobby for me and I love to find by myself some algorythms. I had no compiler course either, developing a byte-code compiler was a great challenge for me, and this is why I really wanted when starting this iziBasic project from scratch.
Copy & Paste is another thing... maybe a job?

Now, to come back to your original requests, here are the workarounds for them.
SELECT CASE variable argumentsIF %c1% = - 1 THEN
' do something
ELSE IF %c1% = %foobar% THEN
' do something
ELSE IF (etc.)
' do something
ENDIF
ENDIF
ENDIF (whatever the number required)
Referencing arrays in IF statementsFOR %counter% = 1 TO 100
b=a(%counter%) : IF b = 0 THEN
' do something
ENDIF
NEXT
multi-dimensional arraysHere the principle is to use the trick of translating a multi-dimensional array to a mono-dimensional array.
Then, use the provided Dim2.iBas include file provided in the iziBasic package. And code something like:
' IBDim2.iBas
' IBDim2 is a simple application
' to show how to deal with 2
' dimensions arrays in iziBasic,
' like Array(10,5), when iziBasic
' "only" offers access to the A(n)
' array (1 dimension).
{CREATORID "LDTE"}
{VERSION "1.0"}
{PARSER ON}
{INCLUDE "Dim2.iBas"}
BEGIN
'Store some values in A(10,5)
FOR I=1 TO 10
FOR J=1 TO 5
V=(RND(I)+1)*(RND(J)+1)
GOSUB _PutInArray 'A(I,J)=V
NEXT
NEXT
'Retrieve and show values in A(10,5)
FOR I=1 TO 10
FOR J=1 TO 5
GOSUB _GetFromArray 'V=A(I,J)
PRINT V USING 0;
PRINT " ";
NEXT
PRINT
NEXT
WAIT
END
These are only workarounds while waiting for a potential Christmas gift. But they still get the required job done!
Cheers,
aldweb