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).

; Only can hold 30 vectors of 3 variables each one
; It isn`t very fast :( . But until a true array system....


; Sintaxis: 

;   call Array RESET
;   call Array INFO
;As a vector, a normal array
;   call Array ADD    Index Value1 [Value2] [Value3]
;   call Array GET    Index
;   call Array DELETE Index
;As a stack
;   call Array PUSH  Value1 [Value2] [Value3]
;   call Array 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 %ArrayIndex > 1
    {
    set %ArrayIndex %ArrayIndex - 1
    set %2 %ArrayIndex 
    gosub ArrayGET
    exit
   }
set %1 N/A
set %2 N/A
exit


sub ArrayGET
goto %2
    set %1 N/A
    set %2 N/A
 exit 
1:
   set %1 %Array1_1
   set %2 %Array1_2
 exit
2:
   set %1 %Array2_1
   set %2 %Array2_2
 exit
3:
   set %1 %Array3_1
   set %2 %Array3_2
 exit
4:
   set %1 %Array4_1
   set %2 %Array4_2
 exit
5:
   set %1 %Array5_1
   set %2 %Array5_2
 exit
6:
   set %1 %Array6_1
   set %2 %Array6_2
 exit
7:
   set %1 %Array7_1
   set %2 %Array7_2
 exit
8:
   set %1 %Array8_1
   set %2 %Array8_2
 exit
9:
   set %1 %Array9_1
   set %2 %Array9_2
 exit
10:
   set %1 %Array10_1
   set %2 %Array10_2
 exit
11:
   set %1 %Array11_1
   set %2 %Array11_2
 exit
12:
   set %1 %Array12_1
   set %2 %Array12_2
 exit
13:
   set %1 %Array13_1
   set %2 %Array13_2
 exit
14:
   set %1 %Array14_1
   set %2 %Array14_2
 exit
15:
   set %1 %Array15_1
   set %2 %Array15_2
 exit
16:
   set %1 %Array16_1
   set %2 %Array16_2
 exit
17:
   set %1 %Array17_1
   set %2 %Array17_2
 exit
18:
   set %1 %Array18_1
   set %2 %Array18_2
 exit
19:
   set %1 %Array19_1
   set %2 %Array19_2
 exit
20:
   set %1 %Array20_1
   set %2 %Array20_2
 exit
21:
   set %1 %Array21_1
   set %2 %Array21_2
 exit
22:
   set %1 %Array22_1
   set %2 %Array22_2
 exit
23:
   set %1 %Array23_1
   set %2 %Array23_2
 exit
24:
   set %1 %Array24_1
   set %2 %Array24_2
 exit
25:
   set %1 %Array25_1
   set %2 %Array25_2
 exit
26:
   set %1 %Array26_1
   set %2 %Array26_2
 exit
27:
   set %1 %Array27_1
   set %2 %Array27_2
 exit
28:
   set %1 %Array28_1
   set %2 %Array28_2
 exit
29:
   set %1 %Array29_1
   set %2 %Array29_2
 exit
30:
   set %1 %Array30_1
   set %2 %Array30_2
 exit
31:
   set %1 %Array31_1
   set %2 %Array31_2
 exit
32:
   set %1 %Array32_1
   set %2 %Array32_2
 exit
33:
   set %1 %Array33_1
   set %2 %Array33_2
 exit
34:
   set %1 %Array34_1
   set %2 %Array34_2
 exit
35:
   set %1 %Array35_1
   set %2 %Array35_2
 exit
36:
   set %1 %Array36_1
   set %2 %Array36_2
 exit
37:
   set %1 %Array37_1
   set %2 %Array37_2
 exit
38:
   set %1 %Array38_1
   set %2 %Array38_2
 exit
39:
   set %1 %Array39_1
   set %2 %Array39_2
 exit
40:
   set %1 %Array40_1
   set %2 %Array40_2
 exit


sub ArrayPush
 if %ArrayIndex <= %ArrayMaxIndex 
   {
     set %4 %3
     set %3 %2
     set %2 %ArrayIndex 
     set %ArrayIndex %ArrayIndex + 1
     gosub ArrayADD 
   }
exit


sub ArrayADD
set %2 %2 + 140
goto %2
exit
141:
   set %Array1_1 %3
   set %Array1_2 %4
 exit
142:
   set %Array2_1 %3
   set %Array2_2 %4
 exit
143:
   set %Array3_1 %3
   set %Array3_2 %4
 exit
144:
   set %Array4_1 %3
   set %Array4_2 %4
 exit
145:
   set %Array5_1 %3
   set %Array5_2 %4
 exit
146:
   set %Array6_1 %3
   set %Array6_2 %4
 exit
147:
   set %Array7_1 %3
   set %Array7_2 %4
 exit
148:
   set %Array8_1 %3
   set %Array8_2 %4
 exit
149:
   set %Array9_1 %3
   set %Array9_2 %4
 exit
150:
   set %Array10_1 %3
   set %Array10_2 %4
 exit
151:
   set %Array11_1 %3
   set %Array11_2 %4
 exit
152:
   set %Array12_1 %3
   set %Array12_2 %4
 exit
153:
   set %Array13_1 %3
   set %Array13_2 %4
 exit
154:
   set %Array14_1 %3
   set %Array14_2 %4
 exit
155:
   set %Array15_1 %3
   set %Array15_2 %4
 exit
156:
   set %Array16_1 %3
   set %Array16_2 %4
 exit
157:
   set %Array17_1 %3
   set %Array17_2 %4
 exit
158:
   set %Array18_1 %3
   set %Array18_2 %4
 exit
159:
   set %Array19_1 %3
   set %Array19_2 %4
 exit
160:
   set %Array20_1 %3
   set %Array20_2 %4
 exit
161:
   set %Array21_1 %3
   set %Array21_2 %4
 exit
162:
   set %Array22_1 %3
   set %Array22_2 %4
 exit
163:
   set %Array23_1 %3
   set %Array23_2 %4
 exit
164:
   set %Array24_1 %3
   set %Array24_2 %4
 exit
165:
   set %Array25_1 %3
   set %Array25_2 %4
 exit
166:
   set %Array26_1 %3
   set %Array26_2 %4
 exit
167:
   set %Array27_1 %3
   set %Array27_2 %4
 exit
168:
   set %Array28_1 %3
   set %Array28_2 %4
 exit
169:
   set %Array29_1 %3
   set %Array29_2 %4
 exit
170:
   set %Array30_1 %3
   set %Array30_2 %4
 exit
171:
   set %Array31_1 %3
   set %Array31_2 %4
 exit
172:
   set %Array32_1 %3
   set %Array32_2 %4
 exit
173:
   set %Array33_1 %3
   set %Array33_2 %4
 exit
174:
   set %Array34_1 %3
   set %Array34_2 %4
 exit
175:
   set %Array35_1 %3
   set %Array35_2 %4
 exit
176:
   set %Array36_1 %3
   set %Array36_2 %4
 exit
177:
   set %Array37_1 %3
   set %Array37_2 %4
 exit
178:
   set %Array38_1 %3
   set %Array38_2 %4
 exit
179:
   set %Array39_1 %3
   set %Array39_2 %4
 exit
180:
   set %Array40_1 %3
   set %Array40_2 %4
 exit


sub ArrayRESET
set %ArrayIndex 1
set %ArrayMaxIndex 40
 set %Array1_1  N/A
 set %Array1_2  N/A

 set %Array2_1  N/A
 set %Array2_2  N/A

 set %Array3_1  N/A
 set %Array3_2  N/A

 set %Array4_1  N/A
 set %Array4_2  N/A

 set %Array5_1  N/A
 set %Array5_2  N/A

 set %Array6_1  N/A
 set %Array6_2  N/A

 set %Array7_1  N/A
 set %Array7_2  N/A

 set %Array8_1  N/A
 set %Array8_2  N/A

 set %Array9_1  N/A
 set %Array9_2  N/A

 set %Array10_1  N/A
 set %Array10_2  N/A

 set %Array11_1  N/A
 set %Array11_2  N/A

 set %Array12_1  N/A
 set %Array12_2  N/A

 set %Array13_1  N/A
 set %Array13_2  N/A

 set %Array14_1  N/A
 set %Array14_2  N/A

 set %Array15_1  N/A
 set %Array15_2  N/A

 set %Array16_1  N/A
 set %Array16_2  N/A

 set %Array17_1  N/A
 set %Array17_2  N/A

 set %Array18_1  N/A
 set %Array18_2  N/A

 set %Array19_1  N/A
 set %Array19_2  N/A

 set %Array20_1  N/A
 set %Array20_2  N/A

 set %Array21_1  N/A
 set %Array21_2  N/A

 set %Array22_1  N/A
 set %Array22_2  N/A

 set %Array23_1  N/A
 set %Array23_2  N/A

 set %Array24_1  N/A
 set %Array24_2  N/A

 set %Array25_1  N/A
 set %Array25_2  N/A

 set %Array26_1  N/A
 set %Array26_2  N/A

 set %Array27_1  N/A
 set %Array27_2  N/A

 set %Array28_1  N/A
 set %Array28_2  N/A

 set %Array29_1  N/A
 set %Array29_2  N/A

 set %Array30_1  N/A
 set %Array30_2  N/A

 set %Array31_1  N/A
 set %Array31_2  N/A

 set %Array32_1  N/A
 set %Array32_2  N/A

 set %Array33_1  N/A
 set %Array33_2  N/A

 set %Array34_1  N/A
 set %Array34_2  N/A

 set %Array35_1  N/A
 set %Array35_2  N/A

 set %Array36_1  N/A
 set %Array36_2  N/A

 set %Array37_1  N/A
 set %Array37_2  N/A

 set %Array38_1  N/A
 set %Array38_2  N/A

 set %Array39_1  N/A
 set %Array39_2  N/A

 set %Array40_1  N/A
 set %Array40_2  N/A

exit


sub ArrayINFO
    set %1 %ArrayIndex - 1
    set %2 %ArrayMaxIndex 
exit

sub ArrayDEL
set %3 N/A
set %4 N/A
 gosub ArrayADD
 exit


