Hi...
I discover one (from my point of view) weird thing.
It looks that number of CASE are limited because i recive error
'compiler internal overflow'...
I found one topic on Aurora board that CASE are limited to 100 nodes...
same for EB - i use EB ?
Hmmm i really don't understand why is this limited to 100?
So another thing mrP say that is posibile to break select and continue again with
new SELECT, Ok i do this but statment DEFAULT do not respond properly on
new DEFAULT,,hmmm.
What is solution for this problem...?
thanks advance ..
Aurel
Hi Aurel,
Here's a little test program ..
openconsole
cls
x = 5
select x
case 1
print "First select: x = 1"
case 3
case 6
default
print "First select - x not found - procede to Second select"
endselect
select x
case 2
print "Second select: x = 2"
case 5
print "Second select: x = 5"
case 6
default
print "Second select - x not found"
endselect
do:until inkey$<>""
closeconsole
end
I don't see why you can't have as many 'Select' blocks as you need to deal with large numbers of test cases.
If a Case is not found in the first block, do nothing, but proceed into the next block - and so on.
all the best, :)
Graham
Hi Graham
Problem is much more complex . ::)
But still i think that this limitation is not good at all,amount of CASE under SELECT is simply to small.
I dont wanna bothering you with details.
Ok i will see what i can do in another way... ;)
Aurel,
You're no bother at all .. you know we all like to try and help if we can .. :)
I'm intrigued at what you might be up to, that requires so many Select conditions .. it certainly sounds complex .. ;D
best wishes, :)
Graham
Maybe what you are trying to do could better be done with arrays?
Bill
Yeah...i know Graham... ;)
Huh after some thinking maybe solution is in hash table(dict).
Code will look like this:
FOR start = linenum TO smax
'wait 1
'----------------------------
GW1 = Ucase$(arg1[start])
'get string from hash table
temp$ = GW1
'check if is not empty
IF temp$ <> ""
IF LEFT$(temp$,1) <> "'" :'not comment
'set temp variable with subroutine adress
temp=VAL(DictLookup(lineHash,temp$))
IF temp <> 0
'jump indirectly to subroutine
!<fnSub>temp()
ELSE
exec_expr()
ENDIF
ENDIF
ENDIF
Next start
Oh my i think that im ready to write 'master's thesis' about hash tables ;D
however here is option on more classic way.
I remove statment DEFAULT from SELECT block1 and SELECT block2 and add
few IF/ENDIF checks. ;)
'end of block 2
ENDSELECT
'if empty line
IF abscript[start]=""
match=1
clean()
ENDIF
'if comment is first char in line
IF LEFT$(abscript[start],1)="'"
match=1
clean()
ENDIF
'if is variable
IF match=0
exec_let()
IF error=1 THEN BREAKFOR
ENDIF