void RW_IN_Move (usercmd_t *cmd) { float mouse_x, mouse_y; if (!mouse_works) return; _fmutex_request(&sem, _FMR_IGNINT); mouse_x = xpos; mouse_y = ypos; xpos = 0; ypos = 0; _fmutex_release(&sem); //if (mouse_x || mouse_y) Con_Printf("%f %f %08x %08lx\n", mouse_x, mouse_y, (int)ev->fs, ev->time); /* and this is copied from vid_svgalib.c */ mouse_x *= sensitivity->value * 1.95; mouse_y *= sensitivity->value * 1.95; // add mouse X/Y movement to cmd if ( (*in_state->in_strafe_state & 1) || (lookstrafe->value && mlooking )) cmd->sidemove += m_side->value * mouse_x; else in_state->viewangles[YAW] -= m_yaw->value * mouse_x; if ( (mlooking || freelook->value) && !(*in_state->in_strafe_state & 1)) { in_state->viewangles[PITCH] += m_pitch->value * mouse_y; } else { cmd->forwardmove -= m_forward->value * mouse_y; } }
static int kai_stream_set_volume(cubeb_stream * stm, float volume) { _fmutex_request(&stm->mutex, 0); stm->soft_volume = volume; _fmutex_release(&stm->mutex); return CUBEB_OK; }
static int kai_stream_get_position(cubeb_stream * stm, uint64_t * position) { _fmutex_request(&stm->mutex, 0); *position = stm->total_frames; _fmutex_release(&stm->mutex); return CUBEB_OK; }
/* acquires the lock */ void incdep_lock(void) { #if defined (HAVE_PTHREAD) && !defined (CONFIG_WITHOUT_THREADS) pthread_mutex_lock (&incdep_mtx); #elif defined (WINDOWS32) EnterCriticalSection (&incdep_mtx); #elif defined (__OS2__) _fmutex_request (&incdep_mtx, 0); #endif }
void RW_IN_Commands (void) { if (!mouse_works) return; _fmutex_request(&sem, _FMR_IGNINT); if (buttons == -1) goto ret; if ((buttons & 1) && !(old_buttons & 1)) Key_Event_fp(K_MOUSE1, true); if (!(buttons & 1) && (old_buttons & 1)) Key_Event_fp(K_MOUSE1, false); if ((buttons & 2) && !(old_buttons & 2)) Key_Event_fp(K_MOUSE2, true); if (!(buttons & 2) && (old_buttons & 2)) Key_Event_fp(K_MOUSE2, false); if ((buttons & 4) && !(old_buttons & 4)) Key_Event_fp(K_MOUSE3, true); if (!(buttons & 4) && (old_buttons & 4)) Key_Event_fp(K_MOUSE3, false); old_buttons = buttons; ret: _fmutex_release(&sem); }
void mouse_thread(void *p) { HMOU h = mh; USHORT rd = MOU_WAIT; DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, 31, 0); while (1) { if (MouReadEventQue(ev, &rd, h)) return; if (!mouse_works) goto ret; _fmutex_request(&sem, _FMR_IGNINT); xpos += ev->col; ypos += ev->row; buttons = ((ev->fs & (MOUSE_MOTION_WITH_BN1_DOWN|MOUSE_BN1_DOWN)) ? 1 : 0) + ((ev->fs & (MOUSE_MOTION_WITH_BN2_DOWN|MOUSE_BN2_DOWN)) ? 2 : 0) + ((ev->fs & (MOUSE_MOTION_WITH_BN3_DOWN|MOUSE_BN3_DOWN)) ? 4 : 0); _fmutex_release(&sem); } ret: MouClose(h); }
static ULONG APIENTRY kai_callback(PVOID cbdata, PVOID buffer, ULONG len) { cubeb_stream * stm = cbdata; void *p; long wanted_frames; long frames; float soft_volume; int elements = len / sizeof(int16_t); p = stm->params.format == CUBEB_SAMPLE_FLOAT32NE ? stm->float_buffer : buffer; wanted_frames = bytes_to_frames(len, stm->params); frames = stm->data_callback(stm, stm->user_ptr, NULL, p, wanted_frames); _fmutex_request(&stm->mutex, 0); stm->total_frames += frames; soft_volume = stm->soft_volume; _fmutex_release(&stm->mutex); if (frames < wanted_frames) stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_DRAINED); if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) float_to_s16ne(buffer, p, elements); if (soft_volume != -1.0f) { int16_t *b = buffer; int i; for (i = 0; i < elements; i++) *b++ *= soft_volume; } return frames_to_bytes(frames, stm->params); }