/// Kopf Include Struct
/* Programm: BangerZufall.c ein kleines dummes Zufall Programm .... Look and die*/
/*    Autor: Andre´ Trettin */
/* Codename: Banger */
/*     VER$: BangerZufall.c 1.2 (25-Sep-96) */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <exec/libraries.h>
#include <exec/lists.h>
#include <exec/types.h>
#include <exec/libraries.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <pragma/dos_lib.h>
#include <pragma/exec_lib.h>

extern struct DosLibrary *DOSBase;
extern short wuerfel(short hoechstezahl);
static BPTR PrefsFileHandle=0;
static char *PrefsMem=0,*LPPos=0,*CDPos=0;
static struct FileInfoBlock *FIBMem=0;
static long Speichergroesse=0;
static int MC=0,LP=0,CD=0;
/**/
/// Fehler
char *FehlerString[]={
	"dos.library V37 nicht vorhanden\n",
	"Konnte kein Speicher für Prefs reservieren\n",
	"Konnte kein Speicher für FileInfoStruktur reservieren\n"
	};
void Fehler(short FehlerNr)
{
	if(FehlerNr==20) PrintFault(IoErr(),0);
	if(FIBMem) FreeMem(FIBMem,sizeof(struct FileInfoBlock));
	if(PrefsMem) FreeMem(PrefsMem,Speichergroesse);
	if(PrefsFileHandle) Close(PrefsFileHandle);
	if(FehlerNr!=0)
	{
		if(FehlerNr!=20)
		{
			printf("Es trat folgender Fehler auf: %s",FehlerString[FehlerNr-1]);
			FehlerNr+=20;
		}
	}
	exit(FehlerNr);
}
/**/
/// PrefsInit
void PrefsInit(void)
{
	register char *i;
	for(i=PrefsMem;i<PrefsMem+Speichergroesse;i++)
	{
		if(*i=='@')
		{
			i++;
			if(*i=='M')
			{
				i++;
				if(*i=='C')
					MC=atoi(i+2);
			}
			if(*i=='L')
			{
				i++;
				if(*i=='P')
					LP=atoi(i+2);
			}
			if(*i=='C')
			{
				i++;
				if(*i=='D')
					CD=atoi(i+2);
			}
			if(*i=='P')
			{
				i++;
				if(*i=='L')
					LPPos=(i+3);
				if(*i=='C')
					CDPos=(i+3);
			}
		}
		if(*i==10) *i=0;
	}
}
/**/
/// Main
main()
{
	int HZahl=0,Zufall=0,Medium=0,j;
	unsigned *timezahl=0;
	short Ende=1;
	register char *i;
	printf("$VER: BangerZufall 1.2 (25-Sep-96)\nAutor: Andre´ Trettin, Duwockskamp 33, 21029 Hamburg\nEMail: tretti-a@rzbt.fh-hamburg.de\n");
	if(DOSBase->dl_lib.lib_Version<=36) Fehler(1);
	if(!(PrefsFileHandle=Open("BangerZufall.prefs",MODE_OLDFILE))) Fehler(20);
	if(!(FIBMem=AllocMem(sizeof(struct FileInfoBlock),MEMF_PUBLIC|MEMF_CLEAR|MEMF_ANY))) Fehler(3);
	if(!(ExamineFH(PrefsFileHandle,FIBMem))) Fehler(20);
	Speichergroesse=FIBMem->fib_Size;
	if(!(PrefsMem=AllocMem(Speichergroesse,MEMF_PUBLIC|MEMF_CLEAR|MEMF_ANY))) Fehler(2);
	if(Read(PrefsFileHandle,PrefsMem,Speichergroesse)!=Speichergroesse) Fehler(20);
	PrefsInit();
	while(Ende)
	{
		Medium=wuerfel(3);
		if(Medium==1) HZahl=MC;
		else if(Medium==2) HZahl=LP;
			else HZahl=CD;
		Zufall=wuerfel(HZahl);
		if(Medium==2)
		{
			i=LPPos;
			j=1;
			while(j<Zufall)
			{
				while(*i++);
				j++;
			}
			printf("\033\13332mLP\033\133m --> \033\13333m%s\033\133m",i);
		}
		else if(Medium==1) printf("\033\13332mKassette\033\133m -->  \033\13333m%d\033\133m",Zufall);
			else
			{
				i=CDPos;
				j=1;
				while(j<Zufall)
				{
					while(*i++);
					j++;
				}
				printf("\033\13332mCD\033\133m --> \033\13333m%s\033\133m",i);
			}
		printf("\r\t\t\t\t\t\t\t\033\13332mNochmal:\033\13333mRet\033\133m / \033\13332mEnde:\033\13333mN\033\133m -->");
		if((getchar())=='N') Ende=0;
	}
	Fehler(0);
}
/**/
