summaryrefslogtreecommitdiffstats
path: root/funtools/notes/ds9.notes
diff options
context:
space:
mode:
Diffstat (limited to 'funtools/notes/ds9.notes')
-rw-r--r--funtools/notes/ds9.notes90
1 files changed, 90 insertions, 0 deletions
diff --git a/funtools/notes/ds9.notes b/funtools/notes/ds9.notes
new file mode 100644
index 0000000..2d947d5
--- /dev/null
+++ b/funtools/notes/ds9.notes
@@ -0,0 +1,90 @@
+ Extensions to Analysis specification syntax
+ to support mainlib (internal) analysis
+
+# add user-specified name/value pair for analysis macro expansion
+set LIB $HOME/lib
+
+# xtype: for backward compatibility, default has type=external,
+# i.e. execute current sh -c "cmd"
+menu
+menu xtype=external
+
+# internal uses mainlib, requires package name and (maybe) shared object name
+menu xtype=internal package=funtools source=static
+menu xtype=internal package=funtools source=$LIB/libfuntoolsMainLib.dylib
+
+bind x xtype=internal package=funtools source=static
+bind x xtype=internal package=funtools source=$LIB/libfuntoolsMainLib.dylib
+
+Notes:
+
+1. set name val
+
+Add user-specified name and value to the macro expansion. Not
+specific to internal processing but will help with shared object pathnames.
+
+2. xtype=internal
+
+Execute a mainlib action by performing macro subsititution, generating
+an in-memory FITS file if necessary, and then calling:
+
+ set result [mainlib "command"]
+
+Question: what triggers generation of in-memory FITS? Is it $file or a new
+keyword?
+
+3. source=static package=<name>
+
+Valid for xtype=internal only.
+
+Assumes that a routine named <name>MainLibInit() is linked into
+ds9. The name and entry point will have to be pre-loaded into a table
+so that the entry point for the routine can be looked up and
+executed. Calling sequence:
+
+ int nameMainLibInit(void)
+
+returns 1 on success, 0 on failure.
+
+4. source=<shared object> package=<name>
+
+Valid for xtype=internal only.
+
+ds9 must call:
+
+ int MainLibLoad(char *name, char *source, void **dl, char **ermsg)
+
+or the Tcl equivalent:
+
+ set dl [mainlibload name source]
+
+to load shared object and call the init routine. This can be done either
+when processing the analysis specification or just before executing
+the command for the first time. The returned dl is the handle from
+dlopen and can be used with dlclose(), if desired.
+
+5. ds9 will link libfuntools.a into the executable, as usual.
+To access the mainlib support, we can either:
+
+a. link libfuntoolsMainLib.a into the executable and use source=static
+in the analysis menu. In this case, the static library is created using:
+
+ make mainlib
+
+and requires --enable-mainlib=yes on the configure command line.
+
+b. we can load libfuntoolsMainLib.[so,dylib] and use source=<shobj>
+in the analysis menu. In this case, the dynamic library is created using:
+
+ make shmainlib
+
+and requires --enable-mainlib=shared on the configure command line.
+
+Probably the static method is preferable so that funtools is part of a
+single execuable?
+
+6. The LD_LIBRARY_PATH is critical for loading shared libraries. How
+will we deal with this? One possibility is to add an argument to MainLibLoad()
+to specify a directory which gets added to LD_LIBRARY_PATH before the call
+to dlopen()???
+