help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: more info: windows version of Octave


From: Dmitri A. Sergatskov
Subject: Re: more info: windows version of Octave
Date: Mon, 23 May 2005 12:46:32 -0600
User-agent: Mozilla Thunderbird (X11/20050322)

Bhaskar Ramamurthy wrote:
Dmitri
I had given up on debugging the print problem. That is why I did not provide
specifics - but if you can help, I will appreciate it. Here you go. This is
what I get.
Octave:1> x=1:10;
Octave:2>print("test.ps","-deps")
Error:'__grcmd__'undefined near line 271 column 7
Error:evaluating if command near line 217, column 5

You are using a wrong print.m.
You want to use the print.m from octave-forge/main/plot/print.m

You are, obviously, using the octave-forge/extra/graceplot/alternatives/print.m

This is an alternative print/plot subsystem to be used with "grace"
plotting package [*] instead of "gnuplot".

I attach the correct version with this email. Please let us know if
you still have problems.

Also, since gnuplot interface is being changing, when reporting the problem
please let us know what are the octave and gnuplot version you are using.

Sincerely,

Dmitri.

[*] http://plasma-gate.weizmann.ac.il/Grace/
--
## Copyright (C) 2001 Laurent Mazet
##
## This program is free software; it is distributed in the hope that it
## will be useful, but WITHOUT ANY WARRANTY; without even the implied
## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
## the GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this file; see the file COPYING.  If not, write to the
## Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
## 02111-1307, USA.
##
## Copyright (C) 1999 Daniel Heiserer

## -*- texinfo -*-
## @deftypefn {Function File} {} print (@var{filename}, @var{options})
##
## Print a graph, or save it to a file
##
## @var{filename} defines the file name of the output file. If no
## filename is specified, output is sent to the printer.
##
## @var{options}:
## @table @code
## @item address@hidden
##   Set the @var{printer} name to which the graph is sent if no
##   @var{filename} is specified.
## @item -color
## @itemx -mono
##   Monochrome or colour lines.
## @item -solid
## @itemx -dashed
##   Solid or dashed lines.
## @item -portrait
## @itemx -landscape
##   Plot orientation, as returned by "orient".
## @item address@hidden
##   Output device, where @var{device} is one of:
##   @table @code
##   @item ps
##   @itemx ps2
##   @itemx psc
##   @itemx psc2
##     Postscript (level 1 and 2, mono and color)
##   @item eps
##   @itemx eps2
##   @itemx epsc
##   @itemx epsc2
##     Encapsulated postscript (level 1 and 2, mono and color)
##   @item ill
##   @itemx aifm
##     Adobe Illustrator
##   @item cdr
##   @itemx corel
##     CorelDraw
##   @item hpgl
##     HP plotter language
##   @item fig
##     XFig
##   @item dxf
##     AutoCAD
##   @item mf
##     Metafont
##   @item png
##     Portable network graphics
##   @item pbm
##     PBMplus
##   @end table
##
##   Other devices are supported by "convert" from ImageMagick.  Type
##   system("convert") to see what formats are available.
##
##   If the device is omitted, it is inferred from the file extension,
##   or if there is no filename it is sent to the printer as postscript.
##
## @item address@hidden
## @itemx address@hidden:@var{size}
## @itemx -F:@var{size}
##   @var{fontname} set the postscript font (for use with postscript,
##   aifm, corel and fig). By default, 'Helvetica' is set for PS/Aifm,
##   and 'SwitzerlandLight' for Corel. It can also be 'Times-Roman'.
##   @var{size} is given in points. @var{fontname} is ignored for the
##   fig device.
## @end table
##
## The filename and options can be given in any order.
##
## If you are using Octave 2.1.x or above, command("print") will change 
## print from a function to a command, so instead of typing
##    print("-FTimes-Roman:14", "-dashed", "-depsc", "out.ps")
## you can type
##    print -FTimes-Roman:14 -dashed -depsc out.ps
##
## See also: orient, command
## @end deftypefn

## Author: Daniel Heiserer <address@hidden>
## 2001-03-23  Laurent Mazet <address@hidden>
##     * simplified interface: guess the device from the extension
##     * font support
## 2001-03-25  Paul Kienzle <address@hidden>
##     * add unwind_protect
##     * use tmpnam to generate temporary name
##     * move "set term" before "set output" as required by gnuplot
##     * more options, and flexible options
## 2001-03-29  Laurent Mazet <address@hidden>
##     * add solid and dashed options
##     * change PBMplus device
##     * add Corel device
##     * take care of the default terminal settings to restore them.
##     * add color, mono, dashed and solid support for printing and convert.
##     * add orientation for printing.
##     * create a .ps for printing (avoid some filtering problems).
##     * default printing is mono, default convert is color.
##     * add font size support.
## 2001-03-30  Laurent Mazet <address@hidden>
##     * correct correl into corel
##     * delete a irrelevant test
##     * check for convert before choosing the ouput device
## 2001-03-31  Paul Kienzle <address@hidden>
##     * use -Ffontname:size instead of -F"fontname size"
##     * add font size support to fig option
##     * update documentation
## 2003-10-01  Laurent Mazet <address@hidden>
##     * clean documentation

function print(varargin)

  ## take care of the settings we had before
  origterm = gget("terminal");
  origout = gget("output");
  ## End of line trmination for __gnuplot_raw__ command strings.
  endl = ";\n";
  _automatic_replot = automatic_replot;

  ## take care of the default terminal settings to restore them.
  terminal_default = "";
  
  orientation = orient;
  use_color = 0; # 0=default, -1=mono, +1=color
  force_solid = 0; # 0=default, -1=dashed, +1=solid
  fontsize = font = name = devopt = printer = "";
  
  va_arg_cnt = 1;

  for i=1:nargin
    arg = nth (varargin, va_arg_cnt++);
    if isstr(arg)
      if strcmp(arg, "-color")
        use_color = 1;
      elseif strcmp(arg, "-mono")
        use_color = -1;
      elseif strcmp(arg, "-solid")
        force_solid = 1;
      elseif strcmp(arg, "-dashed")
        force_solid = -1;
      elseif strcmp(arg, "-portrait")
        orientation = "portrait";
      elseif strcmp(arg, "-landscape")
        orientation = "landscape";
      elseif length(arg) > 2 && arg(1:2) == "-d"
        devopt = arg(3:length(arg));
      elseif length(arg) > 2 && arg(1:2) == "-P"
        printer = arg;
      elseif length(arg) > 2 && arg(1:2) == "-F"
        idx = rindex(arg, ":");
        if (idx)
          font = arg(3:idx-1);
          fontsize = arg(idx+1:length(arg));
        else
          font = arg(3:length(arg));
        endif
      elseif length(arg) >= 1 && arg(1) == "-"
        error([ "print: unknown option ", arg ]);
      elseif length(arg) > 0
        name = arg;
      endif
    else
      error("print: expects string options");
    endif
  endfor

  doprint = isempty(name);
  if doprint
    if isempty(devopt)
      printname = [ tmpnam, ".ps" ]; 
    else
      printname = [ tmpnam, ".", devopt ];
    endif
    name = printname;
  endif

  if isempty(devopt)
    dot = rindex(name, ".");
    if (dot == 0) 
      error ("print: no format specified");
    else
      dev = tolower(name(dot+1:length(name)));
    endif
  else
    dev = devopt;
  endif

  if strcmp(dev, "ill")
    dev = "aifm";
  elseif strcmp(dev, "cdr")
    dev = "corel";
  endif

  ## check if we have to use convert
  dev_list = [" aifm corel fig png pbm dxf mf hpgl", ...
              " ps ps2 psc psc2 eps eps2 epsc epsc2 " ];
  convertname = "";
  if isempty(findstr(dev_list , [ " ", dev, " " ]))
    if !isempty(devopt)
      convertname = [ devopt ":" name ];
    else
      convertname = name;
    endif
    dev = "epsc";
    name = [ tmpnam, ".eps" ];
  endif
  
  unwind_protect
    automatic_replot = 0;

    if strcmp(dev, "ps") || strcmp(dev, "ps2") ...
          || strcmp(dev, "psc")  || strcmp(dev, "psc2") ...
          || strcmp(dev, "epsc") || strcmp(dev, "epsc2") ... 
          || strcmp(dev, "eps")  || strcmp(dev, "eps2")
      ## Various postscript options
      ## FIXME: Do we need this? DAS
      ##__gnuplot_set__ term postscript
      terminal_default = gget ("terminal");
      
      if dev(1) == "e"
        options = "eps ";
      else
        options = [ orientation, " " ];
      endif
      options = [ options, "enhanced " ];
      
      if any( dev == "c" ) || use_color > 0
        if force_solid < 0
          options = [ options, "color dashed " ];
        else
          options = [ options, "color solid " ];
        endif
      else
        if force_solid > 0
          options = [ options, "mono solid " ];
        else
          options = [ options, "mono dashed " ];
        endif
      endif

      if !isempty(font)
        options = [ options, "\"", font, "\" " ];
      endif
      if !isempty(fontsize)
        options = [ options, " ", fontsize ];
      endif

      __gnuplot_raw__ (["set term postscript ", options, endl]);


    elseif strcmp(dev, "aifm") || strcmp(dev, "corel")
      ## Adobe Illustrator, CorelDraw
      ## FIXME: Do we need it? DAS
      ## eval(sprintf ("__gnuplot_set__ term %s", dev));
      terminal_default = gget ("terminal");
      if (use_color >= 0)
        options = " color";
      else
        options = " mono";
      endif
      if !isempty(font)
        options = [ options, " \"" , font, "\"" ];
      endif
      if !isempty(fontsize)
        options = [ options, " ", fontsize ];
      endif

      __gnuplot_raw__ (["set term ", dev, " ", options, endl]);

    elseif strcmp(dev, "fig")
      ## XFig
      ## FIXME: Do we need it? DAS
      ## __gnuplot_set__ term fig
      terminal_default = gget ("terminal");
      options = orientation;
      if (use_color >= 0)
        options = " color";
      else
        options = " mono";
      endif
      if !isempty(fontsize)
        options = [ options, " fontsize ", fontsize ];
      endif
      __gnuplot_raw__ (["set term fig ", options, endl]);

    elseif strcmp(dev, "png") || strcmp(dev, "pbm")
      ## Portable network graphics, PBMplus
      ## FIXME: Do we need it? DAS
      ## eval(sprintf ("__gnuplot_set__ term %s", dev));
      terminal_default = gget ("terminal");

      ## FIXME
      ## New PNG interface takes color as "xRRGGBB" where x is the literal 
character
      ## 'x' and 'RRGGBB' are the red, green and blue components in hex.
      ## For now we just ignore it and use default. 
      ## The png terminal now is so rich with options, that one perhaps
      ## has to write a separate printpng.m function.
      ## DAS

      ##
      ## if (use_color >= 0)
      ##        eval (sprintf ("__gnuplot_set__ term %s color medium", dev));
      ##else
      ##eval (sprintf ("__gnuplot_set__ term %s mono medium", dev));
      ##endif
      
      __gnuplot_raw__ ("set term png large;\n")
 
    elseif strcmp(dev,"dxf") || strcmp(dev,"mf") || strcmp(dev, "hpgl")
      ## AutoCad DXF, METAFONT, HPGL
      __gnuplot_raw__ (["set terminal ", dev, endl]);
            
    endif;
    
    ## Gnuplot expects " around output file name

    __gnuplot_raw__ (["set output \"", name, "\"", endl]);
    __gnuplot_replot__
    
  unwind_protect_cleanup

    ## Restore init state
    if ! isempty (terminal_default)
      __gnuplot_raw__ (["set terminal ", terminal_default, endl]);
    endif
    __gnuplot_raw__ (["set terminal ", origterm, endl]);
    if isempty (origout)
      __gnuplot_raw__ ("set output;\n")
    else
    ## Gnuplot expects " around output file name

      __gnuplot_raw__ (["set output \"", origout, "\"", endl]);
    end
    __gnuplot_replot__
    
    automatic_replot = _automatic_replot ;

  end_unwind_protect

  if !isempty(convertname)
    command = [ "convert '", name, "' '", convertname, "'" ];
    [output, errcode] = system (command);
    unlink (name);
    if (errcode)
      error ("print: could not convert");
    endif
  endif
  ## FIXME: This looks like a dirty, Unix-specific hack
  ## DAS
  if doprint
    system(sprintf ("lpr %s '%s'", printer, printname));
    unlink(printname);
  endif
  
endfunction

reply via email to

[Prev in Thread] Current Thread [Next in Thread]