#!/bin/sh
# --- tripconv.com ------- convert TRIP db from one character set to another

#     Name       :   tripconv    (Unix script)
#     Author     :   Bo Johansson
#     Created    :   2011-11-11
#     Updated    :   2012-06-11

L01=" Copyright  :   Smaser AG"
L02=" Purpose    :   Converts a TRIP database from one character set to another"
L03=" Parameters :"
L04="            1 - Database                  (Mandatory, lists param:s if empty)"
L05="            2 - Character Set IN          (Mandatory)"
L06="            3 - Character Set OUT         (Mandatory)"
L07="            4 - Keep Record Numbers (Y/N) (Mandatory)"
L08="            5 - Conversion Mode (A/F/C/L) (Mandatory)"
L09="                A=All; F=First; C=Continue; L=List(no conv.)"
L10="            6 - First record to load (def 0; use only if Mode=F/C)"
L11="            7 - Last record to load  (def 0; use only if Mode=F/C)"
L12="            8 - Index db after loading (Y/N); default: Y"
L13="            9 - Remove db files (BAF/BIF/VIF) (Y/N); default: N (Rename)"
L14="           10 - File Name and Path for Log file,"
L15="                     default: tripconv-database-date.log"
L16="           11 - File Name and Path for TFORM file,"
L17="                     default: tripconv-database-date.tfo"
L18="           12 - File Name and Path for db definition file,"
L19="                     default: tripconv-database-date.def"
L20="           13 - File Name and Path for db base info,"
L21="                     default: tripconv-database-date.bas"
L22="           14 - File Name and Path for Original BAF file"
L23=" The file tripconv.txt contains help texts and examples"

CHOST=`uname`
if [ "x$CHOST" = "xLinux" ]; then
  MACH=`uname -m`
  if [ "x$MACH" != "xx86_64" ]; then
    alias echo='echo -e'
  fi
fi

DBN=$1
if [ "x$1" = "x" ]; then
  echo "Database to convert? \c"
  read DBN
fi
if [ "x$DBN" = "x" ]; then
  echo "$L01\n$L02\n$L03\n$L04\n$L05\n$L06\n$L07\n$L08\n$L09\n$L10\n$L11\n$L12\n$L13\n$L14\n$L15\n$L16\n$L17\n$L18\n$L19\n$L20\n$L21\n$L22\n$L23"
  echo "***** Parameter 1 (Database) missing"
  exit 1
else
  DBN=`echo $DBN | tr "[:lower:]" "[:upper:]"`
fi

CDT=`date '+%Y-%m-%d-%H-%M-%S'`
GFN="tripconv-$DBN-$CDT"
if [ -d /tmp ]; then
  TFI=/tmp/$GFN
else
  TFI=$GFN
fi
touch $TFI.tmp > /dev/null 2>&1
if ([ ! -f $TFI.tmp ] || [ ! -w $TFI.tmp ]); then
  echo "ERROR ***** Can't create and/or write to tmp file ($TFI)"
  exit 1
fi

IAM="N"
if [ "x$1" = "x" ]; then
  IAM="Y"
  echo ""
  echo "***** Interactive input mode"
fi

echo ""
echo "***** Current database = $DBN"

if [ -f /usr/bin/dirname ] ; then
	dirname=/usr/bin/dirname
else
	dirname=dirname
fi

if [ -f /usr/bin/awk ] ; then
	awk=/usr/bin/awk
else
	awk=awk
fi

echo $0 | grep "\/" > /dev/null
if [ $? -eq 0 ]; then
  queryrcs=`$dirname $0`/queryrcs
else
  queryrcs=queryrcs
fi

TDBS_EXE=`$queryrcs TDBS_EXE | $awk -F\" '{print $2}'`
echo ""
echo "TDBS_EXE = $TDBS_EXE"

echo ""
echo "Please specify the password for TRIP user SYSTEM ? \c"
stty -echo
read SYSPW
stty echo

echo ""
echo "***** Checking TRIP version and the existence of db $DBN"
echo "Run \$TDBS_EXE/trip -t tty -l eng -nm"
echo " Base $DBN"
echo " Stop"
echo "Base $DBN\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng | tee $TFI.tmp
grep "TRIP version" $TFI.tmp > /dev/null
if [ $? -eq 0 ]; then
  TVX=`grep "TRIP version" $TFI.tmp | cut -d' ' -f3`
  echo ""
  echo "***** Running TRIP version $TVX"
  TVY=`echo $TVX | cut -d'.' -f1`
  if [ "x$TVY" != "x" ]; then
    TVV=$TVY
    if [ $TVV -lt 6 ]; then
      echo ""
      echo "ERROR ***** TRIP version must be v6 or later"
      rm -f $TFI.tmp
      exit 1
    fi
  fi
else
  echo "ERROR ***** Can't start TRIP/find TRIP version"
  exit 1
fi
grep "Database $DBN not found" $TFI.tmp > /dev/null
if [ $? -eq 0 ]; then
  echo ""
  echo "ERROR ***** Database $DBN not found"
  rm -f $TFI.tmp
  exit 1
fi
rm -f $TFI.tmp
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 1 (Database) processed OK"
fi

echo ""
echo "***** Available Character Sets: CHI, GBK, LA1, LA2, LA3, UTF"
echo ""

SCS=$2
if ([ "x$2" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "Source Character Set (IN) ? \c"
  read SCS
fi
if [ "x$SCS" = "x" ]; then
  echo "ERROR ***** Parameter 2 (Character Set IN) missing"
  exit 1
else
  P2=`echo $SCS | tr "[:lower:]" "[:upper:]"`
  CSI=""
  CSI=`echo $P2 | awk '{ STR=$0; CP=index("CHI GBK LA1 LA2 LA3 MUL UTF",STR); if (CP > 0) { print STR } }'`
  if [ "x$CSI" = "x" ]; then
    echo "ERROR ***** Illegal Character Set IN ($SCS)"
    exit 1
  fi
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 2 (Char Set IN) processed OK"
fi

TCS=$3
if ([ "x$3" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "Target Character Set (OUT)? \c"
  read TCS
fi
if [ "x$TCS" = "x" ]; then
  echo "ERROR ***** Parameter 3 (Character Set OUT) missing"
  exit 1
else
  P3=`echo $TCS | tr "[:lower:]" "[:upper:]"`
  CSO=""
  CSO=`echo $P3 | awk '{ STR=$0; CP=index("CHI GBK LA1 LA2 LA3 MUL UTF",STR); if (CP > 0) { print STR } }'`
  if [ "x$CSO" = "x" ]; then
    echo "ERROR ***** Illegal Character Set OUT ($TCS)"
    exit 1
  fi
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 3 (Char Set OUT) processed OK"
fi

if [ "x$CSI" = "x$CSO" ]; then
  echo "ERROR ***** Character Set IN (p. 2) and OUT (p. 3) are the same"
  exit 1
fi

KRN=$4
if ([ "x$4" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "Keep Record Numbers (Y/N) ? \c"
  read KRN
fi
if [ "x$KRN" = "x" ]; then
  echo "ERROR ***** Parameter 4 (Keep Record Numbers) missing"
  exit 1
else
  KRN=`echo $KRN | tr "[:lower:]" "[:upper:]"`
fi
if ([ "x$KRN" != "xY" ] && [ "x$KRN" != "xN" ]); then
  echo "ERROR ***** Parameter 4 (Keep Record Numbers) must be Y or N"
  exit 1
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 4 (Keep Record Numbers) processed OK"
fi

CVM=$5
if ([ "x$5" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "Conversion Mode (A/F/C/L) ? \c"
  read CVM
fi
if [ "x$CVM" = "x" ]; then
  echo "ERROR ***** Parameter 5 (Conversion Mode) missing"
  exit 1
else
  CVM=`echo $CVM | tr "[:lower:]" "[:upper:]"`
  if ([ "x$CVM" != "xA" ] && [ "x$CVM" != "xF" ] && [ "x$CVM" != "xC" ] && [ "x$CVM" != "xL" ]); then
    echo "ERROR ***** Parameter 5 (Conversion Mode) must be A, F, C or L"
    exit 1
  fi
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 5 (Conversion Mode) processed OK"
fi

FRL=0
LRL=0
GHR="N"
if ([ "x$CVM" != "xL" ]); then
  if ([ "x$CVM" != "xA" ]); then
    FRL=$6
    if ([ "x$6" = "x" ] && [ "x$IAM" = "xY" ]); then
      echo "First Record to Load? \c"
      read FRL
    fi
    if [ "x$FRL" = "x" ]; then
      FRL=0
    fi
    if [ $FRL -le 0 ]; then
      echo "ERROR ***** First Record to Load must be > 0"
      exit 1
    fi
    LRL=$7
    if ([ "x$7" = "x" ] && [ "x$IAM" = "xY" ]); then
      echo "***** When converting last part, answer with Return only"
      echo "Last Record to Load? \c"
      read LRL
    fi
    if [ "x$LRL" = "x" ]; then
      LRL=0
    fi
    if [ $LRL -le $FRL ]; then
      if [ $LRL -gt 0 ]; then
        echo "ERROR ***** Last Record to Load must be > First Record to Load"
        exit 1
      fi
    fi
  fi
  GHR="Y"
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 6 and 7 (First and Last Record to Load ) processed OK"
fi

NDX=$8
if ([ "x$8" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "Index database after Loading (Y/N; def. Y) ? \c"
  read NDX
fi
if [ "x$NDX" = "x" ]; then
  if [ "x$CVM" != "xA" ]; then
    NDX="L"
  else
    NDX="Y"
  fi
else
  NDX=`echo $NDX | tr "[:lower:]" "[:upper:]"`
  if ([ "x$NDX" != "xY" ] && [ "x$NDX" != "xN" ] && [ "x$NDX" != "xL" ]); then
    echo "ERROR ***** Parameter 8 (Index db after load) must be Y or N"
    exit 1
  fi
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 8 (Index db after load) processed OK"
fi

RDF=$9
if ([ "x$9" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "Remove (delete) database files (Y/N; def. N = Rename) ? \c"
  read RDF
fi
if [ "x$RDF" = "x" ]; then
  RDF="N"
else
  RDF=`echo $RDF | tr "[:lower:]" "[:upper:]"`
  if ([ "x$RDF" != "xY" ] && [ "x$RDF" != "xN" ]); then
    echo "ERROR ***** Parameter 9 (Remove db files) must be Y or N"
    exit 1
  fi
fi
if ([ "x$RDF" = "xY" ] && [ "x$CVM" != "xA" ] && [ "x$CVM" != "xL" ]); then
  echo "ERROR ***** Db files can't be removed when conversion is done in parts"
  exit 1
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 9 (Remove db files) processed OK"
fi

# After the shift, param. 10-14 are referenced as param. 5-9
if [ "x$IAM" = "xN" ]; then
  shift 5
fi

LFN=$5
if ([ "x$5" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "File Name and Path for Log file (def. gen.) ? \c"
  read LFN
fi
if [ "x$LFN" = "x" ]; then
  LFN="$GFN.log"
else
  if [ -d $LFN ]; then
    LFN="$LFN/$GFN.log"
  fi
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 10 (File Name and Path for Log file) processed OK"
fi

TFN=$6
if ([ "x$6" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "File Name and Path for TFORM file (def. gen.) ? \c"
  read TFN
fi
if [ "x$TFN" = "x" ]; then
  TFN="$GFN.tfo"
else
  if [ -d $TFN ]; then
    TFN="$TFN/$GFN.tfo"
  fi
fi
UKT="N"
if [ -f $TFN ]; then
  UKT="Y"
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 11 (File Name and Path for TFORM file) processed OK"
fi

DFN=$7
if ([ "x$7" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "File Name and Path for db definition file (def. gen.) ? \c"
  read DFN
fi
if [ "x$DFN" = "x" ]; then
  DFN="$GFN.def"
else
  if [ -d $DFN ]; then
    DFN="$DFN/$GFN.def"
  fi
fi
UKD="N"
if [ -f $DFN ]; then
  UKD="Y"
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 12 (File Name and Path for db definition file) processed OK"
fi

BFN=$8
if ([ "x$8" = "x" ] && [ "x$IAM" = "xY" ]); then
  echo "File Name and Path for db base info file (def. gen.) ? \c"
  read BFN
fi
if [ "x$BFN" = "x" ]; then
  BFN="$GFN.bas"
else
  if [ -d $BFN ]; then
    BFN="$BFN/$GFN.bas"
  fi
fi
UKB="N"
if [ -f $BFN ]; then
  UKB="Y"
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 13 (File Name and Path for db base info file) processed OK"
fi

PAF=$9
if [ "x$CVM" = "xC" ]; then
  if ([ "x$9" = "x" ] && [ "x$IAM" = "xY" ]); then
    echo "File Name and Path for db original BAF file ? \c"
    read PAF
  fi
  if [ "x$PAF" = "x" ]; then
    echo "ERROR ***** Name of db original BAF file missing"
    exit 1
  fi
fi
if [ "x$IAM" = "xN" ]; then
  echo "***** Parameter 14 (File Name and Path for db original BAF file) processed OK"
fi

# Set up conversion log file

LOGFILE=$LFN
touch $LOGFILE > /dev/null 2>&1
if ([ ! -f $LOGFILE ] || [ ! -w $LOGFILE ]); then
  echo "ERROR ***** Can't create and/or write to log file ($LOGFILE)"
  exit 1
fi
echo ""
echo "***** Conversion log file is:"
echo "      $LOGFILE"
echo "" > $LOGFILE
echo "************* TRIP db conversion from $CSI to $CSO *************" >> $LOGFILE
echo "" | tee -a $LOGFILE
echo "***** Current date and time: $CDT (used in generated file names)" | tee -a $LOGFILE

echo "" >> $LOGFILE
echo "***** Running TRIP version $TVX" >> $LOGFILE

echo "" >> $LOGFILE
echo "***** TDBS_EXE = $TDBS_EXE" >> $LOGFILE

if [ "x$CVM" != "xC" ]; then
  echo ""
  echo "***** Logging Host, Processor and OS Info"
  echo "" | tee -a $LOGFILE
  HST=`uname -a`
  echo "***** Kernel, Host, Processor and OS:" >> $LOGFILE
  echo " $HST" >> $LOGFILE
  file $TDBS_EXE/trip | cut -d: -f1 | sed "s;/bin/trip;/bin/trip:;" >> $LOGFILE
  file $TDBS_EXE/trip | cut -d: -f2 | tr -s [:blank:] ' ' >> $LOGFILE
  echo "" >> $LOGFILE

  echo "" >> $LOGFILE
  echo "***** Content of TRIP config file:" >> $LOGFILE
  $TDBS_EXE/queryrcs -p >> $LOGFILE
fi

echo "***** Input parameters (1-14)  :" | tee -a $LOGFILE
echo "***** P01: Database to convert  : $DBN" | tee -a $LOGFILE
echo "***** P02: Character Set IN     : $CSI" | tee -a $LOGFILE
echo "***** P03: Character Set OUT    : $CSO" | tee -a $LOGFILE
echo "***** P04: Keep Record Numbers  : $KRN" | tee -a $LOGFILE
echo "***** P05: Conversion Mode      : $CVM" | tee -a $LOGFILE
echo "***** P06: First record to load : $FRL" | tee -a $LOGFILE
echo "***** P07: Last record to load  : $LRL" | tee -a $LOGFILE
echo "***** P08: Index db after load  : $NDX" | tee -a $LOGFILE
echo "***** P09: Remove db files      : $RDF" | tee -a $LOGFILE
echo "***** P10: Log File Name        : $LFN" | tee -a $LOGFILE
echo "***** P11: Tfo File Name        : $TFN" | tee -a $LOGFILE
echo "*****    : Use Kept Tfo file    : $UKT" | tee -a $LOGFILE
echo "***** P12: Def File Name        : $DFN" | tee -a $LOGFILE
echo "*****    : Use Kept Def file    : $UKD" | tee -a $LOGFILE
echo "***** P13: Bas File Name        : $BFN" | tee -a $LOGFILE
echo "*****    : Use Kept Bas file    : $UKB" | tee -a $LOGFILE
echo "***** P14: Original BAF file    : $PAF" | tee -a $LOGFILE
echo "***** End of Input parameters" | tee -a $LOGFILE

echo "" | tee -a $LOGFILE
if [ "x$UKB" = "xY" ]; then
  echo "***** Using kept status info file ($BFN) for db $DBN" | tee -a $LOGFILE
  touch $TFI.tmp
else
  echo "***** Printing Status info for db $DBN to get BAF, BIF and VIF files" | tee -a $LOGFILE
  echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
  echo " Print Wait Base R=$DBN File=$BFN" | tee -a $LOGFILE
  echo " Stop" | tee -a $LOGFILE
  echo "Print Wait Base R=$DBN File=$BFN\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | tee $TFI.tmp
fi
rm -f $TFI.tmp
if [ ! -f $BFN ]; then
  echo "ERROR ***** File $BFN not found" | tee -a $LOGFILE
  exit 1
fi

DBF=""
echo "" | tee -a $LOGFILE
DBF=`cat $BFN | awk '(substr($1,1,6) == "Files:") { print $2 }'`
if [ "x$DBF" = "x" ]; then
  echo "ERROR ***** Database files not found (1)" | tee -a $LOGFILE
  exit 1
else
  DBP=""
  DBP=`echo $DBF | awk '{ DOT=index($0,".BAF"); STR=substr($0,1,DOT-1); print STR }'`
  if [ "x$DBP" = "x" ]; then
    echo "ERROR ***** Database files not found (2)" | tee -a $LOGFILE
    exit 1
  fi
  LNV=""
  LNV=`echo $DBF | awk '{ COL=index($0,":"); if (COL > 0) { STR=substr($0,1,COL-1); print STR } }'`
  if [ "x$LNV" != "x" ]; then
    LNV=`echo $LNV | tr "$" "_"`
    QRC=`$TDBS_EXE/queryrcs $LNV`
    QRC=`echo $QRC | awk '{ SL=length($0); STR=substr($0,2,SL-2); print STR }'`
    if [ "x$QRC" != "x<nil>" ]; then
      echo "***** Environment variable $LNV = $QRC" | tee -a $LOGFILE
      DBP="$QRC/$DBN"
    else
      echo "ERROR ***** Environment variable ($QRC) without value" | tee -a $LOGFILE
      exit 1
    fi
  fi
  BAF="$DBP.BAF"
  echo "***** BAF File: $BAF" | tee -a $LOGFILE
  if [ ! -f $BAF ]; then
    echo "ERROR ***** BAF File not found" | tee -a $LOGFILE
    exit 1
  fi
  BIF="$DBP.BIF"
  echo "***** BIF File: $BIF" | tee -a $LOGFILE
  if [ ! -f $BIF ]; then
    echo "***** BIF File not found" | tee -a $LOGFILE
  fi
  VIF="$DBP.VIF"
  echo "***** VIF File: $VIF" | tee -a $LOGFILE
  if [ ! -f $VIF ]; then
    echo "***** VIF File not found" | tee -a $LOGFILE
  fi
fi

echo "" | tee -a $LOGFILE
if [ "x$UKD" = "xY" ]; then
  echo "***** Using kept db definition file ($DFN) for db $DBN" | tee -a $LOGFILE
  touch $TFI.tmp
else
  echo "***** Printing definition file for db $DBN" | tee -a $LOGFILE
  echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
  echo " Export Base=$DBN File=$DFN" | tee -a $LOGFILE
  echo " Stop" | tee -a $LOGFILE
  echo "Export Base=$DBN File=$DFN\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | tee $TFI.tmp
fi
rm -f $TFI.tmp
if [ ! -f $DFN ]; then
  echo "ERROR ***** File $DFN not found" | tee -a $LOGFILE
  exit 1
fi

DEF=""
DEF=`cat $DFN | awk '(substr($0,1,6) == "CHSET=") { STR=substr($0,7,3); print STR }'`
if [ "x$DEF" = "x" ]; then
  echo "***** Db definition file doesn't contain CHSET attribute" | tee -a $LOGFILE
else
  echo "***** CHSET attribute in db definition file is CHSET=$DEF" | tee -a $LOGFILE
  if [ "x$DEF" = "x$CSO" ]; then
    if [ "x$CVM" != "xC" ]; then
      echo "ERROR ***** Db $DBN already uses $CSO Character Set" | tee -a $LOGFILE
      exit 1
    fi
  else
    if [ "x$DEF" != "x$CSI" ]; then
      echo "ERROR ***** CHSET attribute in db definition file is NOT CHSET=$CSI" | tee -a $LOGFILE
      exit 1
    fi
  fi
fi

echo "***** TDBS_CHARS = `$TDBS_EXE/queryrcs TDBS_CHARS`" | tee -a $LOGFILE

if [ "x$CVM" = "xL" ]; then
  echo "***** Exit script due to Parameter 5 (Conversion Mode) value L" | tee -a $LOGFILE
  exit 0
fi

if [ "x$CVM" = "xC" ]; then
  echo "***** Rename $DBP.BAF to $GFN.BAF"
  mv -f $DBP.BAF $GFN.BAF
  if [ $? -gt 0 ]; then
    echo "Cannot rename BAF file. Aborting..."
    exit 1
  fi
  echo "***** Rename $PAF to $DBP.BAF"
  mv -f $PAF $DBP.BAF
  if [ $? -gt 0 ]; then
    echo "Cannot rename BAF file. Aborting..."
    exit 1
  fi
fi

if ([ "x$KRN" = "xY" ] || [ "x$GHR" = "xY" ]); then
  echo "" | tee -a $LOGFILE
  echo "***** Getting highest Record Number in db $DBN" | tee -a $LOGFILE
  echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
  echo " Base $DBN" | tee -a $LOGFILE
  echo " Find R=From 2147483646" | tee -a $LOGFILE
  echo " Stop" | tee -a $LOGFILE
  HRN=`echo "Base $DBN\nFind R=From 2147483646\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | grep Highest | cut -d' ' -f8 | cut -d. -f1`
  if [ "x$HRN" = "x" ]; then
     echo "ERROR ***** Unable to get highest Record Number in db $DBN"  | tee -a $LOGFILE
     exit 1
  fi
  if ([ "x$GHR" = "xY" ] && [ "x$LRL" = "0x" ]); then
    LRL=$HRN
  fi
  echo "***** Highest Record Number in db $DBN is $HRN" | tee -a $LOGFILE
fi
if [ $FRL -gt $HRN ]; then
   echo "ERROR ***** First record to load ($FRL) > Highest Record Number in db $DBN"  | tee -a $LOGFILE
   exit 1
fi

echo "" | tee -a $LOGFILE
if [ "x$UKT" = "xY" ]; then
  echo "***** Using kept TFORM file ($TFN) for db $DBN" | tee -a $LOGFILE
  touch $TFI.tmp
else
  if [ "x$KRN" = "xY" ]; then
    echo "***** Printing db $DBN to TFORM file; Record Numbers kept" | tee -a $LOGFILE
    if [ $FRL -eq 0 ]; then
      echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
      echo " Base $DBN" | tee -a $LOGFILE
      echo " Print Wait tfo=$TFN R" | tee -a $LOGFILE
      echo " Stop" | tee -a $LOGFILE
      echo "Base $DBN\nPrint Wait tfo=$TFN R\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | tee $TFI.tmp
    else
      echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
      echo " Base $DBN" | tee -a $LOGFILE
      echo " Find R=$FRL to $LRL" | tee -a $LOGFILE
      echo " Print Wait tfo=$TFN R" | tee -a $LOGFILE
      echo " Stop" | tee -a $LOGFILE
      echo "Base $DBN\nFind R=$FRL to $LRL\nPrint Wait tfo=$TFN R\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | tee $TFI.tmp
    fi
  else
    echo "***** Printing db $DBN to TFORM file; Record Numbers not kept" | tee -a $LOGFILE
    if [ $FRL -eq 0 ]; then
      echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
      echo " Base $DBN" | tee -a $LOGFILE
      echo " Print Wait tfo=$TFN" | tee -a $LOGFILE
      echo " Stop" | tee -a $LOGFILE
      echo "Base $DBN\nPrint Wait tfo=$TFN\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | tee $TFI.tmp
    else
      echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
      echo " Base $DBN" | tee -a $LOGFILE
      echo " Find R=$FRL to $LRL" | tee -a $LOGFILE
      echo " Print Wait tfo=$TFN" | tee -a $LOGFILE
      echo " Stop" | tee -a $LOGFILE
      echo "Base $DBN\nFind R=$FRL to $LRL\nPrint Wait tfo=$TFN\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm | tee $TFI.tmp
    fi
  fi
fi
rm -f $TFI.tmp
if [ ! -f $TFN ]; then
  echo "ERROR ***** File $TFN not found" | tee -a $LOGFILE
  exit 1
fi

if [ "x$CVM" = "xC" ]; then
  echo "***** Rename $DBP.BAF to $PAF"
  mv -f $DBP.BAF $PAF
  echo "***** Rename $GFN.BAF to $DBP.BAF"
  mv -f $GFN.BAF $DBP.BAF
fi

CSM=""
CSM=`head -1 $TFN | awk '(substr($0,1,1) == "C") { STR=substr($0,2,3); print STR }'`
if [ "x$CSM" = "x" ]; then
  echo "***** No Character Set Marker on Line 1 in TFORM file" | tee -a $LOGFILE
else
  echo "***** Character Set Marker in TFORM file is $CSM" | tee -a $LOGFILE
fi

if [ "x$CVM" != "xC" ]; then
if [ "x$DEF" != "x$CSO" ]; then
  echo "" | tee -a $LOGFILE
  echo "***** Updating $DBN.def from $DFN" | tee -a $LOGFILE
  echo "      setting CHSET attribute to CHSET=$CSO" | tee -a $LOGFILE
  if [ "x$DEF" != "x" ]; then
    cat $DFN | awk '(substr($0,1,6) != "CHSET=") { print }; (substr($0,1,6) == "CHSET=") { printf "CHSET=%s\n",CHS }' CHS=$CSO > $DBN.def
  else
    cat $DFN | awk '($0 != "(") { print }; ($0 == "(") { printf "CHSET=%s\n",CHS; print $0 }' CHS=$CSO > $DBN.def
  fi
fi

echo "" | tee -a $LOGFILE
if ([ "x$RDF" = "xN" ] || [ "x$CVM" != "xA" ]); then
  echo "***** Renaming $DBN db files (BAF, BIF, VIF)" | tee -a $LOGFILE
  if [ -f $BAF ]; then
    echo "mv -f $BAF $DBP-$CDT.BAF" | tee -a $LOGFILE
    mv -f $BAF $DBP-$CDT.BAF
    if [ $? -gt 0 ]; then
      echo "Cannot rename BAF file. Aborting..."
      exit 1
    fi
  fi
  if [ -f $BIF ]; then
    echo "mv -f $BIF $DBP-$CDT.BIF" | tee -a $LOGFILE
    mv -f $BIF $DBP-$CDT.BIF
  fi
  if [ -f $VIF ]; then
    echo "mv -f $VIF $DBP-$CDT.VIF" | tee -a $LOGFILE
    mv -f $VIF $DBP-$CDT.VIF
  fi
  if [ "x$CVM" = "xF" ]; then
    PAF="$DBP-$CDT.BAF"
  fi
else
  echo "***** Removing $DBN db files (BAF, BIF, VIF)" | tee -a $LOGFILE
  if [ -f $BAF ]; then
    echo "rm -f $BAF" | tee -a $LOGFILE
    rm -f $BAF
    if [ $? -gt 0 ]; then
      echo "Cannot delete BAF file. Aborting..."
      exit 1
    fi
  fi
  if [ -f $BIF ]; then
    echo "rm -f $BIF" | tee -a $LOGFILE
    rm -f $BIF
  fi
  if [ -f $VIF ]; then
    echo "rm -f $VIF" | tee -a $LOGFILE
    rm -f $VIF
  fi
fi
fi

if ([ "x$DEF" != "x$CSO" ] && [ "x$CVM" != "xC" ]); then
  echo "" | tee -a $LOGFILE
  echo "***** Importing (updating) db definition file from $DBN.def" | tee -a $LOGFILE
  echo "Run \$TDBS_EXE/trip -t tty -l eng -nm" | tee -a $LOGFILE
  echo " Import Update Base=$DBN File=$DBN.def" | tee -a $LOGFILE
  echo " Stop" | tee -a $LOGFILE
  echo "Import Update Base=$DBN File=$DBN.def\nStop" | $TDBS_EXE/trip -t tty -u system -p $SYSPW -l eng -nm
fi

echo "" | tee -a $LOGFILE
echo "***** Loading db $DBN from $TFN" | tee -a $LOGFILE
AST="Y"
if [ "x$KRN" = "xN" ]; then
  AST="N"
fi
if ([ "x$KRN" = "xY" ] && [ "x$CVM" = "xC" ]); then
  AST="N"
fi
if [ $TVV -lt 7 ]; then
  echo "Run \$TDBS_EXE/load" | tee -a $LOGFILE
  if [ "x$AST" = "xY" ]; then
    echo " *$DBN" | tee -a $LOGFILE
  else
    echo " $DBN" | tee -a $LOGFILE
  fi
  echo " Y" | tee -a $LOGFILE
  echo " N" | tee -a $LOGFILE
  echo " $TFN" | tee -a $LOGFILE
  if [ "x$AST" = "xY" ]; then
    echo "*$DBN\n$TFN\nY\nN\n$HRN\n" | $TDBS_EXE/baffit | tee -a $LOGFILE
    bstat=$?
    if [ $bstat -ne 1 ]; then
      if [ $bstat -eq 3 ]; then
        echo "ERROR ***** Error while loading database $DBN; some records not loaded" | tee -a $LOGFILE
        exit 1
      else
        echo "ERROR ***** Error while loading database $DBN; no records loaded" | tee -a $LOGFILE
        exit 1
      fi
    fi
  else
    $TDBS_EXE/load $DBN Y N $TFN | tee -a $LOGFILE
    lstat=$?
    if [ $lstat -eq 1 ]; then
      echo "ERROR ***** Error while loading database $DBN; no records loaded" | tee -a $LOGFILE
      exit 1
    fi
  fi
else
  if [ "x$AST" = "xY" ]; then
    echo "Run \$TDBS_EXE/load -d $DBN -f $TFN -r $HRN --sentence --no-tstamp --partial-as-error" | tee -a $LOGFILE
    $TDBS_EXE/load -d $DBN -f $TFN -r $HRN --sentence --no-tstamp --partial-as-error| tee -a $LOGFILE
    bstat=$?
  else
    echo "Run \$TDBS_EXE/load -d $DBN -f $TFN --sentence --no-tstamp --partial-as-error" | tee -a $LOGFILE
    $TDBS_EXE/load -d $DBN -f $TFN --sentence --no-tstamp --partial-as-error | tee -a $LOGFILE
    bstat=$?
  fi
  if [ $bstat -gt 0 ]; then
    if [ $bstat -eq 3 ]; then
      echo "ERROR ***** Error while loading database $DBN; some records not loaded" | tee -a $LOGFILE
      exit 1
    else
      echo "ERROR ***** Error while loading database $DBN; no records loaded" | tee -a $LOGFILE
      exit 1
    fi
  fi
fi

if [ "x$NDX" = "xL" ]; then
  if [ $LRL -ge $HRN ]; then
    NDX="Y"
  fi
fi

echo "" | tee -a $LOGFILE
if [ "x$NDX" = "xY" ]; then
  echo "***** Indexing db $DBN" | tee -a $LOGFILE
  echo "Run \$TDBS_EXE/index $DBN" | tee -a $LOGFILE
  $TDBS_EXE/index $DBN | tee -a $LOGFILE
  istat=$?
  if [ $istat -eq 1 ]; then
    echo "ERROR ***** Error when indexing database $DBN" | tee -a $LOGFILE
    exit 1
  fi
else
  echo "***** Indexing of db $DBN turned off" | tee -a $LOGFILE
fi

echo "" | tee -a $LOGFILE
if [ "x$CVM" != "xA" ]; then
  if [ $LRL -lt $HRN ]; then
    INPFILE="$GFN.inp"
    DRL=`expr $LRL - $FRL + 1`
    FRL=`expr $LRL + 1`
    LRL=`expr $LRL + $DRL`
    if [ $LRL -gt $HRN ]; then
      LRL=`expr $HRN`
      if [ "x$NDX" = "xL" ]; then
        NDX="Y"
      fi
    else
      DIF=`expr $DRL / 2`
      DRL=`expr $HRN - $LRL`
      if [ $DRL -lt $DIF ]; then
        LRL=`expr $HRN`
        if [ "x$NDX" = "xL" ]; then
          NDX="Y"
        fi
      fi
    fi
    echo "$DBN" > $INPFILE
    echo "$CSI" >> $INPFILE
    echo "$CSO" >> $INPFILE
    echo "$KRN" >> $INPFILE
    echo "C" >> $INPFILE
    echo "$FRL" >> $INPFILE
    echo "$LRL" >> $INPFILE
    echo "$NDX" >> $INPFILE
    echo "$RDF" >> $INPFILE
    echo "" >> $INPFILE
    echo "" >> $INPFILE
    echo "$DFN" >> $INPFILE
    echo "$BFN" >> $INPFILE
    echo "$PAF" >> $INPFILE
    echo ""
    echo "File $INPFILE written;" | tee -a $LOGFILE
    echo "Convert next part with this command:" | tee -a $LOGFILE
    echo "cat $INPFILE | tripconv" | tee -a $LOGFILE
  else
    echo "LAST RECORD LOADED; END OF TRIPCONV" | tee -a $LOGFILE
  fi
else
  echo "LAST RECORD LOADED; END OF TRIPCONV" | tee -a $LOGFILE
fi
if [ -f $TFI.tmp ]; then
  rm -f $TFI.tmp
fi
echo "" | tee -a $LOGFILE
echo "***** End of TRIP db conversion script" | tee -a $LOGFILE
exit 0
