v4k-git-backup/tools/editor/labs.osc/oscsend.c

29 lines
1.7 KiB
C
Raw Normal View History

2023-10-13 10:59:44 +00:00
#include "fwk.h"
2023-08-10 14:30:56 +00:00
#include "oscsend.h"
#include "oscedit.h"
int main(int argc, char **argv) {
if( argc > 1 ) {
char *address = argv[1];
char *arg = 0; strcatf(&arg, "%s", ""); for(int i = 2; i < argc; ++i) strcatf(&arg, "%s", argv[i]);
char *message = 0;
if( !arg[0] ) message = osc_pack_va(address, "");
else if( strchr("\'\"`", arg[0]) ) message = osc_pack_va(address, "s", (arg[strlen(arg)-1] = '\0', arg+1) );
else if( !strcmp(arg, "true") || !strcmp(arg, "false") ) message = osc_pack_va(address, arg[0] == 't' ? "T" : "F");
else if( strchr(".+-0123456789", arg[0]) && strpbrk(arg, ".fe") ) message = osc_pack_va(address, "f", atof(arg));
else if( strchr( "+-0123456789", arg[0]) && strspn(arg+1, "0123456789") == strlen(arg)-1 ) message = osc_pack_va(address, "i", atoi(arg));
else message = osc_pack_va(address, "s", arg );
hexdump( message+4, *(int*)message );
int socket = osc_open("127.0.0.1", OSC_EDIT_PORT);
printf("%d bytes sent\n", osc_send( socket, message+4, *(int*)message ));
} else {
printf("%s /osc/address/ [argtype]\n", argv[0]);
printf("argtypes: [false][true][int][float][string]\n\n","\t");
printf("example: %s /player/time 5.5\n", argv[0]);
printf("example: %s /player/health 100\n", argv[0]);
printf("example: %s /player/active true\n", argv[0]);
printf("example: %s /player/fullname \"john doe\"\n", argv[0]);
}
}