#include <libraries/dos.h>
#include <exec/memory.h>

#define NOR 0
#define UNL 1
#define INV 2
#define CLS 3
#define MAXBATCH 20
#define MAX_PATH 50

/* 
 * WitchBatch --->  Programm zum selektiven Aufrufen einer Batch Datei
 */

char *scr[] =
{"[0m", "[4m", "[7m", "c"};

char batchlist[MAXBATCH][MAX_PATH]; /* Liste der gefundenen Batch Dateien */
char pfad[MAX_PATH] = "s:";	    /* Default fuer Pfadname */

extern struct FileInfoBlock *AllocMem();
extern struct FileLock *Lock();

int searchbatch(pfad)
char pfad[MAX_PATH];
{
int i, k, anz;
struct FileInfoBlock *finfo;
struct FileLock *mylock;
char temp[MAX_PATH];
anz = 0;

finfo = AllocMem((long)sizeof(struct FileInfoBlock), MEMF_CHIP | MEMF_CLEAR);
if(finfo == NULL)
	{
	printf("Nicht genug Chip-Mem fuer FileInfoBlock!\n");
	exit();
	}
else
	{
	mylock = Lock(pfad, ACCESS_READ);
	if(mylock == NULL)
		{
		printf("%s nicht gefunden!\n", pfad);
		FreeMem(finfo, (long)sizeof(*finfo));
		exit();
		}
	if(Examine(mylock, finfo) == NULL)
		{
		printf("DOS-Fehler #%d\n", IoErr());
		FreeMem(finfo, (long)sizeof(*finfo));
		exit();
		}
	while(ExNext(mylock, finfo) && anz < MAXBATCH)
		{
		if(finfo->fib_DirEntryType<0)
		   {
		   for(i=0;i<strlen(finfo->fib_FileName);i++)
			{
			if(finfo->fib_FileName[i] == '.')
			  if(finfo->fib_FileName[i+1] == 'b')
			    if(finfo->fib_FileName[i+2] == 'a')
			      if(finfo->fib_FileName[i+3] == 't')
				{
				strcpy(batchlist[anz], finfo->fib_FileName);
				anz++;
				}
		   	}
		   }
		}
	FreeMem(finfo, (long)sizeof(*finfo));
	UnLock(mylock);
	}
/* Sortieren
 */
for(i=0;i<anz-1;i++)
	{
	for(k=i+1;k<anz;k++)
		{
		if(batchlist[i] > batchlist[k])
			{
			strcpy(temp, batchlist[k]);
			strcpy(batchlist[k], batchlist[i]);
			strcpy(batchlist[i], temp);
			}
		}
	}
return(anz);
}

void main(argc, argv)
int argc;
char *argv[];
{
int anz, i, which;
char command[MAX_PATH];
if(argc == 2)
	{
	if(argv[1][0] == '?')
		{
		printf("%sWitchBatch%s von Knut Bussian (1988)\n", scr[UNL],
			scr[NOR]);
		printf("Voreingestellter Suchpfad:  %s %s %s\n\n", scr[INV],
			pfad, scr[NOR]);
		exit();
		}
	else
		strcpy(pfad, argv[1]);
	}
anz = searchbatch(pfad);

wahl:
if(anz == 0)
	{
	printf("Keine Batch Dateien vorhanden!\n");
	exit();
	}
printf("%s",scr[CLS]);
printf("\n\n\t%sVorhandene Batch Dateien:%s\n\n", scr[UNL], scr[NOR]);
for(i=0;i<anz;i++)
	printf("\t%s %d %s\t%s\n",scr[INV], i+1, scr[NOR], batchlist[i]);
printf("\n\n\tWelches Batch soll ausgefuehrt werden ('0' = Abbruch)? ");
scanf("%d", &which);

if(which > anz || which < 0)
	goto wahl;

if(which == 0)
	exit();

puts(scr[CLS]);

strcat(pfad, batchlist[which-1]);
sprintf(command, "Execute %s", batchlist[which-1]);
Execute(command, 0L, 0L);
}
