Länge einer IncludeBinary bestimmen!

Anfängerfragen zum Programmieren mit PureBasic.
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

Länge einer IncludeBinary bestimmen!

Beitrag von hmi222 »

Hallo zusammen...

würde gerne auf eine andere Art die Länge einer IncludeBinary
ermitteln:

Code: Alles auswählen

laenge=?DL2-?DL1

DataSection
 DL1: IncludeBinary "..\Music\Sid\Dummy.sid"
 DL2:
EndDataSection
Hat da jemand eine andere Lösung?
Vielen Dank im Vorraus...
und genießt die Sonne!
<)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Hm, also eigentlich gibt es keinen andere Weg. Man kanns sich nur umständlicher machen.. also z.B.:

Code: Alles auswählen

Macro InclBin_Label(ID)
  ?Incl_Binary_#ID
EndMacro

Macro InclBin_Len(ID)
  (?Incl_Binary_#ID#_End - ?Incl_Binary_#ID)
EndMacro

Macro InclBin_Incl(ID,filename)
  Incl_Binary_#ID#: IncludeBinary filename
  Incl_Binary_#ID#_End:
EndMacro

laenge=InclBin_Len(0)

DataSection 
  InclBin_Incl(0,"..\Music\Sid\Dummy.sid")
EndDataSection
Aber das ist ja auch nicht sehr komfortabel. Besser du erzählst uns warum du das anders machen willst.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

Beitrag von hmi222 »

hi...
Mein sidplayer ist in einer Lib.
im moment übergebe ich der lib
beide pointeradressen (DL1+DL2)
In der lib wird dann diese Länge ermittelt.
Würde der lib aber gerne nur den pointer des songs übergeben.
wie könnte man dan in der lib die Länge ermitteln?
möchte mich nich immer daran erinnern auch noch den 2.Dummy pointer
einzusetzen.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

meine Idee wäre noch, vll einfach das ende mit einer bestimmten byte-kombi markieren und danach suchen.
Aber ich denke, da wäre der 2. Dummy einfacher
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Haben SIDs keine Header, wo die Länge drinsteht?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
hmi222
Beiträge: 69
Registriert: 23.03.2007 13:20
Kontaktdaten:

Beitrag von hmi222 »

hab eben schon mal nach dem sid header gesucht aber nicht
viel brauchbares gefunden...
aber ich denke im header steht nicht die dateilänge drin...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

warum übergibst du der lib nicht pointer und länge?

also, statt LibCall(DL1, DL2) eben LibCall(DL1, DL2-DL1) ?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Kaeru Gaman hat geschrieben:warum übergibst du der lib nicht pointer und länge?

also, statt LibCall(DL1, DL2) eben LibCall(DL1, DL2-DL1) ?
Dann muss er trotzdem einen 2. Pointer benutzen, im Endeffekt ist es ja egal, ob er aus 2 Pointern die länge errechnet und sie dann verschickt, oder die Pointer verschickt und dann die länge ausrechnet.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja klar...
nur dass eben eine angabe in (pointer, länge) üblicher ist als eine angabe in (pointer1, pointer2)...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn man den Anfangspointer mit 1 und den EndePointer mit 2 benennt, dann so:

Code: Alles auswählen

Macro ShortCatch(value)
  ?value#1,?value#2-?value#1
EndMacro

DataSection
  PopCorn1: IncludeBinary "popcorn.ogg"
  PopCorn2:
EndDataSection

If InitSound()
  UseOGGSoundDecoder()
  CatchSound(0, ShortCatch(PopCorn))
  PlaySound(0)
  MessageRequester("", "")
EndIf
Man haben die Probleme bei dem schönen Wetter :mrgreen:

//edit
Habs mal erweitert:

Code: Alles auswählen

Macro CatchSoundEx(Id, Value)
  CatchSound(Id, ?Value#_start, ?Value#_end - ?Value#_start)
EndMacro

DataSection
  ogg_start:
    IncludeBinary "Pop.ogg"
  ogg_end:
EndDataSection

If InitSound()
  UseOGGSoundDecoder()
  CatchSoundEx(0, ogg)
  PlaySound(0)
  MessageRequester("","")
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten