shithub: alienpatch

Download patch

ref: 61074454b0c2bd2781efa495234acedf99cc86c4
parent: ba93922b65693ef44bcee2b7570876e3afd74424
author: qwx <qwx@sciops.net>
date: Tue Nov 8 03:10:24 EST 2022

ft2: sync with upstream, split french patch

--- /dev/null
+++ b/ft2-clone-french
@@ -1,0 +1,12 @@
+--- a/src/ft2_edit.c
++++ b/src/ft2_edit.c
+@@ -610,7 +610,8 @@
+ 	const bool frKeybHack = keyb.leftShiftPressed && !keyb.leftAltPressed && !keyb.leftCtrlPressed &&
+ 	               (scancode >= SDL_SCANCODE_1) && (scancode <= SDL_SCANCODE_0);
+ 
+-	if (frKeybHack || !keyb.keyModifierDown)
++//	if (frKeybHack || !keyb.keyModifierDown)
++	if (!keyb.keyModifierDown)
+ 		return (testEditKeys(scancode, keycode));
+ 
+ 	return false;
--- /dev/null
+++ b/ft2-clone-latest-and-midi
@@ -1,0 +1,323 @@
+diff d3f10b96512210ac8854f4355a11e9104a546644 uncommitted
+--- /dev/null
++++ b/midi.c
+@@ -1,0 +1,171 @@
++#include <stdio.h>
++#include <thread.h>
++#include "ft2_header.h"
++#include "ft2_edit.h"
++#include "ft2_config.h"
++#include "ft2_gui.h"
++#include "ft2_midi.h"
++#include "ft2_audio.h"
++#include "ft2_mouse.h"
++#include "ft2_pattern_ed.h"
++#include "ft2_structs.h"
++#include "rtmidi/rtmidi_c.h"
++
++static struct RtMidiWrapper notrt;
++static RtMidiCCallback callback;
++static int mpid = -1;
++static char *epfile, *eptab[MAX_MIDI_DEVICES];
++static int neps;
++
++static int
++scaneps(void)
++{
++	int fd, i, n, m;
++	char *s, *p, **t, **e, buf[512], *fl[32];
++	Dir *d;
++
++	e = eptab + nelem(eptab);
++	for(t=eptab; t<e; t++){
++		free(*t);
++		*t = nil;
++	}
++	neps = 0;
++	t = eptab;
++	/* special case for plugging in any non endpoint file */
++	if((s = getenv("midikbd")) != nil){
++		*t++ = s;
++		neps++;
++	}
++	if((fd = open("/dev/usb", OREAD)) < 0){
++		fprint(2, "scanusbep: %r\n");
++		return neps;
++	}
++	n = dirreadall(fd, &d);
++	close(fd);
++	if(n < 0){
++		fprint(2, "scanusbep: %r\n");
++		return neps;
++	}
++	for(i=0; i<n; i++){
++		snprint(buf, sizeof buf, "/dev/usb/%s/ctl", d[i].name);
++		if(epfile != nil && (s = strrchr(epfile, '/')) != nil){
++			if(strncmp(buf, epfile, s - epfile) == 0)
++				goto gotit;
++		}
++		if((fd = open(buf, OREAD)) < 0)
++			continue;
++		if((m = pread(fd, buf, sizeof buf, 0)) <= 0)
++			continue;
++		close(fd);
++		buf[m-1] = 0;
++		if(getfields(buf, fl, nelem(fl), 0, " ") < 26)
++			continue;
++		if(strcmp(fl[0], "enabled") != 0
++		|| strcmp(fl[2], "r") != 0 && strcmp(fl[2], "rw") != 0
++		|| strcmp(fl[25], "idle") != 0)
++			continue;
++	gotit:
++		if((*t++ = smprint("/dev/usb/%s/data", d[i].name)) == nil)
++			sysfatal("smprint: %r\n");
++		neps++;
++		if(t >= e)
++			break;
++	}
++	free(d);
++	return neps;
++}
++
++unsigned int
++rtmidi_get_port_count(RtMidiPtr)
++{
++	notrt.ok = true;
++	return scaneps();
++}
++
++char *
++rtmidi_get_port_name(RtMidiPtr, unsigned int i)
++{
++	char *s;
++
++	//assert(i < neps);
++	if(i >= neps)
++		return epfile;
++	if((s = strdup(eptab[i])) == nil)
++		sysfatal("strdup: %r");
++	return s;
++}
++
++void
++rtmidi_in_cancel_callback(RtMidiInPtr)
++{
++}
++
++void rtmidi_close_port(RtMidiPtr)
++{
++	threadkill(mpid);
++	mpid = -1;
++	callback = nil;
++	notrt.ok = false;
++	epfile = nil;
++}
++
++void rtmidi_in_free(RtMidiInPtr)
++{
++}
++
++RtMidiInPtr
++rtmidi_in_create_default(void)
++{
++	notrt.ok = true;
++	return &notrt;
++}
++
++void
++midiproc(void *ep)
++{
++	int fd, n, k;
++	uchar buf[1024];
++
++	if((fd = open((char*)ep, OREAD)) < 0){
++		fprint(2, "midiproc: could not open stream: %r; exiting");
++		goto end;
++	}
++	while((n = read(fd, buf, sizeof buf)) > 0){
++		if(n & 3)
++			fprint(2, "midiproc: malformed message size %d\n", n);
++		for(k=0; k<n; k+=4)
++			if(callback != nil)
++				callback(.0, buf+k+1, 3, nil);
++			else
++				fprint(2, "midiproc: discarding message\n");
++	}
++	fprint(2, "midiproc is off this merry-go-round: %r\n");
++end:
++	epfile = nil;
++	notrt.ok = false;
++	mpid = -1;
++}
++
++void
++rtmidi_open_port(RtMidiPtr, unsigned int i, char *)
++{
++	assert(mpid < 0);
++	if(i >= neps)	/* could be plugging in a new device, try again */
++		scaneps();
++	assert(i < neps);
++	notrt.ok = true;
++	epfile = eptab[i];
++	if((mpid = proccreate(midiproc, epfile, mainstacksize)) < 0)
++		sysfatal("proccreate: %r");
++}
++
++void
++rtmidi_in_set_callback(RtMidiInPtr, RtMidiCCallback fn, void *)
++{
++	callback = fn;
++}
++
++void
++rtmidi_in_ignore_types(RtMidiInPtr, bool, bool, bool)
++{
++}
+--- a/src/ft2_audio.c
++++ b/src/ft2_audio.c
+@@ -5,6 +5,7 @@
+ 
+ #include <stdio.h>
+ #include <stdint.h>
++#include <math.h>
+ #include "ft2_header.h"
+ #include "ft2_config.h"
+ #include "scopes/ft2_scopes.h"
+--- a/src/ft2_hpc.c
++++ b/src/ft2_hpc.c
+@@ -11,6 +11,7 @@
+ #include <SDL2/SDL.h>
+ #include <stdint.h>
+ #include <stdbool.h>
++#include <math.h>
+ #include "ft2_hpc.h"
+ 
+ #define FRAC_BITS 53
+--- a/src/ft2_main.c
++++ b/src/ft2_main.c
+@@ -93,12 +93,12 @@
+ 	}
+ #endif
+ 
+-#ifdef _WIN32
+-
+ 	// ALT+F4 is used in FT2, but is "close program" in Windows...
+ #if SDL_MINOR_VERSION >= 24 || (SDL_MINOR_VERSION == 0 && SDL_PATCHLEVEL >= 4)
+ 	SDL_SetHint(SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4, "1");
+ #endif
++
++#ifdef _WIN32
+ 
+ #ifndef _MSC_VER
+ 	SetProcessDPIAware();
+--- a/src/ft2_midi.c
++++ b/src/ft2_midi.c
+@@ -285,7 +285,10 @@
+ 	uint32_t i;
+ 
+ 	if (midi.inputDeviceName != NULL)
++	{
+ 		free(midi.inputDeviceName);
++		midi.inputDeviceName = NULL;
++	}
+ 
+ 	const uint32_t numDevices = getNumMidiInDevices();
+ 	if (numDevices == 0)
+--- a/src/ft2_scrollbars.c
++++ b/src/ft2_scrollbars.c
+@@ -224,7 +224,7 @@
+ 			{
+ 				dTmp = (scrollBar->w / (double)scrollBar->end) * scrollBar->page;
+ 				tmp32 = (int32_t)(dTmp + 0.5);
+-				realThumbLength = (int16_t)CLAMP(tmp32, 1, scrollBar->w);
++				realThumbLength = (int16_t)CLAMP(tmp32, 1, (int)scrollBar->w);
+ 			}
+ 			else
+ 			{
+@@ -251,7 +251,7 @@
+ 		}
+ 
+ 		// prevent scrollbar thumb coords from being outside of the scrollbar area
+-		thumbX = CLAMP(thumbX, scrollBar->x, scrollEnd-1);
++		thumbX = CLAMP((int)thumbX, (int)scrollBar->x, (int)scrollEnd-1);
+ 		if (thumbX+thumbW > scrollEnd)
+ 			thumbW = scrollEnd - thumbX;
+ 	}
+@@ -267,7 +267,7 @@
+ 		{
+ 			dTmp = (scrollBar->h / (double)scrollBar->end) * scrollBar->page;
+ 			tmp32 = (int32_t)(dTmp + 0.5);
+-			realThumbLength = (int16_t)CLAMP(tmp32, 1, scrollBar->h);
++			realThumbLength = (int16_t)CLAMP(tmp32, 1, (int)scrollBar->h);
+ 		}
+ 		else
+ 		{
+@@ -293,7 +293,7 @@
+ 		}
+ 
+ 		// prevent scrollbar thumb coords from being outside of the scrollbar area
+-		thumbY = CLAMP(thumbY, scrollBar->y, scrollEnd - 1);
++		thumbY = CLAMP((int)thumbY, (int)scrollBar->y, (int)scrollEnd - 1);
+ 		if (thumbY+thumbH > scrollEnd)
+ 			thumbH = scrollEnd - thumbY;
+ 	}
+@@ -523,7 +523,7 @@
+ 					}
+ 
+ 					assert(scrollBar->w > 0);
+-					scrollPos = CLAMP(scrollPos, 0, scrollBar->w);
++					scrollPos = CLAMP((int)scrollPos, 0, (int)scrollBar->w);
+ 
+ 					length = scrollBar->w + (scrollBar->realThumbLength - scrollBar->thumbW);
+ 					if (length < 1)
+@@ -549,7 +549,7 @@
+ 					scrollPos = mouse.lastScrollY - scrollBar->y - mouse.saveMouseY;
+ 
+ 					assert(scrollBar->h > 0);
+-					scrollPos = CLAMP(scrollPos, 0, scrollBar->h);
++					scrollPos = CLAMP((int)scrollPos, 0, (int)scrollBar->h);
+ 
+ 					length = scrollBar->h + (scrollBar->realThumbLength - scrollBar->thumbH);
+ 					if (length < 1)
+@@ -617,7 +617,7 @@
+ 			}
+ 
+ 			assert(scrollBar->w > 0);
+-			scrollX = CLAMP(scrollX, 0, scrollBar->w);
++			scrollX = CLAMP((int)scrollX, 0, (int)scrollBar->w);
+ 
+ 			length = scrollBar->w + (scrollBar->realThumbLength - scrollBar->thumbW);
+ 			if (length < 1)
+@@ -641,7 +641,7 @@
+ 			scrollY = mouse.lastScrollY - mouse.saveMouseY - scrollBar->y;
+ 
+ 			assert(scrollBar->h > 0);
+-			scrollY = CLAMP(scrollY, 0, scrollBar->h);
++			scrollY = CLAMP((int)scrollY, 0, (int)scrollBar->h);
+ 
+ 			length = scrollBar->h + (scrollBar->realThumbLength - scrollBar->thumbH);
+ 			if (length < 1)
+--- a/src/ft2_video.c
++++ b/src/ft2_video.c
+@@ -80,9 +80,9 @@
+ 
+ static void drawFPSCounter(void)
+ {
+-	SDL_version SDLVer;
++	//SDL_version SDLVer;
+ 
+-	SDL_GetVersion(&SDLVer);
++	//SDL_GetVersion(&SDLVer);
+ 
+ 	if (editor.framesPassed >= FPS_SCAN_FRAMES && (editor.framesPassed % FPS_SCAN_FRAMES) == 0)
+ 	{
+@@ -132,7 +132,8 @@
+ 	             "Relative mouse coords: %d,%d\n" \
+ 	             "Absolute mouse coords: %d,%d\n" \
+ 	             "Press CTRL+SHIFT+F to close this box.\n",
+-	             SDLVer.major, SDLVer.minor, SDLVer.patch,
++	             //SDLVer.major, SDLVer.minor, SDLVer.patch,
++	             9, 9, 9,
+ 	             dAvgFPS,
+ 	             dRefreshRate,
+ 	             video.vsync60HzPresent ? "yes" : "no",
--- a/ft2-clone-midi
+++ /dev/null
@@ -1,206 +1,0 @@
-diff d3f10b96512210ac8854f4355a11e9104a546644 uncommitted
---- /dev/null
-+++ b/midi.c
-@@ -1,0 +1,171 @@
-+#include <stdio.h>
-+#include <thread.h>
-+#include "ft2_header.h"
-+#include "ft2_edit.h"
-+#include "ft2_config.h"
-+#include "ft2_gui.h"
-+#include "ft2_midi.h"
-+#include "ft2_audio.h"
-+#include "ft2_mouse.h"
-+#include "ft2_pattern_ed.h"
-+#include "ft2_structs.h"
-+#include "rtmidi/rtmidi_c.h"
-+
-+static struct RtMidiWrapper notrt;
-+static RtMidiCCallback callback;
-+static int mpid = -1;
-+static char *epfile, *eptab[MAX_MIDI_DEVICES];
-+static int neps;
-+
-+static int
-+scaneps(void)
-+{
-+	int fd, i, n, m;
-+	char *s, *p, **t, **e, buf[512], *fl[32];
-+	Dir *d;
-+
-+	e = eptab + nelem(eptab);
-+	for(t=eptab; t<e; t++){
-+		free(*t);
-+		*t = nil;
-+	}
-+	neps = 0;
-+	t = eptab;
-+	/* special case for plugging in any non endpoint file */
-+	if((s = getenv("midikbd")) != nil){
-+		*t++ = s;
-+		neps++;
-+	}
-+	if((fd = open("/dev/usb", OREAD)) < 0){
-+		fprint(2, "scanusbep: %r\n");
-+		return neps;
-+	}
-+	n = dirreadall(fd, &d);
-+	close(fd);
-+	if(n < 0){
-+		fprint(2, "scanusbep: %r\n");
-+		return neps;
-+	}
-+	for(i=0; i<n; i++){
-+		snprint(buf, sizeof buf, "/dev/usb/%s/ctl", d[i].name);
-+		if(epfile != nil && (s = strrchr(epfile, '/')) != nil){
-+			if(strncmp(buf, epfile, s - epfile) == 0)
-+				goto gotit;
-+		}
-+		if((fd = open(buf, OREAD)) < 0)
-+			continue;
-+		if((m = pread(fd, buf, sizeof buf, 0)) <= 0)
-+			continue;
-+		close(fd);
-+		buf[m-1] = 0;
-+		if(getfields(buf, fl, nelem(fl), 0, " ") < 26)
-+			continue;
-+		if(strcmp(fl[0], "enabled") != 0
-+		|| strcmp(fl[2], "r") != 0 && strcmp(fl[2], "rw") != 0
-+		|| strcmp(fl[25], "idle") != 0)
-+			continue;
-+	gotit:
-+		if((*t++ = smprint("/dev/usb/%s/data", d[i].name)) == nil)
-+			sysfatal("smprint: %r\n");
-+		neps++;
-+		if(t >= e)
-+			break;
-+	}
-+	free(d);
-+	return neps;
-+}
-+
-+unsigned int
-+rtmidi_get_port_count(RtMidiPtr)
-+{
-+	notrt.ok = true;
-+	return scaneps();
-+}
-+
-+char *
-+rtmidi_get_port_name(RtMidiPtr, unsigned int i)
-+{
-+	char *s;
-+
-+	//assert(i < neps);
-+	if(i >= neps)
-+		return epfile;
-+	if((s = strdup(eptab[i])) == nil)
-+		sysfatal("strdup: %r");
-+	return s;
-+}
-+
-+void
-+rtmidi_in_cancel_callback(RtMidiInPtr)
-+{
-+}
-+
-+void rtmidi_close_port(RtMidiPtr)
-+{
-+	threadkill(mpid);
-+	mpid = -1;
-+	callback = nil;
-+	notrt.ok = false;
-+	epfile = nil;
-+}
-+
-+void rtmidi_in_free(RtMidiInPtr)
-+{
-+}
-+
-+RtMidiInPtr
-+rtmidi_in_create_default(void)
-+{
-+	notrt.ok = true;
-+	return &notrt;
-+}
-+
-+void
-+midiproc(void *ep)
-+{
-+	int fd, n, k;
-+	uchar buf[1024];
-+
-+	if((fd = open((char*)ep, OREAD)) < 0){
-+		fprint(2, "midiproc: could not open stream: %r; exiting");
-+		goto end;
-+	}
-+	while((n = read(fd, buf, sizeof buf)) > 0){
-+		if(n & 3)
-+			fprint(2, "midiproc: malformed message size %d\n", n);
-+		for(k=0; k<n; k+=4)
-+			if(callback != nil)
-+				callback(.0, buf+k+1, 3, nil);
-+			else
-+				fprint(2, "midiproc: discarding message\n");
-+	}
-+	fprint(2, "midiproc is off this merry-go-round: %r\n");
-+end:
-+	epfile = nil;
-+	notrt.ok = false;
-+	mpid = -1;
-+}
-+
-+void
-+rtmidi_open_port(RtMidiPtr, unsigned int i, char *)
-+{
-+	assert(mpid < 0);
-+	if(i >= neps)	/* could be plugging in a new device, try again */
-+		scaneps();
-+	assert(i < neps);
-+	notrt.ok = true;
-+	epfile = eptab[i];
-+	if((mpid = proccreate(midiproc, epfile, mainstacksize)) < 0)
-+		sysfatal("proccreate: %r");
-+}
-+
-+void
-+rtmidi_in_set_callback(RtMidiInPtr, RtMidiCCallback fn, void *)
-+{
-+	callback = fn;
-+}
-+
-+void
-+rtmidi_in_ignore_types(RtMidiInPtr, bool, bool, bool)
-+{
-+}
---- a/src/ft2_edit.c
-+++ b/src/ft2_edit.c
-@@ -610,7 +610,8 @@
- 	const bool frKeybHack = keyb.leftShiftPressed && !keyb.leftAltPressed && !keyb.leftCtrlPressed &&
- 	               (scancode >= SDL_SCANCODE_1) && (scancode <= SDL_SCANCODE_0);
- 
--	if (frKeybHack || !keyb.keyModifierDown)
-+//	if (frKeybHack || !keyb.keyModifierDown)
-+	if (!keyb.keyModifierDown)
- 		return (testEditKeys(scancode, keycode));
- 
- 	return false;
---- a/mkfile.plan9
-+++ b/mkfile.plan9
-@@ -2,7 +2,7 @@
- 
- BIN=/$objtype/bin/audio
- TARG=ft2
--CFLAGS=$CFLAGS -p -Isrc -I/sys/include/npe -D__plan9__
-+CFLAGS=$CFLAGS -p -Isrc -Isrc/rtmidi -I/sys/include/npe -D__plan9__ -DHAS_MIDI
- 
- HFILES=\
- 	src/ft2_about.h\
-@@ -122,6 +122,7 @@
- 	src/smploaders/ft2_load_iff.$O\
- 	src/smploaders/ft2_load_raw.$O\
- 	src/smploaders/ft2_load_wav.$O\
-+	midi.$O\
- 
- default:V: all
-