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