

/*
 *      STORE.C
 *      KszĄtette:     Rom ny J˘zsef   Tel.: (36) 413-110
 *
 *  Verzi˘:         1.00
 *      D tum:                  1994.01.14. -
 *
 *  A program a PIO (288dec) A-portj n olvas be 16kbyte-ot s lementi file-ba.
 *  A PRIMO a B port 0.- s bitjn 1-gyel jelzi a PC-nek, hogy
 *  beolvashat egy byte-ot. A PRIMO v rja, hogy a PC, az adat beolvas sa
 *  ut n a C-port 0.bitjn 1-gyel jelezze a beolvas s megtrtntt.
 *  Ha a PRIMO megkapta ezt a bitet, 0-ba teszi a B-portot, erre a PC
 *	0-ba teszi a C-portot. A PRIMO kiteszi az A-ra a kvetkezt, B-t 1-be
 *	teszi stb.
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <io.h>

FILE    *out;
char    buffer[ 16384 ];    /* buffer - 16 kbyte                         */
char    FILE_NEV[50];       /* az  talakĄtand˘ file neve ( path - szal ) */
char    ch;
int     lement;             /* 1-kell menteni, 0-nem kell menteni        */
int     handle;
int     i;                  /* ciklusvaltozo                             */
unsigned char   a;          /* a belvasott byte                          */
unsigned char   m;          /* ellenrz sszeg                          */
int     length, res;


int main(void)
{
 outport(294,146);  /* A-be, B-be, C-ki */
 m = 0;
 port_beolvas();

 printf(" \n Nyomj N-et, ha nem akarod menteni !\n");
 ch = getch();
 if ( ch == 'n' || ch == 'N' ) exit(0);

 printf("\n Milyen nven mentsem az  llom nyt ? ");
 gets(FILE_NEV);

 /* Megnyitjuk a file-t ha tudjuk, de elszr megnzzk, van-e ilyen nev */
 if ( ( out = fopen( FILE_NEV, "r") ) != NULL )
		{
		 printf(" %s nev file m r ltezik. FellĄrjam ?", FILE_NEV );
		 printf(" ( i/n ) ");
		 while ( 1 )
				   {
						ch = getch();
						if ( ch == 'i' || ch == 'I' )
						   { lement = 1;
								 printf("%c\n\n", ch);
								 fclose ( out );
								 break;
						   }
						if ( ch == 'n' || ch == 'N' )
						   { lement = 0;
								 printf("%c\n\n", ch);
								 fclose ( out );
								 exit(0);
						   }
						}
		}

 if ((handle = open( FILE_NEV, O_WRONLY | O_CREAT | O_BINARY )) == -1)
		{
		 printf(" Error opening file.\n");
		 exit(1);
		}

 if ((res = write(handle, buffer, sizeof(buffer))) != sizeof(buffer))
		{
		 printf("Error writing to the file.\n");
		 exit(1);
		}
 printf(" %d size of buffer:\n", sizeof(buffer));
 printf(" %d byte lementve.\n", res);

 close(handle);
 return 0;
}

port_beolvas()
{
 printf(" IndĄtsd a PRIMO programot ! Adat tvitel kb. 5 sec.\n");

 for (i=0; i<=16383; i++)
	 {
		  do
		   {                        /* V runk, amĄg a PRIMO */
			 a = inport(290);       /* a B-porton rvnyes  */
		   } while ( a == 0 );      /* adatot jelez         */

		  a = inport ( 288 );       /* beolvassuk az adatot */
		  buffer[i] = a ;           /* betesszk a bufferbe */
		  m = m + a ;               /* nveljk az ellenrz sszeget */
		  printf( "%d.", a );       /* kiĄratjuk a beolvasott byte-ot */

		  outport(292, 1);          /* a C porton jelezzk, hogy beolvastuk*/

		  do
		   {                        /* A PRIMO a B-porton 0-val */
			 a = inport(290);       /* fogja jelezni, hogy meg- */
		   } while ( a == 1 );      /* rtette.                 */

		  outport(292, 0);          /* a C porton jelezzk, hogy beolvastuk*/
	 }

 do
  {
	a = inport(290);                /* V rjuk, hogy olvashassuk az */
  } while ( a == 0 );               /* ellenrz sszeget.         */

 a = inport ( 288 );
  printf("\n A PRIMO-t˘l kapott ellenrz sszeg: %d", a );
  printf("\n Az  ltalam sz molt ellenrz sszeg: %d\n", m );

 outport(292, 1);                   /* a C porton jelezzk, hogy beolvastuk*/
 do
  {
	a = inport(290);                /* V runk, hogy a PRIMO nyugt zza */
  } while ( a == 0 );

 outport(292, 0);                   /* Nyugt zzuk a nyugt z st        */

}

