Subversion Repositories Vertical

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

#A component of the add-ports script, used to split an EDIF file
#somewhere in its interface list

BEGIN {
  s = 0;
};

#Look for a cell declaration
# for EDIF with the cellname on the next line there will be only one word

/\(cell/ { 
  if ( length($1)==5 && s==0 ) {
    if ( NF==1 ) {
      s = 6
      }
    else if(($2 ~ ent) && (length($2)==length(ent)) ) {
      s = 1;
      printf("got entity %s\n",ent)
      }
    }
  }
    
        
/\(interface/ {
  if (s == 1) {
    print ("(interface ") > out1;
    printf ("in interface of %s\n",ent);
    for (i = 2; i<=NF; i++) {
      printf ("%s ",$i) > out2 
      };
    printf ("\n") > out2; 
#flag to 2 to show we have done the first section
    s= 2
    }
  }
  
#any reserved ports already added are dropped by setting the flag to 4
#so they are not printed, both rsv00001z and RSV00020z style names
/[rR][sS][vV][0-9]+[zZ]/ { s = 4 } 


# we are expecting an entity-name  
//{  if(s<2)   { print > out1 }
     else if (s==2 || s==4 ) { s = 3 }
     else if (s==3) { print > out2  }
     else if (s==6) { print > out1 ;s= 5 }
     else if (s==5) {
       print > out1;
# need protection against strings containing "("
       if ((NF >= 1) && substr($1,1,1) !~ "\(" && ent ~ $1) {
         s = 1;
         printf("got entity %s\n",ent)
         }
       else {
         s = 0
         }
       }
     }