IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 34182


Ignore:
Timestamp:
Jul 19, 2012, 3:12:48 PM (14 years ago)
Author:
eugene
Message:

update mksource.pl to handle more complex logic

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20120627/psModules/src/objects/mksource.pl

    r34181 r34182  
    11#!/usr/bin/env perl
     2$DEBUG = 0;
    23
    34# this program takes the pmSourceIO_CMF.in.c template file and generates the .c version based on the given I/O format made
     
    1617%cmfmodes = ("PS1_V1", 1,
    1718             "PS1_V2", 2,
    18              "PS1_DV1", 2.5,
    1919             "PS1_V3", 3,
    2020             "PS1_V4", 4,
    21              "PS1_DV2", 6,
    22              "PS1_SV1", 6,
    2321    );
    24 
    25 print "1: $cmfmodes{1}\n";
    26 print "PS1_V1: $cmfmodes{'PS1_V1'}\n";
    2722
    2823open (FILE, "$template") || die "failed to open template $template\n";
     
    3833# @>MODE@ : remove and keep if cmfmode > MODE
    3934# @<MODE@ : remove and keep if cmfmode > MODE
     35
    4036# XXX need to add features: split @foo,bar,baz@ by commas
    4137# 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@
    4346
    4447foreach $line (@list) {
     
    4750    $line =~ s|\@CMFMODE\@|$cmfmode|g;
    4851   
    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;
    5157    }
    5258
    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|(.*)\@(.*)\@(.*)|);
    5661   
    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
    60165    }
     166    print "line: $line\n" if $DEBUG;
    61167
    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";
    69170    }
    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;
    81171}
    82172
Note: See TracChangeset for help on using the changeset viewer.