changeset 894:7ade15d4e0cb

fc-buzplay: BU refactoring, first step
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 03 Apr 2022 08:11:05 +0000
parents 85091e14be9c
children 850b4f066d75
files loadtools/Makefile loadtools/bpdispatch.c loadtools/buzplay.c loadtools/buzplaybu.c
diffstat 4 files changed, 134 insertions(+), 127 deletions(-) [+]
line wrap: on
line diff
--- a/loadtools/Makefile	Sun Apr 03 08:00:50 2022 +0000
+++ b/loadtools/Makefile	Sun Apr 03 08:11:05 2022 +0000
@@ -27,7 +27,7 @@
 		labaud.o lacrc32.o romload.o secondprog.o srecreader.o \
 		tpinterf.o tpinterf2.o tpinterfb.o ttypassthru.o
 
-BUZPLAY_OBJS=	bpdispatch.o bpmain.o buzplay.o buzplaypwt.o compalload.o \
+BUZPLAY_OBJS=	bpdispatch.o bpmain.o buzplaybu.o buzplaypwt.o compalload.o \
 		defpath.o flashstubs.o hexdecode.o hwparam.o labaud.o ltexit.o \
 		ltpassthru.o romload.o srecreader.o tpinterf.o
 
--- a/loadtools/bpdispatch.c	Sun Apr 03 08:00:50 2022 +0000
+++ b/loadtools/bpdispatch.c	Sun Apr 03 08:11:05 2022 +0000
@@ -10,7 +10,7 @@
 
 extern int cmd_baud();
 extern int cmd_exit();
-extern int cmd_play();
+extern int cmd_play_bu();
 extern int cmd_play_pwt();
 extern int loadtool_cmd_passthru();
 
@@ -25,7 +25,8 @@
 	{"baud", 0, 1, cmd_baud},
 	{"buzlev", 0, 1, loadtool_cmd_passthru},
 	{"exit", 0, 1, cmd_exit},
-	{"play", 1, 1, cmd_play},
+	{"play", 1, 1, cmd_play_bu},
+	{"play-bu", 1, 1, cmd_play_bu},
 	{"play-pwt", 1, 2, cmd_play_pwt},
 	{"playt", 1, 2, cmd_play_pwt},
 	{"pwt", 1, 1, loadtool_cmd_passthru},
--- a/loadtools/buzplay.c	Sun Apr 03 08:00:50 2022 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * The actual functionality of fc-buzplay is implemented here.
- */
-
-#include <sys/types.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <string.h>
-#include <strings.h>
-#include <stdlib.h>
-
-cmd_play(argc, argv)
-	char **argv;
-{
-	FILE *f;
-	char linebuf[256], *cp, *num1, *num2;
-	int lineno;
-	char *targv[4];
-	u_long n1, n2, total_ms;
-	int rc, timeout;
-
-	f = fopen(argv[1], "r");
-	if (!f) {
-		perror(argv[1]);
-		return(-1);
-	}
-	printf("Uploading the melody to the target\n");
-	targv[0] = "I";
-	targv[1] = 0;
-	tpinterf_make_cmd(targv);
-	if (tpinterf_send_cmd() < 0) {
-		fclose(f);
-		return(-1);
-	}
-	rc = tpinterf_pass_output(1);
-	if (rc) {
-		fclose(f);
-		return(rc);
-	}
-	targv[0] = "E";
-	targv[3] = 0;
-	total_ms = 0;
-	for (lineno = 1; fgets(linebuf, sizeof linebuf, f); lineno++) {
-		cp = index(linebuf, '\n');
-		if (!cp) {
-			fprintf(stderr, "%s line %d: missing newline\n",
-				argv[1], lineno);
-			fclose(f);
-			return(-1);
-		}
-		for (cp = linebuf; isspace(*cp); cp++)
-			;
-		if (*cp == '\0' || *cp == '#')
-			continue;
-		if (!isdigit(*cp)) {
-inv:			fprintf(stderr, "%s line %d: unexpected content\n",
-				argv[1], lineno);
-			fclose(f);
-			return(-1);
-		}
-		for (num1 = cp; *cp && !isspace(*cp); cp++)
-			if (!isdigit(*cp))
-				goto inv;
-		if (isspace(*cp))
-			*cp++ = '\0';
-		while (isspace(*cp))
-			cp++;
-		if (!isdigit(*cp))
-			goto inv;
-		for (num2 = cp; *cp && !isspace(*cp); cp++)
-			if (!isdigit(*cp))
-				goto inv;
-		if (isspace(*cp))
-			*cp++ = '\0';
-		while (isspace(*cp))
-			cp++;
-		if (*cp != '\0' && *cp != '#')
-			goto inv;
-		n1 = strtoul(num1, 0, 10);
-		n2 = strtoul(num2, 0, 10);
-		if (n1 > 255) {
-			fprintf(stderr,
-				"%s line %d: the tone number is out of range\n",
-				argv[1], lineno);
-			fclose(f);
-			return(-1);
-		}
-		if (n2 < 1 || n2 > 0xFFFF) {
-			fprintf(stderr,
-			"%s line %d: the duration number is out of range\n",
-				argv[1], lineno);
-			fclose(f);
-			return(-1);
-		}
-		/* send it to the target */
-		targv[1] = num1;
-		targv[2] = num2;
-		tpinterf_make_cmd(targv);
-		if (tpinterf_send_cmd() < 0) {
-			fclose(f);
-			return(-1);
-		}
-		rc = tpinterf_pass_output(1);
-		if (rc) {
-			fclose(f);
-			return(rc);
-		}
-		/* account for the duration */
-		total_ms += n2 * 5;
-	}
-	fclose(f);
-	if (!total_ms) {
-		fprintf(stderr, "%s is empty!\n", argv[1]);
-		return(-1);
-	}
-	printf("Requesting play of the uploaded melody on the target\n");
-	targv[0] = "P";
-	targv[1] = 0;
-	tpinterf_make_cmd(targv);
-	if (tpinterf_send_cmd() < 0)
-		return(-1);
-	timeout = total_ms / 1000 + 2;
-	return tpinterf_pass_output(timeout);
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/buzplaybu.c	Sun Apr 03 08:11:05 2022 +0000
@@ -0,0 +1,130 @@
+/*
+ * fc-buzplay: this module implements the legacy BU mode.
+ */
+
+#include <sys/types.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+
+buzplay_bu_file(filename)
+	char *filename;
+{
+	FILE *f;
+	char linebuf[256], *cp, *num1, *num2;
+	int lineno;
+	char *targv[4];
+	u_long n1, n2, total_ms;
+	int rc, timeout;
+
+	f = fopen(filename, "r");
+	if (!f) {
+		perror(filename);
+		return(-1);
+	}
+	printf("Uploading the melody to the target\n");
+	targv[0] = "I";
+	targv[1] = 0;
+	tpinterf_make_cmd(targv);
+	if (tpinterf_send_cmd() < 0) {
+		fclose(f);
+		return(-1);
+	}
+	rc = tpinterf_pass_output(1);
+	if (rc) {
+		fclose(f);
+		return(rc);
+	}
+	targv[0] = "E";
+	targv[3] = 0;
+	total_ms = 0;
+	for (lineno = 1; fgets(linebuf, sizeof linebuf, f); lineno++) {
+		cp = index(linebuf, '\n');
+		if (!cp) {
+			fprintf(stderr, "%s line %d: missing newline\n",
+				filename, lineno);
+			fclose(f);
+			return(-1);
+		}
+		for (cp = linebuf; isspace(*cp); cp++)
+			;
+		if (*cp == '\0' || *cp == '#')
+			continue;
+		if (!isdigit(*cp)) {
+inv:			fprintf(stderr, "%s line %d: unexpected content\n",
+				filename, lineno);
+			fclose(f);
+			return(-1);
+		}
+		for (num1 = cp; *cp && !isspace(*cp); cp++)
+			if (!isdigit(*cp))
+				goto inv;
+		if (isspace(*cp))
+			*cp++ = '\0';
+		while (isspace(*cp))
+			cp++;
+		if (!isdigit(*cp))
+			goto inv;
+		for (num2 = cp; *cp && !isspace(*cp); cp++)
+			if (!isdigit(*cp))
+				goto inv;
+		if (isspace(*cp))
+			*cp++ = '\0';
+		while (isspace(*cp))
+			cp++;
+		if (*cp != '\0' && *cp != '#')
+			goto inv;
+		n1 = strtoul(num1, 0, 10);
+		n2 = strtoul(num2, 0, 10);
+		if (n1 > 255) {
+			fprintf(stderr,
+				"%s line %d: the tone number is out of range\n",
+				filename, lineno);
+			fclose(f);
+			return(-1);
+		}
+		if (n2 < 1 || n2 > 0xFFFF) {
+			fprintf(stderr,
+			"%s line %d: the duration number is out of range\n",
+				filename, lineno);
+			fclose(f);
+			return(-1);
+		}
+		/* send it to the target */
+		targv[1] = num1;
+		targv[2] = num2;
+		tpinterf_make_cmd(targv);
+		if (tpinterf_send_cmd() < 0) {
+			fclose(f);
+			return(-1);
+		}
+		rc = tpinterf_pass_output(1);
+		if (rc) {
+			fclose(f);
+			return(rc);
+		}
+		/* account for the duration */
+		total_ms += n2 * 5;
+	}
+	fclose(f);
+	if (!total_ms) {
+		fprintf(stderr, "%s is empty!\n", filename);
+		return(-1);
+	}
+	printf("Requesting play of the uploaded melody on the target\n");
+	targv[0] = "P";
+	targv[1] = 0;
+	tpinterf_make_cmd(targv);
+	if (tpinterf_send_cmd() < 0)
+		return(-1);
+	timeout = total_ms / 1000 + 2;
+	return tpinterf_pass_output(timeout);
+}
+
+cmd_play_bu(argc, argv)
+	char **argv;
+{
+	buzplay_bu_file(argv[1]);
+}