add bclib from plan 9 sources - 9base - revived minimalist port of Plan 9 userl… | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5673fdd72fae4823ba67e2c216bbfd724bc9e01c | |
parent c074f6d0c7ad9ee13cfa65900e1789cfe4eb693c | |
Author: Evan Gates <[email protected]> | |
Date: Wed, 17 Aug 2016 11:45:57 -0700 | |
add bclib from plan 9 sources | |
add post-install and pre-uninstall targets to tools using yacc.mk | |
mirroring those in std.mk in order to install and uninstall bclib | |
Diffstat: | |
M awk/Makefile | 4 ++++ | |
M bc/Makefile | 7 +++++++ | |
A bc/bclib | 246 +++++++++++++++++++++++++++++… | |
M grep/Makefile | 4 ++++ | |
M hoc/Makefile | 4 ++++ | |
M yacc.mk | 6 ++++-- | |
6 files changed, 269 insertions(+), 2 deletions(-) | |
--- | |
diff --git a/awk/Makefile b/awk/Makefile | |
@@ -7,3 +7,7 @@ YFILES = awkgram.y | |
MANFILES = awk.1 | |
include ../yacc.mk | |
+ | |
+pre-uninstall: | |
+ | |
+post-install: | |
diff --git a/bc/Makefile b/bc/Makefile | |
@@ -10,3 +10,10 @@ include ../yacc.mk | |
# Solaris | |
#LDFLAGS += -dy -lxnet | |
+ | |
+pre-uninstall: | |
+ rm -f ${DESTDIR}${PREFIX}/lib/bclib | |
+ | |
+post-install: | |
+ @mkdir -p ${DESTDIR}${PREFIX}/lib | |
+ @cp bclib ${DESTDIR}${PREFIX}/lib/ | |
diff --git a/bc/bclib b/bc/bclib | |
@@ -0,0 +1,246 @@ | |
+scale = 50 | |
+define e(x) { | |
+ auto a, b, c, d, e, g, w, y, t, r | |
+ | |
+ r = ibase | |
+ ibase = A | |
+ | |
+ t = scale | |
+ scale = t + .434*x + 1 | |
+ | |
+ w = 0 | |
+ if(x<0) { | |
+ x = -x | |
+ w = 1 | |
+ } | |
+ y = 0 | |
+ while(x>2) { | |
+ x /= 2 | |
+ y++ | |
+ } | |
+ | |
+ a = 1 | |
+ b = 1 | |
+ c = b | |
+ d = 1 | |
+ e = 1 | |
+ for(a=1; 1; a++) { | |
+ b *= x | |
+ c = c*a+b | |
+ d *= a | |
+ g = c/d | |
+ if(g == e) { | |
+ g = g/1 | |
+ while(y--) { | |
+ g *= g | |
+ } | |
+ scale = t | |
+ if(w==1) { | |
+ ibase = r | |
+ return 1/g | |
+ } | |
+ ibase = r | |
+ return g/1 | |
+ } | |
+ e = g | |
+ } | |
+} | |
+ | |
+define l(x) { | |
+ auto a, b, c, d, e, f, g, u, s, t, r, z | |
+ | |
+ r = ibase | |
+ ibase = A | |
+ if(x <= 0) { | |
+ z = 1-10^scale | |
+ ibase = r | |
+ return z | |
+ } | |
+ t = scale | |
+ | |
+ f = 1 | |
+ scale += scale(x) - length(x) + 1 | |
+ s = scale | |
+ while(x > 2) { | |
+ s += (length(x)-scale(x))/2 + 1 | |
+ if(s>0) { | |
+ scale = s | |
+ } | |
+ x = sqrt(x) | |
+ f *= 2 | |
+ } | |
+ while(x < .5) { | |
+ s += (length(x)-scale(x))/2 + 1 | |
+ if(s>0) { | |
+ scale = s | |
+ } | |
+ x = sqrt(x) | |
+ f *= 2 | |
+ } | |
+ | |
+ scale = t + length(f) - scale(f) + 1 | |
+ u = (x-1)/(x+1) | |
+ | |
+ scale += 1.1*length(t) - 1.1*scale(t) | |
+ s = u*u | |
+ b = 2*f | |
+ c = b | |
+ d = 1 | |
+ e = 1 | |
+ for(a=3; 1; a=a+2){ | |
+ b *= s | |
+ c = c*a + d*b | |
+ d *= a | |
+ g = c/d | |
+ if(g==e) { | |
+ scale = t | |
+ ibase = r | |
+ return u*c/d | |
+ } | |
+ e = g | |
+ } | |
+} | |
+ | |
+define s(x) { | |
+ auto a, b, c, s, t, y, p, n, i, r | |
+ | |
+ r = ibase | |
+ ibase = A | |
+ t = scale | |
+ y = x/.7853 | |
+ s = t + length(y) - scale(y) | |
+ if(s<t) { | |
+ s = t | |
+ } | |
+ scale = s | |
+ p = a(1) | |
+ | |
+ scale = 0 | |
+ if(x>=0) { | |
+ n = (x/(2*p)+1)/2 | |
+ } | |
+ if(x<0) { | |
+ n = (x/(2*p)-1)/2 | |
+ } | |
+ x -= 4*n*p | |
+ if(n%2 != 0) { | |
+ x = -x | |
+ } | |
+ | |
+ scale = t + length(1.2*t) - scale(1.2*t) | |
+ y = -x*x | |
+ a = x | |
+ b = 1 | |
+ s = x | |
+ for(i=3; 1; i+=2) { | |
+ a *= y | |
+ b *= i*(i-1) | |
+ c = a/b | |
+ if(c==0){ | |
+ scale = t | |
+ ibase = r | |
+ return s/1 | |
+ } | |
+ s += c | |
+ } | |
+} | |
+ | |
+define c(x) { | |
+ auto t, r | |
+ | |
+ r = ibase | |
+ ibase = A | |
+ t = scale | |
+ scale = scale+1 | |
+ x = s(x + 2*a(1)) | |
+ scale = t | |
+ ibase = r | |
+ return x/1 | |
+} | |
+ | |
+define a(x) { | |
+ auto a, b, c, d, e, f, g, s, t, r, z | |
+ | |
+ r = ibase | |
+ ibase = A | |
+ if(x==0) { | |
+ return 0 | |
+ } | |
+ if(x==1) { | |
+ z = .7853981633974483096156608458198757210492923498437764/1 | |
+ ibase = r | |
+ if(scale<52) { | |
+ return z | |
+ } | |
+ } | |
+ t = scale | |
+ f = 1 | |
+ while(x > .5) { | |
+ scale++ | |
+ x = -(1 - sqrt(1.+x*x))/x | |
+ f *= 2 | |
+ } | |
+ while(x < -.5) { | |
+ scale++ | |
+ x = -(1 - sqrt(1.+x*x))/x | |
+ f *= 2 | |
+ } | |
+ s = -x*x | |
+ b = f | |
+ c = f | |
+ d = 1 | |
+ e = 1 | |
+ for(a=3; 1; a+=2) { | |
+ b *= s | |
+ c = c*a + d*b | |
+ d *= a | |
+ g = c/d | |
+ if(g==e) { | |
+ scale = t | |
+ ibase = r | |
+ return x*c/d | |
+ } | |
+ e = g | |
+ } | |
+} | |
+ | |
+define j(n,x) { | |
+ auto a,b,c,d,e,g,i,s,k,t,r | |
+ | |
+ r = ibase | |
+ ibase = A | |
+ | |
+ t = scale | |
+ k = 1.36*x + 1.16*t - n | |
+ k = length(k) - scale(k) | |
+ if(k>0) { | |
+ scale += k | |
+ } | |
+ | |
+ s = -x*x/4 | |
+ if(n<0) { | |
+ n = -n | |
+ x = -x | |
+ } | |
+ a = 1 | |
+ c = 1 | |
+ for(i=1; i<=n; i++) { | |
+ a *= x | |
+ c *= 2*i | |
+ } | |
+ b = a | |
+ d = 1 | |
+ e = 1 | |
+ for(i=1; 1; i++) { | |
+ a *= s | |
+ b = b*i*(n+i) + a | |
+ c *= i*(n+i) | |
+ g = b/c | |
+ if(g==e) { | |
+ scale = t | |
+ ibase = r | |
+ return g/1 | |
+ } | |
+ e = g | |
+ } | |
+} | |
diff --git a/grep/Makefile b/grep/Makefile | |
@@ -7,3 +7,7 @@ YFILES = grep.y | |
MANFILES = grep.1 | |
include ../yacc.mk | |
+ | |
+pre-uninstall: | |
+ | |
+post-install: | |
diff --git a/hoc/Makefile b/hoc/Makefile | |
@@ -7,3 +7,7 @@ YFILES = hoc.y | |
MANFILES = hoc.1 | |
include ../yacc.mk | |
+ | |
+pre-uninstall: | |
+ | |
+post-install: | |
diff --git a/yacc.mk b/yacc.mk | |
@@ -14,7 +14,9 @@ depend: | |
@echo YACC ${YFILES} | |
@${YACC} -d ${YFILES} | |
-install: ${TARG} | |
+install: install-default post-install | |
+ | |
+install-default: ${TARG} | |
@mkdir -p ${DESTDIR}${PREFIX}/bin | |
@cp -f ${TARG} ${DESTDIR}${PREFIX}/bin/ | |
@chmod 755 ${DESTDIR}${PREFIX}/bin/${TARG} | |
@@ -22,7 +24,7 @@ install: ${TARG} | |
@cp -f ${MANFILES} ${DESTDIR}${MANPREFIX}/man1 | |
@chmod 444 ${DESTDIR}${MANPREFIX}/man1/${MANFILES} | |
-uninstall: | |
+uninstall: pre-uninstall | |
rm -f ${DESTDIR}${PREFIX}/bin/${TARG} | |
rm -f ${DESTDIR}${MANPREFIX}/man1/${MANFILES} | |