diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 21ca139f..ca9869d1 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2688,6 +2688,7 @@ Shell: - .zsh interpreters: - bash + - rc - sh - zsh ace_mode: sh diff --git a/samples/Shell/filenames/9fs b/samples/Shell/filenames/9fs new file mode 100644 index 00000000..70c49617 --- /dev/null +++ b/samples/Shell/filenames/9fs @@ -0,0 +1,55 @@ +#!/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 kfs + if(! test -f /srv/kfs) + disk/kfs + mount -c /srv/kfs /n/kfs +case dump + mount /srv/boot /n/dump dump >[2]/dev/null || + mount /srv/boot /n/dump main/archive || + mount /srv/boot /n/dump dump # again to print error +case snap + mount /srv/boot /n/snap main/snapshot +case other + mount -C /srv/boot /n/other other +case juke # ye olde file server + srv -q il!jukefs && mount /srv/il!jukefs /n/juke +case sources + srv -nq tcp!sources.cs.bell-labs.com sources /n/sources +case sourcesdump + 9fs sources + mount -n /srv/sources /n/sourcesdump main/archive +case sourcessnap + 9fs sources + mount -n /srv/sources /n/sourcessnap main/snapshot +# 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!plan9.bell-labs.com!wiki' wiki /mnt/wiki +case * + switch($#*){ + case 1 + srv -m $1 + case * + srv -m $1 $1 $2 + } +} diff --git a/samples/Shell/filenames/man b/samples/Shell/filenames/man new file mode 100644 index 00000000..37043d16 --- /dev/null +++ b/samples/Shell/filenames/man @@ -0,0 +1,149 @@ +#!/bin/rc +# man - print manual pages +rfork e + +. /sys/man/fonts + +cmd=n +sec=() +S=/sys/man +d=0 + +fn roff { + preproc=() + postproc=cat + x=`{doctype $2} + if (~ $1 t) { + if(~ $x *grap*) + preproc=($preproc grap) + if(~ $x *pic*) + preproc=($preproc pic) + Nflag=-Tutf + } + if not { + Nflag='-N' + Lflag='-rL1000i' + # setting L changes page length to infinity (sed script removes empty lines) + if (grep -s '^\.(2C|sp *[0-9]*\.)' $2) + postproc=col + } + if(~ $x *eqn*) + preproc=($preproc eqn) + if(~ $x *tbl*) + preproc=($preproc tbl) + {echo -n $FONTS; cat $2 [1=2] + exit + } + if(test -d $S/$1){ + sec=($sec $1) + shift + } + if not + switch($1) { + case -b ; cmd=b ; shift + case -n ; cmd=n ; shift + case -P ; cmd=P ; shift + case -p ; cmd=p ; shift + case -S ; search=no ; shift + case -t ; cmd=t ; shift + case -w ; cmd=w ; shift + case * ; d=1 + } +} +if(~ $#sec 0) { + sec=`{ls -pd $S/[0-9]* } +} +ix=$S/$sec/INDEX +if(~ $#* 1) pat='^'^$1^' ' +if not pat='^('^`{echo $* | sed 's/ /|/g'}^') ' +fils=() +if(~ $search yes) +for(i in $S/$sec){ + if(/bin/test -f $i/INDEX){ + try=`{grep -i $pat $i/INDEX | sed 's/^[^ ]* //' | sort -u} + if(! ~ $#try 0) + fils=($fils $i/$try) + } +} +# bug: should also do following loop if not all pages found +if(~ $#fils 0) { + # nothing in INDEX. try for file of given name + for(i) { + if(~ $i intro) i=0intro + for(n in $sec) { + try=`{echo $S/$n/$i | tr A-Z a-z} + if (/bin/test -f $try) + fils=($fils $try) + } + } + if(~ $#fils 0) { + echo 'man: no manual page' >[1=2] + exit 'no man' + } +} +for(i in $fils) { + if(! /bin/test -f $i) + echo need $i >[1=2] + if not { + switch($cmd) { + case w + echo $i + + case t + roff t $i + + case p + roff t $i | grep -v '^x X html' | proof + + case P + roff t $i | page + + case n + roff n $i | sed ' + ${ + /^$/p + } + //N + /^\n$/D' + + case b + x=`{echo $i | sed 's;/sys/man/(.*)/(.*);\1 \2;'} + if(~ $x(2) 0intro) x=($x(1) intro) + roff n $i | sed ' + ${ + /^$/p + } + //N + /^\n$/D' | + plumb -i -d edit -a 'action=showdata filename=/man/'$x(2)^'('$x(1)^')' + } + } +}