home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / system / _palmemu / palmemu.exe / Scripting / Perl / MakeSysTraps.pl < prev    next >
Text File  |  2000-01-27  |  2KB  |  89 lines

  1. #Usage for #define format is `perl MakeSysTraps.pl -d /path/to/systrap.h'.
  2.  
  3. use strict;
  4.  
  5. if (@ARGV == 0)
  6. {
  7.     print <<EOF;
  8. Usage: $0 [-cds] file...
  9. Generates an annotated list of systraps from the named files.
  10.     <default>    Produces output suitable for the build-prc data file.
  11.     -s            Produces an asm include file.
  12.     -d            Produces a bunch of #defines.
  13.     -c            Produces a list of Perl constants.
  14. EOF
  15.     exit;
  16. }
  17.  
  18. my ($format, $forConst);
  19. $forConst = 0;
  20.  
  21. if ($ARGV[0] eq "-s")
  22. {
  23.     shift;
  24.     $format = "\t.equ %s,%s\n";
  25.     print <<EOF;
  26. /* DO NOT EDIT!  This file was automatically produced by $0
  27.     from @ARGV */
  28.  
  29.     .macro systrap trapname
  30.     trap #15
  31.     .word \\trapname
  32.     .endm
  33.  
  34. EOF
  35.     }
  36. elsif ($ARGV[0] eq "-d")
  37. {
  38.     shift;
  39.     $format = "#define _P_sysTrap%s\t%s\n";
  40.     print <<EOF;
  41. /* DO NOT EDIT! This section was automatically produced by $0
  42.     from @ARGV  */
  43.  
  44. EOF
  45. }
  46. elsif ($ARGV[0] eq "-c")
  47. {
  48.     shift;
  49.     $format = "use constant sysTrap%s\t=> %s;\n";
  50.     $forConst = 1;
  51.     print <<EOF;
  52. # DO NOT EDIT! This section was automatically produced by $0
  53. # from @ARGV
  54.  
  55. EOF
  56. }
  57. else
  58. {
  59.     $format = "<%s>\t%s\n";
  60.     print <<EOF;
  61. DO NOT EDIT!  This file was automatically produced by $0
  62. from @ARGV
  63.  
  64. EOF
  65. }
  66.  
  67. my $num = 0;
  68.  
  69. while (<>)
  70. {
  71.     s"//.*$"";            # eat C++-style comments
  72.     s"/\*[^/]*\*/""g;    # eat simple C-style comments (just in case)
  73.  
  74.     if (/define\W+sysTrapBase\W+((0[xX][\da-fA-F]+)|(\d+))/)
  75.     {
  76.         $num = $1;
  77.         $num = oct $num if $num =~ /^0/;
  78.     }
  79.  
  80.     next unless /=.*sysTrapBase.*,/ .. /}.*SysTrapNumber.*;/;
  81.  
  82.     printf $format, $1, sprintf("\"%lX\"", $num++) if /sysTrap(\w+)\b/;
  83. }
  84.  
  85. if ($forConst != 0)
  86. {
  87.     print "\n", "1;", "\n";
  88. }
  89.