%kkprdata 'Print Data in Formatted ASCII'
% This MatLab function was automatically generated by a converter (KhorosToMatLab) from the Khoros kprdata.pane file
%
% Parameters: 
% InputFile: i 'Input ', required: 'Input Data Object'
% Toggle: attr 'Attributes', default: 0: 'Print Object Information & Attributes'
% Toggle: loc ' ', default: 0: 'Print Location Data'
% Toggle: time ' ', default: 0: 'Print Time Data'
% Toggle: val ' ', default: 0: 'Print Value Data'
% Toggle: mask ' ', default: 0: 'Print Mask Data'
% Toggle: ind ' ', default: 0: 'Print Implicit Indexing'
% String: replace 'Replacement for Masked Values', default: '*': 'Replacement String for Masked Values'
% OutputFile: f 'Output', optional: 'Resulting Output File'
% Toggle: mind ' ', default: 0: 'Print Implicit Map Indexing'
% Toggle: map ' ', default: 0: 'Print Map Data'
% Toggle: mval 'Map Value Data Through Map', default: 0: 'Map Value Data Through Map'
%
% Example: f = kkprdata(i, {'i','';'attr',0;'loc',0;'time',0;'val',0;'mask',0;'ind',0;'replace','*';'f','';'mind',0;'map',0;'mval',0})
%
% Khoros helpfile follows below:
%
%  PROGRAM
% kprdata - Print Data in Formatted ASCII
%
%  DESCRIPTION
% .I kprdata 
% prints the selected segments of data from the input object in 
% ASCII format to a file or to the screen.   
% 
% If the Print Attributes option (-att) is selected, all header and data
% information is printed before any data is printed.  (These non-data
% lines begin with a #, which indicates that the line is a "comment".)
% 
% After the attribute lines, data fields selected by the user are formatted in 
% the following order.
% 
% 
% Implicit Indexing: Location Data: Time Data: Value Data: Mask Data.
% 
% This data can be followed by map data (if selected):
% 
% 
% Map Indexing: Map Data.
% 
% This data can be followed by connectivity data.
% 
% When map data exists, selecting the "Map Value Data Through Map" option 
% will cause the value data to be mapped through the map data before being
% presented.  
% 
% The implicit indexing options, Print Implicit Indexing (-ind), and Print Map 
% Indexing (-mind), if selected, will print the indices of the data.
% The index values index both the value data and explicit location and time
% data.  For instance, in the following example, the index [0][0][0][1]
% points to the 3D location data [4][27][38], and the value of 104.5.
% 
% 
% t  d  h  w    Location  Value
% 0  0  0  1    4 27 38   104.5
% 
% The \fBReplacement for Masked Values" option (-replace) allows value data 
% which has mask data associated with it, to be printed with the masked values 
% replaced by the given string.
% 
% Complex data is printed as real/imaginary pairs (real, imaginary).  
% 
% If data segments that do not exist in the input data object are selected, 
% kprdata will return a warning message indicating that the segments do not 
% exist.  Information about other selected segments will be printed.
% 
% If the location grid is uniform or rectilinear and only the location
% data is being printed, then the location data will be printed in a
% manner consistent with the grid type.  That is, a uniform grid implies
% that the location begin and end will be printed, and a rectilinear
% grid implies that the data for the width, height, and depth axes will
% be printed.  When location data is printed with any other parts of the
% data model, it is presented as if it were curvilinear location data.
%
%  
%
%  EXAMPLES
% 
% kprdata -i in_object -attr -val -ind
% This command sequence will cause the attributes, followed by
% the value data, with indices, to be printed to stdout.
% 
% kprdata -i in_obj -map -mind -val -f out_file
% This command sequence will print all of the value data,
% followed by the map data, with indices, to the file out_file.
%
%  "SEE ALSO"
%
%  RESTRICTIONS 
%
%  REFERENCES 
%
%  COPYRIGHT
% Copyright (C) 1993 - 1997, Khoral Research, Inc. ("KRI")  All rights reserved.
% 


function varargout = kkprdata(varargin)
if nargin ==0
  Inputs={};arglist={'',''};
elseif nargin ==1
  Inputs=varargin{1};arglist={'',''};
elseif nargin ==2
  Inputs=varargin{1}; arglist=varargin{2};
else error('Usage: [out1,..] = kkprdata(Inputs,arglist).');
end
if size(arglist,2)~=2
  error('arglist must be of form {''ParameterTag1'',value1;''ParameterTag2'',value2}')
 end
narglist={'i', '__input';'attr', 0;'loc', 0;'time', 0;'val', 0;'mask', 0;'ind', 0;'replace', '*';'f', '__output';'mind', 0;'map', 0;'mval', 0};
maxval={0,0,0,0,0,0,0,0,1,0,0,0};
minval={0,0,0,0,0,0,0,0,1,0,0,0};
istoggle=[0,1,1,1,1,1,1,1,1,1,1,1];
was_set=istoggle * 0;
paramtype={'InputFile','Toggle','Toggle','Toggle','Toggle','Toggle','Toggle','String','OutputFile','Toggle','Toggle','Toggle'};
% identify the input arrays and assign them to the arguments as stated by the user
if ~iscell(Inputs)
Inputs = {Inputs};
end
NumReqOutputs=0; nextinput=1; nextoutput=1;
  for ii=1:size(arglist,1)
  wasmatched=0;
  for jj=1:size(narglist,1)
   if strcmp(arglist{ii,1},narglist{jj,1})  % a given argument was matched to the possible arguments
     wasmatched = 1;
     was_set(jj) = 1;
     if strcmp(narglist{jj,2}, '__input')
      if (nextinput > length(Inputs)) 
        error(['Input ' narglist{jj,1} ' has no corresponding input!']); 
      end
      narglist{jj,2} = 'OK_in';
      nextinput = nextinput + 1;
     elseif strcmp(narglist{jj,2}, '__output')
      if (nextoutput > nargout) 
        error(['Output nr. ' narglist{jj,1} ' is not present in the assignment list of outputs !']); 
      end
      if (isempty(arglist{ii,2}))
        narglist{jj,2} = 'OK_out';
      else
        narglist{jj,2} = arglist{ii,2};
      end

      nextoutput = nextoutput + 1;
      if (minval{jj} == 0)  
         NumReqOutputs = NumReqOutputs - 1;
      end
     elseif isstr(arglist{ii,2})
      narglist{jj,2} = arglist{ii,2};
     else
        if strcmp(paramtype{jj}, 'Integer') & (round(arglist{ii,2}) ~= arglist{ii,2})
            error(['Argument ' arglist{ii,1} ' is of integer type but non-integer number ' arglist{ii,2} ' was supplied']);
        end
        if (minval{jj} ~= 0 | maxval{jj} ~= 0)
          if (minval{jj} == 1 & maxval{jj} == 1 & arglist{ii,2} < 0)
            error(['Argument ' arglist{ii,1} ' must be bigger or equal to zero!']);
          elseif (minval{jj} == -1 & maxval{jj} == -1 & arglist{ii,2} > 0)
            error(['Argument ' arglist{ii,1} ' must be smaller or equal to zero!']);
          elseif (minval{jj} == 2 & maxval{jj} == 2 & arglist{ii,2} <= 0)
            error(['Argument ' arglist{ii,1} ' must be bigger than zero!']);
          elseif (minval{jj} == -2 & maxval{jj} == -2 & arglist{ii,2} >= 0)
            error(['Argument ' arglist{ii,1} ' must be smaller than zero!']);
          elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} < minval{jj})
            error(['Argument ' arglist{ii,1} ' must be bigger than ' num2str(minval{jj})]);
          elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} > maxval{jj})
            error(['Argument ' arglist{ii,1} ' must be smaller than ' num2str(maxval{jj})]);
          end
        end
     end
     if ~strcmp(narglist{jj,2},'OK_out') &  ~strcmp(narglist{jj,2},'OK_in') 
       narglist{jj,2} = arglist{ii,2};
     end
   end
   end
   if (wasmatched == 0 & ~strcmp(arglist{ii,1},''))
        error(['Argument ' arglist{ii,1} ' is not a valid argument for this function']);
   end
end
% match the remaining inputs/outputs to the unused arguments and test for missing required inputs
 for jj=1:size(narglist,1)
     if  strcmp(paramtype{jj}, 'Toggle')
        if (narglist{jj,2} ==0)
          narglist{jj,1} = ''; 
        end;
        narglist{jj,2} = ''; 
     end;
     if  ~strcmp(narglist{jj,2},'__input') && ~strcmp(narglist{jj,2},'__output') && istoggle(jj) && ~ was_set(jj)
          narglist{jj,1} = ''; 
          narglist{jj,2} = ''; 
     end;
     if strcmp(narglist{jj,2}, '__input')
      if (minval{jj} == 0)  % meaning this input is required
        if (nextinput > size(Inputs)) 
           error(['Required input ' narglist{jj,1} ' has no corresponding input in the list!']); 
        else
          narglist{jj,2} = 'OK_in';
          nextinput = nextinput + 1;
        end
      else  % this is an optional input
        if (nextinput <= length(Inputs)) 
          narglist{jj,2} = 'OK_in';
          nextinput = nextinput + 1;
        else 
          narglist{jj,1} = '';
          narglist{jj,2} = '';
        end;
      end;
     else 
     if strcmp(narglist{jj,2}, '__output')
      if (minval{jj} == 0) % this is a required output
        if (nextoutput > nargout & nargout > 1) 
           error(['Required output ' narglist{jj,1} ' is not stated in the assignment list!']); 
        else
          narglist{jj,2} = 'OK_out';
          nextoutput = nextoutput + 1;
          NumReqOutputs = NumReqOutputs-1;
        end
      else % this is an optional output
        if (nargout - nextoutput >= NumReqOutputs) 
          narglist{jj,2} = 'OK_out';
          nextoutput = nextoutput + 1;
        else 
          narglist{jj,1} = '';
          narglist{jj,2} = '';
        end;
      end
     end
  end
end
if nargout
   varargout = cell(1,nargout);
else
  varargout = cell(1,1);
end
global KhorosRoot
if exist('KhorosRoot') && ~isempty(KhorosRoot)
w=['"' KhorosRoot];
else
if ispc
  w='"C:\Program Files\dip\khorosBin\';
else
[s,w] = system('which cantata');
w=['"' w(1:end-8)];
end
end
[varargout{:}]=callKhoros([w 'kprdata"  '],Inputs,narglist);
