#!/bin/sh
# adduser script for use with shadow passwords and useradd command.
# by Hrvoje Dogan <hdogan@student.math.hr>, Dec 1995.
#
# Japanese enhancements by kojima <isle@st.rim.or.jp> Aug 1997
# Time-stamp: <2003-08-08 23:23:04 cyamauch>

backup_oldfiles() {
  DIR=$1
  shift
  while [ ! "x.$1" = "x." ] ; do
    FILE=${1##*/}
    if [ ! $FILE = "." -a ! $FILE = ".." ] ; then
      if [ -f $DIR/$FILE ] ; then
	if [ -f $DIR/$FILE.old ] ; then
	  backup_oldfiles $DIR $FILE.old
	  FILE=${1##*/}
	fi
	mv $DIR/$FILE $DIR/$FILE.old
      elif [ -d $DIR/$FILE ] ; then
	if [ -d $DIR/$FILE.org ] ; then
	  backup_oldfiles $DIR $FILE.org
	  FILE=${1##*/}
	fi
	mv $DIR/$FILE $DIR/$FILE.org
      fi
    fi
    shift
  done
}

copy_envfiles() {
  OWN=$1
  shift
  DIR=$1
  shift
  while [ ! "x.$1" = "x." ] ; do
    FILE=${1##*/}
    if [ ! $FILE = "." -a ! $FILE = ".." ] ; then
      if [ -f $1 ] ; then
        cp -dp $1 $DIR/.
        chown $OWN ${DIR}/${FILE}
      elif [ -d $1 ] ; then
        cp -dpR $1 $DIR/.
        chown -R $OWN ${DIR}/${FILE}
      fi
    fi
    shift
  done
}

s_match () { case $1 in $2) return 0; ;; *) return 1; ;; esac ; }

if [ "$1" != "" ] ; then
  if s_match "$1" "ja*" ; then
    ANS="Y"
  fi
else
  echo "Can you read Japanese chars on this term ? [y/N]"
  read ANS
fi

if [ "$ANS" = "Y" -o "$ANS" = "y" ]; then
   echo "Japanese mode"
   LNG="JAPANESE"
else
   echo "No Japanese mode"
 fi

if [ "$LNG" = "JAPANESE" ]; then

echo
echo -n "桼Υ̾ꤷƤ(8 ʸ) []: "

read LOGIN
if [ -z "$LOGIN" ]
then 
	echo "ǰʤ̾ꤻˤϿʤޤ󡣡";exit
fi

echo -n "$LOGIN Υ桼 ID ϡ [ưϿξ 1000 ˤʤޤ]: "
read ID
GUID="-u $ID"
if [ -z "$ID" ] 
then 
	GUID=""
fi

echo -n "$LOGIN °륰롼פϡ[users]: "
read GID
GGID="-g $GID"
if [ -z "$GID" ] 
then 
	GGID="-g users"
    GID="users"
fi

#  useradd ΥХ˿餷
# changed on 11/07
#
#echo
#echo -n "$LOGIN ¾Υ롼פˤ°ޤ[]: "
#read AGID
#GAGID="-G $AGID"
#if [ -z "$AGID" ] 
#then 
#	GAGID=""
#fi

echo -n "$LOGIN Υۡǥ쥯ȥϡ[/home/$LOGIN]: "
read HME

if [ -z "$HME" ]; then 
     HME="/home/$LOGIN"
fi
GHME="-d $HME"

echo -n "$LOGIN Ȥϡ [/bin/tcsh]: "
read SHL

if [ -z "$SHL" ]
  then 
	SHL="/bin/tcsh"
fi

GSHL="-s $SHL"

if [ -z "$SHL" ]
    then 
		GSHL="-s /bin/bash"
		SHL="/bin/bash"
fi

echo
echo "ɥޥ͡"
echo "1 : AfterStep()"
echo "2 : qvwm(Windows95 )"
echo "3 : twm(ץ)"
echo "4 : KDE Desktop(KDEɬ)"
echo -n "$LOGIN Ȥ WM ϡ [1]: "
read WM

if [ -z "$WM" ]; then
   WM=1
elif [ "$WM" -lt "1" ]; then
    WM=1
elif [ "$WM" -gt "4" ]; then
    WM=1
fi

echo
echo "kinput2 ܸ(CannaѻΤͭ)"
echo "1 : ޻"
echo "2 : "
echo -n "$LOGIN ϥ޻,ϤΤɤȤޤ [1]: "
read KINPUT2INPUT

if [ -z "$KINPUT2INPUT" ]; then
  KINPUT2INPUT=1
elif [ "$KINPUT2INPUT" -lt "1" ]; then
  KINPUT2INPUT=1
elif [ "$KINPUT2INPUT" -gt "2" ]; then
  KINPUT2INPUT=1
fi

echo
echo "KDE ե(Qtץꥱͭ)"
echo "1 : ꥢ̵(Ƥɽ)"
echo "2 : ꥢͭå(ɽ٥˥)"
echo "3 : ꥢͭߤ(񤭥ե)"
echo -n "$LOGIN Ȥ KDE եϡ [1]: "
read KDEFONTS

if [ -z "$KDEFONTS" ]; then
  KDEFONTS=1
elif [ "$KDEFONTS" -lt "1" ]; then
  KDEFONTS=1
elif [ "$KDEFONTS" -gt "3" ]; then
  KDEFONTS=1
fi

echo
echo -n "$LOGIN ΥȤͭ¤ϡ (MM/DD/YY) []: "
read EXP
GEXP="-e $EXP"
if [ -z "$EXP" ]
then GEXP=""
fi
echo
echo "ơºݤɬפʥȥޤǡϤǤǤ"
echo
echo New login name: $LOGIN
if [ -z "$GUID" ]; then 
  echo New UID: [Next available]
  else echo New UID: $UID
fi
if [ -z "$GGID" ]; then 
  echo Initial group: users
else 
  echo Initial group: $GID
fi

if [ -z "$GAGID" ]
then echo Additional groups: [none]
else echo Additional groups: $AGID
fi
if [ -z "$GHME" ]
then echo Home directory: /home/$LOGIN
else echo Home directory: $HME
fi
if [ -z "$GSHL" ]
then echo Shell: /bin/bash
else echo Shell: $SHL
fi
if [ -z "$GEXP" ]
then echo Expiry date: [no expiration]
else echo Expiry date: $EXP
fi

if [ -d /etc/pcmcia ]; then
  echo
  echo "Υ桼 Note PC ѤδĶȤޤ [Y/n]"
  read ANS
  if [ "$ANS" = "n" -o "$ANS" = "N" ]; then
     PCMCIA=no
  else
     PCMCIA=yes
  fi
fi

if [ -d $HME ]; then
   echo 
   echo "$HME ¸ߤޤ$HME/.tcshrc  $HME/.login "
   echo "Plamo ΥǥեȤ˽񤭴ޤޤ󤫡[y/N]"
   echo "Υե $HME/.tcshrc.old Τ褦˥Хååפ"
   echo "¸ޤ(.*.old ˤ̵ѤǾ񤭤ޤ;-)"
   read ANS
   if [ -z $ANS ]; then
      ANS="N"
   fi

   if [ "$ANS" != "Y" -a "$ANS" != "y" ]; then
      exit -1
   fi
fi

echo
echo "Ͽߤ Cntl-C 򲡤ƤΥǡǤ"
echo "Enter 򲡤ƤСȤޤ"
read FOO
echo
echo "Ⱥ"

SKELDIR=/etc/template
if [ -d $HME ]; then   # backup old files
  ORIGDIR=$SKELDIR/Desktop
  backup_oldfiles $HME $ORIGDIR/.*
  backup_oldfiles $HME $ORIGDIR/*
  backup_oldfiles $HME $SKELDIR/kde-aa/.*
fi

if [ "$PCMCIA" = "yes" ]; then
  /usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/notePC/.*
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/notePC/*
else
  /usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/Desktop/.*
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/Desktop/*
fi

if [ -d $HME ]; then
  chmod 711 $HME
  cd $HME
  if [ "$WM" -eq "1" ]; then
     ln -sf .xinitrc_step .xinitrc
  elif [ "$WM" -eq "2" ]; then
     ln -sf .xinitrc_qvwm .xinitrc
  elif [ "$WM" -eq "3" ]; then
     ln -sf .xinitrc_twm .xinitrc
  elif [ "$WM" -eq "4" ]; then
     ln -sf .xinitrc_kde .xinitrc
  else 
     ln -sf .xinitrc_step .xinitrc
  fi
  ln -sf .xinitrc .xsession
  chown ${LOGIN}:${GID} .xinitrc
  chown ${LOGIN}:${GID} .xsession

  if [ "$KINPUT2INPUT" -eq "2" ]; then
    if [ "$PCMCIA" = "yes" ]; then
      cat $SKELDIR/notePC/.canna | sed -e 's/;(setq canna-input-method "kana")/(setq canna-input-method "kana")/' | \
          sed -e 's/(setq canna-input-method "roma")/;(setq canna-input-method "roma")/' > .canna
      cat $SKELDIR/notePC/.Xdefaults | sed -e 's/!Emacs\*useXim/Emacs\*useXim/' > .Xdefaults
    else
      cat $SKELDIR/Desktop/.canna | sed -e 's/;(setq canna-input-method "kana")/(setq canna-input-method "kana")/' | \
          sed -e 's/(setq canna-input-method "roma")/;(setq canna-input-method "roma")/' > .canna
      cat $SKELDIR/Desktop/.Xdefaults | sed -e 's/!Emacs\*useXim/Emacs\*useXim/' > .Xdefaults
    fi
  fi

  if [ "$KDEFONTS" -eq "2" ]; then
    cp -R $SKELDIR/kde-aa/.qt $SKELDIR/kde-aa/.kde .
  elif [ "$KDEFONTS" -eq "3" ]; then
    cp -R $SKELDIR/kde-aa-mikachan/.qt $SKELDIR/kde-aa-mikachan/.kde .
  else
    cp -R $SKELDIR/kde-non-aa/.qt $SKELDIR/kde-non-aa/.kde .
  fi
  chown -R ${LOGIN}:${GID} .kde
  chown -R ${LOGIN}:${GID} .qt
fi

echo
/usr/bin/chfn $LOGIN
echo
/usr/bin/passwd $LOGIN
echo
if [ "$PCMCIA" = "yes" ]; then
  echo "$SKELDIR/notePC ʲγƼեۡǥ쥯ȥ˥ԡޤ"
else
  echo "$SKELDIR/Desktop ʲγƼեۡǥ쥯ȥ˥ԡޤ"
fi
echo "Ͽλޤ"
echo
echo "޺桼ǥ󥽡뤫󤷡startx Сܸ X Ķ"
echo "ѤǤޤ"
if [ "$DISPLAY" != "" ] ; then
  echo
  echo -n "[Enter򲡤Ƥ]"
  read FOO
fi

else

echo
echo -n "Login name for new user (8 characters or less) []: "
read LOGIN
if [ -z "$LOGIN" ]
then echo "Come on, man, you can't leave the login field empty...";exit
fi

echo -n "User id for $LOGIN [ defaults to next available]: "
read ID
GUID="-u $ID"
if [ -z "$ID" ] 
then GUID=""
fi

echo -n "Initial group for $LOGIN [users]: "
read GID
GGID="-g $GID"
if [ -z "$GID" ]
then GGID="-g users"
     GID="users"
fi

#  useradd ΥХ˿餷
# changed on 11/07
#
#echo -n "Additional groups for $LOGIN []: "
#echo
#read AGID
#GAGID="-G $AGID"
#if [ -z "$AGID" ]
#then GAGID=""
#fi

echo -n "${LOGIN}'s home directory [/home/$LOGIN]: "
read HME

if [ -z "$HME" ]; then 
     HME="/home/$LOGIN"
fi
GHME="-d $HME"

echo -n "${LOGIN}'s shell [/bin/tcsh]: "
read SHL

if [ -z "$SHL" ]
  then 
	SHL="/bin/tcsh"
fi

GSHL="-s $SHL"
if [ -z "$SHL" ]
then GSHL="-s /bin/bash"
     SHL="/bin/bash"
fi

echo
echo "Window Manager setting"
echo "1 : AfterStep(recommended)"
echo "2 : qvwm(Windows95 like)"
echo "3 : twm(most simple)"
echo "4 : KDE desktop(need KDE)"
echo -n "${LOGIN}'s WM ? [1]: "
read WM

if [ -z "$WM" ]; then
   WM=1
elif [ "$WM" -lt "1" ]; then
    WM=1
elif [ "$WM" -gt "4" ]; then
    WM=1
fi

echo
echo "Input method of kinput2(Canna only)"
echo "1 : Roma"
echo "2 : Kana(Japanese keyboard only)"
echo -n "Which is ${LOGIN}'s method, roma or kana ? [1]: "
read KINPUT2INPUT

if [ -z "$KINPUT2INPUT" ]; then
  KINPUT2INPUT=1
elif [ "$KINPUT2INPUT" -lt "1" ]; then
  KINPUT2INPUT=1
elif [ "$KINPUT2INPUT" -gt "2" ]; then
  KINPUT2INPUT=1
fi

echo
echo "KDE fonts setting"
echo "1 : Disable antialiasing(clear and lightweight)"
echo "2 : Enable antialiasing, gothic-based(beautiful; suitable for high-resolution)"
echo "3 : Enabel antialiasing, Mikachan"
echo -n "${LOGIN}'s fonts setting ? [1]: "

read KDEFONTS

if [ -z "$KDEFONTS" ]; then
  KDEFONTS=1
elif [ "$KDEFONTS" -lt "1" ]; then
  KDEFONTS=1
elif [ "$KDEFONTS" -gt "3" ]; then
  KDEFONTS=1
fi

echo
echo -n "${LOGIN}'s account expiry date (MM/DD/YY) []: "
read EXP
GEXP="-e $EXP"
if [ -z "$EXP" ]
then GEXP=""
fi
echo
echo "OK, I'm about to make a new account. Here's what you entered so far:"
echo
echo New login name: $LOGIN
if [ -z "$GUID" ] 
then echo New UID: [Next available]
else echo New UID: $UID
fi
if [ -z "$GGID" ]
then echo Initial group: users
else echo Initial group: $GID
fi
if [ -z "$GAGID" ]
then echo Additional groups: [none]
else echo Additional groups: $AGID
fi
if [ -z "$GHME" ]
then echo Home directory: /home/$LOGIN
else echo Home directory: $HME
fi
if [ -z "$GSHL" ]
then echo Shell: /bin/bash
else echo Shell: $SHL
fi
if [ -z "$GEXP" ]
then echo Expiry date: [no expiration]
else echo Expiry date: $EXP
fi

if [ -d /etc/pcmcia ]; then
  echo
  echo "Does this user uses Note PC environment setting? [Y/n]"
  read ANS
  if [ "$ANS" = "n" -o "$ANS" = "N" ]; then
     PCMCIA=no
  else
     PCMCIA=yes
  fi
fi

if [ -d $HME ]; then
   echo 
   echo "$HME exists. $HME/.tcshrc or $HME/.login will be"
   echo "overwritten by Plamo's default configuration files. OK?[y/N]"
   read ANS
   if [ -z $ANS ]; then
      ANS="N"
   fi

   if [ "$ANS" != "Y" -a "$ANS" != "y" ]; then
      exit -1
   fi
fi

echo
echo "This is it... if you want to bail out, hit Control-C.  Otherwise, press"
echo "ENTER to go ahead and make the account."
read FOO
echo
echo Making new account...

SKELDIR=/etc/template
if [ -d $HME ]; then   # backup old files
  ORIGDIR=$SKELDIR/Desktop
  backup_oldfiles $HME $ORIGDIR/.*
  backup_oldfiles $HME $ORIGDIR/*
  backup_oldfiles $HME $SKELDIR/kde-aa/.*
fi

if [ "$PCMCIA" = "yes" ]; then
  /usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/notePC/.*
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/notePC/*
else
  /usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/Desktop/.*
  copy_envfiles ${LOGIN}:${GID} $HME $SKELDIR/Desktop/*
fi

if [ -d $HME ]; then
  chmod 711 $HME
  cd $HME
  if [ "$WM" -eq "1" ]; then
     ln -sf .xinitrc_step .xinitrc
  elif [ "$WM" -eq "2" ]; then
     ln -sf .xinitrc_qvwm .xinitrc
  elif [ "$WM" -eq "3" ]; then
     ln -sf .xinitrc_twm .xinitrc
  elif [ "$WM" -eq "4" ]; then
     ln -sf .xinitrc_kde .xinitrc
  else 
     ln -sf .xinitrc_step .xinitrc
  fi
  ln -sf .xinitrc .xsession
  chown ${LOGIN}:${GID} .xinitrc
  chown ${LOGIN}:${GID} .xsession

  if [ "$KINPUT2INPUT" -eq "2" ]; then
    if [ "$PCMCIA" = "yes" ]; then
      cat $SKELDIR/notePC/.canna | sed -e 's/;(setq canna-input-method "kana")/(setq canna-input-method "kana")/' | \
          sed -e 's/(setq canna-input-method "roma")/;(setq canna-input-method "roma")/' > .canna
      cat $SKELDIR/notePC/.Xdefaults | sed -e 's/!Emacs\*useXim/Emacs\*useXim/' > .Xdefaults
    else
      cat $SKELDIR/Desktop/.canna | sed -e 's/;(setq canna-input-method "kana")/(setq canna-input-method "kana")/' | \
          sed -e 's/(setq canna-input-method "roma")/;(setq canna-input-method "roma")/' > .canna
      cat $SKELDIR/Desktop/.Xdefaults | sed -e 's/!Emacs\*useXim/Emacs\*useXim/' > .Xdefaults
    fi
  fi

  if [ "$KDEFONTS" -eq "2" ]; then
    cp -R $SKELDIR/kde-aa/.qt $SKELDIR/kde-aa/.kde .
  elif [ "$KDEFONTS" -eq "3" ]; then
    cp -R $SKELDIR/kde-aa-mikachan/.qt $SKELDIR/kde-aa-mikachan/.kde .
  else
    cp -R $SKELDIR/kde-non-aa/.qt $SKELDIR/kde-non-aa/.kde .
  fi
  chown -R ${LOGIN}:${GID} .kde
  chown -R ${LOGIN}:${GID} .qt
fi
echo
/usr/bin/chfn $LOGIN
echo
/usr/bin/passwd $LOGIN
echo

echo "Done..."

fi

if [ -x /usr/sbin/sendmail ]; then
  if [ ! -f /usr/spool/mail/$LOGIN ]; then
    cat /etc/template/mime-mail.sample > /usr/spool/mail/$LOGIN
    chown ${LOGIN}:${GID} /usr/spool/mail/$LOGIN
    chmod og-rwx /usr/spool/mail/$LOGIN
  fi
fi
