class UNDERBIT_ID3_C_API

(source code)

description

Underbit c api

note
	description: "Underbit c api"

	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"

	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2024-01-07 11:18:13 GMT (Sunday 7th January 2024)"
	revision: "11"

class
	UNDERBIT_ID3_C_API

inherit
	EL_C_API

feature {NONE} -- Frames

	c_id3_frame_addref (frame_ptr: POINTER)
			-- void id3_frame_addref(struct id3_frame *frame)
		require
			argument_attached: is_attached (frame_ptr)
		external
			"C (struct id3_frame const *) | %"id3tag.h%""
		alias
			"id3_frame_addref"
		end

	c_id3_frame_delete (frame_ptr: POINTER)
			-- void id3_frame_delete(struct id3_frame *frame)
		require
			argument_attached: is_attached (frame_ptr)
		external
			"C (struct id3_frame const *) | %"id3tag.h%""
		alias
			"id3_frame_delete"
		end

	c_id3_frame_delref (frame_ptr: POINTER)
			-- void id3_frame_delref(struct id3_frame *frame)
		require
			argument_attached: is_attached (frame_ptr)
		external
			"C (struct id3_frame const *) | %"id3tag.h%""
		alias
			"id3_frame_delref"
		end

	c_id3_frame_field (frame_ptr: POINTER; index: INTEGER): POINTER
			-- union id3_field *id3_frame_field(struct id3_frame const *, unsigned int);
		require
			argument_attached: is_attached (frame_ptr)
		external
			"C (struct id3_frame const *, unsigned int): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_frame_field"
		end

	c_id3_frame_id (frame_ptr: POINTER): POINTER
			-- Access field y of struct pointed by `p'.
		require
			argument_attached: is_attached (frame_ptr)
		external
			"C [struct %"id3tag.h%"] (struct id3_frame): EIF_POINTER"
		alias
			"id"
		end

	c_id3_frame_new (id_ptr: POINTER): POINTER
			-- struct id3_frame *id3_frame_new(char const *);
		require
			argument_attached: is_attached (id_ptr)
		external
			"C (char const *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_frame_new"
		end

	c_id3_frame_nfields (frame_ptr: POINTER): INTEGER
			-- Access field y of struct pointed by `p'.
		require
			argument_attached: is_attached (frame_ptr)
		external
			"C [struct %"id3tag.h%"] (struct id3_frame): EIF_POINTER"
		alias
			"nfields"
		end

feature {NONE} -- Field getters

	c_id3_field_getbinarydata (field_ptr, length_ptr: POINTER): POINTER
			-- id3_byte_t const *id3_field_getbinarydata(union id3_field const *field, id3_length_t *length)

		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *, id3_length_t *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getbinarydata"
		end

	c_id3_field_getframeid (field_ptr: POINTER): POINTER
			-- char const *id3_field_getframeid(union id3_field const *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getframeid"
		end

	c_id3_field_getfulllatin1 (field_ptr: POINTER): POINTER
			-- id3_latin1_t const *id3_field_getlatin1(union id3_field const *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getfulllatin1"
		end

	c_id3_field_getfullstring (field_ptr: POINTER): POINTER
			-- id3_ucs4_t const *id3_field_getfullstring(union id3_field const *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getfullstring"
		end

	c_id3_field_getint (field_ptr: POINTER): INTEGER
			-- signed long id3_field_getint(union id3_field const *);
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_getint"
		end

	c_id3_field_getlatin1 (field_ptr: POINTER): POINTER
			-- id3_latin1_t const *id3_field_getlatin1(union id3_field const *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getlatin1"
		end

	c_id3_field_getnstrings (field_ptr: POINTER): INTEGER
			-- unsigned int id3_field_getnstrings(union id3_field const *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_getnstrings"
		end

	c_id3_field_getstring (field_ptr: POINTER): POINTER
			-- id3_ucs4_t const *id3_field_getstring(union id3_field const *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getstring"
		end

	c_id3_field_getstrings (field_ptr: POINTER; index: INTEGER): POINTER
			-- id3_ucs4_t const *id3_field_getstrings(union id3_field const *field, unsigned int index)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *, unsigned int): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_field_getstrings"
		end

	c_id3_field_gettextencoding (field_ptr: POINTER): INTEGER
			-- enum id3_field_textencoding id3_field_gettextencoding(union id3_field const *);
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_gettextencoding"
		end

	c_id3_field_type (field_ptr: POINTER): INTEGER
			-- enum id3_field_type id3_field_type(union id3_field const *);
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_type"
		end

	c_id3_field_value (field_ptr: POINTER): POINTER
		external
			"C inline use %"id3tag.h%""
		alias
			"((union id3_field*)$field_ptr)->immediate.value"
		end

feature {NONE} -- Field setters

	c_id3_field_setbinarydata (field_ptr, data_ptr: POINTER; length: INTEGER): INTEGER
			-- int id3_field_setbinarydata(union id3_field *, id3_byte_t const *, id3_length_t);

		require
			argument_attached: is_attached (field_ptr) and is_attached (data_ptr)
		external
			"C (union id3_field const *, id3_byte_t const *, id3_length_t): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setbinarydata"
		end

	c_id3_field_setframeid (field_ptr: POINTER; str_ptr: POINTER): INTEGER
			-- int id3_field_setframeid(union id3_field *field, char const *id)
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr)
		external
			"C (union id3_field const *, char const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setframeid"
		end

	c_id3_field_setfulllatin1 (field_ptr: POINTER; str_ptr: POINTER): INTEGER
			-- int id3_field_setlatin1(union id3_field *, id3_latin1_t const *);
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr)
		external
			"C (union id3_field const *, id3_latin1_t const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setfulllatin1"
		end

	c_id3_field_setfullstring (field_ptr: POINTER; str_ptr: POINTER): INTEGER
			-- int id3_field_setstring(union id3_field *, id3_ucs4_t const *);
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr)
		external
			"C (union id3_field const *, id3_ucs4_t const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setfullstring"
		end

	c_id3_field_setint (field_ptr: POINTER; number: INTEGER): INTEGER
			-- int id3_field_setint(union id3_field *field, signed long number)
		require
			argument_attached: is_attached (field_ptr) and is_attached (field_ptr)
		external
			"C (union id3_field const *, signed long): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setint"
		end

	c_id3_field_setlanguage (field_ptr: POINTER; str_ptr: POINTER): INTEGER
			-- int id3_field_setlanguage(union id3_field *field, char const *language)
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr)
		external
			"C (union id3_field const *, char const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setlanguage"
		end

	c_id3_field_setlatin1 (field_ptr: POINTER; str_ptr: POINTER): INTEGER
			-- int id3_field_setlatin1(union id3_field *, id3_latin1_t const *);
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr)
		external
			"C (union id3_field const *, id3_latin1_t const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setlatin1"
		end

	c_id3_field_setstring (field_ptr: POINTER; str_ptr: POINTER): INTEGER
			-- int id3_field_setstring(union id3_field *, id3_ucs4_t const *);
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr)
		external
			"C (union id3_field const *, id3_ucs4_t const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setstring"
		end

	c_id3_field_setstrings (field_ptr: POINTER; count: INTEGER; str_ptr_array_ptr: POINTER): INTEGER
			-- int id3_field_setstrings(union id3_field *, unsigned int, id3_ucs4_t **);
		require
			argument_attached: is_attached (field_ptr) and is_attached (str_ptr_array_ptr)
		external
			"C (union id3_field const *, unsigned int, id3_ucs4_t **): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_setstrings"
		end

	c_id3_field_settextencoding (field_ptr: POINTER; code: INTEGER): INTEGER
			-- int id3_field_settextencoding(union id3_field *, enum id3_field_textencoding)

		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field *, enum id3_field_textencoding): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_field_settextencoding"
		end

feature {NONE} -- Field create/destroy

	c_id3_field_finish (field_ptr: POINTER)
			-- void id3_field_finish(union id3_field *field)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field *) | %"field.h%""
		alias
			"id3_field_finish"
		end

	c_id3_field_init (field_ptr: POINTER; a_type: INTEGER)
			-- void id3_field_init(union id3_field *field, enum id3_field_type type)
		require
			argument_attached: is_attached (field_ptr)
		external
			"C (union id3_field *, enum id3_field_type) | %"field.h%""
		alias
			"id3_field_init"
		end

feature {NONE} -- C externals

	c_id3_genre_index (index: INTEGER): POINTER
			-- id3_ucs4_t const *id3_genre_index(unsigned int)
		external
			"C (unsigned int): EIF_POINTER | %"id3tag.h%""
		alias
			"id3_genre_index"
		end

	c_id3_ucs4_getnumber (ucs4_ptr: POINTER): INTEGER
			-- unsigned long id3_ucs4_getnumber(id3_ucs4_t const *);
		require
			pointer_not_null: is_attached (ucs4_ptr)
		external
			"C (id3_ucs4_t const *): EIF_INTEGER | %"id3tag.h%""
		alias
			"id3_ucs4_getnumber"
		end

end