#!/usr/bin/perl -w use strict; use IO::File; @ARGV==1 or die; my $base = $ARGV[0]; $base =~ m/^\-/ and die; sub read_file ($); sub read_file ($) { my ($fn) = @_; my $f = new IO::File "$fn", '<' or die "$fn $!"; while (<$f>) { if (m#^//// toplevels-from:#) { defined($_ = <$f>) or die $!; m#^include\s+\<(\S+)>\s*$# or die; read_file($1); next; } next unless m#^\s*(?:////\s?)?module\s+(\w+)\b.*////toplevel\b#; print "$base,$1\n" or die $!; } $f->error and die "$fn $!"; } read_file("$base.scad"); close STDOUT or die $!;