Hinweise zum Programmieren mit SOZOBON C fr ATARI-TOS Programme.

1. Accessories programmieren.

Da nicht alle TOS versionen den environment Zeiger in der Basepage setzten,
empfehle ich im main Module eine der folgenden Funktionen einzufgen:

Wenn environment Variablen nicht bentigt werden:

char *getenv(char *var)
{
	return(NULL);
}


ansonsten:

char *getenv( char *var)
{
	char *string;

	if (gl_apversion == 0)	/* don't call before appl_init()	*/
		return(NULL);
	shel_envrn(&string, var)
	if (string) {
		if (*string == '=')	/* is this if/else okay ??	*/
			return(++string);
		else
			return("");
	} else
		return NULL;
		
}	/* acc getenv() routine	*/


Ein weiters Problem bei Accessories ist der dynamische Speicher Zugriff.
Sie knnen normalerweise Speicher nicht ber einen AC_CLOSE event hinweg
behalten. Und andererseits ist nicht so leicht festzustellen ob der Speicher
freigegeben werden mu, oder es schon ist.

Dazu gibt es die Funktion 

extern BASEPAGE *Getbpact_pd();

Sie ist nach dem ersten malloc() bzw. Malloc() aufzurufen, wobei der Wert
gespeichert werden sollte. (etwa in BASEPAGE *m_act_bp)

   BASEPAGE *m_act_pd;	/* global variable */

   /* malloc() erfolgreich, und nun: */
   if(!m_act_pd)
	   m_act_pd = Getbpact_pd();

Nach einem AC_CLOSE sollte dann die Funktion aufgerufen werden die den
Speicher freigibt. Mit folgendem code Beispiel kann getestet werden,
ob der Speicher noch freigegeben werden mu:

   BASEPAGE *c_act_pd;
   
   if ((gl_apid >= 0x300) || (m_act_pd == (c_act_pd = Getbpact_pd()) )||
		(m_act_pd == c_act_pd->p_parent) ){
       /* Speicher freigeben */
   }
   /* alle Referencen auf den Speicher lschen */

   m_act_pd = NULL;
   /* wieder auf Null setzten, damit beim nchsten malloc()/Malloc() der
   aktuelle Wert eingetragen werden kann. */

Analog kann mensch natrlich so auch rauskriegen, ob der Speicher behalten
werden kann. Doch diese Abfrage ist etwas komplizierter.
