1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/bin/env perl
use strict;
use warnings;
use 5.020;
use utf8;
our $VERSION = '0.00';
use List::Util qw(min);
use Travel::Status::DE::IRIS;
use Travel::Status::DE::DBWagenreihung;
my ($station, $train_number) = @ARGV;
my $res = Travel::Status::DE::IRIS->new(station => $station, with_related => 1);
if ($res->errstr) {
say STDERR $res->errstr;
exit 1;
}
my @trains = grep { $_->train_no eq $train_number } $res->results;
if (@trains != 1) {
say STDERR "Unable to find train in reported departures";
exit 1;
}
my $wr = Travel::Status::DE::DBWagenreihung->new(
departure => $trains[0]->sched_departure,
developer_mode => 1,
train_number => $train_number,
);
for my $section ($wr->sections) {
my $section_length = $section->length_percent;
my $spacing_left = int(($section_length - 2) / 2) - 1;
my $spacing_right = int(($section_length - 2) / 2);
if ($section_length % 2) {
$spacing_left++;
}
printf("|%s%s%s|",
' ' x $spacing_left,
$section->name,
' ' x $spacing_right
);
}
print "\n";
my @start_percentages = map { $_->{position}{start_percent} } $wr->wagons;
print ' ' x ((min @start_percentages) - 1);
print '[';
for my $wagon ($wr->wagons) {
my $wagon_length = $wagon->{position}->{end_percent} - $wagon->{position}->{start_percent};
my $spacing_left = int($wagon_length / 2) - 2;
my $spacing_right = int($wagon_length / 2) - 1;
if ($wagon_length % 2) {
$spacing_left++;
}
my $wagon_desc = $wagon->number || '?';
if ($wagon->is_locomotive or $wagon->is_powercar) {
$wagon_desc = '<->';
}
printf("%s%3s%s", ' ' x $spacing_left, $wagon_desc, ' ' x $spacing_right);
}
print "]\n";
print ' ' x (min @start_percentages);
for my $wagon ($wr->wagons) {
my $wagon_length = $wagon->{position}->{end_percent} - $wagon->{position}->{start_percent};
my $spacing_left = int($wagon_length / 2) - 2;
my $spacing_right = int($wagon_length / 2) - 1;
if ($wagon_length % 2) {
$spacing_left++;
}
my $class = '';
if ($wagon->class_type == 1) {
$class = ' 1 ';
}
elsif ($wagon->class_type == 2) {
$class = ' 2 ';
}
elsif ($wagon->class_type == 12) {
$class = '1/2';
}
printf("%s%3s%s", ' ' x $spacing_left, $class, ' ' x $spacing_right);
}
print "\n";
|