Hilfe Bytezugriff

Für allgemeine Fragen zur Programmierung mit PureBasic.
Joshua
Beiträge: 7
Registriert: 29.09.2004 10:27

Hilfe Bytezugriff

Beitrag von Joshua »

Hallo Leute,

komme hier mit einem Zugriff auf ein Memoryfeld nicht klar.

Wenn ich die Software richtig habe soll ein lesbares Muster zu sehen sein.

leider kommt bei dem PeekB immer null raus.
Anschliessend mal der Quell.


Das dazugehörige Datenfile habe ich unter
http://db0noe.dyndns.org/DL6SH1.DAT abgelegt.

Gruß Thomas

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   Logo Anzeige  Thomas Kalmeier DG5MPQ
;
;    (c) 2004 - Joshua Soft & Hard
;
; ------------------------------------------------------------
;

*daten = AllocateMemory (32768) 

count.l = 0 



If OpenWindow(0, 10, 200, 773, 390,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "DAT to Logo")

  If ReadFile (0,"DL6SH1.dat")
   Anzahl =  ReadData(*daten,32768)
   If Anzahl <> 32768 
      MessageRequester ("Error","Anzahl <> 32768")
   EndIf  
  Else 
   MessageRequester ("Error","Fehler open File")
  EndIf 
  CloseFile (0)
        
  
;----- Hauptprogram --------------------------------

   Repeat

    Repeat
      EventID.l = WaitWindowEvent()
    Until EventID <> 0

    If EventID = #PB_EventRepaint  
      Gosub Logo
    EndIf

  Until EventID = #PB_EventCloseWindow 
  
;----- Hauptprogram --------------------------------


 EndIf
End   
;------- SUBS --------------------------------------
Logo:

  StartDrawing(WindowOutput())
  

  count.l = 0                           ; den Counter erst mal auf null

  For i = 1 To 127 Step 2              ; Hier schreiben wir die ungeraden Zeilen 
   For t = 1 To 256 
    ;Debug = PeekB(*daten+count)       
     If PeekB(*daten + count ) > 0 
      Box(t * 3,i *  3,2,2, RGB(255,255,255)) 
     Else  
      Box(t * 3,i * 3,2,2, RGB(0,0,0)) 
     EndIf 
     count = count + 1 
    Next t 
  Next i

  For i = 2 To 128 Step 2             ; Hier schreiben wir die ungeraden Zeilen 
   For t = 1 To 256 
    ;Debug = PeekB(*daten+count)       
     If PeekB(*daten + count ) > 0 
      Box(t * 3,i *  3,2,2, RGB(255,255,255)) 
     Else  
      Box(t * 3,i * 3,2,2, RGB(0,0,0)) 
     EndIf 
     count = count + 1 
    Next t 
  Next i

  StopDrawing()

Return
edit redacid: Code-Tags gesetzt und URL richtig eingetragen
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

Es gibt einen kleinen Fehler nach der Logo: Sprungmarke, schau dir die if Abfragen an.

Code: Alles auswählen

Logo:
StartDrawing(WindowOutput())
 

count.l = 0                           ; den Counter erst mal auf null

For i = 1 To 127 Step 2              ; Hier schreiben wir die ungeraden Zeilen
  For t = 1 To 256
    ;Debug = PeekB(*daten+count)       
    If PeekB(daten.l + count ) < 0 ; <-HIER, ES MUSS EINMAL < UND WEITER UNTEN > SEIN ODER ANDERRUM
      Box(t * 3,i *  3,2,2, RGB(255,255,255))
    Else 
      Box(t * 3,i * 3,2,2, RGB(0,0,0))
    EndIf
    count = count + 1
  Next t
Next i

For i = 2 To 128 Step 2             ; Hier schreiben wir die ungeraden Zeilen
  For t = 1 To 256
    ;Debug = PeekB(*daten+count)       
    If PeekB(daten + count ) > 0 ;HIER DANN ENTSPERECHEND WAS ANDERES ALS IN DER SCHLEIFE OBEN
      Box(t * 3,i *  3,2,2, RGB(255,255,255))
    Else 
      Box(t * 3,i * 3,2,2, RGB(0,0,0))
    EndIf
    count = count + 1
  Next t
Next i

StopDrawing()

Return 
 
Wahrscheinlich hast du dich nur vertippt.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Joshua
Beiträge: 7
Registriert: 29.09.2004 10:27

leider nein....

Beitrag von Joshua »

Hallo Martin,

leider nein.. Schau mal: Jede If Abfrage hat auch ein ELSE
Der Unterschied ist in der For next Schleife GERADE/UNGERADE

Aber das Problem besteht weiterhin.

Gruß Thomas
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Bytes sind in PB usigned. D.h. dass sie einen Wert von -128 bis +128 haben. Einfach bei jeder Funktion, die einen Bytewert zurück gibt &$FF verwenden.
Bild
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

Oh, dann habe ich das Problem nicht verstanden.
Das Logo ist ja zu sehen?
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Joshua
Beiträge: 7
Registriert: 29.09.2004 10:27

Beitrag von Joshua »

Danke an LittleFurz

Des war der Fehler jetzt futzt es....

Muss einfach drann denken, dass hier alles mit signed VARS ist....

Jetzt gehts...
Danke noch mal .....

Gruß Thomas
Antworten