Posted: Tue Aug 22, 2006 1:36 pm
				
				You can use CreateGadget from PBOSLProgi1984 wrote:Any news about a release with update for creating gadgets with PB ?
http://www.purebasic.com
https://www.purebasic.fr/english/
You can use CreateGadget from PBOSLProgi1984 wrote:Any news about a release with update for creating gadgets with PB ?
Code: Select all
ProcedureDLL.w PeekBigEndianW(*MemoryBuffer)
  !MOV   eax, dword [p.p_MemoryBuffer]
  !MOV    ax,  word [eax]
  !BSWAP eax
  !SHR   eax, 16
  ProcedureReturn
EndProcedureCode: Select all
; ProcedureDLL.w PeekBigEndianW(*MemoryBuffer)
Macro MP0{
_Procedure0:
_PeekBigEndianW:
  PS0=4                                                                                                                                                                                                                                                     
; !MOV   eax, dword [p.p_MemoryBuffer]
p.p_MemoryBuffer equ esp+PS0+0
MOV   eax, dword [p.p_MemoryBuffer]
; !MOV    ax,  word [eax]
MOV    ax,  word [eax]
; !BSWAP eax
BSWAP eax
; !SHR   eax, 16
SHR   eax, 16
; ProcedureReturn
  JMP   _EndProcedure1
; EndProcedure
  XOr    eax,eax
_EndProcedure1:
  RET    4
}Code: Select all
format MS COFF
Public PB_PeekBigEndianW
section '.text' code readable executable
PB_PeekBigEndianW:
_PeekBigEndianW:
PS0=4
; !MOV   eax, dword [p.p_MemoryBuffer]
MOV   eax, dword [p.p_MemoryBuffer]
MOV   eax, dword [p.p_MemoryBuffer]
; !MOV    ax,  word [eax]
MOV    ax,  word [eax]
; !BSWAP eax
BSWAP eax
; !SHR   eax, 16
SHR   eax, 16
; ProcedureReturn
JMP   _EndProcedure1
; EndProcedure
XOR    eax,eax
_EndProcedure1:
RET    4Regards Falko---------------------------
PureBasic - Error
---------------------------
Error: The following PureLibrary is missing: :System
---------------------------
OK
---------------------------
Code: Select all
;/ PureBasic 4.0 / Droopy 06/11/06
;{/ Enumerations
Enumeration ;/ Zone Fichier
  #Read
  #Write
  #DebutZone
  #DansZone
  #FinZone
  #HorsZone
EndEnumeration
Enumeration ;/ Zone de Procédure
  #Inconnu
  #Variable
  #Valeur
  #Commentaires
EndEnumeration
;}
Structure DetailProcedure
  Optionnel.l
  NomVariable.s
  Valeur.s
EndStructure
Global NewList Proc.DetailProcedure(), ContenuProcedure.s
Procedure InsertionTBProcedure(Ligne.s)
  
  ClearList(Proc())
  
  ;/ Mise en forme de la ligne
  Ligne=LTrim(RTrim(Ligne))
  
  ;/ Extraction du Nom de la procedure
  NomProcedure.s=StringField(Ligne,2," ")
  NomProcedure=LTrim(RTrim(StringField(NomProcedure,1,"(")))
  
  ;/ Garde juste les paramètres
  Ligne.s=LTrim(RTrim(Right(Ligne,Len(Ligne)-14-Len(NomProcedure))))
  
  Zone=#Inconnu
  For n=1 To Len(Ligne)
    
    c.s=Mid(Ligne,n,1)
    a=Asc(c)
    
    Select Zone
      
      Case #Inconnu
        If (a>64 And a<91) Or (a>96 And a<123) ;/ C'est un nom de variable
          AddElement(Proc())
          Proc()\NomVariable+c
          Zone=#Variable
        ElseIf c=")"
          Zone=#Commentaires
        EndIf
        
      Case #Variable
        Select c
          Case ")"
            Zone=#Commentaires
          Case ","
            Zone=#Inconnu
          Case " "
            
          Case "="
            NbParaOptionnels+1
            Proc()\Optionnel=1
            Zone=#Valeur
            
          Default
            Proc()\NomVariable+c
        EndSelect
        
        
      Case #Valeur
        
        If a=34 ;/ Détermine si je rentre ou sort d'une zone de guillemet
          If ZoneGuillemet=1
            ZoneGuillemet=0
          Else
            ZoneGuillemet=1
          EndIf
        EndIf
        
        If ZoneGuillemet=1
          Proc()\Valeur+c 
        Else
          Select c  
            Case ","
              Zone=#Inconnu
              
            Case ")"
              Zone=#Commentaires
              
            Default
              Proc()\Valeur+c
              
          EndSelect
        EndIf
        
      Case #Commentaires
        Commentaires.s+c
        
    EndSelect
  Next
  
  Commentaires=LTrim(RTrim(Commentaires))
  Commentaires=LTrim(Right(Commentaires,Len(Commentaires)-1))
  
  If NbParaOptionnels 
    ;- Il y a des paramètres optionnels
    
    ; Ecriture de la déclaration
    Temp.s="Declare "+NomProcedure+Str(NbParaOptionnels+1)+"("
    ForEach Proc()
      Temp+Proc()\NomVariable
      
      If ListIndex(Proc())<CountList(Proc())-1
        Temp+"," ; Ajoute une virgule uniquement si necessaire entre chaque variable
      EndIf
    Next
    Temp+")"
    WriteStringN(#Write,Temp)
    
    For n= 0 To NbParaOptionnels
      
      ; Ecrit le nom de la procédure
      Temp.s=#crlf$+"ProcedureDLL "+NomProcedure
      
      ; Ecriture du N° de la procédure
      If n
        Temp+Str(n+1)
      EndIf
      Temp+ "("
      
      ; Ecrit juste les paramètres necessaires
      ForEach Proc()
        
        If ListIndex(Proc())=n
          Break ; Quitte si on atteind le paramètre max requis
        EndIf
        
        Temp+Proc()\NomVariable
        
        If ListIndex(Proc())<n-1 
          Temp+"," ; Ajoute une virgule uniquement si necessaire entre chaque variable
        EndIf
        
      Next
      
      ; Finalise la ligne de ProcedureDLL en y ajoutant les commentaires
      Temp+")"
      If Commentaires<>""
        Temp+" ; "+Commentaires
      EndIf
      
      WriteStringN(#Write,Temp)
      If n=NbParaOptionnels
        ; Ecriture du contenu de la procédure
        WriteStringN(#Write,ContenuProcedure)
      Else
        ; Ecriture de l'appel à la procédure principale
        Temp2.s="  "+NomProcedure+Str(NbParaOptionnels+1)+"("
        ForEach Proc()
          If ListIndex(Proc())>n-1
            Temp2+Proc()\Valeur
          Else
            Temp2+Proc()\NomVariable
          EndIf
          
          If ListIndex(Proc())<CountList(Proc())-1 
            Temp2+"," ; Ajoute une virgule uniquement si necessaire entre chaque variable
          EndIf
        Next
        Temp2+")"
        
        WriteStringN(#Write,Temp2)
        WriteStringN(#Write,"EndProcedure")
      EndIf
      
    Next
    
    
  Else 
    ;- Aucun paramètre optionnels
    Temp.s="ProcedureDLL "+NomProcedure+"("
    ForEach Proc()
      Temp+Proc()\NomVariable
      If ListIndex(Proc())<CountList(Proc())-1
        Temp+"," ; Ajoute une virgule uniquement si necessaire entre chaque variable
      EndIf
    Next
    Temp+")"
    If Commentaires<>""
      Temp+" ; "+Commentaires
    EndIf
    
    WriteStringN(#Write,Temp)
    WriteStringN(#Write,ContenuProcedure)
    
  EndIf
  
EndProcedure
Procedure TBOP(FileIn.s,FileOut.s,TailbitePath.s,Compile)
  
  ;{/ Boucle de lecture du fichier en entrée / Génération du fichier de sortie
  
  CreateFile(#Write,FileOut)
  If ReadFile(#Read,FileIn)=0 
    End 
  EndIf
  
  ZoneFichier=#HorsZone
  
  While Eof(#Read)=0
    
    Ligne.s=ReadString(#Read)
    Temp.s=UCase(LTrim(Ligne))
    
    If Left(Temp,12)="PROCEDUREDLL"
      ZoneFichier=#DebutZone
      LigneProcedure.s=Ligne
    ElseIf Left(Temp,12)="ENDPROCEDURE" And (ZoneFichier=#DebutZone Or ZoneFichier=#DansZone)
      ZoneFichier=#FinZone
    EndIf
    
    Select ZoneFichier
      Case #HorsZone
        WriteStringN(#Write,Ligne)
        
      Case #DebutZone
        ZoneFichier=#DansZone
        ContenuProcedure.s=""
        
      Case #DansZone
        If ContenuProcedure=""
          ContenuProcedure.s+Ligne
        Else
          ContenuProcedure.s+#crlf$+ Ligne
        EndIf
        
      Case #FinZone
        ZoneFichier=#HorsZone
        ContenuProcedure+#crlf$+Ligne
        InsertionTBProcedure(LigneProcedure)
         
    EndSelect
    
  Wend
  ;}
  
  CloseFile(#Read)
  CloseFile(#Write)
  
  If Compile
    RunProgram("TailBite.exe",FileOut,TailbitePath)
  EndIf
  
EndProcedure
; TBOP("d:\affiche.pb","d:\Out.txt","c:\Program Files\PureBasic4\TailBite",#True)
don´t work for me :Use this code to convert PB4 Optionnal parameters to Tailbite optional parameter format :
ProcedureDLL Print_SetUnits(s(Unit.l)
Code: Select all
TBOP("C:\Programme\PureBasic400\Examples\Printer_Lib\Source\Printer_Lib.pb","C:\Programme\PureBasic400\Examples\Printer_Lib\Source\Out.txt","c:\Programme\PureBasic400\TailBite",#True) Code: Select all
Procedure SplitFunctions(FileStart, FileEnd, DestFolder$, FinalDestFolder$, mID)
  FileSeeker = FileStart
  AsmHeader$ = "The header must remain intact for Re-Assembly"+WNL$+"; "+WNL$
  FileSeeker = FindNextString(AsmHeader$, FileSeeker, FileEnd)+Len(AsmHeader$)
  HeaderEnd$ = "; "+WNL$+"format MS COFF"
  While PeekS(FileSeeker, Len(HeaderEnd$))<>HeaderEnd$ And FileSeeker<FileEnd
    PBLibName$ = RemoveString(GetNextString(FileSeeker, WNL$), "; ")
    If PBLibName$="ImagePlugin" And IPluginAdded=0
      AddElement(PBLib())
      PBLib() = "ImagePlugin"
      IPluginAdded=1
    ElseIf PBLibName$="Gadget" And GadgetAdded=0
      AddElement(PBLib())
      PBLib() = "Gadget"
      GadgetAdded=1
    Else
      If Left(PBLibName$, Len("TB_Include"))="TB_Include"
        Included$ = Right(PBLibName$, Len(PBLibName$)-Len("TB_Include"))
        AlreadyThere = 0
        ForEach PBLib()
          If PBLib()=Included$
            AlreadyThere = 1
            Break
          EndIf
        Next
        If AlreadyThere=0
          AddElement(PBLib())
          PBLib() = Included$
        EndIf
      Else
        Select PBLibName$
          Case "TB_GadgetExtension"
            AddTB_GadgetExtension = 1
              AddElement(PBLib())
              PBLib() = "Gadget"
              GadgetAdded = 1
          Case "TB_Debugger"
            AddTB_Debugger = 1
          Case "TB_ImagePlugin"
            If IPluginAdded=0
              AddElement(PBLib())
              PBLib() = "ImagePlugin"
              IPluginAdded = 1
            EndIf
            AddTB_ImagePlugin = 1
          Default
            If PBLibName$=":System" ; here we can end the search for PBLibs (ABBKlaus 11.11.2006 00:33)
              Break
            EndIf
What problem please ?ABBKlaus wrote:can this solve the problem with tailbite![]()
feedback please![]()