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