/*
  Module name: p_disp.c
  Created by: Ljubomir Buturovic
  Created: 03/15/2005
  Purpose: menu display functions for PCP.
*/  

/*
  Copyright 2004 Ljubomir J. Buturovic

  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation files
  (the "Software"), to deal in the Software without restriction,
  including without limitation the rights to use, copy, modify, merge,
  publish, distribute, sublicense, and/or sell copies of the Software,
  and to permit persons to whom the Software is furnished to do so,
  subject to the following conditions:

  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
*/

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "pcp.h"

#define ESCAPE_CHAR       27
#define PCP_VT100_LOC2    "[2;20H"
#define PCP_VT100_LOC3    "[3;20H"
#define PCP_VT100_LOC21   "[21;4H"
#define PCP_VT100_INV     "[7;1m"
#define PCP_VT100_RES     "[0m"

static void disp_msg(char *color, char msg_code)
{
  char escape;
  char space;

  escape = ESCAPE_CHAR;
  space = ' ';
  if (msg_code == 'b')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_B, space, escape);
  else if (msg_code == 'c')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_C, space, escape);
  else if (msg_code == 'd')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_D, space, escape);
  else if (msg_code == 'e')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_E, space, escape);
  else if (msg_code == 'f')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_F, space, escape);
  else if (msg_code == 'g')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_G, space, escape);
  else if (msg_code == 'h')
    printf("%s%c[21;4H%c[7;1m%31c%s%31c%c[0m", color, escape, escape, space, 
	   PCP_MMSG_H, space, escape);
}

static void  disp_clend(char *color)
{
  char escape;
  char space;

  escape = ESCAPE_CHAR;
  space = ' ';
  printf("%s%c[16;4H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[17;4H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[16;23H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[17;23H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[16;42H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[17;42H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[16;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
  printf("%s%c[17;61H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[18;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", color, escape, 
	 escape, space, space, escape, space, space, escape, space, space, 
	 escape, space, space);
}

/*
  Common code to display most classifier menus.
*/
static void disp_classifier(char *color)
{
  char escape;
  char space;

  escape = ESCAPE_CHAR;
  space = ' ';

  printf("%s%c[6;4H%c[7;1m    Learning    %c[0m", color, escape, escape, escape);
  printf("%s%c[7;4H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[6;23H%c[7;1mBagging (Commi- %c[0m", color, escape, escape, escape);
  printf("%s%c[7;23H%c[7;1mttee) Learning  %c[0m", color, escape, escape, escape);
  printf("%s%c[6;42H%c[7;1m   Prediction   %c[0m", color, escape, escape, escape);
  printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[6;61H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
  printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7cd%8c", color, escape, 
	 escape, space, space, escape, space, space, escape, space, space, 
	 escape, space, space);
  
  printf("%s%c[11;4H%c[7;1m    Bagging     %c[0m", color, escape, escape, escape);
  printf("%s%c[12;4H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
  printf("%s%c[11;23H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
  printf("%s%c[12;23H%c[7;1m    Results     %c[0m", color, escape, escape, escape);
  printf("%s%c[11;42H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[12;42H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[11;61H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[12;61H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[13;4H%c[0;7m%7ce%8c%c[3C%7cf%8c%c[3C%7c %8c%c[3C%7c %8c", color, escape, 
	 escape, space, space, escape, space, space, escape, space, space, 
	 escape, space, space);

  disp_clend(color);

  disp_msg(color, 'f');
}

static void disp_clx(char *color)
{
  char escape;
  char space;

  escape = ESCAPE_CHAR;
  space = ' ';
  printf("%s%c[6;4H%c[7;1m    Learning    %c[0m", color, escape, escape, escape);
  printf("%s%c[7;4H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[6;23H%c[7;1mBagging (Commi- %c[0m", color, escape, escape, escape);
  printf("%s%c[7;23H%c[7;1mttee) Learning  %c[0m", color, escape, escape, escape);
  printf("%s%c[6;42H%c[7;1m   Prediction   %c[0m", color, escape, escape, escape);
  printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%s%c[6;61H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
  printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
  printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7cd%8c", escape, 
	 escape, space, space, escape, space, space, escape, space, space, 
	 escape, space, space);
  
  printf("%s%c[11;4H%c[7;1m    Bagging     %c[0m", color, escape, escape, escape);
  printf("%s%c[12;4H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
  printf("%s%c[11;23H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
  printf("%s%c[12;23H%c[7;1m    Results     %c[0m", color, escape, escape, escape);
}

void p_disp(int menu_id, int size)
{
  char escape;
  char space;
  char color[6];

  escape = ESCAPE_CHAR;
  space = ' ';
  color[0] = escape;
  color[1] = '[';
  memcpy(&color[2], PCP_VT100_COLOR, strlen(PCP_VT100_COLOR)); 
  color[4] = 'm';
  color[5] = '\0';
  if (menu_id == PCP_MENU_MAIN)
    {
      printf("%s%c[2;20H%c[7;1m%16cMain Menu%16c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 1%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1mData  Loading...%c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[6;23H%c[7;1m    Pattern     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1mClassification..%c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m    Feature     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m Extraction...  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m    Feature     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m  Selection...  %c[0m", color, escape, escape, escape);
      printf("%s%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7cd%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;61H%c[7;1m      Exit      %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'd');
    }
  else if (menu_id == PCP_MENU_FEXTR)
    {
      printf("%s%c[2;20H%c[7;1m%11cFeature  Extraction%11c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 2%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1mFisher's  Linear%c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m  Discriminant  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1mPrincipal Compo-%c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1mnent Analysis...%c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m   E  Mapping   %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m Map Data Sets  %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7cd%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);
      disp_msg(color, 'd');
    }
  else if (menu_id == PCP_MENU_PCA)
    {
      printf("%s%c[2;20H%c[7;1m%6cPrincipal Compoment Analysis%7c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1mPrincipal Compo-%c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m nent  Analysis %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m Singular Value %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m Decomposition  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7c %8c%c[3C%7c %8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);
      
      disp_msg(color, 'b');
    }
  else if (menu_id == PCP_MENU_PC)
    {
      printf("%s%c[2;20H%c[7;1m%9cPattern  Classification%9c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 2%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1m  Bayes  Error  %c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m Estimation...  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m   Parametric   %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m Classifiers... %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m     Linear     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1mDiscriminants...%c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1mNearest Neighbor%c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m Classifiers... %c[0m", color, escape, escape, escape);
      printf("%s%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7cd%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m  Multi-Layer   %c[0m", color, escape, escape, escape);
      printf("%s%c[12;4H%c[7;1m Perceptron...  %c[0m", color, escape, escape, escape);
      printf("%s%c[11;23H%c[7;1m Support Vector %c[0m", color, escape, escape, escape);
      printf("%s%c[12;23H%c[7;1m   Machines...  %c[0m", color, escape, escape, escape);
      printf("%s%c[11;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[13;4H%c[0;7m%7ce%8c%c[3C%7cf%8c%c[3C%7c %8c%c[3C%7c %8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[16;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[17;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[16;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[17;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[16;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[17;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[16;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[17;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[18;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", color, escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'f');
    }
  else if (menu_id == PCP_MENU_MLP)
    {
      printf("%s%c[2;20H%c[7;1m%9cMulti-Layer Perceptron%10c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);
      disp_clx(color);
      printf("%s%c[11;42H%c[7;1m     Model      %c[0m", color, escape, escape, escape);
      printf("%s%c[12;42H%c[7;1m   Selection    %c[0m", color, escape, escape, escape);
      printf("%s%c[11;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[13;4H%c[0;7m%7ce%8c%c[3C%7cf%8c%c[3C%7cg%8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);
      
      disp_clend(color);
      disp_msg(color, 'g');
    }
  else if (menu_id == PCP_MENU_BAYES)
    {
      printf("%s%c[2;20H%c[7;1m%9cBayes Error Estimation%10c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);
      
      printf("%s%c[6;4H%c[7;1mTrue  Leave-one-%c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m-out  Estimation%c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m  Approximate   %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m Leave-one-out  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m     Print      %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m    Results     %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'c');
    }
  else if (menu_id == PCP_MENU_SVM)
    {
      printf("%s%c[2;20H%c[7;1m%9cSupport Vector Machines%9c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      disp_clx(color);
      printf("%s%c[11;42H%c[7;1m     Model      %c[0m", color, escape, escape, escape);
      printf("%s%c[12;42H%c[7;1m  Selection...  %c[0m", color, escape, escape, escape);
      printf("%s%c[11;61H%c[7;1m  Save Problem  %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1min LIBSVM Format%c[0m", color, escape, escape, escape);
      printf("%c[13;4H%c[0;7m%7ce%8c%c[3C%7cf%8c%c[3C%7cg%8c%c[3C%7ch%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[16;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[17;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[18;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'h');
    }
  else if (menu_id == PCP_MENU_PAC)
    {
      printf("%s%c[2;20H%c[7;1m%9cParametric Classifiers%10c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1m     Linear     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m Classifier...  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m   Quadratic    %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m Classifier...  %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7c %8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'b');
    }
  else if (menu_id == PCP_MENU_LPAR)
    {
      printf("%s%c[2;20H%c[7;1m%9c   Linear Classifier  %10c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 4%17c%c[0m", color, escape, escape, space, 
	     space, escape);
      disp_classifier(color);
    }
  else if (menu_id == PCP_MENU_QPAR)
    {
      printf("%s%c[2;20H%c[7;1m%9c Quadratic Classifier %10c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 4%17c%c[0m", color, escape, escape, space, 
	     space, escape);
      disp_classifier(color);
    }
  else if (menu_id == PCP_MENU_LOAD)
    {
      printf("%s%c[2;20H%c[7;1m%14cData Loading%15c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 2%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1m      Load      %c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m    Dataset     %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m     Status     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m    Display     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m    Dataset     %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m      Copy      %c[0m", color, escape, escape, escape);
      printf("%s%c[12;4H%c[7;1m    Dataset     %c[0m", color, escape, escape, escape);
      printf("%s%c[11;23H%c[7;1m    Normalize   %c[0m", color, escape, escape, escape);
      printf("%s%c[12;23H%c[7;1m      Data      %c[0m", color, escape, escape, escape);
      printf("%s%c[11;42H%c[7;1m  Eigenvalues   %c[0m", color, escape, escape, escape);
      printf("%s%c[12;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;61H%c[7;1m Covariance And %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m  Correlation   %c[0m", color, escape, escape, escape);
      printf("%c[13;4H%c[0;7m%7ce%8c%c[3C%7cf%8c%c[3C%7cg%8c%c[3C%7ch%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[16;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[17;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[18;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'h');
    }
  else if (menu_id == PCP_MENU_LD)
    {
      printf("%s%c[2;20H%c[7;1m     Linear Discriminant Classifier      %c[0m", color, escape, escape, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);
      disp_classifier(color);
    }
  else if (menu_id == PCP_MENU_KNN)
    {
      printf("%s%c[2;20H%c[7;1m       Nearest Neighbor Classifier       %c[0m", color, escape, escape, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 3%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1m   Prediction   %c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1mBagging (Commi- %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1mttee) Prediction%c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m     Bagging    %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
      printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7cd%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1mCross-validation%c[0m", color, escape, escape, escape);
      printf("%s%c[12;4H%c[7;1m    Results     %c[0m", color, escape, escape, escape);
      printf("%s%c[11;23H%c[7;1m     Model      %c[0m", color, escape, escape, escape);
      printf("%s%c[12;23H%c[7;1m   Selection    %c[0m", color, escape, escape, escape);
      printf("%s%c[11;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[11;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[13;4H%c[0;7m%7ce%8c%c[3C%7cf%8c%c[3C%7c %8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[16;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;4H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;23H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[17;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[16;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[17;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[18;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'f');
    }
  else if (menu_id == PCP_MENU_FSEL)
    {
      printf("%s%c[2;20H%c[7;1m%12cFeature Selection%12c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 2%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1m Select Feature %c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m     Subset     %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m    Display     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m Feature Subset %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1mSubset Data Sets%c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7cc%8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'c');
    }
  else if (menu_id == PCP_MENU_XPAR)
    {
      printf("%s%c[2;20H%c[7;1m%9c  SVM Model Selection  %9c%c[0m", color, escape, escape, space, 
	     space, escape);
      printf("%s%c[3;20H%c[7;1m%17cLevel 4%17c%c[0m", color, escape, escape, space, 
	     space, escape);

      printf("%s%c[6;4H%c[7;1m    Simplex     %c[0m", color, escape, escape, escape);
      printf("%s%c[7;4H%c[7;1m     Search     %c[0m", color, escape, escape, escape);
      printf("%s%c[6;23H%c[7;1m      Grid      %c[0m", color, escape, escape, escape);
      printf("%s%c[7;23H%c[7;1m     Search     %c[0m", color, escape, escape, escape);
      printf("%s%c[6;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;42H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[6;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%s%c[7;61H%c[7;1m                %c[0m", color, escape, escape, escape);
      printf("%c[8;4H%c[0;7m%7ca%8c%c[3C%7cb%8c%c[3C%7c %8c%c[3C%7c %8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      printf("%s%c[11;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;4H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;23H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[12;42H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%s%c[11;61H%c[7;1m     Return     %c[0m", color, escape, escape, escape);
      printf("%s%c[12;61H%c[7;1m%16c%c[0m", color, escape, escape, space, escape);
      printf("%c[13;4H%c[0;7m%7c %8c%c[3C%7c %8c%c[3C%7c %8c%c[3C%7cx%8c", escape, 
	     escape, space, space, escape, space, space, escape, space, space, 
	     escape, space, space);

      disp_msg(color, 'b');
    }
}


syntax highlighted by Code2HTML, v. 0.9.1