(module utils racket/base (require racket/path racket/runtime-path ffi/unsafe setup/dirs "downloader.rkt" simple-log ) (provide while until build-lib-path get-lib do-for dbg-sound info-sound err-sound warn-sound fatal-sound ) (sl-def-log racket-sound (current-logger) sound) (define-syntax while (syntax-rules () ((_ cond body ...) (letrec ((while-f (lambda (last-result) (if cond (let ((last-result (begin body ...))) (while-f last-result)) last-result)))) (while-f #f)) ) )) (define-syntax until (syntax-rules () ((_ cond body ...) (letrec ((until-f (lambda (last-result) (if cond last-result (let ((last-reult (begin body ...))) (until-f last-result)))))) (until-f #f))))) (define-syntax do-for (syntax-rules () ((_ (init cond next) body ...) (begin init (letrec ((do-for-f (lamba () (if cond (begin (begin body ...) next (do-for-f)))))) (do-for-f)))))) (define (build-lib-path) (soundlibs-directory)) (define (get-lib* libs-to-try orig-libs versions) (unless (soundlibs-available?) (download-soundlibs)) (if (null? libs-to-try) (begin (displayln (format "Warning: Cannot find library, tried ~a" orig-libs)) #f) (ffi-lib (car libs-to-try) versions #:get-lib-dirs (λ () (cons (build-lib-path) (get-lib-search-dirs))) #:fail (λ () (get-lib* (cdr libs-to-try) orig-libs versions)) ))) (define (get-lib libs-to-try versions) (get-lib* libs-to-try libs-to-try versions)) ) ; end of module