summaryrefslogtreecommitdiffstats
path: root/ds9/unix/ds9.C
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:01:15 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:01:15 (GMT)
commit12166aa342f7c8d905097e43a1f50e0775503069 (patch)
tree73a6e7296fbf9898633a02c2503a3e959789d8c3 /ds9/unix/ds9.C
parentd4d595fa7fb12903db9227d33d48b2b00120dbd1 (diff)
downloadblt-12166aa342f7c8d905097e43a1f50e0775503069.zip
blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.gz
blt-12166aa342f7c8d905097e43a1f50e0775503069.tar.bz2
Initial commit
Diffstat (limited to 'ds9/unix/ds9.C')
-rw-r--r--ds9/unix/ds9.C247
1 files changed, 247 insertions, 0 deletions
diff --git a/ds9/unix/ds9.C b/ds9/unix/ds9.C
new file mode 100644
index 0000000..90c4573
--- /dev/null
+++ b/ds9/unix/ds9.C
@@ -0,0 +1,247 @@
+// Copyright (C) 1999-2015
+// Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+// For conditions of distribution and use, see copyright notice in "copyright"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <iostream>
+#include <sstream>
+using namespace std;
+
+#include <tcl.h>
+#include <tk.h>
+
+extern "C" {
+ int SAOAppInit(Tcl_Interp *interp);
+ int SAOLocalMainHook(int* argc, char*** argv);
+
+ void TclSetStartupScriptFileName(const char*);
+
+ int Zvfs_Init(Tcl_Interp*);
+ int Zvfs_Mount(Tcl_Interp*, char*, char *);
+
+ int Tkblt_Init(Tcl_Interp*);
+ int Tktable_Init(Tcl_Interp*);
+ int Tclcheckdns_Init(Tcl_Interp*);
+ int Tksao_Init(Tcl_Interp*);
+ int Tkhtml1_Init(Tcl_Interp*);
+ int Tkmpeg_Init(Tcl_Interp*);
+
+ int Tkimg_Init(Tcl_Interp*);
+ int Zlibtcl_Init(Tcl_Interp*);
+ int Jpegtcl_Init(Tcl_Interp*);
+ int Tkimgjpeg_Init(Tcl_Interp*);
+ int Tifftcl_Init(Tcl_Interp*);
+ int Tkimgtiff_Init(Tcl_Interp*);
+ int Pngtcl_Init(Tcl_Interp*);
+ int Tkimgpng_Init(Tcl_Interp*);
+ int Tkimggif_Init(Tcl_Interp*);
+ int Tkimgwindow_Init(Tcl_Interp*);
+
+ int Tclxpa_Init(Tcl_Interp*);
+ int Tcliis_Init(Tcl_Interp*);
+
+ int Tclxml_Init(Tcl_Interp*);
+ int Tclxml_libxml2_Init(Tcl_Interp*);
+
+ int Signal_ext_Init(Tcl_Interp*);
+}
+
+Tcl_Interp *global_interp;
+
+void internalError(const char* msg)
+{
+ Tcl_SetVar2(global_interp, "ds9", "msg", msg, TCL_GLOBAL_ONLY);
+ Tcl_SetVar2(global_interp, "ds9", "msg,level", "error", TCL_GLOBAL_ONLY);
+}
+
+// currently use relative path
+// using full path with spaces causes problems
+// with htmwidget and tcl/tk
+
+int SAOLocalMainHook(int* argcPtr, char*** argvPtr)
+{
+ // sync C++ io calls with C io calls
+ ios::sync_with_stdio();
+
+ // do this first
+ Tcl_FindExecutable((*argvPtr)[0]);
+
+ // so that tcl and tk know where to find their libs
+ // we do it here before InitLibraryPath is called
+ putenv((char*)"TCL_LIBRARY=./zvfsmntpt/tcl8.6");
+ putenv((char*)"TK_LIBRARY=./zvfsmntpt/tk8.6");
+
+ // startup script
+ Tcl_Obj *path = Tcl_NewStringObj("./zvfsmntpt/library/ds9.tcl",-1);
+ Tcl_SetStartupScript(path, NULL);
+
+ return TCL_OK;
+}
+
+int SAOAppInit(Tcl_Interp *interp)
+{
+ // save interp for cputs function
+ global_interp = interp;
+
+ // We have to initialize the virtual filesystem before calling
+ // Tcl_Init(). Otherwise, Tcl_Init() will not be able to find
+ // its startup script files.
+ if (Zvfs_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "zvfs", Zvfs_Init, (Tcl_PackageInitProc*)NULL);
+
+ // find current working directory, and set as mount point
+ {
+ Tcl_DString pwd;
+ Tcl_DStringInit(&pwd);
+ Tcl_GetCwd(interp, &pwd);
+
+#ifdef ZIPFILE
+ ostringstream str;
+ str << (char *)Tcl_GetNameOfExecutable()
+ << ".zip"
+ << ends;
+ if( Zvfs_Mount(interp, (char*)str.str().c_str(), Tcl_DStringValue(&pwd)) != TCL_OK ){
+ char str[] = "ERROR: Unable to open the auxiliary ds9 file 'ds9.zip'. If you moved the ds9 program from its original location, please also move the zip file to the same place.";
+
+ cerr << str << endl;
+ exit(1);
+ }
+#else
+ Zvfs_Mount(interp, (char *)Tcl_GetNameOfExecutable(),
+ Tcl_DStringValue(&pwd));
+#endif
+ Tcl_DStringFree(&pwd);
+ }
+
+ // Tcl
+ if (Tcl_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+
+ // Tk
+ if (Tk_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage(interp,"Tk", Tk_Init, Tk_SafeInit);
+
+ // Tkblt
+ if (Tkblt_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage(interp, "tkblt", Tkblt_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tktable
+ if (Tktable_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "Tktable", Tktable_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tclcheckdns
+ if (Tclcheckdns_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "tclcheckdns", Tclcheckdns_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tksao
+ if (Tksao_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "tksao", Tksao_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkhtml1
+ if (Tkhtml1_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "tkhtml1", Tkhtml1_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tclxpa
+ if (Tclxpa_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "Tclxpa", Tclxpa_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tcliis
+ if (Tcliis_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "Tcliis", Tcliis_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkmpeg
+ if (Tkmpeg_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "tkmpeg", Tkmpeg_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tclxml
+ if (Tclxml_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+
+ // Tkimg
+ if (Tkimg_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "img", Tkimg_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // zlibtcl
+ if (Zlibtcl_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "zlibtcl", Zlibtcl_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // jpegtcl
+ if (Jpegtcl_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "jpegtcl", Jpegtcl_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkimgjpeg
+ if (Tkimgjpeg_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "jpeg", Tkimgjpeg_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tifftcl
+ if (Tifftcl_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "tifftcl", Tifftcl_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkimgtiff
+ if (Tkimgtiff_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "tiff", Tkimgtiff_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Pngtcl
+ if (Pngtcl_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "pngtcl", Pngtcl_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkimgpng
+ if (Tkimgpng_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "png", Tkimgpng_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkimggif
+ if (Tkimggif_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "gif", Tkimggif_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Tkimgwindow
+ if (Tkimgwindow_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "window", Tkimgwindow_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ // Signal_Ext
+ if (Signal_ext_Init(interp) == TCL_ERROR)
+ return TCL_ERROR;
+ Tcl_StaticPackage (interp, "signal", Signal_ext_Init,
+ (Tcl_PackageInitProc*)NULL);
+
+ return TCL_OK;
+}