7408
|
1 ## Copyright (C) 2005, 2006, 2007 John W. Eaton |
|
2 ## |
|
3 ## This file is part of Octave. |
|
4 ## |
|
5 ## Octave is free software; you can redistribute it and/or modify it |
|
6 ## under the terms of the GNU General Public License as published by |
|
7 ## the Free Software Foundation; either version 3 of the License, or (at |
|
8 ## your option) any later version. |
|
9 ## |
|
10 ## Octave is distributed in the hope that it will be useful, but |
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 ## General Public License for more details. |
|
14 ## |
|
15 ## You should have received a copy of the GNU General Public License |
|
16 ## along with Octave; see the file COPYING. If not, see |
|
17 ## <http://www.gnu.org/licenses/>. |
|
18 |
|
19 ## -*- texinfo -*- |
|
20 ## @deftypefn {Function File} {} drawnow () |
|
21 ## Update and display the current graphics. |
|
22 ## |
|
23 ## Octave automatically calls drawnow just before printing a prompt, |
|
24 ## when @code{sleep} or @code{pause} is called, or while waiting for |
|
25 ## command-line input. |
|
26 ## @end deftypefn |
|
27 |
|
28 ## Author: jwe |
|
29 |
|
30 function gnuplot_drawnow (h, term, file, mono, debug_file) |
|
31 |
|
32 if (nargin < 4) |
|
33 mono = false; |
|
34 endif |
|
35 |
|
36 if (nargin >= 3 && nargin <= 5) |
|
37 f = __get__ (h); |
|
38 plot_stream = []; |
|
39 fid = []; |
|
40 unwind_protect |
|
41 [plot_stream, enhanced] = open_gnuplot_stream ([], term, file); |
|
42 __go_draw_figure__ (f, plot_stream, enhanced, mono); |
|
43 if (nargin == 5) |
|
44 fid = fopen (debug_file, "wb"); |
|
45 enhanced = init_plot_stream (fid, [], term, file); |
|
46 __go_draw_figure__ (f, fid, enhanced, mono); |
|
47 endif |
|
48 unwind_protect_cleanup |
|
49 if (! isempty (plot_stream)) |
|
50 pclose (plot_stream); |
|
51 endif |
|
52 if (! isempty (fid)) |
|
53 fclose (fid); |
|
54 endif |
|
55 end_unwind_protect |
|
56 elseif (nargin == 1) |
|
57 f = __get__ (h); |
|
58 plot_stream = f.__plot_stream__; |
|
59 if (isempty (plot_stream)) |
|
60 [plot_stream, enhanced] = open_gnuplot_stream (h); |
|
61 set (h, "__enhanced__", enhanced); |
|
62 else |
|
63 enhanced = f.__enhanced__; |
|
64 endif |
|
65 __go_draw_figure__ (f, plot_stream, enhanced, mono); |
|
66 else |
|
67 print_usage (); |
|
68 endif |
|
69 |
|
70 endfunction |
|
71 |
|
72 function [plot_stream, enhanced] = open_gnuplot_stream (h, varargin) |
|
73 |
|
74 cmd = gnuplot_binary (); |
|
75 |
|
76 plot_stream = popen (cmd, "w"); |
|
77 |
|
78 if (plot_stream < 0) |
|
79 error ("drawnow: failed to open connection to gnuplot"); |
|
80 else |
|
81 |
|
82 if (! isempty (h)) |
|
83 set (h, "__plot_stream__", plot_stream); |
|
84 endif |
|
85 |
|
86 enhanced = init_plot_stream (plot_stream, h, varargin{:}); |
|
87 |
|
88 endif |
|
89 |
|
90 endfunction |
|
91 |
|
92 function enhanced = init_plot_stream (plot_stream, h, term, file) |
|
93 |
|
94 if (nargin == 4) |
|
95 enhanced = enhanced_term (term); |
|
96 if (! isempty (term)) |
|
97 if (enhanced) |
|
98 fprintf (plot_stream, "set terminal %s enhanced;\n", term); |
|
99 else |
|
100 fprintf (plot_stream, "set terminal %s;\n", term); |
|
101 endif |
|
102 endif |
|
103 if (! isempty (file)) |
|
104 fprintf (plot_stream, "set output \"%s\";\n", file); |
|
105 endif |
|
106 else |
|
107 |
|
108 ## Guess the terminal type. |
|
109 term = getenv ("GNUTERM"); |
|
110 if (isempty (term)) |
|
111 if (! isempty (getenv ("DISPLAY"))) |
|
112 term = "x11"; |
|
113 elseif (! isunix ()) |
|
114 term = "windows"; |
|
115 else |
|
116 ## This should really be checking for os x before setting |
|
117 ## the terminal type to aqua, but nobody will notice because |
|
118 ## every other unix will be using x11 and windows will be |
|
119 ## using windows. Those diehards still running octave from |
|
120 ## a linux console know how to set the GNUTERM variable. |
|
121 term = "aqua"; |
|
122 endif |
|
123 endif |
|
124 |
|
125 enhanced = enhanced_term (term); |
|
126 if (enhanced) |
|
127 enh_str = "enhanced"; |
|
128 else |
|
129 enh_str = ""; |
|
130 endif |
|
131 |
|
132 ## If no 'h' (why not?) then open the terminal as Figure 0. |
|
133 if (isempty (h)) |
|
134 h = 0; |
|
135 endif |
|
136 |
|
137 if (strcmp (term, "x11")) |
|
138 fprintf (plot_stream, "set terminal x11 %s title \"Figure %d\"\n", |
|
139 enh_str, h); |
|
140 elseif (strcmp (term, "aqua")) |
|
141 ## Aqua doesn't understand the 'title' option despite what the |
|
142 ## gnuplot 4.2 documentation says. |
|
143 fprintf (plot_stream, "set terminal aqua %d %s\n", h, enh_str); |
|
144 elseif (strcmp (term, "wxt")) |
|
145 fprintf (plot_stream, "set terminal wxt %s title \"Figure %d\"\n", |
|
146 enh_str, h); |
|
147 |
|
148 elseif (enhanced) |
|
149 fprintf (plot_stream, "set terminal %s %s\n", term, enh_str); |
|
150 endif |
|
151 ## gnuplot will pick up the GNUTERM environment variable itself |
|
152 ## so no need to set the terminal type if not also setting the |
|
153 ## figure title or enhanced mode. |
|
154 |
|
155 endif |
|
156 |
|
157 endfunction |
|
158 |
|
159 function have_enhanced = enhanced_term (term) |
|
160 persistent enhanced_terminals; |
|
161 |
|
162 if (isempty (enhanced_terminals)) |
|
163 ## Don't include pstex, pslatex or epslatex here as the TeX commands |
|
164 ## should not be interpreted in that case. |
|
165 if (compare_versions (__gnuplot_version__ (), "4.0", ">")) |
|
166 enhanced_terminals = {"aqua", "dumb", "png", "jpeg", "gif", "pm", ... |
|
167 "windows", "wxt", "svg", "postscript", "x11", "pdf"}; |
|
168 else |
|
169 enhanced_terminals = {"x11", "postscript"}; |
|
170 endif |
|
171 endif |
|
172 |
|
173 term = tolower (term); |
|
174 |
|
175 have_enhanced = false; |
|
176 for i = 1 : length (enhanced_terminals) |
|
177 t = enhanced_terminals{i}; |
|
178 if (strncmp (term, t, min (length (term), length (t)))) |
|
179 have_enhanced = true; |
|
180 break; |
|
181 endif |
|
182 endfor |
|
183 endfunction |