diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2018-05-10 15:48:04 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2018-05-10 15:48:04 (GMT) |
commit | 862a4a9a3489bc2f064416e8d567c4e7d5c8fd62 (patch) | |
tree | d36d35cc31af5279aa173c46d486217413d3bffc | |
parent | e12f63777bc5cfd80313c62f706c8dd595af005a (diff) | |
download | blt-862a4a9a3489bc2f064416e8d567c4e7d5c8fd62.zip blt-862a4a9a3489bc2f064416e8d567c4e7d5c8fd62.tar.gz blt-862a4a9a3489bc2f064416e8d567c4e7d5c8fd62.tar.bz2 |
add ds9 multiframe parser
-rw-r--r-- | ds9/library/multiframe.tcl | 40 | ||||
-rw-r--r-- | ds9/library/source.tcl | 2 | ||||
-rw-r--r-- | ds9/parsers/multiframelex.fcl | 12 | ||||
-rw-r--r-- | ds9/parsers/multiframeparser.tac | 26 |
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_ +} |