#!/bin/sh
# nanako.properties パラメータ設定
# Replace
# ---------------------------------------------- #

# 配列の宣言
declare -a REP_LIST
declare -a ADD_LIST

ORG_NUM=0
ARG_NUM=0
DELIM_NUM=0
TARGET_NUM=0

# プロパティファイルのパス
NAPRO_PATH=""

## Version 情報を取得 [ 32* ]
NOW_VER=${1}

## web.xml keep value [ session_timeout ]
STK_1=${2}
STK_2=${3}

# メモリリークパッチがインストール済みか確認フラグ
ALR_MEM=""

##### Function ###################################
#----- 変数初期化 -------------------------------#
init(){
  # sedコマンド用変数は予め「sed」を代入しておく
  # 後々getSed〜()で「-e s/〜/〜/g」のパラメータを付加する
  SED_CMD="$sed"
  
  # ファイル属性値
  FILENAME=""
  REALNAME=""
  DELIMLINE=""
  WRITETYPE=""
  
  # XMLパラメータ変換用
  ORG_PARAM=""
  VAL_PARAM=""
  VAL_DATA=""
  ARG_PARAM=""
  DELIM_PARAM=""
  TARGET_PARAM=""
  REPEAT_PARAM=""
  
  # フラグ変数
  FILE_FLAG=0
  PATH_FLAG=0
  REAL_FLAG=0
  UNIT_FLAG=0
  REPEAT_FLAG=0
  PLATOON_FLAG=0
  CMT_FLAG=0
  ERR_FLAG=0
}

#----- XMLタグから値を取り出す ------------------#
getParam(){     #args:タグ文字列,タグ名(ex:FILENAME,ORG,VALUE)
  TAG_STR=$1
  TAG_NAME=$2
  RES=`$echo "$TAG_STR" | $sed -e s/"<$TAG_NAME>"//g -e s/"<\/$TAG_NAME>"//g`
  if [ $? -ne 0 ] ; then
    arize_err "PRM001" "String | tag [$TAG_STR | $TAG_NAME]"
    $echo ""
    return 1
  else
    $echo "$RES"
    return 0
  fi
}

#----- sed用値置換パラメータ生成 ----------------#
getSedParam(){  #args:ORG値,VALUE値(※変数展開後の値 ex:$HOST -> auth01)
#  TMP_ORG=$1                                                              # ["] [/] [*]が無いことを保証すること
  if [ "${1}" = "" -o "${2}" = "" ] ; then
    $echo ""
  else
    TMP_ORG=`$echo "$1" | $sed -e s/'"'/'\\\"'/g | $sed -e s/'\/'/'\\\\\/'/g | $sed -e s/'*'/'\\\*'/g`  # ["] [/] [*]への対応
    TMP_VAL=`$echo "$2" | $sed -e s/'"'/'\\\"'/g | $sed -e s/'\/'/'\\\\\/'/g | $sed -e s/'*'/'\\\*'/g`  # ["] [/] [*]への対応
    RES=' -e s/"'$TMP_ORG'"/"'$TMP_VAL'"/g'
    $echo "$RES"
  fi
}

#----- sed用コメントアウトパラメータ生成 --------#
getSedCommentOut(){   #args:コメントアウトする行の先頭文字
  TMP_CMT=`$echo "$1" | $sed -e s/'"'/'\\\"'/g | $sed -e s/'\/'/'\\\\\/'/g | $sed -e s/'*'/'\\\*'/g`  # ["] [/] [*]への対応
  RES=' -e s/"^'$TMP_CMT'"/"#'$TMP_CMT'"/g'
  $echo "$RES"
}

#----- メモリリーク対応パッチが当たっているか確認（SMXVer-3_2_2専用）-----------------#
#----- nanako.properties において"poolMaxConnectCount"が有 = 既にパッチ当たっている --#
#----- ここでは個別パッチ判断ではなく、純粋にメモリリーク対応がされているか確認 ------#
already_memoryleak(){
  write_log "メモリリークパッチのインストール有無について確認します"
  # "SECUREMATRIX のサーバ種別をチェックします ... "
  eval `cat /opt/cse/smx/common/bin/securematrix_infomartion.txt | grep SVR_MINI`
  svrType="${SVR_MINI}"
  # nanako.properties のパスを決定する
  if [ "${svrType}" = "Auth" ] ; then
    NAPRO_PATH=/opt/cse/smx/auth/servlet/webapps/auth/WEB-INF/classes/nanako.properties
  elif [ "${svrType}" = "GSB" ] ; then
    NAPRO_PATH=/opt/cse/smx/gsb/servlet/webapps/ROOT/WEB-INF/classes/nanako.properties
  elif [ "${svrType}" = "ISB" ] ; then
    NAPRO_PATH=/opt/cse/smx/isb/servlet/webapps/isb/WEB-INF/classes/nanako.properties
  else
    msg_err "サーバの種別チェックに失敗しました。" \
            "処理を中断します。"
    exit 1
  fi
  # poolMaxConnectCount の有無を確認
  $cat $NAPRO_PATH | grep -v '^#' | grep -v '^$' | grep 'poolMaxConnectCount' > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    # メモリリークパッチがインストール済み
    write_log "メモリリークパッチのインストール済みを確認しました"
    # アンアップデータ用のフラグファイル作成
    $touch $BACKUP_DIR/MEMOL_FLAG
    return 1
  else
    # メモリリークパッチがインストールされていない
    write_log "メモリリークパッチがインストールされていない事を確認しました"
    return 0
  fi
}

##### Main routine ###############################


# Function読み込み
. ${INST_HOME}/function.sh

# 設定ファイルの読み込み
load_setup_properties

# 初期処理
initialize
init

# フラグの初期化
FLAG=0

# 開始出力
CLEAR
msg_info  "パラメータ設定を行います。" \
          "パラメータ設定には時間がかかります。" \
          "しばらくお待ちください。"
#echo ""
echo_sp "パラメータ設定."

# 読み込む行に空白があっても一行をキチンと読み込むためには
# IFSを改行コードとして宣言する必要がある
TMP_IFS=$IFS
IFS='
'

# メモリリーク適用済み確認
already_memoryleak
ALR_MEM=$?

## 置き換えXMLファイル名(書き換え対象が既に書き変わっていても処理は実行する)
## バージョンの他にメモリリークパッチの有無によって書き換え数が変わる
REP_LIST[0]=${REPLACE_XML_FILE3}
if [ $NOW_VER -eq 20 ] ;then
  REP_LIST[1]=${REPLACE_XML_FILE2}
  if [ $ALR_MEM -eq 0 ] ; then
    REP_LIST[2]=${REPLACE_XML_FILE1}
  fi
fi

# パラメータ置換用XMLファイルを読み込み、置換処理を実行する ---------#
# XMLファイルが複数有る場合はその分実行する

for REP_FILE in ${REP_LIST[*]}
do
  if [ -f $REP_FILE ] ; then
  for READLINE in `$cat $REP_FILE`
  do
  # 改行コード(CR)を除去する
  LINE=`$echo "$READLINE" | $tr -d "\r"`
  
  #  echo "[$LINE]"
  
  # <FILE> の処理   ##########################################
  # 一ファイルの開始を告げる                              ####
  $echo "$LINE" | $grep ^"<FILE>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    init
    FILE_FLAG=1
    continue
  fi
  
  # <FILENAME> の処理   ######################################
  # 書き換え元のファイル名を抽出する                      ####
  $echo "$LINE" | $grep ^"<FILENAME>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $FILE_FLAG -eq 1 ] ; then
      FILENAME=`getParam "$LINE" "FILENAME"`
      if [ $? -ne 0 ] ; then
        # ファイル名抽出に失敗
        ERR_FLAG=1
      else
        PATH_FLAG=1
      fi
    fi
    continue
  fi
  
  # <REALNAME> の処理   ######################################
  # 実際の展開先のファイル名を抽出する                    ####
  $echo "$LINE" | $grep ^"<REALNAME>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $FILE_FLAG -eq 1 ] ; then
      REALNAME=`getParam "$LINE" "REALNAME"`
      if [ $? -ne 0 ] ; then
        # ファイル名抽出に失敗
        ERR_FLAG=1
      else
        REAL_FLAG=1
      fi
    fi
    continue
  fi
  
  # <UNIT> の処理   ##########################################
  # 一文字列置換情報の取得開始を告げる                    ####
  $echo "$LINE" | $grep ^"<UNIT>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $PATH_FLAG -eq 1 ] ; then
      ORG_PARAM=""
      VAL_PARAM=""
      VAL_DATA=""
      UNIT_FLAG=1
    fi
    continue
  fi
  
  # <ORG> の処理   ###########################################
  # 置換元の文字列を抽出する                              ####
  $echo "$LINE" | $grep ^"<ORG>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $UNIT_FLAG -eq 1 ] ; then
      ORG_PARAM=`getParam "$LINE" "ORG"`
      if [ $? -ne 0 ] ; then
        # 置換元の文字列抽出に失敗
        ERR_FLAG=1
      fi
    fi
    continue
  fi
  
  # <VALUE> の処理   #########################################
  # 置換後の文字列を抽出する                              ####
  # 抽出した文字列($****)を変数変換する                   ####
  # この段階でsed用置換パラメータを生成する               ####
  $echo "$LINE" | $grep ^"<VALUE>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $UNIT_FLAG -eq 1 -a "$ORG_PARAM" != "" ] ; then
      VAL_PARAM=`getParam "$LINE" "VALUE"`
      if [ $? -ne 0 ] ; then
        # 置換後の文字列抽出に失敗
        ERR_FLAG=1
      else
        VAL_DATA=`eval $echo "$VAL_PARAM"`
        if [ "$VAL_DATA" != "" ] ; then
          # 他のパッチインストーラによる置換済みチェック
          # 既に置換されていた場合無視する
          #already_patch $REALNAME $VAL_DATA
          #if [ $? -ne 0 ] ; then
          #  write_log "This value has already applied. [$VAL_DATA]"
          #  continue;
          #fi

          # 変数変換した結果がnullでなければ置換を実行する
          # 置換後の値(2番目のパラメタ)にはxmlから抽出したデータを変数展開させたものを使う
          #（※xml内で\${TMP}を扱えるようにするため。変数展開はgetSedParam実行時に行われない ex.$HOST -> $HOST のまま）
          RET=`getSedParam "$ORG_PARAM" "$VAL_DATA"`
#          RET=`getSedParam "$ORG_PARAM" "$VAL_PARAM"`
          SED_CMD="$SED_CMD""$RET"
          RET=""
        fi
      fi
   fi
    continue
  fi
  
  # <COMMENT> の処理   #######################################
  # コメントアウト候補宣言の開始を告げる                  ####
  # 置換後の値がnullの場合にのみコメントアウトが発生する  ####
  # コメントアウトする文字列は非タグ行で宣言される        ####
  $echo "$LINE" | $grep ^"<COMMENT>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $UNIT_FLAG -eq 1 -a "$ORG_PARAM" != "" -a "$VAL_PARAM" != "" -a "$VAL_DATA" = "" ] ; then
      CMT_FLAG=1
    fi
    continue
  fi
  
  # </COMMENT> の処理   ######################################
  # コメントアウト候補宣言の終了を告げる                  ####
  $echo "$LINE" | $grep ^"</COMMENT>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $CMT_FLAG -eq 1 ] ; then
      CMT_FLAG=0
    fi
    continue
  fi
  
  # </UNIT> の処理   #########################################
  # 一文字列置換情報の終了を告げる                        ####
  $echo "$LINE" | $grep ^"</UNIT>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    if [ $UNIT_FLAG -eq 1 ] ; then
      UNIT_FLAG=0
      ORG_PARAM=""
      VAL_PARAM=""
      VAL_DATA=""
    fi
    continue
  fi
  
  # </FILE> の処理   #########################################
  # 一ファイルの終了を告げる                              ####
  # この段階でファイルをsedで置換する                     ####
  # 一時ファイルに出力し、元のファイルに強制コピーする    ####
  $echo "$LINE" | $grep ^"</FILE>" > /dev/null 2>&1
  if [ $? -eq 0 ] ; then
    
    write_log "Replace file. [$FILENAME]"
    
    # 置換処理
    if [ $ERR_FLAG -eq 0 ] ; then
      # ここまでの処理でエラーが発生していない及び場合のみ、ファイル処理を実行する
      # 元ファイルを一時ファイルにコピーする
      $cat $FILENAME > $TMP_FILE 2>&1
      if [ $? -ne 0 ] ; then
        ERR_FLAG=1
        arize_err "PRM002" "File. [$FILENAME]"
      else
        # ORG や VALUE が ""である時の対処
        if [ "${SED_CMD}" = "${sed}" ] ; then
          continue;
        fi
      # コピーした一時ファイルをsedで置換して、元ファイル+(.change)に出力する
        eval "$SED_CMD" < $TMP_FILE > $FILENAME".change" 2>&1   # この処理で変数展開している
        if [ $? -ne 0 ] ; then
          ERR_FLAG=1
          arize_err "PRM003" "Sed command. [ $SED_CMD < $TMP_FILE > ${FILENAME}.change ]"
        fi
      fi
      
      if [ -f $TMP_FILE ] ; then
        $rm -f $TMP_FILE 2>&1
      fi
      
      # 元ファイル+(.change)を実際の展開先ファイルにコピーする
      # REALNAMEが読み込まれていなければ実効できない(=エラー)
      if [ $REAL_FLAG -eq 1 ] ; then
        $cp -f $FILENAME".change" $REALNAME > /dev/null 2>&1
        if [ $? -ne 0 ] ; then
          ERR_FLAG=1
          arize_err "PRM004" "File copy. [$FILENAME.change > $REALNAME]"
        fi
      else
        # REALNAMEが読み込まれていない場合はエラーとする
        ERR_FLAG=1
        arize_err "PRM005" "File. [$FILENAME]"
      fi
    fi
    
    # このファイル置換中にエラー発生した場合は、フラグを立てる(=>パラメータ設定に失敗)
    if [ $ERR_FLAG -ne 0 ] ; then
      FLAG=1
    fi
    
    # 一ファイルの置換が終了したことを出力する
    echo_sp "."
    
    init
    continue
  fi
  
  # 非タグ行 の処理   ########################################
  # <COMMENT>〜</COMMENT>の間の非タグ行は、               ####
  # コメントアウト候補宣言である                          ####
  # コメントアウト発生時は、この宣言文字で始まるデータの  ####
  # 行先頭に「#」を付加する                               ####
  if [ $CMT_FLAG -eq 1 ] ; then
    RET=`getSedCommentOut "$LINE"`
    SED_CMD="$SED_CMD""$RET"
    RET=""
  fi
  
  done
  fi
done


# パラメータ追記用XMLファイルを読み込み、追記処理を実行する     
# メモリリーク対応パッチが当たっているか確認（SMXVer-3_2_2専用）
# パッチインストール済み=1 (パラメータ追記処理をスキップする)
already_memoryleak
ALR_MEM=$?

## 追記XMLファイル名を配列に登録(Ver-3.2.0からのアップデートは３つのXMLから追記)
## メモリリークパッチが適用済みの場合はXMLファイルは２つ使用
## Ver-3.2.2 からアップデートした場合はXMLファイルは１つ使用
ADD_LIST[0]=${INSERT_XML_FILE3}
if [ $NOW_VER -eq 21 ] ; then
  ADD_LIST[1]=${INSERT_XML_FILE2}
fi
if [ $NOW_VER -eq 20 ] ; then
  ADD_LIST[1]=${INSERT_XML_FILE2}
  if [ $ALR_MEM -eq 0 ] ; then
    ADD_LIST[2]=${INSERT_XML_FILE1}
  fi
fi

for ADD_FILE in ${ADD_LIST[*]}
do
	if [ -f $ADD_FILE ] ; then
	for READLINE in `$cat $ADD_FILE`
	do
	  # 改行コード(CR)を除去する
	  LINE=`$echo "$READLINE" | $tr -d "\r"`
	  
	#  echo "[$LINE]"
	  
	  # <FILE> の処理   ##########################################
	  # 一ファイルの開始を告げる                              ####
	  $echo "$LINE" | $grep ^"<FILE>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    init
	    
	    if [ -f $TMP_FILE ] ; then
	      $rm -f $TMP_FILE 2>&1
	    fi
	    
	    FILE_FLAG=1
	    continue
	  fi
	  
	  # <FILENAME> の処理   ######################################
	  # 書き換え元のファイル名を抽出する                      ####
	  $echo "$LINE" | $grep ^"<FILENAME>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $FILE_FLAG -eq 1 ] ; then
	      FILENAME=`getParam "$LINE" "FILENAME"`
	      if [ $? -ne 0 ] ; then
	        # ファイル名抽出に失敗
	        ERR_FLAG=1
	      else
	        PATH_FLAG=1
	      fi
	    fi
	    continue
	  fi
	  
	  # <REALNAME> の処理   ######################################
	  # 実際の展開先のファイル名を抽出する                    ####
	  $echo "$LINE" | $grep ^"<REALNAME>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $FILE_FLAG -eq 1 ] ; then
	      REALNAME=`getParam "$LINE" "REALNAME"`
	      if [ $? -ne 0 ] ; then
	        # ファイル名抽出に失敗
	        ERR_FLAG=1
	      else
	        REAL_FLAG=1
	      fi
	    fi
	    continue
	  fi
	  
	  # <DELIMLINE> の処理   ######################################
	  # SMX区切り行を抽出する                                  ####
	  $echo "$LINE" | $grep ^"<DELIMLINE>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    DELIMLINE=`getParam "$LINE" "DELIMLINE"`
	    if [ $? -ne 0 ] ; then
	      # SMX区切り行の抽出に失敗
	      ERR_FLAG=1
	    fi
	    continue
	  fi
	  
	  # <UNIT> の処理   ##########################################
	  # 一文字列置換情報の取得開始を告げる                    ####
	  $echo "$LINE" | $grep ^"<UNIT>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $PATH_FLAG -eq 1 -a $REAL_FLAG -eq 1 ] ; then
	      VAL_PARAM=""
	      VAL_DATA=""
	      ORG_PARAM=""
	      UNIT_FLAG=1
	    fi
	    continue
	  fi
	  
	  # <VALUE> の処理   #########################################
	  # 抽出した文字列($****)を変数変換する                   ####
	  # 変換後の値がnullの場合、TEXTは追記されない            ####
	  $echo "$LINE" | $grep ^"<VALUE>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $UNIT_FLAG -eq 1 ] ; then
	      VAL_PARAM=`getParam "$LINE" "VALUE"`
	      if [ $? -ne 0 ] ; then
	        # 置換後の文字列抽出に失敗
	        ERR_FLAG=1
	      else
	        VAL_DATA=`eval $echo $VAL_PARAM`
	        if [ "$VAL_DATA" = "" ] ; then
	          # 変換後の値がnullの場合はTEXTを追記しないようにフラグを設定する
	          CMT_FLAG=2
	        fi
	      fi
	   fi
	    continue
	  fi
	  
	  # <ORG> の処理   ###########################################
	  # 置換元の文字列を抽出する                              ####
	  $echo "$LINE" | $grep ^"<ORG>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $UNIT_FLAG -eq 1 ] ; then
	      ORG_PARAM=`getParam "$LINE" "ORG"`
          ORG_LINE=`$cat $FILENAME | $grep "${ORG_PARAM}"`
	      if [ $? -ne 0 ] ; then
	        # 置換元の文字列抽出に失敗
	        ERR_FLAG=1
	      fi
	    fi
	    continue
	  fi
	  
	  # <TEXT> の処理   ##########################################
	  # 追記文候補宣言の開始を告げる                          ####
	  # 追記文は非タグ行で宣言される                          ####
	  $echo "$LINE" | $grep ^"<TEXT>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $UNIT_FLAG -eq 1 ] ; then
	      if [ $CMT_FLAG -eq 2 ] ; then
	        # VALUE値がnullなので、追記しない
	        CMT_FLAG=0
	      else
	        # 特に非追記対象（VALUE）が指定されていないので、追記する
	        CMT_FLAG=1
	      fi
	      continue
	    fi
	  fi
	  
	  # </TEXT> の処理   #########################################
	  # 追記文候補宣言の終了を告げる                          ####
	  $echo "$LINE" | $grep ^"</TEXT>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $CMT_FLAG -eq 1 ] ; then
	      CMT_FLAG=0
	    fi
	    continue
	  fi
	  
	  # </UNIT> の処理   #########################################
	  # 一文字列置換情報の終了を告げる                        ####
	  $echo "$LINE" | $grep ^"</UNIT>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $UNIT_FLAG -eq 1 ] ; then
	      UNIT_FLAG=0
	      VAL_PARAM=""
	      VAL_DATA=""
	#      ORG_PARAM=""     # ※INSERT処理は一つのUNITしか保持できないので、ORG_PARAMはそのまま</FILE>まで残す。
	    fi
	    continue
	  fi
	  
	  # </FILE> の処理   #########################################
	  # 一ファイルの終了を告げる                              ####
	  # この段階で一時ファイルに蓄積した追記文を              ####
	  # .changeファイルに追記する                             ####
	  # その後実際の展開先ファイルにコピーする                ####
	  $echo "$LINE" | $grep ^"</FILE>" > /dev/null 2>&1
	  if [ $? -eq 0 ] ; then
	    if [ $ERR_FLAG -eq 0 ] ; then
	      # ここまでの処理でエラーが発生していない場合のみ、ファイル処理を実行する
	      if [ $REAL_FLAG -eq 1 ] ; then
	        if [ "$DELIMLINE" != "" ] ; then
	          # 初期化処理
	          ADDED_FLAG=0                                      # フラグの初期化
	          $rm -f $FILENAME".change" > /dev/null 2>&1        # .changeファイルの削除
	          
	          LASTEST_FLAG=0                                    # 追記フラグ(0=途中挿入,1=末尾追記)
	          
	          if [ "$ORG_PARAM" = "" ] ; then
	            # <ORG>がnullの場合 -> 最後に追記する
	            LASTEST_FLAG=1
	          fi
	          
	          # 実際のファイル(既存のファイル)を読み込む
	          for REAL_LINE in `$cat $REALNAME`
	          do
	#debug#          arize_err "dmy" " [ $REAL_LINE ] <-> [ $ORG_PARAM ]" 
	            ## 読み込んだ行がSMX区切り行であるかの判別をする->フラグを立てる
	            #if [ "$REAL_LINE" = "$DELIMLINE" ] ; then
	            #  if [ $ADDED_FLAG -eq 0 ] ; then
	            #    ADDED_FLAG=1                                # フラグが立っていない場合->フラグを立てる
	            #    continue
	            #  elif [ $ADDED_FLAG -eq 1 ] ; then
	            #    ADDED_FLAG=0                                # フラグが立っている場合->フラグを下ろす
	            #    continue
	            #  fi
	            #fi
	###old comment###            # 読み込んだ行を.changeファイルに書き込む（※SMXインストーラ記述分は除外する）
	            # 読み込んだ行が<ORG>の値であるかを判別し、一致した箇所に追記文を挿入する
	            # <ORG>の値がnullである場合は最後に追記する
	            if [ $ADDED_FLAG -eq 0 ] ; then
	              # <ORG>がnull以外の場合 -> <ORG>の上に挿入する
	              if [ $LASTEST_FLAG -eq 0 -a "$REAL_LINE" = "$ORG_LINE" ] ; then
	                # 一致する場合 -> 挿入処理を行う
	                if [ -s $TMP_FILE ] ; then
	                  # 追記する内容が存在する場合のみ追記処理をする
	                  # 追記文の前後にSMX区切り行を追記する
	                  $echo "$DELIMLINE" >> $FILENAME".change"   # 開始区切り行
	                  $cat $TMP_FILE >> $FILENAME".change"      # 追記文
	                  $echo "$DELIMLINE" >> $FILENAME".change"   # 終了区切り行
	                  $echo "$REAL_LINE" >> $FILENAME".change"   # <ORG>の行データを最後に忘れずに追記する
	                fi
	              else
	                # 一致しない場合 -> そのまま書き出す
	                $echo "$REAL_LINE" >> $FILENAME".change"
	              fi
	            fi
	          done
	          
	###old comment###          # .changeファイルに追記する
	          # 末尾追記の場合は最後に追記処理を行う
	          if [ $LASTEST_FLAG -eq 1 ] ; then
	            if [ -s $TMP_FILE ] ; then
	              # 追記する内容が存在する場合のみ追記処理をする
	              # 追記文の前後にSMX区切り行を追記する
	              $echo "$DELIMLINE" >> $FILENAME".change"       # 開始区切り行
	              $cat $TMP_FILE >> $FILENAME".change"          # 追記文
	              $echo "$DELIMLINE" >> $FILENAME".change"       # 終了区切り行
	            fi
	          fi
	          
	          # 実際の展開先ファイルにコピーする
	          $cp -f $FILENAME".change" $REALNAME > /dev/null 2>&1
	          if [ $? -ne 0 ] ; then
	            ERR_FLAG=1
	            arize_err "PRM004" "File copy. [$FILENAME.change > $REALNAME]"
	          fi
	          
	        else
	          # SMX区切り行が読み込まれていない場合はエラーとする
	          ERR_FLAG=1
	          arize_err "PRM006" "Delimline. [$DELIMLINE]"
	        fi
	      else
	        # REALNAMEが読み込まれていない場合はエラーとする
	        ERR_FLAG=1
	        arize_err "PRM005" "File. [$FILENAME]"
	      fi
	      
	      if [ -f $TMP_FILE ] ; then
	        $rm -f $TMP_FILE 2>&1
	      fi
	    fi
	    
	    # このファイル置換中にエラー発生した場合は、フラグを立てる(=>パラメータ設定に失敗)
	    if [ $ERR_FLAG -ne 0 ] ; then
	      FLAG=1
	    fi
	    
	    # 一ファイルの置換が終了したことを出力する
	    echo_sp "."
	    write_log "Added file. [$FILENAME]"
	    
	    init
	    continue
	  fi
	  
	  # 非タグ行 の処理   ########################################
	  # <TEXT>〜</TEXT>の間の非タグ行は、                     ####
	  # 追記文候補宣言である                                  ####
	  # 追記文は一時ファイルに蓄積する                        ####
	  # ※この中の値変換はできない（制限事項）                ####
	  if [ $CMT_FLAG -eq 1 ] ; then
	#    $echo "$LINE" | $grep ^"#" > /dev/null 2>&1
	#    if [ $? -eq 0 ] ; then
	#      # 先頭がコメントアウト(#)の場合は先頭の#を一時除去してevalする
	#      # 最後に流し込む段階で#を追加する
	#      TMP_EVAL_LINE=`$echo "$LINE" | $sed -e s/'#'/''/`
	#      TMP_AFTER_EVAL_LINE="#"`eval $echo "$TMP_EVAL_LINE"`
	#      $echo "$TMP_AFTER_EVAL_LINE" >> $TMP_FILE 2>&1
	#    else
	       # 変数名を取得する
	       TMP_PARAM=`$echo "$LINE" | $sed -e s/'\`'//g -e s/=.*/=/g`
	       ## 値がREALFILEに既存の場合は無視する
	       #already_patch $REALNAME $TMP_PARAM
	       #if [ $? -ne 0 ] ; then
	       #  write_log "This value has already applied. [$TMP_PARAM]"
	       #  continue;
	       #fi
	       # 追記する行にコマンドが存在する場合、コマンド実行した結果(CMD_STR)に入れ替える
	       # コマンド内容抽出  コマンドが存在しない場合は結果=""
	       CMD_STR=`$echo "$LINE" | $grep '\`' | $sed -e s/'\`'//g -e s/.*=//g`
	       if [ "$CMD_STR" != "" ] ; then
	         # コマンド実行結果を"変数名="の後ろに付ける
	         $echo "$TMP_PARAM"`eval \`$echo "$CMD_STR"\`` >> $TMP_FILE 2>&1
	       else
	         # コマンド実行する必要ない場合はそのまま一行を使用
	         $echo "$LINE" >> $TMP_FILE 2>&1
	       fi
	#      $echo "$LINE" >> $TMP_FILE 2>&1
	#    fi
	  fi
	  
	done
	fi
done


IFS=$TMP_IFS


# 結果出力
if [ $FLAG -eq 0 ] ; then
  $echo "完了"
  $echo ""
  msg_dialog  "パラメータ設定は正常に行われました。" \
              "処理を継続します。"
  write_log "パラメータ設定は正常に行われました。"
  WAIT_ENTER
else
  $echo "エラー発生！"
  $echo ""
  msg_err "パラメータ設定に失敗しました。" \
          "処理を中断します。"
  arize_err "dmy" "パラメータ設定に失敗しました。"
fi

exit $FLAG
