1 #include "newpacket.hpp"
2 #include "timeparse.hpp"
13 int real_main(int argc
, char** argv
)
15 std::map
<std::string
, uint16_t> channel_assignments
;
16 std::vector
<struct channel
> chans
;
17 uint16_t dummy_channel
= 0;
19 std::cerr
<< "syntax: muxdump.exe <input> <start> <end> <output>" << std::endl
;
23 read_channel
rchan(argv
[1]);
24 write_channel
wchan(argv
[4]);
25 uint64_t low
= parse_timespec(argv
[2]);
26 uint64_t high
= parse_timespec(argv
[3]);
28 std::cerr
<< "Start of region must be before end." << std::endl
;
32 //Create dummy channel.
33 channel_assignments
["<DUMMY>"] = dummy_channel
= (uint16_t)chans
.size();
35 c
.c_channel
= (uint16_t)chans
.size();
37 c
.c_channel_name
= "<DUMMY>";
39 wchan
.start_segment(chans
);
42 while((p
= rchan
.read())) {
43 if(p
->rp_timestamp
< low
) {
47 if(p
->rp_timestamp
> high
) {
51 if(!channel_assignments
.count(p
->rp_channel_name
)) {
52 //No channel yet, create.
53 channel_assignments
[p
->rp_channel_name
] = (uint16_t)chans
.size();
55 c
.c_channel
= (uint16_t)chans
.size();
56 c
.c_type
= p
->rp_major
;
57 c
.c_channel_name
= p
->rp_channel_name
;
59 wchan
.start_segment(chans
);
61 uint16_t chan
= channel_assignments
[p
->rp_channel_name
];
62 if(chans
[chan
].c_type
!= p
->rp_major
) {
64 chans
[chan
].c_type
= p
->rp_major
;
65 wchan
.start_segment(chans
);
68 p
->rp_timestamp
-= low
;
74 p2
.rp_channel
= dummy_channel
;
75 p2
.rp_timestamp
= high
- low
;