#include <workbench/workbench.h>
#include <workbench/startup.h>
#include <workbench/icon.h>
#include <stdio.h>

struct Library *IconBase = NULL;
/* Die Library, in der die Icon-Funktionen vorhanden sind, muß deklariert
 * werden. */
struct Lock *MLock;
/* Ein Lock, in der das Verzeichnis steht, das vor dem Aufruf der Funktion
 * WBStart() eingestellt war. */
FILE *con = NULL;
/* Konsole zur Ausgabe der Daten. */

main ( argc,argv )
int argc;
char *argv[];
{ /* Test, ob CLI-Start. */
  if ( argc > 0 )
    printf ( "Demo-Programm, von der WB starten !\n" );
  else
  { /* Consolen-Fenster zum Ausgeben der Daten öffnen. */
    con = fopen ( "con:0/0/600/200/Ausgabe","r+" );
    /* Fehler ? */
    if ( con == NULL )
      exit ( 20 );
    /* Übergabe der Parameter an Testfunktion. */
    WBStart ( (struct WBStartup *) argv );
    fputs ( "Taste drücken :",con );
    fgetc ( con );
    fclose ( con );
  }
  exit ( 0 );
}

/* Routine zur Verarbeitung der Argumente. */
WBStart( wbstart )
struct WBStartup *wbstart;
{ /* Einen Zeiger auf eine DiskObject-Struktur zum Einladen eines Icons. */
  struct DiskObject *dob;
  /* Zeiger auf die eigentlichen Argumente, in Schleife benutzt. */
  struct WBArg *wa;
  /* Zählvariablen. */
  int i, j;

  /* Icon-Library öffnen. LIBRARY_VERSION ist die aktuelle Version. */
  IconBase = OpenLibrary ( "icon.library",LIBRARY_VERSION );
  /* Fehlerfall !! */
  if ( IconBase == NULL )
    return();
  fprintf ( con,"Anzahl der Argumente : %d\n",wbstart->sm_NumArgs );
  /* Schleife, in der alle Argumente abgetastet werden. Die Variable
   * wa zeigt auf das aktuelle Argument. */
  for ( wa = wbstart->sm_ArgList, i = 0; i < wbstart->sm_NumArgs; wa++, i++ )
  { /*if ( i == 1 && wa->wa_Lock != NULL )
      MLock = (struct Lock *) CurrentDir ( (struct FileLock *)wa->wa_Lock );
    */
    /* Ausgabe : */
    fprintf ( con,"Icon [32m%s.info[0m :\n",wa->wa_Name );
    /* Lade das Icon ein. */
    dob = GetDiskObject ( wa->wa_Name );
    /* Falls kein Icon gefunden wurde... Ist eigentlich schlecht möglich,
     * da es ja auf der WB dargestellt und angklickt wurde.
     * Außerdem wird abgefragt, ob überhaupt TOOLTYPES angegeben waren. */
    if ( dob != NULL && dob->do_ToolTypes != NULL )
      /* Dann in Schleife abtasten. */
      for ( j = 0; dob->do_ToolTypes[j] != NULL; j++ )
        /* Und irgendwas tun damit. */
        testWBArg ( dob->do_ToolTypes[j] );
    /* Icon wieder entlassen. */
    FreeDiskObject ( dob );
  }
  /* Library schliessen. */
  if ( IconBase != NULL )
    CloseLibrary ( IconBase );
  /* Schluß */
  return ();
}

/* Funktion, die einfach die Strings ausgibt. Sinnvollerweise sollte hier
 * irgendeine Aktion stehen, die die Argumente testet und dann
 * irgendwelche Einstellungen vornimmt. */
testWBArg ( str )
char *str;
{ fputs ( "  ",con );
  fputs ( str,con );
  fputc ( '\n',con );
}
