// Thread functions for use with syntmono. // // Gary P. Scavone, 1999. #include "threads.h" #if defined(__STK_REALTIME_) #define SERVICE_PORT 2001 // Socket Port ID number // Do OS dependent declarations and includes #if defined(__OS_IRIX_) #include #include #include #include #include #include #include pid_t string_thread; #elif defined(__OS_Linux_) #include #include #include #include #include #include pthread_t string_thread; #elif defined(__OS_Win_) #include #include unsigned long string_thread; #endif // The thread function definition protocols are slightly // different under Irix, Linux, and Windoze. #if defined(__OS_IRIX_) void newStringByPipe(void *) #elif defined(__OS_Linux_) void *newStringByPipe(void *) #elif defined(__OS_Win_) void newStringByPipe(void *) #endif { extern int numStrings, notDone; extern char **inputString; int i; // Malloc inputString. inputString = (char **) malloc(MAX_IN_STRINGS * sizeof(char *)); for ( i=0;i MAX_IN_STRINGS) { fprintf(stderr,"Losing MIDI data ... try increasing MAX_IN_STRINGS.\n"); numStrings--; } inOne++; if (inOne == MAX_IN_STRINGS) inOne = 0; } } // Free inputString. for ( i=0;i maxfd) maxfd = accept_id; FD_CLR(soc_id, &rmask); } for (fd=0;fd<=maxfd;fd++) { // look for other sockets with data if (FD_ISSET(fd, &rmask)) { // process the data parsing = 1; while (parsing) { i = recv(fd, socBuf, STRING_LEN,0); if (i==0) { printf("Closing a socket connection.\n"); FD_CLR(fd, &mask); #if defined(__OS_Win_) closesocket(fd); #else close(fd); #endif parsing = 0; } n = 0; while (n < i) { inputString[inOne][m++] = socBuf[n]; if (socBuf[n++] == '\n') { if (inputString[inOne][2] == 'i' && inputString[inOne][3] == 't' && inputString[inOne][1] == 'x' && inputString[inOne][0] == 'E') { notDone = 0; n = i; parsing = 0; } else { m = 0; if (n >= i) parsing = 0; numStrings++; if (numStrings > MAX_IN_STRINGS) { fprintf(stderr,"Losing MIDI data ... try increasing MAX_IN_STRINGS.\n"); numStrings--; } inOne++; if (inOne == MAX_IN_STRINGS) inOne = 0; memset(inputString[inOne], 0, STRING_LEN); } } } } } } } #if defined(__OS_Win_) // Stupid Windoze only stuff closesocket(soc_id); WSACleanup(); #else shutdown(soc_id,0); #endif // Free inputString. for ( i=0;i