From: ian Date: Thu, 29 Dec 2005 17:03:26 +0000 (+0000) Subject: support +/-cy adjustments; allow trailing #- or ;-comments to have preceding white... X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=eb4f5216a96a1acce816e51f9a266ca1ac658717;p=trains.git support +/-cy adjustments; allow trailing #- or ;-comments to have preceding whitespace; support T0ov8 --- diff --git a/detpic/make-clocks b/detpic/make-clocks index 2977216..bb6beb3 100755 --- a/detpic/make-clocks +++ b/detpic/make-clocks @@ -97,6 +97,7 @@ sub do_T0ov ($) { 32-0100 64-0101 128-0110 256-0111)], 1, 1); } +sub do_T0ov8 { do_T0ov(8); } sub do_T0ov16 { do_T0ov(16); } sub do_T1ov { do_T13ov(1); } sub do_T3ov { do_T13ov(3); } @@ -112,29 +113,34 @@ sub provide_interval ($$$$) { } sub doline () { - my ($orgname,$mswant,$specd,$unit,$how); + my ($orgname,$mswant,$specd,$unit,$cy,$how,$baseinterval); chomp; - s/[;\#].*//; + s/\s*[;\#].*//; return unless m/^\S/; die "$_ ?" unless - m/^(\w+)\s+(M|S|MS)\s+(\w+)\s+([0-9.]+)(s|ms|us|ns|Hz|kHz|MHz)$/; - ($orgname,$mswant,$how,$interval,$unit) = ($1,$2,$3,$4,$5); - $specd= $interval.$unit; - if ($unit =~ m/M/) { $interval *= 1.e6; } - if ($unit =~ m/k/) { $interval *= 1.e3; } - if ($unit =~ m/m/) { $interval *= 1.e-3; } - if ($unit =~ m/u/) { $interval *= 1.e-6; } - if ($unit =~ m/n/) { $interval *= 1.e-9; } - if ($unit =~ s/Hz//) { $interval = 1.0 / $interval; } - p(";========== $orgname ($specd, $interval) ==========\n"); - provide_interval($orgname, $interval, 'us', 1.e-6); - provide_interval($orgname, $interval, 'ms', 1.e-3); - provide_interval($orgname, $interval, 's', 1.0); + m/^(\w+)\s+(M|S|MS)\s+(\w+)\s+([0-9.]+)(s|ms|us|ns|Hz|kHz|MHz)((?:[-+][0-9.]+cy)?)$/; + ($orgname,$mswant,$how,$baseinterval,$unit,$cy) = ($1,$2,$3,$4,$5,$6,$7); + $specd= $baseinterval.$unit.$cy; + if ($unit =~ m/M/) { $baseinterval *= 1.e6; } + if ($unit =~ m/k/) { $baseinterval *= 1.e3; } + if ($unit =~ m/m/) { $baseinterval *= 1.e-3; } + if ($unit =~ m/u/) { $baseinterval *= 1.e-6; } + if ($unit =~ m/n/) { $baseinterval *= 1.e-9; } + if ($unit =~ s/Hz//) { $baseinterval = 1.0 / $baseinterval; } + if ($cy =~ s/cy$//) { $cy *= 4.0; } + elsif ($cy = m//) { $cy = 0.0; } + else { die "$cy ?"; } + p(";========== $orgname ($specd: ${baseinterval}s, ${cy}cy) ==========\n"); + provide_interval($orgname, $baseinterval, 'us', 1.e-6); + provide_interval($orgname, $baseinterval, 'ms', 1.e-3); + provide_interval($orgname, $baseinterval, 's', 1.0); foreach $ms (qw(m s)) { next unless $mswant =~ m/$ms/i; $msclock= "${ms}clock"; die $msclock unless exists $defs{$msclock}; $msclock= $defs{$msclock}; + $interval= $baseinterval + $cy / ($msclock * 1000.0); + p(";---------- $orgname, ${interval}s, ${msclock}kHz ----------\n"); $name = $orgname.'_'.($ms eq 'm' ? 'master' : 'slave'); &{ "do_$how" }; }