Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

C

Home Preprozessor Preprozessor modulares Comilieren

11.1 defines für den Cookie Jar

Mit dem Preprozessor lassen sich auch geeignete Konstanten für das Programm zum Auslesen des Cookie Jars definieren. Weiterhin kann mit dem Preprozessor dafür gesorgt werden, daß sich das Programm sowohl mit TC/PC, Sozobon als auch GCC compilieren läßt. Für das Auslesen der Adresse des Cookie Jars muß mit der GEMDOS Funktion Super der Prozesor in den Supervisor Mode geschaltet werden. Damit der Compiler den Prototypen kennt, muß die Includedatei für OS Aufrufe auf dem Atari eingebunden werden. Da Rechnerspezifische Dinge nicht genormt sind, hat diese Datei in jeder der 3 Entwicklungsumgebungen einen anderen Namen. Da aber die Compiler ihren Namen definieren, der auch mit ifdef abgefragt werden kann, läßt sich je nach Compiler eine andere Includedatei einbinden.

Wenn __TURBOC__ definiert ist, wird TC als Compiler benutzt und der Name der Includedatei ist tos.h. Andernfalls wird geprüft, ob __GNUC__ definiert ist. Wenn ja ist der Compiler der gcc und die Datei heißt osbind.h. Wenn nicht, wird von Sozobon ausgegangen und als Includedatei tosbind.h benutzt. PC definiert sowohl __TURBOC__ zur Kompatibilität mit TC als auch __PUREC__.

#ifdef __TURBOC__
#include <tos.h>
#else
#ifdef __GNUC__
#include <osbind.h>
#else
#include <tosbind.h>
#endif
#endif
#include <stdio.h>

#define _p_cookies (void *)0x5a0l
#define NULL_COOKIE 0l

typedef struct cookie_entry {
   union {
      unsigned long name_long;
      char name_array[4];
   } name;
   unsigned long value;
} CookieEntry;

CookieEntry *GetCookieJar(void)
{  long OldStack;
   CookieEntry *CookieJar;

   OldStack = Super(0L);
   CookieJar = *((CookieEntry**)_p_cookies);
   Super((void *)OldStack);
   return CookieJar;
}

void PrintCookie(CookieEntry *Cookie)
{
   printf("Name des Cookies: %d\n", Cookie->name.name_long);
   printf("Wert des Cookies: %d\n", Cookie->value);
}

int IsNullCookie(CookieEntry *Cookie)
{
   return (Cookie->name.name_long == NULL_COOKIE);
}

void TraverseCookieJar(CookieEntry *Cookie)
{
   while (!IsNullCookie(Cookie))
   {
      PrintCookie(Cookie);
      Cookie++;
   }
}

int main(void)
{  CookieEntry *CookieJar;

   CookieJar = GetCookieJar();
   if (CookieJar == (CookieEntry *)0)
      printf("Dieses System hat keinen Cookie Jar\n");
   else
      TraverseCookieJar(CookieJar);
   return 0;
}

Home Preprozessor Preprozessor modulares Comilieren


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum