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