Page 1 of 1

Posted: Fri Nov 22, 2002 3:26 pm
by BackupUser
Restored from previous forum. Originally posted by talun.

Dear all,
I need a little help. I'm not able to use arrays in procedure arguments.
Can anyone help me?
Thankyou
Sergio

Posted: Fri Nov 22, 2002 4:58 pm
by BackupUser
Restored from previous forum. Originally posted by Pupil.

In Purebasic all arrays that's declared using 'Dim' are global. An array can't be passed as an argument to a procedure, but you can always access them from inside a procedure because, as i said earlier, they are global.

Just keep in mind that PureBasic is a one-pass compiler and as such have a few restrictions concerning in which order (line-wise) you Dim your vars and insert your Procedures.

Posted: Fri Nov 22, 2002 8:02 pm
by BackupUser
Restored from previous forum. Originally posted by Danilo.

You pass arrays as a pointer by using ArrayName().

Code: Select all

Dim Array1.l(10)
  For a = 1 To 10 : Array1(a) = a               : Next a

Dim Array2.l(20)
  For a = 1 To 20 : Array2(a) = Random($FFFFFF) : Next a

Dim Array3.s(30)
  For a = 1 To 30 : Array3(a) = "Entry "+Str(a) : Next a

Structure LONG
  Long.l
EndStructure

Procedure ShowNumberArray(*Array.LONG,ArraySize)
   If ArraySize = 0: ProcedureReturn : EndIf
   For a = 1 To ArraySize
       *Array + 4
       A$ + Hex(*Array\Long)+Chr(13)
   Next a
   MessageRequester("Array numbers",A$,0)
EndProcedure

Procedure ShowStringArray(*Array.LONG,ArraySize)
   If ArraySize = 0: ProcedureReturn : EndIf
   For a = 1 To ArraySize
       *Array + 4
       A$ + PeekS(*Array\Long) + Chr(13)
   Next a
   MessageRequester("Array strings",A$,0)
EndProcedure


ShowNumberArray(Array1(),10)  ; pass Array1
ShowNumberArray(Array2(),20)  ; pass Array2

ShowStringArray(Array3(),20)  ; pass Array3
cya,
...Danilo

(registered PureBasic user)

Posted: Fri Nov 22, 2002 8:03 pm
by BackupUser
Restored from previous forum. Originally posted by plouf.

furthermore Shared array ; without the ()
supposed to gives access inside procedures
(why anyway ?)

Christos

Posted: Fri Nov 22, 2002 8:55 pm
by BackupUser
Restored from previous forum. Originally posted by tinman.

Some changes that perhaps make it a bit nicer to work with :)
Originally posted by Danilo

Code: Select all

Dim Array1.l(10)
  For a = 1 To 10 : Array1(a) = a               : Next a

Dim Array2.l(20)
  For a = 1 To 20 : Array2(a) = Random($FFFFFF) : Next a

Dim Array3.s(30)
  For a = 1 To 30 : Array3(a) = "Entry "+Str(a) : Next a

Structure LONG
  Long.l[0]
EndStructure

Procedure ShowNumberArray(*Array.LONG,ArraySize)
   If ArraySize = 0: ProcedureReturn : EndIf
   For a = 1 To ArraySize
       A$ + Hex(*Array\Long[i])+Chr(13)
   Next a
   MessageRequester("Array numbers",A$,0)
EndProcedure

Procedure ShowStringArray(*Array.LONG,ArraySize)
   If ArraySize = 0: ProcedureReturn : EndIf
   For a = 1 To ArraySize
       A$ + PeekS(*Array\Long[i]) + Chr(13)
   Next a
   MessageRequester("Array strings",A$,0)
EndProcedure


ShowNumberArray(Array1(),10)  ; pass Array1
ShowNumberArray(Array2(),20)  ; pass Array2

ShowStringArray(Array3(),20)  ; pass Array3


--
It's not minimalist - I'm increasing efficiency by reducing input effort.
(Win98first ed. + SP1, PB3.40)

Posted: Fri Nov 22, 2002 9:53 pm
by BackupUser
Restored from previous forum. Originally posted by Franco.

@Tinman
you have to change:
A$ + Hex(*Array\Long)+Chr(13)
to:
A$ + Hex(*Array\Long[a])+Chr(13)
and:
A$ + PeekS(*Array\Long) + Chr(13)
to:
A$ + PeekS(*Array\Long[a]) + Chr(13)

otherwise it doesn't work

Have a nice day...

Franco

Posted: Fri Nov 22, 2002 11:03 pm
by BackupUser
Restored from previous forum. Originally posted by tinman.
Originally posted by Franco
you have to change:
Doh - I went into autopilot there I think :)


--
It's not minimalist - I'm increasing efficiency by reducing input effort.
(Win98first ed. + SP1, PB3.40)

Posted: Sat Nov 23, 2002 6:24 pm
by BackupUser
Restored from previous forum. Originally posted by talun.

Many thanks to all for the several suggestions. The global/shared array scope is handy for procedures located in the main program body, but the Danilo's trick is perfect for my needs of independent pieces of code.
Thanks!
Sergio