Da das GFA-BASIC keine eigenen Befehle zum Bearbeiten und Auslesen der Cookie-Jar enthält, muß man hier selber Hand anlegen. Die drei Funktionen (siehe Listing) helfen hierbei und können problemlos in eigene Programme eingebunden werden, da alle Variablen als LOCAL deklariert sind.
Vor TOS 1.06 wurde die Cookie Jar nicht automatisch installiert. Hier hilft die Function exist_cookiejar weiter, die nur abfragt, ob ein Cookie Jar bereits installiert wurde.
Am häufigsten wird wohl die Function get_cookie() benötigt, die abfragt, ob ein bestimmter Cookie bereits im Cookie-Jar installiert ist und den Inhalt des 4 Byte langen Eintrags zurückgibt, der weitere Informationen zu dem Cookie enthält.
Mit der Funktion set_cookie() kann der Cookie-Eintrag geändert werden. Wurde die Änderung erfolgreich durchgeführt, gibt die Funktion TRUE (-1) zurück; trat ein Fehler auf, so wird eine Null zurückgegeben. Und jetzt ein Beispiel:
nvdi!=@get_cookie("NVDI",eintrag%)
Ist NVDI installiert, so enthält die Variable nvdi! den Wert TRUE (-1), sonst den Wert FALSE (0). Die Variable eintrag% muß nur ausgewertet werden, falls konkrete Informationen zu der augenblicklichen Einstellung von NVDI benötigt werden. Ist NVDI nicht installiert, bleibt eintrag% unverändert. Genaue Informationen über die Belegung von eintrag% muß der Doku zu dem jeweiligen Programm (in diesem Fall NVDI) entnommen werden.
Auf die gleiche Art kann natürlich auch nach Programmen wie LTMF (Let ’em fly) oder WINX gefragt werden. Mit _CPU kann der Prozessortyp abgefragt werden, wobei eintrag% dann Werte von 0,10,20,30,40 oder 60 enthalten kann für Rechner mit einem 68000, 68010, usw ... Der Cookie _FPU enthält Informationen über den Fließkommaprozessor.
'(c)1995 MAXON Computer
'Autor: Peter Harder
FUNCTION get_cookie(code$,VAR eintrag%)
$F%
LOCAL code%,cookie_ptr%,i%
cookie_ptr%=LPEEK(1440)
' Cookie Jar überhaupt installiert?
IF cookie_ptr%>0 AND LEN(code$)=4
code%=CVL(code$)
FOR i%=cookie_ptr% TO cookie_ptr%+640 STEP 8
EXIT IF code%={i%} OR {i%}=0
' Cookie Jar durchsuchen
NEXT i%
IF code%={i%}
' Cookie gefunden?
eintrag%={i%+4}
' ja, 4 Byte langen Eintrag auslesen
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ELSE
RETURN FALSE
ENDIF
ENDFUNC
'
FUNCTION set_cookie(code$,eintrag%)
$F%
LOCAL code%,cookie_ptr%,i%
cookie_ptr%=LPEEK(1440)
IF cookie_ptr%>0 AND LEN(code$)=4
code%=CVL(code$)
FOR i%=cookie_ptr% TO cookie_ptr%+640 STEP 8
EXIT IF code%={i%} OR {i%}=0
NEXT i%
IF code%={i%}
{i%+4}=eintrag%
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ELSE
RETURN FALSE
ENDIF
ENDFUNC
'
FUNCTION exist_cookiejar
$F%
IF LPEEK(1440)=0
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
ENDFUNC