Add bare-minimum extension-reaper-macos REAPER extension skeleton

C/C++ extension built directly against the vendored Cockos reaper-sdk
headers (no Rust/reaper-rs wrapper layer). Loads, registers a test
action, and confirms via REAPER's console — confirmed working in
REAPER 2026-07-15.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-15 19:12:33 -04:00
parent 7ecc718f5d
commit cd5ebd84d6
512 changed files with 330043 additions and 1 deletions
@@ -0,0 +1,67 @@
/******************************************************************************
Plush Version 1.2
math.c
Math and Matrix Control
Copyright (c) 1996-2000, Justin Frankel
******************************************************************************/
#include "plush.h"
void plMatrixRotate(pl_Float matrix[], pl_uChar m, pl_Float Deg) {
pl_uChar m1, m2;
double c,s;
double d= Deg * PL_PI / 180.0;
memset(matrix,0,sizeof(pl_Float)*16);
matrix[((m-1)<<2)+m-1] = matrix[15] = 1.0;
m1 = (m % 3);
m2 = ((m1+1) % 3);
c = cos(d); s = sin(d);
matrix[(m1<<2)+m1]=(pl_Float)c; matrix[(m1<<2)+m2]=(pl_Float)s;
matrix[(m2<<2)+m2]=(pl_Float)c; matrix[(m2<<2)+m1]=(pl_Float)-s;
}
void plMatrixTranslate(pl_Float m[], pl_Float x, pl_Float y, pl_Float z) {
memset(m,0,sizeof(pl_Float)*16);
m[0] = m[4+1] = m[8+2] = m[12+3] = 1.0;
m[0+3] = x; m[4+3] = y; m[8+3] = z;
}
void plMatrixMultiply(pl_Float *dest, const pl_Float src[]) {
pl_Float temp[16];
pl_uInt i;
memcpy(temp,dest,sizeof(pl_Float)*16);
for (i = 0; i < 16; i += 4) {
*dest++ = src[i+0]*temp[(0<<2)+0]+src[i+1]*temp[(1<<2)+0]+
src[i+2]*temp[(2<<2)+0]+src[i+3]*temp[(3<<2)+0];
*dest++ = src[i+0]*temp[(0<<2)+1]+src[i+1]*temp[(1<<2)+1]+
src[i+2]*temp[(2<<2)+1]+src[i+3]*temp[(3<<2)+1];
*dest++ = src[i+0]*temp[(0<<2)+2]+src[i+1]*temp[(1<<2)+2]+
src[i+2]*temp[(2<<2)+2]+src[i+3]*temp[(3<<2)+2];
*dest++ = src[i+0]*temp[(0<<2)+3]+src[i+1]*temp[(1<<2)+3]+
src[i+2]*temp[(2<<2)+3]+src[i+3]*temp[(3<<2)+3];
}
}
void plMatrixApply(pl_Float *m, pl_Float x, pl_Float y, pl_Float z,
pl_Float *outx, pl_Float *outy, pl_Float *outz) {
*outx = x*m[0] + y*m[1] + z*m[2] + m[3];
*outy = x*m[4] + y*m[5] + z*m[6] + m[7];
*outz = x*m[8] + y*m[9] + z*m[10] + m[11];
}
pl_Float plDotProduct(pl_Float x1, pl_Float y1, pl_Float z1,
pl_Float x2, pl_Float y2, pl_Float z2) {
return ((x1*x2)+(y1*y2)+(z1*z2));
}
void plNormalizeVector(pl_Float *x, pl_Float *y, pl_Float *z) {
double length;
length = (*x)*(*x)+(*y)*(*y)+(*z)*(*z);
if (length > 0.0000000001) {
pl_Float t = (pl_Float)sqrt(length);
*x /= t;
*y /= t;
*z /= t;
} else *x = *y = *z = 0.0;
}