PureASM 1.0

Partagez votre expérience de PureBasic avec les autres utilisateurs.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

PureASM 1.0

Message par erix14 »

Bonjour,
comme je l'avais annoncé il y a plusieurs semaines suite à un poste de Dräc, voici mon outil pour visualiser rapidement le code assembleur du programme que l'on est en train d'écrire ou d'un fichier PureBasic quelconque.
Pour cela, vous devez l'installer dans les outils de votre éditeur PureBasic ou jaPBe avec l'argument %FILE.
N'oubliez pas d'activer les thèmes XP (c'est plus joli :lol: )
Je fais évoluer cet outil au cours du temps...
- vous ne pouvez pas choisir les couleurs
- il n'y a pas d'aide
- il ne prend pas en charge les DLL
- il peut y avoir une erreur mémoire sur les fichiers *.pb de très grande taille (plusieurs milliers de lignes)
- seulement tester sous Windows XP
Mes explications sont courtes, si toutefois une personne à des difficultés pour installer cet outil dans son éditeur habituel, qu'il pose la question...
Dernière modification par erix14 le mer. 31/mai/2006 20:52, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu pourrais nous remettre ça au propre.

Si le code est trop long, tu fais deux posts, ou tu fais un lien. Parce que là, c'est pas génial ton affaire :lol:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Partie 1 :

Code : Tout sélectionner

;/
;/                   -  PureASM 1.0  - Programme Eric Ducoulombier ( Erix14 )
;/                  Windows XP SP2 - PureBasic 3.92 - jaPBe 2.4.9.25
;/                                                          12/11/2004
;/
Enumeration
          #IDM_FILE_NEW
          #IDM_FILE_OPEN
          #IDM_FILE_SAVE
          #IDM_EDIT_CUT
          #IDM_EDIT_COPY
          #IDM_EDIT_PASTE
          #IDM_EDIT_DELETE
          #IDM_EDIT_SELECTALL
          #IDM_EDIT_UNDO
          #IDM_EDIT_REDO
          #OPTIONS
          #COMPILER
          #MENU_QUITTER
          #IDM_EDIT_COMPIL
          #IDM_HELP_ABOUT
EndEnumeration
#Longueur = 800
#Largeur = 600
#WM_MOUSEWHEEL = $20A 
#CDDS_ITEM = $10000 
#CDDS_SUBITEM = $20000 
#CDDS_PREPAINT = $1 
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT 
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM | #CDDS_ITEMPREPAINT 
#CDRF_NEWFONT = $2 
#CDRF_NOTIFYITEMDRAW = $20 
#CDRF_NOTIFYSUBITEMDRAW = $20 
#PROCESS32LIB = 0
#TH32CS_SNAPPROCESS = 2
#ERROR_ALREADY_EXISTS = $B7
Structure PROCESSENTRY32 
          dwSize.l 
          cntUsage.l 
          th32ProcessID.l 
          *th32DefaultHeapID.l 
          th32ModuleID.l 
          cntThreads.l 
          th32ParentProcessID.l 
          pcPriClassBase.l 
          dwFlags.l 
          szExeFile.b[#MAX_PATH] 
EndStructure 
Structure Editeur
          Handle.l
          OldCallback.l
EndStructure
Structure ListeSLV
          Texte.s
          Ligne.l
          Index.b
          type.b
EndStructure
NewList Process32.PROCESSENTRY32 () 
Global ToolBarHeight,StatusBarHeight,StatusBar,MenuBar,ToolBar,hwnd,Splitter,PanelCode,PanelSignet
Global TexteHeight,MaxLignePage,NombreDeLignes,TotalLignesVisible,AncienDebutLigne,Editor_RunOnceMessage
Global RTF.s,ThumbTrack,SplitterPos,*RTF.BYTE,*Texte.BYTE,Mot$,CouleurRTF,LongMot,OldPanelCallBack,ListeSignet
Global ListeSignetID,ListeLabelID,ListeVariableID,OldSplitterCallBack,hFont,IndexRTF,OldSLVCallBack,PureBasicRepertoire.s
Global SplitterMove,SplitterAction,NoPaintPanel,NoPaintSignet
NewList hEditeur.Editeur()
NewList Code.s()
NewList Registre.s()
NewList ListeSLV.ListeSLV()
NewList ListeS.ListeSLV()
NewList ListeL.ListeSLV()
NewList ListeV.ListeSLV()
RTF = "{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}}"
RTF + "{\colortbl ;\red250\green250\blue250;";    Couleur commentaire
RTF + "\red100\green250\blue100;";                   Couleur registre
RTF + "\red250\green100\blue100;";                   Couleur code
RTF + "\red100\green100\blue250;";                   Couleur nombre
RTF + "\red250\green100\blue0;";                      Couleur séparateur
RTF + "\red200\green200\blue0;";                      Couleur "Texte"
RTF + "\red128\green128\blue128;}";                 Couleur normal
RTF + "\viewkind4\uc1\pard\f0\fs20 "
Procedure CopieMot(Couleur)
          If CouleurRTF <> Couleur
                    CopyMemoryString("\cf"+Str(Couleur)+" "+Mot$) : LongMot = 0 : CouleurRTF = Couleur
          Else : CopyMemoryString(Mot$) : LongMot = 0
          EndIf
          !MOV dword[v_Mot$],0;         Mot$ = ""
EndProcedure
Procedure ColoriserTexte()
          CopyMemoryString(RTF, @*RTF)
          CouleurRTF = 0 : LigneRTF = 0
          While *Texte\b<>0
                    c = *Texte\b & $FF
                    If c < 9 : *Texte + 1 : Continue : EndIf
                    If c=10
                              If Commentaire = #True
                                        If ListeSignet
                                                  ListeSignet = #False
                                                  ListeSLV()\Ligne = LigneRTF
                                                  ListeSLV()\Index = IndexRTF
                                                  ListeSLV()\type = 1
                                        EndIf
                                        CopyMemoryString("\line ") : LigneRTF + 1 : Commentaire = #False
                                        While *Texte\b<=32 : *Texte + 1 : Wend
                                        Continue
                              EndIf
                              If LongMot > 0
                                        *n.BYTE = @Mot$ + LongMot - 1
                                        If *n\b = ':'
                                                  AddElement(ListeSLV())
                                                  ListeSLV()\Texte = Mid(Mot$,1,LongMot-1)
                                                  ListeSLV()\Ligne = LigneRTF
                                                  ListeSLV()\Index = IndexRTF
                                                  ListeSLV()\type = 2
                                        EndIf
                                        *n.BYTE = @Mot$
                                        UnNombre = #True
                                        For t=1 To LongMot
                                                  If *n\b > 57 Or *n\b < 48 : UnNombre = #False : Break : EndIf
                                        Next
                                        If UnNombre : CopieMot(4)
                                        ElseIf LongMot <= 7
                                                  MotBis$ = UCase(Mot$)
                                                  ForEach Code()
                                                            If MotBis$=Code()
                                                                      If CouleurRTF <> 3
                                                                                CopyMemoryString(Chr(9)+"\cf3 "+MotBis$) : LongMot = 0 : CouleurRTF = 3
                                                                      Else : CopyMemoryString(Chr(9)+MotBis$) : LongMot = 0
                                                                      EndIf
                                                                      !MOV dword[v_Mot$],0
                                                                      Break
                                                            EndIf
                                                  Next
                                                  If LongMot > 0
                                                            ForEach Registre()
                                                                      If MotBis$=Registre() : CopieMot(2) : Break : EndIf
                                                            Next
                                                  EndIf
                                                  If LongMot > 0 : CopieMot(7) : EndIf
                                        Else : CopieMot(7)
                                        EndIf
                              EndIf
                              CopyMemoryString("\line ") : LigneRTF + 1
                              While *Texte\b<=32 : *Texte + 1 : Wend
                              If CompareMemoryString(*Texte,"v_",1,2) = 0 : Variable = #True : EndIf
                              Continue
                    EndIf
                    If c='\' Or c='{' Or c='}'
                              CopyMemoryString("\"+Chr(c))
                              *Texte + 1 : Continue
                    EndIf
                    If c=';' And DataTexte=#False And Commentaire = #False
                              Commentaire = #True
                              If CouleurRTF <> 1 : CopyMemoryString("\cf1 ") : CouleurRTF = 1 : EndIf
                              If CompareMemoryString(*Texte,"; Procedure ",1,12) = 0 Or CompareMemoryString(*Texte,"; Procedure.",1,12) = 0
                                        AddElement(ListeSLV())
                                        ListeSignet = #True
                                        CopyMemoryString("; Procedure") : *Texte + 10
                                        While *Texte\b<>32 : *Texte + 1 : CopyMemoryString(Chr(*Texte\b & $FF)) : Wend : Continue
                              ElseIf CompareMemoryString(*Texte,";-",1,2) = 0
                                        AddElement(ListeSLV()) : ListeSLV()\Texte = "> "
                                        ListeSignet = #True
                                        CopyMemoryString(";-") : *Texte + 2
                                        While *Texte\b=32 : CopyMemoryString(Chr(*Texte\b & $FF)) : *Texte + 1 : Wend : Continue
                              EndIf
                              CopyMemoryString(";")
                              *Texte + 1 : Continue
                    EndIf
                    If c='"' And Commentaire=#False
                              If DataTexte = #False
                                        If CouleurRTF <> 6
                                                  CopyMemoryString("\cf6 "+Chr(c)) : LongMot = 0 : CouleurRTF = 6
                                        Else : CopyMemoryString(Chr(c)) : LongMot = 0
                                        EndIf
                                        *Texte + 1 : DataTexte = #True : Continue
                              Else
                                        CopyMemoryString(Chr(c))
                                        *Texte + 1 : DataTexte = #False : Continue
                              EndIf
                    EndIf
                    If ListeSignet
                              ListeSLV()\Texte + Chr(c)
                              CopyMemoryString(Chr(c))
                              *Texte + 1 : Continue
                    EndIf
                    If DataTexte Or Commentaire
                              CopyMemoryString(Chr(c))
                              *Texte + 1 : Continue
                    EndIf
                    If c=' ' Or c=',' Or c='(' Or c=')' Or c='[' Or c=']' Or c='+' Or c='-'
                              If LongMot > 0
                                        If Variable
                                                  Variable = #False
                                                  AddElement(ListeSLV())
                                                  ListeSLV()\Texte = Mid(Mot$,3,LongMot-2)
                                                  ListeSLV()\Index = IndexRTF
                                                  ListeSLV()\type = 3 
                                        EndIf
                                        *n.BYTE = @Mot$
                                        UnNombre = #True
                                        For t=1 To LongMot
                                                  If *n\b > 57 Or *n\b < 48 : UnNombre = #False : Break : EndIf
                                                  *n + 1
                                        Next
                                        If UnNombre : CopieMot(4)
                                        ElseIf LongMot <= 7
                                                  MotBis$ = UCase(Mot$)
                                                  ForEach Code()
                                                            If MotBis$=Code()
                                                                      If CouleurRTF <> 3
                                                                                CopyMemoryString(Chr(9)+"\cf3 "+MotBis$) : LongMot = 0 : CouleurRTF = 3
                                                                      Else : CopyMemoryString(Chr(9)+MotBis$) : LongMot = 0
                                                                      EndIf
                                                                      !MOV dword[v_Mot$],0
                                                                      Break
                                                            EndIf
                                                  Next
                                                  If LongMot > 0
                                                            ForEach Registre()
                                                                      If MotBis$=Registre() : CopieMot(2) : Break : EndIf
                                                            Next
                                                  EndIf
                                                  If LongMot > 0 : CopieMot(7) : EndIf
                                        Else : CopieMot(7)
                                        EndIf
                              EndIf
                              If (CouleurRTF <> 5) And (c <> ' ') And (c <> ',')
                                        CopyMemoryString("\cf5 "+Chr(c)) : LongMot = 0 : CouleurRTF = 5
                              Else : CopyMemoryString(Chr(c)) : LongMot = 0
                              EndIf
                              *Texte + 1 : Continue
                    Else
                              Mot$ + Chr(c) : LongMot + 1 : *Texte + 1
                    EndIf
          Wend
          CopyMemoryString("}")
EndProcedure
Procedure EnleveTabulation(GadgetID)
          SetWindowLong_(GadgetID, #GWL_STYLE, GetWindowLong_(GadgetID, #GWL_STYLE) & ~ #WS_TABSTOP) 
EndProcedure
Procedure.s CheminPureBasic()
          Buffer$=Space(10000):BufferSize=Len(Buffer$)-1
          If GetVersion_() & $FF0000 ; Windows NT/XP
                    If RegOpenKeyEx_(#HKEY_CLASSES_ROOT, "Applications\PureBasic.exe\shell\open\command", 0, #KEY_ALL_ACCESS , @Key) = #ERROR_SUCCESS
                              If RegQueryValueEx_(Key, "", 0, @type, @Buffer$, @BufferSize) = #ERROR_SUCCESS
                                        OutputDirectory$ = GetPathPart(Mid(Buffer$, 2, Len(Buffer$)-7))
                              EndIf
                    EndIf
          Else ; La même chose pour Win9x
                    If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Classes\PureBasic.exe\shell\open\command", 0, #KEY_ALL_ACCESS , @Key) = #ERROR_SUCCESS
                              If RegQueryValueEx_(Key, "", 0, @type, @Buffer$, @BufferSize) = #ERROR_SUCCESS
                                        OutputDirectory$ = GetPathPart(Mid(Buffer$, 2, Len(Buffer$)-7))
                              EndIf
                    EndIf
          EndIf
          ProcedureReturn OutputDirectory$
EndProcedure
Procedure GetTextHeight(hDC) 
          PrevMapMode = SetMapMode_(hDC,#MM_TEXT) 
          GetTextMetrics_(hDC,tm.textmetric) 
          If PrevMapMode : SetMapMode_(hDC,PrevMapMode) : EndIf 
          ProcedureReturn tm\tmHeight 
EndProcedure 
Procedure GetPanelDisplayWindowID(gadget,Item)
          tc_item.TC_ITEM
          tc_item\Mask = #TCIF_PARAM
          SendMessage_(GadgetID(gadget),#tcm_getitem,Item,tc_item)
          ProcedureReturn tc_item\lParam
EndProcedure
Procedure GetInnerSizeWidth(gadget)
          GetWindowRect_(GetPanelDisplayWindowID(gadget,GetGadgetState(gadget)),rect.RECT)
          ProcedureReturn rect\right-rect\left
EndProcedure
Procedure GetInnersizeHeight(gadget)
          GetWindowRect_(GetPanelDisplayWindowID(gadget,GetGadgetState(gadget)),rect.RECT)
          ProcedureReturn rect\bottom-rect\top
EndProcedure
Procedure Editor_Color(hGadget, Color.l) 
          format.CHARFORMAT 
          format\cbSize = SizeOf(CHARFORMAT) 
          format\dwMask = #CFM_COLOR 
          format\crTextColor = Color 
          SendMessage_(hGadget, #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 
Procedure Editor_FontSize(hGadget, FontSize.l) 
          format.CHARFORMAT 
          format\cbSize = SizeOf(CHARFORMAT) 
          format\dwMask = #CFM_SIZE 
          format\yHeight = FontSize*20 
          SendMessage_(hGadget, #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 
Procedure Editor_Font(hGadget, FontName.s) 
          format.CHARFORMAT 
          format\cbSize = SizeOf(CHARFORMAT) 
          format\dwMask = #CFM_FACE 
          PokeS(@format\szFaceName, FontName) 
          SendMessage_(hGadget, #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 
; #CFM_BOLD  #CFM_ITALIC  #CFM_UNDERLINE  #CFM_STRIKEOUT 
Procedure Editor_Format(hGadget, Flags.l) 
          format.CHARFORMAT 
          format\cbSize = SizeOf(CHARFORMAT) 
          format\dwMask = #CFM_ITALIC|#CFM_BOLD|#CFM_STRIKEOUT|#CFM_UNDERLINE 
          format\dwEffects = Flags 
          SendMessage_(hGadget, #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 
Procedure Editor_Locate(hGadget,X,Y) 
          reg = hGadget 
          CharIdx = SendMessage_(reg,#EM_LINEINDEX,Y-1,0) 
          LLength = SendMessage_(reg,#EM_LINELENGTH,CharIdx,0) 
          If LLength >= X-1 : CharIdx + X-1 : EndIf 
          Range.CHARRANGE 
          Range\cpMin = CharIdx 
          Range\cpMax = CharIdx 
          SendMessage_(reg,#EM_EXSETSEL,0,Range) 
EndProcedure 
Procedure Editor_Select(hGadget,LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)    
          sel.CHARRANGE 
          sel\cpMin = SendMessage_(hGadget, #EM_LINEINDEX, LineStart, 0) + CharStart - 1 
          If LineEnd = -1 : LineEnd = SendMessage_(hGadget, #EM_GETLINECOUNT, 0, 0)-1 : EndIf 
          sel\cpMax = SendMessage_(hGadget, #EM_LINEINDEX, LineEnd, 0) 
          If CharEnd = -1 : sel\cpMax + SendMessage_(hGadget, #EM_LINELENGTH, sel\cpMax, 0) 
          Else : sel\cpMax + CharEnd - 1 
          EndIf 
          SendMessage_(hGadget, #EM_EXSETSEL, 0, @sel) 
EndProcedure
Procedure EditorGadgetCursorX(hGadget) 
          SendMessage_(hGadget,#EM_EXGETSEL,0,Range.CHARRANGE) 
          ProcedureReturn (Range\cpMax-(SendMessage_(hGadget,#EM_LINEINDEX,SendMessage_(hGadget,#EM_EXLINEFROMCHAR,0,Range\cpMin),0))+1) 
EndProcedure 
Procedure EditorGadgetCursorY(hGadget) 
          SendMessage_(hGadget,#EM_EXGETSEL,0,Range.CHARRANGE) 
          ProcedureReturn SendMessage_(hGadget,#EM_EXLINEFROMCHAR,0,Range\cpMin)+1 
EndProcedure 
Procedure AfficheNumeroLigne()
          DebutLigne = SendMessage_(hEditeur()\Handle, #EM_GETFIRSTVISIBLELINE, 0, 0)+1
          NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
          hDC = GetDC_(hEditeur()\Handle)
          SelectObject_(hDC,hFont)
          SetBkColor_(hDC,RGB(150,200,250))
          SetTextColor_(hDC, RGB(50,50,50))
          GetClientRect_(hEditeur()\Handle, EditeurRect.RECT)
          lastline = TotalLignesVisible+DebutLigne
          EditeurRect\right = 64
          EditeurRect\top + 1
          While DebutLigne<=lastline
                    If DebutLigne>NombreDeLignes
                              DrawText_(hDC, "             ", -1, EditeurRect, #DT_RIGHT)
                    Else : DrawText_(hDC, "         "+Str(DebutLigne)+"   ", -1, EditeurRect, #DT_RIGHT)
                    EndIf
                    EditeurRect\top + TexteHeight
                    DebutLigne+1
          Wend
          ReleaseDC_(hEditeur()\Handle, hDC)
EndProcedure
Procedure EditeurCallback(WindowId, message, wParam, lParam)
          Select message
                    Case #WM_PAINT
                              AfficheNumeroLigne()
                              GetClientRect_(hEditeur()\Handle, EditeurRect.RECT)
                              EditeurRect\right = 64
                              ValidateRect_(hEditeur()\Handle,@EditeurRect)
                              StatusBarText( 0, 0, "  "+Str(EditorGadgetCursorX(hEditeur()\Handle))+" : "+Str(EditorGadgetCursorY(hEditeur()\Handle)), #PB_StatusBar_Raised)
                              Result = CallWindowProc_(hEditeur()\OldCallback, WindowId, message, wParam, lParam)
                    Case #WM_VSCROLL
                              wLow = PeekW(@wParam) : wHi  = PeekW(@wParam+2)
                              Select wLow
                                        Case #SB_TOP
                                                  PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,-PremiereLigneVisible)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #SB_BOTTOM
                                                  PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,NombreDeLignes-TotalLignesVisible-PremiereLigneVisible)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #SB_LINEUP
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,-1)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #SB_LINEDOWN
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,1)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #SB_PAGEUP
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,1-TotalLignesVisible)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #SB_PAGEDOWN
                                                  PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                  If (PremiereLigneVisible+TotalLignesVisible-1)>(NombreDeLignes-TotalLignesVisible)
                                                            TotalLignes = NombreDeLignes-TotalLignesVisible-PremiereLigneVisible
                                                  Else : TotalLignes = TotalLignesVisible
                                                  EndIf
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,TotalLignes-1)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #SB_THUMBPOSITION
                                                  ThumbTrack = #False
                                        Case #SB_THUMBTRACK
                                                  If ThumbTrack
                                                            VSB.SCROLLINFO 
                                                            VSB\cbSize = SizeOf(SCROLLINFO) 
                                                            VSB\fMask =#SIF_ALL
                                                            GetScrollInfo_(hEditeur()\Handle,#SB_VERT,VSB)
                                                            NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                            PremiereLigneVisible = (VSB\nTrackPos*NombreDeLignes)/VSB\nMax
                                                            If AncienDebutLigne <> PremiereLigneVisible
                                                                      Difference = PremiereLigneVisible - AncienDebutLigne
                                                                      SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,Difference)
                                                                      AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                            EndIf
                                                  Else : ThumbTrack = #True
                                                  EndIf
                              EndSelect
                              Result = 0
                    Case #WM_MOUSEWHEEL
                              Difference = -(wParam>>16)/40
                              PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                              NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                              While (PremiereLigneVisible+TotalLignesVisible+Difference) > NombreDeLignes : Difference - 1 : Wend
                              SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,Difference)
                              AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                              Result = 0
                    Case #WM_KEYDOWN
                              Select wParam
                                        Case #VK_RETURN
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  Result = CallWindowProc_(hEditeur()\OldCallback, WindowId, message, wParam, lParam)
                                        Case #VK_CLEAR Or #VK_DELETE
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #VK_PRIOR
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,1-TotalLignesVisible)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  Result = 0
                                        Case #VK_NEXT
                                                  PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                  If (PremiereLigneVisible+TotalLignesVisible-1)>(NombreDeLignes-TotalLignesVisible)
                                                            TotalLignes = NombreDeLignes-TotalLignesVisible-PremiereLigneVisible
                                                  Else : TotalLignes = TotalLignesVisible
                                                  EndIf
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,TotalLignes-1)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  Result = 0
                                        Case #VK_HOME
                                                  PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,-PremiereLigneVisible)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case #VK_END
                                                  PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                  NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                  SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,NombreDeLignes-TotalLignesVisible-PremiereLigneVisible)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Default
                                                  Result = CallWindowProc_(hEditeur()\OldCallback, WindowId, message, wParam, lParam)
                              EndSelect
                              StatusBarText( 0, 0, "  "+Str(EditorGadgetCursorX(hEditeur()\Handle))+" : "+Str(EditorGadgetCursorY(hEditeur()\Handle)), #PB_StatusBar_Raised)
                    Case #WM_KEYUP
                              StatusBarText( 0, 0, "  "+Str(EditorGadgetCursorX(hEditeur()\Handle))+" : "+Str(EditorGadgetCursorY(hEditeur()\Handle)), #PB_StatusBar_Raised)
                    Case #WM_CONTEXTMENU
                              DisplayPopupMenu(1, hwnd)
                    Case #WM_LBUTTONUP
                              StatusBarText( 0, 0, "  "+Str(EditorGadgetCursorX(hEditeur()\Handle))+" : "+Str(EditorGadgetCursorY(hEditeur()\Handle)), #PB_StatusBar_Raised)
                    Default
                              Result = CallWindowProc_(hEditeur()\OldCallback, WindowId, message, wParam, lParam)
          EndSelect
          ProcedureReturn Result
EndProcedure
Procedure CreerEditeurCode(FileName$) 
          AddGadgetItem(PanelCode, -1,FileName$)
          IndexRTF = CountGadgetItems(PanelCode)
          LastElement(hEditeur())
          AddElement(hEditeur())
          EditeurID = EditorGadget(#PB_Any,0,0,0,0)
          hEditeur()\Handle = GadgetID(EditeurID)
          SendMessage_(hEditeur()\Handle, #EM_SETEVENTMASK , 0, #ENM_CHANGE | #ENM_KEYEVENTS | #ENM_MOUSEEVENTS | #ENM_PROTECTED)
          SendMessage_(hEditeur()\Handle,#EM_LIMITTEXT,-1,0)
          SendMessage_(hEditeur()\Handle,#EM_SETMARGINS,#EC_LEFTMARGIN,65)
          SendMessage_(hEditeur()\Handle,#EM_SETBKGNDCOLOR,#Null,RGB(20,20,40))
          SetGadgetFont(EditeurID, hFont)
          Editor_Color(hEditeur()\Handle,RGB(100,100,250))
          Editor_Format(hEditeur()\Handle,#Null) 
          hEditeur()\OldCallback = SetWindowLong_(hEditeur()\Handle, #GWL_WNDPROC, @EditeurCallback())
EndProcedure
Procedure ResizeEditeurCode()
          If hEditeur()\Handle
                    GetWindowRect_(ToolBar, ToolBarRect.RECT)
                    ToolBarHeight = ToolBarRect\bottom-ToolBarRect\top
                    GetWindowRect_(StatusBar, StatusBarRect.RECT)
                    StatusBarHeight = StatusBarRect\bottom-StatusBarRect\top
                    GetClientRect_(hwnd, WindowRect.RECT)
                    WindowWidth = WindowRect\right-WindowRect\left
                    WindowHeight = WindowRect\bottom-WindowRect\top
                    height =  WindowHeight - ToolBarHeight - StatusBarHeight
                    SplitterPos = GetGadgetState(Splitter)
                    ResizeGadget(Splitter,0,ToolBarHeight,WindowWidth,height)
                    If SplitterPos = 0 : SplitterPos = WindowWidth * 0.8 : EndIf
                    ResizeGadget(PanelCode,0,0,SplitterPos,height)
                    ResizeGadget(PanelSignet,SplitterPos+3,0,WindowWidth-SplitterPos-3,height)
                    MoveWindow_(hEditeur()\Handle,1,1,GetInnerSizeWidth(PanelCode)-2,GetInnersizeHeight(PanelCode)-2,#False)
                    MoveWindow_(GadgetID(ListeSignetID),1,1,GetInnerSizeWidth(PanelSignet)-2,GetInnersizeHeight(PanelSignet)-2,#False)
                    MoveWindow_(GadgetID(ListeLabelID),1,1,GetInnerSizeWidth(PanelSignet)-2,GetInnersizeHeight(PanelSignet)-2,#False)
                    MoveWindow_(GadgetID(ListeVariableID),1,1,GetInnerSizeWidth(PanelSignet)-2,GetInnersizeHeight(PanelSignet)-2,#False)
                    GetWindowRect_(hEditeur()\Handle, EditeurRect.RECT)
                    TotalLignesVisible = (EditeurRect\bottom-EditeurRect\top)/TexteHeight
                    PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                    NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                    If (PremiereLigneVisible+TotalLignesVisible)>NombreDeLignes
                              SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,NombreDeLignes-TotalLignesVisible-PremiereLigneVisible)
                    EndIf
                    AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
          EndIf
EndProcedure
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Partie 2:

Code : Tout sélectionner

Procedure KillProcessPureBasic()
          If OpenLibrary (#PROCESS32LIB, "kernel32.dll") 
                    snap = CallFunction (#PROCESS32LIB, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0) 
                    If snap 
                              DefType.PROCESSENTRY32 Proc32 
                              Proc32\dwSize = SizeOf (PROCESSENTRY32) 
                              If CallFunction (#PROCESS32LIB, "Process32First", snap, @Proc32) 
                                        AddElement (Process32 ()) 
                                        CopyMemory(@Proc32, @Process32 (), SizeOf (PROCESSENTRY32)) 
                                        While CallFunction (#PROCESS32LIB, "Process32Next", snap, @Proc32) 
                                                  AddElement (Process32 ()) 
                                                  CopyMemory(@Proc32, @Process32 (), SizeOf (PROCESSENTRY32)) 
                                        Wend 
                              EndIf    
                              CloseHandle_ (snap) 
                    EndIf 
                    CloseLibrary (#PROCESS32LIB) 
          EndIf 
          ResetList(Process32 ())
          processID.l = 0
          While NextElement (Process32())
                    NomProcess$ = PeekS (@Process32 ()\szExeFile)
                    If Mid(NomProcess$,1,9) = "PureBasic"
                              processID = Process32 ()\th32ProcessID
                    EndIf
          Wend
          If processID
                    ph.l = OpenProcess_(1,#False,processID)
                    TerminateProcess_(ph,0)
                    CloseHandle_(ph)
          EndIf
EndProcedure
Procedure ChargeSLV(IndexPanel)
          ClearList(ListeS())
          ForEach ListeSLV()
                    If ListeSLV()\Index = IndexPanel And ListeSLV()\type = 1 : AddElement(ListeS())
                              ListeS()\Texte = ListeSLV()\Texte
                              ListeS()\Ligne = ListeSLV()\Ligne
                    EndIf
          Next
          ClearGadgetItemList(ListeSignetID)
          ForEach ListeS() : AddGadgetItem(ListeSignetID,-1,ListeS()\Texte) : Next
          SendMessage_(GadgetID(ListeSignetID),#LVM_SETCOLUMNWIDTH,0,#LVSCW_AUTOSIZE)
          ClearList(ListeL())
          ForEach ListeSLV()
                    If ListeSLV()\Index = IndexPanel And ListeSLV()\type = 2 : AddElement(ListeL())
                              ListeL()\Texte = ListeSLV()\Texte
                              ListeL()\Ligne = ListeSLV()\Ligne
                    EndIf
          Next
          ClearGadgetItemList(ListeLabelID)
          ForEach ListeL() : AddGadgetItem(ListeLabelID,-1,ListeL()\Texte) : Next
          SendMessage_(GadgetID(ListeLabelID),#LVM_SETCOLUMNWIDTH,0,#LVSCW_AUTOSIZE)
          ClearList(ListeV())
          ForEach ListeSLV()
                    If ListeSLV()\Index = IndexPanel And ListeSLV()\type = 3 : AddElement(ListeV())
                              ListeV()\Texte = ListeSLV()\Texte
                    EndIf
          Next
          ClearGadgetItemList(ListeVariableID)
          ForEach ListeV() : AddGadgetItem(ListeVariableID,-1,ListeV()\Texte) : Next
          SendMessage_(GadgetID(ListeVariableID),#LVM_SETCOLUMNWIDTH,0,#LVSCW_AUTOSIZE)
EndProcedure
Procedure OuvrirFichier(Parametre$)
          If Parametre$ = ""
                    file.s = OpenFileRequester("Ouvrir un fichier PureBasic", "", "Fichiers PureBasic|*.pb", 0)
          Else : file = Parametre$ : Parametre$ = ""
          EndIf
          If file<>""
                    processID.l = RunProgram(PureBasicRepertoire+"PBCompiler.exe",Chr(34)+file+Chr(34)+" /COMMENTED","",1|2) 
                    If processID = 0
                              MessageRequester("Erreur", "Le fichier PB n'a pu être compilé", #MB_ICONERROR)
                    Else : KillProcessPureBasic()
                    EndIf
                    fileASM.s = PureBasicRepertoire+"PureBasic.asm" 
                    iFile = ReadFile(#PB_Any, fileASM)
                    If iFile
                              FileLength = Lof()
                              *TextBuffer = LocalAlloc_(#LMEM_ZEROINIT, FileLength+10)
                              ReadData(*TextBuffer, FileLength)
                              CloseFile(iFile)
                              *MemPtr = AllocateMemory(FileLength*3)
                              *RTF = *MemPtr
                              *Texte = *TextBuffer
                              ColoriserTexte()
                              FileName$ = GetFilePart(file)
                              CreerEditeurCode(FileName$)
                              SendMessage_(hEditeur()\Handle,#EM_REPLACESEL,0,*MemPtr)
                              MoveWindow_(hEditeur()\Handle,1,1,GetInnerSizeWidth(PanelCode)-2,GetInnersizeHeight(PanelCode)-2,#False)
                              SetGadgetState(PanelCode,CountGadgetItems(PanelCode)-1)
                              LocalFree_(*TextBuffer)
                              FreeMemory(*MemPtr)
                              ChargeSLV(IndexRTF-1)
                    EndIf
          EndIf
EndProcedure
Procedure RunOnce(Name.s)
          Editor_RunOnceMessage = RegisterWindowMessage_("ASM_Editor_RunOnce")
          Editor_RunOnceMutex   = CreateMutex_(0,0,"ASM_Editor")
          If GetLastError_() = #ERROR_ALREADY_EXISTS
                    If GetVersion_() & $FF0000  ; Windows NT/XP
                              X = RegCreateKeyEx_(#HKEY_CLASSES_ROOT, "Applications\PureASM.exe\", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo)
                    Else  ; La même chose pour Win9x
                              X = RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Classes\PureASM.exe\", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo)
                    EndIf
                    If X = #ERROR_SUCCESS
                              RegSetValueEx_(NewKey, "RunOnce_FileName", 0, #reg_sz,  Name, Len(Name)+1)
                              RegCloseKey_(NewKey)
                              SendMessage_(#HWND_BROADCAST, Editor_RunOnceMessage, "OPENFILE", 0)
                              End
                    EndIf
          EndIf
EndProcedure
Procedure RunOnce_Message()
          If GetVersion_() & $FF0000  ; Windows NT/XP
                    X = RegOpenKeyEx_(#HKEY_CLASSES_ROOT, "Applications\PureASM.exe\",0,#KEY_ALL_ACCESS, @NewKey)
          Else  ; La même chose pour Win9x
                    X = RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Classes\PureASM.exe\", 0, #KEY_ALL_ACCESS, @NewKey)
          EndIf
          If X = #ERROR_SUCCESS
                    a$ = Space(2000) : ASize = 2000
                    RegQueryValueEx_(NewKey, "RunOnce_FileName", 0, 0,  @a$, @ASize)
                    RegSetValueEx_(NewKey, "RunOnce_FileName", 0, #reg_sz,  "", 1)
                    RegCloseKey_(NewKey)
                    If a$ <> ""
                              OuvrirFichier(a$)
                              SendMessage_(hEditeur()\Handle, #EM_SETSEL, 0, 0)
                    EndIf
          EndIf
EndProcedure
Procedure PanelCallback(WindowId, message, wParam, lParam)
          Select message
                    Case #WM_PAINT
                              If NoPaintPanel : ProcedureReturn 0 :EndIf
                              If SplitterAction
                                        GetWindowRect_(GadgetID(PanelCode),wPanelRect.RECT)
                                        GetWindowRect_(hEditeur()\Handle,wListeRect.RECT)
                                        hPanel = wListeRect\top-wPanelRect\top
                                        GetClientRect_(GadgetID(PanelCode),PanelRect.RECT)
                                        PanelRect\top = hPanel
                                        ValidateRect_(GadgetID(PanelCode),@PanelRect)
                              EndIf
                              ProcedureReturn CallWindowProc_(OldPanelCallBack, WindowId,message, wParam, lParam)
                    Case #WM_LBUTTONDOWN
                              NoPaintPanel = #True
                              CallWindowProc_(OldPanelCallBack, WindowId,message, wParam, lParam)
                              SendMessage_(GadgetID(PanelCode),#WM_LBUTTONUP,0,0)
                              ProcedureReturn 0
                    Case #WM_LBUTTONUP
                              If NoPaintPanel
                                        NoPaintPanel = #False
                                        ProcedureReturn CallWindowProc_(OldPanelCallBack,WindowId,message,wParam,lParam)
                              Else : ProcedureReturn 0
                              EndIf
                    Default
                              ProcedureReturn CallWindowProc_(OldPanelCallBack,WindowId,message,wParam,lParam)
          EndSelect
EndProcedure
Procedure SLVCallback(WindowId, message, wParam, lParam)
          Select message
                    Case #WM_PAINT
                              If NoPaintSignet : ProcedureReturn 0 :EndIf
                              If SplitterAction
                                        GetWindowRect_(GadgetID(PanelSignet),wPanelRect.RECT)
                                        GetWindowRect_(GadgetID(ListeSignetID),wListeRect.RECT)
                                        hPanel = wListeRect\top-wPanelRect\top
                                        GetClientRect_(GadgetID(PanelSignet),PanelRect.RECT)
                                        PanelRect\top = hPanel
                                        ValidateRect_(GadgetID(PanelSignet),@PanelRect)
                              EndIf
                              ProcedureReturn CallWindowProc_(OldSLVCallBack, WindowId,message, wParam, lParam)
                    Case #WM_LBUTTONDOWN
                              NoPaintSignet = #True
                              CallWindowProc_(OldSLVCallBack, WindowId,message, wParam, lParam)
                              SendMessage_(GadgetID(PanelSignet),#WM_LBUTTONUP,0,0)
                              ProcedureReturn 0
                    Case #WM_LBUTTONUP
                              If NoPaintSignet
                                        NoPaintSignet = #False
                                        ProcedureReturn CallWindowProc_(OldSLVCallBack,WindowId,message,wParam,lParam)
                              Else : ProcedureReturn 0
                              EndIf
          Default
                              ProcedureReturn CallWindowProc_(OldSLVCallBack,WindowId,message,wParam,lParam)
          EndSelect
EndProcedure
Procedure SplitterCallback(WindowId, message, wParam, lParam)
          Select message
                    Case #WM_LBUTTONDOWN
                              SplitterAction = #True
                              ProcedureReturn CallWindowProc_(OldSplitterCallBack, WindowId,message, wParam, lParam)
                    Case #WM_LBUTTONUP
                              SplitterAction = #False
                              InvalidateRect_(GadgetID(PanelCode),0,1)
                              ProcedureReturn CallWindowProc_(OldSplitterCallBack, WindowId,message, wParam, lParam)
                    Case #WM_MOUSEMOVE
                              If SplitterMove<>GetGadgetState(Splitter) And SplitterAction
                                        InvalidateRect_(GadgetID(PanelSignet), 0, 1)
                                        SendMessage_(GadgetID(PanelSignet),#WM_PAINT,0,0)
                                        InvalidateRect_(GadgetID(PanelCode), 0, 1)
                                        SendMessage_(GadgetID(PanelCode),#WM_PAINT,0,0)
                                        InvalidateRect_(hEditeur()\Handle,0,1)
                                        SendMessage_(hEditeur()\Handle,#WM_PAINT,0,0)
                                        NumPanel = GetGadgetState(PanelSignet)
                                        If NumPanel = 0
                                                  InvalidateRect_(GadgetID(ListeSignetID),0,1)
                                                  SendMessage_(GadgetID(ListeSignetID),#WM_PAINT,0,0)
                                        ElseIf NumPanel = 1
                                                  InvalidateRect_(GadgetID(ListeLabelID),0,1)
                                                  SendMessage_(GadgetID(ListeLabelID),#WM_PAINT,0,0)
                                        ElseIf NumPanel = 2
                                                  InvalidateRect_(GadgetID(ListeVariableID),0,1)
                                                  SendMessage_(GadgetID(ListeVariableID),#WM_PAINT,0,0)
                                        EndIf
                                        SplitterMove = GetGadgetState(Splitter)
                              EndIf
                              ProcedureReturn CallWindowProc_(OldSplitterCallBack, WindowId,message, wParam, lParam)
                    Default
                              ProcedureReturn CallWindowProc_(OldSplitterCallBack,WindowId,message,wParam,lParam)
          EndSelect
EndProcedure
Procedure.l myWindowCallback(WindowId, message, wParam, lParam) 
          Select message 
                    Case #WM_NOTIFY 
                              *LVCDHeader.NMLVCUSTOMDRAW = lParam 
                              Select *LVCDHeader\nmcd\hdr\hwndFrom
                                        Case GadgetID(ListeSignetID)
                                                  Select *LVCDHeader\nmcd\hdr\Code
                                                            Case #NM_CUSTOMDRAW 
                                                                      Select *LVCDHeader\nmcd\dwDrawStage 
                                                                                Case #CDDS_PREPAINT 
                                                                                          ProcedureReturn #CDRF_NOTIFYITEMDRAW 
                                                                                Case #CDDS_ITEMPREPAINT 
                                                                                          Lig.l = *LVCDHeader\nmcd\dwItemSpec 
                                                                                          If Mid(GetGadgetItemText(ListeSignetID,Lig,0),1,1) = ">"
                                                                                                    *LVCDHeader\clrTextBk = RGB(100,100,150) 
                                                                                          Else : *LVCDHeader\clrTextBk = RGB(100,150,100) 
                                                                                          EndIf
                                                                                          *LVCDHeader\clrText = RGB(250,250,250) 
                                                                                          SelectObject_(*LVCDHeader\nmcd\hDC,hFont) 
                                                                                          ProcedureReturn #CDRF_NEWFONT 
                                                                      EndSelect 
                                                            Case #LVN_ITEMCHANGED
                                                                      *nmLV.NM_LISTVIEW = lParam
                                                                      If *nmLV\unewstate & #LVIS_SELECTED
                                                                                SelectElement(ListeS(),*nmLV\iItem)
                                                                                PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                                                Difference = ListeS()\Ligne - PremiereLigneVisible
                                                                                NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                                                While (PremiereLigneVisible+TotalLignesVisible+Difference) > NombreDeLignes : Difference - 1 : Wend
                                                                                SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,Difference)
                                                                                AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                                                lvi.LV_ITEM
                                                                                lvi\Mask=#LVIF_STATE
                                                                                lvi\iItem=*nmLV\iItem
                                                                                lvi\state=0
                                                                                lvi\stateMask=#LVIS_SELECTED
                                                                                SendMessage_(GadgetID(ListeSignetID),#LVM_SETITEMSTATE,*nmLV\iItem,lvi)
                                                                                ProcedureReturn 0
                                                                      EndIf
                                                  EndSelect
                                                  SetFocus_(hEditeur()\Handle)
                                        Case GadgetID(ListeLabelID)
                                                  Select *LVCDHeader\nmcd\hdr\Code
                                                            Case #NM_CUSTOMDRAW 
                                                                      Select *LVCDHeader\nmcd\dwDrawStage 
                                                                                Case #CDDS_PREPAINT 
                                                                                          ProcedureReturn #CDRF_NOTIFYITEMDRAW 
                                                                                Case #CDDS_ITEMPREPAINT 
                                                                                          *LVCDHeader\clrTextBk = RGB(100,150,100) 
                                                                                          *LVCDHeader\clrText = RGB(250,250,250) 
                                                                                          SelectObject_(*LVCDHeader\nmcd\hDC,hFont) 
                                                                                          ProcedureReturn #CDRF_NEWFONT 
                                                                      EndSelect 
                                                            Case #LVN_ITEMCHANGED
                                                                      *nmLV.NM_LISTVIEW = lParam
                                                                      If *nmLV\unewstate & #LVIS_SELECTED
                                                                                SelectElement(ListeL(),*nmLV\iItem)
                                                                                PremiereLigneVisible = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                                                Difference = ListeL()\Ligne - PremiereLigneVisible
                                                                                NombreDeLignes = SendMessage_(hEditeur()\Handle,#EM_GETLINECOUNT,0,0)
                                                                                While (PremiereLigneVisible+TotalLignesVisible+Difference) > NombreDeLignes : Difference - 1 : Wend
                                                                                SendMessage_(hEditeur()\Handle, #EM_LINESCROLL, 0,Difference)
                                                                                AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                                                                lvi.LV_ITEM
                                                                                lvi\Mask=#LVIF_STATE
                                                                                lvi\iItem=*nmLV\iItem
                                                                                lvi\state=0
                                                                                lvi\stateMask=#LVIS_SELECTED
                                                                                SendMessage_(GadgetID(ListeLabelID),#LVM_SETITEMSTATE,*nmLV\iItem,lvi)
                                                                                ProcedureReturn 0
                                                                      EndIf
                                                  EndSelect
                                                  SetFocus_(hEditeur()\Handle)
                                        Case GadgetID(ListeVariableID)
                                                  Select *LVCDHeader\nmcd\hdr\Code
                                                            Case #NM_CUSTOMDRAW 
                                                                      Select *LVCDHeader\nmcd\dwDrawStage 
                                                                                Case #CDDS_PREPAINT 
                                                                                          ProcedureReturn #CDRF_NOTIFYITEMDRAW 
                                                                                Case #CDDS_ITEMPREPAINT 
                                                                                          *LVCDHeader\clrTextBk = RGB(100,150,100) 
                                                                                          *LVCDHeader\clrText = RGB(250,250,250) 
                                                                                          SelectObject_(*LVCDHeader\nmcd\hDC,hFont) 
                                                                                          ProcedureReturn #CDRF_NEWFONT 
                                                                      EndSelect 
                                                            Case #LVN_ITEMCHANGED
                                                                      *nmLV.NM_LISTVIEW = lParam
                                                                      If *nmLV\unewstate & #LVIS_SELECTED
                                                                                lvi.LV_ITEM
                                                                                lvi\Mask=#LVIF_STATE
                                                                                lvi\iItem=*nmLV\iItem
                                                                                lvi\state=0
                                                                                lvi\stateMask=#LVIS_SELECTED
                                                                                SendMessage_(GadgetID(ListeVariableID),#LVM_SETITEMSTATE,*nmLV\iItem,lvi)
                                                                                ProcedureReturn 0
                                                                      EndIf
                                                  EndSelect
                                                  SetFocus_(hEditeur()\Handle)
                              EndSelect
                    Case #WM_SIZE
                              ResizeEditeurCode()
                              ProcedureReturn 0
                    Case #WM_ACTIVATE
                              If wParam & $FFFF <> #WA_INACTIVE
                                        SetFocus_(hEditeur()\Handle)
                              EndIf
                              ProcedureReturn 0
                    Case Editor_RunOnceMessage
                              If PeekS(wParam,9) = "OPENFILE"
                                        RunOnce_Message()
                                        SetForegroundWindow_(hwnd)
                                        EnableWindow_(hwnd,#True)
                                        If IsZoomed_(hwnd)
                                                  ShowWindow_(hwnd, #SW_MAXIMIZE)
                                        Else : ShowWindow_(hwnd, #SW_RESTORE)
                                        EndIf
                                        ProcedureReturn 0
                              EndIf
                    Default
                              ProcedureReturn #PB_ProcessPureBasicEvents
          EndSelect 
EndProcedure 
;- Boucle Principale
Parametre$ = ""
Repeat
          p$ = ProgramParameter()
          Parametre$ + p$ + " "
Until p$ = ""
Parametre$ = Trim(Parametre$)
RunOnce(Parametre$)
SystemPath.s=Space(255)
GetSystemDirectory_(SystemPath,255)
hwnd = OpenWindow( 0, 0, 0, #Longueur, #Largeur,  #PB_Window_Invisible | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "PureASM 1.0")
SendMessage_(hwnd,#wm_seticon,#False,ExtractIcon_(0,SystemPath+"\shell32.dll",130))
ToolBar = CreateToolBar( 0, hwnd)
If ToolBar
          ToolBarStandardButton(#IDM_FILE_NEW, #PB_ToolBarIcon_New)
          ToolBarStandardButton(#IDM_FILE_OPEN, #PB_ToolBarIcon_Open)
          ToolBarStandardButton(#IDM_FILE_SAVE, #PB_ToolBarIcon_Save)
          ToolBarSeparator()
          ToolBarStandardButton(#IDM_EDIT_CUT, #PB_ToolBarIcon_Cut)
          ToolBarStandardButton(#IDM_EDIT_COPY, #PB_ToolBarIcon_Copy)
          ToolBarStandardButton(#IDM_EDIT_PASTE, #PB_ToolBarIcon_Paste)
          ToolBarSeparator()
          ToolBarImageButton(#IDM_EDIT_DELETE, #PB_ToolBarIcon_Delete)
          ToolBarSeparator()
          ToolBarStandardButton(#IDM_EDIT_UNDO, #PB_ToolBarIcon_Undo)
          ToolBarStandardButton(#IDM_EDIT_REDO, #PB_ToolBarIcon_Redo)
          ;ToolBarSeparator()
          ;ToolBarImageButton(#IDM_EDIT_COMPIL, ExtractIcon_(0,SystemPath+"\shell32.dll",165))
EndIf
Tab.s = Chr(9)
hMenu = CreateMenu( 0, hwnd)
If hMenu
          MenuTitle("Fichier")
          MenuItem(#IDM_FILE_NEW, "Nouveau")
          MenuItem(#IDM_FILE_OPEN, "Ouvrir")
          MenuItem(#IDM_FILE_SAVE, "Enregistrer")
          MenuBar()
          MenuItem(#MENU_QUITTER, "Quitter")
          MenuTitle("Edition")
          MenuItem(#IDM_EDIT_CUT, "Couper"+Tab+"Ctl+X")
          MenuItem(#IDM_EDIT_COPY, "Copier"+Tab+"Ctl+C")
          MenuItem(#IDM_EDIT_PASTE, "Coller"+Tab+"Ctl+V")
          MenuItem(#IDM_EDIT_DELETE, "Suprimer")
          MenuBar()
          MenuItem(#IDM_EDIT_SELECTALL, "Sélectionner tout")
          MenuTitle("Projet")
          MenuItem(#OPTIONS, "Options du projet")
          EnableMenuItem_(hMenu, #OPTIONS,#True)
          MenuBar()
          MenuItem(#COMPILER, "Compiler")
          EnableMenuItem_(hMenu, #COMPILER,#True)
          MenuTitle("Aide")
          MenuItem(#IDM_HELP_ABOUT, "A propos de PureASM...")
EndIf
If CreatePopupMenu(1)
          MenuItem(#IDM_EDIT_CUT, "Couper"+Tab+"Ctl+X")
          MenuItem(#IDM_EDIT_COPY, "Copier"+Tab+"Ctl+C")
          MenuItem(#IDM_EDIT_PASTE, "Coller"+Tab+"Ctl+V")
          MenuItem(#IDM_EDIT_DELETE, "Suprimer")
          MenuBar()
          MenuItem(#IDM_EDIT_SELECTALL, "Sélectionner tout")
EndIf
StatusBar = CreateStatusBar( 0, hwnd)
If StatusBar
          BarT = WindowWidth() - 120
          If BarT < 0 : BarT = 0 : EndIf
          AddStatusBarField( 100)
          AddStatusBarField( BarT)
          StatusBarText(0, 1, " Programme Eric Ducoulombier (Erix14)", #PB_StatusBar_BorderLess)
EndIf 
;/
hDC = StartDrawing(WindowOutput())
DrawingFont(LoadFont(0,"Verdana",10))
TexteHeight = GetTextHeight(hDC)
StopDrawing()
hFont = CreateFont_(TexteHeight,0,0,0,0,0,0,0,0,0,0,0,0,"Verdana")
PureBasicRepertoire = CheminPureBasic()
CreateGadgetList(hwnd) 
PanelCode = PanelGadget(#PB_Any,0,0,0,0) : EnleveTabulation(GadgetID(PanelCode))
OldPanelCallBack = SetWindowLong_(GadgetID(PanelCode),#GWL_WNDPROC,@PanelCallback())
PanelSignet = PanelGadget(#PB_Any,0,0,0,0) : EnleveTabulation(GadgetID(PanelSignet))
OldSLVCallBack = SetWindowLong_(GadgetID(PanelSignet),#GWL_WNDPROC,@SLVCallback())
Splitter = SplitterGadget(#PB_Any,0,0,0,0,PanelCode,PanelSignet,#PB_Splitter_Vertical) : EnleveTabulation(GadgetID(Splitter))
OldSplitterCallBack = SetWindowLong_(GadgetID(Splitter),#GWL_WNDPROC,@SplitterCallback())
AddGadgetItem(PanelSignet, 0, "Signet")
ListeSignetID = ListIconGadget(#PB_Any,0,0,0,0,"Non trié",0,#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
SendMessage_(GadgetID(ListeSignetID),#lvm_setbkcolor,0,RGB(100,150,100))
SendMessage_(GadgetID(ListeSignetID),#lvm_settextcolor,0,RGB(250,250,250))
SetGadgetFont(ListeSignetID,hFont)
AddGadgetItem(PanelSignet, 1, "Label")
ListeLabelID = ListIconGadget(#PB_Any,0,0,0,0,"Non trié",0,#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
SendMessage_(GadgetID(ListeLabelID),#lvm_setbkcolor,0,RGB(100,150,100))
SendMessage_(GadgetID(ListeLabelID),#lvm_settextcolor,0,RGB(250,250,250))
SetGadgetFont(ListeLabelID,hFont)
AddGadgetItem(PanelSignet, 2, "Variable")
ListeVariableID = ListIconGadget(#PB_Any,0,0,0,0,"Non trié",0,#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
SendMessage_(GadgetID(ListeVariableID),#lvm_setbkcolor,0,RGB(100,150,100))
SendMessage_(GadgetID(ListeVariableID),#lvm_settextcolor,0,RGB(250,250,250))
SetGadgetFont(ListeVariableID,hFont)
CloseGadgetList()
;/
Restore CodeASM
For t=1 To 294 : AddElement(Code()) : Read Code() : Next
For t=1 To 40 : AddElement(Registre()) : Read Registre() : Next
If Parametre$ <> "" : OuvrirFichier(Parametre$)
Else : CreerEditeurCode("Nouveau")
EndIf
ResizeEditeurCode() : SetGadgetState(Splitter,SplitterPos)
SetGadgetState(PanelCode,CountGadgetItems(PanelCode)-1)
SendMessage_(hEditeur()\Handle, #EM_SETSEL, 0, 0)
SetFocus_(hEditeur()\Handle)
SetWindowCallback(@myWindowCallback())
ShowWindow_(hwnd,#SW_MAXIMIZE)
Repeat
          Select WaitWindowEvent()
                    Case #PB_EventMenu
                              Select EventMenuID()
                                        Case #IDM_FILE_NEW
                                                  CreerEditeurCode("Nouveau")
                                                  SetGadgetState(PanelCode,CountGadgetItems(PanelCode)-1)
                                                  MoveWindow_(hEditeur()\Handle,1,1,GetInnerSizeWidth(PanelCode)-2,GetInnersizeHeight(PanelCode)-2,#False)
                                                  SetFocus_(hEditeur()\Handle)
                                        Case #IDM_FILE_OPEN
                                                  OuvrirFichier("")
                                                  SendMessage_(hEditeur()\Handle, #EM_SETSEL,0,0)
                                                  SetFocus_(hEditeur()\Handle)
                                        Case #IDM_FILE_SAVE
                                                  FileName$ = SaveFileRequester("Enregistrer le fichier ASM", "", "Fichier ASM (*.asm)|*.asm", 1)
                                                  If FileName$
                                                            If UCase(Right(FileName$,3)) <> ".ASM"
                                                                      FileName$+".asm"
                                                            EndIf
                                                            iFile = CreateFile(#PB_Any,FileName$)
                                                            If iFile
                                                                      FileLength = SendMessage_(hEditeur()\Handle, #WM_GETTEXTLENGTH, 0, 0)
                                                                      *TextBuffer = LocalAlloc_(#LMEM_ZEROINIT, FileLength+1)
                                                                      SendMessage_(hEditeur()\Handle, #WM_GETTEXT, FileLength+1,*TextBuffer)
                                                                      WriteData(*TextBuffer, FileLength)
                                                                      LocalFree_(*TextBuffer)
                                                                      CloseFile(iFile)
                                                            EndIf
                                                  EndIf
                                        Case #MENU_QUITTER
                                                  End
                                        Case #IDM_EDIT_CUT
                                                  SendMessage_(hEditeur()\Handle, #WM_CUT, 0, 0)
                                        Case #IDM_EDIT_COPY
                                                  SendMessage_(hEditeur()\Handle, #WM_COPY, 0, 0)
                                        Case #IDM_EDIT_PASTE
                                                  SendMessage_(hEditeur()\Handle, #WM_PASTE, 0, 0)
                                        Case #IDM_EDIT_DELETE
                                                  SendMessage_(hEditeur()\Handle, #EM_REPLACESEL, #True, 0)
                                        Case #IDM_EDIT_SELECTALL
                                                  Editor_Select(hEditeur()\Handle,1,-1,-1,-1)
                                        Case #IDM_EDIT_UNDO
                                                  SendMessage_(hEditeur()\Handle, #EM_UNDO, 0, 0)
                                        Case #IDM_EDIT_REDO
                                                  SendMessage_(hEditeur()\Handle, #EM_REDO, 0, 0)
                                        Case #IDM_HELP_ABOUT
                                                  AboutMessage.s = "Novembre 2004"+Chr(10)+"Programme Eric Ducoulombier (Erix14)"
                                                  ShellAbout_(hwnd, @"PureASM 1.0", @AboutMessage, LoadIcon_(#Null, #IDI_APPLICATION))
                                                  SetFocus_(hEditeur()\Handle)
                              EndSelect
                    Case #PB_EventGadget
                              Select EventGadgetID()
                                        Case PanelCode
                                                  NumPanel = GetGadgetState(PanelCode)
                                                  SelectElement(hEditeur(),NumPanel)
                                                  ChargeSLV(NumPanel)
                                                  GetWindowRect_(GadgetID(PanelCode),wPanelRect.RECT)
                                                  GetWindowRect_(hEditeur()\Handle,wEditeurRect.RECT)
                                                  hPanel = wEditeurRect\top-wPanelRect\top
                                                  GetClientRect_(GadgetID(PanelCode),PanelRect.RECT)
                                                  PanelRect\top = hPanel
                                                  ValidateRect_(GadgetID(PanelCode),@PanelRect)
                                                  MoveWindow_(hEditeur()\Handle,1,1,GetInnerSizeWidth(PanelCode)-2,GetInnersizeHeight(PanelCode)-2,#False)
                                                  SetFocus_(hEditeur()\Handle)
                                                  AncienDebutLigne = SendMessage_(hEditeur()\Handle,#EM_GETFIRSTVISIBLELINE,0,0)
                                        Case PanelSignet
                                                  GetWindowRect_(GadgetID(PanelSignet),wPanelRect.RECT)
                                                  GetWindowRect_(GadgetID(ListeSignetID),wListeRect.RECT)
                                                  hPanel = wListeRect\top-wPanelRect\top
                                                  GetClientRect_(GadgetID(PanelSignet),PanelRect.RECT)
                                                  PanelRect\top = hPanel
                                                  ValidateRect_(GadgetID(PanelSignet),@PanelRect)
                                                  NumPanel = GetGadgetState(PanelSignet)
                                                  If NumPanel = 0
                                                            InvalidateRect_(GadgetID(ListeSignetID),0,1)
                                                            SendMessage_(GadgetID(ListeSignetID),#WM_PAINT,0,0)
                                                  ElseIf NumPanel = 1
                                                            InvalidateRect_(GadgetID(ListeLabelID),0,1)
                                                            SendMessage_(GadgetID(ListeLabelID),#WM_PAINT,0,0)
                                                  ElseIf NumPanel = 2
                                                            InvalidateRect_(GadgetID(ListeVariableID),0,1)
                                                            SendMessage_(GadgetID(ListeVariableID),#WM_PAINT,0,0)
                                                  EndIf
                                                  SetFocus_(hEditeur()\Handle)
                              EndSelect
                    Case #PB_Event_CloseWindow: End 
          EndSelect 
ForEver 
DataSection
CodeASM:
;-         Instructions des 8086/8088    
Data.s "MOV","AAA","AAD","AAM","AAS","ADC","ADD","AND","CALL","CBW","CLC","CLD","CLI","CMC","CMP","CMPSB","CMPSB","CMPSW","CWD"
Data.s "MOVSW","MUL","NEG","NOP","NOT","OR","OUT","POP","POPF","PUSH","PUSHF","RCL","RCR","REP","REPE","REPNE","REPNZ","XOR"
Data.s "DAS","DEC","DIV","ESC","HLT","IDIV","IMUL","IN","INC","INT","INTO","IRET","JA","JAE","JB","JBE","JC","JCXZ","JE","JG","JGE","JL"
Data.s "JLE","JMP","JNA","JNAE","JNB","JNBE","JNC","JNE","JNG","JNL","JNLE","JNO","JNP","JNS","JNZ","JO","JP","JPE","JPO","JS","JZ"
Data.s "LAHF","LDS","LEA","LES","LOCK","LODSB","LODSW","LOOP","LOOPE","LOOPNE","LOOPNZ","LOOPZ","MOVSB","DAA"
Data.s "REPZ","RET","ROL","ROR","SAHF","SAL","SAR","SBB","SCASB","SCASW","SHL","SHR","STC","STD","STI","STOSB","STOSW"
Data.s "SUB","TEST","WAIT","XCHG","XLAT"
;-         Coprocesseur numérique 8087
Data.s "F2XM1","FABS","FADD","FADDP","FBLD","FBSTP","FCHS","FCLEX","FCOM","FCOMP","FCOMPP","FDECSTP","FDISI"
Data.s "FDIV","FDIVP","FDIVR","FDIVRP","FENI","FFREE","FIADD","FICOM","FICOMP","FIDIV","FIDIVR","FILD","FIMUL","FINCSTP"
Data.s "FINIT","FIST","FISTP","FISUB","FISUBR","FLD","FLD1","FLDCW","FLDENV","FLD2E","FLDL2T","FLDLG2","FLDLN2","FLDPI"
Data.s "FLDZ","FMUL","FMULP","FNCLEX","FNDISI","FNENI","FNINIT","FNOP","FNSAVE","FNSTCW","FNSTENV","FNSTSW"
Data.s "FPATAN","FPREM","FPTAN","FRNDINT","FRSTOR","FSAVE","FSCALE","FSQRT","FST","FSTCW","FSTENV","FSTP","FSTSW"
Data.s "FSUB","FSUBP","FSUBR","FSUBRP","FTST","FWAIT","FXAM","FXCH","FXTRACT","FYL2X","FYL2XP1"
;-         Instructions du 80286
Data.s "ARPL","BOUND","CLTS","ENTER","INS","INSB","INSW","LAR","LEAVE","LGDT","LIDT","LLDT","LMSW","LSL","LTR","OUTS"
Data.s "OUTSB","OUTSW","POPA","PUSHA","SGDT","SIDT","SLDT","SMSW","STR","VERR","VERW"
;-         Coprocesseur numérique 80287
Data.s "FSETPM"
;-         Instructions du 80386
Data.s "BSF","BSR","BT","BTC","BTR","BTS","CDQ","CMPSD","CWDE","INSD","JECXZ","LFS","LGS","LODSD","LSS","MOVSD","MOVSX"
Data.s "MOVZX","OUTSD","POPAD","POPFD","PUSHAD","PUSHFD","SCASD","SETA","SETAE","SETB","SETBE","SETC","SETE","SETG"
Data.s "SETGE","SETL","SETLE","SETNA","SETNAE","SETNB","SETNBE","SETNC","SETNE","SETNG","SETNGE","SETNL"
Data.s "SETNLE","SETNO","SETNP","SETNS","SETNZ","SETO","SETP","SETPE","SETPO","SETS","SETZ","SHLD","SHRD","STOSD"
;-         Coprocesseur numérique 80387
Data.s "FCOS","FNSTSW","FPREM1","FSIN","FSINCOS","FSTSW","FUCOM","FUCOMP","FUCOMPP"
;-         Instructions du 80486
Data.s "BSWAP","CMPXCHG","INVD","INVD","INVLPG","WBINVD","XADD"
;-         Les registres
Data.s "EAX","EBX","ECX","EDX","ESP","EBP","EDI","ESI"
Data.s "AX","BX","CX","DX","SP","BP","DI","SI"
Data.s "AH","AL","BH","BL","CH","CL","DH","DL"
Data.s "ST0","ST1","ST2","ST3","ST4","ST5","ST6","ST7"
;-
Data.s "PUBLIC","EXTRN","MACRO","FORMAT","SECTION","RD","DB","DATA"   
EndDataSection          
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ah ouais, c'est mieux :lol:

Ben maintenant, t'as plus quà récupérer l'explication de ton premier post pour la coller dans la première partie du code remis au propre, et comme ça, Crystal Noir pourra faire le ménage en virant tes morceaux de codes et mon post qui les suit :lol:
:jesors:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Salut erix14

tu serais pas programmeur ? :D

Je me suis fait un exe. La présentation est Ok.

Je n'arrive à compiler aucun fichier pb :roll:
J'ai l'erreur le fichier pb n'a pas pu être compilé.

Autre chose, tu pourrais ajouter comme fichiers à ouvrir les fichier ayant l'extension asm en plus de ceux pb, et aussi le fait de pouvoir les importer en tant que fichier asm.

Tu as mis une coloration syntaxique ? Il me semble que non.

Bon j'arrête avec mes demandes. :lol:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Denis,
Normalement, la procédure CheminPureBasic() trouve tout seul le répertoire du compilateur PureBasic, essaie de rentrer le chemin manuellement pour voir si ça vient de la ?
Si sa marche, qui aura un joli code en couleur...
Et oui, j'ai fait des études supérieures en informatique.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

erix14 a écrit :Denis,
Normalement, la procédure CheminPureBasic() trouve tout seul le répertoire du compilateur PureBasic, essaie de rentrer le chemin manuellement pour voir si ça vient de la ?
Si sa marche, qui aura un joli code en couleur...
Et oui, j'ai fait des études supérieures en informatique.
Je le savais :D

Sinon la procedure CheminPureBasic() retourne le bon chemin, j'ai mis un debug OutputDirectory$

J'ai XP est le pack 1 (j'ai fini par virer le 2)
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Ton source *.pb, que tu transmets à PureASM ne comporte aucune erreur ? il se compile bien avec ton éditeur PureBasic ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'ai les mêmes problèmes que Denis!

:)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

C'est ça qui coince

Code : Tout sélectionner

prrocessID.l = RunProgram(PureBasicRepertoire+"PBCompiler.exe",Chr(34)+file+Chr(34)+" /COMMENTED","",1|2) 
mais j'ai mis des débug partout et j'ai les bonnes valeurs. Je vais encore regarder.

Sinon, j'ai demandé à fred une nouvelle commande pour le shell pour avoir un fichier asm sans lancer l'exe et il m'a dit qu'il allait regarder.

Moi j'ai utilisé cette astuce pour générer l'asm sans lancer l'exe

Code : Tout sélectionner

CheminCompilateur + "PBCompiler.exe", Chr(34) + FichiersPBPourAsm + Chr(34) + " /COMMENTED " + Chr(34) + FichiersPBPourAsm + Chr(34) + " /EXE " + Chr(34) + " " + Chr(34)
donc je lui demande dans la même ligne de commande de créer un exe indépendant mais je ne lui donne pas de nom et ça fonctionne, seul le fichier asm est créé.

Fred, ça serait mieux une tite commande spécifique :D
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Merci Denis,
je viens de mettre ton astuce dans mon programme, ça marche très bien.
J'ai commencé à programmer PureASM avec WinXP SP1 est maintenant le SP2, est ça a toujours toujours bien marché.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Toujours le même problème Runprogram échoue.

Tous les paramètres semblent corrects. Je vais encore tester et faire des essais. :D
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Par chance j'ai un deuxième ordinateur, où j'ai réussi à obtenir le même problème. C'est un problème de paramètres, sur mon premier ordinateur CheminPureBasic() renvoie le chemin complet, sur le deuxième il manque "Compilers\" et donc le problème du compilateur(comme il ne le trouve pas)
remplacer ces lignes :

Code : Tout sélectionner

processID.l = RunProgram(PureBasicRepertoire+"PBCompiler.exe",Chr(34)+file+Chr(34)+" /COMMENTED","",1|2) 
If processID = 0
MessageRequester("Erreur", "Le fichier PB n'a pu être compilé", #MB_ICONERROR)
Else : KillProcessPureBasic()
EndIf
fileASM.s = PureBasicRepertoire+"PureBasic.asm" 
par

Code : Tout sélectionner

                                        processID.l = RunProgram(PureBasicRepertoire+"Compilers\PBCompiler.exe",Chr(34)+file+Chr(34)+" /COMMENTED","",1|2) 
If processID = 0
MessageRequester("Erreur", "Le fichier PB n'a pu être compilé", #MB_ICONERROR)
Else : KillProcessPureBasic()
EndIf
fileASM.s = PureBasicRepertoire+"Compilers\PureBasic.asm" 
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Effectivement je n'avais pas vu. :oops:

J'ai compilé en exe, je tente d'ouvrir un pb, mais aucun code asm ne s'affiche. Si j'exécute le code depuis pure et que je tente l'ouverture d'un fichier pb, ça ferme l'exe sans autre forme de procès.

Un autre problème lorsque je compile, il arrive parfois d'avoir la boite de MS qui indique qu'il y a eu une erreur et qui demande si on veut leur envoyer le code.

J'aimerais bien utiliser PureAsm avec mes propres fichiers asm. :D
Répondre