Page 1 of 1

How to Pass a Function/Procedure to a Function/Procedure

Posted: Wed Jul 16, 2003 9:18 am
by ppjm99
This is a rework of other stuff I have very gratefully found here in the forums but perhaps offers a different perspective, this is a key feature for reusability of code in my mind. I hope it helps someone. The code:

Code: Select all

Global sReturn$
Global nReturn

Procedure Sum(ArgList$)

  nReturn = 0

  Arg = 1
  Arg$ = StringField(Arglist$,Arg,",")
  While Arg$ <> ""

    nReturn = nReturn + Val(Arg$) 

    Arg + 1
    Arg$ = StringField(Arglist$,Arg,",")
  
  Wend
  
EndProcedure

Procedure Average(ArgList$)

  nReturn = 0

  Arg = 1
  Arg$ = StringField(Arglist$,Arg,",")
  While Arg$ <> ""

    nReturn = nReturn + Val(Arg$) 

    Arg + 1
    Arg$ = StringField(Arglist$,Arg,",")
  
  Wend
  
  nReturn / (Arg - 1)
  
EndProcedure

Procedure Concatenate(ArgList$)

  sReturn$ = ""

  Arg = 1
  Arg$ = StringField(Arglist$,Arg,",")
  While Arg$ <> ""

    sReturn$ + Arg$

    Arg + 1
    Arg$ = StringField(Arglist$,Arg,",")
  
  Wend
  
EndProcedure

Procedure ProcessArgList( ProcAddress, ArgList$ )

  *ProcPointer = ProcAddress
  CallFunctionFast(*ProcPointer, ArgList$)
  
EndProcedure

ProcessArgList( @Sum(), "1,2,3,4" )
Debug nReturn

ProcessArgList( @Average(), "4,6" )
Debug nReturn

ProcessArgList( @Concatenate(), "J,O,H,N, ,D,O,E" )
Debug sReturn$
Another example of the usefulness of this type of code would be with a general purpose directory walker. Something Like:

Code: Select all

DirWalk(Root$,@FolderChangeFunc,@FileChangeFunc,@ProgressFunc)
Be kind I am just learning PB and I love it. ;)

How do I retain my indentation when posting code samples?

Posted: Wed Jul 16, 2003 5:37 pm
by ppjm99
Does anybody know how to retain indentation when posting code samples?

Re: How do I retain my indentation when posting code samples

Posted: Wed Jul 16, 2003 5:50 pm
by traumatic
simply use the code-tags ()