#include <exec/types.h>
#include <stdio.h>

#define Xsize 10      /*     rozmiar sieci neuronowej    */
#define Ysize 10
#define Ilosc 10*10   /* iloôê iliteracji w kaûdym kroku */

char 	neuron[Xsize][Ysize], nazwa_pliku[108];
char	synaps[Xsize][Ysize][Xsize][Ysize];

BOOL Wczytaj( void )
{
	UBYTE 	x,y;
	char	znak;
	FILE    *fp;

if(!(fp=fopen(nazwa_pliku, "r")))
	return FALSE;

for( y=0; y<Ysize; y++ )         /* ustawia wszystkie */
	for( x=0; x<Xsize; x++ )     /*    neurony jako   */
	neuron[x][y]=-1;         /*     nieaktywne    */

for( y=0; y<Ysize; y++ )
	for( x=0; x<=Xsize; x++ )
		{
		znak=getc( fp );
		if( znak=='*' )
			neuron[x][y]=1;
		else if( znak==' ' )
			neuron[x][y]=-1;
		else if( znak=='\n' )
			break;
		else if( znak==EOF )
            return TRUE;
		}
fclose( fp );
}

void Ucz( void )
{
	UBYTE x,y,x1,y1;

for( x=0; x<Xsize; x++ )
	for( y=0; y<Ysize; y++ )
	{
		for( x1=0; x1<Xsize; x1++ )
			for( y1=0; y1<Ysize; y1++ )
				if( neuron[x][y]==neuron[x1][y1] )
					synaps[x][y][x1][y1]++;
				else
					synaps[x][y][x1][y1]--;
		synaps[x][y][x][y]=0;
	}
}

void krok( void )
{
	UBYTE i,x,y,x1,y1;
	int suma;

srand( time( NULL ) );
for( i=0; i<Ilosc; i++ )
	{
	x=rand()%(Xsize*Ysize);
	y=x%Ysize;
	x=x/Ysize;
	for( suma=0,x1=0; x1<Xsize; x1++ )
		for( y1=0; y1<Ysize; y1++ )
			suma+=neuron[x1][y1]*synaps[x][y][x1][y1];
	if( suma>0 )
		neuron[x][y]=1;
	else
		neuron[x][y]=-1;
	}
}

void Wyswietl( void )
{
	UBYTE x,y;

for( y=0; y<Ysize; y++ )
	{
	for( x=0; x<Xsize; x++ )
		if( neuron[x][y]==1 )	putchar('*');
		else					putchar(' ');
	putchar('\n');
	}
}

void main( void )
{
	UBYTE x,y,x1,y1;

for( x=0; x<Xsize; x++ )
	for( y=0; y<Ysize; y++ )
		for( x1=0; x1<Xsize; x1++ )
			for( y1=0; y1<Ysize; y1++ )
			synaps[x][y][x1][y1]=0;

while( TRUE )
	{
	fflush( NULL );
	printf( ">>>" );
	switch( getchar() )
		{
		case 'u':
			printf("podaj nazwe pliku:" );
			scanf("%s", nazwa_pliku);
			if( Wczytaj( ) )
				{
				Ucz( );
				Wyswietl( );
				}
			else printf("nie ma takiego pliku >%s<\n",nazwa_pliku);
			break;

		case 'r':
			printf("podaj nazwe pliku:" );
			scanf("%s", nazwa_pliku);
			if( Wczytaj( ) )
			Wyswietl( );
			else printf("nie ma takiego pliku >%s<\n",nazwa_pliku);
		break;

		case 'k':
			krok( );
			Wyswietl( );
			break;

		case 'w':
			exit( 0 );

		default:
			printf("\nu -ucz\nr -rozpoznaj\nk -krok\nw -wyjôcie\n");
		}
	}
}

