1#!/bin/rc 2# usbfat: [disk [mtpt]] - mount a USB disk's MS FAT file system, 3# which might be the only thing on the disk, or might be 4# a partition within the disk. 5rfork e 6disk = () 7mtpt = /n/usb 8 9test -e /dev/usb || bind -a '#u' /dev || { 10 echo no '#u/usb' >[1=2] 11 exit nousb 12} 13test -e /dev/usbdctl || mount -a /srv/usb /dev || { 14 echo cannot mount /srv/usb >[1=2] 15 exit nousbd 16} 17 18disks=() 19mtpt=() 20switch ($#*) { 21case 0 22 ; 23case 1 24 disks = $1 25case 2 26 disks = $1 27 mtpt = $2 28case * 29 echo usage: $0 ' [disk [mtpt]]' >[1=2] 30 exit usage 31} 32 33if(~ `{ls /n/usb >[2]/dev/null | wc -l} 0) 34 mount /srv/usb /n/usb >[2]/dev/null 35if (~ $#disks 0){ 36 disks = /dev/sdU*/data 37 if(! test -e $disks(1)){ 38 echo no usb disks >[1=2] 39 exit nodisk 40 } 41 disks = (/dev/sdU*/9fat /dev/sdXX/9fat /dev/sdU*/data /dev/sdXX/data) 42} 43for(d in $disks){ 44 if(! ~ $done yes) { 45 if(~ $d sdU*.[0-9]* sdXX*) 46 d=/dev/$d/data 47 if(test -e $d){ 48 name=`{echo $d | sed 's/.*(sd(XX|U[0-9]+\.[0-9]+)).*/\1/'} 49 if(~ $#mtpt 0) 50 mnt=/n/$name 51 if not 52 mnt=$mtpt 53 # don't mount it if it seems to be already mounted. 54 # if(! test -e $mnt/* && grep -s geometry /dev/$name/ctl) 55 { 56 blk = `{disk/fdisk -p $d | 57 awk '/^part dos / {print $3}'} 58 if (! ~ $#blk 0 && ~ $blk [0-9]*) 59 d=$d:$blk 60 if (mount -c <{dossrv -sf $d >[2]/dev/null} $mnt) { 61 echo $mnt 62 done = yes 63 } 64 } 65 } 66 } 67} 68exit '' 69