shithub: rc

Download patch

ref: f7a10f3c06fa260412fe582a15f9b1952f1e7939
parent: d2eefc38aec3bdc0c36d1b11d8906b1ce251d496
author: qwx <qwx@sciops.net>
date: Thu Jan 9 10:13:02 EST 2020

add fn: rc(1) functions, shortcuts

--- /dev/null
+++ b/fn
@@ -1,0 +1,126 @@
+# 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 }
--- /dev/null
+++ b/fpl
@@ -1,0 +1,6 @@
+#!/bin/rc
+ps -n | awk '
+/ play$/ { g[++i] = $3 }
+{ for(n=1; n<=i; n++) if(g[n] == $3) p[n] = $2 }
+END { for(n=1; n<=i; n++) print p[n] }
+'
--- a/play/fn
+++ /dev/null
@@ -1,18 +1,0 @@
-# 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} }
--- a/play/fpl
+++ /dev/null
@@ -1,6 +1,0 @@
-#!/bin/rc
-ps -n | awk '
-/ play$/ { g[++i] = $3 }
-{ for(n=1; n<=i; n++) if(g[n] == $3) p[n] = $2 }
-END { for(n=1; n<=i; n++) print p[n] }
-'