Un peu fatigué d'ajouter à la main les Declare en début des fichiers. Alors ci-dessous un code, à compiler en V4 et à ajouter au menu Outils de l'IDE.
Il ajoute ou met à jour donc les Declare relatifs aux procedures du fichier, et preserve les Declare relatifs à des procedures externes.
Cordialement
Code : Tout sélectionner
Declare.l CheckDeclare(Chaine.s)
Declare.s GetProcedureName(Chaine.s)
Declare.l CheckString(Chaine.s)
EnableExplicit
Global NewList MyProcedures.s()
Define Error.l = #False
Define Result.l = 0
Define Pos.l = 0
Define SourceFileName.s = ProgramParameter()
Define File01.s = ""
Define Chaine.s = ""
Define TempDir.s = GetTemporaryDirectory()
Define File01.s = TempDir + "DeclareGeneratorBKP.txt"
Procedure.l CheckDeclare(Chaine.s)
  Define Result.l = #False 
  Define MyProcName.s = ""
  Define Data01.s = Trim(Chaine)
  
  If FindString(Data01,"Declare",1) = 1
    MyProcName = GetProcedureName(Data01)
    ResetList(MyProcedures())
    While NextElement(MyProcedures())
      If MyProcedures() = MyProcName
        Result = #True
        Break  
      EndIf    
    Wend  
  EndIf
  
  ProcedureReturn Result
EndProcedure
Procedure.s GetProcedureName(Chaine.s)
  
  Define Ptr01.l = 0
  Define Ptr02.l = 0
  Define Result.s = ""
  Define Data01.s = Trim(Chaine)
  
  Ptr01 = FindString(Data01," ",1)
  Ptr02 = FindString(Data01,"(",1)
  If Ptr01 > 0 And Ptr02 > Ptr01
    Ptr01 + 1
    Result = Trim(Mid(Data01,Ptr01,Ptr02 - Ptr01))
  EndIf
  
  ProcedureReturn Result 
  
EndProcedure
Procedure.l CheckString(Chaine.s)
  Define Result.l = 0
  Define DoIt.l = #False
  Define Data01.s = Trim(Chaine)
  Define Data02.s = ""
    
  If FindString(Data01,"ProcedureReturn",1) = 1
    Result = 0
  Else    
    If FindString(Data01,"Procedure",1) = 1
      
      Data02 =  GetProcedureName(Chaine)
      AddElement(MyProcedures())
      MyProcedures() = Data02
      
      Data01 = StringField(Data01,1," ")
      If FindString(Data01,".",1) > 0
        Select Right(Data01,1)
          Case "b"  : Result = 2
          Case "c"  : Result = 3
          Case "w"  : Result = 4
          Case "l"  : Result = 5
          Case "f"  : Result = 6
          Case "q"  : Result = 7
          Case "d"  : Result = 8
          Case "s"  : Result = 9        
        EndSelect
      Else
        Result = 1
      EndIf 
    EndIf 
  EndIf
  
  ProcedureReturn Result
EndProcedure
If CopyFile(SourceFileName,File01) > 0
  If CreateFile(0,SourceFileName)
    If OpenFile(1,File01)
      While Eof(1) = 0
        Chaine = ReadString(1)        
        Result.l = CheckString(Chaine)
        If Result > 0
          Chaine = Trim(Chaine)
          Pos = FindString(Chaine," ",1)
          If Pos > 0
            Select Result 
              Case 1  : Chaine = "Declare   " + Right(Chaine,Len(Chaine) - Pos)
              Case 2  : Chaine = "Declare.b " + Right(Chaine,Len(Chaine) - Pos)
              Case 3  : Chaine = "Declare.c " +  Right(Chaine,Len(Chaine) - Pos)
              Case 4  : Chaine = "Declare.w " +  Right(Chaine,Len(Chaine) - Pos)
              Case 5  : Chaine = "Declare.l " +  Right(Chaine,Len(Chaine) - Pos)
              Case 6  : Chaine = "Declare.f " +  Right(Chaine,Len(Chaine) - Pos)
              Case 7  : Chaine = "Declare.q " +  Right(Chaine,Len(Chaine) - Pos)
              Case 8  : Chaine = "Declare.d " +  Right(Chaine,Len(Chaine) - Pos)
              Case 9  : Chaine = "Declare.s " +  Right(Chaine,Len(Chaine) - Pos)
            EndSelect
            WriteString(0,Chaine + Chr(13) + Chr(10))
          EndIf        
        EndIf        
      Wend
      WriteString(0,"")
      CloseFile(1) 
      If OpenFile(1,File01)        
        While Eof(1) = 0
          Chaine = ReadString(1)                    
          If CheckDeclare(Chaine) = #False
            WriteString(0,Chaine + Chr(13) + Chr(10))          
          EndIf
        Wend
        CloseFile(1)
      Else
        Error = #True
      EndIf     
    EndIf
    CloseFile(0)
  Else
    Error = #True
  EndIf
  If Error 
    CopyFile(File01,SourceFileName)
  EndIf 
EndIf
End