Page 1 of 1

Dim And Linked List Min-Max Values

Posted: Mon Sep 03, 2012 8:54 pm
by Guimauve
Hello everyone,

Ok the following codes don't worth a Nobel Price. It's just a set of command to search the Minimum and the Maximum values of a single dimension Array or a Linked List of any numerical standard PureBasic types.
If this can be useful for someone.

Edit : Correction suggested by Stargate added

Best regards.
Guimauve

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Array Min-Max Values
; File Name : Array Min-Max Values.pb
; File version: 1.0.0
; Programming : OK
; Programmed by : Guimauve
; Date : 03-03-2012
; Last Update : 03-03-2012
; PureBasic code : 5.00
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure.b ArrayMinByteValue(Array Values.b(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinByteValue.b = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinByteValue
      MinByteValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinByteValue
EndProcedure

Procedure.b ArrayMaxByteValue(Array Values.b(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxByteValue.b = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxByteValue
      MaxByteValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxByteValue
EndProcedure

Procedure.a ArrayMinAsciiValue(Array Values.a(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinAsciiValue.a = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinAsciiValue
      MinAsciiValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinAsciiValue
EndProcedure

Procedure.a ArrayMaxAsciiValue(Array Values.a(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxAsciiValue.a = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxAsciiValue
      MaxAsciiValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxAsciiValue
EndProcedure

Procedure.c ArrayMinCharacterValue(Array Values.c(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinCharacterValue.c = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinCharacterValue
      MinCharacterValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinCharacterValue
EndProcedure

Procedure.c ArrayMaxCharacterValue(Array Values.c(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxCharacterValue.c = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxCharacterValue
      MaxCharacterValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxCharacterValue
EndProcedure

Procedure.u ArrayMinUnicodeValue(Array Values.u(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinUnicodeValue.u = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinUnicodeValue
      MinUnicodeValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinUnicodeValue
EndProcedure

Procedure.u ArrayMaxUnicodeValue(Array Values.u(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxUnicodeValue.u = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxUnicodeValue
      MaxUnicodeValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxUnicodeValue
EndProcedure

Procedure.w ArrayMinWordValue(Array Values.w(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinWordValue.w = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinWordValue
      MinWordValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinWordValue
EndProcedure

Procedure.w ArrayMaxWordValue(Array Values.w(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxWordValue.w = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxWordValue
      MaxWordValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxWordValue
EndProcedure

Procedure.l ArrayMinLongValue(Array Values.l(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinLongValue.l = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinLongValue
      MinLongValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinLongValue
EndProcedure

Procedure.l ArrayMaxLongValue(Array Values.l(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxLongValue.l = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxLongValue
      MaxLongValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxLongValue
EndProcedure

Procedure.i ArrayMinIntegerValue(Array Values.i(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinIntegerValue.i = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinIntegerValue
      MinIntegerValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinIntegerValue
EndProcedure

Procedure.i ArrayMaxIntegerValue(Array Values.i(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxIntegerValue.i = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxIntegerValue
      MaxIntegerValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxIntegerValue
EndProcedure

Procedure.q ArrayMinQuadValue(Array Values.q(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinQuadValue.q = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinQuadValue
      MinQuadValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinQuadValue
EndProcedure

Procedure.q ArrayMaxQuadValue(Array Values.q(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxQuadValue.q = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxQuadValue
      MaxQuadValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxQuadValue
EndProcedure

Procedure.f ArrayMinFloatValue(Array Values.f(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinFloatValue.f = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinFloatValue
      MinFloatValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinFloatValue
EndProcedure

Procedure.f ArrayMaxFloatValue(Array Values.f(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxFloatValue.f = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxFloatValue
      MaxFloatValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxFloatValue
EndProcedure

Procedure.d ArrayMinDoubleValue(Array Values.d(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MinDoubleValue.d = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) < MinDoubleValue
      MinDoubleValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MinDoubleValue
EndProcedure

Procedure.d ArrayMaxDoubleValue(Array Values.d(1))
  
  Protected ArraySizeMax.l = ArraySize(Values(), 1)
  Protected Index.l
  Protected MaxDoubleValue.d = Values(0)
  
  For Index = 1 To ArraySizeMax
    If Values(Index) > MaxDoubleValue
      MaxDoubleValue = Values(Index)
    EndIf
  Next
  
  ProcedureReturn MaxDoubleValue
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Dim LongValues.l(10)
Dim DoubleValues.d(10)

For Index = 0 To 10
 
  LongValues(Index) = Random(999)
  DoubleValues(Index) = Random(15) * #PI
  
  Debug RSet(Str(LongValues(Index)), 3, "0") + " | " + RSet(StrD(DoubleValues(Index), 4), 7, "0")
  
Next

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Max and Min Values

Debug "Long (Min | Max) = " + RSet(Str(ArrayMinLongValue(LongValues())), 3, "0") + " | " + RSet(Str(ArrayMaxLongValue(LongValues())), 3, "0")
Debug "Double (Min | Max) = " + RSet(StrD(ArrayMinDoubleValue(DoubleValues()), 4), 7, "0") + " | " + RSet(StrD(ArrayMaxDoubleValue(DoubleValues()), 4), 7, "0")

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : List Min-Max Values
; File Name : List Min-Max Values.pb
; File version: 1.0.0
; Programming : OK
; Programmed by : Guimauve
; Date : 03-03-2012
; Last Update : 03-03-2012
; PureBasic code : 5.00
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure.b ListMinByteValue(List Values.b())
  
  If FirstElement(Values())
    Protected MinByteValue.b = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinByteValue
      MinByteValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinByteValue
EndProcedure

Procedure.b ListMaxByteValue(List Values.b())
  
  If FirstElement(Values())
    Protected MaxByteValue.b = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxByteValue
      MaxByteValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxByteValue
EndProcedure

Procedure.a ListMinAsciiValue(List Values.a())
  
  If FirstElement(Values())
    Protected MinAsciiValue.a = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinAsciiValue
      MinAsciiValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinAsciiValue
EndProcedure

Procedure.a ListMaxAsciiValue(List Values.a())
  
  If FirstElement(Values())
    Protected MaxAsciiValue.a = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxAsciiValue
      MaxAsciiValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxAsciiValue
EndProcedure

Procedure.c ListMinCharacterValue(List Values.c())
  
  If FirstElement(Values())
    Protected MinCharacterValue.c = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinCharacterValue
      MinCharacterValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinCharacterValue
EndProcedure

Procedure.c ListMaxCharacterValue(List Values.c())
  
  If FirstElement(Values())
    Protected MaxCharacterValue.c = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxCharacterValue
      MaxCharacterValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxCharacterValue
EndProcedure

Procedure.u ListMinUnicodeValue(List Values.u())
  
  If FirstElement(Values())
    Protected MinUnicodeValue.u = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinUnicodeValue
      MinUnicodeValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinUnicodeValue
EndProcedure

Procedure.u ListMaxUnicodeValue(List Values.u())
  
  If FirstElement(Values())
    Protected MaxUnicodeValue.u = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxUnicodeValue
      MaxUnicodeValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxUnicodeValue
EndProcedure

Procedure.w ListMinWordValue(List Values.w())
  
  If FirstElement(Values())
    Protected MinWordValue.w = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinWordValue
      MinWordValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinWordValue
EndProcedure

Procedure.w ListMaxWordValue(List Values.w())
  
  If FirstElement(Values())
    Protected MaxWordValue.w = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxWordValue
      MaxWordValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxWordValue
EndProcedure

Procedure.l ListMinLongValue(List Values.l())
  
  If FirstElement(Values())
    Protected MinLongValue.l = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinLongValue
      MinLongValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinLongValue
EndProcedure

Procedure.l ListMaxLongValue(List Values.l())
  
  If FirstElement(Values())
    Protected MaxLongValue.l = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxLongValue
      MaxLongValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxLongValue
EndProcedure

Procedure.i ListMinIntegerValue(List Values.i())
  
  If FirstElement(Values())
    Protected MinIntegerValue.i = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinIntegerValue
      MinIntegerValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinIntegerValue
EndProcedure

Procedure.i ListMaxIntegerValue(List Values.i())
  
  If FirstElement(Values())
    Protected MaxIntegerValue.i = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxIntegerValue
      MaxIntegerValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxIntegerValue
EndProcedure

Procedure.q ListMinQuadValue(List Values.q())
  
  If FirstElement(Values())
    Protected MinQuadValue.q = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinQuadValue
      MinQuadValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinQuadValue
EndProcedure

Procedure.q ListMaxQuadValue(List Values.q())
  
  If FirstElement(Values())
    Protected MaxQuadValue.q = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxQuadValue
      MaxQuadValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxQuadValue
EndProcedure

Procedure.f ListMinFloatValue(List Values.f())
  
  If FirstElement(Values())
    Protected MinFloatValue.f = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinFloatValue
      MinFloatValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinFloatValue
EndProcedure

Procedure.f ListMaxFloatValue(List Values.f())
  
  If FirstElement(Values())
    Protected MaxFloatValue.f = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxFloatValue
      MaxFloatValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxFloatValue
EndProcedure

Procedure.d ListMinDoubleValue(List Values.d())
  
  If FirstElement(Values())
    Protected MinDoubleValue.d = Values()
  EndIf
  
  ForEach Values()
    If Values() < MinDoubleValue
      MinDoubleValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinDoubleValue
EndProcedure

Procedure.d ListMaxDoubleValue(List Values.d())
  
  If FirstElement(Values())
    Protected MaxDoubleValue.d = Values()
  EndIf
  
  ForEach Values()
    If Values() > MaxDoubleValue
      MaxDoubleValue = Values()
    EndIf
  Next
  
  ProcedureReturn MaxDoubleValue
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

NewList LongValues.l()
NewList DoubleValues.d()

For Index = 0 To 10
  
  AddElement(LongValues())
  LongValues() = Random(999)
  
  AddElement(DoubleValues())
  DoubleValues() = Random(15) * #PI
  
  Debug RSet(Str(LongValues()), 3, "0") + " | " + RSet(StrD(DoubleValues(), 4), 7, "0")
  
Next

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Max and Min Values

Debug "Long (Min | Max) = " + RSet(Str(ListMinLongValue(LongValues())), 3, "0") + " | " + RSet(Str(ListMaxLongValue(LongValues())), 3, "0")
Debug "Double (Min | Max) = " + RSet(StrD(ListMinDoubleValue(DoubleValues()), 4), 7, "0") + " | " + RSet(StrD(ListMaxDoubleValue(DoubleValues()), 4), 7, "0")

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<

Re: Dim And Linked List Min-Max Values

Posted: Mon Sep 03, 2012 9:14 pm
by STARGĂ…TE
Please check if there is a list item! and use Protected:

Code: Select all

Procedure.i ListMinIntegerValue(List Values.i())
  
  Protected MinIntegerValue.i

  If FirstElement(Values())
    MinIntegerValue.i = Values() ; Without "If" it would crash here, if the list is empty!
  EndIf
  
  ForEach Values()
    If Values() < MinIntegerValue
      MinIntegerValue = Values()
    EndIf
  Next
  
  ProcedureReturn MinIntegerValue
EndProcedure

Re: Dim And Linked List Min-Max Values

Posted: Mon Sep 03, 2012 9:32 pm
by Guimauve
Hello again,

First : Correction suggested bt STARGATE added.
Second : For those who are not happy with the name of commands, this a the code to generate all commands in one shot. (Let the computer working for you).

Edit : Final correction ---> "Protected Index.l" added.

Code: Select all

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Dim And Linked List Min-Max Values
; File Name : Dim And Linked List Min-Max Values Generator.pb
; File version: 0.0.0
; Programming : OK
; Programmed by : Guimauve
; Date : 03-09-2012
; Last Update : 03-09-2012
; PureBasic code : 4.70
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Macro AddElementEx(ListName, Element)
  
  AddElement(ListName)
  ListName = Element
  
EndMacro

NewList StdStoring.s()

AddElementEx(StdStoring(), "Array")
AddElementEx(StdStoring(), "List")

NewList Result.s()

AddElementEx(Result(), "Min")
AddElementEx(Result(), "Max")

NewList Types.s()

AddElementEx(Types(), "Byte")
AddElementEx(Types(), "Ascii")
AddElementEx(Types(), "Character")
AddElementEx(Types(), "Unicode")
AddElementEx(Types(), "Word")
AddElementEx(Types(), "Long")
AddElementEx(Types(), "Integer")
AddElementEx(Types(), "Quad")
AddElementEx(Types(), "Float")
AddElementEx(Types(), "Double")

ForEach StdStoring()
  
  If StdStoring() = "Array"
    IndexVar.s = "Index"
    IndexID.s = "0"
    Instruction00.s = "  Protected ArraySizeMax.l = ArraySize(Values(), 1)"
    Instruction01.s = "  For Index = 1 To ArraySizeMax"
    Tab.s = ""
    Instruction02.s = ""
    Instruction03.s = "  Protected Index.l"
    Params.s = "(1))"
    
  Else
    IndexVar.s = ""
    IndexID.s = ""
    Instruction00.s = "  If FirstElement(Values())"
    Instruction01.s = "  ForEach Values()"
    Instruction02.s = "  EndIf"
    Instruction03.s = ""
    Tab.s = "  "
    Params.s = "())"
  EndIf
  
  ForEach Types()
    
    ForEach Result()
      
      If Result() = "Min"
        Sign.s = "< "
      Else
        Sign = "> "
      EndIf
      
      Debug "Procedure." + LCase(Left(Types(), 1)) + " " + StdStoring() + Result() + Types() + "Value(" + StdStoring() + " Values." + LCase(Left(Types(), 1)) + Params
      Debug "  "
      
      Debug Instruction00
      
      If Instruction03 <> ""
        Debug Instruction03
      EndIf
      
      Debug Tab + "  Protected " + Result() + Types() + "Value." + LCase(Left(Types(), 1)) + " = Values(" + IndexID + ")"
      
      If Instruction02 <> ""
        Debug Instruction02
      EndIf
      
      Debug "  "
      Debug Instruction01
      Debug "    If Values(" + IndexVar + ") " + Sign + Result() + Types() + "Value"
      Debug "      " + Result() + Types() + "Value = Values(" + IndexVar + ")"
      Debug "    EndIf"
      Debug "  Next"
      Debug "  "
      Debug "  ProcedureReturn " + Result() + Types() + "Value"
      Debug "EndProcedure"
      Debug ""
      
    Next
    
  Next
  
Next

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Best regards
Guimauve