Aktuelle Zeit: 13.12.2018 23:22

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PB-IDE-Tool: Display ASM Code (Win,Lin,Mac)
BeitragVerfasst: 04.08.2018 11:10 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Dieses PB-IDE-Tool zeigt den ASM-Code vom PB-Compiler an (PB-Code wird nicht ausgeführt).
Der PB-Code kann dabei gespeichert oder nicht gespeichert sein.

Getestet unter Linux x64 und Windows XP.
Es wäre schön, wenn jemand das Tool noch unter aktuelleren Windows-Versionen und unter MacOS testen könnte.

Echt übel, wie unterschiedlich die Ausgabe der ASM-Datei ist.
Ich habe deswegen mal ein Thread im englischem Forum aufgemacht: Better output of the ASM file (it is too complicated)

Code:
;   Description: Displays the commented ASM code from the PB compiler
;            OS: Windows, Linux, Mac
; English-Forum:
;  French-Forum:
;  German-Forum: https://www.purebasic.fr/german/viewtopic.php?f=10&t=30935
; -----------------------------------------------------------------------------

; MIT License
;
; Copyright (c) 2018 Sicro
;
; Permission is hereby granted, free of charge, to any person obtaining a copy
; of this software and associated documentation files (the "Software"), to deal
; in the Software without restriction, including without limitation the rights
; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
; copies of the Software, and to permit persons to whom the Software is
; furnished to do so, subject to the following conditions:
;
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
;
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
; SOFTWARE.

; Tool Settings:
; - Arguments: "%HOME" "%FILE" "%TEMPFILE"
; - Event:     Menu Or Shortcut

EnableExplicit

; ================
;-Define Constants
; ================

#Program_Name     = "Display ASM Code"
#ErrorWindowTitle = #Program_Name + " - ERROR"

#Window_Main = 0

Enumeration Gadget
  #Editor_Output
  #Button_OpenStandardEditor
  #Button_CopyToClipboard
EndEnumeration

; =================
;-Define Procedures
; =================

Procedure.i OpenWithStandardProgram(FilePath$)
 
  Protected Result
 
  ; Avoid problems with paths containing spaces
  FilePath$ = #DQUOTE$ + FilePath$ + #DQUOTE$
 
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Windows
      ; https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-shellexecutew
      Result = Bool(ShellExecute_(0, "open", FilePath$, #Null, #Null, #SW_SHOW) > 32)
    CompilerCase #PB_OS_Linux
      ; https://portland.freedesktop.org/doc/xdg-open.html
      Result = Bool(RunProgram("xdg-open", FilePath$, GetCurrentDirectory()))
    CompilerCase #PB_OS_MacOS
      ; TODO: Test the code on MacOS
      Result = Bool(RunProgram("open", FilePath$, GetCurrentDirectory()))
  CompilerEndSelect
 
  ProcedureReturn Result
 
EndProcedure

; ======================
;-Define Local Variables
; ======================

Define CompilerHomePath$, CompilerFilePath$, WorkingDirectoryPath$, CodeFilePath$, CodeTempFilePath$,
       ASMCodeFilePath$, EXEFilePath$, OutputFilePathForStandardProgram$
Define ASMCode$, Output$, CompilerOutput$
Define Program, File, Event, IsCompilerError

; ==============================
;-Set Values For Local Variables
; ==============================

OutputFilePathForStandardProgram$ = GetTemporaryDirectory() + RemoveString(#Program_Name, " ") + "-Output.txt"

CompilerHomePath$ = ProgramParameter(0) ; "%HOME"
CompilerFilePath$ = CompilerHomePath$ + "compilers/pbcompiler"
CodeFilePath$     = ProgramParameter(1) ; "%FILE"
CodeTempFilePath$ = ProgramParameter(2) ; "%TEMPFILE"

If CodeFilePath$ = ""
  ; The code has not yet been saved
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    ASMCodeFilePath$ = CompilerHomePath$ + "compilers/purebasic.asm"
  CompilerElse
    ASMCodeFilePath$ = CompilerHomePath$ + "purebasic.asm"
  CompilerEndIf
Else
  ; The code has already been saved to a file
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    ASMCodeFilePath$ = CompilerHomePath$ + "compilers/purebasic.asm"
  CompilerElse
    ASMCodeFilePath$ = GetPathPart(CodeFilePath$) + "purebasic.asm"
  CompilerEndIf
EndIf

; The EXE file is only created so that the PB compiler does not execute the code, but only creates the ASM code
EXEFilePath$ = GetTemporaryDirectory() + "purebasic"

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
  WorkingDirectoryPath$ = GetPathPart(CompilerFilePath$)
CompilerElse
  WorkingDirectoryPath$ = GetPathPart(CodeFilePath$)
CompilerEndIf

; =======================
;-Delete Old Output Files
; =======================

; Make sure that there are no previous output files, to prevent old output files from being read, if an error occurs.
DeleteFile(ASMCodeFilePath$)
DeleteFile(EXEFilePath$)

; ====================
;-Create ASM Code File
; ====================

; Run the PB compiler to create the ASM code file
Program = RunProgram(CompilerFilePath$,
                     #DQUOTE$ + CodeFilePath$ + #DQUOTE$ + " --commented --executable " + #DQUOTE$ + EXEFilePath$ + #DQUOTE$,
                     WorkingDirectoryPath$,
                     #PB_Program_Open | #PB_Program_Read)

; Read the PB compiler output
If Program
  While ProgramRunning(Program)
    While AvailableProgramOutput(Program)
      CompilerOutput$ + ReadProgramString(Program) + #CRLF$
    Wend
  Wend
  IsCompilerError = Bool(ProgramExitCode(Program))
  CloseProgram(Program)
Else
  IsCompilerError = #True
EndIf

; Read the ASM code file
File = ReadFile(#PB_Any, ASMCodeFilePath$)
If File
  ASMCode$ + ReadString(File, #PB_File_IgnoreEOL)
  CloseFile(File)
EndIf

; If an error has occurred, output detailed information
If IsCompilerError Or ASMCode$ = ""
  MessageRequester(#ErrorWindowTitle, "Tool could Not create the asm output!" + #CRLF$ +
                                      #CRLF$ + #CRLF$ +
                                      "Compiler File Path:"        + #CRLF$ + CompilerFilePath$     + #CRLF$ + #CRLF$ +
                                      "Compiler Working Dir Path:" + #CRLF$ + WorkingDirectoryPath$ + #CRLF$ + #CRLF$ +
                                      "Code File Path:"            + #CRLF$ + CodeFilePath$         + #CRLF$ + #CRLF$ +
                                      "ASM Code File Path:"        + #CRLF$ + ASMCodeFilePath$      + #CRLF$ + #CRLF$ +
                                      "EXE File Path:"             + #CRLF$ + EXEFilePath$,
                   #PB_MessageRequester_Error)
  End
EndIf

Output$ = "##############################################" + #CRLF$ +
          CompilerOutput$ + #CRLF$ +
          "##############################################" + #CRLF$ +
          ASMCode$

; =============================
;-Create ASM Code Output Window
; =============================

; Display the ASM code in an EditorGadget
If Not OpenWindow(#Window_Main, #PB_Ignore, #PB_Ignore, 500, 500, #Program_Name, #PB_Window_SystemMenu | #PB_Window_SizeGadget |
                                                                                 #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  MessageRequester(#ErrorWindowTitle, "The program window could Not be created!", #PB_MessageRequester_Error)
  End
EndIf
EditorGadget(#Editor_Output, 0, 0, WindowWidth(#Window_Main), WindowHeight(#Window_Main) - 40)
ButtonGadget(#Button_OpenStandardEditor, 5, GadgetHeight(#Editor_Output) + 5, WindowWidth(#Window_Main) / 2 - 8, 30, "Open Standard Editor")
ButtonGadget(#Button_CopyToClipboard, GadgetWidth(#Button_OpenStandardEditor) + 10, GadgetHeight(#Editor_Output) + 5,
             WindowWidth(#Window_Main) / 2 - 8, 30, "Copy To Clipboard")
SetGadgetText(#Editor_Output, Output$)
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_OpenStandardEditor
          File = CreateFile(#PB_Any, OutputFilePathForStandardProgram$)
          If File
            WriteStringN(File, Output$)
            CloseFile(File)
          EndIf
          If Not OpenWithStandardProgram(OutputFilePathForStandardProgram$)
            MessageRequester(#ErrorWindowTitle, "The output could Not be opened in the standard editor!", #PB_MessageRequester_Error)
          EndIf
        Case #Button_CopyToClipboard
          SetClipboardText(Output$)
      EndSelect
    Case #PB_Event_SizeWindow
      ResizeGadget(#Editor_Output, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_Main), WindowHeight(#Window_Main) - 40)
      ResizeGadget(#Button_OpenStandardEditor, 5, GadgetHeight(#Editor_Output) + 5, WindowWidth(#Window_Main) / 2 - 8, #PB_Ignore)
      ResizeGadget(#Button_CopyToClipboard, GadgetWidth(#Button_OpenStandardEditor) + 10, GadgetHeight(#Editor_Output) + 5,
                   WindowWidth(#Window_Main) / 2 - 8, #PB_Ignore)
  EndSelect
Until Event = #PB_Event_CloseWindow

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Zuletzt geändert von Sicro am 11.08.2018 11:26, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB-IDE-Tool: Display ASM Code
BeitragVerfasst: 04.08.2018 13:22 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Scheint unter Windows 7 x64 zu laufen.
Allerdings funktioniert es nicht mit Projekten, es wird immer nur die Einzeldatei kompiliert.
Ein Window-Resize wäre gut, wobei ich es ehr beforzugen würde, wenn die asm-Datei einfach mit dem Standard-Editor geöffnet wird.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB-IDE-Tool: Display ASM Code
BeitragVerfasst: 04.08.2018 15:49 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Bei Projekten ist %TEMPFILE nicht gesetzt, sondern nur %COMPILEFILE. Und %FILE ist immer mainfile des targets (und auch der Inhalt von %COMPILEFILE), egal welche Include gerade im Editor aktiv ist.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB-IDE-Tool: Display ASM Code
BeitragVerfasst: 10.08.2018 14:27 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
STARGÅTE hat geschrieben:
Allerdings funktioniert es nicht mit Projekten, es wird immer nur die Einzeldatei kompiliert.
Den Haupt-Code des Projekts hat man eigentlich immer offen - und inkludierte Code-Dateien werden berücksichtigt.

Projekt-Dateien kann ich nicht direkt unterstützen, weil es keine Tool-Konstanten gibt, die den Pfad zur Projekt-Datei liefert, ohne den Code in der IDE kompilieren zu müssen.

STARGÅTE hat geschrieben:
Ein Window-Resize wäre gut, wobei ich es ehr beforzugen würde, wenn die asm-Datei einfach mit dem Standard-Editor geöffnet wird.
Ich habe den Code wie folgt erweitert:
  • Fenstergröße anpassbar
  • Ausgabe in die Zwischenablage kopieren
  • Ausgabe mit dem Standard-Editor öffnen

#NULL hat geschrieben:
Bei Projekten ist %TEMPFILE nicht gesetzt, sondern nur %COMPILEFILE. Und %FILE ist immer mainfile des targets (und auch der Inhalt von %COMPILEFILE), egal welche Include gerade im Editor aktiv ist.
Ja, und diese Konstanten sind nur gesetzt, wenn der Code in der IDE kompiliert wird.


Kann bitte noch ein Mac-Nutzer testen?

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB-IDE-Tool: Display ASM Code
BeitragVerfasst: 10.08.2018 14:58 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Mein Tool sieht so aus:
Code:
#!/bin/bash

if [ -z "$1" ] || [ -z "$2" ]; then
   echo "Usage: $0 <pbcompiler> <pb-file>"
   exit 1
fi

cd ~/tmp
rm purebasic.asm

$1 -c "$2"
gedit purebasic.asm

Das ist ein kleines Bash-Skript, gespeichert und ausführbar gemacht unter ~/bin/purebasic_asm.sh
Kommandozeile: /home/nicolas/bin/purebasic_asm.sh
Argumente: /home/nicolas/programme/purebasic/compilers/pbcompiler %TEMPFILE
Werkzeugeinstellungen: Keine einzige aktiviert
Dann noch einen Namen geben und fertig. Nutzt man das Tool, öffnet sich automatisch gedit mit dem ASM-Output. Geht wahrscheinlich auch ähnlich einfach mit einer Batch-Datei unter Windows und Notepad++ oder ähnlichem. <)

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB-IDE-Tool: Display ASM Code
BeitragVerfasst: 10.08.2018 18:12 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
@NicTheQuick:

Ja, es gibt viele Möglichkeiten. Ein Bash-Script hat den Nachteil, dass es vermutlich nur unter Linux funktioniert - oder bei MacOS auch?
Für Windows muss der Code dann nochmal in der für Windows entsprechenden Script-Sprache geschrieben werden.

Zudem wird die ASM-Datei bei mir nicht im Temp-Verzeichnis (/tmp/) erstellt, sondern in unterschiedlichen Verzeichnissen (siehe mein Code oben).
Liegt es vielleicht daran, dass ich Purebasic in der Umgebungsvariable "PATH" habe?
Code:
export PUREBASIC_HOME=~/purebasic
export PATH=$PUREBASIC_HOME/compilers:$PATH

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: PB-IDE-Tool: Display ASM Code (Win,Lin,Mac)
BeitragVerfasst: 22.09.2018 11:56 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Kann bitte jemand das Tool noch unter MacOS testen?

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye