scripts

Various scripts for UNIX-like systems
git clone https://git.tronto.net/scripts
Download | Log | Files | Refs | README

alg (5687B)


      1 #!/bin/sh
      2 
      3 # Script to store and access blindsolving algs (speedcubing stuff)
      4 
      5 # Example: alg e FG - opens up editor to edit $basedir/edges/$ebuffer/RD/LD
      6 # Example: alg c UBL E - prints out all first algs for UBL-FDR-*
      7 
      8 usage() {
      9 	echo "Usage: alg [[edit] (c|e|w|x) [buffer] (1 letter|2 letters)]"
     10 }
     11 
     12 default_editor=vi
     13 basedir="$HOME/box/speedcubing/bld/algs"
     14 ebuffer=UR
     15 cbuffer=UFR
     16 wbuffer=UFr
     17 xbuffer=Ubl
     18 
     19 edge() {
     20 	[ "$1" = "a" ] && echo FU
     21 	[ "$1" = "b" ] && echo UF
     22 	[ "$1" = "c" ] && echo UL
     23 	[ "$1" = "d" ] && echo UB
     24 	[ "$1" = "e" ] && echo FD
     25 	[ "$1" = "f" ] && echo RD
     26 	[ "$1" = "g" ] && echo LD
     27 	[ "$1" = "i" ] && echo FR
     28 	[ "$1" = "j" ] && echo LU
     29 	[ "$1" = "k" ] && echo RB
     30 	[ "$1" = "l" ] && echo DF
     31 	[ "$1" = "m" ] && echo DB
     32 	[ "$1" = "n" ] && echo DR
     33 	[ "$1" = "o" ] && echo FL
     34 	[ "$1" = "p" ] && echo DL
     35 	[ "$1" = "r" ] && echo BU
     36 	[ "$1" = "s" ] && echo BD
     37 	[ "$1" = "t" ] && echo BL
     38 	[ "$1" = "u" ] && echo BR
     39 	[ "$1" = "v" ] && echo LF
     40 	[ "$1" = "w" ] && echo LB
     41 	[ "$1" = "z" ] && echo RF
     42 }
     43 
     44 corner() {
     45 	[ "$1" = "a" ] && echo FUL
     46 	[ "$1" = "b" ] && echo UBL
     47 	[ "$1" = "c" ] && echo UFL
     48 	[ "$1" = "d" ] && echo UBR
     49 	[ "$1" = "e" ] && echo FDR
     50 	[ "$1" = "f" ] && echo RDB
     51 	[ "$1" = "g" ] && echo LDF
     52 	[ "$1" = "j" ] && echo LUF
     53 	[ "$1" = "k" ] && echo RUB
     54 	[ "$1" = "l" ] && echo DFR
     55 	[ "$1" = "m" ] && echo DBR
     56 	[ "$1" = "n" ] && echo DFL
     57 	[ "$1" = "o" ] && echo FDL
     58 	[ "$1" = "p" ] && echo DBL
     59 	[ "$1" = "r" ] && echo BUR
     60 	[ "$1" = "s" ] && echo BUL
     61 	[ "$1" = "t" ] && echo BDL
     62 	[ "$1" = "u" ] && echo BDR
     63 	[ "$1" = "v" ] && echo LUB
     64 	[ "$1" = "w" ] && echo LDB
     65 	[ "$1" = "z" ] && echo RDF
     66 }
     67 
     68 wing() {
     69 	[ "$1" = "a" ] && echo FUl
     70 	[ "$1" = "b" ] && echo URb
     71 	[ "$1" = "c" ] && echo ULf
     72 	[ "$1" = "d" ] && echo UBl
     73 	[ "$1" = "e" ] && echo FDr
     74 	[ "$1" = "f" ] && echo RDb
     75 	[ "$1" = "g" ] && echo LDf
     76 	[ "$1" = "i" ] && echo FRu
     77 	[ "$1" = "j" ] && echo LUb
     78 	[ "$1" = "k" ] && echo RBu
     79 	[ "$1" = "l" ] && echo DFl
     80 	[ "$1" = "m" ] && echo DBr
     81 	[ "$1" = "n" ] && echo DRf
     82 	[ "$1" = "o" ] && echo FLd
     83 	[ "$1" = "p" ] && echo DLb
     84 	[ "$1" = "r" ] && echo BUr
     85 	[ "$1" = "s" ] && echo BDl
     86 	[ "$1" = "t" ] && echo BLu
     87 	[ "$1" = "u" ] && echo BRd
     88 	[ "$1" = "v" ] && echo LFu
     89 	[ "$1" = "w" ] && echo LBd
     90 	[ "$1" = "x" ] && echo RUf
     91 	[ "$1" = "z" ] && echo RFd
     92 }
     93 
     94 xcenter() {
     95 	[ "$1" = "a" ] && echo Ful
     96 	[ "$1" = "b" ] && echo Ufr
     97 	[ "$1" = "c" ] && echo Ufl
     98 	[ "$1" = "d" ] && echo Ubr
     99 	[ "$1" = "e" ] && echo Fdr
    100 	[ "$1" = "f" ] && echo Rdb
    101 	[ "$1" = "g" ] && echo Ldf
    102 	[ "$1" = "i" ] && echo Fur
    103 	[ "$1" = "j" ] && echo Luf
    104 	[ "$1" = "k" ] && echo Rub
    105 	[ "$1" = "l" ] && echo Dfr
    106 	[ "$1" = "m" ] && echo Dbr
    107 	[ "$1" = "n" ] && echo Dfl
    108 	[ "$1" = "o" ] && echo Fdl
    109 	[ "$1" = "p" ] && echo Dbl
    110 	[ "$1" = "r" ] && echo Bur
    111 	[ "$1" = "s" ] && echo Bul
    112 	[ "$1" = "t" ] && echo Bdl
    113 	[ "$1" = "u" ] && echo Bdr
    114 	[ "$1" = "v" ] && echo Lub
    115 	[ "$1" = "w" ] && echo Ldb
    116 	[ "$1" = "x" ] && echo Ruf
    117 	[ "$1" = "z" ] && echo Rdf
    118 }
    119 
    120 edit() {
    121 	mkdir -p "$basedir/$1/$2/$3"
    122 	$editor "$basedir/$1/$2/$3/$4"
    123 }
    124 
    125 showall_c() {
    126 	all_letters="a b c d e f g j k l m n o p r s t u v w z"
    127 	buffer="$1"
    128 	firstletter="$2"
    129 	firsttarget="$(corner $firstletter)"
    130 	for secondletter in $all_letters; do
    131 		secondtarget="$(corner $secondletter)"
    132 		f="$basedir/corners/$buffer/$firsttarget/$secondtarget"
    133 		[ -f "$f" ] || continue
    134 		line="$(head -n 1 "$f")"
    135 		printf '%s   %s\n' "$firstletter$secondletter" "$line"
    136 	done
    137 }
    138 
    139 showall_e() {
    140 	all_letters="a b c d e f g i j k l m n o p r s t u v w z"
    141 	buffer="$1"
    142 	firstletter="$2"
    143 	firsttarget="$(edge $firstletter)"
    144 	for secondletter in $all_letters; do
    145 		secondtarget="$(edge $secondletter)"
    146 		f="$basedir/edges/$buffer/$firsttarget/$secondtarget"
    147 		[ -f "$f" ] || continue
    148 		line="$(head -n 1 "$f")"
    149 		printf '%s   %s\n' "$firstletter$secondletter" "$line"
    150 	done
    151 }
    152 
    153 showall_w() {
    154 	all_letters="a b c d e f g i j k l m n o p r s t u v w x z"
    155 	buffer="$1"
    156 	firstletter="$2"
    157 	firsttarget="$(wing $firstletter)"
    158 	for secondletter in $all_letters; do
    159 		secondtarget="$(wing $secondletter)"
    160 		f="$basedir/wings/$buffer/$firsttarget/$secondtarget"
    161 		[ -f "$f" ] || continue
    162 		line="$(head -n 1 "$f")"
    163 		printf '%s   %s\n' "$firstletter$secondletter" "$line"
    164 	done
    165 }
    166 
    167 showall_x() {
    168 	all_letters="a b c d e f g i j k l m n o p r s t u v w x z"
    169 	buffer="$1"
    170 	firstletter="$2"
    171 	firsttarget="$(xcenter $firstletter)"
    172 	for secondletter in $all_letters; do
    173 		secondtarget="$(xcenter $secondletter)"
    174 		f="$basedir/xcenters/$buffer/$firsttarget/$secondtarget"
    175 		[ -f "$f" ] || continue
    176 		line="$(head -n 1 "$f")"
    177 		printf '%s   %s\n' "$firstletter$secondletter" "$line"
    178 	done
    179 }
    180 
    181 run() {
    182 	if [ "$1" = "edit" ]; then
    183 		editor="$default_editor"
    184 		shift
    185 	else
    186 		editor="cat"
    187 	fi
    188 
    189 	type="$1"
    190 	if [ -z "$3" ]; then
    191 		letters="$2"
    192 		cbuf="$cbuffer"
    193 		ebuf="$ebuffer"
    194 		wbuf="$wbuffer"
    195 		xbuf="$xbuffer"
    196 	else
    197 		letters="$3"
    198 		cbuf="$2"
    199 		ebuf="$2"
    200 		wbuf="$2"
    201 		xbuf="$2"
    202 	fi
    203 
    204 	letter1="$(echo "$letters" | cut -c 1)"
    205 	letter2="$(echo "$letters" | cut -b 2)"
    206 
    207 	[ -z "$letter1" ] && usage && return
    208 
    209 	case "$type" in
    210 	c)
    211 		if [ -n "$letter2" ]; then
    212 			edit corners $cbuf $(corner $letter1) $(corner $letter2)
    213 		else
    214 			showall_c $cbuf $letter1
    215 		fi
    216 		;;
    217 	e)
    218 		if [ -n "$letter2" ]; then
    219 			edit edges $ebuf $(edge $letter1) $(edge $letter2)
    220 		else
    221 			showall_e $ebuf $letter1
    222 		fi
    223 		;;
    224 	w)
    225 		if [ -n "$letter2" ]; then
    226 			edit wings $wbuf $(wing $letter1) $(wing $letter2)
    227 		else
    228 			showall_w $wbuf $letter1
    229 		fi
    230 		;;
    231 	x)
    232 		if [ -n "$letter2" ]; then
    233 			edit xcenters $xbuf $(xcenter $letter1) $(xcenter $letter2)
    234 		else
    235 			showall_x $xbuf $letter1
    236 		fi
    237 		;;
    238 	*)
    239 		usage
    240 		;;
    241 	esac
    242 }
    243 
    244 if [ -n "$1" ]; then
    245 	run $@
    246 else
    247 	while read -r args; do
    248 		[ -n "$args" ] && run $args
    249 	done
    250 fi