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


sub ArrayGET
goto %2
    set %1 N/A
    set %2 N/A
    set %3 N/A
    set %4 N/A
    set %5 N/A
 exit 
1:
   set %1 %MPsMochila1_1
   set %2 %MPsMochila1_2
   set %3 %MPsMochila1_3
   set %4 %MPsMochila1_4
   set %5 %MPsMochila1_5
 exit
2:
   set %1 %MPsMochila2_1
   set %2 %MPsMochila2_2
   set %3 %MPsMochila2_3
   set %4 %MPsMochila2_4
   set %5 %MPsMochila2_5
 exit
3:
   set %1 %MPsMochila3_1
   set %2 %MPsMochila3_2
   set %3 %MPsMochila3_3
   set %4 %MPsMochila3_4
   set %5 %MPsMochila3_5
 exit
4:
   set %1 %MPsMochila4_1
   set %2 %MPsMochila4_2
   set %3 %MPsMochila4_3
   set %4 %MPsMochila4_4
   set %5 %MPsMochila4_5
 exit
5:
   set %1 %MPsMochila5_1
   set %2 %MPsMochila5_2
   set %3 %MPsMochila5_3
   set %4 %MPsMochila5_4
   set %5 %MPsMochila5_5
 exit


sub ArrayPush
 if %MPsMochilaIndex <= %MPsMochilaMaxIndex 
   {
     set %7 %6
     set %6 %5
     set %5 %4
     set %4 %3
     set %3 %2
     set %2 %MPsMochilaIndex 
     set %MPsMochilaIndex %MPsMochilaIndex + 1
     gosub ArrayADD 
   }
exit


sub ArrayADD
set %2 %2 + 105
goto %2
exit
106:
   set %MPsMochila1_1 %3
   set %MPsMochila1_2 %4
   set %MPsMochila1_3 %5
   set %MPsMochila1_4 %6
   set %MPsMochila1_5 %7
 exit
107:
   set %MPsMochila2_1 %3
   set %MPsMochila2_2 %4
   set %MPsMochila2_3 %5
   set %MPsMochila2_4 %6
   set %MPsMochila2_5 %7
 exit
108:
   set %MPsMochila3_1 %3
   set %MPsMochila3_2 %4
   set %MPsMochila3_3 %5
   set %MPsMochila3_4 %6
   set %MPsMochila3_5 %7
 exit
109:
   set %MPsMochila4_1 %3
   set %MPsMochila4_2 %4
   set %MPsMochila4_3 %5
   set %MPsMochila4_4 %6
   set %MPsMochila4_5 %7
 exit
110:
   set %MPsMochila5_1 %3
   set %MPsMochila5_2 %4
   set %MPsMochila5_3 %5
   set %MPsMochila5_4 %6
   set %MPsMochila5_5 %7
 exit


sub ArrayRESET
set %MPsMochilaIndex 1
set %MPsMochilaMaxIndex 5
 set %MPsMochila1_1  N/A
 set %MPsMochila1_2  N/A
 set %MPsMochila1_3  N/A
 set %MPsMochila1_4  N/A
 set %MPsMochila1_5  N/A

 set %MPsMochila2_1  N/A
 set %MPsMochila2_2  N/A
 set %MPsMochila2_3  N/A
 set %MPsMochila2_4  N/A
 set %MPsMochila2_5  N/A

 set %MPsMochila3_1  N/A
 set %MPsMochila3_2  N/A
 set %MPsMochila3_3  N/A
 set %MPsMochila3_4  N/A
 set %MPsMochila3_5  N/A

 set %MPsMochila4_1  N/A
 set %MPsMochila4_2  N/A
 set %MPsMochila4_3  N/A
 set %MPsMochila4_4  N/A
 set %MPsMochila4_5  N/A

 set %MPsMochila5_1  N/A
 set %MPsMochila5_2  N/A
 set %MPsMochila5_3  N/A
 set %MPsMochila5_4  N/A
 set %MPsMochila5_5  N/A

exit


sub ArrayINFO
    set %1 %MPsMochilaIndex - 1
    set %2 %MPsMochilaMaxIndex 
exit

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


