Browse Source

libs: get rid of libstdio (and stdio.h); `mv ctype.h chartypes.h` in /sys/include

Giacomo Tesio 3 years ago
parent
commit
16c7924425
100 changed files with 113 additions and 1998 deletions
  1. 1 5
      arch/amd64/include/cflags.json
  2. 1 2
      qa/lib/c/va_copy.c
  3. 20 12
      qa/lib/newlib/build.json
  4. 10 3
      qa/lib/newlib/testsuite/build.json
  5. 9 0
      sys/include/apw/9stdio.h
  6. 1 1
      sys/include/apw/stdio.h
  7. 0 0
      sys/include/chartypes.h
  8. 1 1
      sys/src/cmd/acme/aux/win/main.c
  9. 1 1
      sys/src/cmd/auth/changeuser.c
  10. 1 1
      sys/src/cmd/auth/convbio.c
  11. 1 1
      sys/src/cmd/auth/convkeys.c
  12. 1 1
      sys/src/cmd/auth/factotum/chap.c
  13. 1 1
      sys/src/cmd/auth/keyfs.c
  14. 1 1
      sys/src/cmd/auth/lib/getexpiration.c
  15. 1 1
      sys/src/cmd/auth/lib/querybio.c
  16. 1 1
      sys/src/cmd/auth/lib/rdbio.c
  17. 1 1
      sys/src/cmd/auth/lib/wrbio.c
  18. 1 1
      sys/src/cmd/auth/secureidcheck.c
  19. 1 1
      sys/src/cmd/awk/lex.c
  20. 1 1
      sys/src/cmd/awk/lib.c
  21. 1 1
      sys/src/cmd/awk/re.c
  22. 1 1
      sys/src/cmd/awk/run.c
  23. 1 1
      sys/src/cmd/awk/tran.c
  24. 0 2
      sys/src/cmd/cmd.json
  25. 1 1
      sys/src/cmd/disk/format.c
  26. 1 1
      sys/src/cmd/disk/prep/calc.y
  27. 1 1
      sys/src/cmd/disk/prep/edit.c
  28. 1 1
      sys/src/cmd/disk/prep/fdisk.c
  29. 1 1
      sys/src/cmd/field.c
  30. 1 1
      sys/src/cmd/hget.c
  31. 1 1
      sys/src/cmd/hoc/hoc.y
  32. 1 1
      sys/src/cmd/ip/dhcpd/db.c
  33. 1 1
      sys/src/cmd/ip/gping.c
  34. 1 1
      sys/src/cmd/ip/ping.c
  35. 1 1
      sys/src/cmd/ip/traceroute.c
  36. 1 1
      sys/src/cmd/join.c
  37. 1 1
      sys/src/cmd/lock.c
  38. 1 1
      sys/src/cmd/ndb/cs.c
  39. 1 1
      sys/src/cmd/ndb/dblookup.c
  40. 1 1
      sys/src/cmd/ndb/dn.c
  41. 1 1
      sys/src/cmd/ndb/dnsdebug.c
  42. 1 1
      sys/src/cmd/ndb/dnsquery.c
  43. 1 1
      sys/src/cmd/ndb/mkdb.c
  44. 1 1
      sys/src/cmd/pict/readpng.c
  45. 1 1
      sys/src/cmd/pict/readppm.c
  46. 1 1
      sys/src/cmd/pict/readtga.c
  47. 1 1
      sys/src/cmd/pict/readv210.c
  48. 1 1
      sys/src/cmd/pict/readyuv.c
  49. 1 1
      sys/src/cmd/pict/togif.c
  50. 1 1
      sys/src/cmd/pict/tojpg.c
  51. 1 1
      sys/src/cmd/pict/topng.c
  52. 1 1
      sys/src/cmd/pict/toppm.c
  53. 1 1
      sys/src/cmd/pict/writepng.c
  54. 1 1
      sys/src/cmd/rio/wctl.c
  55. 1 1
      sys/src/cmd/stats.c
  56. 1 1
      sys/src/cmd/tail.c
  57. 1 1
      sys/src/cmd/tar.c
  58. 1 1
      sys/src/cmd/uniq.c
  59. 1 1
      sys/src/cmd/usb/disk/disk.c
  60. 1 1
      sys/src/cmd/usb/serial/serial.c
  61. 1 1
      sys/src/cmd/vt/vt.c
  62. 1 1
      sys/src/lib/disk/disk.c
  63. 1 1
      sys/src/lib/ip/parseip.c
  64. 1 1
      sys/src/lib/ip/readipifc.c
  65. 1 1
      sys/src/lib/jehanne/9sys/announce.c
  66. 1 1
      sys/src/lib/jehanne/fmt/fltfmt.c
  67. 1 1
      sys/src/lib/jehanne/port/ctype.c
  68. 1 1
      sys/src/lib/jehanne/port/encodefmt.c
  69. 1 1
      sys/src/lib/jehanne/port/hangup.c
  70. 1 1
      sys/src/lib/jehanne/port/netmkaddr.c
  71. 1 1
      sys/src/lib/jehanne/port/strtod.c
  72. 1 1
      sys/src/lib/jehanne/port/toupper.c
  73. 0 1
      sys/src/lib/libs.json
  74. 1 1
      sys/src/lib/ndb/ipattr.c
  75. 1 1
      sys/src/lib/ndb/ndbaux.c
  76. 1 1
      sys/src/lib/ndb/ndbcat.c
  77. 1 1
      sys/src/lib/ndb/ndbfree.c
  78. 1 1
      sys/src/lib/ndb/ndbopen.c
  79. 1 1
      sys/src/lib/ndb/ndbparse.c
  80. 1 1
      sys/src/lib/sec/port/ecc.c
  81. 0 118
      sys/src/lib/stdio/Stdio.h
  82. 0 35
      sys/src/lib/stdio/_IO_getc.c
  83. 0 114
      sys/src/lib/stdio/_IO_putc.c
  84. 0 60
      sys/src/lib/stdio/build.json
  85. 0 23
      sys/src/lib/stdio/clearerr.c
  86. 0 1181
      sys/src/lib/stdio/dtoa.c
  87. 0 23
      sys/src/lib/stdio/fclose.c
  88. 0 46
      sys/src/lib/stdio/fdopen.c
  89. 0 16
      sys/src/lib/stdio/feof.c
  90. 0 16
      sys/src/lib/stdio/ferror.c
  91. 0 61
      sys/src/lib/stdio/fflush.c
  92. 0 16
      sys/src/lib/stdio/fgetc.c
  93. 0 17
      sys/src/lib/stdio/fgetpos.c
  94. 0 27
      sys/src/lib/stdio/fgets.c
  95. 0 19
      sys/src/lib/stdio/fileno.c
  96. 0 25
      sys/src/lib/stdio/fopen.c
  97. 0 21
      sys/src/lib/stdio/fprintf.c
  98. 0 16
      sys/src/lib/stdio/fputc.c
  99. 0 17
      sys/src/lib/stdio/fputs.c
  100. 0 50
      sys/src/lib/stdio/fread.c

+ 1 - 5
arch/amd64/include/cflags.json

@@ -1,16 +1,12 @@
 {
 	"buildflags": {
 		"Cflags": [
-			"-fno-omit-frame-pointer",
-			"-fplan9-extensions",
-			"-fvar-tracking",
-			"-fvar-tracking-assignments",
+			"-9",
 			"-g",
 			"-gdwarf-2",
 			"-ggdb",
 			"-mcmodel=small",
 			"-O0",
-			"-static",
 			"-Wall",
 			"-Wno-main",
 			"-Wno-missing-braces",

+ 1 - 2
qa/lib/c/va_copy.c

@@ -1,13 +1,12 @@
 #include <u.h>
 #include <lib9.h>
-#include <stdio.h>
 
 void
 main(){
 	char *correct="0.987650\n";
 	static char result[128];
 
-	sprintf(result, "%f\n", 0.98765f);
+	sprint(result, "%f\n", 0.98765f);
 
 	if(!strcmp(result, correct)){
 		print("PASS\n");

+ 20 - 12
qa/lib/newlib/build.json

@@ -1,17 +1,21 @@
 {
 	"SimplePOSIXTests": {
-		"Include": [
-			"/arch/$ARCH/include/cflags.json"
-		],
 		"Cflags": [
+			"-g",
+			"-gdwarf-2",
+			"-ggdb",
+			"-mcmodel=small",
+			"-O0",
+			"-Wall",
+			"-Wno-main",
+			"-Wno-missing-braces",
+			"-Wno-parentheses",
+			"-Wno-unknown-pragmas",
 			"-fstack-check",
 			"-fstack-protector-all",
 			"-O2",
 			"-std=gnu11"
 		],
-		"Oflags": [
-			"-static"
-		],
 		"Install": "/arch/$ARCH/qa/lib/newlib",
 		"Post": [
 			"rm -f *.o",
@@ -61,19 +65,23 @@
 		]
 	},
 	"SIGCHLDTests": {
-		"Include": [
-			"/arch/$ARCH/include/cflags.json"
-		],
 		"Cflags": [
+			"-g",
+			"-gdwarf-2",
+			"-ggdb",
+			"-mcmodel=small",
+			"-O0",
+			"-Wall",
+			"-Wno-main",
+			"-Wno-missing-braces",
+			"-Wno-parentheses",
+			"-Wno-unknown-pragmas",
 			"-fstack-check",
 			"-fstack-protector-all",
 			"-O2",
 			"-DWITH_SIGCHLD",
 			"-std=gnu11"
 		],
-		"Oflags": [
-			"-static"
-		],
 		"Install": "/arch/$ARCH/qa/lib/newlib/sigchld",
 		"Post": [
 			"rm -f *.o",

+ 10 - 3
qa/lib/newlib/testsuite/build.json

@@ -1,9 +1,16 @@
 {
 	"NewlibTestsuite": {
-		"Include": [
-			"/arch/$ARCH/include/cflags.json"
-		],
 		"Cflags": [
+			"-g",
+			"-gdwarf-2",
+			"-ggdb",
+			"-mcmodel=small",
+			"-O0",
+			"-Wall",
+			"-Wno-main",
+			"-Wno-missing-braces",
+			"-Wno-parentheses",
+			"-Wno-unknown-pragmas",
 			"-iquote", "/hacking/cross/pkgs/newlib/src/newlib/testsuite/include/",
 			"-fstack-check",
 			"-Wno-unused-variable",

+ 9 - 0
sys/include/stdio.h → sys/include/apw/9stdio.h

@@ -1,3 +1,12 @@
+/* 
+ * This file is part of the UCB release of Plan 9. It is subject to the license
+ * terms in the LICENSE file found in the top-level directory of this
+ * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
+ * part of the UCB release of Plan 9, including this file, may be copied,
+ * modified, propagated, or distributed except according to the terms contained
+ * in the LICENSE file.
+ */
+
 #pragma	src	"/sys/src/lib/stdio"
 #pragma	lib	"libstdio.a"
 

+ 1 - 1
sys/include/apw/stdio.h

@@ -36,7 +36,7 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-#include "../stdio.h"
+#include "9stdio.h"
 #ifdef __cplusplus
 }
 #endif

+ 0 - 0
sys/include/jehanne/ctype.h → sys/include/chartypes.h


+ 1 - 1
sys/src/cmd/acme/aux/win/main.c

@@ -14,7 +14,7 @@
 #include <thread.h>
 #include <9P2000.h>
 #include <9p.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "dat.h"
 
 void	mainctl(void*);

+ 1 - 1
sys/src/cmd/auth/changeuser.c

@@ -14,7 +14,7 @@
 #include <lib9.h>
 #include <libsec.h>
 #include <authsrv.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "authcmdlib.h"
 

+ 1 - 1
sys/src/cmd/auth/convbio.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "authcmdlib.h"
 
 void

+ 1 - 1
sys/src/cmd/auth/convkeys.c

@@ -15,7 +15,7 @@
  */
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <authsrv.h>
 #include <mp.h>
 #include <libsec.h>

+ 1 - 1
sys/src/cmd/auth/factotum/chap.c

@@ -26,7 +26,7 @@
  *	write response: Chapreply or MSchapreply structure
  */
 
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "dat.h"
 
 enum {

+ 1 - 1
sys/src/cmd/auth/keyfs.c

@@ -15,7 +15,7 @@
  */
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <authsrv.h>
 #include <9P2000.h>
 #include <bio.h>

+ 1 - 1
sys/src/cmd/auth/lib/getexpiration.c

@@ -15,7 +15,7 @@
  */
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <authsrv.h>
 #include "authcmdlib.h"

+ 1 - 1
sys/src/cmd/auth/lib/querybio.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <authsrv.h>
 #include "authcmdlib.h"
 

+ 1 - 1
sys/src/cmd/auth/lib/rdbio.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <authsrv.h>
 #include "authcmdlib.h"
 

+ 1 - 1
sys/src/cmd/auth/lib/wrbio.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <authsrv.h>
 #include "authcmdlib.h"
 

+ 1 - 1
sys/src/cmd/auth/secureidcheck.c

@@ -29,7 +29,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <ip.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <mp.h>
 #include <libsec.h>
 #include <bio.h>

+ 1 - 1
sys/src/cmd/awk/lex.c

@@ -24,7 +24,7 @@ THIS SOFTWARE.
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "awk.h"
 #include "y.tab.h"

+ 1 - 1
sys/src/cmd/awk/lib.c

@@ -24,7 +24,7 @@ THIS SOFTWARE.
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "awk.h"
 #include "y.tab.h"

+ 1 - 1
sys/src/cmd/awk/re.c

@@ -24,7 +24,7 @@ THIS SOFTWARE.
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <regexp.h>
 #include "awk.h"

+ 1 - 1
sys/src/cmd/awk/run.c

@@ -24,7 +24,7 @@ THIS SOFTWARE.
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "awk.h"
 #include "y.tab.h"

+ 1 - 1
sys/src/cmd/awk/tran.c

@@ -25,7 +25,7 @@ THIS SOFTWARE.
 #include <u.h>
 #include <lib9.h>
 #include <envvars.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "awk.h"
 #include "y.tab.h"

+ 0 - 2
sys/src/cmd/cmd.json

@@ -4,7 +4,6 @@
 			"/arch/$ARCH/include/cflags.json"
 		],
 		"Cflags": [
-			"-9",
 			"-fstack-check",
 			"-fstack-protector-all"
 		],
@@ -22,7 +21,6 @@
 			"-ldraw",
 			"-lplumb",
 			"-lregexp",
-			"-lstdio",
 			"-lString",
 			"-l9p",
 			"-lauth",

+ 1 - 1
sys/src/cmd/disk/format.c

@@ -15,7 +15,7 @@
  */
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <disk.h>
 
 /*

+ 1 - 1
sys/src/cmd/disk/prep/calc.y

@@ -56,7 +56,7 @@ expr:	NUMBER
 %%
 
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "disk.h"
 #include "edit.h"
 

+ 1 - 1
sys/src/cmd/disk/prep/edit.c

@@ -19,7 +19,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <disk.h>
 #include "edit.h"
 

+ 1 - 1
sys/src/cmd/disk/prep/fdisk.c

@@ -13,7 +13,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <disk.h>
 #include "edit.h"
 

+ 1 - 1
sys/src/cmd/field.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <regexp.h>
 
 typedef struct Range Range;

+ 1 - 1
sys/src/cmd/hget.c

@@ -10,7 +10,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <envvars.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <ip.h>
 #include <libsec.h>

+ 1 - 1
sys/src/cmd/hoc/hoc.y

@@ -144,7 +144,7 @@ arglist:  /* nothing */ 	{ $$ = 0; }
 %%
 	/* end of grammar */
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 char	*progname;
 int	lineno = 1;
 jmp_buf	begin;

+ 1 - 1
sys/src/cmd/ip/dhcpd/db.c

@@ -18,7 +18,7 @@
 #include <ip.h>
 #include <bio.h>
 #include <ndb.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "dat.h"
 
 /*

+ 1 - 1
sys/src/cmd/ip/gping.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <auth.h>
 #include <9P2000.h>
 #include <draw.h>

+ 1 - 1
sys/src/cmd/ip/ping.c

@@ -10,7 +10,7 @@
 /* ping for ip v4 and v6 */
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ip.h>
 #include <bio.h>
 #include <ndb.h>

+ 1 - 1
sys/src/cmd/ip/traceroute.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <ndb.h>
 #include <ip.h>

+ 1 - 1
sys/src/cmd/join.c

@@ -11,7 +11,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 enum {
 	F1,

+ 1 - 1
sys/src/cmd/lock.c

@@ -13,7 +13,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 static int debug;
 static int lockwait;

+ 1 - 1
sys/src/cmd/ndb/cs.c

@@ -19,7 +19,7 @@
 #include <auth.h>
 #include <9P2000.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 #include <ip.h>
 #include <String.h>

+ 1 - 1
sys/src/cmd/ndb/dblookup.c

@@ -19,7 +19,7 @@
 #include <bio.h>
 #include <ndb.h>
 #include <ip.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "dns.h"
 
 enum {

+ 1 - 1
sys/src/cmd/ndb/dn.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <ip.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "dns.h"
 
 /*

+ 1 - 1
sys/src/cmd/ndb/dnsdebug.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ip.h>
 #include <ndb.h>
 #include "dns.h"

+ 1 - 1
sys/src/cmd/ndb/dnsquery.c

@@ -13,7 +13,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 #include "dns.h"
 #include "ip.h"

+ 1 - 1
sys/src/cmd/ndb/mkdb.c

@@ -16,7 +16,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 Biobuf in;
 Biobuf out;

+ 1 - 1
sys/src/cmd/pict/readpng.c

@@ -1,6 +1,6 @@
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <flate.h>
 #include <draw.h>

+ 1 - 1
sys/src/cmd/pict/readppm.c

@@ -2,7 +2,7 @@
 #include <lib9.h>
 #include <bio.h>
 #include <draw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "imagefile.h"
 
 Rawimage *readppm(Biobuf*, Rawimage*);

+ 1 - 1
sys/src/cmd/pict/readtga.c

@@ -9,7 +9,7 @@
 #include <lib9.h>
 #include <bio.h>
 #include <draw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "imagefile.h"
 
 enum {

+ 1 - 1
sys/src/cmd/pict/readv210.c

@@ -27,7 +27,7 @@
 #include <lib9.h>
 #include <bio.h>
 #include <draw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "imagefile.h"
 
 enum {

+ 1 - 1
sys/src/cmd/pict/readyuv.c

@@ -3,7 +3,7 @@
 #include <lib9.h>
 #include <bio.h>
 #include <draw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "imagefile.h"
 
 

+ 1 - 1
sys/src/cmd/pict/togif.c

@@ -2,7 +2,7 @@
 #include <lib9.h>
 #include <draw.h>
 #include <memdraw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "imagefile.h"
 

+ 1 - 1
sys/src/cmd/pict/tojpg.c

@@ -2,7 +2,7 @@
 #include <lib9.h>
 #include <draw.h>
 #include <memdraw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "imagefile.h"
 

+ 1 - 1
sys/src/cmd/pict/topng.c

@@ -2,7 +2,7 @@
 #include <lib9.h>
 #include <draw.h>
 #include <memdraw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <flate.h>
 #include "imagefile.h"

+ 1 - 1
sys/src/cmd/pict/toppm.c

@@ -2,7 +2,7 @@
 #include <lib9.h>
 #include <draw.h>
 #include <memdraw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include "imagefile.h"
 

+ 1 - 1
sys/src/cmd/pict/writepng.c

@@ -5,7 +5,7 @@
 #include <lib9.h>
 #include <draw.h>
 #include <memdraw.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 #include <flate.h>
 #include "imagefile.h"

+ 1 - 1
sys/src/cmd/rio/wctl.c

@@ -25,7 +25,7 @@
 #include <plumb.h>
 #include "dat.h"
 #include "fns.h"
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 char	Ebadwr[]		= "bad rectangle in wctl request";
 char	Ewalloc[]		= "window allocation failed in wctl request";

+ 1 - 1
sys/src/cmd/stats.c

@@ -1,7 +1,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <envvars.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <draw.h>
 #include <event.h>
 #include <keyboard.h>

+ 1 - 1
sys/src/cmd/tail.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <bio.h>
 
 /*

+ 1 - 1
sys/src/cmd/tar.c

@@ -21,7 +21,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <9P2000.h>		/* for %M */
 #include <String.h>
 

+ 1 - 1
sys/src/cmd/uniq.c

@@ -13,7 +13,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 #define	SIZE	8000
 

+ 1 - 1
sys/src/cmd/usb/disk/disk.c

@@ -26,7 +26,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <9P2000.h>
 #include <thread.h>
 #include <9p.h>

+ 1 - 1
sys/src/cmd/usb/serial/serial.c

@@ -25,7 +25,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <thread.h>
 #include <9P2000.h>
 #include <9p.h>

+ 1 - 1
sys/src/cmd/vt/vt.c

@@ -39,7 +39,7 @@
 
 #include "cons.h"
 
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 int	wraparound = 1;
 int	originrelative = 0;

+ 1 - 1
sys/src/lib/disk/disk.c

@@ -1,7 +1,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <disk.h>
 
 static Disk*

+ 1 - 1
sys/src/lib/ip/parseip.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ip.h>
 
 char*

+ 1 - 1
sys/src/lib/ip/readipifc.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <lib9.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ip.h>
 
 static Ipifc**

+ 1 - 1
sys/src/lib/jehanne/9sys/announce.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 static int	nettrans(const char*, char*, int na, char*, int);
 

+ 1 - 1
sys/src/lib/jehanne/fmt/fltfmt.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include "fmtdef.h"
 
 enum

+ 1 - 1
sys/src/lib/jehanne/port/ctype.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 uint8_t	_ctype[256] =
 {

+ 1 - 1
sys/src/lib/jehanne/port/encodefmt.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 int
 jehanne_encodefmt(Fmt *f)

+ 1 - 1
sys/src/lib/jehanne/port/hangup.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 /*
  *  force a connection to hangup

+ 1 - 1
sys/src/lib/jehanne/port/netmkaddr.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 /*
  *  make an address, add the defaults

+ 1 - 1
sys/src/lib/jehanne/port/strtod.c

@@ -9,7 +9,7 @@
 
 #include <u.h>
 #include <libc.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 /*
  * This routine will convert to arbitrary precision

+ 1 - 1
sys/src/lib/jehanne/port/toupper.c

@@ -7,7 +7,7 @@
  * in the LICENSE file.
  */
 
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 int
 jehanne_toupper(int c)

+ 0 - 1
sys/src/lib/libs.json

@@ -24,7 +24,6 @@
 			"/sys/src/lib/plumb/",
 			"/sys/src/lib/regexp/",
 			"/sys/src/lib/sec/",
-			"/sys/src/lib/stdio/",
 			"/sys/src/lib/thread/",
 			"/sys/src/lib/posix/"
 		]

+ 1 - 1
sys/src/lib/ndb/ipattr.c

@@ -8,7 +8,7 @@
  */
 
 #include <u.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 /*
  *  return ndb attribute type of an ip name

+ 1 - 1
sys/src/lib/ndb/ndbaux.c

@@ -10,7 +10,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 #include "ndbhf.h"
 

+ 1 - 1
sys/src/lib/ndb/ndbcat.c

@@ -10,7 +10,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 
 Ndb*

+ 1 - 1
sys/src/lib/ndb/ndbfree.c

@@ -10,7 +10,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 #include "ndbhf.h"
 

+ 1 - 1
sys/src/lib/ndb/ndbopen.c

@@ -11,7 +11,7 @@
 #include <lib9.h>
 #include <envvars.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 #include "ndbhf.h"
 

+ 1 - 1
sys/src/lib/ndb/ndbparse.c

@@ -10,7 +10,7 @@
 #include <u.h>
 #include <lib9.h>
 #include <bio.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 #include <ndb.h>
 #include "ndbhf.h"
 

+ 1 - 1
sys/src/lib/sec/port/ecc.c

@@ -1,7 +1,7 @@
 #include "os.h"
 #include <mp.h>
 #include <libsec.h>
-#include <jehanne/ctype.h>
+#include <chartypes.h>
 
 extern void jacobian_affine(mpint *p,
 	mpint *X, mpint *Y, mpint *Z);

+ 0 - 118
sys/src/lib/stdio/Stdio.h

@@ -1,118 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio.h
- */
-/*
- * According to X3J11, there is only one i/o buffer
- * and it must not be occupied by both input and output data.
- *	If rp<wp, we must have state==RD and
- *	if wp<rp, we must have state==WR, so that getc and putc work correctly.
- *	On open, rp, wp and buf are set to 0, so first getc or putc will call _IO_getc
- *	or _IO_putc, which will allocate the buffer.
- *	If setvbuf(., ., _IONBF, .) is called, bufl is set to 0 and
- *	buf, rp and wp are pointed at unbuf.
- *	If setvbuf(., ., _IOLBF, .) is called, _IO_putc leaves wp and rp pointed at the
- *	end of the buffer so that it can be called on each putc to check whether it's got
- *	a newline.  This nonsense is in order to avoid impacting performance of the other
- *	buffering modes more than necessary -- putting the test in putc adds many
- *	instructions that are wasted in non-_IOLBF mode:
- *	#define putc(c, f)	(_IO_ctmp=(c),\
- *				(f)->wp>=(f)->rp || (f)->flags&LINEBUF && _IO_ctmp=='\n'\
- *					?_IO_putc(_IO_ctmp, f)\
- *					:*(f)->wp++=_IO_ctmp)
- *				
- */
-typedef struct{
-	int fd;		/* UNIX file pointer */
-	char flags;	/* bits for must free buffer on close, line-buffered */
-	char state;	/* last operation was read, write, position, error, eof */
-	char *buf;	/* pointer to i/o buffer */
-	char *rp;	/* read pointer (or write end-of-buffer) */
-	char *wp;	/* write pointer (or read end-of-buffer) */
-	char *lp;	/* actual write pointer used when line-buffering */
-	long bufl;	/* actual length of buffer */
-	char unbuf[1];	/* tiny buffer for unbuffered io (used for ungetc?) */
-}FILE;
-typedef long fpos_t;
-#ifndef NULL
-#define	NULL	0
-#endif
-/*
- * Third arg of setvbuf
- */
-#define	_IOFBF	1			/* block-buffered */
-#define	_IOLBF	2			/* line-buffered */
-#define	_IONBF	3			/* unbuffered */
-#define	BUFSIZ	4096			/* size of setbuf buffer */
-#define	EOF	(-1)			/* returned on end of file */
-#define	FOPEN_MAX	128		/* max files open */
-#define	FILENAME_MAX	BUFSIZ		/* silly filename length */
-#define	L_tmpnam	20		/* sizeof "/tmp/abcdefghij9999 */
-#define	SEEK_CUR	1
-#define	SEEK_END	2
-#define	SEEK_SET	0
-#define	TMP_MAX		64		/* very hard to set correctly */
-#define	stderr	(&_IO_stream[2])
-#define	stdin	(&_IO_stream[0])
-#define	stdout	(&_IO_stream[1])
-#define	_IO_CHMASK	0377		/* mask for 8 bit characters */
-FILE *tmpfile(void);
-char *tmpnam(char *);
-int fclose(FILE *);
-int fflush(FILE *);
-FILE *fopen(const char *, const char *);
-FILE *freopen(const char *, const char *, FILE *);
-void setbuf(FILE *, char *);
-int setvbuf(FILE *, char *, int, int32_t);
-int fprintf(FILE *, const char *, ...);
-int fscanf(FILE *, const char *, ...);
-int printf(const char *, ...);
-int scanf(const char *, ...);
-int sprintf(char *, const char *, ...);
-int sscanf(const char *, const char *, ...);
-int vfprintf(FILE *, const char *, va_list);
-int vprintf(const char *, va_list);
-int vsprintf(char *, const char *, va_list);
-int vfscanf(FILE *, const char *, va_list);
-int fgetc(FILE *);
-char *fgets(char *, int, FILE *);
-int fputc(int, FILE *);
-int fputs(const char *, FILE *);
-int getc(FILE *);
-#define	getc(f)	((f)->rp>=(f)->wp?_IO_getc(f):*(f)->rp++&_IO_CHMASK)
-int _IO_getc(FILE *f);
-int getchar(void);
-#define	getchar()	getc(stdin)
-char *gets(char *);
-int putc(int, FILE *);
-#define	putc(c, f) ((f)->wp>=(f)->rp?_IO_putc(c, f):(*(f)->wp++=c)&_IO_CHMASK)
-int _IO_putc(int, FILE *);
-int putchar(int);
-#define	putchar(c)	putc(c, stdout)
-int puts(const char *);
-int ungetc(int, FILE *);
-int32_t fread(void *, int32_t, int32_t, FILE *);
-int32_t fwrite(const void *, int32_t, int32_t, FILE *);
-int fgetpos(FILE *, fpos_t *);
-int fseek(FILE *, int32_t, int);
-int fsetpos(FILE *, const fpos_t *);
-int32_t ftell(FILE *);
-void rewind(FILE *);
-void clearerr(FILE *);
-int feof(FILE *);
-int ferror(FILE *);
-void perror(const char *);
-extern FILE _IO_stream[FOPEN_MAX];
-FILE *sopenr(const char *);
-FILE *sopenw(void);
-char *sclose(FILE *);
-char	*dtoa(double, int, int, int*, int*, char**);
-void	freedtoa(char*);

+ 0 - 35
sys/src/lib/stdio/_IO_getc.c

@@ -1,35 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- _IO_getc
- */
-#include "iolib.h"
-int _IO_getc(FILE *f){
-	int cnt;
-	switch(f->state){
-	default:	/* CLOSED, WR, ERR, EOF */
-		return EOF;
-	case OPEN:
-		_IO_setvbuf(f);
-	case RDWR:
-	case RD:
-		if(f->flags&STRING) return EOF;
-		cnt=jehanne_read(f->fd, f->buf, f->buf==f->unbuf?1:f->bufl);
-		switch(cnt){
-		case -1: f->state=ERR; return EOF;
-		case 0: f->state=END; return EOF;
-		default:
-			f->state=RD;
-			f->rp=f->buf;
-			f->wp=f->buf+cnt;
-			return (*f->rp++)&_IO_CHMASK;
-		}
-	}
-}

+ 0 - 114
sys/src/lib/stdio/_IO_putc.c

@@ -1,114 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- _IO_putc, _IO_cleanup
- */
-#include "iolib.h"
-void _IO_cleanup(void){
-	fflush(NULL);
-}
-/*
- * Look this over for simplification
- */
-int _IO_putc(int c, FILE *f){
-	int cnt;
-	static int first=1;
-	switch(f->state){
-	case RD:
-		f->state=ERR;
-	case ERR:
-	case CLOSED:
-		return EOF;
-	case OPEN:
-		_IO_setvbuf(f);
-		/* fall through */
-	case RDWR:
-	case END:
-		f->rp=f->buf+f->bufl;
-		if(f->flags&LINEBUF){
-			f->wp=f->rp;
-			f->lp=f->buf;
-		}
-		else
-			f->wp=f->buf;
-		break;
-	}
-	if(first){
-		atexit(_IO_cleanup);
-		first=0;
-	}
-	if(f->flags&STRING){
-		f->rp=f->buf+f->bufl;
-		if(f->wp==f->rp){
-			if(f->flags&BALLOC)
-				f->buf=realloc(f->buf, f->bufl+BUFSIZ);
-			else{
-				f->state=ERR;
-				return EOF;
-			}
-			if(f->buf==NULL){
-				f->state=ERR;
-				return EOF;
-			}
-			f->rp=f->buf+f->bufl;
-			f->bufl+=BUFSIZ;
-		}
-		*f->wp++=c;
-	}
-	else if(f->flags&LINEBUF){
-		if(f->lp==f->rp){
-			cnt=f->lp-f->buf;
-			if(f->flags&APPEND) sys_seek(f->fd, 0L, 2);
-			if(cnt!=0 && jehanne_write(f->fd, f->buf, cnt)!=cnt){
-				f->state=ERR;
-				return EOF;
-			}
-			f->lp=f->buf;
-		}
-		*f->lp++=c;
-		if(c=='\n'){
-			cnt=f->lp-f->buf;
-			if(f->flags&APPEND) sys_seek(f->fd, 0L, 2);
-			if(cnt!=0 && jehanne_write(f->fd, f->buf, cnt)!=cnt){
-				f->state=ERR;
-				return EOF;
-			}
-			f->lp=f->buf;
-		}
-	}
-	else if(f->buf==f->unbuf){
-		f->unbuf[0]=c;
-		if(f->flags&APPEND) sys_seek(f->fd, 0L, 2);
-		if(jehanne_write(f->fd, f->buf, 1)!=1){
-			f->state=ERR;
-			return EOF;
-		}
-	}
-	else{
-		if(f->wp==f->rp){
-			cnt=f->wp-f->buf;
-			if(f->flags&APPEND) sys_seek(f->fd, 0L, 2);
-			if(cnt!=0 && jehanne_write(f->fd, f->buf, cnt)!=cnt){
-				f->state=ERR;
-				return EOF;
-			}
-			f->wp=f->buf;
-			f->rp=f->buf+f->bufl;
-		}
-		*f->wp++=c;
-	}
-	f->state=WR;
-	/*
-	 * Make sure EOF looks different from putc(-1)
-	 * Should be able to cast to unsigned char, but
-	 * there's a vc bug preventing that from working
-	 */
-	return c&0xff;
-}

+ 0 - 60
sys/src/lib/stdio/build.json

@@ -1,60 +0,0 @@
-{
-	"libstdio": {
-		"Include": [
-			"../lib.json"
-		],
-		"Install": "/arch/$ARCH/lib/",
-		"Library": "libstdio.a",
-		"SourceFiles": [
-			"_IO_getc.c",
-			"_IO_putc.c",
-			"clearerr.c",
-			"dtoa.c",
-			"fclose.c",
-			"fdopen.c",
-			"feof.c",
-			"ferror.c",
-			"fflush.c",
-			"fgetc.c",
-			"fgetpos.c",
-			"fgets.c",
-			"fileno.c",
-			"fopen.c",
-			"fprintf.c",
-			"fputc.c",
-			"fputs.c",
-			"fread.c",
-			"freopen.c",
-			"fscanf.c",
-			"fseek.c",
-			"fseeko.c",
-			"fsetpos.c",
-			"ftell.c",
-			"ftello.c",
-			"fwrite.c",
-			"getc.c",
-			"gets.c",
-			"printf.c",
-			"putc.c",
-			"puts.c",
-			"rewind.c",
-			"scanf.c",
-			"sclose.c",
-			"setbuf.c",
-			"setvbuf.c",
-			"snprintf.c",
-			"sopenr.c",
-			"sopenw.c",
-			"sprintf.c",
-			"sscanf.c",
-			"tmpfile.c",
-			"tmpnam.c",
-			"ungetc.c",
-			"vfprintf.c",
-			"vfscanf.c",
-			"vprintf.c",
-			"vsnprintf.c",
-			"vsprintf.c"
-		]
-	}
-}

+ 0 - 23
sys/src/lib/stdio/clearerr.c

@@ -1,23 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- clearerr
- */
-#include "iolib.h"
-void clearerr(FILE *f){
-	switch(f->state){
-	case ERR:
-		f->state=f->buf?RDWR:OPEN;
-		break;
-	case END:
-		f->state=RDWR;
-		break;
-	}
-}

+ 0 - 1181
sys/src/lib/stdio/dtoa.c

@@ -1,1181 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/* derived from /netlib/fp/dtoa.c assuming IEEE, Standard C */
-/* kudos to dmg@bell-labs.com, gripes to ehg@bell-labs.com */
-
-/* Let x be the exact mathematical number defined by a decimal
- *	string s.  Then atof(s) is the round-nearest-even IEEE
- *	floating point value.
- * Let y be an IEEE floating point value and let s be the string
- *	printed as %.17g.  Then atof(s) is exactly y.
- */
-#include <u.h>
-#include <lib9.h>
-
-static Lock _dtoalk[2];
-#define ACQUIRE_DTOA_LOCK(n)	jehanne_lock(&_dtoalk[n])
-#define FREE_DTOA_LOCK(n)	jehanne_unlock(&_dtoalk[n])
-
-#define PRIVATE_mem ((2000+sizeof(double)-1)/sizeof(double))
-static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
-
-#define FLT_ROUNDS	1
-#define DBL_DIG		15
-#define DBL_MAX_10_EXP	308
-#define DBL_MAX_EXP	1024
-#define FLT_RADIX	2
-#define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
-
-/* Ten_pmax = floor(P*log(2)/log(5)) */
-/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
-/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
-/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
-
-#define Exp_shift  20
-#define Exp_shift1 20
-#define Exp_msk1    0x100000
-#define Exp_msk11   0x100000
-#define Exp_mask  0x7ff00000
-#define P 53
-#define Bias 1023
-#define Emin (-1022)
-#define Exp_1  0x3ff00000
-#define Exp_11 0x3ff00000
-#define Ebits 11
-#define Frac_mask  0xfffff
-#define Frac_mask1 0xfffff
-#define Ten_pmax 22
-#define Bletch 0x10
-#define Bndry_mask  0xfffff
-#define Bndry_mask1 0xfffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 1
-#define Tiny0 0
-#define Tiny1 1
-#define Quick_max 14
-#define Int_max 14
-#define Avoid_Underflow
-
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
-
-#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
-#define Big1 0xffffffff
-
-#define FFFFFFFF 0xffffffffUL
-
-#define Kmax 15
-
-typedef struct Bigint Bigint;
-typedef struct Ulongs Ulongs;
-
-struct Bigint {
-	Bigint *next;
-	int	k, maxwds, sign, wds;
-	unsigned x[1];
-};
-
-struct Ulongs {
-	uint32_t	hi;
-	uint32_t	lo;
-};
-
-static Bigint *freelist[Kmax+1];
-
-Ulongs
-double2ulongs(double d)
-{
-	FPdbleword dw;
-	Ulongs uls;
-
-	dw.x = d;
-	uls.hi = dw.hi;
-	uls.lo = dw.lo;
-	return uls;
-}
-
-double
-ulongs2double(Ulongs uls)
-{
-	FPdbleword dw;
-
-	dw.hi = uls.hi;
-	dw.lo = uls.lo;
-	return dw.x;
-}
-
-static Bigint *
-Balloc(int k)
-{
-	int	x;
-	Bigint * rv;
-	unsigned int	len;
-
-	ACQUIRE_DTOA_LOCK(0);
-	if (rv = freelist[k]) {
-		freelist[k] = rv->next;
-	} else {
-		x = 1 << k;
-		len = (sizeof(Bigint) + (x - 1) * sizeof(unsigned int) + sizeof(double) -1)
-		 / sizeof(double);
-		if (pmem_next - private_mem + len <= PRIVATE_mem) {
-			rv = (Bigint * )pmem_next;
-			pmem_next += len;
-		} else
-			rv = (Bigint * )malloc(len * sizeof(double));
-		rv->k = k;
-		rv->maxwds = x;
-	}
-	FREE_DTOA_LOCK(0);
-	rv->sign = rv->wds = 0;
-	return rv;
-}
-
-static void	
-Bfree(Bigint *v)
-{
-	if (v) {
-		ACQUIRE_DTOA_LOCK(0);
-		v->next = freelist[v->k];
-		freelist[v->k] = v;
-		FREE_DTOA_LOCK(0);
-	}
-}
-
-#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
-y->wds*sizeof(int) + 2*sizeof(int))
-
-static Bigint *
-multadd(Bigint *b, int m, int a)	/* multiply by m and add a */
-{
-	int	i, wds;
-	unsigned int carry, *x, y;
-	unsigned int xi, z;
-	Bigint * b1;
-
-	wds = b->wds;
-	x = b->x;
-	i = 0;
-	carry = a;
-	do {
-		xi = *x;
-		y = (xi & 0xffff) * m + carry;
-		z = (xi >> 16) * m + (y >> 16);
-		carry = z >> 16;
-		*x++ = (z << 16) + (y & 0xffff);
-	} while (++i < wds);
-	if (carry) {
-		if (wds >= b->maxwds) {
-			b1 = Balloc(b->k + 1);
-			Bcopy(b1, b);
-			Bfree(b);
-			b = b1;
-		}
-		b->x[wds++] = carry;
-		b->wds = wds;
-	}
-	return b;
-}
-
-static int	
-hi0bits(register unsigned int x)
-{
-	register int	k = 0;
-
-	if (!(x & 0xffff0000)) {
-		k = 16;
-		x <<= 16;
-	}
-	if (!(x & 0xff000000)) {
-		k += 8;
-		x <<= 8;
-	}
-	if (!(x & 0xf0000000)) {
-		k += 4;
-		x <<= 4;
-	}
-	if (!(x & 0xc0000000)) {
-		k += 2;
-		x <<= 2;
-	}
-	if (!(x & 0x80000000)) {
-		k++;
-		if (!(x & 0x40000000))
-			return 32;
-	}
-	return k;
-}
-
-static int	
-lo0bits(unsigned int *y)
-{
-	register int	k;
-	register unsigned int x = *y;
-
-	if (x & 7) {
-		if (x & 1)
-			return 0;
-		if (x & 2) {
-			*y = x >> 1;
-			return 1;
-		}
-		*y = x >> 2;
-		return 2;
-	}
-	k = 0;
-	if (!(x & 0xffff)) {
-		k = 16;
-		x >>= 16;
-	}
-	if (!(x & 0xff)) {
-		k += 8;
-		x >>= 8;
-	}
-	if (!(x & 0xf)) {
-		k += 4;
-		x >>= 4;
-	}
-	if (!(x & 0x3)) {
-		k += 2;
-		x >>= 2;
-	}
-	if (!(x & 1)) {
-		k++;
-		x >>= 1;
-		if (!x & 1)
-			return 32;
-	}
-	*y = x;
-	return k;
-}
-
-static Bigint *
-i2b(int i)
-{
-	Bigint * b;
-
-	b = Balloc(1);
-	b->x[0] = i;
-	b->wds = 1;
-	return b;
-}
-
-static Bigint *
-mult(Bigint *a, Bigint *b)
-{
-	Bigint * c;
-	int	k, wa, wb, wc;
-	unsigned int * x, *xa, *xae, *xb, *xbe, *xc, *xc0;
-	unsigned int y;
-	unsigned int carry, z;
-	unsigned int z2;
-
-	if (a->wds < b->wds) {
-		c = a;
-		a = b;
-		b = c;
-	}
-	k = a->k;
-	wa = a->wds;
-	wb = b->wds;
-	wc = wa + wb;
-	if (wc > a->maxwds)
-		k++;
-	c = Balloc(k);
-	for (x = c->x, xa = x + wc; x < xa; x++)
-		*x = 0;
-	xa = a->x;
-	xae = xa + wa;
-	xb = b->x;
-	xbe = xb + wb;
-	xc0 = c->x;
-	for (; xb < xbe; xb++, xc0++) {
-		if (y = *xb & 0xffff) {
-			x = xa;
-			xc = xc0;
-			carry = 0;
-			do {
-				z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
-				carry = z >> 16;
-				z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
-				carry = z2 >> 16;
-				Storeinc(xc, z2, z);
-			} while (x < xae);
-			*xc = carry;
-		}
-		if (y = *xb >> 16) {
-			x = xa;
-			xc = xc0;
-			carry = 0;
-			z2 = *xc;
-			do {
-				z = (*x & 0xffff) * y + (*xc >> 16) + carry;
-				carry = z >> 16;
-				Storeinc(xc, z, z2);
-				z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
-				carry = z2 >> 16;
-			} while (x < xae);
-			*xc = z2;
-		}
-	}
-	for (xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) 
-		;
-	c->wds = wc;
-	return c;
-}
-
-static Bigint *p5s;
-
-static Bigint *
-pow5mult(Bigint *b, int k)
-{
-	Bigint * b1, *p5, *p51;
-	int	i;
-	static int	p05[3] = { 
-		5, 25, 125 	};
-
-	if (i = k & 3)
-		b = multadd(b, p05[i-1], 0);
-
-	if (!(k >>= 2))
-		return b;
-	if (!(p5 = p5s)) {
-		/* first time */
-		ACQUIRE_DTOA_LOCK(1);
-		if (!(p5 = p5s)) {
-			p5 = p5s = i2b(625);
-			p5->next = 0;
-		}
-		FREE_DTOA_LOCK(1);
-	}
-	for (; ; ) {
-		if (k & 1) {
-			b1 = mult(b, p5);
-			Bfree(b);
-			b = b1;
-		}
-		if (!(k >>= 1))
-			break;
-		if (!(p51 = p5->next)) {
-			ACQUIRE_DTOA_LOCK(1);
-			if (!(p51 = p5->next)) {
-				p51 = p5->next = mult(p5, p5);
-				p51->next = 0;
-			}
-			FREE_DTOA_LOCK(1);
-		}
-		p5 = p51;
-	}
-	return b;
-}
-
-static Bigint *
-lshift(Bigint *b, int k)
-{
-	int	i, k1, n, n1;
-	Bigint * b1;
-	unsigned int * x, *x1, *xe, z;
-
-	n = k >> 5;
-	k1 = b->k;
-	n1 = n + b->wds + 1;
-	for (i = b->maxwds; n1 > i; i <<= 1)
-		k1++;
-	b1 = Balloc(k1);
-	x1 = b1->x;
-	for (i = 0; i < n; i++)
-		*x1++ = 0;
-	x = b->x;
-	xe = x + b->wds;
-	if (k &= 0x1f) {
-		k1 = 32 - k;
-		z = 0;
-		do {
-			*x1++ = *x << k | z;
-			z = *x++ >> k1;
-		} while (x < xe);
-		if (*x1 = z)
-			++n1;
-	} else 
-		do
-			*x1++ = *x++;
-		while (x < xe);
-	b1->wds = n1 - 1;
-	Bfree(b);
-	return b1;
-}
-
-static int	
-cmp(Bigint *a, Bigint *b)
-{
-	unsigned int * xa, *xa0, *xb, *xb0;
-	int	i, j;
-
-	i = a->wds;
-	j = b->wds;
-	if (i -= j)
-		return i;
-	xa0 = a->x;
-	xa = xa0 + j;
-	xb0 = b->x;
-	xb = xb0 + j;
-	for (; ; ) {
-		if (*--xa != *--xb)
-			return * xa < *xb ? -1 : 1;
-		if (xa <= xa0)
-			break;
-	}
-	return 0;
-}
-
-static Bigint *
-diff(Bigint *a, Bigint *b)
-{
-	Bigint * c;
-	int	i, wa, wb;
-	unsigned int * xa, *xae, *xb, *xbe, *xc;
-	unsigned int borrow, y;
-	unsigned int z;
-
-	i = cmp(a, b);
-	if (!i) {
-		c = Balloc(0);
-		c->wds = 1;
-		c->x[0] = 0;
-		return c;
-	}
-	if (i < 0) {
-		c = a;
-		a = b;
-		b = c;
-		i = 1;
-	} else
-		i = 0;
-	c = Balloc(a->k);
-	c->sign = i;
-	wa = a->wds;
-	xa = a->x;
-	xae = xa + wa;
-	wb = b->wds;
-	xb = b->x;
-	xbe = xb + wb;
-	xc = c->x;
-	borrow = 0;
-	do {
-		y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
-		borrow = (y & 0x10000) >> 16;
-		z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
-		borrow = (z & 0x10000) >> 16;
-		Storeinc(xc, z, y);
-	} while (xb < xbe);
-	while (xa < xae) {
-		y = (*xa & 0xffff) - borrow;
-		borrow = (y & 0x10000) >> 16;
-		z = (*xa++ >> 16) - borrow;
-		borrow = (z & 0x10000) >> 16;
-		Storeinc(xc, z, y);
-	}
-	while (!*--xc)
-		wa--;
-	c->wds = wa;
-	return c;
-}
-
-static Bigint *
-d2b(double d, int *e, int *bits)
-{
-	Bigint * b;
-	int	de, i, k;
-	unsigned *x, y, z;
-	Ulongs uls;
-
-	b = Balloc(1);
-	x = b->x;
-
-	uls = double2ulongs(d);
-	z = uls.hi & Frac_mask;
-	uls.hi &= 0x7fffffff;		/* clear sign bit, which we ignore */
-	de = (int)(uls.hi >> Exp_shift);
-	z |= Exp_msk11;
-	if (y = uls.lo) {		/* assignment = */
-		if (k = lo0bits(&y)) {	/* assignment = */
-			x[0] = y | z << 32 - k;
-			z >>= k;
-		} else
-			x[0] = y;
-		i = b->wds = (x[1] = z) ? 2 : 1;
-	} else {
-		k = lo0bits(&z);
-		x[0] = z;
-		i = b->wds = 1;
-		k += 32;
-	}
-	USED(i);
-	*e = de - Bias - (P - 1) + k;
-	*bits = P - k;
-	return b;
-}
-
-static const double
-tens[] = {
-	1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
-	1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
-	1e20, 1e21, 1e22
-};
-
-static const double
-bigtens[] = { 
-	1e16, 1e32, 1e64, 1e128, 1e256 };
-/*
-static const double tinytens[] = { 
-	1e-16, 1e-32, 1e-64, 1e-128,
-	9007199254740992.e-256
-};
-*/
-/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
-/* flag unnecessarily.  It leads to a song and dance at the end of strtod. */
-#define Scale_Bit 0x10
-#define n_bigtens 5
-
-#define NAN_WORD0 0x7ff80000
-
-#define NAN_WORD1 0
-
-static int	
-quorem(Bigint *b, Bigint *S)
-{
-	int	n;
-	unsigned int * bx, *bxe, q, *sx, *sxe;
-	unsigned int borrow, carry, y, ys;
-	unsigned int si, z, zs;
-
-	n = S->wds;
-	if (b->wds < n)
-		return 0;
-	sx = S->x;
-	sxe = sx + --n;
-	bx = b->x;
-	bxe = bx + n;
-	q = *bxe / (*sxe + 1);	/* ensure q <= true quotient */
-	if (q) {
-		borrow = 0;
-		carry = 0;
-		do {
-			si = *sx++;
-			ys = (si & 0xffff) * q + carry;
-			zs = (si >> 16) * q + (ys >> 16);
-			carry = zs >> 16;
-			y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
-			borrow = (y & 0x10000) >> 16;
-			z = (*bx >> 16) - (zs & 0xffff) - borrow;
-			borrow = (z & 0x10000) >> 16;
-			Storeinc(bx, z, y);
-		} while (sx <= sxe);
-		if (!*bxe) {
-			bx = b->x;
-			while (--bxe > bx && !*bxe)
-				--n;
-			b->wds = n;
-		}
-	}
-	if (cmp(b, S) >= 0) {
-		q++;
-		borrow = 0;
-		carry = 0;
-		bx = b->x;
-		sx = S->x;
-		do {
-			si = *sx++;
-			ys = (si & 0xffff) + carry;
-			zs = (si >> 16) + (ys >> 16);
-			carry = zs >> 16;
-			y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
-			borrow = (y & 0x10000) >> 16;
-			z = (*bx >> 16) - (zs & 0xffff) - borrow;
-			borrow = (z & 0x10000) >> 16;
-			Storeinc(bx, z, y);
-		} while (sx <= sxe);
-		bx = b->x;
-		bxe = bx + n;
-		if (!*bxe) {
-			while (--bxe > bx && !*bxe)
-				--n;
-			b->wds = n;
-		}
-	}
-	return q;
-}
-
-static char	*
-rv_alloc(int i)
-{
-	int	j, k, *r;
-
-	j = sizeof(unsigned int);
-	for (k = 0; 
-	    sizeof(Bigint) - sizeof(unsigned int) - sizeof(int) + j <= i; 
-	    j <<= 1)
-		k++;
-	r = (int * )Balloc(k);
-	*r = k;
-	return
-	    (char *)(r + 1);
-}
-
-static char	*
-nrv_alloc(char *s, char **rve, int n)
-{
-	char	*rv, *t;
-
-	t = rv = rv_alloc(n);
-	while (*t = *s++) 
-		t++;
-	if (rve)
-		*rve = t;
-	return rv;
-}
-
-/* freedtoa(s) must be used to free values s returned by dtoa
- * when MULTIPLE_THREADS is #defined.  It should be used in all cases,
- * but for consistency with earlier versions of dtoa, it is optional
- * when MULTIPLE_THREADS is not defined.
- */
-
-void
-freedtoa(char *s)
-{
-	Bigint * b = (Bigint * )((int *)s - 1);
-	b->maxwds = 1 << (b->k = *(int * )b);
-	Bfree(b);
-}
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- *	1. Rather than iterating, we use a simple numeric overestimate
- *	   to determine k = floor(log10(d)).  We scale relevant
- *	   quantities using O(log2(k)) rather than O(k) multiplications.
- *	2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- *	   try to generate digits strictly left to right.  Instead, we
- *	   compute with fewer bits and propagate the carry if necessary
- *	   when rounding the final digit up.  This is often faster.
- *	3. Under the assumption that input will be rounded nearest,
- *	   mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- *	   That is, we allow equality in stopping tests when the
- *	   round-nearest rule will give the same floating-point value
- *	   as would satisfaction of the stopping test with strict
- *	   inequality.
- *	4. We remove common factors of powers of 2 from relevant
- *	   quantities.
- *	5. When converting floating-point integers less than 1e16,
- *	   we use floating-point arithmetic rather than resorting
- *	   to multiple-precision integers.
- *	6. When asked to produce fewer than 15 digits, we first try
- *	   to get by with floating-point arithmetic; we resort to
- *	   multiple-precision integer arithmetic only if we cannot
- *	   guarantee that the floating-point calculation has given
- *	   the correctly rounded result.  For k requested digits and
- *	   "uniformly" distributed input, the probability is
- *	   something like 10^(k-15) that we must resort to the int
- *	   calculation.
- */
-
-char	*
-dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
-{
-	/*	Arguments ndigits, decpt, sign are similar to those
-	of ecvt and fcvt; trailing zeros are suppressed from
-	the returned string.  If not null, *rve is set to point
-	to the end of the return value.  If d is +-Infinity or NaN,
-	then *decpt is set to 9999.
-
-	mode:
-		0 ==> shortest string that yields d when read in
-			and rounded to nearest.
-		1 ==> like 0, but with Steele & White stopping rule;
-			e.g. with IEEE P754 arithmetic , mode 0 gives
-			1e23 whereas mode 1 gives 9.999999999999999e22.
-		2 ==> max(1,ndigits) significant digits.  This gives a
-			return value similar to that of ecvt, except
-			that trailing zeros are suppressed.
-		3 ==> through ndigits past the decimal point.  This
-			gives a return value similar to that from fcvt,
-			except that trailing zeros are suppressed, and
-			ndigits can be negative.
-		4-9 should give the same return values as 2-3, i.e.,
-			4 <= mode <= 9 ==> same return as mode
-			2 + (mode & 1).  These modes are mainly for
-			debugging; often they run slower but sometimes
-			faster than modes 2-3.
-		4,5,8,9 ==> left-to-right digit generation.
-		6-9 ==> don't try fast floating-point estimate
-			(if applicable).
-
-		Values of mode other than 0-9 are treated as mode 0.
-
-		Sufficient space is allocated to the return value
-		to hold the suppressed trailing zeros.
-	*/
-
-	int	bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
-		j, j1, k, k0, k_check, L, leftright, m2, m5, s2, s5,
-		spec_case, try_quick;
-	Bigint * b, *b1, *delta, *mlo=nil, *mhi, *S;
-	double	d2, ds, eps;
-	char	*s, *s0;
-	Ulongs ulsd, ulsd2;
-
-	ulsd = double2ulongs(d);
-	if (ulsd.hi & Sign_bit) {
-		/* set sign for everything, including 0's and NaNs */
-		*sign = 1;
-		ulsd.hi &= ~Sign_bit;	/* clear sign bit */
-	} else
-		*sign = 0;
-
-	if ((ulsd.hi & Exp_mask) == Exp_mask) {
-		/* Infinity or NaN */
-		*decpt = 9999;
-		if (!ulsd.lo && !(ulsd.hi & 0xfffff))
-			return nrv_alloc("Infinity", rve, 8);
-		return nrv_alloc("NaN", rve, 3);
-	}
-	d = ulongs2double(ulsd);
-
-	if (!d) {
-		*decpt = 1;
-		return nrv_alloc("0", rve, 1);
-	}
-
-	b = d2b(d, &be, &bbits);
-	i = (int)(ulsd.hi >> Exp_shift1 & (Exp_mask >> Exp_shift1));
-
-	ulsd2 = ulsd;
-	ulsd2.hi &= Frac_mask1;
-	ulsd2.hi |= Exp_11;
-	d2 = ulongs2double(ulsd2);
-
-	/* log(x)	~=~ log(1.5) + (x-1.5)/1.5
-		 * log10(x)	 =  log(x) / log(10)
-		 *		~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
-		 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
-		 *
-		 * This suggests computing an approximation k to log10(d) by
-		 *
-		 * k = (i - Bias)*0.301029995663981
-		 *	+ ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
-		 *
-		 * We want k to be too large rather than too small.
-		 * The error in the first-order Taylor series approximation
-		 * is in our favor, so we just round up the constant enough
-		 * to compensate for any error in the multiplication of
-		 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
-		 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
-		 * adding 1e-13 to the constant term more than suffices.
-		 * Hence we adjust the constant term to 0.1760912590558.
-		 * (We could get a more accurate k by invoking log10,
-		 *  but this is probably not worthwhile.)
-		 */
-
-	i -= Bias;
-	ds = (d2 - 1.5) * 0.289529654602168 + 0.1760912590558 + i * 0.301029995663981;
-	k = (int)ds;
-	if (ds < 0. && ds != k)
-		k--;	/* want k = floor(ds) */
-	k_check = 1;
-	if (k >= 0 && k <= Ten_pmax) {
-		if (d < tens[k])
-			k--;
-		k_check = 0;
-	}
-	j = bbits - i - 1;
-	if (j >= 0) {
-		b2 = 0;
-		s2 = j;
-	} else {
-		b2 = -j;
-		s2 = 0;
-	}
-	if (k >= 0) {
-		b5 = 0;
-		s5 = k;
-		s2 += k;
-	} else {
-		b2 -= k;
-		b5 = -k;
-		s5 = 0;
-	}
-	if (mode < 0 || mode > 9)
-		mode = 0;
-	try_quick = 1;
-	if (mode > 5) {
-		mode -= 4;
-		try_quick = 0;
-	}
-	leftright = 1;
-	switch (mode) {
-	case 0:
-	case 1:
-	default:
-		ilim = ilim1 = -1;
-		i = 18;
-		ndigits = 0;
-		break;
-	case 2:
-		leftright = 0;
-		/* no break */
-	case 4:
-		if (ndigits <= 0)
-			ndigits = 1;
-		ilim = ilim1 = i = ndigits;
-		break;
-	case 3:
-		leftright = 0;
-		/* no break */
-	case 5:
-		i = ndigits + k + 1;
-		ilim = i;
-		ilim1 = i - 1;
-		if (i <= 0)
-			i = 1;
-	}
-	s = s0 = rv_alloc(i);
-
-	if (ilim >= 0 && ilim <= Quick_max && try_quick) {
-
-		/* Try to get by with floating-point arithmetic. */
-
-		i = 0;
-		d2 = d;
-		k0 = k;
-		ilim0 = ilim;
-		ieps = 2; /* conservative */
-		if (k > 0) {
-			ds = tens[k&0xf];
-			j = k >> 4;
-			if (j & Bletch) {
-				/* prevent overflows */
-				j &= Bletch - 1;
-				d /= bigtens[n_bigtens-1];
-				ieps++;
-			}
-			for (; j; j >>= 1, i++)
-				if (j & 1) {
-					ieps++;
-					ds *= bigtens[i];
-				}
-			d /= ds;
-		} else if (j1 = -k) {
-			d *= tens[j1 & 0xf];
-			for (j = j1 >> 4; j; j >>= 1, i++)
-				if (j & 1) {
-					ieps++;
-					d *= bigtens[i];
-				}
-		}
-		if (k_check && d < 1. && ilim > 0) {
-			if (ilim1 <= 0)
-				goto fast_failed;
-			ilim = ilim1;
-			k--;
-			d *= 10.;
-			ieps++;
-		}
-		eps = ieps * d + 7.;
-
-		ulsd = double2ulongs(eps);
-		ulsd.hi -= (P - 1) * Exp_msk1;
-		eps = ulongs2double(ulsd);
-
-		if (ilim == 0) {
-			S = mhi = 0;
-			d -= 5.;
-			if (d > eps)
-				goto one_digit;
-			if (d < -eps)
-				goto no_digits;
-			goto fast_failed;
-		}
-		/* Generate ilim digits, then fix them up. */
-		eps *= tens[ilim-1];
-		for (i = 1; ; i++, d *= 10.) {
-			L = d;
-			// assert(L < 10);
-			d -= L;
-			*s++ = '0' + (int)L;
-			if (i == ilim) {
-				if (d > 0.5 + eps)
-					goto bump_up;
-				else if (d < 0.5 - eps) {
-					while (*--s == '0')
-						;
-					s++;
-					goto ret1;
-				}
-				break;
-			}
-		}
-fast_failed:
-		s = s0;
-		d = d2;
-		k = k0;
-		ilim = ilim0;
-	}
-
-	/* Do we have a "small" integer? */
-
-	if (be >= 0 && k <= Int_max) {
-		/* Yes. */
-		ds = tens[k];
-		if (ndigits < 0 && ilim <= 0) {
-			S = mhi = 0;
-			if (ilim < 0 || d <= 5 * ds)
-				goto no_digits;
-			goto one_digit;
-		}
-		for (i = 1; ; i++) {
-			L = d / ds;
-			d -= L * ds;
-			*s++ = '0' + (int)L;
-			if (i == ilim) {
-				d += d;
-				if (d > ds || d == ds && L & 1) {
-bump_up:
-					while (*--s == '9')
-						if (s == s0) {
-							k++;
-							*s = '0';
-							break;
-						}
-					++ * s++;
-				}
-				break;
-			}
-			if (!(d *= 10.))
-				break;
-		}
-		goto ret1;
-	}
-
-	m2 = b2;
-	m5 = b5;
-	mhi = mlo = 0;
-	if (leftright) {
-		if (mode < 2) {
-			i = 
-			    1 + P - bbits;
-		} else {
-			j = ilim - 1;
-			if (m5 >= j)
-				m5 -= j;
-			else {
-				s5 += j -= m5;
-				b5 += j;
-				m5 = 0;
-			}
-			if ((i = ilim) < 0) {
-				m2 -= i;
-				i = 0;
-			}
-		}
-		b2 += i;
-		s2 += i;
-		mhi = i2b(1);
-	}
-	if (m2 > 0 && s2 > 0) {
-		i = m2 < s2 ? m2 : s2;
-		b2 -= i;
-		m2 -= i;
-		s2 -= i;
-	}
-	if (b5 > 0) {
-		if (leftright) {
-			if (m5 > 0) {
-				mhi = pow5mult(mhi, m5);
-				b1 = mult(mhi, b);
-				Bfree(b);
-				b = b1;
-			}
-			if (j = b5 - m5)
-				b = pow5mult(b, j);
-		} else
-			b = pow5mult(b, b5);
-	}
-	S = i2b(1);
-	if (s5 > 0)
-		S = pow5mult(S, s5);
-
-	/* Check for special case that d is a normalized power of 2. */
-
-	spec_case = 0;
-	if (mode < 2) {
-		ulsd = double2ulongs(d);
-		if (!ulsd.lo && !(ulsd.hi & Bndry_mask)) {
-			/* The special case */
-			b2 += Log2P;
-			s2 += Log2P;
-			spec_case = 1;
-		}
-	}
-
-	/* Arrange for convenient computation of quotients:
-	 * shift left if necessary so divisor has 4 leading 0 bits.
-	 *
-	 * Perhaps we should just compute leading 28 bits of S once
-	 * and for all and pass them and a shift to quorem, so it
-	 * can do shifts and ors to compute the numerator for q.
-	 */
-	if (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f)
-		i = 32 - i;
-	if (i > 4) {
-		i -= 4;
-		b2 += i;
-		m2 += i;
-		s2 += i;
-	} else if (i < 4) {
-		i += 28;
-		b2 += i;
-		m2 += i;
-		s2 += i;
-	}
-	if (b2 > 0)
-		b = lshift(b, b2);
-	if (s2 > 0)
-		S = lshift(S, s2);
-	if (k_check) {
-		if (cmp(b, S) < 0) {
-			k--;
-			b = multadd(b, 10, 0);	/* we botched the k estimate */
-			if (leftright)
-				mhi = multadd(mhi, 10, 0);
-			ilim = ilim1;
-		}
-	}
-	if (ilim <= 0 && mode > 2) {
-		if (ilim < 0 || cmp(b, S = multadd(S, 5, 0)) <= 0) {
-			/* no digits, fcvt style */
-no_digits:
-			k = -1 - ndigits;
-			goto ret;
-		}
-one_digit:
-		*s++ = '1';
-		k++;
-		goto ret;
-	}
-	if (leftright) {
-		if (m2 > 0)
-			mhi = lshift(mhi, m2);
-
-		/* Compute mlo -- check for special case
-		 * that d is a normalized power of 2.
-		 */
-
-		mlo = mhi;
-		if (spec_case) {
-			mhi = Balloc(mhi->k);
-			Bcopy(mhi, mlo);
-			mhi = lshift(mhi, Log2P);
-		}
-
-		for (i = 1; ; i++) {
-			dig = quorem(b, S) + '0';
-			/* Do we yet have the shortest decimal string
-			 * that will round to d?
-			 */
-			j = cmp(b, mlo);
-			delta = diff(S, mhi);
-			j1 = delta->sign ? 1 : cmp(b, delta);
-			Bfree(delta);
-			ulsd = double2ulongs(d);
-			if (j1 == 0 && !mode && !(ulsd.lo & 1)) {
-				if (dig == '9')
-					goto round_9_up;
-				if (j > 0)
-					dig++;
-				*s++ = dig;
-				goto ret;
-			}
-			if (j < 0 || j == 0 && !mode && !(ulsd.lo & 1)) {
-				if (j1 > 0) {
-					b = lshift(b, 1);
-					j1 = cmp(b, S);
-					if ((j1 > 0 || j1 == 0 && dig & 1)
-					     && dig++ == '9')
-						goto round_9_up;
-				}
-				*s++ = dig;
-				goto ret;
-			}
-			if (j1 > 0) {
-				if (dig == '9') { /* possible if i == 1 */
-round_9_up:
-					*s++ = '9';
-					goto roundoff;
-				}
-				*s++ = dig + 1;
-				goto ret;
-			}
-			*s++ = dig;
-			if (i == ilim)
-				break;
-			b = multadd(b, 10, 0);
-			if (mlo == mhi)
-				mlo = mhi = multadd(mhi, 10, 0);
-			else {
-				mlo = multadd(mlo, 10, 0);
-				mhi = multadd(mhi, 10, 0);
-			}
-		}
-	} else
-		for (i = 1; ; i++) {
-			*s++ = dig = quorem(b, S) + '0';
-			if (i >= ilim)
-				break;
-			b = multadd(b, 10, 0);
-		}
-
-	/* Round off last digit */
-
-	b = lshift(b, 1);
-	j = cmp(b, S);
-	if (j > 0 || j == 0 && dig & 1) {
-roundoff:
-		while (*--s == '9')
-			if (s == s0) {
-				k++;
-				*s++ = '1';
-				goto ret;
-			}
-		++ * s++;
-	} else {
-		while (*--s == '0')
-			;
-		s++;
-	}
-ret:
-	Bfree(S);
-	if (mhi) {
-		if (mlo && mlo != mhi)
-			Bfree(mlo);
-		Bfree(mhi);
-	}
-ret1:
-	Bfree(b);
-	*s = 0;
-	*decpt = k + 1;
-	if (rve)
-		*rve = s;
-	return s0;
-}

+ 0 - 23
sys/src/lib/stdio/fclose.c

@@ -1,23 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fclose
- */
-#include "iolib.h"
-int fclose(FILE *f){
-	int error=0;
-	if(f->state==CLOSED) return EOF;
-	if(fflush(f)==EOF) error=EOF;
-	if(f->flags&BALLOC) free(f->buf);
-	if(!(f->flags&STRING) && sys_close(f->fd)<0) error=EOF;
-	f->state=CLOSED;
-	f->flags=0;
-	return error;
-}

+ 0 - 46
sys/src/lib/stdio/fdopen.c

@@ -1,46 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * Posix stdio -- fdopen
- */
-#include "iolib.h"
-/*
- * Open the named file with the given mode, using the given FILE
- * Legal modes are given below, `additional characters may follow these sequences':
- * r rb		open to read
- * w wb		open to write, truncating
- * a ab		open to write positioned at eof, creating if non-existant
- * r+ r+b rb+	open to read and write, creating if non-existant
- * w+ w+b wb+	open to read and write, truncating
- * a+ a+b ab+	open to read and write, positioned at eof, creating if non-existant.
- */
-FILE *fdopen(const int fd, const char *mode){
-	FILE *f;	
-	qlock(&_stdiolk);
-	for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++)
-		if(f->state==CLOSED)
-			break;
-	if(f==&_IO_stream[FOPEN_MAX]) {
-		qunlock(&_stdiolk);
-		return NULL;
-	}
-	f->fd=fd;
-	if(mode[0]=='a')
-		sys_seek(f->fd, 0L, 2);
-	if(f->fd==-1) return NULL;
-	f->flags=0;
-	f->state=OPEN;
-	f->buf=0;
-	f->rp=0;
-	f->wp=0;
-	f->lp=0;
-	qunlock(&_stdiolk);
-	return f;
-}

+ 0 - 16
sys/src/lib/stdio/feof.c

@@ -1,16 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- feof
- */
-#include "iolib.h"
-int feof(FILE *f){
-	return f->state==END;
-}

+ 0 - 16
sys/src/lib/stdio/ferror.c

@@ -1,16 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- ferror
- */
-#include "iolib.h"
-int ferror(FILE *f){
-	return f->state==ERR;
-}

+ 0 - 61
sys/src/lib/stdio/fflush.c

@@ -1,61 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fflush
- */
-#include "iolib.h"
-/*
- * pANS stdio -- data (put here, since loader won't load a separate file)
- */
-FILE _IO_stream[]={
-/*	fd	flags	state	buf	rp	wp	lp	bufl	unbuf */
-	0,	0,	OPEN,	0,	0,	0,	0,	0,	0,
-	1,	0,	OPEN,	0,	0,	0,	0,	0,	0,
-	2,	0,	OPEN,	0,	0,	0,	0,	0,	0,
-};
-
-int _fflush(FILE *f){
-	int error, cnt;
-
-	if(f==NULL){
-		error=0;
-		for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++)
-			if(f->state==WR && _fflush(f)==EOF)
-				error=EOF;
-		return error;
-	}
-	if(f->flags&STRING) return EOF;
-	switch(f->state){
-	default:	/* OPEN RDWR EOF RD */
-		return 0;
-	case CLOSED:
-	case ERR:
-		return EOF;
-	case WR:
-		cnt=(f->flags&LINEBUF?f->lp:f->wp)-f->buf;
-		if(cnt && jehanne_write(f->fd, f->buf, cnt)!=cnt){
-			f->state=ERR;
-			return EOF;
-		}
-		f->rp=f->wp=f->buf;
-		f->state=RDWR;
-		return 0;
-	}
-}
-
-int fflush(FILE *f)
-{
-	int r;
-
-	qlock(&_stdiolk);
-	r = _fflush(f);
-	qunlock(&_stdiolk);
-	return r;
-}

+ 0 - 16
sys/src/lib/stdio/fgetc.c

@@ -1,16 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fgetc
- */
-#include "iolib.h"
-int fgetc(FILE *f){
-	return getc(f);
-}

+ 0 - 17
sys/src/lib/stdio/fgetpos.c

@@ -1,17 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fgetpos
- */
-#include "iolib.h"
-int fgetpos(FILE *f, fpos_t *pos){
-	*pos=ftell(f);
-	return *pos==-1?-1:0;
-}

+ 0 - 27
sys/src/lib/stdio/fgets.c

@@ -1,27 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fgets
- */
-#include "iolib.h"
-char *fgets(char *as, int n, FILE *f){
-	int c;
-	char *s=as;
-	c = EOF;
-	while(n>1 && (c=getc(f))!=EOF){
-		*s++=c;
-		--n;
-		if(c=='\n') break;
-	}
-	if(c==EOF && s==as
-	|| ferror(f)) return NULL;
-	if(n) *s='\0';
-	return as;
-}

+ 0 - 19
sys/src/lib/stdio/fileno.c

@@ -1,19 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * Posix stdio -- fileno
- */
-#include "iolib.h"
-int fileno(FILE *f){
-	if(f==NULL)
-		return -1;
-	else
-		return f->fd;
-}

+ 0 - 25
sys/src/lib/stdio/fopen.c

@@ -1,25 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fopen
- */
-#include "iolib.h"
-FILE *fopen(const char *name, const char *mode){
-	FILE *f;
-	qlock(&_stdiolk);
-	for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++) {
-		if(f->state==CLOSED) {
-			qunlock(&_stdiolk);
-			return freopen(name, mode, f);
-		}
-	}
-	qunlock(&_stdiolk);
-	return NULL;
-}

+ 0 - 21
sys/src/lib/stdio/fprintf.c

@@ -1,21 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fprintf
- */
-#include "iolib.h"
-int fprintf(FILE *f, const char *fmt, ...){
-	int n;
-	va_list args;
-	va_start(args, fmt);
-	n=vfprintf(f, fmt, args);
-	va_end(args);
-	return n;
-}

+ 0 - 16
sys/src/lib/stdio/fputc.c

@@ -1,16 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fputc
- */
-#include "iolib.h"
-int fputc(int c, FILE *f){
-	return putc(c, f);	/* This can be made more fair to _IOLBF-mode streams */
-}

+ 0 - 17
sys/src/lib/stdio/fputs.c

@@ -1,17 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fputs
- */
-#include "iolib.h"
-int fputs(const char *s, FILE *f){
-	while(*s) putc(*s++, f);
-	return ferror(f)?EOF:0;
-}

+ 0 - 50
sys/src/lib/stdio/fread.c

@@ -1,50 +0,0 @@
-/*
- * This file is part of the UCB release of Plan 9. It is subject to the license
- * terms in the LICENSE file found in the top-level directory of this
- * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
- * part of the UCB release of Plan 9, including this file, may be copied,
- * modified, propagated, or distributed except according to the terms contained
- * in the LICENSE file.
- */
-
-/*
- * pANS stdio -- fread
- */
-#include "iolib.h"
-
-#define BIGN (BUFSIZ/2)
-
-int32_t fread(void *p, int32_t recl, int32_t nrec, FILE *f){
-	char *s;
-	int n, d, c;
-
-	s=(char *)p;
-	n=recl*nrec;
-	while(n>0){
-		d=f->wp-f->rp;
-		if(d>0){
-			if(d>n)
-				d=n;
-			memmove(s, f->rp, d);
-			f->rp+=d;
-		}else{
-			if(n >= BIGN && f->state==RD && !(f->flags&STRING) && f->buf!=f->unbuf){
-				d=jehanne_read(f->fd, s, n);
-				if(d<=0){
-					f->state=(d==0)?END:ERR;
-					goto ret;
-				}
-			}else{
- 				c=_IO_getc(f);
-				if(c==EOF)
-					goto ret;
-				*s=c;
-				d=1;
-			}
-		}
-		s+=d;
-		n-=d;
-	}
-    ret:
-	return (s-(char *)p)/(recl?recl:1);
-}

Some files were not shown because too many files changed in this diff