Seite 1 von 3

Data+Proceduren

Verfasst: 11.11.2007 02:14
von STARGÅTE
Tachchen,

ich habe mal n Frage:

Das muss an die Stelle wo ... ist:

Code: Alles auswählen

Procedure CatchObjekt(*Adresse)
 Restore ...
 Read nn
 For n = 1 to nn
  Read x
  Read y
 Next
EndProcedure

CatchObjekt(?Raumschiff_1)

DataSection

 Raumschiff_1:
 Data.l  4,  0,-20, -20,20, 0,10, 20,20
Oder muss ich das anders machen ?

Verfasst: 11.11.2007 02:56
von ZeHa
Ich kapier Dein Posting zwar überhaupt nicht, aber rein vom Code her würde ich sagen, Deine drei Pünktchen mußt Du durch *Adresse ersetzen, dann müßte "das" laufen.

Verfasst: 11.11.2007 03:33
von STARGÅTE
ne hat nicht gefunzt, ich habe es jetzt mit PeekL() gemacht...

hat sich also erledigt

TOPIC CLOSE

Verfasst: 11.11.2007 11:09
von Criss
Wärst Du dann so lieb und könntest uns Dein PeekL()-Beispiel auch noch mitteilen! :D Danke!

Verfasst: 11.11.2007 11:48
von edel
hier ein Beispiel, allerdings ohne Peek :

Code: Alles auswählen

DataSection
 Raumschiff_1:
 Data.l  4,  0,-20,-20,20,0,10,20,20
 Raumschiff_1_e:
EndDataSection 

Structure Raumschiff
  dat.l[0]
EndStructure

*rm.Raumschiff = ?Raumschiff_1

count = (?Raumschiff_1_e - ?Raumschiff_1) / 4

For i = 0 To count
  Debug *rm\dat[i]
Next 

Verfasst: 11.11.2007 13:00
von #NULL
@stargate
Restore verlangt ein labelbezeichner (nicht die addresse), und den kannst du nicht mit variablen ersetzten. macros haste ja leider nich'.
kannst es ja einfach so machen, falls du Read beuntzten willst:

Code: Alles auswählen

Restore Raumschiff_1 :: CatchObjekt()
und das restore in der proc weglassen.
was edel macht ist aber auch lecker

Verfasst: 11.11.2007 14:01
von STARGÅTE
jo hier die PeekL() fassung ^^

Code: Alles auswählen

Procedure CatchObjekt(*Adresse)
 *Memory = *Adresse
 nn = ReadMemoryLong()
 For n = 1 to nn
  x = ReadMemoryLong()
  y = ReadMemoryLong()
 Next
EndProcedure

CatchObjekt(?Raumschiff_1)

DataSection

 Raumschiff_1:
 Data.l  4,  0,-20, -20,20, 0,10, 20,20
für die, die die Procedure ReadMemoryLong nicht haben :

Code: Alles auswählen

Global *Memory
Procedure.l ReadMemoryLong()
 Long.l = PeekL(*Memory)
 *Memory = *Memory + 4
 ProcedureReturn Long
EndProcedure

Verfasst: 11.11.2007 17:27
von NicTheQuick
Mit einem Macro wäre das viel einfacher:

Code: Alles auswählen

Macro ReadMemoryLong(Adresse)
  PeekL(Adresse) : Adresse + SizeOf(Long) :
EndMacro

Procedure CatchObjekt(*Adresse)
 Protected nn.l, n.l
 nn = ReadMemoryLong(*Adresse)
 For n = 1 to nn
  x = ReadMemoryLong(*Adresse)
  y = ReadMemoryLong(*Adresse)
 Next
EndProcedure

CatchObjekt(?Raumschiff_1)

DataSection

 Raumschiff_1:
 Data.l  4,  0,-20, -20,20, 0,10, 20,20 
@STARGÅTE:
Außerdem hätte ich dir nicht zugetraut 'Protected' zu vergessen.

Verfasst: 11.11.2007 17:33
von STARGÅTE
ob du es glaubst oder nicht, 'Protected' habe ich noch NIE verwendet.

Liegt daran das ich für mich feste VAR habe die niemals estwas anderes sind :
zB:
Laufvariablen : n,i,k,j
da dazu gehörenden maxima : nn,ii,kk,jj

ein n wird also niemal bei meinem cods Global werden oder eine andere Aufgabe haben.


genauso winde ich sowas ReadMemoryLong(*Adresse) überflüssig, deswegen bin ich auch so froh 3.3 noch zu benutzen:
ReadLong() und nicht wie ihr ReadLong(File),
denn das ist immer wieder ein Parameter mehr, der Zeit in anspruch nimmt, da finde ich UseFile besser :-)

Verfasst: 11.11.2007 17:41
von edel
STARGÅTE hat geschrieben: ReadLong() und nicht wie ihr ReadLong(File),
denn das ist immer wieder ein Parameter mehr, der Zeit in anspruch nimmt, da finde ich UseFile besser :-)
Ich bezweifel sehr stark das ReadLong() schneller sein soll. Der Parameter
muss ja schliesslich auch noch aus dem Speicher geholt werden. was das
ganze wieder langsamer macht ;)