PureASM 1.0

Partagez votre expérience de PureBasic avec les autres utilisateurs.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

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

Message par Anonyme2 »

J'ai pas regardé le code mais le fichier asm créé se situe dans le répertoire compilers, on doit avoir le même genre de problème, le chemin d'accès est incomplet je pense.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Oui Denis,
j'avais fait la modifie plus haut :D

Code : Tout sélectionner

fileASM.s = PureBasicRepertoire+"Compilers\PureBasic.asm" 
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je n'ai toujours rien qui apparait. Et toujours le problème de fermeture lorsque j'exécute depuis PB, je tente d'ouvrir le fichier pb et PureAsm ferme.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Une fois le problème "Compilers\" résolut sur mon deuxième ordinateur, ça marche impeccable. Maintenant je n'ai plus aucun ordinateur où ça ne fonctionne pas... Donc, je vais avoir du mal à trouver le problème :? j'espère que ça ne va pas te décourager et que tu finiras par trouver la solution car c'est un outil qui met très utile, ça serait dommage que tu n'en profites pas. :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Erix14, c'est impec :D

Merci

J'avais malencontreusement déplacé un Chr(34) et PureBasic.asm n'était pas généré.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Voici la version 1.1 qui marche sur mes deux ordi, avec l'astuce de Denis pour ne pas voir l'exe, plus ouverture des fichiers ASM (la colorisation n'est prevu que pour les fichiers généré par le compilateur PB)
Partie 1 :

Code : Tout sélectionner

;/
;/                   -  PureASM 1.1  - 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_OPEN_ASM
          #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 Or c=13
                              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='-' Or c=9
                              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
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
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Partie 2:

Code : Tout sélectionner

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 " + Chr(34) + file + Chr(34) + " /EXE " + Chr(34) + " " + Chr(34),"",1|2) 
                    If processID = 0
                              MessageRequester("Erreur", "Le fichier PB n'a pu être compilé", #MB_ICONERROR)
                    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 OuvrirFichierASM()
          fileASM.s = OpenFileRequester("Ouvrir un fichier ASM", "", "Fichiers ASM|*.asm", 0)
          If fileASM<>""
                    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(fileASM)
                              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.1")
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(#IDM_FILE_OPEN_ASM, "Ouvrir fichier ASM")
          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()
If FindString(UCase(PureBasicRepertoire),"COMPILERS\",1) = 0
          PureBasicRepertoire + "Compilers\"
EndIf
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_OPEN_ASM
                                                  OuvrirFichierASM()
                                                  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.1", @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          
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je l'adopte :D

Le petit plus immédiat, la sélection de la police, car je préfère une police qui permette un alignement dans la rédaction c'est-à-dire si je met une tabulation de 3 espaces, quelque soit l'instruction asm, j'aurais tout d'aligné.


Merci, bon code et exe très petit. :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

une fois installé je n'arrive pas a charger un fichier PB avec ouvrir !!
sinon si je fait copier coller dans pureassembleur , je sauve , je recharge j'ai bien le code asm !!

mais le chargement direct ne fonctionne pas chez moi !
:D


ps : sinon , c'est geant , et t'arrete quand tu veux, d'ecoeurer ton monde ! :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Chez moi, ça marche pas.

J'ai pourtant fait un .exe que j'ai mis dans les outils avec %File, mais dès que je veux l'ouvrir, j'ai droit au message d'erreur du prog, et à un joli plantage de windows.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est OK pour moi!

:)
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Désolé de ne pas avoir réagit plus vite, mais Merci erix14 pour ce très bon utilitaire.

Du coup, en arrivant après la bataille, le prog marche bien chez moi :lol:
Cependant, l’option « Supprimer » n’est pas fonctionnelle et l’icône dans le menu n’apparaît meme pas…

Si tu t’en sens le courage, je dois avouer que souvent, je ne souhaite pas visualiser le code en entier, mais juste une portion.
J’utilise jaPBe et le top du top serait de sélectionner la partie de code PB à traduit en ASM et que la traduction s'affiche à l'écran sous la forme d’un texte flottant style 'Tooltip' !!?

Ok, c’est du luxe, c’est vraiment pas trivial, mais bon ca peut rendre la chose fort fonctionnelle, non ?!
Peut-etre pour une future version de PurASM :wink:
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Oui, Dräc, c'est faisable il suffira simplement de choisir dans préférences le mode de fonctionnement de PureASM. Mais il ne faut pas perdre de vue que pour obtenir le code assembleur, il faut que le code PureBasic puisse être compilé sans aucune erreur...
Dans une future version de PureASM je mettrai mes propres icônes, ce qui résoudra certainement le problème de l'icône "Supprimer"
a+ :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Salut erix14,

j'ai voulu ouvrir le fichier pb sur lequel je travaille et qui fonctionne bien mais Pureasm plante.

Je n'ai pas identifié le problème mais dès que j'ai un peu de temps j'essaye de voir ou ça coince.
Répondre