>>719
#include<stdio.h>

int exec_patch(FILE *fp_dest, FILE *fp_patch){
unsigned long address_num;
int value;
char buf[2+1];

while(1){
if(fscanf(fp_patch, "%lx%1[:]", &address_num, buf)!=2) break;
fseek(fp_dest, address_num, SEEK_SET);
while(fscanf(fp_patch, "%2[0-9A-Fa-f]", buf)==1){
if(buf[1]=='\0') return 0;
sscanf(buf, "%x", &value);
fputc(value, fp_dest);
}
}
return feof(fp_patch);
}

int main(void){
FILE *dest, *patch;

dest=fopen("src.dat", "r+b");
patch=fopen("patch.dat", "r");
if(dest==NULL || patch==NULL) return 1;
if(!exec_patch(dest, patch)) fprintf(stderr, "\nError: patch failed.\n");

return 0;
}