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

#define BUFFER 102400           /*  Genau 100k puffer wird reserviert */

int *speicher, zaehler=0;
char tname[80];

main()
{
speicher = AllocMem(BUFFER,MEMF_PUBLIC);
if(speicher==NULL)
     {
       puts("Nicht genug Speicher");
       CloseAll();
     }

printf("\nBitte Pfad und Dateiname eingeben:  ");
scanf("%s",&tname);

Laden();
Patch();
Speichern();
CloseAll();
}

CloseAll()
{
   FreeMem(speicher,BUFFER);
   exit(0);
}

Laden()
{
FILE *datei;
if ((datei = fopen(tname,"r")) == NULL)
   {
     puts("Nicht lesbar!");
     CloseAll();
   }
while((*(speicher + zaehler) = fgetc(datei))!= EOF)
     zaehler++;
fclose(datei);
printf("\nDie Datei ist %d Bytes lang! \n",zaehler);
}

Speichern()
{
FILE *datei;
int error = 0, count = 0;
strcat(tname,".PAT");
if ((datei = fopen(tname,"w")) == NULL)
   {
     puts("Nicht beschreibbar!");
     CloseAll();
   }
while(count < zaehler)
   {
     error = fputc(*(speicher + count),datei);
     count++;
   }
fclose(datei);
printf("Save %d Bytes.\n\n",zaehler);
}

Patch()
{
int address, patches;

for(;;)
 {
    printf("Bitte Adresse eingeben, wo geaendert werden soll (ENDE mit 1):\n");
    scanf("%d",&address);
    if(address == 1)
      break;
    printf("Alter Wert ist dezimal %d\n",*(speicher + address));
    printf("Neuer dezimaler Wert eingeben: \n");
    scanf("%d",&patches);
    *(speicher + address) = patches;
 }
}


