From: Yaroslav K. <kav...@je...> - 2005-03-28 08:31:44
|
clisp from CVS head, mingw tcl-ffi.lisp: (defpackage :tcl-ffi (:modern t) (:use :COMMON-LISP :FFI) (:export #:Tcl-FreeProc #:Tcl-Interp #:*Tcl-Interp <skip> ;;;; Types (ffi:def-c-type Tcl-FreeProc (ffi:c-function (:arguments (blockPtr ffi:c-string)) (:return-type ffi:nil) (:language :stdc))) (ffi:def-c-struct Tcl-Interp (result ffi:c-string) (freeProc Tcl-FreeProc) (errorLine ffi:int)) (ffi:def-c-type *Tcl-Interp (ffi:c-ptr Tcl-Interp)) <skip> tk-ffi.lisp: (defpackage :tk-ffi (:modern t) (:use :COMMON-LISP :FFI :tcl-ffi) <skip> (ffi:def-call-out Tk-Init (:name "Tk_Init") (:library *tk-shared-lib*) (:arguments (interp *Tcl-Interp)) (:return-type ffi:int)) <skip> $ clisp -L ENGLISH [1]> (load "tcl-ffi.lisp") ;; Loading file tcl-ffi.lisp ... ;; Loaded file tcl-ffi.lisp T [2]> (load "tk-ffi.lisp") ;; Loading file tk-ffi.lisp ... *** - Incomplete FFI type *Tcl-Interp is not allowed here. The following restarts are available: SKIP :R1 skip this form and proceed STOP :R2 stop loading file ABORT :R3 abort Break 1 tk-ffi[3]> ffi types are not exported between packages? Thanks. -- WBR, Yaroslav Kavenchuk. |
From: Sam S. <sd...@gn...> - 2005-03-28 14:47:40
|
> * Yaroslav Kavenchuk <xnirapuhx@wragl.ol> [2005-03-28 11:32:17 +0300]: > > [2]> (load "tk-ffi.lisp") > ;; Loading file tk-ffi.lisp ... > *** - Incomplete FFI type *Tcl-Interp is not allowed here. > The following restarts are available: > SKIP :R1 skip this form and proceed > STOP :R2 stop loading file > ABORT :R3 abort > Break 1 tk-ffi[3]> > > ffi types are not exported between packages? (apropos "*Tcl-Interp") should explain things. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.openvotingconsortium.org/> <http://www.mideasttruth.com/> <http://www.camera.org> <http://www.iris.org.il> <http://www.dhimmi.com/> If You Want Breakfast In Bed, Sleep In the Kitchen. |
From: Yaroslav K. <kav...@je...> - 2005-03-28 14:59:15
|
Sam Steingold: >>[2]> (load "tk-ffi.lisp") >>;; Loading file tk-ffi.lisp ... >>*** - Incomplete FFI type *Tcl-Interp is not allowed here. >>The following restarts are available: >>SKIP :R1 skip this form and proceed >>STOP :R2 stop loading file >>ABORT :R3 abort >>Break 1 tk-ffi[3]> >> >>ffi types are not exported between packages? > > > (apropos "*Tcl-Interp") should explain things. [3]> (apropos "*Tcl-Interp") TCL-FFI:*tcl-interp TCL-FFI::*Tcl-Interp Only symbols. So should be? That is, ffi:c-types and ffi:c-struct it is impossible to export? Thanks. -- WBR, Yaroslav Kavenchuk. |
From: Sam S. <sd...@gn...> - 2005-03-28 16:02:36
|
> * Yaroslav Kavenchuk <xnirapuhx@wragl.ol> [2005-03-28 17:59:47 +0300]: > > Sam Steingold: >>>[2]> (load "tk-ffi.lisp") >>>;; Loading file tk-ffi.lisp ... >>>*** - Incomplete FFI type *Tcl-Interp is not allowed here. >>>The following restarts are available: >>>SKIP :R1 skip this form and proceed >>>STOP :R2 stop loading file >>>ABORT :R3 abort >>>Break 1 tk-ffi[3]> >>> >>>ffi types are not exported between packages? >> (apropos "*Tcl-Interp") should explain things. > > [3]> (apropos "*Tcl-Interp") > TCL-FFI:*tcl-interp > TCL-FFI::*Tcl-Interp (mapc #'describe (apropos-list "*Tcl-Interp")) 1. how do you want your symbol to be named? make sure that it is indeed named as you wanted. 2. make sure that when you think you are using it, you are indeed using it and not creating a new symbol (as you are now). the easy way is to lock the package TCL-FFI. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.iris.org.il> <http://www.openvotingconsortium.org/> <http://www.memri.org/> <http://www.camera.org> <http://pmw.org.il/> The only substitute for good manners is fast reflexes. |
From: Yaroslav K. <kav...@je...> - 2005-03-29 10:46:23
|
Sam Steingold: >>>(apropos "*Tcl-Interp") should explain things. >> >>[3]> (apropos "*Tcl-Interp") >>TCL-FFI:*tcl-interp >>TCL-FFI::*Tcl-Interp > > > (mapc #'describe (apropos-list "*Tcl-Interp")) if removed *Tcl-Interp from option :export in define package tcl-ffi [2]> (load "tcl-ffi") ;; Loading file G:\Work\Lisp\cltk\tcl-ffi.lisp ... ;; Loaded file G:\Work\Lisp\cltk\tcl-ffi.lisp T [3]> (mapc #'describe (apropos-list "*Tcl-Interp")) TCL-FFI::*Tcl-Interp is the symbol TCL-FFI::*Tcl-Interp, lies in #<PACKAGE TCL-FFI>, is accessible in 1 package TCL-FFI. #<PACKAGE TCL-FFI> is the package named TCL-FFI. It imports the external symbols of 2 packages CS-COMMON-LISP, FFI and exports 9 symbols, but no package uses these exports. It is a modern case-sensitive package. (TCL-FFI::*Tcl-Interp) And in package tk-ffi this is work: (defpackage :tk-ffi (:modern t) (:use :COMMON-LISP :FFI :tcl-ffi)... (ffi:def-call-out Tk-Init (:name "Tk_Init") (:library *tk-shared-lib*) (:arguments (interp tcl-ffi::*Tcl-Interp)) (:return-type ffi:int)) But how to declare *Tcl-Interp in tcl-ffi, to use in tk-ffi *Tcl-Interp instead of tk-ffi::*Tcl-Interp? If it is possible. Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Sam S. <sd...@gn...> - 2005-03-29 15:20:25
|
> * Yaroslav Kavenchuk <xnirapuhx@wragl.ol> [2005-03-29 13:47:05 +0300]: > > But how to declare *Tcl-Interp in tcl-ffi, to use in tk-ffi > *Tcl-Interp instead of tk-ffi::*Tcl-Interp? your problem is not the way you declare *Tcl-Interp but the way you use it. if it resides in a modern package, you must use it with the correct case. in particular, in a non-modern package, you must use the package prefix. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.iris.org.il> <http://www.jihadwatch.org/> <http://www.honestreporting.com> <http://pmw.org.il/> <http://www.memri.org/> Modern man is the missing link between apes and human beings. |
From: Yaroslav K. <kav...@je...> - 2005-03-31 10:17:30
|
Sam Steingold: > your problem is not the way you declare *Tcl-Interp but the way you use > it. > > if it resides in a modern package, you must use it with the correct > case. > in particular, in a non-modern package, you must use the package prefix. Well, small example. File ffi-types-test.lisp: (defpackage :ffi-types (:modern t) (:use :COMMON-LISP :FFI)) (in-package :ffi-types) (ffi:def-c-type Tcl-FreeProc (ffi:c-function (:arguments (blockPtr ffi:c-string)) (:return-type ffi:nil) (:language :stdc))) (ffi:def-c-struct Tcl-Interp (result ffi:c-string) (freeProc Tcl-FreeProc) (errorLine ffi:int)) (ffi:def-c-type *Tcl-Interp (ffi:c-ptr Tcl-Interp)) (defpackage :ffi-functions (:modern t) (:use :COMMON-LISP :FFI :ffi-types)) (in-package :ffi-functions) (defvar *tk-shared-lib* "tk84.dll") (ffi:default-foreign-language :stdc) (ffi:def-call-out Tk-Init (:name "Tk_Init") (:library *tk-shared-lib*) (:arguments (interp *Tcl-Interp)) (:return-type ffi:int)) Both packages (:modern t) case of *Tcl-Interp equal in both packages [8]> (load "ffi-types-test.lisp") ;; Loading file ffi-types-test.lisp ... *** - Incomplete FFI type *Tcl-Interp is not allowed here. The following restarts are available: SKIP :R1 skip this form and proceed STOP :R2 stop loading file ABORT :R3 abort Break 1 ffi-functions[9]> :a If use package prefix - all rights. I want withpot a prefix, but I do not know as. Thanks. -- WBR, Yaroslav Kavenchuk. |
From: Yaroslav K. <kav...@je...> - 2005-03-31 14:09:15
|
If append to the end of package :ffi-types (export...) all works. But if append (:export...) in (defpackage...) - gives out the error. Or need to compile file.lisp with option -modern and load file.fas with or without -modern -- WBR, Yaroslav Kavenchuk. |
From: Sam S. <sd...@gn...> - 2005-03-31 15:01:16
|
> * Yaroslav Kavenchuk <xnirapuhx@wragl.ol> [2005-03-31 17:09:50 +0300]: > > If append to the end of package :ffi-types > > (export...) > > all works. > But if append (:export...) in (defpackage...) - gives out the error. you need to ponder in which package the form is being read. :export in defpackage needs strings, not symbols. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.memri.org/> <http://www.honestreporting.com> <http://www.jihadwatch.org/> <http://pmw.org.il/> NY survival guide: when crossing a street, mind cars, not streetlights. |
From: Yaroslav K. <kav...@je...> - 2005-03-31 15:10:35
|
Sam Steingold: >>If append to the end of package :ffi-types >> >> (export...) >> >>all works. >>But if append (:export...) in (defpackage...) - gives out the error. > > > you need to ponder in which package the form is being read. > :export in defpackage needs strings, not symbols. Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Sam S. <sd...@gn...> - 2005-03-31 15:22:14
|
> * Yaroslav Kavenchuk <xnirapuhx@wragl.ol> [2005-03-31 13:18:08 +0300]: > > If use package prefix - all rights. I want withpot a prefix, but I do > not know as. you must export it then. I recommend using something like (defpackage "MATLAB" (:modern t) (:use "COMMON-LISP" "FFI") (:shadowing-import-from "EXPORTING" #:defconstant #:defun #:defmacro #:def-c-type #:def-c-enum #:def-c-struct #:def-c-var #:def-call-out)) then all thins defined by the "EXPORTING" macros are exported automatically. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.memri.org/> <http://www.dhimmi.com/> <http://www.iris.org.il> <http://www.openvotingconsortium.org/> The software said it requires Windows 3.1 or better, so I installed Linux. |