%% 
%% $Revision $
%% 
%%
%% Copyright 1994-2003 The MathWorks, Inc.
%%
%% Abstract: Bus assignment block target file

%implements BusAssignment "C"

%% Function: BlockInstanceSetup ==============================================
%% Abstract:
%%   Set expression folding compliance
%%
%function BlockInstanceSetup(block, system) void
%<LibBlockSetIsExpressionCompliant(block)>
%endfunction


%% Function: Outputs ==========================================================
%% Abstract:
%%
%function Outputs(block, system) Output
  %assign numAssigned = NumDataInputPorts-1
  %assign u = LibBlockInputSignal(0, "", "", 0)
  %assign y = LibBlockOutputSignal(0, "", "", 0)
  %assign elemWidth = LibBlockOutputSignalWidth(0)
  
  %if LibBlockOutputSignalIsComplex(0)
    %assign elemWidth = elemWidth * 2
  %endif 
  %assign eTypeName = LibGetDataTypeNameFromId(LibBlockOutputSignalDataTypeId(0))
  
  %if !ISEQUAL(u, y)
    %if elemWidth == 1
      %<y> = %<u>;
    %else 
      (void) memcpy(&(%<y>), &(%<u>), %<elemWidth>*sizeof(%<eTypeName>));      
    %endif
  %endif
    
  %foreach idx = numAssigned
    %assign inpIdx = idx+1
    %if !LibBlockInputSignalIsExpr(inpIdx)
      %assign elemWidth = LibBlockInputSignalWidth(inpIdx)
      %if LibBlockInputSignalIsComplex(inpIdx)
	%assign elemWidth = elemWidth * 2
      %endif 
      %assign elemName = AssignString[idx]     
      %if elemWidth == 1
	%assign ua = LibBlockInputSignal(inpIdx, "", "", 0)
	%<y>%<elemName> = %<ua>;
      %else
	%assign eTypeName = LibGetDataTypeNameFromId(...
	  LibBlockInputSignalDataTypeId(inpIdx))
	%assign ua = LibBlockInputSignalAddr(inpIdx, "", "", 0)
	(void) memcpy(&(%<y>%<elemName>), %<ua>, %<elemWidth>*sizeof(%<eTypeName>));
      %endif
    %endif
  %endforeach
%endfunction

%% [EOF] busassign.tlc
