static void fmod_write_sample (HWVoiceOut *hw, uint8_t *dst, int dst_len)

{

    int src_len1 = dst_len;

    int src_len2 = 0;

    int pos = hw->rpos + dst_len;

    st_sample_t *src1 = hw->mix_buf + hw->rpos;

    st_sample_t *src2 = NULL;



    if (pos > hw->samples) {

        src_len1 = hw->samples - hw->rpos;

        src2 = hw->mix_buf;

        src_len2 = dst_len - src_len1;

        pos = src_len2;

    }



    if (src_len1) {

        hw->clip (dst, src1, src_len1);

    }



    if (src_len2) {

        dst = advance (dst, src_len1 << hw->info.shift);

        hw->clip (dst, src2, src_len2);

    }



    hw->rpos = pos % hw->samples;

}

static void fmod_write_sample (HWVoiceOut *hw, uint8_t *dst, int dst_len)

{

    int src_len1 = dst_len;

    int src_len2 = 0;

    int pos = hw->rpos + dst_len;

    st_sample_t *src1 = hw->mix_buf + hw->rpos;

    st_sample_t *src2 = NULL;



    if (pos > hw->samples) {

        src_len1 = hw->samples - hw->rpos;

        src2 = hw->mix_buf;

        src_len2 = dst_len - src_len1;

        pos = src_len2;

    }



    if (src_len1) {

        hw->clip (dst, src1, src_len1);

    }



    if (src_len2) {

        dst = advance (dst, src_len1 << hw->info.shift);

        hw->clip (dst, src2, src_len2);

    }



    hw->rpos = pos % hw->samples;

}

static void FUNC_0 (HWVoiceOut *VAR_0, uint8_t *VAR_1, int VAR_2)

{

    int VAR_3 = VAR_2;

    int VAR_4 = 0;

    int VAR_5 = VAR_0->rpos + VAR_2;

    st_sample_t *src1 = VAR_0->mix_buf + VAR_0->rpos;

    st_sample_t *src2 = NULL;



    if (VAR_5 > VAR_0->samples) {

        VAR_3 = VAR_0->samples - VAR_0->rpos;

        src2 = VAR_0->mix_buf;

        VAR_4 = VAR_2 - VAR_3;

        VAR_5 = VAR_4;

    }



    if (VAR_3) {

        VAR_0->clip (VAR_1, src1, VAR_3);

    }



    if (VAR_4) {

        VAR_1 = advance (VAR_1, VAR_3 << VAR_0->info.shift);

        VAR_0->clip (VAR_1, src2, VAR_4);

    }



    VAR_0->rpos = VAR_5 % VAR_0->samples;

}

static void FUNC_0 (HWVoiceOut *VAR_0, uint8_t *VAR_1, int VAR_2)
{ int VAR_3 = VAR_2; int VAR_4 = 0; int VAR_5 = VAR_0->rpos + VAR_2; st_sample_t *src1 = VAR_0->mix_buf + VAR_0->rpos; st_sample_t *src2 = NULL; if (VAR_5 > VAR_0->samples) { VAR_3 = VAR_0->samples - VAR_0->rpos; src2 = VAR_0->mix_buf; VAR_4 = VAR_2 - VAR_3; VAR_5 = VAR_4; } if (VAR_3) { VAR_0->clip (VAR_1, src1, VAR_3); } if (VAR_4) { VAR_1 = advance (VAR_1, VAR_3 << VAR_0->info.shift); VAR_0->clip (VAR_1, src2, VAR_4); } VAR_0->rpos = VAR_5 % VAR_0->samples; }