static void oss_start_w(MSSndCard *card){ OssData *d=(OssData*)card->data; ms_mutex_lock(&d->mutex); if (d->read_started==FALSE && d->write_started==FALSE){ d->write_started=TRUE; ms_thread_create(&d->thread,NULL,oss_thread,card); }else{ d->write_started=TRUE; } _flush_buffer(d->bufferizer); ms_mutex_unlock(&d->mutex); }
void lexer_process(void) { token_t token; token_t (*process_token)(void) = NULL; if (_.eoi_reached) return; _scan(); _flush_buffer(); switch (_cur_char()) { case '\0': process_token = _process_eoi; _.eoi_reached = true; break; case SIGIL_STR_VAR: case SIGIL_INT_VAR: case SIGIL_BOOL_VAR: process_token = _process_variable; break; case DELIMITER_STR: process_token = _process_string; break; default: // identifer if (_char_is_alpha(_cur_char())) { process_token = _process_identifier; break; } // literal unsigned integer without prefix sign if (_char_is_digit(_cur_char())) { process_token = _process_luinteger; break; } // unknown process_token = _process_unknown; } token = process_token(); _set_token(token); }