/*  @(#)minimal.c, Dirk Haun, Juni 1995
 *
 *  Dieser Quelltext zeigt einen minimalen xFSL-Aufruf. Wie man sehen kann,
 *  gengt es, die xFSL_PAR- und PFONTINFO-Struktur mit Nullen zu fllen,
 *  die Gr”žen der beiden Strukturen (und evtl. noch die Fontfarbe)
 *  einzutragen.
 *
 *  Ein Fontselektor-Aufruf in dieser Form ist i.A. nicht sehr sinnvoll, da
 *  man ja meist nur bestimmte Fonts zur Auswahl stellen will. Dieser Quell-
 *  text ist auch nur zur Demonstration und als Einladung zum Herumspielen
 *  mit den vielen Parametern gedacht.
 *
 *  Insbesondere soll aber gezeigt werden, daž ein xFSL-Aufruf gar nicht so
 *  kompliziert ist, wie es die vielen Parameter vermuten lassen. Was man
 *  nicht ben”tigt (oder versteht), kann man einfach weglassen bzw. auf Null
 *  setzen.
 *
 */

#include <stdio.h>
#include <aes.h>
#include <vdi.h>
#include <string.h>
#include <stdlib.h>
#include <xfsl.h>

extern int get_cookie(long cookie,long *value);

static void xfsl_error(int err)
{
 char alert[256], z[8];

 strcpy(alert,"[3][Fontselektor meldet:|");
 switch(err)
 {
  case xFS_ERROR:       strcat(alert,"Nicht genug Speicher");
                        break;
  case xFS_ACTIVE:      strcat(alert,"Mehrfachaufruf nicht m”glich");
                        break;
  case xFS_NO_FONTSIZE: strcat(alert,"Fontgr”že konnte nicht|identifiziert werden");
                        break;
  case xFS_NO_FONTS:    strcat(alert,"Anzahl Fonts muž|gr”žer Null sein");
                        break;
  case xFS_NO_WINDOW:   strcat(alert,"Konnte kein Fenster ”ffnen");
                        break;
  case xFS_NO_HANDLE:   strcat(alert,"Kein Handle mehr frei");
                        break;
  case xFS_RES_ERROR:   strcat(alert,"Aufl”sung zu klein|(mind. 640x400)");
                        break;
  case xFS_LOADERROR:   strcat(alert,"Fehler beim Nachladen|des Overlays");
                        break;
  case xFS_PARERROR:    strcat(alert,"Fehlerhafte Parameter!|Aufruf nach Revision 3?");
                        break;
  default:              itoa(err,z,10);
                        strcat(alert,"Fehler ");
                        strcat(alert,z);
 }
 strcat(alert,"! ][ Abbruch ]");
 form_alert(1,alert);
}

int main(void)
{
 int xhandle, xret;
 xFSL *xfsl;      /* Zeiger auf xFSL-Struktur */
 xFSL_PAR xpar;   /* Parameter-Struktur */
 PFONTINFO pfont; /* Fontinfo-Struktur */
 char msg[256];

 if(appl_init()>=0)
 {
  if(get_cookie('xFSL',(long*)&xfsl))
  {

   memset(&xpar,0,sizeof(xFSL_PAR));    /* Strukturen "ausnullen" */
   memset(&pfont,0,sizeof(PFONTINFO));

   xpar.font=&pfont;                    /* Zeiger auf PFONTINFO eintragen */
   xpar.par_size=(int)sizeof(xFSL_PAR); /* Gr”žen eintragen (wichtig!) */
   xpar.pfi_size=(int)sizeof(PFONTINFO);
   xpar.font->fontcol=BLACK;            /* Fontfarbe schwarz */

   xhandle=xfsl->xfsl_init(0,&xpar);    /* Init-Aufruf */
   if(xhandle>=0)
   {
    do
    {
     xret=xfsl->xfsl_event(xhandle,0L); /* Event-Aufruf */
     if(xret<0) break;                  /* Fehler aufgetreten */
    }
    while(xret!=xFS_STOP && xret!=xFS_OK);
    xfsl->xfsl_exit(xhandle);           /* Exit-Aufruf (nicht vergessen) */
    if(xret<0) xfsl_error(xret);
    else
    {
     if(xret==xFS_STOP) form_alert(1,"[1][\'Abbruch\' ausgew„hlt.][ OK ]");
     else if(xret==xFS_OK)
     {
      sprintf(msg,"[1][Ausgew„hlt wurde Font %d|in der Gr”že %d pt.][ OK ]",
                  xpar.font->fontid,xpar.font->fontsize.size);
      form_alert(1,msg);
     }
    }
   }
   else xfsl_error(xhandle);

  }
  else form_alert(1,"[2][Cookie \'xFSL\' nicht|gefunden!][ Abbruch ]");
  appl_exit();
 }
 return(0);
}
