#!/bin/sh

. necmg.conf

DST=$MOUNT_POINT
SRC=$RELDIR/root_dir

link() {
  for i in $*; do
    if [ ! -e $DST$i ]; then
      dest=`ls -l $i | awk '{ print $11 }'`
      echo "link $DST$i -> $dest"
      ln -s $dest $DST$i
    fi
  done
}

file() {
  mode=$1; shift
  owner=$1; shift
  group=$1; shift
  size=$1; shift

  for i in $*; do
    copy $i
    chown $owner:$group $DST/$i 
    chmod $mode $DST/$i
  done
}

copy() {
  for i in $*; do
    if [ -e $SRC$i ]; then
      if [ -e $DST$i ]; then
        find $SRC$i -newer $DST$i -exec cp -p $SRC$i $DST$i \; -exec echo cp -p $SRC$i $DST$i \;
      else
        echo cp -p $SRC$i $DST$i
        cp -p $SRC$i $DST$i
      fi
    else
      if [ -e $DST$i ]; then
        find $i -newer $DST$i -exec cp -p $i $DST$i \; -exec echo cp -p $i $DST$i \;
      else
        echo cp -p $i $DST$i
        cp -p $i $DST$i
      fi
    fi
  done
}

dir() {
  mode=$1; shift
  owner=$1; shift
  group=$1; shift

  for i in $*; do
    if [ ! -e $DST$i ]; then
      echo mkdir $DST$i
      mkdir $DST$i
      echo set $owner $group $mode $i 
      chown $owner:$group $DST/$i 
      chmod $mode $DST/$i
    fi
  done
}

option_base() {
  #
  # create directries
  #
  dir 755 0 0 /dev
  dir 755 3 7 /sbin
  dir 755 0 0 /etc
  dir 755 3 7 /bin
  dir 555 0 0 /proc
  dir 755 0 0 /root
  dir 755 0 0 /var
  dir 755 3 7 /var/log
  dir 755 0 7 /var/run
  dir 755 3 7 /var/db
  dir 777 3 7 /var/tmp
  dir 755 0 0 /usr
  dir 755 3 7 /usr/bin
  dir 755 3 7 /usr/sbin
  dir 777 3 7 /tmp
  dir 755 3 7 /usr/lib
  dir 755 3 7 /usr/libexec


  #
  # copy kernel
  #
  cp -p $SRCDIR/sys/compile/NECMG/kernel $DST
  file 644 0 0 1536 /boot.help
  file 644 0 0 0 /boot.config
  file 644 0 0 0 /kernel.config

  #
  # create devices
  #
  if [ ! -e $DST/dev/MAKEDEV ]; then
    file 555 0 0 31232 /dev/MAKEDEV
    cd $DST/dev
    echo MAKEDEV std
    ./MAKEDEV std
    echo MAKEDEV wd0 #wd1 wd2 wd3
    ./MAKEDEV wd0 #wd1 wd2 wd3
#    echo MAKEDEV wd2s1a wd2s1b wd2s2a wd2s2b
#    ./MAKEDEV wd2s1a wd2s1b wd2s2a wd2s2b
    echo MAKEDEV ttyd0 ttyd1 ttyd2 ttyd3
    ./MAKEDEV ttyd0 ttyd1 ttyd2 ttyd3
    echo MAKEDEV cuaa0 cuaa1 cuaa2 cuaa3
    ./MAKEDEV cuaa0 cuaa1 cuaa2 cuaa3
    echo MAKEDEV lpt0 lpt1 lpt2
    ./MAKEDEV lpt0 lpt1 lpt2
    echo MAKEDEV pty0 ch0 tw0 bpf0
    ./MAKEDEV pty0 ch0 tw0 bpf0
    echo MAKEDEV perfmon speaker pcaudio
    ./MAKEDEV perfmon speaker pcaudio
    echo MAKEDEV vty4 tun0 vn0
    ./MAKEDEV vty4 tun0 vn0
    echo MAKEDEV apm card0
    ./MAKEDEV apm card0
  fi

  #
  #  /sbin
  #
  file 500 3 7 200704 /sbin/init
  file 555 3 7 49152 /sbin/swapon
  file 555 3 7 69632 /sbin/mount
  file 555 3 7 122880 /sbin/umount
  file 555 0 7 139264 /sbin/mount_msdos
  file 555 3 7 49152 /sbin/mount_procfs
  file 555 3 7 57344 /sbin/adjkerntz
  file 555 3 2 98304 /sbin/dmesg
  file 555 3 7 180224 /sbin/fsck
  file 555 3 7 90112 /sbin/dset
  file 555 3 7 49152 /sbin/ldconfig
  file 555 3 7 139264 /sbin/ifconfig
  file 555 0 7 139264 /sbin/route
  file 550 0 5 12288 /sbin/shutdown
  file 555 3 7 172032 /sbin/halt

  #
  #  /bin
  #
  file 555 3 7 40960 /bin/[
  file 555 3 7 40960 /bin/test
  file 555 3 7 40960 /bin/ln
  file 555 3 7 53248 /bin/cat
  file 555 3 7 40960 /bin/chio
  file 555 3 7 49152 /bin/chmod
  file 555 3 7 53248 /bin/cp
  file 555 3 7 241664 /bin/csh
  file 555 3 7 135168 /bin/date
  file 555 3 7 40960 /bin/domainname
  file 555 3 7 36864 /bin/echo
  file 555 3 7 81920 /bin/expr
  file 555 3 7 40960 /bin/hostname
  file 555 3 7 155648 /bin/ls
  file 555 3 7 139264 /bin/mv
  file 555 3 7 40960 /bin/kill
  file 555 3 7 40960 /bin/pwd
  file 555 3 7 143360 /bin/rm
  file 555 3 7 299008 /bin/sh
  file 555 3 7 36864 /bin/sleep
  file 555 3 7 61440 /bin/stty
  file 555 3 7 8192 /bin/sync

  #
  #  /usr
  #
  file 555 3 7 8192 /usr/bin/uname
  file 555 3 7 24576 /usr/bin/sed
  file 555 3 7 122880 /usr/bin/awk
  file 555 0 7 24576 /usr/bin/login
  file 555 3 4 12288 /usr/bin/wall
  #file 555 3 7 61440 /usr/bin/ee
  file 555 0 7 32768 /usr/bin/passwd
  file 555 3 7 36864 /usr/bin/more
  #file 555 3 7 45056 /usr/bin/grep
  #file 555 3 7 49152 /usr/bin/diff
  #file 555 3 7 12288 /usr/sbin/apm
  file 555 3 7 28672 /usr/sbin/syslogd
  file 555 3 7 12288 /usr/sbin/kvm_mkdb
  file 555 3 7 8192 /usr/sbin/dev_mkdb
  file 555 3 7 16384 /usr/sbin/pwd_mkdb
  file 555 3 7 65536 /usr/libexec/ld.so
  file 555 3 7 24576 /usr/libexec/getty
  file 444 3 7 418816 /usr/lib/libc.so.3.0
  file 444 3 7 29696 /usr/lib/libgnuregex.so.2.0
  file 444 3 7 109056 /usr/lib/libm.so.2.0
  file 444 3 7 26112 /usr/lib/libutil.so.2.2
  file 444 3 7 25600 /usr/lib/libskey.so.2.0
  file 444 3 7 12800 /usr/lib/libscrypt.so.2.0
  link /usr/lib/libcrypt.so.2.0
  file 444 3 7 49152 /usr/lib/libcurses.so.2.0
  file 444 3 7 16896 /usr/lib/libtermcap.so.2.1

  #
  #  /etc
  #
  file 644 0 0 7168 /etc/rc
  file 644 0 0 8192 /etc/rc.conf
  file 644 0 0 8192 /etc/rc.conf.previous
  file 644 0 0 5632 /etc/rc.firewall
  file 644 0 0 3072 /etc/rc.i386
  file 644 0 0 1024 /etc/rc.local
  file 644 0 0 7168 /etc/rc.network
  file 644 0 0 1024 /etc/rc.pccard
  file 644 0 0 3584 /etc/rc.serial
  file 644 0 0 512 /etc/motd
  file 644 0 0 512 /etc/hosts
  file 644 0 0 61440 /etc/services
  file 644 0 0 1024 /etc/passwd
  file 600 0 0 1024 /etc/master.passwd
  file 644 0 0 40960 /etc/pwd.db
  file 600 0 0 40960 /etc/spwd.db
  file 644 0 0 512 /etc/group
  file 644 0 0 5120 /etc/login.conf
  file 644 0 0 6144 /etc/ttys
  file 644 0 0 5632 /etc/gettytab
  link /etc/termcap
  dir 755 3 7 /usr/share
  dir 755 3 7 /usr/share/misc
  file 444 3 7 186880 /usr/share/misc/termcap
  file 644 0 0 512 /etc/fstab

  #
  #  root user home directry
  #
  file 644 0 0 512 /root/.cshrc
}

option_diag() {
  file 555 3 2 12288 /usr/sbin/iostat
  file 555 3 2 20480 /usr/bin/vmstat
  file 555 3 2 40960 /usr/bin/systat
  file 444 3 7 17408 /usr/lib/libkvm.so.2.0
}

option_admin() {
  file 555 3 5 49152 /bin/df
  file 555 3 7 40960 /bin/mkdir
  file 555 3 7 36864 /bin/rmdir
  file 555 3 2 167936 /bin/ps
  
  #file 555 3 7 229376 /bin/pax
  #file 555 3 7 57344 /bin/dd
  #file 555 3 7 110592 /bin/ed
  #file 555 0 7 184320 /bin/rcp
  #file 555 3 7 110592 /bin/red
  #file 555 3 7 45056 /bin/rmail
  
  file 555 0 7 16384 /usr/bin/su
  file 555 3 7 12288 /usr/bin/chgrp
  file 555 3 7 274432 /usr/bin/vi
  file 555 3 7 8192 /usr/bin/printenv
  file 555 3 7 12288 /usr/sbin/chown
  file 555 3 7 12288 /usr/sbin/vipw
}

option_nethack() {
  dir 755 0 0 /usr/local
  dir 755 0 0 /usr/local/bin
  dir 755 0 0 /usr/local/lib
  dir 775 7 13 /usr/local/lib/nethackdir
  dir 775 7 13 /usr/local/lib/nethackdir/save
 
  file 755 7 13 1536 /usr/local/bin/nethack
  file 664 7 13 1024 /usr/local/lib/nethackdir/A-filla.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/A-fillb.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/A-goal.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/A-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/A-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/B-filla.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/B-fillb.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/B-goal.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/B-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/B-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/C-filla.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/C-fillb.lev
  file 664 7 13 2048 /usr/local/lib/nethackdir/C-goal.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/C-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/C-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/E-filla.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/E-fillb.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/E-goal.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/E-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/E-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/H-filla.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/H-fillb.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/H-goal.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/H-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/H-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/K-filla.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/K-fillb.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/K-goal.lev
  file 664 7 13 2048 /usr/local/lib/nethackdir/K-locate.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/K-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/P-filla.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/P-fillb.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/P-goal.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/P-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/P-start.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/R-filla.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/R-fillb.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/R-goal.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/R-locate.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/R-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/S-filla.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/S-fillb.lev
  file 664 7 13 2048 /usr/local/lib/nethackdir/S-goal.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/S-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/S-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/T-filla.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/T-fillb.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/T-goal.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/T-locate.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/T-start.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/V-filla.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/V-fillb.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/V-goal.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/V-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/V-start.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/W-filla.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/W-fillb.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/W-goal.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/W-locate.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/W-start.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/air.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/asmodeus.lev
  file 664 7 13 3584 /usr/local/lib/nethackdir/astral.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/baalz.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/bigrm-1.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/bigrm-2.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/bigrm-3.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/bigrm-4.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/bigrm-5.lev
  file 664 7 13 4096 /usr/local/lib/nethackdir/castle.lev
  file 664 7 13 5120 /usr/local/lib/nethackdir/cmdhelp
  file 664 7 13 121856 /usr/local/lib/nethackdir/data
  file 664 7 13 2560 /usr/local/lib/nethackdir/dungeon
  file 664 7 13 3072 /usr/local/lib/nethackdir/earth.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/fakewiz1.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/fakewiz2.lev
  file 664 7 13 3584 /usr/local/lib/nethackdir/fire.lev
  file 664 7 13 9216 /usr/local/lib/nethackdir/help
  file 664 7 13 4608 /usr/local/lib/nethackdir/hh
  file 664 7 13 8192 /usr/local/lib/nethackdir/history
  file 664 7 13 2560 /usr/local/lib/nethackdir/juiblex.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/knox.lev
  file 664 7 13 5120 /usr/local/lib/nethackdir/license
  file 664 7 13 0 /usr/local/lib/nethackdir/logfile
  file 664 7 13 2560 /usr/local/lib/nethackdir/medusa-1.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/medusa-2.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/minefill.lev
  file 664 7 13 2560 /usr/local/lib/nethackdir/minend-1.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/minend-2.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/minetn-1.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/minetn-2.lev
  file 775 7 13 1219584 /usr/local/lib/nethackdir/nethack
  file 664 7 13 9728 /usr/local/lib/nethackdir/opthelp
  file 664 7 13 1024 /usr/local/lib/nethackdir/options
  file 664 7 13 1024 /usr/local/lib/nethackdir/oracle.lev
  file 664 7 13 6144 /usr/local/lib/nethackdir/oracles
  file 664 7 13 2560 /usr/local/lib/nethackdir/orcus.lev
  file 664 7 13 0 /usr/local/lib/nethackdir/perm
  file 664 7 13 82944 /usr/local/lib/nethackdir/quest.dat
  file 664 7 13 0 /usr/local/lib/nethackdir/record
  file 664 7 13 41472 /usr/local/lib/nethackdir/rumors
  file 664 7 13 2560 /usr/local/lib/nethackdir/sanctum.lev
  dir 775 7 13 /usr/local/lib/nethackdir/save
  file 664 7 13 1024 /usr/local/lib/nethackdir/tower1.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/tower2.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/tower3.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/valley.lev
  file 664 7 13 3072 /usr/local/lib/nethackdir/water.lev
  file 664 7 13 1536 /usr/local/lib/nethackdir/wizard1.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/wizard2.lev
  file 664 7 13 1024 /usr/local/lib/nethackdir/wizard3.lev
  file 664 7 13 512 /usr/local/lib/nethackdir/wizhelp
  file 444 3 7 16896 /usr/lib/libtermlib.so.2.1

  dir 755 0 0 /usr/X11R6
  dir 755 0 0 /usr/X11R6/lib
  file 644 0 0 245248 /usr/X11R6/lib/libXaw.so.6.1
  file 644 0 0 77312 /usr/X11R6/lib/libXmu.so.6.0
  file 644 0 0 293888 /usr/X11R6/lib/libXt.so.6.0
  file 644 0 0 716288 /usr/X11R6/lib/libX11.so.6.1
  file 644 0 0 46080 /usr/X11R6/lib/libXext.so.6.3
  file 644 0 0 60928 /usr/X11R6/lib/libXpm.so.4.10
}

option_mule() {
  dir 755 0 0 /usr/X11R6
  dir 755 0 0 /usr/X11R6/lib
  file 644 0 0 81408 /usr/X11R6/lib/libICE.so.6.3
  file 644 0 0 36352 /usr/X11R6/lib/libSM.so.6.0
  file 644 0 0 716288 /usr/X11R6/lib/libX11.so.6.1
  file 644 0 0 245248 /usr/X11R6/lib/libXaw.so.6.1
  file 644 0 0 46080 /usr/X11R6/lib/libXext.so.6.3
  file 644 0 0 77312 /usr/X11R6/lib/libXmu.so.6.0
  file 644 0 0 293888 /usr/X11R6/lib/libXt.so.6.0
  dir 755 3 7 /usr/bin
  dir 755 3 7 /usr/games
  dir 755 3 7 /usr/lib
  file 444 3 7 418816 /usr/lib/libc.so.3.0
  link /usr/lib/libcrypt.so.2.0
  file 444 3 7 109056 /usr/lib/libm.so.2.0
  file 444 3 7 16896 /usr/lib/libtermcap.so.2.1
  file 444 3 7 26112 /usr/lib/libutil.so.2.2
  dir 755 3 7 /usr/libexec
  file 555 3 7 65536 /usr/libexec/ld.so
  dir 755 0 0 /usr/local
  dir 755 0 0 /usr/local/bin
  link /usr/local/bin/mule
  file 755 3 7 2650112 /usr/local/bin/mule-19.28
  dir 755 0 0 /usr/local/lib
  dir 755 0 0 /usr/local/lib/mule
  dir 755 0 20 /usr/local/lib/mule/19.28
  dir 755 0 20 /usr/local/lib/mule/19.28/etc
  file 644 0 20 26624 /usr/local/lib/mule/19.28/etc/GNU
  dir 755 3 7 /usr/local/lib/mule/19.28/i386--freebsd
  dir 755 0 20 /usr/local/lib/mule/19.28/lisp
  file 644 0 20 17920 /usr/local/lib/mule/19.28/lisp/keyboard.el
  file 644 0 20 11264 /usr/local/lib/mule/19.28/lisp/keyboard.elc
  dir 755 0 20 /usr/local/lib/mule/19.28/lisp/term
  file 644 0 20 1024 /usr/local/lib/mule/19.28/lisp/term/f-term.el
  dir 777 0 0 /usr/local/lib/mule/lock
  dir 755 0 0 /usr/local/lib/mule/site-lisp
  file 644 0 0 10240 /usr/local/lib/mule/site-lisp/site-start.el
  dir 755 0 0 /usr/local/share
  dir 755 0 0 /usr/local/share/emacs
  dir 755 0 0 /usr/local/share/emacs/site-lisp
  dir 755 3 7 /usr/sbin
  dir 755 3 7 /usr/share/zoneinfo
  file 644 3 7 1536 /usr/share/zoneinfo/posixrules
  file 644 0 0 2560 /root/.emacs
}
  
option_mule_sj3() {
  dir 755 0 0 /usr/local
  dir 755 0 0 /usr/local/bin
  file 755 3 7 102400 /usr/local/bin/sj3serv
  dir 755 0 0 /usr/local/lib
  dir 755 0 0 /usr/local/lib/sj3
  dir 755 0 0 /usr/local/lib/sj3/dict
  file 444 0 0 268800 /usr/local/lib/sj3/dict/sj3main.dic
  dir 755 3 0 /usr/local/lib/sj3/dict/user
  file 444 3 7 1536 /usr/local/lib/sj3/serverrc
  file 644 0 7 1024 /usr/local/lib/mule/19.28/lisp/eggrc-sj3
}
  
option_base
#option_diag
#option_admin
option_nethack
option_mule
option_mule_sj3
