#!/bin/rc

if(! ~ $#* 1){
	echo usage: mkdevc file >[1=2]
	exit 1
}

#
# The following programs are allowed to be placed in #/ as
# file systems for root
#
rootfilsys='kfs|dossrv|k9660srv'

cat <<'---'
#include	"u.h"
#include	"../port/lib.h"
#include	"mem.h"
#include	"dat.h"
#include	"fns.h"
#include	"../port/error.h"

#include	"devtab.h"

Dev	devtab[]={
---

../port/mkextract dev 0 $* | awk '{
	print "	{ "  $1 "reset, "\
	$1 "init, "\
	$1 "attach, "\
	$1 "clone, "\
	$1 "walk, "\
	$1 "stat, "\
	$1 "open, "\
	$1 "create,"
	print "	  "\
	$1 "close, "\
	$1 "read, "\
	$1 "write, "\
	$1 "remove, "\
	$1 "wstat, },"
	}'
echo '};'
../port/mkextract dev 0 $* | awk '
	BEGIN{
		printf "Rune *devchar=L\"" }
	{	printf "%s", $2 }
	END{	printf "\";\n"
	 }
	'

../port/mkextract stream 0 $* | awk '
	BEGIN{	print "extern Qinfo perminfo;" }
	{	print "extern Qinfo\t" $1 "info;" }
	'
../port/mkextract link 0 $* | awk '
	{	print "extern void\t" $1 "link(void);" }
	'
../port/mkextract misc 0 $* | sed -n 's/[ 	]*(.*)\.root/\1/p' | awk '
	/^'$rootfilsys'$/	{	print "extern uchar\tfscode[];"
				print "extern ulong\tfslen;"
				next }
			{	print "extern uchar\t" $1 "code[];"
				print "extern ulong\t" $1 "len;" }
	'
../port/mkextract stream 0 $* | awk '
	BEGIN{	print "void streaminit(void){\n\tnewqinfo(&perminfo);" }
	{	print "\tnewqinfo(&" $1 "info);" }
	'
../port/mkextract link 0 $* | awk '
	{ print "\t" $1 "link();" }
	'
../port/mkextract misc 0 $* | sed -n 's/[ 	]*(.*)\.root/\1/p' | awk '
	/^'$rootfilsys'$/	{ print "\taddrootfile(\"fs\", fscode, fslen);"
				  next }
			{ print "\taddrootfile(\"" $1 "\", " $1 "code, " $1 "len);" }
	'
echo '}'

../port/mkextract port 0 $*

if(! grep conffile $* > /dev/null)echo 'char	*conffile = "'$1'";'
echo 'ulong	kerndate = KERNDATE;'
