/*
  ListExecutables.c - listet alle ausführbaren Programme eines Verzeichnisses
                      auf
  Aufruf mit DICE: dcc ListExecutables.c -o ListExecutables
                   ListExecutables <directory>
*/

#include <dos/dos.h>

struct Lock *lock;
struct FileInfoBlock fib;
struct FileHandle *file;

void main(argc,argv)
SHORT argc;
UBYTE **argv;
{
 ULONG type;
 UBYTE path[255],i;
 if (lock=(APTR)Lock(argv[1],ACCESS_READ))      /* Lock auf Verzeichnis holen */
 {
  if (Examine(lock,&fib))			/* Info über Verzeichnis */
   if (fib.fib_DirEntryType>0)			/* war Parameter Verzeichnis ?*/
   {
    i=strlen(argv[1]);			  /* wenn nötig, an Pfad '/' anhängen */
    strcpy(path,argv[1]);
    if (path[i-1]!=':' && path[i-1]!='/' && strlen(argv[1])) path[i++]='/';
    while (ExNext(lock,&fib))		  /* nächste Datei des Verzeichnisses */
    {
     path[i]=0;
     strcat(path,fib.fib_FileName);		/* Pfad mit Datei erstellen */
     if (file=(APTR)Open(path,MODE_OLDFILE))	/* und Datei öffnen */
     {
      if (Read(file,&type,4)==4)		/* Dateityp prüfen und Name */
       if (type==0x3f3)				/* ggf. ausgeben */
	printf ("%s\n",fib.fib_FileName);
      Close(file);
     }
    }
   }
   else printf("'%s' ist kein Verzeichnis !\n",fib.fib_FileName);
  UnLock(lock);
 }
 else puts("Falsches Verzeichnis !"); /* Parameter beschreibt kein Verzeichnis*/
}
