#!/usr/bin/perl if ($#ARGV != 3) { die "usage: pnm2cif " } $inFile = $ARGV[0]; $cellName = $ARGV[1]; $scalar = $ARGV[2]; $layerName = $ARGV[3]; $outFile = $inFile; $outFile =~ s/\.pnm$/.cif/; open (INFILE, $inFile) or die "Can't open input file $inFile\n"; open (OUTFILE, ">$outFile") or die "Can't open output file $outFile\n"; ; if ($_ != "P3") { die "Not an ASCII PNM\n"; } skipcomments: while () { if (not $_ =~ /^#/) { last skipcomments; } } ; ($width,$height) = /(\d+)\s+(\d+)/; $x = 0; $y = 0; $startBar = -1; print OUTFILE "DS 1 1 1;\n"; print OUTFILE "9 $cellName;\n"; print OUTFILE "L $layerName;\n"; while ($x < $width and $y < $height) { ; ; $line = ; if ($startBar != -1) { if ($line == 255) # End a bar { completeBar (); $startBar = -1; } } else { if ($line == 0) # Start a bar { $startBar = $x; } } $x ++; if ($x == $width) { if ($startBar != -1) { completeBar (); } $x = 0; $y ++; } } print OUTFILE "DF;\nE;\n"; sub scale { $in = shift; $in * $scalar; } sub completeBar { print OUTFILE "B ", scale ($x - $startBar), " ", scale (1), " ", scale (($x + $startBar) / 2), " ", scale ($height) - scale ($y + 0.5), ";\n"; }