annotate src/gearsTools/update_context.pl @ 125:f103beea19f4

tweak
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 03 Dec 2019 09:32:33 +0900
parents b84aac4ab529
children fb75c5e661c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #!/usr/bin/env perl
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 use strict;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 use warnings;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 use Getopt::Std;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
6 use FindBin;
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
7 use lib "$FindBin::Bin/lib";
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
8 use Gears::Util;
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
9
100
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
10 my %opt;
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
11 getopts("wc" => \%opt);
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
12
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 my $interface_file = shift or die "require itnerface file";
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
14 my $h2context = Gears::Util->parse_interface($interface_file);
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 my $context = dump_h2context($h2context);
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
100
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
17 if ($opt{c}) {
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
18 print "$context";
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
19 exit 0;
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
20 }
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
21
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
22 my ($first,$last) = slup_context_h($h2context->{name});
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 if ($opt{w}) {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 context_write(@{$first},$context,@{$last});
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 } else {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 context_dump(@{$first},$context,@{$last});
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 sub slup_context_h {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 open my $fh, '<', 'context.h';
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 my $data_gear_name = shift;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 my @first_context_headers = ();
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 my @last_context_headers = ();
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 while (my $line = <$fh>) {
99
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 98
diff changeset
40 if ( $line =~ /union Data end/) {
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 push(@last_context_headers, $line);
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 push(@last_context_headers, <$fh>);
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 last;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 if ( $line =~ /struct $data_gear_name/) {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 print "WARN! $data_gear_name struct already exists\n";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 exit 1;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 push(@first_context_headers, $line);
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
51
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 close $fh;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
54 #print "@first_context_headers\n";
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
55 #print "@last_context_headers\n";
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 return (\@first_context_headers,\@last_context_headers);
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 sub dump_h2context {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 my $h2context = shift;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 my $context = '';
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 my $space = ' ';
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
63 #print "${space}struct $h2context->{name} {\n";
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 $context = "${space}struct $h2context->{name} {\n";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 for my $datum (@{$h2context->{data}}) {
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
66 #print "${space}${space}$datum; \n";
100
37a0df8b1889 tweak update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
67 $context .= "${space}${space}$datum;\n";
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 for my $code (@{$h2context->{codes}}) {
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
70 #print "${space}${space}enum Code $code;\n";
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 $context .= "${space}${space}enum Code $code;\n";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 }
102
b84aac4ab529 import trans_impl.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
73 #print "${space}} $h2context->{name};\n";
97
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 $context .= "${space}} $h2context->{name};\n";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 return $context;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 sub context_dump {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 for my $line (@_) {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 print "$line";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 sub context_write {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 open my $fh, '>', "context.h";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 for my $line (@_) {
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 print $fh "$line";
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 }
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 close $fh;
70eae4b230f2 add update_context.pl
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 }