diff --git a/contrib/gbdiff.bash b/contrib/gbdiff.bash index 39014040..2cf7ecd2 100755 --- a/contrib/gbdiff.bash +++ b/contrib/gbdiff.bash @@ -31,29 +31,29 @@ diff <(xxd $1) <(xxd $2) | while read -r LINE; do # Separator between files switches states echo $LINE STATE=3 - elif echo $LINE | grep -Eq '^[0-9]+(,[0-9]+)?c[0-9]+(,[0-9]+)?'; then + elif grep -Eq '^[0-9]+(,[0-9]+)?[cd][0-9]+(,[0-9]+)?' <<< "$LINE"; then # Line info resets the whole thing STATE=1 elif [ $STATE -eq 1 -o $STATE -eq 3 ]; then # Compute the GB address from the ROM offset - OFS=$(echo $LINE | cut -d ' ' -f 2 | tr -d ':') + OFS=$(cut -d ' ' -f 2 <<< "$LINE" | tr -d ':') BANK=$((0x$OFS / 0x4000)) ADDR=$((0x$OFS % 0x4000 + ($BANK != 0) * 0x4000)) # Try finding the preceding symbol closest to the diff if [ $STATE -eq 1 ]; then STATE=2 - SYMFILE=$(echo $1 | cut -d '.' -f 1).sym + SYMFILE=${1%.*}.sym else STATE=4 - SYMFILE=$(echo $2 | cut -d '.' -f 1).sym + SYMFILE=${2%.*}.sym fi EXTRA=$(if [ -f "$SYMFILE" ]; then # Read the sym file for such a symbol # Ignore comment lines, only pick matching bank - grep -Fv ';' "$SYMFILE" | + cut -d ';' -f 1 "$SYMFILE" | grep -Ei $(printf "^%02x:" $BANK) | while read -r SYMADDR SYM; do - SYMADDR=$((0x$(echo $SYMADDR | cut -d ':' -f 2))) + SYMADDR=$((0x${SYMADDR#*:})) if [ $SYMADDR -le $ADDR ]; then printf " (%s+%#x)\n" $SYM $(($ADDR - $SYMADDR)) fi @@ -63,9 +63,9 @@ diff <(xxd $1) <(xxd $2) | while read -r LINE; do printf "%02x:%04x %s\n" $BANK $ADDR $EXTRA fi if [ $STATE -eq 2 -o $STATE -eq 4 ]; then - OFS=$(echo $LINE | cut -d ' ' -f 2 | tr -d ':') + OFS=$(cut -d ' ' -f 2 <<< "$LINE" | tr -d ':') BANK=$((0x$OFS / 0x4000)) ADDR=$((0x$OFS % 0x4000 + ($BANK != 0) * 0x4000)) - printf "%s %02x:%04x: %s\n" "$(echo $LINE | cut -d ' ' -f 1)" $BANK $ADDR "$(echo $LINE | cut -d ' ' -f 3-)" + printf "%s %02x:%04x: %s\n" "${LINE:0:1}" $BANK $ADDR "${LINE#*: }" fi done