new_table 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/bin/sh
  2. em_table=$1
  3. h=${2-.}
  4. d=${3-.}
  5. set `grep fpseu $em_table`
  6. p=$2
  7. set `grep fmnem $em_table`
  8. m=$2
  9. ed - $em_table <<'A' > X
  10. 1,/^$/g/ /s// /gp
  11. A
  12. ed - $em_table <<'A' | awk '{$2=$2+'$p'; print}' > Y
  13. 1,/^$/d
  14. 1,/^$/g/ /s// /gp
  15. A
  16. ed - $em_table <<'A' | awk '{print $0,'$m'+i++}' > Z
  17. 1,/^$/d
  18. 1,/^$/d
  19. 1,/^$/g/ /s// /gp
  20. A
  21. i=`wc -l <Y`
  22. echo 'lpseu' `expr $i + $p - 1` >>X
  23. i=`wc -l <Z`
  24. echo 'lmnem' `expr $i + $m - 1` >>X
  25. ed - X <<'A' > $h/em_spec.h
  26. g/^/s//#define sp_/p
  27. A
  28. ed - Y <<'A' > $h/em_pseu.h
  29. g/ \(.*\) .*/s// \1/
  30. g/\(.*\) \(.*\)/s//#define ps_\1 \2/p
  31. A
  32. ed - Z <<'A' > $h/em_mnem.h
  33. g/ .* /s// /
  34. g/\(.*\) \(.*\)/s//#define op_\1 \2/p
  35. A
  36. (
  37. echo 'char em_pseu[][4] = {'
  38. ed - Y <<'A'
  39. g/\(...\).*/s// "\1",/p
  40. A
  41. echo '};'
  42. ) > $d/em_pseu.c
  43. (
  44. echo 'char em_mnem[][4] = {'
  45. ed - Z <<'A'
  46. g/\(...\).*/s// "\1",/p
  47. A
  48. echo '};'
  49. ) > $d/em_mnem.c
  50. (
  51. echo '#include <em_flag.h>
  52. char em_flag[] = {'
  53. ed - Z <<'A' | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
  54. g/^... /s///
  55. g/ .*/s///
  56. g/\(.\)\(.\)/s//PAR_\1 | FLO_\2/
  57. g/-/s//NO/g
  58. g/.*/s// &,/p
  59. A
  60. echo '};'
  61. ) > $d/em_flag.c
  62. rm X Y Z