75 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
./remap  |
 | 
						|
sort -n -k 8 -k6 -k 4 -k 2 |
 | 
						|
awk '
 | 
						|
function emit()
 | 
						|
{
 | 
						|
  if (ascii == 0)
 | 
						|
    return;
 | 
						|
 | 
						|
  a[j++] = map FS mods FS code FS ascii
 | 
						|
  if (j == 3 && a[0] ~ /^UGDFIE/ && a[1] ~ /^UGDFIE/) {
 | 
						|
    map = "UGDFIE"
 | 
						|
    mods = 3
 | 
						|
    j = 0
 | 
						|
    a[j++] = map FS mods FS code FS ascii
 | 
						|
  }
 | 
						|
 | 
						|
  if ($8 != ascii || $6 != code) {
 | 
						|
    for (i=0; i<j; i++)
 | 
						|
      print a[i]
 | 
						|
    j = 0
 | 
						|
  }
 | 
						|
}
 | 
						|
BEGIN {
 | 
						|
  L[0] = "U"
 | 
						|
  L[1] = "G"
 | 
						|
  L[2] = "D"
 | 
						|
  L[3] = "F"
 | 
						|
  L[4] = "I"
 | 
						|
  L[5] = "E"
 | 
						|
  emit()
 | 
						|
}
 | 
						|
{
 | 
						|
  if ($8 != ascii || $6 != code || $4 != mods) {
 | 
						|
    emit()
 | 
						|
    map = "------"
 | 
						|
    mods = $4
 | 
						|
    code = $6
 | 
						|
    ascii = $8
 | 
						|
  }
 | 
						|
  map = substr(map, 1, $2) L[$2] substr(map, $2+2, length(map)-$2)
 | 
						|
}
 | 
						|
END {
 | 
						|
  $8 = 0
 | 
						|
  emit()
 | 
						|
}' |
 | 
						|
 | 
						|
awk '{
 | 
						|
  map = ""
 | 
						|
  if ($1~/U/) map = map "+US"; else map = map "   "
 | 
						|
  if ($1~/G/) map = map "+GB"; else map = map "   "
 | 
						|
  if ($1~/D/) map = map "+DE"; else map = map "   "
 | 
						|
  if ($1~/F/) map = map "+FR"; else map = map "   "
 | 
						|
  if ($1~/I/) map = map "+IT"; else map = map "   "
 | 
						|
  if ($1~/E/) map = map "+ES"; else map = map "   "
 | 
						|
  if ($2 == 0) mod = "NOMOD"
 | 
						|
  if ($2 == 1) mod = "SHIFT"
 | 
						|
  if ($2 == 2) mod = "ALTGR"
 | 
						|
  if ($2 == 3) mod = "EVERY"
 | 
						|
  printf "  { %-18s +%s, 0x%02x, %3d },", map, mod, $3, $4
 | 
						|
  if (32 < $4 && $4 <= 126 && $4 != last)
 | 
						|
    printf " // '"'"'%c'"'"'", $4
 | 
						|
  last = $4
 | 
						|
  printf "\n"
 | 
						|
}' > keys.txt
 | 
						|
 | 
						|
echo "Sanity check:"
 | 
						|
for C in +US +GB +DE +FR +IT +ES
 | 
						|
do
 | 
						|
  echo -n "$C:"
 | 
						|
  grep $C keys.txt | awk -F, '{print $3}' | sort -u | wc -l
 | 
						|
done
 | 
						|
 |