bclib, for use with bc -l, is missing from 9base. I grabbed the file
from plan 9 sources, and made some changes to the makefiles in order
to install it.

I'm also including a patch to fix a typo I made in the yacc makefile.

-emg
From be81a44c57e884da9c53acc2a83eeb7b80effb0c Mon Sep 17 00:00:00 2001
From: Evan Gates <evan.ga...@gmail.com>
Date: Wed, 17 Aug 2016 11:40:29 -0700
Subject: [PATCH] fix DESTDIRK typo in yacc/Makefile

---
 yacc/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/yacc/Makefile b/yacc/Makefile
index ce9a420..bd9136c 100644
--- a/yacc/Makefile
+++ b/yacc/Makefile
@@ -6,8 +6,8 @@ TARG      = yacc
 include ../std.mk
 
 pre-uninstall:
-       rm -f ${DESTDIRK}${PREFIX}/yacc/yaccpar
-       rm -f ${DESTDIRK}${PREFIX}/yacc/yaccpars
+       rm -f ${DESTDIR}${PREFIX}/yacc/yaccpar
+       rm -f ${DESTDIR}${PREFIX}/yacc/yaccpars
 
 post-install:
        @mkdir -p ${DESTDIR}${PREFIX}/yacc
-- 
2.9.3

From cd7fee3aa658de3d683ef8fc4f3d03ecde37e5ae Mon Sep 17 00:00:00 2001
From: Evan Gates <evan.ga...@gmail.com>
Date: Wed, 17 Aug 2016 11:45:57 -0700
Subject: [PATCH] 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
---
 awk/Makefile  |   4 +
 bc/Makefile   |   7 ++
 bc/bclib      | 246 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 grep/Makefile |   4 +
 hoc/Makefile  |   4 +
 yacc.mk       |   6 +-
 6 files changed, 269 insertions(+), 2 deletions(-)
 create mode 100644 bc/bclib

diff --git a/awk/Makefile b/awk/Makefile
index 80b32eb..d0e86b3 100644
--- 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
index 0d3d1b0..8eed9d5 100644
--- 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
new file mode 100644
index 0000000..97b1c92
--- /dev/null
+++ 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
index 192c8bf..17b2811 100644
--- 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
index 961bccb..38c05e1 100644
--- 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
index 56a7bdb..49fbc09 100644
--- 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}
 
-- 
2.9.3

Reply via email to