#!/bin/bash #prime the "old" states. it seems that stepgen likes to start with phase-A=1 read oa ob c < $1 count=0 # if a leads b, then the count goes up. if b leads a, the count goes down # if a and b stay the same, the count stays the same # if a and b both change, it's an error while read a b c; do case "$oa$a$ob$b" in 0000) ;; 0001) count=$((count-1));; 0010) count=$((count+1));; 0011) ;; 0100) count=$((count+1));; 0101) exit 1;; 0110) exit 1;; 0111) count=$((count-1));; 1000) count=$((count-1));; 1001) exit 1;; 1010) exit 1;; 1011) count=$((count+1));; 1100) ;; 1101) count=$((count+1));; 1110) count=$((count-1));; 1111) ;; *) echo "$oa$a$ob$b"; exit 1 esac oa=$a; ob=$b # if our count doesn't match the stepgen count, it's an error if [ $c -ne $count ]; then exit 1; fi done < $1 # if the end position isn't 1280, it's an error if [ $count -ne 1280 ]; then exit 1; fi exit 0