#!/bin/rc
# 9fs filesystem [mountpoint] - srv & mount filesystem, usually from plan 9

rfork e
switch($1){
case ''
       echo usage: 9fs service '[mountpoint]' >[1=2]
       exit usage
case 9fat esp pidos dos
       if(~ $#2 1)
               part=`{ls $2 >[2]/dev/null}
       if not if(~ $1 pidos)
               part=`{ls /dev/sdM*/dos >[2]/dev/null}
       if not
               part=`{ls /dev/fs/$1 /dev/sd*/$1 >[2]/dev/null}
       if(~ $#part 0) {
               echo 'no '$1' partition found' >[1=2]
               exit no.$1
       }
       part=$part(1)

       if(! test -f /srv/dos)
               dossrv >/dev/null </dev/null >[2]/dev/null

       unmount /n/$1 >/dev/null >[2]/dev/null
       mount -c /srv/dos /n/$1 $part
       if(~ $1 9fat){
               unmount /n/9 >/dev/null >[2]/dev/null
               mount -c /srv/dos /n/9 $part
       }
case dump other
       mount -C /srv/boot /n/$1 $1
case sources
       srv -nqC tcp!sources.cs.bell-labs.com sources /n/sources
case sourcesdump
       9fs sources
       mount -nC /srv/sources /n/sourcesdump main/archive
case sourcessnap
       9fs sources
       mount -nC /srv/sources /n/sourcessnap main/snapshot
case atom
       srv -nq tcp!atom.9atom.org atom && mount -nC /srv/atom /n/atom atom
case atomdump
       9fs atom && mount -nC /srv/atom /n/atomdump atomdump
case 9pio
       srv -nq tcp!9p.io 9pio && mount -nC /srv/9pio /n/9pio
case 9front
       9fs 9front.org
       for(i in 9front extra fqa hardware iso lists pkg sites)
               bind /n/9front.org/$i /n/$i
case 9bugs
       9fs contrib.9front.org
       bind /n/contrib.9front.org/bugs /n/bugs
case 9contrib
       9fs contrib.9front.org
       for(i in contrib sources)
               bind /n/contrib.9front.org/$i /n/$i
case 9grep
       9fs tcp!9front.org!7734
       bind -b /n/9front.org!7734 /n/lists
# arbitrary venti archives
case vac:*
       vacfs <{echo $1}
case *.vac
       if (test -e $1)
               score=$1
       if not if (! ~ $1 /* && test -e $home/lib/vac/$1)
               score=$home/lib/vac/$1
       if not if (! ~ $1 /* && test -e /lib/vac/$1)
               score=/lib/vac/$1
       if not {
               echo $0: $1: no such score file >[1=2]
               exit 'no score file'
       }
       vacfs -m /n/`{basename $1 .vac} `{cat $score}
case wiki
       srv -m 'net!9p.io!wiki' wiki /mnt/wiki
case *
       switch($#*){
       case 1
               srv -m $1
       case *
               srv -m $1 $1 $2
       }
}