RS: fix for fix
[minix.git] / usr.bin / sed / TEST / math.sed
blob82968b54764241824a76ba1669de5f84f25a761e
2 #       from: @(#)math.sed      8.1 (Berkeley) 6/6/93
3 #       $NetBSD: math.sed,v 1.3 1997/01/09 20:21:36 tls Exp $
5 # Addition and multiplication in sed.
6 # ++ for a limited time only do (expr) too!!!
8 # Kevin S Braunsdorf, PUCC UNIX Group, ksb@cc.purdue.edu.
10 # Ex:
11 #       echo "4+7*3" | sed -f %f
13 # make sure the expression is well formed
14 s/[     ]//g
15 /[+*\/-]$/{
16         a\
17         poorly formed expression, operator on the end
18         q
20 /^[+*\/]/{
21         a\
22         poorly formed expression, leading operator
23         q
26 # fill hold space with done token
28 s/^.*/done/
31 # main loop, process operators (*, + and () )
32 : loop
33 /^\+/{
34         s///
35         b loop
37 /^\(.*\)(\([^)]*\))\(.*\)$/{
38         H
39         s//\2/
40         x
41         s/^\(.*\)\n\(.*\)(\([^()]*\))\(.*\)$/()\2@\4@\1/
42         x
43         b loop
45 /^[0-9]*\*/b mul
46 /^\([0-9]*\)\+\([0-9+*]*\*[0-9]*\)$/{
47         s//\2+\1/
48         b loop
50 /^[0-9]*\+/{
51         s/$/=/
52         b add
55 /^done$/{
56         x
57         p
58         d
60 /^()/{
61         s///
62         x
63         G
64         s/\(.*\)\n\([^@]*\)@\([^@]*\)@\(.*\)/\2\1\3/
65         x
66         s/[^@]*@[^@]*@\(.*\)/\1/
67         x
68         b loop
71 help, stack problem
77 # turn mul into add until 1*x -> x
78 : mul
79 /^0*1\*/{
80         s///
81         b loop
83 /^\([0-9]*\)0\*/{
84         s/^\([0-9]*\)0\*\([0-9]*\)/\1*\20/
85         b mul
87 s/^\([0-9]*\)1\*/\10*/
88 s/^\([0-9]*\)2\*/\11*/
89 s/^\([0-9]*\)3\*/\12*/
90 s/^\([0-9]*\)4\*/\13*/
91 s/^\([0-9]*\)5\*/\14*/
92 s/^\([0-9]*\)6\*/\15*/
93 s/^\([0-9]*\)7\*/\16*/
94 s/^\([0-9]*\)8\*/\17*/
95 s/^\([0-9]*\)9\*/\18*/
96 s/\*\([0-9*]*\)/*\1+\1/
97 b mul
99 # get rid of a plus term until 0+x -> x
100 : add
101 /^\+\([0-9+*]*\)=/{
102         s//\1/
103         b loop
105 /^\([0-9*]*\)\+=/{
106         s//\1/
107         b loop
109 /^\([0-9]*\)\+\([0-9*+]*\)\+=/{
110         s//\2+\1/
111         b loop
113 /^\([0-9]*\)0\+\([0-9]*\)\([0-9]\)=/{
114         s//\1+\2=\3/
115         b add
117 /^\([0-9]*\)\([0-9]\)\+\([0-9]*\)0=/{
118         s//\1+\3=\2/
119         b add
121 /^\([0-9]*\)0\+\([0-9*+]*\)\+\([0-9]*\)\([0-9]\)=/{
122         s//\1+\2+\3=\4/
123         b add
125 /^\([0-9]*\)\([0-9]\)\+\([0-9*+]*\)\+\([0-9]*\)0=/{
126         s//\1+\3+\4=\2/
127         b add
129 s/^\([0-9]*\)1\+/\10+/
130 s/^\([0-9]*\)2\+/\11+/
131 s/^\([0-9]*\)3\+/\12+/
132 s/^\([0-9]*\)4\+/\13+/
133 s/^\([0-9]*\)5\+/\14+/
134 s/^\([0-9]*\)6\+/\15+/
135 s/^\([0-9]*\)7\+/\16+/
136 s/^\([0-9]*\)8\+/\17+/
137 s/^\([0-9]*\)9\+/\18+/
139 s/9=\([0-9]*\)$/_=\1/
140 s/8=\([0-9]*\)$/9=\1/
141 s/7=\([0-9]*\)$/8=\1/
142 s/6=\([0-9]*\)$/7=\1/
143 s/5=\([0-9]*\)$/6=\1/
144 s/4=\([0-9]*\)$/5=\1/
145 s/3=\([0-9]*\)$/4=\1/
146 s/2=\([0-9]*\)$/3=\1/
147 s/1=\([0-9]*\)$/2=\1/
148 /_/{
149         s//_0/
150         : inc
151         s/9_/_0/
152         s/8_/9/
153         s/7_/8/
154         s/6_/7/
155         s/5_/6/
156         s/4_/5/
157         s/3_/4/
158         s/2_/3/
159         s/1_/2/
160         s/0_/1/
161         s/\+_/+1/
162         /_/b inc
164 b add