' =============================================================================
'                                 M E M O R Y                          12.05.89
' =============================================================================
'
' Wollen Sie mit eigenen Programmen an die reservierten Bilder herankommen,
' knnen Sie dies mit folgenden Routinen ganz einfach tun.
' Diese Routinen wurden in GFABASIC 2.0 geschrieben, sollten aber in der
' Version 3.0 ebenfalls laufen.
'
' Hier werden zunchst die einzelnen Routinen kurz dargestellt. Anschlieend
' folgt dann deren Programmtext.
'
' Bsp.1: @Memo_getadr(*Adresse%,*Anzahl%,*Ext%)
'        Man erhlt die Startadresse und die Anzahl der Bilder sowie
'        eine Zusatzinformation (Integer, 2 Byte).
'
' Bsp.2: @Memo_putadr(Adresse%,5,0)
'        Falls Bilder reserviert wurden, knnen diese hier angemeldet werden.
'        In diesem Fall befinden sich 5 Bilder ab Adresse 'Adresse%'.
'        Als Zusatzinformation wird eine '0' bergeben.
'
' Bsp.3: @Memo_putadr(Adresse%,12,-1)
'        Es werden neue Werte fr Adresse und Anzahl der Bilder gesetzt.
'        Die Zusatzinfo bleibt unverndert. Wenn negative Werte bergeben
'        werden, bleibt der jeweilige Parameter unverndert.
'
' Bsp.4: @Memo_clradr
'        So werden die Informationen des Infospeichers gelscht, d.h. es
'        werden die ersten zwei Bytes der Kennung gelscht, so da die
'        restlichen Informationen von der Procedure Memo_getadr() nicht
'        mehr erkannt werden.
'
' So sieht das Format des 16 Byte langen Informationsspeichers aus. Er liegt
' hinter dem (phys.) Bildspeicher, also ab Xbios(2)+32000.
'
' PICTUREvaaaannee = 16Bytes
' |      ||   | |
' |      ||   | erweiterte Information (z.Zt.=0): Wort/14
' |      ||   Anzahl der Bilder: Wort/12
' |      |Adresse des 1. Bildes: Langwort/8
' |      Format-Version (=0): Byte/7
' Kennung: 7 Byte String/0
'
' Hier sind die Routinen zur Abfrage des Speichers:
'
Procedure Memo_getadr(Aptr.%,Nptr.%,Eptr.%)
  Local Adresse.%,Info$,Adr.%,Num.%,Ext.%       !Lokale Variablen
  '
  Info$=Space$(7)                               !7-Byte-String vorbereiten
  Adresse.%=Xbios(2)+32000                      !Adresse ermitteln
  Bmove Adresse.%,Varptr(Info$),7               !Kennung in String kopieren
  '
  If Info$="PICTURE" And Peek(Adresse.%+7)=0    !Kennung und Version abfragen
    Adr.%=Lpeek(Adresse.%+8)                    !Bildadresse ...
    Num.%=Dpeek(Adresse.%+12)                   !Anzahl der Bilder ...
    Ext.%=Dpeek(Adresse.%+14)                   !und Zusatzinformationen holen
    '                                           !(-> ist zur Zeit unbenutzt)
  Else
    Adr.%=-1                                    !Bei falscher Kennung ...
    Num.%=-1                                    !wird jeder Variable ...
    Ext.%=-1                                    !'-1' bergeben
    '
  Endif
  '
  *Aptr.%=Adr.%                                 !Und nun alle ...
  *Nptr.%=Num.%                                 !Werte ber die Pointer ...
  *Eptr.%=Ext.%                                 !zurckgeben
Return
Procedure Memo_putadr(Adr%,Num%,Ext%)
  Local Adresse%,Kennung$                       !Lokale Variablen
  '
  Kennung$="PICTURE"                            !Kennungs-String definieren
  Adresse%=Xbios(2)+32000                       !Adresse ermitteln
  '
  Bmove Varptr(Kennung$),Adresse%,7             !Kennung bertragen
  '
  If Adr%>=0
    Lpoke Adresse%+8,Adr%                       !Adresse, ...
  Endif
  If Num%>=0
    Dpoke Adresse%+12,Num%                      !Anzahl und ...
  Endif
  If Ext%>=0
    Dpoke Adresse%+14,Ext%                      !Zusatzinfo setzen
  Endif
Return
Procedure Memo_clradr
  Local Adresse%                                !Lokale Variable
  '
  Adresse%=Xbios(2)+32000                       !Adresse ermitteln
  '
  Dpoke Adresse%,0                              !Kennung lschen
Return
