#!/bin/sh
#
# $Id: Customize,v 1.9 2005/05/11 13:02:18 abe Exp $
#
# Customize: customize dialect's machine.h header file.
#
# Allows easy modification of some important compile-time definitions for
# lsof, made in the dialect's machine.h header file, including:
#
#	HASSECURITY	the security option
#	HASNOSOCKSECURITY
#			the socket oberalization of HASSECURITY
#	HASDCACHE	enabling/disabling the device cache file
#			(Note: changing the device cache file option isn't
#			       offered when machine.h contains NEVER_HASDCACHE
#			       anywhere, including in a comment.)
#	HASENVDC	enabling/disabling device cache path from environment
#	HASKERNIDCK	enabling/disabling the kernel identity check
#			(not done for some dialects)
#	HASPERSDC	enabling/disabling personal device cache path
#			construction
#	HASPERSDCPATH	enabling/disabling additional personal device cache
#			path component
#	HASSYSDC	enabling/disabling system-wide device cache file path
#	HASXOPT_ROOT	enabling/disabling root use of the -X option
#	WARNDEVACCESS	enabling inaccessible /dev node warnings
#			(Note: changing the inaccessible /dev/node warning
#			       option isn't offered when machine.h contains
#			       NEVER_WARNDEVACCESS anywhere, including in a
#			       comment.)
#	WARNINGSTATE	enable/disabling default warning message state
#
# Usage: Customize [dialect_directory]
#
# where: dialect_directory (optional) is the directory in which the dialect's
#	 dialect's sources, Makefile and scripts are found

OLD=machine.h
NEW=new_machine.h

# Save optional dialect directory.

if test $# -eq 1
then
  DialDir=$1
else
  DialDir=""
fi

# Establish trap and stty handling.

ISIG=":"
trap 'rm -f $NEW; $ISIG; exit 1' 1 2 3 15
stty -a 2>&1 | grep isig > /dev/null
if test $? -eq 0
then
  stty -a 2>&1 | egrep -e -isig > /dev/null
  if test $? -eq 0
  then
    ISIG="stty -isig"
    stty isig
  fi
fi

# Decide how to use echo.

ECHO=`echo -n ""`
if test "X$ECHO" = "X-n "
then
  EC="\c"
  EO=""
else
  EC=""
  EO="-n"
fi

# Decide how to use tail(1).

TMP1=`tail -n 1 $0 2> /dev/null`
if test $? -eq 0 -a "X$TMP1" = "X#LAST_LINE"
then
  TA="-n 1"
else
  TA="-1"
fi

# Display the introduction and basic explanation.

cat << .CAT_MARK

You may now customize the machine.h header file for this UNIX
dialect.  The customizations will take effect when you compile
lsof.  You may also choose to skip customization and proceed to
the compilation of lsof.

If you don't know if you need to customize or want to know more
about what you can customize, consult the 00DCACHE, 00FAQ, 00PORTING,
and 00README files of the lsof distribution.  You might also find
it helpful to examine the machine.h header file for the dialect
you're customizing.

You don't need to use this procedure to customize lsof; you can
edit the machine.h header file directly.  If you later decide you
want to use this procedure to customize machine.h, execute the
./Customize script.
.CAT_MARK

END=0
while test $END -eq 0
do
  echo ""
  echo $EO "Do you want to customize (y|n) [y]? $EC"
  read ANS EXCESS
  if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
  then
    exit 0
  fi
  if test "X$ANS" = "Xy" -o "X$ANS" = "XY" -o "X$ANS" = "X"
  then
    echo ""
    echo "Customizing ..."
    END=1
  else
    echo ""
    echo "Please answer y|n [y]."
  fi
done

# See if $OLD exists.

if test ! -r $OLD
then
  echo ""
  echo "FATAL: The file \"$OLD\" doesn't exist.  Customization can't"
  echo "continue without it."
  echo ""
  echo "Did you run the Configure script?"
  echo ""
  echo "Customize quits."
  echo ""
  exit 1
fi

# See if $NEW exists.

if test -r $NEW
then
  echo ""
  echo "====================================================================="
  echo ""
  echo "WARNING: \"$NEW\" exists.  Customization will replace it."
  END=0
  while test $END -eq 0
  do
    echo ""
    echo $EO "Do you want to remove $NEW (y|n) [y]? $EC"
    read ANS EXCESS
    if test "X$ANS" = "Xy" -o "X$ANS" = "XY" -o "X$ANS" = "X"
    then
      echo ""
      echo "Removing $NEW"
      echo ""
      rm -f $NEW
      END=1
    else
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
      then
        echo ""
        echo "FATAL: Customize quits; it must be able to create \"$NEW\"."
        echo ""
        exit 1
      else
        echo ""
        echo "Please answer y|n [y]."
      fi
    fi
  done
fi

# Process HASSECURITY.

cat << .CAT_MARK

=====================================================================

When HASSECURITY is enabled, only the root user may use lsof to
examine all open files; other users may examine only the files
belonging to the real user ID of their lsof process.  If
HASNOSOCKSECURITY is also defined, anyone may list anyone else's
open socket files, provided their listing is selected with the "-i"
option.

When HASSECURITY is disabled, anyone may use lsof to examine all
open files.

.CAT_MARK

grep HASSECURITY $OLD | tail $TA | egrep "^#define" > /dev/null
if test $? -eq 0
then
  echo "HASSECURITY is enabled."
  NSEC=1
else
  echo "HASSECURITY is disabled."
  NSEC=0
fi
END=0
while test $END -eq 0
do
  echo ""
  if test $NSEC -eq 1
  then
    echo $EO "Disable HASSECURITY (y|n) [n]? $EC"
  else
    echo $EO "Enable HASSECURITY (y|n) [n]? $EC"
  fi
  read ANS EXCESS
  if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
  then
    echo ""
    if test $NSEC -eq 1
    then
      NSEC=0
      echo "HASSECURITY will be disabled."
    else
      NSEC=1
      echo "HASSECURITY will be enabled."
    fi
    END=1
  else
    if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
    then
      echo ""
      echo "HASSECURITY will not be changed."
      END=1
    else
      echo ""
      echo "Please answer y|n [n]."
    fi
  fi
done

# If HASSECURITY is enabled, see if HASNOSOCKSECURITY should also be defined.

if test $NSEC -eq 1
then
  cat << .CAT_MARK

====================================================================

When HASSECURITY is enabled, you may also define HASNOSOCKSECURITY.

When both are defined, no one but root may list all of anyone else's
open files -- only their own open files -- but anyone may list
anyone else's open socket files.

This option is useful with ntop (http://www.ntop.org).

.CAT_MARK

  grep HASNOSOCKSECURITY $OLD | tail $TA | egrep "^#define" > /dev/null
  if test $? -eq 0
  then
    echo "HASNOSOCKSECURITY is enabled."
    SOCKSEC=1
  else
    echo "HASNOSOCKSECURITY is disabled."
    SOCKSEC=0
  fi
  END=0
  while test $END -eq 0
  do
    echo ""
    if test $SOCKSEC -eq 1
    then
      echo $EO "Disable HASNOSOCKSECURITY (y|n) [n]? $EC"
    else
      echo $EO "Enable HASNOSOCKSECURITY (y|n) [n]? $EC"
    fi
    read ANS EXCESS
    if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
    then
      echo ""
      if test $SOCKSEC -eq 1
      then
        SOCKSEC=0
        echo "HASNOSOCKSECURITY will be disabled."
      else
        SOCKSEC=1
        echo "HASNOSOCKSECURITY will be enabled."
      fi
      END=1
    else
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
      then
        echo ""
        echo "HASNOSOCKSECURITY will not be changed."
        END=1
      else
        echo ""
        echo "Please answer y|n [n]."
      fi
    fi
  done
else
  SOCKSEC=0
fi

# Process WARNINGSTATE.

cat << .CAT_MARK

=====================================================================

When WARNINGSTATE is enabled, lsof will will issue whatever warning
messages it finds necessary.  When WARNINGSTATE is disabled, lsof
will issue no warning messages.  For individual uses of lsof, -w
disables warning state and +w enables it.

.CAT_MARK

grep WARNINGSTATE $OLD | tail $TA | egrep "^#define" > /dev/null
if test $? -eq 0
then
  echo "WARNINGSTATE is disabled."
  WST=0
else
  echo "WARNINGSTATE is enabled."
  WST=1
fi
END=0
NWST=$WST
while test $END -eq 0
do
  echo ""
  if test $NWST -eq 0
  then
    echo $EO "Enable WARNINGSTATE? (y|n) [n]? $EC"
  else
    echo $EO "Disable WARNINGSTATE? (y|n) [n]? $EC"
  fi
  read ANS EXCESS
  if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
  then
    echo ""
    if test $NWST -eq 0
    then
      echo "WARNINGSTATE will be enabled."
      NWST=1
    else
      echo "WARNINGSTATE will be disabled."
      NWST=0
    fi
    END=1
  else
    if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
    then
      echo ""
      echo "WARNINGSTATE will not be changed."
      END=1
    else
      echo ""
      echo "Please answer y|n [n]."
    fi
  fi
done

# Process WARNDEVACCESS, unless the dialect's machine.h header file contains
# NEVER_WARNDEVACCESS.

grep NEVER_WARNDEVACCESS $OLD > /dev/null
if test $? -eq 0
then
  NEVERWDA=1
  NWDA=0
else
  NEVERWDA=0
  cat << .CAT_MARK

=====================================================================

When WARNDEVACCESS is enabled, lsof will issue warning messages
when it can't access nodes in /dev (or /devices), subject to the
default or explicit (-w) WARNINGSTATE.

When WARNDEVACCESS is disabled, lsof will silently skip nodes in
/dev (or /devices) that it can't access.

.CAT_MARK

  grep WARNDEVACCESS $OLD | tail $TA | egrep "^#define" > /dev/null
  if test $? -eq 0
  then
    echo "WARNDEVACCESS is enabled."
    WDA=1
  else
    echo "WARNDEVACCESS is disabled."
    WDA=0
  fi
  END=0
  NWDA=$WDA
  while test $END -eq 0
  do
    echo ""
    if test $NWDA -eq 1
    then
      echo $EO "Disable WARNDEVACCESS (y|n) [n]? $EC"
    else
      echo $EO "Enable WARNDEVACCESS (y|n) [n]? $EC"
    fi
    read ANS EXCESS
    if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
    then
      echo ""
      if test $NWDA -eq 1
      then
        echo "WARNDEVACCESS will be disabled."
        NWDA=0
      else
        echo "WARNDEVACCESS will be enabled."
        NWDA=1
      fi
      END=1
    else
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
      then
	echo ""
	echo "WARNDEVACCESS will not be changed."
        END=1
      else
        echo ""
        echo "Please answer y|n [n]."
      fi
    fi
  done
fi

# Process HASDCACHE, unless the dialect's machine.h header file contains
# NEVER_HASDCACHE.

ENVV=""
ENVN=0
PDCV=""
PDCN=0
PDCPV=""
PDCPN=0
SDCV=""
SDCN=0
grep NEVER_HASDCACHE $OLD > /dev/null
if test $? -eq 0
then
  NEVERDC=1
  CDC=0
  DC=0
  NDC=0
else
  NEVERDC=0
  cat << .CAT_MARK

=====================================================================

When HASDCACHE is enabled, lsof will write a device cache file that
contains information about the nodes in /dev (or /devices).  The
options HASENVDC, HASPERSDC, HASPERSDCPATH, and HASSYSDC define
the device cache file path.

When HASDCACHE is disabled, lsof won't write a device cache file.

Consult the 00DCACHE and 00FAQ files of the lsof distribution for
more information.

.CAT_MARK

  grep HASDCACHE $OLD | tail $TA | egrep "^#define" > /dev/null
  if test $? -eq 0
  then
    echo "HASDCACHE is enabled."
    DC=1
  else
    echo "HASDCACHE is disabled."
    DC=0
  fi
  END=0
  NDC=$DC
  while test $END -eq 0
  do
    echo ""
    if test $NDC -eq 1
    then
      echo $EO "Disable HASDCACHE (y|n) [n]? $EC"
    else
      echo $EO "Enable HASDCACHE (y|n) [n]? $EC"
    fi
    read ANS EXCESS
    if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
    then
      echo ""
      if test $NDC -eq 1
      then
        echo "HASDCACHE will be disabled."
        NDC=0
      else
        echo "HASDCACHE will be enabled."
        NDC=1
      fi
      END=1
    else
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
      then
	echo ""
	echo "HASDCACHE will not be changed."
        END=1
      else
        echo ""
        echo "Please answer y|n [n]."
      fi
    fi
  done

  # See if other device cache options need to be declared.

  if test $DC -eq 1 -a $NDC -eq 1
  then
    cat << .CAT_MARK

=====================================================================

You have decided that HASDCACHE should be defined.  There are other
definitions associated with HASDCACHE that specify options for the
formation of the device cache file path.  You may change them.

Consult the 00DCACHE and 00FAQ files of the lsof distribution for
more information.

The current path options are:
  
.CAT_MARK

    grep HASENVDC $OLD | tail $TA | egrep "^#define"
    egrep "HASPERSDC$|HASPERSDC[ 	]" $OLD | tail $TA | egrep "^#define"
    grep HASPERSDCPATH $OLD | tail $TA | egrep "^#define"
    grep HASSYSDC $OLD | tail $TA | egrep "^#define"
    END=0
    while test $END -eq 0
    do
      echo ""
      echo $EO "Do you want to change path options (y|n) [n]? $EC"
      read ANS EXCESS
      if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
      then
        CDC=1
        END=1
      else
        if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
        then
	  CDC=0
	  END=1
        else
	  if test "X$ANS" = "X"
	  then
	    echo ""
	    echo "The path options will not be changed."
	    CDC=0
	    END=1
	  else
	    echo ""
	    echo "Please answer y|n [n]."
	  fi
        fi
      fi
    done
  else
    CDC=0
  fi
  if test \( $NDC -eq 1 -a $DC -eq 0 \) -o \( $DC -eq 1 -a $CDC -eq 1 \)
  then
    cat << .CAT_MARK

=====================================================================

You may specify for HASENVDC the name of the environment variable
from which lsof should take the device cache file path for non-root
users.  Press ENTER to use the current value of HASENVDC:

.CAT_MARK

    echo $EO "        $EC"
    TMP1=`grep HASENVDC $OLD | tail $TA | egrep "^#define"`
    if test "X$TMP1" != "X"
    then
      TMP1=`echo "$TMP1" | sed 's/^#define[ 	]HASENVDC[ 	]"\([^"]*\)".*$/\1/'`
      echo "$TMP1"
    else
      echo "no current HASENVDC value"
    fi
    END=0
    GV=0
    while test $END -eq 0
    do
      echo ""
      echo $EO "Do you want to define a name for HASENVDC (y|n) [n]? $EC"
      read ANS EXCESS
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
      then
        ENVV=""
        END=1
      else
        if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
        then
	  GV=1
	  END=1
        else
	  if test "X$ANS" = "X"
	  then
	    echo ""
	    echo "HASENVDC will not be changed."
	    ENVV=$TMP1
	    END=1
	  else
	    echo ""
	    echo "Please answer y|n [n]."
	  fi
        fi
      fi
    done
    if test $GV -eq 1
    then
      echo ""
      echo $EO "Please enter the HASENVDC name (no quotes): $EC"
      read TMP1 EXCESS
      ENVV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'`
      if test "X$ENVV" = "X"
      then
	ENVN=1
      fi
    fi
    cat << .CAT_MARK

=====================================================================

HASPERSDC is a format that specifies how the personal device cache
path is constructed.  Consult the 00DCACHE and 00FAQ files of the
lsof distribution for information on the conversions supported in
HASPERSDC.  Press ENTER to use the curent HASPERSDC format:

.CAT_MARK

    echo $EO "        $EC"
    TMP1=`egrep "HASPERSDC$|HASPERSDC[ 	]" $OLD | tail $TA | egrep "^#define"`
    if test "X$TMP1" != "X"
    then
      TMP1=`echo "$TMP1" | sed 's/^#define[ 	]HASPERSDC[ 	]"\([^"]*\)".*$/\1/'`
      echo "$TMP1"
    else
      echo "no current HASPERSDC format"
    fi
    END=0
    GV=0
    while test $END -eq 0
    do
      echo ""
      echo $EO "Do you want to define a format for HASPERSDC (y|n) [n]? $EC"
      read ANS EXCESS
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
      then
        END=1
      else
        if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
        then
	  GV=1
	  END=1
        else
	  if test "X$ANS" = "X"
	  then
	    echo ""
	    echo "HASPERSDC will not be changed."
	    PDCV=$TMP1
	    END=1
	  else
	    echo ""
	    echo "Please answer y|n [n]."
	  fi
        fi
      fi
    done
    if test $GV -eq 1
    then
      echo ""
      echo $EO "Please enter the HASPERSDC format (no quotes): $EC"
      read TMP1 EXCESS
      PDCV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'`
      if test "X$PDCV" = "X"
      then
	PDCN=1
      fi
    fi
    cat << .CAT_MARK

=====================================================================

Specify for HASPERSDCPATH the name of the environment variable from
which lsof should take a path name component to insert at the %p
conversion in the HASPERSDC format.

Consult the 00FAQ and 00DCACHE files of the lsof distribution for
more information on HASPERSDCPATH usage.

Press ENTER to use the current value for HASPERSDCPATH:

.CAT_MARK

    echo $EO "        $EC"
    TMP1=`grep HASPERSDCPATH $OLD | tail $TA | egrep "^#define"`
    if test "X$TMP1" != "X"
    then
      TMP1=`echo "$TMP1" | sed 's/^#define[ 	]HASPERSDCPATH[ 	]"\([^"]*\)".*$/\1/'`
      echo "$TMP1"
    else
      echo "no current HASPERSDCPATH value"
    fi
    END=0
    GV=0
    while test $END -eq 0
    do
      echo ""
      echo $EO "Do you want to change HASPERSDCPATH (y|n) [n]? $EC"
      read ANS EXCESS
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
      then
	echo ""
	echo "HASPERSDCPATH will not be changed."
	PDCPV=$TMP1
        END=1
      else
        if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
        then
	  GV=1
	  END=1
	else
	  echo ""
	  echo "Please answer y|n [n]."
	fi
      fi
    done
    if test $GV -eq 1
    then
      echo ""
      echo $EO "Please enter the HASPERSDCPATH name (no quotes): $EC"
      read TMP1 EXCESS
      PDCPV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'`
      if test "X$PDCPV" = "X"
      then
	PDCPN=1
      fi
    fi
    cat << .CAT_MARK

=====================================================================

Specify for HASSYSDC the system-wide device cache file path.  Press
ENTER to use the current HASSYSDC value:

.CAT_MARK

    echo $EO "        $EC"
    TMP1=`grep HASSYSDC $OLD | tail $TA | egrep "^#define"`
    if test "X$TMP1" != "X"
    then
      TMP1=`echo "$TMP1" | sed 's/^#define[ 	]HASSYSDC[ 	]"\([^"]*\)".*$/\1/'`
      echo "$TMP1"
    else
      echo "no current HASSYSDC value"
    fi
    END=0
    GV=0
    while test $END -eq 0
    do
      echo ""
      echo $EO "Do you want to define a system-device path (y|n) [n]? $EC"
      read ANS EXCESS
      if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
      then
        END=1
      else
        if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
        then
	  GV=1
	  END=1
        else
	  if test "X$ANS" = "X"
	  then
	    echo ""
	    echo "No HASSYSDC change will be made."
	    SDCV=$TMP1
	    END=1
	  else
	    echo ""
	    echo "Please answer y|n [n]."
	  fi
        fi
      fi
    done
    if test $GV -eq 1
    then
      echo ""
      echo $EO "Please enter the system-wide path (no quotes): $EC"
      read TMP1 EXCESS
      SDCV=`echo $TMP1 | sed 's/^\"//' | sed 's/\"$//'`
      if test "X$SDCV" = "X"
      then
	SDCN=1
      fi
    fi
  fi
fi

# If HASXOPT is defined, and HASXOPT_ROOT is mentioned,
# ask about changing HASXOPT_ROOT.

HXRC=0
grep HASXOPT $OLD | tail $TA | egrep "^#define" > /dev/null
if test $? -eq 0
then
  grep HASXOPT_ROOT $OLD > /dev/null
  if test $? -eq 0
  then
    cat << .CAT_MARK

=====================================================================

HASXOPT is defined.  If the dialect for which you are customizing
appears in the following list, you may want to change the definition
of HASXOPT_ROOT to restrict the use of the X option to lsof processes
whose real user ID is root, or enable use of it by all user IDs.

  AIX           the -X option enables the risky operation of letting
		lsof read library entry structures with readx().
		If HASXOPT_ROOT is defined, only processes whose
		real user ID is root will be allowed to use -X.
		If HASXOPT_ROOT is undefined, any process will be
		allowed to use -X.  Consult the 00FAQ file of the
		lsof distribution for more information on why
		readx() may be risky.

.CAT_MARK

    grep HASXOPT_ROOT $OLD | tail $TA | egrep "^#define" > /dev/null
    if test $? -eq 0
    then
      echo "HASXOPT_ROOT is defined."
      HXR="undefine"
      HXRS=1
    else
      echo "HASXOPT_ROOT is not defined."
      HXR="define"
      HXRS=0
    fi
    END=0
    while test $END -eq 0
    do
      echo ""
      echo $EO "Do you want to $HXR HASXOPT_ROOT (y|n) [n]? $EC"
      read ANS EXCESS
      if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
      then
        HXRA=1
        END=1
      else
        if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
        then
	  echo ""
	  echo "HASXOPT_ROOT will not be changed."
          HXRA=0
          END=1
        else
          echo ""
          echo "Please answer y|n [n]."
        fi
      fi
    done
    if test $HXRA -eq 1
    then
      HXRC=1
    fi
  fi
fi

# Process HASKERNIDCK.  Skip processing for selected dialect directories.

case $DialDir in
  linux/proc)
    NIDCK=0
    ;;
  *)
    cat << .CAT_MARK

=====================================================================

When HASKERNIDCK is enabled, lsof compares the identity of the
kernel where it was built to the identity of the kernel where it
is running.  This check can detect an lsof executable inappropriate
for the system on which it is being run.

The kernel identity check can take considerable time on some UNIX
dialects -- e.g., AIX -- so there may be occasions when it is
desirable to disable it, in spite of the increased risk of using
an inappropriate lsof executable.

.CAT_MARK

    grep HASKERNIDCK $OLD | tail $TA | grep "^#define" > /dev/null
    if test $? -eq 0
    then
      echo "HASKERNIDCK is enabled."
      IDCK=1
    else
      echo "HASKERNIDCK is disabled."
      IDCK=0
    fi
    END=0
    NIDCK=$IDCK
    while test $END -eq 0
    do
      echo ""
      if test $NIDCK -eq 1
      then
        echo $EO "Disable HASKERNIDCK (y|n) [n]? $EC"
      else
        echo $EO "Enable HASKERNIDCK (y|n) [n]? $EC"
      fi
      read ANS EXCESS
      if test "X$ANS" = "Xy" -o "X$ANS" = "XY"
      then
        echo ""
        if test $NIDCK -eq 1
        then
          NIDCK=0
          echo "HASKERNIDCK will be disabled."
        else
          NIDCK=1
          echo "HASKERNIDCK will be enabled."
        fi
        END=1
      else
        if test "X$ANS" = "Xn" -o "X$ANS" = "XN" -o "X$ANS" = "X"
        then
          echo ""
          echo "HASKERNIDCK will not be changed."
          END=1
          NIDCK=$IDCK
        else
          echo ""
          echo "Please answer y|n [n]."
        fi
      fi
    done
    ;;
esac

# Initialize new machine.h.

rm -f $NEW
cp $OLD $NEW
chmod 0644 $NEW
echo "" >> $NEW
echo "/*" >> $NEW
echo $EO " * Added by Customize on $EC" >> $NEW
date >> $NEW
echo " */" >> $NEW
echo "" >> $NEW

# Change HASSECURITY and HASNOSOCKSECURITY, as required.

echo "#undef	HASSECURITY" >> $NEW
echo "#undef	HASNOSOCKSECURITY" >> $NEW
if test $NSEC -eq 1
then
  echo "#define	HASSECURITY	1" >> $NEW
  if test $SOCKSEC -eq 1
  then
    echo "#define	HASNOSOCKSECURITY	1" >> $NEW
  fi
fi

# Change WARNDEVACCESS, as required.

if test $NEVERWDA -eq 0
then
  echo "#undef	WARNDEVACCESS" >> $NEW
  if test $NWDA -eq 1
  then
    echo "#define	WARNDEVACCESS	1" >> $NEW
  fi
fi

# Change WARNINGSTATE, as required.

echo "#undef	WARNINGSTATE" >> $NEW
if test $NWST -eq 0
then
  echo "#define	WARNINGSTATE	1" >> $NEW
fi

# Change device cache definitions, as required.

if test \( $NDC -eq 1 -a $DC -eq 0 \) -o \( $DC -eq 1 -a $CDC -eq 1 \)
then
  if test "X$ENVV" = "X" -a "X$PDCV" = "X" -a "X$SDCV" = "X"
  then
    cat << .CAT_MARK

FATAL: HASDCACHE is defined, but there is no definition for
       any of HASENVDC, HASPERSDC, or HASSYSDC

       No new machine.h has been created.

       Customize quits.

       Restart Customize and define at least one of HASENVDC,
       HASPERSDC, or HASSYSDC.

.CAT_MARK

    rm -f $NEW
    exit 1
  fi
fi
if test "X$PDCV" != "X"
then
  echo "$PDCV" | grep "%p" > /dev/null
  if test $? -eq 0 -a $PDCPN -eq 1
  then
    cat << .CAT_MARK

FATAL: HASDCACHE is defined and HASPERSDC has a %p conversion,
       but HASPERSDCPATH is NULL.

       No new machine.h has been created.

       Customize quits.

       Restart Customize and define HASPERSDCPATH.

.CAT_MARK

    rm -f $NEW
    exit 1
  fi
fi
echo "#undef	HASDCACHE" >> $NEW
if test $NEVERDC -eq 1
then
  echo "#undef	HASENVDC" >> $NEW
  echo "#undef	HASPERSDC" >> $NEW
  echo "#undef	HASPERSDCPATH" >> $NEW
  echo "#undef	HASSYSDC" >> $NEW
else
  if test $NDC -eq 1
  then
    echo "#define	HASDCACHE	1" >> $NEW
    if test "X$ENVV" != "X" -o $ENVN -eq 1
    then
      echo "#undef	HASENVDC" >> $NEW
      if test $ENVN -eq 0
      then
        echo "#define	HASENVDC	\"$ENVV\"" >> $NEW
      fi
    fi
    if test "X$PDCV" != "X" -o $PDCN -eq 1
    then
      echo "#undef	HASPERSDC" >> $NEW
      if test $PDCN -eq 0
      then
        echo "#define	HASPERSDC	\"$PDCV\"" >> $NEW
      fi
    fi
    if test "X$PDCPV" != "X" -o $PDCPN -eq 1
    then
      echo "#undef	HASPERSDCPATH" >> $NEW
      if test $PDCPN -eq 0
      then
        echo "#define	HASPERSDCPATH	\"$PDCPV\"" >> $NEW
      fi
    fi
    if test "X$SDCV" != "X" -o $SDCN -eq 1
    then
      echo "#undef	HASSYSDC" >> $NEW
      if test $SDCN -eq 0
      then
        echo "#define	HASSYSDC	\"$SDCV\"" >> $NEW
      fi
    fi
  fi
fi

# Change HASXOPT_ROOT, as required.

if test $HXRC -eq 1
then
  if test $HXRS -eq 1
  then
    echo "#undef	HASXOPT_ROOT" >> $NEW
  else
    echo "#define	HASXOPT_ROOT	1" >> $NEW
  fi
fi

# Change HASKERNIDCK, as required.

echo "#undef	HASKERNIDCK" >> $NEW
if test $NIDCK -eq 1
then
  echo "#define	HASKERNIDCK	1" >> $NEW
fi

# Replace the current machine.h with the new one, as requested.

echo ""
echo "====================================================================="
echo ""
echo "A new $OLD file has been created in \"$NEW\"."
END=0
while test $END -eq 0
do
  echo ""
  echo "Do you want to rename $OLD to ${OLD}.old and replace it with"
  echo $EO "$NEW (y|n) [y]? $EC"
  read ANS EXCESS
  if test "X$ANS" = "Xn" -o "X$ANS" = "XN"
  then
    END=1
  else
    if test "X$ANS" = "Xy" -o "X$ANS" = "XY" -o "X$ANS" = "X"
    then
      rm -f ${OLD}.old
      mv $OLD ${OLD}.old
      mv $NEW $OLD
      END=1
    else
      echo ""
      echo "Please answer y|n [y]."
    fi
  fi
done
echo ""
echo "You may now run the make command -- e.g.,"
echo ""
echo "        $ make"
echo ""
exit 0
#LAST_LINE
