goto arrays
; Cutrefacto ARRAY SYSTEM
; Can work as a vector and as a stack (even a mix,
; i.e. Push datas and use Get`s instead of Pop`s to keep them).

; It isn`t very fast :( . But until a true array system....


; Sintaxis: 

;   call Mapas RESET
;   call Mapas INFO
;As a vector, a normal array
;   call Mapas ADD    Index Value1 [Value2] [Value3]..
;   call Mapas GET    Index
;   call Mapas DELETE Index
;As a stack
;   call Mapas PUSH  Value1 [Value2] [Value3]...
;   call Mapas POP


;  Parameters
;   Action: 
;          RESET --> Delete all values. Reinit. Must be done at startup.
;          ADD   --> Adds a new value at Index position
;          GET   --> exits value at Index position to %1 [%2] [%3]
;          DELETE--> Erase value at Index position 
;          PUSH  --> Insert a value onto the stack
;          POP   --> exit the last value inserted to %1 [%2] [%3]
;          INFO  --> %1 : Number of vectors stored
;                    %2 : Number of vectors the array can store at once
;   Index: Is a position in the array. A value between [1-30] 
;   Value: New data for the array. Needed in ADD & PUSH action

arrays:
IF %1 = ADD
  gosub ArrayADD
IF %1 = PUSH
  gosub ArrayPUSH
IF %1 = POP
  gosub ArrayPOP
IF %1 = DELETE
  gosub ArrayDEL
IF %1 = GET
  gosub ArrayGET
IF %1 = RESET
  gosub ArrayRESET
IF %1 = INFO
  gosub ArrayINFO
exit


sub ArrayPop
 if %MapasIndex > 1
    {
    set %MapasIndex %MapasIndex - 1
    set %2 %MapasIndex 
    gosub ArrayGET
    exit
   }
set %1 N/A
exit


sub ArrayGET
goto %2
    set %1 N/A
 exit 
1:
   set %1 %Mapas1_1
 exit
2:
   set %1 %Mapas2_1
 exit
3:
   set %1 %Mapas3_1
 exit
4:
   set %1 %Mapas4_1
 exit
5:
   set %1 %Mapas5_1
 exit
6:
   set %1 %Mapas6_1
 exit
7:
   set %1 %Mapas7_1
 exit
8:
   set %1 %Mapas8_1
 exit
9:
   set %1 %Mapas9_1
 exit
10:
   set %1 %Mapas10_1
 exit
11:
   set %1 %Mapas11_1
 exit
12:
   set %1 %Mapas12_1
 exit
13:
   set %1 %Mapas13_1
 exit
14:
   set %1 %Mapas14_1
 exit
15:
   set %1 %Mapas15_1
 exit
16:
   set %1 %Mapas16_1
 exit
17:
   set %1 %Mapas17_1
 exit
18:
   set %1 %Mapas18_1
 exit
19:
   set %1 %Mapas19_1
 exit
20:
   set %1 %Mapas20_1
 exit


sub ArrayPush
 if %MapasIndex <= %MapasMaxIndex 
   {
     set %3 %2
     set %2 %MapasIndex 
     set %MapasIndex %MapasIndex + 1
     gosub ArrayADD 
   }
exit


sub ArrayADD
set %2 %2 + 120
goto %2
exit
121:
   set %Mapas1_1 %3
 exit
122:
   set %Mapas2_1 %3
 exit
123:
   set %Mapas3_1 %3
 exit
124:
   set %Mapas4_1 %3
 exit
125:
   set %Mapas5_1 %3
 exit
126:
   set %Mapas6_1 %3
 exit
127:
   set %Mapas7_1 %3
 exit
128:
   set %Mapas8_1 %3
 exit
129:
   set %Mapas9_1 %3
 exit
130:
   set %Mapas10_1 %3
 exit
131:
   set %Mapas11_1 %3
 exit
132:
   set %Mapas12_1 %3
 exit
133:
   set %Mapas13_1 %3
 exit
134:
   set %Mapas14_1 %3
 exit
135:
   set %Mapas15_1 %3
 exit
136:
   set %Mapas16_1 %3
 exit
137:
   set %Mapas17_1 %3
 exit
138:
   set %Mapas18_1 %3
 exit
139:
   set %Mapas19_1 %3
 exit
140:
   set %Mapas20_1 %3
 exit


sub ArrayRESET
set %MapasIndex 1
set %MapasMaxIndex 20
 set %Mapas1_1  N/A

 set %Mapas2_1  N/A

 set %Mapas3_1  N/A

 set %Mapas4_1  N/A

 set %Mapas5_1  N/A

 set %Mapas6_1  N/A

 set %Mapas7_1  N/A

 set %Mapas8_1  N/A

 set %Mapas9_1  N/A

 set %Mapas10_1  N/A

 set %Mapas11_1  N/A

 set %Mapas12_1  N/A

 set %Mapas13_1  N/A

 set %Mapas14_1  N/A

 set %Mapas15_1  N/A

 set %Mapas16_1  N/A

 set %Mapas17_1  N/A

 set %Mapas18_1  N/A

 set %Mapas19_1  N/A

 set %Mapas20_1  N/A

exit


sub ArrayINFO
    set %1 %MapasIndex - 1
    set %2 %MapasMaxIndex 
exit

sub ArrayDEL
set %3 N/A
 gosub ArrayADD
 exit


