shithub: pt2-clone

Download patch

ref: b7102dd20d6aecd272068ee3b7a5fd2efa9c43a8
parent: 111a06b02ac20c539326e1d4182e4c7b3b78d771
author: Olav Sørensen <olav.sorensen@live.no>
date: Sun Mar 14 09:39:52 EDT 2021

Allow hex chars in Mix text input in Edit Op. #3 (fixes issue #15)

--- a/src/pt2_keyboard.c
+++ b/src/pt2_keyboard.c
@@ -4010,7 +4010,7 @@
 
 				textMarkerMoveRight();
 			}
-			else if ((textChar >= '0' && textChar <= '9') || (textChar >= 'A' && textChar <= 'F'))
+			else if ((textChar >= '0' && textChar <= '9') || (textChar >= 'a' && textChar <= 'f'))
 			{
 				if (ui.dstPos == 14) // hack for sample mix text
 				{
--- a/src/pt2_sampler.c
+++ b/src/pt2_sampler.c
@@ -1028,33 +1028,30 @@
 	updateWindowTitle(MOD_IS_MODIFIED);
 }
 
+// reads two hex chars from pointer and converts them to one byte
 static uint8_t hexToInteger2(char *ptr)
 {
-	char lo, hi;
+	char hi = ptr[0];
+	char lo = ptr[1];
 
-	/* This routine must ONLY be used on an address
-	** where two bytes can be read. It will mess up
-	** if the ASCII values are not '0 .. 'F' */
+	if (hi >= '0' && hi <= '9')
+		hi -= '0';
+	else if (hi >= 'A' && hi <= 'F')
+		hi -= 'A'-10;
+	else if (hi >= 'a' && hi <= 'f')
+		hi -= 'a'-10;
+	else
+		hi = 0;
 
-	hi = ptr[0];
-	lo = ptr[1];
+	if (lo >= '0' && lo <= '9')
+		lo -= '0';
+	else if (lo >= 'A' && lo <= 'F')
+		lo -= 'A'-10;
+	else if (lo >= 'a' && lo <= 'f')
+		lo -= 'a'-10;
+	else
+		lo = 0;
 
-	// high nybble
-	if (hi >= 'a')
-		hi -= ' ';
-
-	hi -= '0';
-	if (hi > 9)
-		hi -= 7;
-
-	// low nybble
-	if (lo >= 'a')
-		lo -= ' ';
-
-	lo -= '0';
-	if (lo > 9)
-		lo -= 7;
-
 	return (hi << 4) | lo;
 }
 
@@ -1076,9 +1073,13 @@
 		return;
 	}
 
-	s1 = &song->samples[--smpFrom1];
-	s2 = &song->samples[--smpFrom2];
-	s3 = &song->samples[--smpTo];
+	smpFrom1--;
+	smpFrom2--;
+	smpTo--;
+
+	s1 = &song->samples[smpFrom1];
+	s2 = &song->samples[smpFrom2];
+	s3 = &song->samples[smpTo];
 
 	if (s1->length == 0 || s2->length == 0)
 	{