// file: $isip_ifc/class/algo/Generator/gen_01.cc
// version: $Id: gen_01.cc 10391 2006-01-25 03:32:38Z prasad $
//

// isip include files
//
#include "Generator.h"
#include <String.h>
#include <Console.h>

// method: debug
//
// arguments:
//  const unichar* msg: (input) message to print
//
// return: a boolean value indicating status
//
// this is the debug method
//
boolean Generator::debug(const unichar* msg_a) const {

  String value;
  String output;
  String empty_str;

  // output the information message
  //
  output.debugStr(name(), msg_a, L":");
  Console::put(output);
  
  Console::increaseIndention();
  
  // display the algorithm
  //
  output.debugStr(name(), msg_a, L"algorithm_d",
                  Generator::ALGO_MAP.getName((long)algorithm_d));
  Console::put(output);

  // display the implementation
  //
  output.debugStr(name(), msg_a, L"implementation_d",
                  Generator::IMPL_MAP.getName((long)implementation_d));
  Console::put(output);

  // display the compute mode name
  //
  output.debugStr(name(), msg_a, L"cmode_d",
                  CMODE_MAP.getName((long)cmode_d));
  Console::put(output);
     
  // display the sample frequency
  //
  value.assign(sample_freq_d);
  output.debugStr(name(), msg_a, L"sample_freq_d", value);
  Console::put(output);

  // display the frame duration
  //
  value.assign(frame_dur_d);
  output.debugStr(name(), msg_a, L"frame_dur_d", value);
  Console::put(output);

  // display parameters common to sine, square, pulse and triangle
  // algorithms
  //
  if ((algorithm_d == SINE) || (algorithm_d == SQUARE) ||
      (algorithm_d == PULSE) || (algorithm_d == TRIANGLE)) {
    
    // display the frequency
    //
    value.assign(frequency_d);
    output.debugStr(name(), msg_a, L"frequency_d", value);
    Console::put(output);
    
    // display the amplitude
    //
    value.assign(amplitude_d);
    output.debugStr(name(), msg_a, L"amplitude_d", value);
    Console::put(output);

    // display the phase
    //
    value.assign(phase_d);
    output.debugStr(name(), msg_a, L"phase_d", value);
    Console::put(output);
    
    // display the phase mode
    //
    output.debugStr(name(), msg_a, L"phmode_d",
		    Generator::PHMODE_MAP.getName((long)phmode_d));
    Console::put(output);
    
    // display the DC
    //
    value.assign(bias_d);
    output.debugStr(name(), msg_a, L"bias_d", value);
    Console::put(output);
    
  }

  // display variables commom to pulse, triangle and square
  // algorithms
  //
  if ((algorithm_d == PULSE) || (algorithm_d == TRIANGLE) ||
      (algorithm_d == SQUARE)) {

    // display the width
    //
    value.assign(duty_cycle_d);
    output.debugStr(name(), msg_a, L"duty_cycle_d", value);
    Console::put(output);
  }

  // display variables for gaussian algorithm 
  //
  if (algorithm_d == GAUSSIAN) {

    // display the mean
    //
    value.assign(mean_d);
    output.debugStr(name(), msg_a, L"mean_d", value);
    Console::put(output);

    // display the variance
    //
    value.assign(variance_d);
    output.debugStr(name(), msg_a, L"variance_d", value);
    Console::put(output);    
  }

  // display parameters common to sine, square, pulse and triangle
  // algorithms
  //
  if ((algorithm_d == LORENTZ) || (algorithm_d == ROSSLER)) {
    
    // display the parameters for the chaotic time series
    //  
    value.assign(chaos_a_d);
    output.debugStr(name(), msg_a, L"chaos_a_d", value);
    Console::put(output);
    
    value.assign(chaos_b_d);
    output.debugStr(name(), msg_a, L"chaos_b_d", value);
    Console::put(output);

    value.assign(chaos_c_d);
    output.debugStr(name(), msg_a, L"chaos_c_d", value);
    Console::put(output);

    value.assign(chaos_x0_d);
    output.debugStr(name(), msg_a, L"chaos_x0_d", value);
    Console::put(output);

    value.assign(chaos_y0_d);
    output.debugStr(name(), msg_a, L"chaos_y0_d", value);
    Console::put(output);

    value.assign(chaos_z0_d);
    output.debugStr(name(), msg_a, L"chaos_z0_d", value);
    Console::put(output);

    value.assign(chaos_integrate_upsample_d);
    output.debugStr(name(), msg_a, L"chaos_integrate_upsample_d", value);
    Console::put(output);
  }

  // debug level
  //
  output.debugStr(name(), msg_a, L"debug_level_d",
		  debug_level_d.getName());
  Console::put(output);

  // display the base class
  //
  AlgorithmBase::debug(L"AlgorithmBase");

  // decrease indention
  //
  Console::decreaseIndention();
  
  // exit gracefully
  //
  return true;
}

