summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2018-05-10 15:48:04 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2018-05-10 15:48:04 (GMT)
commit862a4a9a3489bc2f064416e8d567c4e7d5c8fd62 (patch)
treed36d35cc31af5279aa173c46d486217413d3bffc
parente12f63777bc5cfd80313c62f706c8dd595af005a (diff)
downloadblt-862a4a9a3489bc2f064416e8d567c4e7d5c8fd62.zip
blt-862a4a9a3489bc2f064416e8d567c4e7d5c8fd62.tar.gz
blt-862a4a9a3489bc2f064416e8d567c4e7d5c8fd62.tar.bz2
add ds9 multiframe parser
-rw-r--r--ds9/library/multiframe.tcl40
-rw-r--r--ds9/library/source.tcl2
-rw-r--r--ds9/parsers/multiframelex.fcl12
-rw-r--r--ds9/parsers/multiframeparser.tac26
4 files changed, 80 insertions, 0 deletions
diff --git a/ds9/library/multiframe.tcl b/ds9/library/multiframe.tcl
index 03a5307..89342cb 100644
--- a/ds9/library/multiframe.tcl
+++ b/ds9/library/multiframe.tcl
@@ -136,6 +136,18 @@ proc ProcessMultiFrameCmd {varname iname sock fn} {
upvar $varname var
upvar $iname i
+ global debug
+ if {$debug(tcl,parser)} {
+ global multiframe
+ set multiframe(load,sock) $sock
+ set multiframe(load,fn) $fn
+
+ multiframe::YY_FLUSH_BUFFER
+ multiframe::yy_scan_string [lrange $var $i end]
+ multiframe::yyparse
+ incr i [expr $multiframe::yycnt-1]
+ } else {
+
switch -- [string tolower [lindex $var $i]] {
new {
incr i
@@ -176,4 +188,32 @@ proc ProcessMultiFrameCmd {varname iname sock fn} {
}
FinishLoad
}
+}
+proc MultiframeCmdLoad {param} {
+ global multiframe
+
+ if {$multiframe(load,sock) != {}} {
+ # xpa
+ global tcl_platform
+ switch $tcl_platform(os) {
+ Linux -
+ Darwin -
+ SunOS {
+ if {![LoadMultiFrameSocket $multiframe(load,sock) $param]} {
+ InitError xpa
+ LoadMultiFrameFile $param
+ }
+ }
+ {Windows NT} {LoadMultiFrameFile $param}
+ }
+ } else {
+ # comm
+ if {$multiframe(load,fn) != {}} {
+ LoadMultiFrameAlloc $multiframe(load,fn) $param
+ } else {
+ LoadMultiFrameFile $param
+ }
+ }
+ FinishLoad
+}
diff --git a/ds9/library/source.tcl b/ds9/library/source.tcl
index 91624db..237f0f2 100644
--- a/ds9/library/source.tcl
+++ b/ds9/library/source.tcl
@@ -256,6 +256,8 @@ source $ds9(root)/library/minmaxparser.tcl
source $ds9(root)/library/minmaxlex.tcl
source $ds9(root)/library/modeparser.tcl
source $ds9(root)/library/modelex.tcl
+source $ds9(root)/library/multiframeparser.tcl
+source $ds9(root)/library/multiframelex.tcl
source $ds9(root)/library/nanparser.tcl
source $ds9(root)/library/nanlex.tcl
source $ds9(root)/library/nrrdparser.tcl
diff --git a/ds9/parsers/multiframelex.fcl b/ds9/parsers/multiframelex.fcl
new file mode 100644
index 0000000..9405845
--- /dev/null
+++ b/ds9/parsers/multiframelex.fcl
@@ -0,0 +1,12 @@
+#tab multiframeparser.tab.tcl
+
+%{
+%}
+
+#include defs.fin
+
+%%
+
+#include string.fin
+
+%%
diff --git a/ds9/parsers/multiframeparser.tac b/ds9/parsers/multiframeparser.tac
new file mode 100644
index 0000000..52c972f
--- /dev/null
+++ b/ds9/parsers/multiframeparser.tac
@@ -0,0 +1,26 @@
+%{
+%}
+
+#include string.tin
+
+%start command
+
+%%
+
+command : multiframe
+ | multiframe {yyclearin; YYACCEPT} STRING_
+ ;
+
+multiframe : {MultiframeCmdLoad {}}
+ | STRING_ {MultiframeCmdLoad $1}
+ ;
+
+%%
+
+proc multiframe::yyerror {msg} {
+ variable yycnt
+ variable yy_current_buffer
+ variable index_
+
+ ParserError $msg $yycnt $yy_current_buffer $index_
+}