=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/gnuplot.sm1,v retrieving revision 1.3 retrieving revision 1.10 diff -u -p -r1.3 -r1.10 --- OpenXM/src/kan96xx/Doc/gnuplot.sm1 2004/12/16 08:42:14 1.3 +++ OpenXM/src/kan96xx/Doc/gnuplot.sm1 2005/02/09 11:44:05 1.10 @@ -1,13 +1,16 @@ -%$OpenXM: OpenXM/src/kan96xx/Doc/gnuplot.sm1,v 1.2 1999/11/17 00:28:54 takayama Exp $ +%$OpenXM: OpenXM/src/kan96xx/Doc/gnuplot.sm1,v 1.9 2005/02/04 11:54:06 takayama Exp $ %%% 1999, 6/7 Mon. [(parse) (ox.sm1) pushfile] extension [(getenv) (OpenXM_HOME)] extension /OpenXM_HOME set -[OpenXM_HOME (/bin/gnuplot4ox)] cat /plot.gnuplotexec set +[(which) (gnuplot)] oxshell /plot.gnuplotexec set +%[OpenXM_HOME (/bin/gnuplot)] cat /plot.gnuplotexec set +%(gnuplot) /plot.gnuplotexec set (SSkan/lib/plot.sm1 for ox_sm1_gnuplot. 1999/09/03. ) message -/gnuplot.callingMethod 0 def % 0 : old, 1 : pipe, 2: file +/gnuplot.callingMethod 1 def % 0 : old, 1 : pipe, 2: file +% If your gnuplot is version 3, then set the callingMethod to 0. /plotstart { sm1connectr @@ -19,6 +22,9 @@ } def /plotstart.aux { + plot.gnuplotexec tag 0 eq { + (No gnuplot is installed in this system.) error + } { } ifelse { gnuplot.callingMethod 0 eq { plotstart.aux.0 @@ -56,17 +62,33 @@ /plotstart.aux.1 { [(getUniqueFileName) (/tmp/gnuplot.fifo.tmp)] extension /gnuplot.fifo set - [(fp2mkfifo) gnuplot.fifo] extension message + [(fp2mkfifo) gnuplot.fifo] extension /gnuplot.status set + + gnuplot.status -1 eq { + (Warning: mkfifo failed.) message + } { } ifelse + gnuplot.fifo message [(fp2popen) plot.gnuplotexec (w)] extension /gnuplot.pfp set - [(fp2fopen) gnuplot.fifo (r)] extension /gnuplot.fifoFp set - % BUG! It does not return. - - [(fp2fputs) [(set mouse; set print ") gnuplot.fifo (" ; ) nl ] cat + (Started gnuplot) message + + [(fp2fputs) [(set print ") gnuplot.fifo (" ; ) nl ] cat gnuplot.pfp ] extension message [(fp2fflush) gnuplot.pfp] extension message + [(fp2fputs) [(set mouse ; ) nl ] cat gnuplot.pfp ] extension message + [(fp2fflush) gnuplot.pfp] extension message + + [(fp2fopen) gnuplot.fifo (r)] extension /gnuplot.fifoFp set + % This must be the last. Otherwise, fopen is blocked. + % When mkfifo fails, then gnuplot.fifoFp will be null. (old cygwin) + /gnuplot.pid -2 def % dummy. + gnuplot.pid message } def +/plotstop { + gnuplot.ccc $ plotstop.aux $ oxsubmit +} def + /plotstop.aux { { gnuplot.callingMethod 0 eq { @@ -85,8 +107,12 @@ /plotstop.aux.0 { } def /plotstop.aux.1 { [(fp2fclose) gnuplot.pfp] extension pop - [(fp2fclose) gnuplot.fifo] extension pop - [(rm) gnuplot.fifo] oxshell pop + gnuplot.fifoFp tag 0 eq { } + { + [(fp2fclose) gnuplot.fifoFp] extension pop + } ifelse + % [(rm) gnuplot.fifo] oxshell pop % It is OS dependent. + [(unlink) gnuplot.fifo] extension } def @@ -114,24 +140,38 @@ /gnuplot.1 { /cccc set + gnuplot.read.1 [(fp2fputs) [cccc nl] cat gnuplot.pfp] extension pop [(fp2fflush) gnuplot.pfp] extension pop gnuplot.read.1 + gnuplot.sync.1 } def %% (plot sin(x);) gnuplot /gnuplot.read.1 { - [ + [ + gnuplot.fifoFp tag 0 eq { } + { { [(fp2select) gnuplot.fifoFp 0] extension 1 eq { [(fp2fgetc) gnuplot.fifoFp] extension } { exit } ifelse } loop - ] { (string) dc } map cat + } ifelse + ] { (string) dc } map cat } def +% It uses "@" to wait for the gnuplot. +/gnuplot.sync.1 { + [(fp2fputs) [(print "@";) nl] cat gnuplot.pfp] extension pop + [(fp2fflush) gnuplot.pfp] extension pop + { + [(fp2fgetc) gnuplot.fifoFp] extension 64 eq { exit} { } ifelse + } loop +} def + /isAlive { { gnuplot.callingMethod 0 eq { @@ -217,4 +257,4 @@ $plotstart ; (plot sin(x);) rplot$ message - +$plotstart.aux ; (splot x**2-y**2;) gnuplot $ message