/*--------------------------------------------------------------*
 *                                                              *
 *           = array  - Suffix Array からのテキスト検索 =       *
 *                                                              *
 *  array-misc.c - init, mode, sort, bye, help コマンドハンドラ *
 *                 その他雑多なルーチン                         *
 *                                                              *
 *--------------------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sufary.h"
#include "array.h"

/* モードテーブル */
typedef struct mode_arg_{
  char *name;
  int mode;
} mode_arg;

static mode_arg arg_disp[] = {
  { "kwic", DISP_KWIC },
  { "index", DISP_INDEX },
  { "line", DISP_LINE },
  { "simple", DISP_SIMPLE },
  /* 970523  省略形 */
  { "k", DISP_KWIC },
  { "i", DISP_INDEX },
  { "l", DISP_LINE },
  { "s", DISP_SIMPLE },
  { NULL, -1 }
};

static mode_arg arg_sort[] = {
  { "index", SORT_INDEX },
  { "alphabetical", SORT_ALPHABETICAL },
  /* 970523  省略形 */
  { "i", SORT_INDEX },
  { "a", SORT_ALPHABETICAL },
  { NULL, -1 }
};


/**********************************************
 *           eresult com_init(char *cmd);
 *
 * purpose
 *   検索範囲の初期化
 *
 * parameters
 *   cmd : 未使用
 *
 * return value
 *   プログラム継続モード
 *
 * description
 *
 **********************************************/
eresult com_init(char *cmd)
{
  int i;

  for (i = 0; i < arrays; i++){
    sa_reset(sufary[i]);
  }

  return CONT;
}

/**********************************************
 *        eresult com_mode_display(char *cmd);
 *
 * purpose
 *   表示モードの変更
 *
 * parameters
 *   cmd : コマンドライン(表示モード)
 *
 * return value
 *   プログラム継続モード
 *
 * description
 *
 **********************************************/
eresult com_mode_display(char *cmd)
{
  char *s;
  mode_arg *da;

  s = strtok(cmd, ct);
  if ( s == NULL ){
    ee = COMMAND;
    return ERROR;
  }

  for ( da = arg_disp; da->name != NULL; da++ ){
    if (strcmp(s, da->name) == 0){
      display_mode = da->mode;
      return CONT;
    }
  }
  ee = COMMAND;
  return ERROR;
}

/**********************************************
 *          eresult com_mode_sort(char *cmd);
 *
 * purpose
 *   ソートモードの変更
 *
 * parameters
 *   cmd : コマンドライン(ソートモード)
 *
 * return value
 *   プログラム継続モード
 *
 * description
 *
 **********************************************/
eresult com_mode_sort(char *cmd)
{
  char *s;
  mode_arg *sa;

  s = strtok(cmd, ct);
  if ( s == NULL ){
    ee = COMMAND;
    return ERROR;
  }

  for ( sa = arg_sort; sa->name != NULL; sa++ ){
    if (strcmp(s, sa->name) == 0){
      sort_mode = sa->mode;
      return CONT;
    }
  }
  ee = COMMAND;
  return ERROR;
}

/**********************************************
 *         eresult com_mode_mojibake(char *cmd);
 *
 * purpose
 *   文字化け処理モードの変更
 *
 * parameters
 *   cmd : コマンドライン(ソートモード)
 *
 * return value
 *   プログラム継続モード
 **********************************************/
eresult com_mode_mojibake(char *cmd)
{
  char *s;

  s = strtok(cmd, ct);
  if ( s == NULL ){
    ee = COMMAND;
    return ERROR;
  }

  if(strcmp(s,"ON") == 0){
    mojibake_proc_flag = 1;
    printf("ON\n");
  }else{
    mojibake_proc_flag = 0;
    printf("OFF\n");
  }
  return CONT;
}

/**********************************************
 *         eresult com_set_kwic_width(char *cmd);
 *
 * purpose
 *   KWICの幅を設定する．
 *
 * parameters
 *   cmd : コマンドライン(ソートモード)
 *
 * return value
 *   プログラム継続モード
 **********************************************/
eresult com_set_kwic_width(char *cmd)
{
  char *s;

  s = strtok(cmd, ct);
  if ( s == NULL ){
    ee = COMMAND;
    return ERROR;
  }
  if(!atoi(s)){
    ee = COMMAND;
    return ERROR;
  }
  kwic_width = atoi(s);
/*  if(kwic_width % 2 == 1){
    printf("%d != even number.\n",kwic_width);
    ee = COMMAND;
    return ERROR;
  }
*/
  return CONT;
}

