goto arrays
; Cutrefacto ARRAY SYSTEM
; Can work as a vector and as a stack. Only can hold 30 vectors of 3 variables

; Sintaxis: 

;Coomon
;   call Array RESET
;As a vector, a normal array
;   call Array ADD    Index Value1 [Value2] [Value3]
;   call Array GET    Index
;   call Array DELETE
;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     --> Returns value at Index position to %1 [%2] [%3]
;              DELETE--> Erase value at Index position 
;              PUSH   --> Insert a value onto the stack
;              POP     --> Return the last value inserted to %1 [%2] [%3]
;   Index: Is a position in the array. A value between [1-10] 
;   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
exit


sub ArrayPush
 if %InternalIndex <= %MaxIndex
   {
     set %5 %4
     set %4 %3
     set %3 %2
     set %2 %InternalIndex 
     gosub ArrayADD 
     set %InternalIndex %InternalIndex + 1
   }
return

sub ArrayPop
 if %internalIndex > 1
    {
    set %InternalIndex %InternalIndex - 1
    set %2 %InternalIndex 
    gosub ArrayGET
    ; gosub ArrayDEL
    return
   }
 set %1 N/A
 set %2 N/A
 set %3 N/A
return

sub ArrayRESET
 set %InternalIndex 1
 set %MaxIndex 30

 set %Array11  N/A
 set %Array12  N/A
 set %Array13  N/A
 set %Array14  N/A  
 set %Array15  N/A 
 set %Array16  N/A
 set %Array17  N/A
 set %Array18  N/A
 set %Array19  N/A
 set %Array110 N/A
 set %Array111 N/A
 set %Array112 N/A
 set %Array113 N/A
 set %Array114 N/A
 set %Array115 N/A
 set %Array116 N/A
 set %Array117 N/A
 set %Array118 N/A
 set %Array119 N/A
 set %Array120 N/A
 set %Array121 N/A
 set %Array122 N/A
 set %Array123 N/A
 set %Array124 N/A
 set %Array125 N/A
 set %Array126 N/A
 set %Array127 N/A
 set %Array128 N/A
 set %Array129 N/A
 set %Array130 N/A

 set %Array21  N/A
 set %Array22  N/A
 set %Array23  N/A
 set %Array24  N/A  
 set %Array25  N/A 
 set %Array26  N/A
 set %Array27  N/A
 set %Array28  N/A
 set %Array29  N/A
 set %Array210 N/A
 set %Array211 N/A
 set %Array212 N/A
 set %Array213 N/A
 set %Array214 N/A
 set %Array215 N/A
 set %Array216 N/A
 set %Array217 N/A
 set %Array218 N/A
 set %Array219 N/A
 set %Array220 N/A
 set %Array221 N/A
 set %Array222 N/A
 set %Array223 N/A
 set %Array224 N/A
 set %Array225 N/A
 set %Array226 N/A
 set %Array227 N/A
 set %Array228 N/A
 set %Array229 N/A
 set %Array230 N/A

 set %Array31  N/A
 set %Array32  N/A
 set %Array33  N/A
 set %Array34  N/A  
 set %Array35  N/A 
 set %Array36  N/A
 set %Array37  N/A
 set %Array38  N/A
 set %Array39  N/A
 set %Array310 N/A
 set %Array311 N/A
 set %Array312 N/A
 set %Array313 N/A
 set %Array314 N/A
 set %Array315 N/A
 set %Array316 N/A
 set %Array317 N/A
 set %Array318 N/A
 set %Array319 N/A
 set %Array320 N/A
 set %Array321 N/A
 set %Array322 N/A
 set %Array323 N/A
 set %Array324 N/A
 set %Array325 N/A
 set %Array326 N/A
 set %Array327 N/A
 set %Array328 N/A
 set %Array329 N/A
 set %Array330 N/A


Return


sub ArrayDEL
 set %3 N/A
 gosub ArrayADD
return

sub ArrayGET
goto %2
    set %1 N/A
    set %2 N/A
    set %3 N/A


1:
    set %1 %Array11
    set %2 %Array21
    set %3 %Array31
  return
2:
    set %1 %Array12
    set %2 %Array22
    set %3 %Array32
  return
3:
    set %1 %Array13
    set %2 %Array23
    set %3 %Array33
  return
4:
    set %1 %Array14
    set %2 %Array24
    set %3 %Array34
  return
5:
    set %1 %Array15
    set %2 %Array25
    set %3 %Array35
  return
6:
    set %1 %Array16
    set %2 %Array26
    set %3 %Array36
  return
7:
    set %1 %Array17
    set %2 %Array27
    set %3 %Array37
  return
8:
    set %1 %Array18
    set %2 %Array28
    set %3 %Array38
  return
9:
    set %1 %Array19
    set %2 %Array29
    set %3 %Array39
  return
10:
    set %1 %Array110
    set %2 %Array210
    set %3 %Array310
  return
11:
    set %1 %Array111
    set %2 %Array211
    set %3 %Array311
  return
12:
    set %1 %Array112
    set %2 %Array212
    set %3 %Array312
  return
13:
    set %1 %Array113
    set %2 %Array213
    set %3 %Array313
  return
14:
    set %1 %Array114
    set %2 %Array214
    set %3 %Array314
  return
15:
    set %1 %Array115
    set %2 %Array215
    set %3 %Array315
  return
16:
    set %1 %Array116
    set %2 %Array216
    set %3 %Array316
  return
17:
    set %1 %Array117
    set %2 %Array217
    set %3 %Array317
  return
18:
    set %1 %Array118
    set %2 %Array218
    set %3 %Array318
  return
19:
    set %1 %Array119
    set %2 %Array219
    set %3 %Array319
  return
20:
    set %1 %Array120
    set %2 %Array220
    set %3 %Array320
  return
21:
    set %1 %Array121
    set %2 %Array221
    set %3 %Array321
  return
22:
    set %1 %Array122
    set %2 %Array222
    set %3 %Array322
  return
23:
    set %1 %Array123
    set %2 %Array223
    set %3 %Array323
  return
24:
    set %1 %Array124
    set %2 %Array224
    set %3 %Array324
  return
25:
    set %1 %Array125
    set %2 %Array225
    set %3 %Array325
  return
26:
    set %1 %Array126
    set %2 %Array226
    set %3 %Array326
  return
27:
    set %1 %Array127
    set %2 %Array227
    set %3 %Array327
  return
28:
    set %1 %Array128
    set %2 %Array228
    set %3 %Array328
  return
29:
    set %1 %Array129
    set %2 %Array229
    set %3 %Array329
  return

30:
    set %1 %Array130
    set %2 %Array230
    set %3 %Array330
  return



sub ArrayADD
set %2 %2 + 100
goto %2
return

101:
    set %Array11 %3
    set %Array21 %4
    set %Array31 %5
  return
102:
    set %Array12 %3
    set %Array22 %4
    set %Array32 %5
  return
103:
    set %Array13 %3
    set %Array23 %4
    set %Array33 %5
  return
104:
    set %Array14 %3
    set %Array24 %4
    set %Array34 %5
  return
105:
    set %Array15 %3
    set %Array25 %4
    set %Array35 %5
  return
106:
    set %Array16 %3
    set %Array26 %4
    set %Array36 %5
  return
107:
    set %Array17 %3
    set %Array27 %4
    set %Array37 %5
  return
108:
    set %Array18 %3
    set %Array28 %4
    set %Array38 %5
  return
109:
    set %Array19 %3
    set %Array29 %4
    set %Array39 %5
  return
110:
    set %Array110 %3
    set %Array210 %4
    set %Array310 %5
  return
111:
    set %Array111 %3
    set %Array211 %4
    set %Array311 %5
  return
112:
    set %Array112 %3
    set %Array212 %4
    set %Array312 %5
  return
113:
    set %Array113 %3
    set %Array213 %4
    set %Array313 %5
  return
114:
    set %Array114 %3
    set %Array214 %4
    set %Array314 %5
  return
115:
    set %Array115 %3
    set %Array215 %4
    set %Array315 %5
  return
116:
    set %Array116 %3
    set %Array216 %4
    set %Array316 %5
  return
117:
    set %Array117 %3
    set %Array217 %4
    set %Array317 %5
  return
118:
    set %Array118 %3
    set %Array218 %4
    set %Array318 %5
  return
119:
    set %Array119 %3
    set %Array219 %4
    set %Array319 %5
  return
120:
    set %Array120 %3
    set %Array220 %4
    set %Array320 %5
  return
121:
    set %Array121 %3
    set %Array221 %4
    set %Array321 %5
  return
122:
    set %Array122 %3
    set %Array222 %4
    set %Array322 %5
  return
123:
    set %Array123 %3
    set %Array223 %4
    set %Array323 %5
  return
124:
    set %Array124 %3
    set %Array224 %4
    set %Array324 %5
  return
125:
    set %Array125 %3
    set %Array225 %4
    set %Array325 %5
  return
126:
    set %Array126 %3
    set %Array226 %4
    set %Array326 %5
  return
127:
    set %Array127 %3
    set %Array227 %4
    set %Array327 %5
  return
128:
    set %Array128 %3
    set %Array228 %4
    set %Array328 %5
  return
129:
    set %Array129 %3
    set %Array229 %4
    set %Array329 %5
  return
130:
    set %Array130 %3
    set %Array230 %4
    set %Array330 %5
  return


