#!/bin/rc

rfork en

# F FEATUREs, M map files, A other arguments
FEATURE=no

if (~ $MAPPROG '')
	MAPPROG=/bin/aux/mapd

if (~ $MAPDIR '')
	MAPDIR=/lib/map

F=(); M=(); A=();
for (i) {
	switch ($FEATURE) {
	case no
		switch ($i) {
		case -f
			FEATURE=yes 
			F=($F)
		case *
			A=($A $i)
		}
	case yes
		switch ($i) {
		case -f
		case -*
			A=($A $i)
			FEATURE=no
		case riv*2
			F=($F 201 202)
		case riv*3
			F=($F 201 202 203)
		case riv*4
			F=($F 201 202 203 204)
		case riv*
			F=($F 201)
		case iriv*2
			F=($F 206 207)
		case iriv*[34]
			F=($F 206 207 208)
		case iriv*
			F=($F 206)
		case coast*2 shore*2 lake*2
			F=($F 102)
		case coast*3 shore*3 lake*3
			F=($F 102 103)
		case coast*4 shore*4 lake*4
			F=($F 102 103 104)
		case coast* shore* lake*
		case ilake*[234] ishore*[234]
			F=($F 106 107)
		case ilake* ishore*
			F=($F 106)
		case reef*
			F=($F 108)
		case canal*2
			F=($F 210 211)
		case canal*[34]
			F=($F 210 211 212)
		case canal*
			F=($F 210)
		case glacier*
			F=($F 115)
		case state* province*
			F=($F 401)
		case countr*2
			F=($F 301 302)
		case countr*[34]
			F=($F 301 302 303)
		case countr*
			F=($F 301)
		case salt*[234]
			F=($F 109 110)
		case salt*
			F=($F 109)
		case ice*[234] shel*[234]
			F=($F 113 114)
		case ice* shel*
			F=($F 113)
		case *
			echo map: unknown feature $i >[1=2]
			exits "unknown feature"
		}
	}
}

for (j in $F) {
	if (test -r $MAPDIR/$j)
		M=($M $MAPDIR/$j)
}

if (~ $F ?*) {
	if (test -r $MAPDIR/101)
		M=(101 $M)
	M=(-m $M)
}

if (~ $MAP '')
	MAP=world

MAP=$MAP MAPDIR=$MAPDIR $MAPPROG $A $M
