fn delete_post{ a_dir=$barf_root/$"barf_dir/src/$a_id if(test -d $a_dir){ rm -rf $a_dir && {echo ',x/^'$a_id'\/.*\n/d'; echo w; echo q} | sam -d $barf_root/$"barf_dir/tags >[2]/dev/null } post_redirect $base_url^$barf_base_uri } fn display_footer{ if(test -f $barf_root/$"barf_dir/_werc/barf/footer) cat $barf_root/$"barf_dir/_werc/barf/footer if not if(test -f $barf_root/_werc/barf/footer) cat $barf_root/_werc/barf/footer if not cat apps/barf/barf/footer } fn display_header{ if(test -f $barf_root/$"barf_dir/_werc/barf/header) cat $barf_root/$"barf_dir/_werc/barf/header if not if(test -f $barf_root/_werc/barf/header) cat $barf_root/_werc/barf/header if not cat apps/barf/barf/header } fn display_login{ echo '
username:
password:
' } fn display_prevnext{ if(test $stop -gt `{echo 1+^$posts_per_page | bc}){ nprev=`{echo $start^-1-^$posts_per_page | bc} prev=' prev | ' } if(test $#posts -gt $posts_per_page){ nnext=`{echo $stop^+1 | bc} next=' next ' } echo '
'$"prev' '$"next'
' } fn display_sidebar{ if(test -f $barf_root/$"barf_dir/_werc/barf/sidebar) cat $barf_root/$"barf_dir/_werc/barf/sidebar if not if(test -f $barf_root/_werc/barf/sidebar) cat $barf_root/_werc/barf/sidebar if not cat apps/barf/barf/sidebar } fn dsrc{ low=`{ls -p $barf_root/$"barf_dir/src | sort -n | sed 1q} high=$a_id if(~ $#low 1 && ~ $#high 1){ cd $barf_root/$"barf_dir/src && rm -rf `{seq $low $high} && { for(i in `{seq $low $high}) echo ',x/^'$i'\/.*\n/d' echo w echo w echo q } | sam -d $barf_root/$"barf_dir/tags >[2]/dev/null } post_redirect $base_url^$barf_base_uri } fn edit_form{ if(~ $#a_id 0) name=add if not{ name=update a_dir=$barf_root/$"barf_dir/src/$a_id for(x in $barf_items){ if(~ $x img) a_img=`{ls -p $a_dir/img | sed 1q} if(~ $x tags) a_tags=`{ls -p $a_dir/tags} if not $x=`{cat $a_dir/$x} } } echo '
' if(~ $name update) echo '' for(x in $barf_items){ if(~ $x body){ echo '
' \ 'body:
' \ '
' } if not if(~ $x img){ echo '
' \ 'image:
' \ '   ' \ 'download: ' \ '
' } if not if(~ $x tags){ echo '
' \ 'tags:   (space separated list of tags)
' \ '' \ '
' } if not{ echo '
' \ $"x':
' \ '' \ '
' } } echo '
' \ '' \ '
' } fn edit_post{ if(~ $#a_id 0){ a_id=`{echo `{ls -p $barf_root/$"barf_dir/src | sort -n | tail -1}^+1 | bc} if(~ $#a_id 0) a_id=1 while(test -d $barf_root/$"barf_dir/src/$a_id) a_id=`{echo $a_id^+1 | bc} } a_dir=$barf_root/$"barf_dir^src/$a_id mkdir -p $a_dir/img $a_dir/tags rm -f $a_dir/tags/* for(x in $barf_items){ if(~ $x date){ if(! ~ $#a_date 0) echo $"a_date >$a_dir/date if not date >$a_dir/date } if not if(~ $x tags){ if(! ~ $#a_tags 0){ a_tags=`{echo $"a_tags | sed 's/[^A-Za-z0-9_\- ]//g'} ifs=' '{a_tags=`{echo -n $a_tags}} { t=1 while(test $t -le $#a_tags){ >$a_dir/tags/$a_tags($t) t=`{echo $t^+1 | bc} } } for(i in $a_tags) echo $a_id'/tags/'$i >>$barf_root/$"barf_dir/tags } } if not if(! ~ $x img tags){ item='a_'$"x if(! ~ $$item ''){ >$a_dir/$x echo $$item >$a_dir/$x } } } if(~ $a_download 1){ switch($barf_type){ case image rm -f $a_dir/img/* img=$a_dir/img/^`{date -n}^.^`{echo $"a_img | sed 's/^.*\.(gif|GIF)$/gif/g; s/^.*\.(jpg|jpeg|JPG|JPEG)$/jpg/g; s/^.*\.(png|PNG)$/png/g; s/^.*\.(tif|TIF|tiff|TIFF)$/tif/g' } thumb=$a_dir/img/small.^`{basename $img | sed 's/\..*$//g'}^.png if(test -f /boot/factotum){ @{ rfork n if(test -f /rc/bin/hget) webfs hget $"a_img >$img #magick/convert $img -resize 500x600 $thumb switch($img){ case *.bmp cmd=bmp case *.gif cmd=gif case *.ico cmd=ico case *.jpg cmd=jpg case *.png cmd=png case *.tif cmd=tif case *.tga cmd=tga } $cmd -9et <$img | resample -x 500 | topng >$thumb } } if not{ curl -s -o $"a_img >$img convert $img -resize 500x600 $thumb } case url if(test -f /boot/factotum){ @{ rfork n if(test -f /rc/bin/hget) webfs hget $"a_link | htmlfmt | fmt >$a_dir/body } } if not curl -s $"a_link | htmlfmt | fmt >$a_dir/body } } if(! ~ $gp 1) post_redirect $base_url^$barf_base_uri } fn get_post_list{ if(~ $id [0-9]*) posts=$id if not{ posts=`{ if(~ $show_ascending 1) sort=(sort -n) if not sort=(sort -nr) if(~ $tags all) ls -p $barf_root/$"barf_dir/src | grep -e '^[0-9]*$' | eval $sort | sed -n $start^,^$stop^p # awk 'NR=='$start',NR=='$stop' {print;}' if not grep -e '^.*\/'$tags'$' $barf_root/$"barf_dir/tags | awk -F '/' '{print $1;}' | eval $sort | uniq | sed -n $start^,^$stop^p } if(! ~ $posts [0-9]*) posts=() } } fn get_start{ if(~ $#start 0) start=1 } fn get_stop{ if(~ $#stop 0) stop=`{echo $start^+^$posts_per_page | bc} } fn get_tags{ if(~ $#tags 0) tags=all } fn load_get_args{ if(~ $REQUEST_METHOD GET && ~ $#get_args 0 && ~ $REQUEST_URI *'='*){ ifs='&' { a=`{echo $"REQUEST_URI | sed 's/(^\/|#.*$)//g'} for(pair in $a){ ifs='=' { pair=`{echo -n $pair} } n='get_arg_'^`{echo $pair(1) | urldecode | tr -cd 'a-zA-Z0-9_'} get_args=( $get_args $n ) ifs=() { $n=`{echo -n $pair(2) | urldecode | tr -d ' '} } } } pair=() } } fn parse_get_args{ if(! ~ $#get_arg_a_func 0) a_func=$get_arg_a_func if(! ~ $#get_arg_a_id 0) a_id=$get_arg_a_id if(! ~ $#get_arg_id 0) id=$get_arg_id if(! ~ $#get_arg_start 0) start=$get_arg_start if(! ~ $#get_arg_stop 0) stop=$get_arg_stop if(! ~ $#get_arg_reply 0) reply=$get_arg_reply if(! ~ $#get_arg_tags 0) tags=$get_arg_tags } fn parse_post_args{ for(x in $barf_items){ a='a_'$"x p='post_arg_'$"a $a=$$p } if(! ~ $#post_arg_a_download 0) a_download=$post_arg_a_download if(! ~ $#post_arg_a_func 0) a_func=$post_arg_a_func if(! ~ $#post_arg_fake 0) fake=$post_arg_fake if(! ~ $#post_arg_a_id 0) a_id=$post_arg_a_id if(! ~ $#post_arg_url 0) url=$post_arg_url } fn print_edit{ edit='edit' delete='delete' dsrc='dsrc' echo $"edit' | '$"delete' | '$"dsrc } fn print_id{ echo 'No.'$"a_id'' } fn print_img{ a_img=`{ls -p $a_dir/img/[0-9]*} a_thumb=`{ls -p $a_dir/img/small*} if(! ~ $#a_img 0) if(~ $#a_thumb 0) a_thumb=$a_img echo '' } fn print_tags{ a_tags=`{ls -p $a_dir/tags} a_tags=`{for(t in $a_tags) echo ''$t', '} a_tags=`{echo $a_tags | awk '{print substr($0, 1, length($0) -1)}'} echo ''$"a_tags'' } fn print_title{ a_title=`{cat $a_dir/title} if(! ~ $#a_title 0){ if(~ $barf_type log url) echo ''$"a_title'' if not echo ''$"a_title'' } } fn redirect_bots{ if(! ~ $fake fake || ! ~ $url '') post_redirect http://google.com } fn urldecode { awk ' BEGIN { hextab ["0"] = 0; hextab ["8"] = 8; hextab ["1"] = 1; hextab ["9"] = 9; hextab ["2"] = 2; hextab ["A"] = hextab ["a"] = 10 hextab ["3"] = 3; hextab ["B"] = hextab ["b"] = 11; hextab ["4"] = 4; hextab ["C"] = hextab ["c"] = 12; hextab ["5"] = 5; hextab ["D"] = hextab ["d"] = 13; hextab ["6"] = 6; hextab ["E"] = hextab ["e"] = 14; hextab ["7"] = 7; hextab ["F"] = hextab ["f"] = 15; } { decoded = "" i = 1 len = length ($0) while ( i <= len ) { c = substr ($0, i, 1) if ( c == "%" ) { if ( i+2 <= len ) { c1 = substr ($0, i+1, 1) c2 = substr ($0, i+2, 1) if ( hextab [c1] == "" || hextab [c2] == "" ) { print "WARNING: invalid hex encoding: %" c1 c2 | "cat >&2" } else { code = 0 + hextab [c1] * 16 + hextab [c2] + 0 c = sprintf ("%c", code) i = i + 2 } } else { print "WARNING: invalid % encoding: " substr ($0, i, len - i) } } else if ( c == "+" ) { c = " " } decoded = decoded c ++i } printf "%s", decoded } ' }