Externe Bibliotheken nutzen
Externe Bibliotheken nutzen
Hallo,
gibt es bei der Amiga-Version die möglichkeit auf externe Bibliotheken zuzugreifen?
Entweder die im LIBS.-Ordner (und ROM) oder link-Libraries?
Oder irgendeine andere sinnvolle Möglichkeit? (Inline-Assembler?)
gibt es bei der Amiga-Version die möglichkeit auf externe Bibliotheken zuzugreifen?
Entweder die im LIBS.-Ordner (und ROM) oder link-Libraries?
Oder irgendeine andere sinnvolle Möglichkeit? (Inline-Assembler?)
Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
planet-RK
Re: Externe Bibliotheken nutzen
Frag mal im englischen Forum nach ...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Externe Bibliotheken nutzen
Hab ich schon vor ner ganzen Weile. Leider gabs da nur viele views aber keine Antworten. Daher hab ich hier auch gefragt

Manjaro x64 * Windows 10 x64 * PureBasic 5.50
planet-RK
planet-RK
Re: Externe Bibliotheken nutzen
Ich denke schon. Du musst doch nur die alten Amiga Threads nachschauen (ich hoffe die gibt es noch alle).
Du kannst libs/dlls erstellen und auch per OpenLibrary/GetProcedure nutzen. Die Befehle sind vermutlich ein wenig anders benannt wegen den Versions-Unterschieden.
Ich glaube ich habe Beispiele gesehen wo die Funktionen von der Intuition-Library einfach mit Unterstrich am Ende genutzt wurden, so wie API Befehle in den anderen OS auch genutzt werden. Aber ich habe nie etwas auf dem Amiga mit PB gemacht, obwohl dies durchaus mal beabsichtigt war (!)
Ich habe jetzt das alte GFA Basic Buch aufgeschlagen, durch Zufall genau auf API/Library-Befehle gestoßen. Möglicherweise gehen die... aber möglicherweise ist das auch alles veraltet, weil damals war Kickstart 2.01 gerade erst erschienen (ich hatte gerade erst 1.2/1.3) und PB benötigt mindestens Kickstart 3.1 so viel ich weiß. Und selbstverständlich sollte PB eine Vollversion sein wegen der DLL/Library Einschränkungen.
Wie es aussieht könnte man on-the-fly System-weite Libraries schreiben, und "Rootkits" bzw. alles mit einem Hook versehen?! Keine Ahnung ob das funzt aber ich glaube ich weiß jetzt wie SnoopDOS arbeitet. Ziemlich interessant das Ganze!
Jetzt bin ich neugierig ob man das alles nutzen kann^^
Du kannst libs/dlls erstellen und auch per OpenLibrary/GetProcedure nutzen. Die Befehle sind vermutlich ein wenig anders benannt wegen den Versions-Unterschieden.
Ich glaube ich habe Beispiele gesehen wo die Funktionen von der Intuition-Library einfach mit Unterstrich am Ende genutzt wurden, so wie API Befehle in den anderen OS auch genutzt werden. Aber ich habe nie etwas auf dem Amiga mit PB gemacht, obwohl dies durchaus mal beabsichtigt war (!)
Ich habe jetzt das alte GFA Basic Buch aufgeschlagen, durch Zufall genau auf API/Library-Befehle gestoßen. Möglicherweise gehen die... aber möglicherweise ist das auch alles veraltet, weil damals war Kickstart 2.01 gerade erst erschienen (ich hatte gerade erst 1.2/1.3) und PB benötigt mindestens Kickstart 3.1 so viel ich weiß. Und selbstverständlich sollte PB eine Vollversion sein wegen der DLL/Library Einschränkungen.
Code: Alles auswählen
; Quelle: Das große GFA-BASIC-Buch, 1. Auflage 1990 (Data Becker)
; Feld-, Speicher- und Zeigeroperationen (Auszüge aus den Seiten 320-330)
Adr = OpenLibrary_(Name$, Version) ; Öffnet eine Funktionsbibliokthek und übergibt in 'Adr' die Adresse der zugehörigen Librarystruktur
; void AddLibrary(Adr)
AddLibrary_(Adr) ; Fügt eine neue Library zum System hinzu und macht sie für alle Tasks zugänglich.
; void CloseLibrary(Adr)
CloseLibrary_(Adr) ; Schließt eine Library, deren Adresse sich in 'Adr' befindet
; ???? RemLibrary(Adr)
Rueck = RemLibrary_(Adr) ; Löscht eine Library aus der Library-Liste des Systems
; Adr = MakeLibrary(...) ; Erzeugt eine neue Funktionsbibliothek und übergibt deren Adresse in 'Adr'
; Adr = SetFunction(Library, Funkoffset, Funkadr)
; Fügt in eine Funktionsbibliothek eine neue Funktion ein. In 'adr' wird die Adresse der alten Funktion zurrückgegeben, die an der angegebenen Position in der Bilbiothek stand.
; VOID SumLibrary(Library) ; Berechnet für die angegebene Library eine neue Checksumme
Jetzt bin ich neugierig ob man das alles nutzen kann^^
-
- Beiträge: 961
- Registriert: 04.10.2004 18:42
- Computerausstattung: A1200, KS3.1, 128mb Fast, WB3.1
A4k, KS3.1, 256mb Fast, WB 3.9, RTG
und irgend nen lappy mit linux drauf - Wohnort: gotha
Re: Externe Bibliotheken nutzen
die systemlibraries sind gebunden, mit unterstrich
die 2.0/2.1 und 3.0/3.1 sind nur zusätzlich
pb ist in der vollversion 4.0 kostenlos zum download, es bedarf leider einen 20er prozessor und etwas mehr speicher
der editor von 4.0 ist allerdings ziemlich uncool, wegen dem albernen zusatzfenster, was mir erklärt was ich grad gemacht hab,
darum benutze ich den editor von 2.9
es gehen alle api befehle, wie in jedem anderem betriebssystem werden die "alten" funktionen beibehaltenIch habe jetzt das alte GFA Basic Buch aufgeschlagen, durch Zufall genau auf API/Library-Befehle gestoßen. Möglicherweise gehen die... aber möglicherweise ist das auch alles veraltet, weil damals war Kickstart 2.01 gerade erst erschienen (ich hatte gerade erst 1.2/1.3) und PB benötigt mindestens Kickstart 3.1 so viel ich weiß. Und selbstverständlich sollte PB eine Vollversion sein wegen der DLL/Library Einschränkungen.
die 2.0/2.1 und 3.0/3.1 sind nur zusätzlich
pb ist in der vollversion 4.0 kostenlos zum download, es bedarf leider einen 20er prozessor und etwas mehr speicher
der editor von 4.0 ist allerdings ziemlich uncool, wegen dem albernen zusatzfenster, was mir erklärt was ich grad gemacht hab,
darum benutze ich den editor von 2.9
amiga rulez...und dann noch linux oder so
-
- Beiträge: 961
- Registriert: 04.10.2004 18:42
- Computerausstattung: A1200, KS3.1, 128mb Fast, WB3.1
A4k, KS3.1, 256mb Fast, WB 3.9, RTG
und irgend nen lappy mit linux drauf - Wohnort: gotha
Re: Externe Bibliotheken nutzen
hab mich der sache hier nochmal angenommen:
im grunde hat man 2 möglichkeiten eine extrne lib zu benutzen
erste möglichkeit , die lib-befehle per hand mit assembler aufzurufen
pb-amiga hat keine befehle für die nutzung von libraries
man kann die ganzen befehle der library natürlich auch in handliche proceduren packen:
wichtig ist:
debugger aus und inline-assembler support an !
die lib sollte natürlich im system im libs verzeichnis liegen
(oder im programm-ordner..müsste man mal testen)
hier das beispiel mit der lib
http://rebirthsoftware.rf.gd/amiga/spasslib.zip
zweite möglichkeit, man baut daraus eine "wrapper-userlib" damit werden die library befehle zu
pb-eigenen befehlen
im grunde hat man 2 möglichkeiten eine extrne lib zu benutzen
erste möglichkeit , die lib-befehle per hand mit assembler aufzurufen
pb-amiga hat keine befehle für die nutzung von libraries
Code: Alles auswählen
openexeclibrary_(0)
*ExecBase = ExecBase()
*SpassBase =0
vari.l=0
DisableDebugger
MOVE.l *ExecBase,a6 ;execbase nach a6
LEA.l l_spassname,a1 ;name der library a1
MOVE.l #0,d0 ;versionsnummer
JSR -552(a6) ;system open lib
MOVE.l d0,*SpassBase ;handle von d0 in *bla
TST d0
BEQ l_gehtnich
;hier ein aufruf einer funktion
;die erste funktion der spass.library
; sRND(d0)
; ist ein randomizer
; in d0 die maximale zahl
;das ergebniss wird auch in d0 zurückgegeben
MOVE.l *SpassBase,a6 ;get spassbase
MOVEQ #30,d0 ;set random max
JSR -$1e(a6) ;call sRND()
MOVE.l d0,vari ;ergebnis in vari
EnableDebugger
PrintNumber(vari)
MouseWait()
End
gehtnich:
Print("konnte lib nicht öffnen")
MouseWait()
;die libs sollten wieder geschlossen werden
; das übernimmt pb natürlich nicht
;was man selbst mit asm rumgehacked hat ;)
End
spassname:
dc.b "spass.library",0
;even
; MainProcessor=1
; Optimizations=0
; CommentedSource=1
; CreateIcon=0
; NoCliOutput=0
; Executable=
; Debugger=0
; EnableASM=1
Code: Alles auswählen
;library funktion in eine Procedure verpacken
openexeclibrary_(0)
*ExecBase = ExecBase()
Global *SpassBase =0 ;muss Global sein
DisableDebugger
MOVE.l *ExecBase,a6 ;execbase nach a6
LEA.l l_spassname,a1 ;name der library a1
MOVE.l #0,d0 ;versionsnummer
JSR -552(a6) ;system open lib
MOVE.l d0,*SpassBase ;handle von d0 in *bla
TST d0
BEQ l_gehtnich
Procedure sRND(maxwert)
vari.l=0
MOVE.l *SpassBase,a6 ;get spassbase
MOVE.l maxwert,d0 ;set random max
JSR -$1e(a6) ;call sRND()
MOVE.l d0,vari ;ergebnis in vari
ProcedureReturn vari
EndProcedure
EnableDebugger
PrintNumber( sRND(50) )
MouseWait()
End
gehtnich:
Print("konnte lib nicht öffnen")
MouseWait()
End
spassname:
dc.b "spass.library",0
debugger aus und inline-assembler support an !
die lib sollte natürlich im system im libs verzeichnis liegen
(oder im programm-ordner..müsste man mal testen)
hier das beispiel mit der lib
http://rebirthsoftware.rf.gd/amiga/spasslib.zip
zweite möglichkeit, man baut daraus eine "wrapper-userlib" damit werden die library befehle zu
pb-eigenen befehlen
amiga rulez...und dann noch linux oder so
-
- Beiträge: 961
- Registriert: 04.10.2004 18:42
- Computerausstattung: A1200, KS3.1, 128mb Fast, WB3.1
A4k, KS3.1, 256mb Fast, WB 3.9, RTG
und irgend nen lappy mit linux drauf - Wohnort: gotha
Re: Externe Bibliotheken nutzen
mir fällt grad ein , dass die api-befehle der dos,exec,intuition und grafiklib
in pb-amiga enhalten sind
damit ergibt sich eine noch einfacherer code
allerdings kommt man auch hier um das manuelle
wrappen der funktionen nicht herum
in pb-amiga enhalten sind
damit ergibt sich eine noch einfacherer code
Code: Alles auswählen
Global *sbase
openexeclibrary_(0)
*sbase=oldopenlibrary_("spass.library")
DisableDebugger
Procedure sRND(max.l)
var.l=0
MOVE.l max.l,d0
MOVE.l *sbase,a6
JSR -$1e(a6)
MOVE.l d0,var
ProcedureReturn var.l
EndProcedure
EnableDebugger
;smal test
For i=0 To 9
PrintNumberN( sRND(50) )
Next
MouseWait()
closelibrary_(*sbase)
End
wrappen der funktionen nicht herum
amiga rulez...und dann noch linux oder so
Re: Externe Bibliotheken nutzen
Nun ich habe von Assembler keine Ahnung, und mein Umgang mit Amiga Libraries war vor 30 Jahren unter GFA Basic sehr begrenzt. Gut, daß ein wenig API in PB vorhanden ist.
Ist die Spass.library auch in PB gemacht?
Ist die Spass.library auch in PB gemacht?
-
- Beiträge: 961
- Registriert: 04.10.2004 18:42
- Computerausstattung: A1200, KS3.1, 128mb Fast, WB3.1
A4k, KS3.1, 256mb Fast, WB 3.9, RTG
und irgend nen lappy mit linux drauf - Wohnort: gotha
Re: Externe Bibliotheken nutzen
nein, war nurn test mit amiblitzIst die Spass.library auch in PB gemacht?
es gibt ja noch den fd converter
eigentlich sollte der automatisch alle funktionen mappen
und eben als include zur verfügung stellen oder so ähnlich
aber der funktioniert bei mir nicht, oder weiss nicht wohin er das
speichert, ist weder im pb-verzeichniss, noch im ram , noch sonstwo zu finden
man kann auch eine userlib daraus machen, dafür brauchst allerdings auch asm kenntnisse
dann hast du die lib funktionen als pb befehle
amiga rulez...und dann noch linux oder so