static XEN g_mus_midi_write(XEN line, XEN buffer) { #define H_mus_midi_write "(" S_mus_midi_write " line byte-list): sends byte-list to midi port" int i, len, err; unsigned char *buf; XEN lst; XEN_ASSERT_TYPE(XEN_INTEGER_P(line), line, XEN_ARG_1, S_mus_midi_write, "an integer"); XEN_ASSERT_TYPE(XEN_LIST_P(buffer), buffer, XEN_ARG_2, S_mus_midi_write, "a list"); len = XEN_LIST_LENGTH(buffer); buf = (unsigned char *)CALLOC(len, sizeof(unsigned char)); for (i = 0, lst = XEN_COPY_ARG(buffer); i < len; i++, lst = XEN_CDR(lst)) buf[i] = (unsigned char)(XEN_TO_C_INT(XEN_CAR(lst))); err = mus_midi_write(XEN_TO_C_INT(line), buf, len); FREE(buf); if (err == -1) return(XEN_FALSE); return(C_TO_XEN_INT(err)); }
off_t xen_to_c_off_t_or_else(XEN obj, off_t fallback) { if (XEN_OFF_T_P(obj)) #if (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T > 4)) || (defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)) return(XEN_TO_C_LONG_LONG(obj)); #else return(XEN_TO_C_INT(obj)); #endif else if (XEN_NUMBER_P(obj))
static XEN g_mus_midi_read(XEN line, XEN bytes) /* returns list of midi bytes */ { #define H_mus_midi_read "(" S_mus_midi_read " line bytes): reads bytes from midi port, returns list" int i, len, err; unsigned char *buf; XEN lst = XEN_EMPTY_LIST; XEN_ASSERT_TYPE(XEN_INTEGER_P(line), line, XEN_ARG_1, S_mus_midi_read, "an integer"); XEN_ASSERT_TYPE(XEN_INTEGER_P(bytes), bytes, XEN_ARG_2, S_mus_midi_read, "an integer"); len = XEN_TO_C_INT(bytes); buf = (unsigned char *)CALLOC(len, sizeof(unsigned char)); err = mus_midi_read(XEN_TO_C_INT(line), buf, len); if (err == -1) { FREE(buf); return(XEN_FALSE); } for (i = err; i >= 0; i--) lst = XEN_CONS(C_TO_XEN_INT((int)buf[i]), lst); FREE(buf); return(lst); }
static XEN g_mus_midi_close(XEN line) { #define H_mus_midi_close "(" S_mus_midi_close " line): closes midi port" XEN_ASSERT_TYPE(XEN_INTEGER_P(line), line, XEN_ONLY_ARG, S_mus_midi_close, "an integer"); return(C_TO_XEN_INT(mus_midi_close(XEN_TO_C_INT(line)))); }