Whamcloud - gitweb
Use format strings directly to prevent -Werror=format-security failures
[tools/e2fsprogs.git] / lib / ss / ct_c.sed
1 #
2 # This script parses a command_table file into something which is a bit 
3 # easier for an awk script to understand.
4 #
5 # Input syntax: a .ct file
6 #
7 # Output syntax:
8 # (for the command_table line)
9 #       command_table  <command_table>
10 #
11 #(for each request definition)
12 #       BOR
13 #       sub: <subroutine name>
14 #       hlp: <help text>
15 #       cmd: <command>
16 #       opt: <option>
17 #       EOR
18 # (there may be more than one 'cmd' or 'opt' line
19 #
20 # A number sent to the output represents a parse error --- it will be 
21 # followed by the next line which will have the form:
22 #       ERROR: <error text>
23 #
24 # The design of this output syntax is such that it should be easy for
25 # an awk script to parse.
26
27 #
28 # The first section of this script is just to cannoicalize the file.  
29 # It removes comments, and puts each command_table request onto a single
30 # line
31 #
32 :FIRST
33 y/      / /
34 s/^ *//
35 s/#.*$//
36 /; *$/!{
37 N
38 y/      / /
39 s/\n */ /
40 bFIRST
41 }
42 s/, */, /g
43 #
44 # Now we take care of some syntatic sugar.....
45 #
46 /^unimplemented/ {
47         s/^unimplemented [A-Za-z_0-9]*/request ss_unimplemented/
48         s/;/, (dont_list, dont_summarize);/
49 }
50 /^unknown/ {
51         s/^unknown /request ss_unknown, "", /
52 }
53 #
54 # Dispatch based on the keyword....  illegal keywords are prefixed by ERROR:
55 # and are handled by the awk script.
56 #
57 /^command_table /bCMD
58 /^request /bREQUEST
59 /^end;/bEND
60 s/ .*//
61 s/^/ERROR: unknown keyword: /
62 =
63 b
64 #
65 # Handle the command_table keyword
66 #
67 :CMD
68 s/;$//
69 p
70 d
71 b
72 #
73 # Handle the request keyword --- this is the heart of the sed script.
74
75 :REQUEST
76 s/^request *//
77 h
78 i\
79 BOR
80 # First, parse out the subroutine name
81 s/^/sub: /
82 s/,.*//
83 p
84 # Next, parse out the help message, being careful to handle a quoted string
85 g
86 s/^[^,]*, *//
87 h
88 /^"/ {
89         s/^"//
90         s/".*//
91         x
92         s/^"[^"]*", *//
93         x
94         b EMITHLP
95 }
96 s/[^a-zA-Z0-9].*//
97 x
98 s/[a-zA-Z0-9]*, *//
99 x
100 :EMITHLP
101 s/^/hlp: /
102 p
103 # Next take care of the command names
104 :CMDLIST
105 g
106 /^(/b OPTIONS
107 /^;/b EOR
108 /^"/ {
109         s/^"//
110         s/".*//
111         x
112         s/^"[^"]*"//
113         s/, *//
114         x
115         b EMITREQ
116 }
117 s/[^A-Za-z_0-9].*//
118 x
119 s/[A-Za-z_0-9]*//
120 s/, *//
121 x
122 :EMITREQ
123 s/^/cmd: /
124 p
125 b CMDLIST
126 #
127 # Here we parse the list of options.
128 #
129 : OPTIONS
130 g
131 s/^(//
132 h
133 : OPTLIST
134 /^)/ b EOR
135 /^[^A-Za-z_0-9]/ {
136         =
137         c\
138 ERROR: parse error in options list
139 }
140 s/[^A-Za-z_0-9].*//
141 x
142 s/[A-Za-z_0-9]*//
143 s/, *//
144 x
145 s/^/opt: /
146 p
147 g
148 b OPTLIST
149 : EOR
150 c\
151 EOR\
152
153 d
154 b
155 #
156 # Handle the end keyword --- it's basically ignored.
157 #
158 :END
159 d
160 b