winport - apply ROM file pasting as a single undoable action using the multi-byte capability already in ApplyPatch. Fixes #394

This commit is contained in:
zeromus 2022-08-28 17:14:55 -04:00
parent 069727c191
commit 6b0d1a52ca
1 changed files with 47 additions and 33 deletions

View File

@ -960,14 +960,14 @@ void FreezeRam(int address, int mode, int final){
//input is expected to be an ASCII string
void InputData(char *input){
//CursorEndAddy = -1;
int addr, i, j, datasize = 0;
int addr, datasize = 0;
unsigned char *data;
char inputc;
//char str[100];
//mbg merge 7/18/06 added cast:
data = (uint8 *)malloc(strlen(input) + 1); //it can't be larger than the input string, so use that as the size
for(i = 0;input[i] != 0;i++){
for(int i = 0;input[i] != 0;i++){
if(!EditingText){
inputc = -1;
if((input[i] >= 'a') && (input[i] <= 'f')) inputc = input[i]-('a'-0xA);
@ -983,9 +983,15 @@ void InputData(char *input){
{
TempData = inputc;
}
} else {
for(j = 0;j < 256;j++)if(chartable[j] == input[i])break;
if(j == 256)continue;
}
else
{
int j;
for(j = 0; j < 256; j++)
if(chartable[j] == input[i])
break;
if(j == 256)
continue;
data[datasize++] = j;
}
}
@ -1003,7 +1009,14 @@ void InputData(char *input){
//sprintf(str,"datasize = %d",datasize);
//MessageBox(hMemView,str, "debug", MB_OK);
for(i = 0;i < datasize;i++){
if(EditingMode == MODE_NES_FILE)
{
ApplyPatch(CursorStartAddy, datasize, data);
}
else
{
for(int i = 0;i < datasize;i++)
{
addr = CursorStartAddy+i;
if (addr >= MaxSize) continue;
@ -1034,6 +1047,7 @@ void InputData(char *input){
break;
}
}
}
CursorStartAddy+=datasize;
CursorEndAddy=-1;
if(CursorStartAddy >= MaxSize)CursorStartAddy = MaxSize-1;