#!/bin/bash
# $Id: mkfile,v 1.1 1997/09/21 18:08:54 torsten Exp torsten $
# Copyright 1997 Torsten Poulin (torsten@poulin.dk)
# May be distributed under the GNU General Public License

usage="Usage: ${0##*/} [-nv] size[k|b|m] filename ..."

while [ $# -ne 0 ]
do
    case $1 in
    --) shift; break;;
    -n) ;;
    -v|-nv|-vn) verbose=1;;
    -*) echo $usage 1>&2; exit 1;;
    *)  break;;
    esac
    shift
done

if [ $# -ne 0 ]
then
    size=${1%[kbm]}
    unit=${1#$size}
    if [ "$unit" = "" ]
    then
	if [ $(($size%1024)) -gt 0 ]
	then size=$(($size/1024+1))
	else size=$(($size/1024))
	fi
    else
	case $unit in
	k|b) ;;
	m) size=$(($size*1024));;
	*) echo $usage 1>&2; exit 1;;
	esac
    fi
else
    echo $usage 1>&2
    exit 1
fi

shift

if [ $size -lt 40 ]
then
    echo "${0##*/}: swap area needs to be at least 40kB" 1>&2
    exit 1
fi

while [ $# -ne 0 ]
do
    if [ -e $1 ]
    then
	if [ ! -f $1 -o ! -w $1 ]
	then
	    echo "${0##*/}: unable to create swap area" 1>&2
	    exit 1
	fi
    fi
    /bin/dd if=/dev/zero of=$1 bs=1024 count=$size 2>/dev/null
    if [ $? -ne 0 ]
    then
	echo "${0##*/}: error creating swap area" 1>&2
	exit 1
    fi
    /bin/chmod 0600 $1
    /sbin/mkswap $1 $size >/dev/null 2>&1
    if [ $? -ne 0 ]
    then
	echo "${0##*/}: error creating swap area" 1>&2
	exit 1
    fi
    /bin/sync
    [ "$verbose" = 1 ] && echo "$1 $(($size*1024)) bytes"
    shift
done

exit 0