ref: 374de2252e8f8e797ed93fcd853216c2e6fd3264
dir: /fn/
# audio # convert audio file to mp3 fn 2mp3{ play -o /fd/1 >[2]/dev/null | audio/pcmconv -i s16r1c1 -o S16r1c1 | audio/mp3enc -q 0 } # playback samples from microphone (needs setup) fn admp{ dd -bs 4x441 </dev/audio >/dev/audio } # audio file name standardization fn mfmt{ sed $"*^';s/^''//;s/''$//;s/[\[\]\!,\(\)''\$\*\?:\;=]//g;s/\&/and/g;s/ - /./g;s/\.[^\.]+$/.mp3/;s/ /./g;s/\.\././g' | tr A-Z a-z } # decode audio files(s) and visualize with pplay(1) fn pcm{ @{o=(); while(~ $1 -?) o=($o $1) && shift; play -o /fd/1 $* >[2]/dev/null | pplay $o}} # same, without temporary viariables (???) fn ppcm{ *=($*($#*) $* $#*) play -o /fd/1 $1 >[2]/dev/null | pplay $*(2-$*($#*)) } # convert a wolf3d digital audio lump fn wpcm{ audio/pcmconv -i u8c1r7000 -o s16c2r44100 <$1 >/dev/audio } # play(1) auxiliaries # skip to next track fn fw{ for(i in `{fpl}) echo 'echo kill >/proc/'^$i^/note } # pause playback fn sto{ for(i in `{fpl}) echo 'echo stop >/proc/'^$i^/ctl } # resume playback fn sta{ for(i in `{fpl}) echo 'echo start >/proc/'^$i^/ctl } # shortcuts for first play(1) process fn Fw{ fw | sed 1q | rc } fn Sta{ sta | sed 1q | rc } fn Sto{ sto | sed 1q | rc } # recursively list all files in arguments and play shuffled list forever fn shp{ *=`"{lr -Q $*}; while(! ~ $#* 0) play `' ' {echo -n $* | shl} } # shuffle play pre-arranged list of files forever fn shpp{ status='' while(~ $status '') play `{shl <$1} } # graphics # display wolf3d graphic lump using wpic and extracted picheader file fn wp{ a=(`{dd </n/tapefs/piched000.^$2 >[2]/dev/null -bs 4 -count 1 -skip $1 | xd -s -2d | sed 's/ 0+/ /g'}) wpic -x $a(2) -y $a(3) $*(3-) /n/tapefs/pic^$1^.$2 | page a=() } # programming # dump assembly fn asm{ 6c -FTVwSo /dev/null $1 } # ridiculous shortcut for one-file program builds fn b{ mk -f <{echo ' </$objtype/mkfile OFILES='$1'.$O </sys/src/cmd/mkone'} } # dump c function body (thanks aiju) fn catfn{ sed -n '/^'$1'\(/ {x;p;x;};/^'$1'\(/,/^}/p;h' *.c } # # file processing # recursive chown implementation, given fs access fn chown{ for(i in `' '{lr -Qd $*(2-)}){ chgrp $1 $i && chgrp -o $1 $i } } # silly recursive grep(1) fn gr{ lr -Q $*(2-) | xargs grep -n $1 } # lower filenames fn lw{ for(i in $*) mv $i `' '{echo $i | tr A-Z a-z} } # recursive copy using mkfs(1) fn mkcp{ disk/mkfs -z 4096 -s $1 -d $*(2-) /sys/lib/sysconfig/proto/allproto } # printing # show troff document fn doc{ troff -ms <$1 | page } # show ps document fn doc2{ echo `{doctype $1} '| lp -dstdout | page' | rc } # shortcuts # connect to aijuboard fn aib{ echo b115200 >/dev/eiaU*.1ctl && con -r /dev/eiaU*.1 } # wircrc usage fn ii{ wircrc -T -p 6697 -c 'irc.freenode.net!#cat-v,irc.freenode.net!#setecastronomy' -n qwx } # quake2 crbot fn q2cr{ qk2 -g crbot $* +set deathmatch 1 +set ctf 0 } # quake2 ctf fn q2f{ qk2 -g ctf $* +set ctf 1 } # display shuffled list of images fn shi{ page `' '{lr -Q $* | shl | sed 5000q} } # default vt(1) params fn t{ vt -2bf /lib/font/bit/fixed/unicode.6x10.font } # launch graphical program on a unix host fn ff{ A=$*(2-); ssh $user@$1 'DISPLAY=:0 '^$"A^' >/dev/null 2>&1'; A=() } # rio # clear window fn clr{ {}>/dev/text } # get current window dimensions fn wsz{ dd -bs 4x12 -count 1 </mnt/wsys/wctl >[2]/dev/null | awk '{print $3-$1, $4-$2}' } # sys # bind hg repo to root and execute hg command fn fhg{ bind -ac /dist/plan9front /; fn fhg; hg $* } # hangup connections to given hosts fn nctl{ echo 'echo hangup >/net/'^`{netstat -n|sed -n 's,^([^ ]+) +([^ ]+) +[^ ]+ +[^ ]+ +[^ ]+ +'$1'.*,\1/\2/ctl\;,p'} } # show announced ports and established connections fn netopn{ netstat -n | grep 'Established|Listen' } # get list of /proc dirs for matched process names fn pn{ ps -n | sed -n '/.* '$1'$/s,[^ ]+ +([0-9]+).*,/proc/\1/,p' } # grep process table fn psd{ *=`{echo $"* | sed 's/ /|/g'}; ps -n | grep $* } # reset vga(8) state with vesa fn vr{ @{rfork n; aux/realemu; aux/vga -lm vesa $vgasize} } # mail # manual mail archive fn arc{ cat >/mail/box/qwx/arc/`{date -n} } # update dir with new messages from archived mailing list fn mlu{ cd /n/lists.9front.org/lists/$1; tar c `{diff <{lr} <{cd $2; lr} | sed '/^[^<]/d;s/< //'} | @{cd $2; tar xT} } # webshit # simple ninetimes fn 9t{ hget http://code.9front.org/hg/plan9front | htmlfmt | sed '1,6d;$d;/^[A-Za-z,]+ [0-9][0-9] [A-Za-z]+ 20[0-9][0-9] [0-9:]+ [0-9\+\-]+/{N;s/\n/ /;}' } # query english vocabulary fn geq{ plumb http://www.dictionary.com/browse/^$1 } # query german vocabulary fn gq{ plumb 'http://www.dict.cc/?s='^$* } # query weather fn wth{ plumb http://wttr.in/$1 }