Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Einige Befehle aus BlitzBasic?
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 23.10.2008, 15:12    Titel: Antworten mit Zitat

Es ging (so habe ich das gelesen) um die Umsetzung eines BB-Quellcodes nach FB mit möglichst geringem Aufwand.
Dazu gibt es neben der bewährten Methode, per Hand Befehl für Befehl umzusetzen, die Möglichkeit einige BB-Befehle als Prozeduren zu definieren (Sebastians Vorschlag) oder teilweise als "Define xx" vom Präprozessor ersetzen zu lassen.

Daraus dann eine DLL zu machen halte ich nicht für sinnvoll.
Erst schreibt man noch den Qt für die DLL dazu noch eine .bi und alle nicht von der DLL abgedeckten Umsetzungen muss man doch von Hand erledigen.
Für wen soll die DLL denn nützlich sein, in BB gibt es die Prozeduren sowieso und in FB kann man sie auch anders umsetzen.
DLLs sind auch kein Allheilmittel, im Gegenteil, höherer Speicherplatzbedarf und jeder Funktionsaufruf braucht seine zusätzliche Aufrufzeit.
In diese Idee würde ich keine Zeit investieren.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 23.10.2008, 15:37    Titel: Antworten mit Zitat

MIR nützt diese DLL etwas.
Weil ich nicht nur in FreeBasic code sondern auch in einer anderen Sprache, und daher wäre es das sinnvollste für mich solch eine DLL bei Programmen nutzen zu können, die dessen Funktionalität benötigen.
Man (ich) kann ja in diese DLL noch andere sinnvolle Sachen unterbringen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 23.10.2008, 16:06    Titel: Antworten mit Zitat

Heiko hat Folgendes geschrieben:

und ist es möglich, dass man alle paramter hinter den befehlen in klammern angeben muss.
das verwirrt sonst ein wenig.


ausserdem müssten das in meinem fall eventuell später eh alles funktionen sein, da ich nebenbei auch noch eine dll draus machen möchte.

Mir scheint, Du veranstaltest den Aufwand nur, um Dich nicht an die FreeBasic-Conventionen gewöhnen zu müssen. Wenn Du aber mit FreeBasic arbeitest, solltest Du Dich von Beginn an umgewöhnen. zwinkern
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 23.10.2008, 16:20    Titel: Antworten mit Zitat

Nein, darum geht es nicht, möchte nur gern ein großes Projekt fertig bekommen.
Wird ein Knaller, versprochen.
Ich schlage mich gerade mit mehren Sprachen rum, verzeih, wenn ich da eine einfache Möglichkeit suche.

Und hey, aus diesen Funktionen lerne ich ja dennoch, oder meinst Du nicht?
Die Syntax und Konventionen von FB lerne ich so oder so, da ich vorhabe auch weiter mit FB zu coden (unter anderem) nur im Moment, wäre es da grad einfacher dieses zu haben.

Ich hoffe Du verstehst was ich meine.

[edit] und zu den Konventionen.....mal mit mal ohne Klammer.....!?! bei der Benutzung der Funktionen als Befehl sieht man ja nicht sofort obs eine Sub oder eine Funktion ist.Daher wäre eine gleiche Syntax wünschenswert.
War nur eine Idee, ich denke auch keine soooo schlechte, da ich gern in meinen Sachen doch einiges wenigstens einheitlich möchte.

Sauberer Quellcode heißt meine Devise.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 25.10.2008, 01:14    Titel: Antworten mit Zitat

sorry double.wichtig.

hier mal paar ergänzungen zu sebastians code.
sinnvoll wäre nich ResizeBank und CopyBank.
Aber dazu fehlt mir wohl im Moment noch das KnowHow.

Achja, das BBBank, ist das notwendig?
Weil ja an diese Funktion eh irgendein Handle übergeben wird(variable etc.) und ich mich wunderte, könnte ja auch stur AS Integer sein, oder.
So gibt man dann doch auch einen Namen weiter, oder?
Cool wäre wenn es einen Standarddatentyp gäbe wenn man nix definiert, wie eben AS Any Ptr zum beispiel, oder?

Achja, schaut mal, ob der code so korrekt ist.
Und ob ein spezielles open und closefile sinnvoll wäre.
Im zusammenhang mit den banken.
Wäre so sicher einfacher, wenn man doch eine dll draus machen möchte, weil da ja auch abhängigkeiten bestehen, oder liege ich da falsch?

andere programmiersprache=andere art datei zu öffnen.
Da in FB auch noch der typ des öffnens der datei bestimmt werden muss.


Code:
#define BBBank Any Ptr

FUNCTION CreateBank(ByVal Bytes As Integer) As Any Ptr
    Return Allocate(Bytes)
END FUNCTION

FUNCTION FreeBank (ByVal Bank As Any Ptr) As Integer
    DeAllocate Bank
    RETURN 0
END FUNCTION

FUNCTION PeekByte (ByVal Bank As Any Ptr, ByVal Offset As Integer) As UByte
    Dim x As UByte Ptr
    x = cast(UByte Ptr, Bank)
    Return *(x+Offset)
END FUNCTION

FUNCTION PokeByte (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As UByte) As Integer
    Dim x As UByte ptr
    x = cast(UByte Ptr, Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION ReadBytes (ByVal Bank As Any Ptr, ByVal stream As Integer, ByVal offset As Integer, ByVal anzahl As Integer) As Integer
    Dim i As Integer
    Dim B As UByte
    If (anzahl < 1) OR (offset >= LOF(stream)) OR (offset < 0) Then Return 0
    Seek #stream,(offset+1)
    For i = 0 TO anzahl-1
        If Eof(stream) Then Return i
        Get #stream,,B
        *(cast(UByte Ptr,Bank)+i) = B
    Next i
    Return anzahl
END FUNCTION

FUNCTION PokeInt (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As Integer) As Integer
    Dim x As Integer Ptr
    x = Cast(Integer Ptr,Bank)
    *(x+Offset) = Wert
    RETURN 0
END FUNCTION

FUNCTION PeekInt (ByVal Bank As Any Ptr, ByVal Offset As Integer) As Integer
    Dim x As Integer Ptr
    x = cast(Integer Ptr, Bank)
    Return *(x+Offset)
END FUNCTION

FUNCTION SeekFile (ByVal stream As Integer, ByVal Offset As Integer) As Integer
    SEEK #stream, Offset
    RETURN Offset
END Function

FUNCTION PokeShort (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As Ushort) As Integer
    Dim x As Ushort Ptr
    x = Cast(Ushort Ptr,Bank)
    *(x+Offset) = Wert
    RETURN 0
END Function

FUNCTION PeekShort (ByVal Bank As Any Ptr, ByVal Offset As Integer) As Ushort
    Dim x As Ushort Ptr
    x = cast(Ushort Ptr, Bank)
    Return *(x+Offset)
END Function

FUNCTION PokeFloat (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As Single) As Integer
    Dim x As Single Ptr
    x = Cast(Single Ptr,Bank)
    *(x+Offset) = Wert
    RETURN 0
END Function

FUNCTION PeekFloat (ByVal Bank As Any Ptr, ByVal Offset As Integer) As Single
    Dim x As Single Ptr
    x = cast(Single Ptr, Bank)
    Return *(x+Offset)
END Function

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 25.10.2008, 15:02    Titel: Antworten mit Zitat

Code:
Function CreateBank(ByVal Bytes As Integer) As Any Ptr
  Return Allocate(Bytes)
End Function

Function FreeBank (ByVal Bank As Any Ptr) As Integer
  DeAllocate Bank
  Return 0
End Function

Function ResizeBank (ByVal Bank As Any Ptr, ByVal anzahl As Integer) As Integer
  ReAllocate Bank, anzahl
  Return 0
End Function

Function CopyBank(ByVal quelle As Any Ptr _
  , ByVal start1 As Integer _
  , ByVal ziel As Any Ptr _
  , ByVal start2 As Integer _
  , ByVal anzahl As Integer) As Integer
  For i As Integer = 0 To Anzahl - 1
    Cast(Byte Ptr,ziel)[start2+i] = Cast(Byte Ptr,quelle)[start1+i]
  Next
  Return 0
End Function

Function PeekByte (ByVal Bank As Any Ptr, ByVal Offset As Integer) As UByte
  Return Cast(UByte Ptr, Bank)[Offset]
End Function

Function PokeByte (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As UByte) As Integer
  Cast(UByte Ptr, Bank)[Offset] = Wert
  Return 0
End Function

Function PeekShort (ByVal Bank As Any Ptr, ByVal Offset As Integer) As UShort
  Return Cast(UShort Ptr, Bank)[Offset]
End Function

Function PokeShort (ByVal Bank As Any Ptr, ByVal Offset As Integer, ByVal Wert As UShort) As Integer
  Cast(UShort Ptr, Bank)[Offset] = Wert
  Return 0
End Function

... und so weiter....

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 26.10.2008, 23:34    Titel: Antworten mit Zitat

Alles klar, suuuper, danke dir.


aber eine frage hab ich dennoch und zwar hierzu...
Code:
FUNCTION ReadBytes (BYVAL Bank AS ANY PTR, BYVAL stream AS INTEGER, BYVAL offset AS INTEGER, BYVAL anzahl AS INTEGER) AS INTEGER
    DIM i AS INTEGER
    DIM B AS UBYTE
    IF (anzahl < 1) OR (offset >= LOF(stream)) OR (offset < 0) THEN RETURN 0
    SEEK #stream,(offset+1)
    FOR i = 0 TO anzahl-1
        IF EOF(stream) THEN RETURN i
        GET #stream,,B
        *(CAST(UBYTE PTR,Bank)+i) = B
    NEXT i
    RETURN anzahl
END FUNCTION


es werden ja aus einer datei Bytes gelesen, wie würde dann die open anweisung lauten müssen, gibt ja da einige parameter, oder in BINARY das allheilmittel?

Ich bin jetzt mal von BINARY ausgegangen, da könnte eine OPEN Funktion explizit für ReadBytes ja so aussehen, oder?

Code:
Function OpenRWBytes (ByVal strg As String) As integer
        Dim As Integer DNr = FreeFile
   Open strg For Binary As #DNr
   Return DNr
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz