|
From: | Matt Wette |
Subject: | Re: Lepton EDA 1.9.14 announce and misc questions |
Date: | Tue, 20 Apr 2021 06:46:27 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 |
On 4/20/21 5:47 AM, Matt Wette wrote:
On 4/20/21 2:29 AM, Vladimir Zhbanov wrote:Hi Guile users and devs, I'm the current maintainer of Lepton EDA suite, an about five year old fork of geda-gaf with accent to moving more functionality to Scheme code. I'm not sure if it is acceptable to advertise it here, please let me know if not. I just know several Guix packagers are reading this mailing list and would like to announce a new version of Lepton, 1.9.14 has been released on April, 7: https://github.com/lepton-eda/lepton-eda/releases/tag/1.9.14-20210407Sweet. Thanks for posting this. I will take a look at your problem. It'll require digging into the eda_..._dirs function.
The following should work as a complete program on a system w/ glib. You need to first convert the result to a bytevector and then access the elements (pointers) one at a time. Note that we don't know how big the array returned from the C function is. I pick an oversized value of 100. (use-modules (system foreign)) (use-modules (rnrs bytevectors)) (define glib (dynamic-link "libglib-2.0")) (define g-get-system-data-dirs (let ((f (pointer->procedure '* (dynamic-func "g_get_system_data_dirs" glib) (list))) (bv-pointer-ref (cond ((= (sizeof '*) 8) bytevector-u64-native-ref ) ((= (sizeof '*) 4) bytevector-u32-native-ref ) (else (error "hmmm")))) (BIG 100)) (lambda () (let* ((r (f)) (p (pointer->bytevector r (* BIG (sizeof '*))))) (let loop ((ix 0)) (let* ((ad (bv-pointer-ref p ix)) (sp (make-pointer ad))) (if (equal? %null-pointer sp) '() (cons (pointer->string sp) (loop (+ ix (sizeof '*))))))))))) (simple-format #t "~S" (g-get-system-data-dirs))
[Prev in Thread] | Current Thread | [Next in Thread] |