fmtinsns.pl 927 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/perl
  2. #
  3. # Re-align the columns in insns.dat, and enforce case conventions
  4. #
  5. @cols = (0, 16, 48, 96);
  6. while ($line = <STDIN>) {
  7. chomp $line;
  8. if ($line !~ /^\s*(\;.*|)$/) {
  9. ($ln = $line) =~ s/\s+$//;
  10. if ($line =~ /^\s*(\S+)\s+(\S+)\s+(\S+|\[.*\])\s+(\S+)\s*$/) {
  11. @fields = ($1, $2, $3, $4);
  12. $fields[0] = "\U$fields[0]" unless ($fields[0] =~ /^[^a-z]+cc$/);
  13. $fields[3] =~ s/\,+$//;
  14. $fields[3] = "\U$fields[3]" unless ($fields[3] eq 'ignore');
  15. $c = 0;
  16. $line = '';
  17. for ($i = 0; $i < scalar(@fields); $i++) {
  18. if ($i > 0 && $c >= $cols[$i]) {
  19. $line .= ' ';
  20. $c++;
  21. }
  22. while ($c < $cols[$i]) {
  23. $line .= "\t";
  24. $c = ($c+8) & ~7;
  25. }
  26. $line .= $fields[$i];
  27. for ($j = 0; $j < length($fields[$i]); $j++) {
  28. if (substr($fields[$i], $j, 1) eq "\t") {
  29. $c = ($c+8) & ~7;
  30. } else {
  31. $c++;
  32. }
  33. }
  34. }
  35. }
  36. }
  37. print $line, "\n";
  38. }