(in-package #:sync-music/libcue-ffi) (defctype file-ptr :pointer) (defcfun (fopen "fopen") file-ptr (str :string) (mode :string)) (defcfun (fclose "fclose") :int (file file-ptr)) #+unix (cl:progn (defcfun (freopen "freopen") file-ptr (str :string) (mode :string) (stream file-ptr)) (defcfun (dup "dup") :int (old-fd :int))) (define-foreign-library libcue (:unix (:or "libcue.so.2.3.0" "libcue.so")) (t (:default "libcue"))) (use-foreign-library libcue) (defctype cd-ptr :pointer) (defctype track-ptr :pointer) (defctype cd-text-ptr :pointer) (defctype rem-ptr :pointer) (defcfun (cue-parse-file "cue_parse_file") cd-ptr (file file-ptr)) (defcfun (cue-parse-string "cue_parse_string") cd-ptr (str :string)) (defcfun (cd-delete "cd_delete") :void (cd cd-ptr)) (defcfun (%cd-get-mode "cd_get_mode") :int (cd cd-ptr)) (defcfun (cd-get-cd-text-file "cd_get_cdtextfile") :string (cd cd-ptr)) (defcfun (cd-get-track-count "cd_get_ntrack") :int (cd cd-ptr)) (defcfun (cd-get-cd-text "cd_get_cdtext") cd-text-ptr (cd cd-ptr)) (defcfun (track-get-cd-text "track_get_cdtext") cd-text-ptr (track track-ptr)) (defcfun (cd-text-get "cdtext_get") :string (pti :int) (cd-text cd-text-ptr)) (defcfun (cd-get-rem "cd_get_rem") rem-ptr (cd cd-ptr)) (defcfun (track-get-rem "track_get_rem") rem-ptr (track track-ptr)) (defcfun (rem-get "rem_get") :string ;; NOTE: Defined in libcue.h as unsigned int, but actually takes in enum (rem-type :int) (rem rem-ptr)) (defcfun (cd-get-track "cd_get_track") track-ptr (cd cd-ptr) (i :int)) (defcfun (track-get-file-name "track_get_filename") :string (track track-ptr)) (defcfun (track-get-start "track_get_start") :long (track track-ptr)) (defcfun (track-get-length "track_get_length") :long (track track-ptr)) (defcfun (%track-get-mode "track_get_mode") :int (track track-ptr)) (defcfun (%track-get-sub-mode "track_get_sub_mode") :int (track track-ptr)) (defcfun (%track-flag-set-p "track_is_set_flag") :boolean (track track-ptr) (flag :int)) (defcfun (track-get-zero-pre "track_get_zero_pre") :long (track track-ptr)) (defcfun (track-get-zero-post "track_get_zero_post") :long (track track-ptr)) (defcfun (track-get-isrc "track_get_isrc") :string (track track-ptr)) (defcfun (track-get-index "track_get_index") :long (track track-ptr) (i :int))