- Timestamp:
- Jul 19, 2012, 3:12:48 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20120627/psModules/src/objects/mksource.pl
r34181 r34182 1 1 #!/usr/bin/env perl 2 $DEBUG = 0; 2 3 3 4 # this program takes the pmSourceIO_CMF.in.c template file and generates the .c version based on the given I/O format made … … 16 17 %cmfmodes = ("PS1_V1", 1, 17 18 "PS1_V2", 2, 18 "PS1_DV1", 2.5,19 19 "PS1_V3", 3, 20 20 "PS1_V4", 4, 21 "PS1_DV2", 6,22 "PS1_SV1", 6,23 21 ); 24 25 print "1: $cmfmodes{1}\n";26 print "PS1_V1: $cmfmodes{'PS1_V1'}\n";27 22 28 23 open (FILE, "$template") || die "failed to open template $template\n"; … … 38 33 # @>MODE@ : remove and keep if cmfmode > MODE 39 34 # @<MODE@ : remove and keep if cmfmode > MODE 35 40 36 # XXX need to add features: split @foo,bar,baz@ by commas 41 37 # treat each chunk as a rule 42 # 38 # add the following options: 39 # !MODE -- exclude the given entry (defaults to all, or is ALL required?) 40 # * and ? regexp 41 42 # some examples: 43 # @ALL,!PS1_V1@ 44 # @PS1_DV?@ 45 # @PS1_V?,!PS1_V1@ 43 46 44 47 foreach $line (@list) { … … 47 50 $line =~ s|\@CMFMODE\@|$cmfmode|g; 48 51 49 if ($line =~ m|\@ALL\@|) { 50 $line =~ s|\@ALL\@\s*||; 52 # print and continue if we do not match @RULES@ 53 unless ($line =~ m|\@.*\@|) { 54 print "no rule\n" if $DEBUG; 55 print FILE $line; 56 next; 51 57 } 52 58 53 ($isMode) = ($line =~ m|\@=(\S*)\@|); 54 ($gtMode) = ($line =~ m|\@>(\S*)\@|); 55 ($ltMode) = ($line =~ m|\@<(\S*)\@|); 59 # grab the rules and the rest of the line 60 ($prefix,$rules,$content) = ($line =~ m|(.*)\@(.*)\@(.*)|); 56 61 57 if ($isMode) { 58 if ($isMode ne $cmfmode) { next; } 59 $line =~ s|\@=\S*\@\s*||; 62 # split the rules into separate items 63 @rules = split (",", $rules); 64 65 $keepLine = 0; 66 # does $cmfmode match any of the rules? 67 foreach $rule (@rules) { 68 print "rule: $rule\n" if $DEBUG; 69 70 # special rule "ALL" 71 if ($rule eq "ALL") { 72 print "ALL match\n" if $DEBUG; 73 $keepLine = 1; 74 next; 75 } # look for other rules (esp !foo) 76 77 # pure match 78 if ($cmfmode eq $rule) { 79 print "simple match\n" if $DEBUG; 80 $keepLine = 1; 81 next; 82 } # skip to end? 83 84 # NOT match 85 if ($rule =~ m|^!|) { 86 print "NOT rule: $rule\n" if $DEBUG; 87 ($realrule) = ($rule =~ m|^!(.*)|); 88 if ($cmfmode eq $realrule) { $keepLine = 0; } # skip to end? 89 next; 90 } 91 92 # simple regexp: foo* 93 if ($rule =~ m|\*$|) { 94 print "regexp * rule: $rule\n" if $DEBUG; 95 ($realrule) = ($rule =~ m|(.*)\*$|); 96 if ($cmfmode =~ m|$realrule|) { $keepLine = 1; } # skip to end? 97 next; 98 } 99 100 # simple regexp: foo? 101 if ($rule =~ m|\?$|) { 102 print "regexp ? rule: $rule\n" if $DEBUG; 103 ($realrule) = ($rule =~ m|(.*)\?$|); 104 if (substr($cmfmode,0,-1) eq $realrule) { $keepLine = 1; } # skip to end? 105 next; 106 } 107 108 # rule: =FOO 109 if ($rule =~ m|^=|) { 110 print "= rule: $rule\n" if $DEBUG; 111 $realrule = substr($cmfmode,1); 112 if ($cmfmode eq $realrule) { $keepLine = 1; } # skip to end? 113 next; 114 } 115 116 # only apply the < > <= >= rules if cmfmode is one of cmfmodes 117 # rule: >=FOO 118 if ($rule =~ m|^>=|) { 119 print ">= rule: $rule\n" if $DEBUG; 120 if ($cmfmodes{$cmfmode} == 0) { next; } 121 $realrule = substr($rule,2); 122 $thisLevel = $cmfmodes{$realrule}; 123 $myLevel = $cmfmodes{$cmfmode}; 124 print "levels: $cmfmode, $realrule, $myLevel, $thisLevel\n" if $DEBUG; 125 if ($myLevel >= $thisLevel) { $keepLine = 1; } 126 next; 127 } 128 129 # rule: >FOO 130 if ($rule =~ m|^>|) { 131 print "> rule: $rule\n" if $DEBUG; 132 if ($cmfmodes{$cmfmode} == 0) { next; } 133 $realrule = substr($rule,1); 134 $thisLevel = $cmfmodes{$realrule}; 135 $myLevel = $cmfmodes{$cmfmode}; 136 print "levels: $cmfmode, $realrule, $myLevel, $thisLevel\n" if $DEBUG; 137 if ($myLevel > $thisLevel) { $keepLine = 1; } 138 next; 139 } 140 141 # rule: <=FOO 142 if ($rule =~ m|^<=|) { 143 print "<= rule: $rule\n" if $DEBUG; 144 if ($cmfmodes{$cmfmode} == 0) { next; } 145 $realrule = substr($rule,2); 146 $thisLevel = $cmfmodes{$realrule}; 147 $myLevel = $cmfmodes{$cmfmode}; 148 print "levels: $cmfmode, $realrule, $myLevel, $thisLevel\n" if $DEBUG; 149 if ($myLevel <= $thisLevel) { $keepLine = 1; } 150 next; 151 } 152 153 # rule: <FOO 154 if ($rule =~ m|^<|) { 155 print "< rule: $rule\n" if $DEBUG; 156 if ($cmfmodes{$cmfmode} == 0) { next; } 157 $realrule = substr($rule,1); 158 $thisLevel = $cmfmodes{$realrule}; 159 $myLevel = $cmfmodes{$cmfmode}; 160 print "levels: $cmfmode, $realrule, $myLevel, $thisLevel\n" if $DEBUG; 161 if ($myLevel < $thisLevel) { $keepLine = 1; } 162 next; 163 } 164 60 165 } 166 print "line: $line\n" if $DEBUG; 61 167 62 if ($gtMode) { 63 # print "gtMode : $line\n"; 64 $thisLevel = $cmfmodes{$gtMode}; 65 $myLevel = $cmfmodes{$cmfmode}; 66 print "gtMode : $gtMode vs $cmfmode, $thisLevel, $myLevel\n"; 67 if ($myLevel <= $thisLevel) { next; } 68 $line =~ s|\@>\S*\@\s*||; 168 if ($keepLine) { 169 print FILE "$prefix $content\n"; 69 170 } 70 71 if ($ltMode) {72 # print "ltMode : $line\n";73 $thisLevel = $cmfmodes{$ltMode};74 $myLevel = $cmfmodes{$cmfmode};75 print "ltMode : $ltMode vs $cmfmode, $thisLevel, $myLevel\n";76 if ($myLevel >= $thisLevel) { next; }77 $line =~ s|\@<\S*\@\s*||;78 }79 80 print FILE $line;81 171 } 82 172
Note:
See TracChangeset
for help on using the changeset viewer.
